(svn r11036) [NoAI] -Sync: with trunk r10774:11035.
--- a/config.lib Sun Aug 19 14:04:13 2007 +0000
+++ b/config.lib Sun Sep 02 11:17:33 2007 +0000
@@ -308,11 +308,16 @@
# Check if all params have valid values
# Endian only allows AUTO, LE and, BE
- if [ -z "`echo $endian | egrep '^(AUTO|LE|BE)$'`" ]; then
+ if [ -z "`echo $endian | egrep '^(AUTO|LE|BE|PREPROCESSOR)$'`" ]; then
echo "configure: error: invalid option --endian=$endian"
echo " Available options are: --endian=[AUTO|LE|BE]"
exit 1
fi
+ if [ "$endian" = "PREPROCESSOR" ] && [ "$os" != "OSX" ]; then
+ echo "configure: error: invalid option --endian=$endian"
+ echo " PREPROCESSOR is only available for OSX"
+ exit 1
+ fi
# OS only allows DETECT, UNIX, OSX, FREEBSD, OPENBSD, MORPHOS, BEOS, SUNOS, CYGWIN, MINGW, OS2, WINCE, and PSP
if [ -z "`echo $os | egrep '^(DETECT|UNIX|OSX|FREEBSD|OPENBSD|MORPHOS|BEOS|SUNOS|CYGWIN|MINGW|OS2|WINCE|PSP)$'`" ]; then
echo "configure: error: invalid option --os=$os"
@@ -838,6 +843,14 @@
CFLAGS="$CFLAGS -fno-strict-aliasing"
fi
+ # GCC 4.2+ automatically assumes that signed overflows do
+ # not occur in signed arithmetics, whereas we are not
+ # sure that they will not happen. It furthermore complains
+ # about it's own optimized code in some places.
+ if [ $cc_version -ge 42 ]; then
+ CFLAGS="$CFLAGS -fno-strict-overflow"
+ fi
+
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"
--- a/src/ai/api/ai_company.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/ai/api/ai_company.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -12,7 +12,7 @@
AICompany::CompanyIndex AICompany::ResolveCompanyIndex(AICompany::CompanyIndex company)
{
- if (company == MY_COMPANY) return (CompanyIndex)_current_player;
+ if (company == MY_COMPANY) return (CompanyIndex)((byte)_current_player);
return (IsValidPlayer((PlayerID)company) && GetPlayer((PlayerID)company)->is_active) ? company : INVALID_COMPANY;
}
--- a/src/aircraft.h Sun Aug 19 14:04:13 2007 +0000
+++ b/src/aircraft.h Sun Sep 02 11:17:33 2007 +0000
@@ -7,6 +7,8 @@
#include "station_map.h"
#include "vehicle.h"
+#include "engine.h"
+#include "variables.h"
/** An aircraft can be one ot those types */
enum AircraftSubType {
@@ -31,25 +33,6 @@
return v->subtype <= AIR_AIRCRAFT;
}
-/** Check if this aircraft is in a hangar
- * @param v vehicle to check
- * @return true if in hangar
- */
-static inline bool IsAircraftInHangar(const Vehicle *v)
-{
- assert(v->type == VEH_AIRCRAFT);
- return v->vehstatus & VS_HIDDEN && IsHangarTile(v->tile);
-}
-
-/** Check if this aircraft is in a hangar and stopped
- * @param v vehicle to check
- * @return true if in hangar and stopped
- */
-static inline bool IsAircraftInHangarStopped(const Vehicle *v)
-{
- return IsAircraftInHangar(v) && v->vehstatus & VS_STOPPED;
-}
-
/** Checks if an aircraft is buildable at the tile in question
* @param engine The engine to test
* @param tile The tile where the hangar is
@@ -82,15 +65,6 @@
*/
void CcBuildAircraft(bool success, TileIndex tile, uint32 p1, uint32 p2);
-/**
- * This is the Callback method after the cloning attempt of an aircraft
- * @param success indicates completion (or not) of the operation
- * @param tile unused
- * @param p1 unused
- * @param p2 unused
- */
-void CcCloneAircraft(bool success, TileIndex tile, uint32 p1, uint32 p2);
-
/** Handle Aircraft specific tasks when a an Aircraft enters a hangar
* @param *v Vehicle that enters the hangar
*/
@@ -128,7 +102,7 @@
Aircraft() { this->type = VEH_AIRCRAFT; }
/** We want to 'destruct' the right class. */
- virtual ~Aircraft() {}
+ virtual ~Aircraft() { this->PreDestructor(); }
const char *GetTypeString() const { return "aircraft"; }
void MarkDirty();
@@ -137,6 +111,10 @@
WindowClass GetVehicleListWindowClass() const { return WC_AIRCRAFT_LIST; }
bool IsPrimaryVehicle() const { return IsNormalAircraft(this); }
int GetImage(Direction direction) const;
+ int GetDisplaySpeed() const { return this->cur_speed * 10 / 16; }
+ int GetDisplayMaxSpeed() const { return this->max_speed * 10 / 16; }
+ Money GetRunningCost() const { return AircraftVehInfo(this->engine_type)->running_cost * _price.aircraft_running; }
+ bool IsInDepot() const { return (this->vehstatus & VS_HIDDEN) != 0 && IsHangarTile(this->tile); }
void Tick();
};
--- a/src/aircraft_cmd.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/aircraft_cmd.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -172,7 +172,7 @@
{
assert(v->subtype == AIR_HELICOPTER);
- const Vehicle *w = v->next->next;
+ const Vehicle *w = v->Next()->Next();
if (is_custom_sprite(v->spritenum)) {
SpriteID spritenum = GetCustomRotorSprite(v, false);
if (spritenum != 0) return spritenum;
@@ -406,7 +406,7 @@
v->u.air.state = HANGAR;
v->u.air.previous_pos = v->u.air.pos;
v->u.air.targetairport = GetStationIndex(tile);
- v->next = u;
+ v->SetNext(u);
v->service_interval = _patches.servint_aircraft;
@@ -430,8 +430,6 @@
if (v->subtype == AIR_HELICOPTER) {
Vehicle *w = vl[2];
- u->next = w;
-
w = new (w) Aircraft();
w->direction = DIR_N;
w->owner = _current_player;
@@ -446,6 +444,8 @@
/* Use rotor's air.state to store the rotor animation frame */
w->u.air.state = HRS_ROTOR_STOPPED;
w->UpdateDeltaXY(INVALID_DIR);
+
+ u->SetNext(w);
VehiclePositionChanged(w);
}
@@ -453,7 +453,7 @@
RebuildVehicleLists();
InvalidateWindow(WC_COMPANY, v->owner);
if (IsLocalPlayer())
- InvalidateAutoreplaceWindow(VEH_AIRCRAFT, v->group_id); //updates the replace Aircraft window
+ InvalidateAutoreplaceWindow(v->engine_type, v->group_id); //updates the replace Aircraft window
GetPlayer(_current_player)->num_engines[p1]++;
}
@@ -486,7 +486,7 @@
Vehicle *v = GetVehicle(p1);
if (v->type != VEH_AIRCRAFT || !CheckOwnership(v->owner)) return CMD_ERROR;
- if (!IsAircraftInHangarStopped(v)) return_cmd_error(STR_A01B_AIRCRAFT_MUST_BE_STOPPED);
+ if (!v->IsStoppedInDepot()) return_cmd_error(STR_A01B_AIRCRAFT_MUST_BE_STOPPED);
SET_EXPENSES_TYPE(EXPENSES_NEW_VEHICLES);
@@ -527,7 +527,7 @@
}
if (flags & DC_EXEC) {
- if (IsAircraftInHangarStopped(v)) {
+ if (v->IsStoppedInDepot()) {
DeleteVehicleNews(p1, STR_A014_AIRCRAFT_IS_WAITING_IN);
}
@@ -561,7 +561,7 @@
Vehicle *v = GetVehicle(p1);
- if (v->type != VEH_AIRCRAFT || !CheckOwnership(v->owner) || IsAircraftInHangar(v)) return CMD_ERROR;
+ if (v->type != VEH_AIRCRAFT || !CheckOwnership(v->owner) || v->IsInDepot()) return CMD_ERROR;
if (v->current_order.type == OT_GOTO_DEPOT && !(p2 & DEPOT_LOCATE_HANGAR)) {
if (!!(p2 & DEPOT_SERVICE) == HASBIT(v->current_order.flags, OFB_HALT_IN_DEPOT)) {
@@ -635,7 +635,7 @@
Vehicle *v = GetVehicle(p1);
if (v->type != VEH_AIRCRAFT || !CheckOwnership(v->owner)) return CMD_ERROR;
- if (!IsAircraftInHangarStopped(v)) return_cmd_error(STR_A01B_AIRCRAFT_MUST_BE_STOPPED);
+ if (!v->IsStoppedInDepot()) return_cmd_error(STR_A01B_AIRCRAFT_MUST_BE_STOPPED);
/* Check cargo */
CargoID new_cid = GB(p2, 0, 8);
@@ -679,7 +679,7 @@
if (flags & DC_EXEC) {
v->cargo_cap = pass;
- Vehicle *u = v->next;
+ Vehicle *u = v->Next();
uint mail = IsCargoInClass(new_cid, CC_PASSENGERS) ? avi->mail_capacity : 0;
u->cargo_cap = mail;
v->cargo.Truncate(v->cargo_type == new_cid ? pass : 0);
@@ -697,17 +697,8 @@
static void CheckIfAircraftNeedsService(Vehicle *v)
{
- if (_patches.servint_aircraft == 0) return;
- if (!VehicleNeedsService(v)) return;
- if (v->vehstatus & VS_STOPPED) return;
-
- if (v->current_order.type == OT_GOTO_DEPOT &&
- v->current_order.flags & OF_HALT_IN_DEPOT)
- return;
-
- if (_patches.gotodepot && VehicleHasDepotOrders(v)) return;
-
- if (IsAircraftInHangar(v)) {
+ if (_patches.servint_aircraft == 0 || !VehicleNeedsService(v)) return;
+ if (v->IsInDepot()) {
VehicleServiceInDepot(v);
return;
}
@@ -717,7 +708,6 @@
if (st->IsValid() && st->airport_tile != 0 && st->Airport()->terminals != NULL) {
// printf("targetairport = %d, st->index = %d\n", v->u.air.targetairport, st->index);
// v->u.air.targetairport = st->index;
- if (v->current_order.type == OT_LOADING) v->LeaveStation();
v->current_order.type = OT_GOTO_DEPOT;
v->current_order.flags = OF_NON_STOP;
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
@@ -772,13 +762,13 @@
do {
v->cargo.AgeCargo();
- v = v->next;
+ v = v->Next();
} while (v != NULL);
}
static void HelicopterTickHandler(Vehicle *v)
{
- Vehicle *u = v->next->next;
+ Vehicle *u = v->Next()->Next();
if (u->vehstatus & VS_HIDDEN) return;
@@ -830,13 +820,13 @@
v->z_pos = z;
v->cur_image = v->GetImage(v->direction);
- if (v->subtype == AIR_HELICOPTER) v->next->next->cur_image = GetRotorImage(v);
+ if (v->subtype == AIR_HELICOPTER) v->Next()->Next()->cur_image = GetRotorImage(v);
BeginVehicleMove(v);
VehiclePositionChanged(v);
EndVehicleMove(v);
- Vehicle *u = v->next;
+ Vehicle *u = v->Next();
int safe_x = clamp(x, 0, MapMaxX() * TILE_SIZE);
int safe_y = clamp(y - 1, 0, MapMaxY() * TILE_SIZE);
@@ -851,7 +841,7 @@
VehiclePositionChanged(u);
EndVehicleMove(u);
- u = u->next;
+ u = u->Next();
if (u != NULL) {
u->x_pos = x;
u->y_pos = y;
@@ -871,9 +861,9 @@
v->subspeed = 0;
v->progress = 0;
- Vehicle *u = v->next;
+ Vehicle *u = v->Next();
u->vehstatus |= VS_HIDDEN;
- u = u->next;
+ u = u->Next();
if (u != NULL) {
u->vehstatus |= VS_HIDDEN;
u->cur_speed = 0;
@@ -1058,7 +1048,7 @@
/* Helicopter raise */
if (amd->flag & AMED_HELI_RAISE) {
- Vehicle *u = v->next->next;
+ Vehicle *u = v->Next()->Next();
/* Make sure the rotors don't rotate too fast */
if (u->cur_speed > 32) {
@@ -1102,7 +1092,7 @@
int z = GetSlopeZ(x, y) + 1 + afc->delta_z;
if (z == v->z_pos) {
- Vehicle *u = v->next->next;
+ Vehicle *u = v->Next()->Next();
/* Increase speed of rotors. When speed is 80, we've landed. */
if (u->cur_speed >= 80) return true;
@@ -1412,7 +1402,7 @@
void Aircraft::MarkDirty()
{
this->cur_image = this->GetImage(this->direction);
- if (this->subtype == AIR_HELICOPTER) this->next->next->cur_image = GetRotorImage(this);
+ if (this->subtype == AIR_HELICOPTER) this->Next()->Next()->cur_image = GetRotorImage(this);
MarkAllViewportsDirty(this->left_coord, this->top_coord, this->right_coord + 1, this->bottom_coord + 1);
}
@@ -1430,7 +1420,7 @@
SetDParam(0, amt);
v->cargo.Truncate(0);
- v->next->cargo.Truncate(0);
+ v->Next()->cargo.Truncate(0);
const Station *st = GetStation(v->u.air.targetairport);
StringID newsitem;
if (st->airport_tile == 0) {
@@ -1530,11 +1520,11 @@
v->direction = DIR_SE;
v->vehstatus &= ~VS_HIDDEN;
{
- Vehicle *u = v->next;
+ Vehicle *u = v->Next();
u->vehstatus &= ~VS_HIDDEN;
/* Rotor blades */
- u = u->next;
+ u = u->Next();
if (u != NULL) {
u->vehstatus &= ~VS_HIDDEN;
u->cur_speed = 80;
@@ -2158,7 +2148,7 @@
v_oldstyle->tile = 0; // aircraft in air is tile=0
/* correct speed of helicopter-rotors */
- if (v_oldstyle->subtype == AIR_HELICOPTER) v_oldstyle->next->next->cur_speed = 32;
+ if (v_oldstyle->subtype == AIR_HELICOPTER) v_oldstyle->Next()->Next()->cur_speed = 32;
/* set new position x,y,z */
SetAircraftPosition(v_oldstyle, gp.x, gp.y, GetAircraftFlyingAltitude(v_oldstyle));
--- a/src/aircraft_gui.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/aircraft_gui.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -53,22 +53,10 @@
_backup_orders_tile = 0;
RestoreVehicleOrders(v, _backup_orders_data);
}
- ShowAircraftViewWindow(v);
+ ShowVehicleViewWindow(v);
}
}
-/**
- * This is the Callback method after the cloning attempt of an aircraft
- * @param success indicates completion (or not) of the operation
- * @param tile unused
- * @param p1 unused
- * @param p2 unused
- */
-void CcCloneAircraft(bool success, TileIndex tile, uint32 p1, uint32 p2)
-{
- if (success) ShowAircraftViewWindow(GetVehicle(_new_vehicle_id));
-}
-
static void AircraftDetailsWndProc(Window *w, WindowEvent *e)
{
switch (e->event) {
@@ -92,13 +80,13 @@
SetDParam(0, (v->age + 365 < v->max_age) ? STR_AGE : STR_AGE_RED);
SetDParam(2, v->max_age / 366);
- SetDParam(3, _price.aircraft_running * AircraftVehInfo(v->engine_type)->running_cost >> 8);
+ SetDParam(3, v->GetDisplayRunningCost());
DrawString(2, 15, STR_A00D_AGE_RUNNING_COST_YR, 0);
}
/* Draw max speed */
{
- SetDParam(0, v->max_speed * 10 / 16);
+ SetDParam(0, v->GetDisplayMaxSpeed());
DrawString(2, 25, STR_A00E_MAX_SPEED, 0);
}
@@ -145,7 +133,7 @@
SetDParam(0, v->cargo_type);
SetDParam(1, v->cargo_cap);
- u = v->next;
+ u = v->Next();
SetDParam(2, u->cargo_type);
SetDParam(3, u->cargo_cap);
DrawString(60, y, (u->cargo_cap != 0) ? STR_A019_CAPACITY : STR_A01A_CAPACITY, 0);
@@ -163,7 +151,7 @@
y += 10;
}
- } while ( (v=v->next) != NULL);
+ } while ((v = v->Next()) != NULL);
}
} break;
@@ -224,7 +212,7 @@
};
-static void ShowAircraftDetailsWindow(const Vehicle *v)
+void ShowAircraftDetailsWindow(const Vehicle *v)
{
Window *w;
VehicleID veh = v->index;
@@ -237,163 +225,3 @@
// w->vscroll.cap = 6;
// w->traindetails_d.tab = 0;
}
-
-
-static const Widget _aircraft_view_widgets[] = {
-{ WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW },
-{ WWT_CAPTION, RESIZE_RIGHT, 14, 11, 237, 0, 13, STR_A00A, STR_018C_WINDOW_TITLE_DRAG_THIS },
-{ WWT_STICKYBOX, RESIZE_LR, 14, 238, 249, 0, 13, 0x0, STR_STICKY_BUTTON },
-{ WWT_PANEL, RESIZE_RB, 14, 0, 231, 14, 103, 0x0, STR_NULL },
-{ WWT_INSET, RESIZE_RB, 14, 2, 229, 16, 101, 0x0, STR_NULL },
-{ WWT_PUSHBTN, RESIZE_RTB, 14, 0, 237, 104, 115, 0x0, STR_A027_CURRENT_AIRCRAFT_ACTION },
-{ WWT_PUSHIMGBTN, RESIZE_LR, 14, 232, 249, 14, 31, SPR_CENTRE_VIEW_VEHICLE, STR_A029_CENTER_MAIN_VIEW_ON_AIRCRAFT },
-{ WWT_PUSHIMGBTN, RESIZE_LR, 14, 232, 249, 32, 49, SPR_SEND_AIRCRAFT_TODEPOT,STR_A02A_SEND_AIRCRAFT_TO_HANGAR },
-{ WWT_PUSHIMGBTN, RESIZE_LR, 14, 232, 249, 50, 67, SPR_REFIT_VEHICLE, STR_A03B_REFIT_AIRCRAFT_TO_CARRY },
-{ WWT_PUSHIMGBTN, RESIZE_LR, 14, 232, 249, 68, 85, SPR_SHOW_ORDERS, STR_A028_SHOW_AIRCRAFT_S_ORDERS },
-{ WWT_PUSHIMGBTN, RESIZE_LR, 14, 232, 249, 86, 103, SPR_SHOW_VEHICLE_DETAILS, STR_A02B_SHOW_AIRCRAFT_DETAILS },
-{ WWT_PUSHIMGBTN, RESIZE_LR, 14, 232, 249, 32, 49, SPR_CLONE_AIRCRAFT, STR_CLONE_AIRCRAFT_INFO },
-{ WWT_PANEL, RESIZE_LRB, 14, 232, 249, 104, 103, 0x0, STR_NULL },
-{ WWT_RESIZEBOX, RESIZE_LRTB, 14, 238, 249, 104, 115, 0x0, STR_NULL },
-{ WIDGETS_END},
-};
-
-
-static void AircraftViewWndProc(Window *w, WindowEvent *e)
-{
- switch (e->event) {
- case WE_PAINT: {
- const Vehicle *v = GetVehicle(w->window_number);
- StringID str;
- bool is_localplayer = v->owner == _local_player;
-
- SetWindowWidgetDisabledState(w, 7, !is_localplayer);
- SetWindowWidgetDisabledState(w, 8, !IsAircraftInHangarStopped(v) || !is_localplayer);
- SetWindowWidgetDisabledState(w, 11, !is_localplayer);
-
-
- /* draw widgets & caption */
- SetDParam(0, v->index);
- DrawWindowWidgets(w);
-
- if (v->vehstatus & VS_CRASHED) {
- str = STR_8863_CRASHED;
- } else if (v->vehstatus & VS_STOPPED) {
- str = STR_8861_STOPPED;
- } else {
- switch (v->current_order.type) {
- case OT_GOTO_STATION: {
- SetDParam(0, v->current_order.dest);
- SetDParam(1, v->cur_speed * 10 / 16);
- str = STR_HEADING_FOR_STATION + _patches.vehicle_speed;
- } break;
-
- case OT_GOTO_DEPOT: {
- /* Aircrafts always go to a station, even if you say depot */
- SetDParam(0, v->current_order.dest);
- SetDParam(1, v->cur_speed * 10 / 16);
- if (HASBIT(v->current_order.flags, OFB_HALT_IN_DEPOT) && !HASBIT(v->current_order.flags, OFB_PART_OF_ORDERS)) {
- str = STR_HEADING_FOR_HANGAR + _patches.vehicle_speed;
- } else {
- str = STR_HEADING_FOR_HANGAR_SERVICE + _patches.vehicle_speed;
- }
- } break;
-
- case OT_LOADING:
- str = STR_882F_LOADING_UNLOADING;
- break;
-
- default:
- if (v->num_orders == 0) {
- str = STR_NO_ORDERS + _patches.vehicle_speed;
- SetDParam(0, v->cur_speed * 10 / 16);
- } else {
- str = STR_EMPTY;
- }
- break;
- }
- }
-
- /* draw the flag plus orders */
- DrawSprite(v->vehstatus & VS_STOPPED ? SPR_FLAG_VEH_STOPPED : SPR_FLAG_VEH_RUNNING, PAL_NONE, 2, w->widget[5].top + 1);
- DrawStringCenteredTruncated(w->widget[5].left + 8, w->widget[5].right, w->widget[5].top + 1, str, 0);
- DrawWindowViewport(w);
- } break;
-
- case WE_CLICK: {
- const Vehicle *v = GetVehicle(w->window_number);
-
- switch (e->we.click.widget) {
- case 5: /* start stop */
- DoCommandP(v->tile, v->index, 0, NULL, CMD_START_STOP_AIRCRAFT | CMD_MSG(STR_A016_CAN_T_STOP_START_AIRCRAFT));
- break;
- case 6: /* center main view */
- ScrollMainWindowTo(v->x_pos, v->y_pos);
- break;
- case 7: /* goto hangar */
- DoCommandP(v->tile, v->index, _ctrl_pressed ? DEPOT_SERVICE : 0, NULL, CMD_SEND_AIRCRAFT_TO_HANGAR | CMD_MSG(STR_A012_CAN_T_SEND_AIRCRAFT_TO));
- break;
- case 8: /* refit */
- ShowVehicleRefitWindow(v, INVALID_VEH_ORDER_ID);
- break;
- case 9: /* show orders */
- ShowOrdersWindow(v);
- break;
- case 10: /* show details */
- ShowAircraftDetailsWindow(v);
- break;
- case 11:
- /* clone vehicle */
- DoCommandP(v->tile, v->index, _ctrl_pressed ? 1 : 0, CcCloneAircraft, CMD_CLONE_VEHICLE | CMD_MSG(STR_A008_CAN_T_BUILD_AIRCRAFT));
- break;
- }
- } break;
-
- case WE_RESIZE:
- w->viewport->width += e->we.sizing.diff.x;
- w->viewport->height += e->we.sizing.diff.y;
- w->viewport->virtual_width += e->we.sizing.diff.x;
- w->viewport->virtual_height += e->we.sizing.diff.y;
- break;
-
- case WE_DESTROY:
- 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: {
- const Vehicle *v = GetVehicle(w->window_number);
- bool plane_stopped = IsAircraftInHangarStopped(v);
-
- /* Widget 7 (send to hangar) must be hidden if the plane is already stopped in hangar.
- * Widget 11 (clone) should then be shown, since cloning is allowed only while in hangar and stopped.
- * This sytem allows to have two buttons, on top of each other*/
- if (plane_stopped != IsWindowWidgetHidden(w, 7) || plane_stopped == IsWindowWidgetHidden(w, 11)) {
- SetWindowWidgetHiddenState(w, 7, plane_stopped); // send to hangar
- SetWindowWidgetHiddenState(w, 11, !plane_stopped); // clone
- SetWindowDirty(w);
- }
- } break;
- }
-}
-
-
-static const WindowDesc _aircraft_view_desc = {
- WDP_AUTO, WDP_AUTO, 250, 116, 250, 116,
- WC_VEHICLE_VIEW, WC_NONE,
- WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE,
- _aircraft_view_widgets,
- AircraftViewWndProc
-};
-
-
-void ShowAircraftViewWindow(const Vehicle *v)
-{
- Window *w = AllocateWindowDescFront(&_aircraft_view_desc, v->index);
-
- if (w != NULL) {
- w->caption_color = v->owner;
- AssignWindowViewport(w, 3, 17, 0xE2, 0x54, w->window_number | (1 << 31), ZOOM_LVL_AIRCRAFT);
- }
-}
--- a/src/articulated_vehicles.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/articulated_vehicles.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -41,11 +41,12 @@
/* Attempt to use pre-allocated vehicles until they run out. This can happen
* if the callback returns different values depending on the cargo type. */
- u->next = vl[i];
- if (u->next == NULL) u->next = new InvalidVehicle();
- if (u->next == NULL) return;
+ u->SetNext(vl[i]);
+ if (u->Next() == NULL) u->SetNext(new InvalidVehicle());
+ if (u->Next() == NULL) return;
- u = u->next;
+ Vehicle *previous = u;
+ u = u->Next();
EngineID engine_type = GetFirstEngineOfType(type) + GB(callback, 0, 7);
bool flip_image = HASBIT(callback, 7);
@@ -106,6 +107,8 @@
} break;
}
+ previous->SetNext(u);
+
if (flip_image) u->spritenum++;
VehiclePositionChanged(u);
--- a/src/autoreplace_cmd.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/autoreplace_cmd.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -42,9 +42,9 @@
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);
+ } while ((source = source->Next()) != NULL);
/*
* The of the train will be incorrect at this moment. This is due
@@ -52,7 +52,7 @@
* the complete train, which is without the weight of cargo we just
* moved back into some (of the) new wagon(s).
*/
- if (dest->type == VEH_TRAIN) TrainConsistChanged(dest->first);
+ if (dest->type == VEH_TRAIN) TrainConsistChanged(dest->First());
}
static bool VerifyAutoreplaceRefitForOrders(const Vehicle *v, const EngineID engine_type)
@@ -61,7 +61,7 @@
const Vehicle *u;
if (v->type == VEH_TRAIN) {
- u = GetFirstVehicleInChain(v);
+ u = v->First();
} else {
u = v;
}
@@ -104,13 +104,13 @@
/* the old engine didn't have cargo capacity, but the new one does
* now we will figure out what cargo the train is carrying and refit to fit this */
- v = GetFirstVehicleInChain(v);
+ v = v->First();
do {
if (v->cargo_cap == 0) continue;
/* Now we found a cargo type being carried on the train and we will see if it is possible to carry to this one */
if (v->cargo_type == new_cargo_type) return CT_NO_REFIT;
if (CanRefitTo(engine_type, v->cargo_type)) return v->cargo_type;
- } while ((v = v->next) != NULL);
+ } while ((v = v->Next()) != NULL);
return CT_NO_REFIT; // We failed to find a cargo type on the old vehicle and we will not refit the new one
}
@@ -189,7 +189,7 @@
}
}
- if (new_v->type == VEH_TRAIN && HASBIT(old_v->u.rail.flags, VRF_REVERSE_DIRECTION) && !IsMultiheaded(new_v) && !(new_v->next != NULL && IsArticulatedPart(new_v->next))) {
+ if (new_v->type == VEH_TRAIN && HASBIT(old_v->u.rail.flags, VRF_REVERSE_DIRECTION) && !IsMultiheaded(new_v) && !(new_v->Next() != NULL && IsArticulatedPart(new_v->Next()))) {
// we are autorenewing to a single engine, so we will turn it as the old one was turned as well
SETBIT(new_v->u.rail.flags, VRF_REVERSE_DIRECTION);
}
@@ -200,9 +200,9 @@
* sell the old engine in a moment
*/
/* Get the vehicle in front of the one we move out */
- Vehicle *front = GetPrevVehicleInChain(old_v);
+ Vehicle *front = old_v->Previous();
/* If the vehicle in front is the rear end of a dualheaded engine, then we need to use the one in front of that one */
- if (IsMultiheaded(front) && !IsTrainEngine(front)) front = GetPrevVehicleInChain(front);
+ if (IsMultiheaded(front) && !IsTrainEngine(front)) front = front->Previous();
/* Now we move the old one out of the train */
DoCommand(0, (INVALID_VEHICLE << 16) | old_v->index, 0, DC_EXEC, CMD_MOVE_RAIL_VEHICLE);
/* Add the new vehicle */
@@ -236,7 +236,7 @@
}
}
/* We are done setting up the new vehicle. Now we move the cargo from the old one to the new one */
- MoveVehicleCargo(new_v->type == VEH_TRAIN ? GetFirstVehicleInChain(new_v) : new_v, old_v);
+ MoveVehicleCargo(new_v->type == VEH_TRAIN ? new_v->First() : new_v, old_v);
// Get the name of the old vehicle if it has a custom name.
if (!IsCustomName(old_v->string_id)) {
@@ -247,12 +247,12 @@
}
} else { // flags & DC_EXEC not set
CommandCost tmp_move;
- if (old_v->type == VEH_TRAIN && IsFrontEngine(old_v) && old_v->next != NULL) {
+ if (old_v->type == VEH_TRAIN && IsFrontEngine(old_v) && old_v->Next() != NULL) {
/* Verify that the wagons can be placed on the engine in question.
* This is done by building an engine, test if the wagons can be added and then sell the test engine. */
DoCommand(old_v->tile, new_engine_type, 3, DC_EXEC, GetCmdBuildVeh(old_v));
Vehicle *temp = GetVehicle(_new_vehicle_id);
- tmp_move = DoCommand(0, (temp->index << 16) | old_v->next->index, 1, 0, CMD_MOVE_RAIL_VEHICLE);
+ tmp_move = DoCommand(0, (temp->index << 16) | old_v->Next()->index, 1, 0, CMD_MOVE_RAIL_VEHICLE);
DoCommand(0, temp->index, 0, DC_EXEC, GetCmdSellVeh(old_v));
}
--- a/src/autoreplace_gui.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/autoreplace_gui.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -49,7 +49,7 @@
{
Player *p = GetPlayer(_local_player);
byte type = GetEngine(e)->type;
- uint num_engines = GetGroupNumEngines(id_g, e);
+ uint num_engines = GetGroupNumEngines(_local_player, id_g, e);
if (num_engines == 0 || p->num_engines[e] == 0) {
/* We don't have any of this engine type.
@@ -154,7 +154,7 @@
if (draw_left) {
const GroupID selected_group = WP(w, replaceveh_d).sel_group;
- const uint num_engines = GetGroupNumEngines(selected_group, e);
+ const uint num_engines = GetGroupNumEngines(_local_player, selected_group, e);
/* Skip drawing the engines we don't have any of and haven't set for replacement */
if (num_engines == 0 && EngineReplacementForPlayer(GetPlayer(_local_player), e, selected_group) == INVALID_ENGINE) continue;
--- a/src/blitter/32bpp_base.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/blitter/32bpp_base.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -56,7 +56,7 @@
stepx = 1;
}
- this->SetPixel(video, x, y, color);
+ if (x > 0 && y > 0 && x < screen_width && y < screen_height) this->SetPixel(video, x, y, color);
if (dx > dy) {
frac = dy - (dx / 2);
while (x != x2) {
--- a/src/blitter/8bpp_base.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/blitter/8bpp_base.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -60,7 +60,7 @@
stepx = 1;
}
- this->SetPixel(video, x, y, color);
+ if (x > 0 && y > 0 && x < screen_width && y < screen_height) this->SetPixel(video, x, y, color);
if (dx > dy) {
frac = dy - (dx / 2);
while (x != x2) {
--- a/src/build_vehicle_gui.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/build_vehicle_gui.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -853,7 +853,8 @@
for (; min < max; min++, y += step_size) {
const EngineID engine = eng_list[min];
- const uint num_engines = GetGroupNumEngines(selected_group, engine);
+ /* Note: num_engines is only used in the autoreplace GUI, so it is correct to use _local_player here. */
+ const uint num_engines = GetGroupNumEngines(_local_player, selected_group, engine);
SetDParam(0, engine);
DrawString(x + x_offset, y, STR_ENGINE_NAME, engine == selected_id ? 0xC : 0x10);
--- a/src/callback_table.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/callback_table.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -13,7 +13,6 @@
/* aircraft_gui.cpp */
CommandCallback CcBuildAircraft;
-CommandCallback CcCloneAircraft;
/* airport_gui.cpp */
CommandCallback CcBuildAirport;
@@ -48,16 +47,13 @@
/* roadveh_gui.cpp */
CommandCallback CcBuildRoadVeh;
-CommandCallback CcCloneRoadVeh;
/* ship_gui.cpp */
CommandCallback CcBuildShip;
-CommandCallback CcCloneShip;
/* train_gui.cpp */
CommandCallback CcBuildWagon;
CommandCallback CcBuildLoco;
-CommandCallback CcCloneTrain;
/* ai/ai.cpp */
CommandCallback CcAI;
@@ -84,13 +80,9 @@
/* 0x12 */ CcPlaySound1E,
/* 0x13 */ CcStation,
/* 0x14 */ CcTerraform,
- /* 0x15 */ CcCloneAircraft,
- /* 0x16 */ CcCloneRoadVeh,
- /* 0x17 */ CcCloneShip,
- /* 0x18 */ CcCloneTrain,
- /* 0x19 */ CcAI,
- /* 0x1A */ CcCloneVehicle,
- /* 0x1B */ CcGiveMoney,
+ /* 0x15 */ CcAI,
+ /* 0x16 */ CcCloneVehicle,
+ /* 0x17 */ CcGiveMoney,
};
const int _callback_table_count = lengthof(_callback_table);
--- a/src/cargopacket.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/cargopacket.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -16,9 +16,6 @@
/* Clean the cargo packet pool and create 1 block in it */
_CargoPacket_pool.CleanPool();
_CargoPacket_pool.AddBlockToPool();
-
- /* Check whether our &cargolist == &cargolist.packets "hack" works */
- CargoList::AssertOnWrongPacketOffset();
}
CargoPacket::CargoPacket(StationID source, uint16 count)
@@ -87,13 +84,6 @@
*
*/
-/* static */ void CargoList::AssertOnWrongPacketOffset()
-{
- CargoList cl;
- if ((void*)&cl != (void*)cl.Packets()) NOT_REACHED();
-}
-
-
CargoList::~CargoList()
{
while (!packets.empty()) {
--- a/src/cargopacket.h Sun Aug 19 14:04:13 2007 +0000
+++ b/src/cargopacket.h Sun Sep 02 11:17:33 2007 +0000
@@ -43,7 +43,7 @@
* Is this a valid cargo packet ?
* @return true if and only it is valid
*/
- bool IsValid() const { return this->count != 0; }
+ inline bool IsValid() const { return this->count != 0; }
/**
* Checks whether the cargo packet is from (exactly) the same source
@@ -67,6 +67,8 @@
*/
#define FOR_ALL_CARGOPACKETS(cp) FOR_ALL_CARGOPACKETS_FROM(cp, 0)
+extern void SaveLoad_STNS(Station *st);
+
/**
* Simple collection class for a list of cargo packets
*/
@@ -93,21 +95,7 @@
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();
+ friend void SaveLoad_STNS(Station *st);
/** Create the cargo list */
CargoList() { this->InvalidateCache(); }
--- a/src/clear_cmd.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/clear_cmd.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -24,41 +24,40 @@
#include "industry.h"
#include "water_map.h"
+/*
+ * In one terraforming command all four corners of a initial tile can be raised/lowered (though this is not available to the player).
+ * The maximal amount of height modifications is archieved when raising a complete flat land from sea level to MAX_TILE_HEIGHT or vice versa.
+ * This affects all corners with a manhatten distance smaller than MAX_TILE_HEIGHT to one of the initial 4 corners.
+ * Their maximal amount is computed to 4 * \sum_{i=1}^{h_max} i = 2 * h_max * (h_max + 1).
+ */
+static const int TERRAFORMER_MODHEIGHT_SIZE = 2 * MAX_TILE_HEIGHT * (MAX_TILE_HEIGHT + 1);
+
+/*
+ * The maximal amount of affected tiles (i.e. the tiles that incident with one of the corners above, is computed similiar to
+ * 1 + 4 * \sum_{i=1}^{h_max} (i+1) = 1 + 2 * h_max + (h_max + 3).
+ */
+static const int TERRAFORMER_TILE_TABLE_SIZE = 1 + 2 * MAX_TILE_HEIGHT * (MAX_TILE_HEIGHT + 3);
+
struct TerraformerHeightMod {
- TileIndex tile;
- byte height;
+ TileIndex tile; ///< Referenced tile.
+ byte height; ///< New TileHeight (height of north corner) of the tile.
};
struct TerraformerState {
- int height[4];
- uint32 flags;
+ int modheight_count; ///< amount of entries in "modheight".
+ int tile_table_count; ///< amount of entries in "tile_table".
- int direction;
- int modheight_count;
- int tile_table_count;
-
- CommandCost cost;
-
- TileIndex *tile_table;
- TerraformerHeightMod *modheight;
-
+ TileIndex tile_table[TERRAFORMER_TILE_TABLE_SIZE]; ///< Dirty tiles, i.e. at least one corner changed.
+ TerraformerHeightMod modheight[TERRAFORMER_MODHEIGHT_SIZE]; ///< Height modifications.
};
-static int TerraformAllowTileProcess(TerraformerState *ts, TileIndex tile)
-{
- TileIndex *t;
- int count;
-
- if (TileX(tile) == MapMaxX() || TileY(tile) == MapMaxY()) return -1;
-
- t = ts->tile_table;
- for (count = ts->tile_table_count; count != 0; count--, t++) {
- if (*t == tile) return 0;
- }
-
- return 1;
-}
-
+/**
+ * Gets the TileHeight (height of north corner) of a tile as of current terraforming progress.
+ *
+ * @param ts TerraformerState.
+ * @param tile Tile.
+ * @return TileHeight.
+ */
static int TerraformGetHeightOfTile(TerraformerState *ts, TileIndex tile)
{
TerraformerHeightMod *mod = ts->modheight;
@@ -68,9 +67,46 @@
if (mod->tile == tile) return mod->height;
}
+ /* TileHeight unchanged so far, read value from map. */
return TileHeight(tile);
}
+/**
+ * Stores the TileHeight (height of north corner) of a tile in a TerraformerState.
+ *
+ * @param ts TerraformerState.
+ * @param tile Tile.
+ * @param height New TileHeight.
+ */
+static void TerraformSetHeightOfTile(TerraformerState *ts, TileIndex tile, int height)
+{
+ /* Find tile in the "modheight" table.
+ * Note: In a normal user-terraform command the tile will not be found in the "modheight" table.
+ * But during house- or industry-construction multiple corners can be terraformed at once. */
+ TerraformerHeightMod *mod = ts->modheight;
+ int count = ts->modheight_count;
+ while ((count > 0) && (mod->tile != tile)) {
+ mod++;
+ count--;
+ }
+
+ /* New entry? */
+ if (count == 0) {
+ assert(ts->modheight_count < TERRAFORMER_MODHEIGHT_SIZE);
+ ts->modheight_count++;
+ }
+
+ /* Finally store the new value */
+ mod->tile = tile;
+ mod->height = (byte)height;
+}
+
+/**
+ * Adds a tile to the "tile_table" in a TerraformerState.
+ *
+ * @param ts TerraformerState.
+ * @param tile Tile.
+ */
static void TerraformAddDirtyTile(TerraformerState *ts, TileIndex tile)
{
int count;
@@ -78,15 +114,21 @@
count = ts->tile_table_count;
- if (count >= 625) return;
-
for (t = ts->tile_table; count != 0; count--, t++) {
if (*t == tile) return;
}
+ assert(ts->tile_table_count < TERRAFORMER_TILE_TABLE_SIZE);
+
ts->tile_table[ts->tile_table_count++] = tile;
}
+/**
+ * Adds all tiles that incident with the north corner of a specific tile to the "tile_table" in a TerraformerState.
+ *
+ * @param ts TerraformerState.
+ * @param tile Tile.
+ */
static void TerraformAddDirtyTileAround(TerraformerState *ts, TileIndex tile)
{
TerraformAddDirtyTile(ts, tile + TileDiffXY( 0, -1));
@@ -95,242 +137,184 @@
TerraformAddDirtyTile(ts, tile);
}
-static int TerraformProc(TerraformerState *ts, TileIndex tile, int mode)
+/**
+ * Terraform the north corner of a tile to a specific height.
+ *
+ * @param ts TerraformerState.
+ * @param tile Tile.
+ * @param height Aimed height.
+ * @param return Error code or cost.
+ */
+static CommandCost TerraformTileHeight(TerraformerState *ts, TileIndex tile, int height)
{
- int r;
- CommandCost ret;
+ CommandCost total_cost = CommandCost();
assert(tile < MapSize());
- r = TerraformAllowTileProcess(ts, tile);
- if (r <= 0) return r;
-
- if (IsTileType(tile, MP_RAILWAY)) {
- static const TrackBits safe_track[] = { TRACK_BIT_LOWER, TRACK_BIT_LEFT, TRACK_BIT_UPPER, TRACK_BIT_RIGHT };
- static const Slope unsafe_slope[] = { SLOPE_S, SLOPE_W, SLOPE_N, SLOPE_E };
-
- Slope tileh;
- uint z;
-
- /* Nothing could be built at the steep slope - this avoids a bug
- * when you have a single diagonal track in one corner on a
- * basement and then you raise/lower the other corner. */
- tileh = GetTileSlope(tile, &z);
- if (tileh == unsafe_slope[mode] ||
- tileh == (SLOPE_STEEP | ComplementSlope(unsafe_slope[mode]))) {
- _terraform_err_tile = tile;
- _error_message = STR_1008_MUST_REMOVE_RAILROAD_TRACK;
- return -1;
- }
+ /* Check range of destination height */
+ if (height < 0) return_cmd_error(STR_1003_ALREADY_AT_SEA_LEVEL);
+ if (height > MAX_TILE_HEIGHT) return_cmd_error(STR_1004_TOO_HIGH);
- /* If we have a single diagonal track there, the other side of
- * tile can be terraformed. */
- if (IsPlainRailTile(tile) && GetTrackBits(tile) == safe_track[mode]) {
- /* If terraforming downwards prevent damaging a potential tunnel below.
- * This check is only necessary for flat tiles, because if the tile is
- * non-flat, then the corner opposing the rail is raised. Only this corner
- * can be lowered and this is a safe action
- */
- if (tileh == SLOPE_FLAT &&
- ts->direction == -1 &&
- IsTunnelInWay(tile, z - TILE_HEIGHT)) {
- _terraform_err_tile = tile;
- _error_message = STR_1002_EXCAVATION_WOULD_DAMAGE;
- return -1;
- }
- return 0;
- }
- }
+ /*
+ * Check if the terraforming has any effect.
+ * This can only be true, if multiple corners of the start-tile are terraformed (i.e. the terraforming is done by towns/industries etc.).
+ * In this case the terraforming should fail. (Don't know why.)
+ */
+ if (height == TerraformGetHeightOfTile(ts, tile)) return CMD_ERROR;
- /* 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)) {
- _terraform_err_tile = tile;
- return -1;
+ /* Check "too close to edge of map" */
+ uint x = TileX(tile);
+ uint y = TileY(tile);
+ if ((x <= 1) || (y <= 1) || (x >= MapMaxX() - 1) || (y >= MapMaxY() - 1)) {
+ /*
+ * Determine a sensible error tile
+ * Note: If x and y are both zero this will disable the error tile. (Tile 0 cannot be highlighted :( )
+ */
+ if ((x == 1) && (y != 0)) x = 0;
+ if ((y == 1) && (x != 0)) y = 0;
+ _terraform_err_tile = TileXY(x, y);
+ return_cmd_error(STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP);
}
- ts->cost.AddCost(ret.GetCost());
-
- if (ts->tile_table_count >= 625) return -1;
- ts->tile_table[ts->tile_table_count++] = tile;
-
- return 0;
-}
-
-static bool TerraformTileHeight(TerraformerState *ts, TileIndex tile, int height)
-{
- int nh;
- TerraformerHeightMod *mod;
- int count;
-
- assert(tile < MapSize());
-
- if (height < 0) {
- _error_message = STR_1003_ALREADY_AT_SEA_LEVEL;
- return false;
- }
-
- _error_message = STR_1004_TOO_HIGH;
-
- if (height > MAX_TILE_HEIGHT) return false;
+ /* Mark incident tiles, that are involved in the terraforming */
+ TerraformAddDirtyTileAround(ts, tile);
- nh = TerraformGetHeightOfTile(ts, tile);
- if (nh < 0 || height == nh) return false;
-
- if (TerraformProc(ts, tile, 0) < 0) return false;
- if (TerraformProc(ts, tile + TileDiffXY( 0, -1), 1) < 0) return false;
- if (TerraformProc(ts, tile + TileDiffXY(-1, -1), 2) < 0) return false;
- if (TerraformProc(ts, tile + TileDiffXY(-1, 0), 3) < 0) return false;
-
- mod = ts->modheight;
- count = ts->modheight_count;
+ /* Store the height modification */
+ TerraformSetHeightOfTile(ts, tile, height);
- for (;;) {
- if (count == 0) {
- if (ts->modheight_count >= 576) return false;
- ts->modheight_count++;
- break;
- }
- if (mod->tile == tile) break;
- mod++;
- count--;
- }
+ /* Increment cost */
+ total_cost.AddCost(_price.terraform);
- mod->tile = tile;
- mod->height = (byte)height;
-
- ts->cost.AddCost(_price.terraform);
-
+ /* Recurse to neighboured corners if height difference is larger than 1 */
{
- int direction = ts->direction, r;
const TileIndexDiffC *ttm;
static const TileIndexDiffC _terraform_tilepos[] = {
- { 1, 0},
- {-2, 0},
- { 1, 1},
- { 0, -2}
+ { 1, 0}, // move to tile in SE
+ {-2, 0}, // undo last move, and move to tile in NW
+ { 1, 1}, // undo last move, and move to tile in SW
+ { 0, -2} // undo last move, and move to tile in NE
};
for (ttm = _terraform_tilepos; ttm != endof(_terraform_tilepos); ttm++) {
tile += ToTileIndexDiff(*ttm);
- r = TerraformGetHeightOfTile(ts, tile);
- if (r != height && r - direction != height && r + direction != height) {
- if (!TerraformTileHeight(ts, tile, r + direction))
- return false;
+ /* Get TileHeight of neighboured tile as of current terraform progress */
+ int r = TerraformGetHeightOfTile(ts, tile);
+ int height_diff = height - r;
+
+ /* Is the height difference to the neighboured corner greater than 1? */
+ if (abs(height_diff) > 1) {
+ /* Terraform the neighboured corner. The resulting height difference should be 1. */
+ height_diff += (height_diff < 0 ? 1 : -1);
+ CommandCost cost = TerraformTileHeight(ts, tile, r + height_diff);
+ if (CmdFailed(cost)) return cost;
+ total_cost.AddCost(cost);
}
}
}
- return true;
+ return total_cost;
}
/** Terraform land
* @param tile tile to terraform
* @param flags for this command type
- * @param p1 corners to terraform.
- * @param p2 direction; eg up or down
+ * @param p1 corners to terraform (SLOPE_xxx)
+ * @param p2 direction; eg up (non-zero) or down (zero)
* @return error or cost of terraforming
*/
CommandCost CmdTerraformLand(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
TerraformerState ts;
- TileIndex t;
- int direction;
-
- TerraformerHeightMod modheight_data[576];
- TileIndex tile_table_data[625];
+ CommandCost total_cost = CommandCost();
+ int direction = (p2 != 0 ? 1 : -1);
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
_terraform_err_tile = 0;
- ts.direction = direction = p2 ? 1 : -1;
- ts.flags = flags;
ts.modheight_count = ts.tile_table_count = 0;
- ts.cost = CommandCost();
- ts.modheight = modheight_data;
- ts.tile_table = tile_table_data;
/* Make an extra check for map-bounds cause we add tiles to the originating tile */
if (tile + TileDiffXY(1, 1) >= MapSize()) return CMD_ERROR;
- if (p1 & 1) {
- t = tile + TileDiffXY(1, 0);
- if (!TerraformTileHeight(&ts, t, TileHeight(t) + direction)) {
- return CMD_ERROR;
- }
- }
-
- if (p1 & 2) {
- t = tile + TileDiffXY(1, 1);
- if (!TerraformTileHeight(&ts, t, TileHeight(t) + direction)) {
- return CMD_ERROR;
- }
+ /* Compute the costs and the terraforming result in a model of the landscape */
+ if ((p1 & SLOPE_W) != 0) {
+ TileIndex t = tile + TileDiffXY(1, 0);
+ CommandCost cost = TerraformTileHeight(&ts, t, TileHeight(t) + direction);
+ if (CmdFailed(cost)) return cost;
+ total_cost.AddCost(cost);
}
- if (p1 & 4) {
- t = tile + TileDiffXY(0, 1);
- if (!TerraformTileHeight(&ts, t, TileHeight(t) + direction)) {
- return CMD_ERROR;
- }
+ if ((p1 & SLOPE_S) != 0) {
+ TileIndex t = tile + TileDiffXY(1, 1);
+ CommandCost cost = TerraformTileHeight(&ts, t, TileHeight(t) + direction);
+ if (CmdFailed(cost)) return cost;
+ total_cost.AddCost(cost);
}
- if (p1 & 8) {
- t = tile + TileDiffXY(0, 0);
- if (!TerraformTileHeight(&ts, t, TileHeight(t) + direction)) {
- return CMD_ERROR;
- }
+ if ((p1 & SLOPE_E) != 0) {
+ TileIndex t = tile + TileDiffXY(0, 1);
+ CommandCost cost = TerraformTileHeight(&ts, t, TileHeight(t) + direction);
+ if (CmdFailed(cost)) return cost;
+ total_cost.AddCost(cost);
}
+ if ((p1 & SLOPE_N) != 0) {
+ TileIndex t = tile + TileDiffXY(0, 0);
+ CommandCost cost = TerraformTileHeight(&ts, t, TileHeight(t) + direction);
+ if (CmdFailed(cost)) return cost;
+ total_cost.AddCost(cost);
+ }
+
+ /* Check if the terraforming is valid wrt. tunnels, bridges and objects on the surface */
{
- /* Check if tunnel would take damage */
int count;
TileIndex *ti = ts.tile_table;
for (count = ts.tile_table_count; count != 0; count--, ti++) {
TileIndex tile = *ti;
- uint z_min = TerraformGetHeightOfTile(&ts, tile + TileDiffXY(0, 0));
- uint z_max = z_min;
- uint t = TerraformGetHeightOfTile(&ts, tile + TileDiffXY(1, 0));
- z_min = min(z_min, t);
- z_max = max(z_max, t);
- t = TerraformGetHeightOfTile(&ts, tile + TileDiffXY(1, 1));
- z_min = min(z_min, t);
- z_max = max(z_max, t);
- t = TerraformGetHeightOfTile(&ts, tile + TileDiffXY(0, 1));
- z_min = min(z_min, t);
- z_max = max(z_max, t);
+ /* Find new heights of tile corners */
+ uint z_N = TerraformGetHeightOfTile(&ts, tile + TileDiffXY(0, 0));
+ uint z_W = TerraformGetHeightOfTile(&ts, tile + TileDiffXY(1, 0));
+ uint z_S = TerraformGetHeightOfTile(&ts, tile + TileDiffXY(1, 1));
+ uint z_E = TerraformGetHeightOfTile(&ts, tile + TileDiffXY(0, 1));
+ /* Find min and max height of tile */
+ uint z_min = min(min(z_N, z_W), min(z_S, z_E));
+ uint z_max = max(max(z_N, z_W), max(z_S, z_E));
+
+ /* Compute tile slope */
+ uint tileh = (z_max > z_min + 1 ? SLOPE_STEEP : SLOPE_FLAT);
+ if (z_W > z_min) tileh += SLOPE_W;
+ if (z_S > z_min) tileh += SLOPE_S;
+ if (z_E > z_min) tileh += SLOPE_E;
+ if (z_N > z_min) tileh += SLOPE_N;
+
+ /* Check if bridge would take damage */
if (direction == 1 && MayHaveBridgeAbove(tile) && IsBridgeAbove(tile) &&
GetBridgeHeight(GetSouthernBridgeEnd(tile)) <= z_max * TILE_HEIGHT) {
+ _terraform_err_tile = tile; // highlight the tile under the bridge
return_cmd_error(STR_5007_MUST_DEMOLISH_BRIDGE_FIRST);
}
+ /* Check if tunnel would take damage */
if (direction == -1 && IsTunnelInWay(tile, z_min * TILE_HEIGHT)) {
+ _terraform_err_tile = tile; // highlight the tile above the tunnel
return_cmd_error(STR_1002_EXCAVATION_WOULD_DAMAGE);
}
+ /* Check tiletype-specific things, and add extra-cost */
+ CommandCost cost = _tile_type_procs[GetTileType(tile)]->terraform_tile_proc(tile, flags, z_min * TILE_HEIGHT, (Slope) tileh);
+ if (CmdFailed(cost)) {
+ _terraform_err_tile = tile;
+ return cost;
+ }
+ total_cost.AddCost(cost);
}
}
if (flags & DC_EXEC) {
- /* Clear the landscape at the tiles */
- {
- int count;
- TileIndex *ti = ts.tile_table;
- for (count = ts.tile_table_count; count != 0; count--, ti++) {
- DoCommand(*ti, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
- }
- }
-
/* change the height */
{
int count;
@@ -341,7 +325,6 @@
TileIndex til = mod->tile;
SetTileHeight(til, mod->height);
- TerraformAddDirtyTileAround(&ts, til);
}
}
@@ -354,7 +337,7 @@
}
}
}
- return ts.cost;
+ return total_cost;
}
@@ -400,7 +383,7 @@
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);
+ ret = DoCommand(tile2, SLOPE_N, (curh > h) ? 0 : 1, flags & ~DC_EXEC, CMD_TERRAFORM_LAND);
if (CmdFailed(ret)) break;
if (flags & DC_EXEC) {
@@ -409,7 +392,7 @@
_additional_cash_required = ret.GetCost();
return cost;
}
- DoCommand(tile2, 8, (curh > h) ? 0 : 1, flags, CMD_TERRAFORM_LAND);
+ DoCommand(tile2, SLOPE_N, (curh > h) ? 0 : 1, flags, CMD_TERRAFORM_LAND);
}
cost.AddCost(ret);
@@ -434,8 +417,6 @@
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
- if (!EnsureNoVehicle(tile)) return CMD_ERROR;
-
if (IsOwnedLandTile(tile) && IsTileOwner(tile, _current_player)) {
return_cmd_error(STR_5807_YOU_ALREADY_OWN_IT);
}
@@ -806,6 +787,11 @@
_opt.snow_line = _patches.snow_line_height * TILE_HEIGHT;
}
+static CommandCost TerraformTile_Clear(TileIndex tile, uint32 flags, uint z_new, Slope tileh_new)
+{
+ return DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
+}
+
extern const TileTypeProcs _tile_type_clear_procs = {
DrawTile_Clear, ///< draw_tile_proc
GetSlopeZ_Clear, ///< get_slope_z_proc
@@ -820,4 +806,5 @@
NULL, ///< get_produced_cargo_proc
NULL, ///< vehicle_enter_tile_proc
GetFoundation_Clear, ///< get_foundation_proc
+ TerraformTile_Clear, ///< terraform_tile_proc
};
--- a/src/command.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/command.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -570,7 +570,7 @@
SubtractMoneyFromPlayer(res2);
if (IsLocalPlayer() && _game_mode != GM_EDITOR) {
- if (res2.GetCost() != 0) ShowCostOrIncomeAnimation(x, y, GetSlopeZ(x, y), res2.GetCost());
+ if (res2.GetCost() != 0 && tile != 0) ShowCostOrIncomeAnimation(x, y, GetSlopeZ(x, y), res2.GetCost());
if (_additional_cash_required != 0) {
SetDParam(0, _additional_cash_required);
if (my_cmd) ShowErrorMessage(STR_0003_NOT_ENOUGH_CASH_REQUIRES, error_part1, x, y);
--- a/src/date.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/date.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -182,7 +182,7 @@
};
extern void WaypointsDailyLoop();
-extern void TextMessageDailyLoop();
+extern void ChatMessageDailyLoop();
extern void EnginesDailyLoop();
extern void DisasterDailyLoop();
@@ -245,7 +245,7 @@
/* yeah, increase day counter and call various daily loops */
_date++;
- TextMessageDailyLoop();
+ ChatMessageDailyLoop();
DisasterDailyLoop();
WaypointsDailyLoop();
@@ -309,7 +309,7 @@
/* Because the _date wraps here, and text-messages expire by game-days, we have to clean out
* all of them if the date is set back, else those messages will hang for ever */
- InitTextMessage();
+ InitChatMessage();
}
if (_patches.auto_euro) CheckSwitchToEuro();
--- a/src/debug.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/debug.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -94,7 +94,14 @@
} else
#endif /* ENABLE_NETWORK */
{
+#if defined(WINCE)
+ /* We need to do OTTD2FS twice, but as it uses a static buffer, we need to store one temporary */
+ TCHAR tbuf[512];
+ _sntprintf(tbuf, sizeof(tbuf), _T("%s"), OTTD2FS(dbg));
+ NKDbgPrintfW(_T("dbg: [%s] %s\n"), tbuf, OTTD2FS(buf));
+#else
fprintf(stderr, "dbg: [%s] %s\n", dbg, buf);
+#endif
IConsoleDebug(dbg, buf);
}
}
--- a/src/depot.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/depot.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -37,6 +37,8 @@
*/
Depot::~Depot()
{
+ if (CleaningPool()) return;
+
/* Clear the depot from all order-lists */
RemoveOrderFromAllVehicles(OT_GOTO_DEPOT, this->index);
--- a/src/depot.h Sun Aug 19 14:04:13 2007 +0000
+++ b/src/depot.h Sun Sep 02 11:17:33 2007 +0000
@@ -12,6 +12,7 @@
#include "road_map.h"
#include "rail_map.h"
#include "water_map.h"
+#include "station_map.h"
struct Depot;
DECLARE_OLD_POOL(Depot, Depot, 3, 8000)
@@ -23,7 +24,7 @@
Depot(TileIndex xy = 0) : xy(xy) {}
~Depot();
- bool IsValid() const { return this->xy != 0; }
+ inline bool IsValid() const { return this->xy != 0; }
};
static inline bool IsValidDepotID(DepotID index)
@@ -63,7 +64,7 @@
return IsTileType(tile, MP_RAILWAY) && GetRailTileType(tile) == RAIL_TILE_DEPOT;
case TRANSPORT_ROAD:
- return IsTileType(tile, MP_ROAD) && GetRoadTileType(tile) == ROAD_TILE_DEPOT;
+ return IsTileType(tile, MP_ROAD) && GetRoadTileType(tile) == ROAD_TILE_DEPOT;
case TRANSPORT_WATER:
return IsTileType(tile, MP_WATER) && GetWaterTileType(tile) == WATER_TILE_DEPOT;
@@ -74,6 +75,21 @@
}
}
+/**
+ * Is the given tile a tile with a depot on it?
+ * @param tile the tile to check
+ * @return true if and only if there is a depot on the tile.
+ */
+static inline bool IsDepotTile(TileIndex tile)
+{
+ switch (GetTileType(tile)) {
+ case MP_ROAD: return GetRoadTileType(tile) == ROAD_TILE_DEPOT;
+ case MP_WATER: return GetWaterTileType(tile) == WATER_TILE_DEPOT;
+ case MP_RAILWAY: return GetRailTileType(tile) == RAIL_TILE_DEPOT;
+ case MP_STATION: return IsHangar(tile);
+ default: return false;
+ }
+}
/**
* Find out if the slope of the tile is suitable to build a depot of given direction
--- a/src/depot_gui.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/depot_gui.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -130,27 +130,20 @@
extern int WagonLengthToPixels(int len);
+/**
+ * This is the Callback method after the cloning attempt of a vehicle
+ * @param success indicates completion (or not) of the operation
+ * @param tile unused
+ * @param p1 unused
+ * @param p2 unused
+ */
void CcCloneVehicle(bool success, TileIndex tile, uint32 p1, uint32 p2)
{
if (!success) return;
- switch(GetVehicle(p1)->type) {
- case VEH_TRAIN: CcCloneTrain( true, tile, p1, p2); break;
- case VEH_ROAD: CcCloneRoadVeh( true, tile, p1, p2); break;
- case VEH_SHIP: CcCloneShip( true, tile, p1, p2); break;
- case VEH_AIRCRAFT: CcCloneAircraft(true, tile, p1, p2); break;
- default: NOT_REACHED();
- }
-}
-static inline void ShowVehicleViewWindow(const Vehicle *v)
-{
- switch (v->type) {
- case VEH_TRAIN: ShowTrainViewWindow(v); break;
- case VEH_ROAD: ShowRoadVehViewWindow(v); break;
- case VEH_SHIP: ShowShipViewWindow(v); break;
- case VEH_AIRCRAFT: ShowAircraftViewWindow(v); break;
- default: NOT_REACHED();
- }
+ Vehicle *v = GetVehicle(_new_vehicle_id);
+
+ ShowVehicleViewWindow(v);
}
static void DepotSellAllConfirmationCallback(Window *w, bool confirmed)
@@ -286,7 +279,7 @@
/*Draw the train counter */
i = 0;
u = v;
- do i++; while ( (u=u->next) != NULL); // Determine length of train
+ do i++; while ((u = u->Next()) != NULL); // Determine length of train
SetDParam(0, i); // Set the counter
DrawStringRightAligned(w->widget[DEPOT_WIDGET_MATRIX].right - 1, y + 4, STR_TINY_BLACK, 0); // Draw the counter
}
@@ -363,10 +356,10 @@
x += skip;
/* find the vehicle in this row that was clicked */
- while (v != NULL && (x -= v->u.rail.cached_veh_length) >= 0) v = v->next;
+ while (v != NULL && (x -= v->u.rail.cached_veh_length) >= 0) v = v->Next();
/* if an articulated part was selected, find its parent */
- while (v != NULL && IsArticulatedPart(v)) v = GetPrevVehicleInChain(v);
+ while (v != NULL && IsArticulatedPart(v)) v = v->Previous();
d->wagon = v;
@@ -405,7 +398,7 @@
if (wagon == NULL) {
if (head != NULL) wagon = GetLastVehicleInChain(head);
} else {
- wagon = GetPrevVehicleInChain(wagon);
+ wagon = wagon->Previous();
if (wagon == NULL) return;
}
@@ -482,7 +475,7 @@
if (v == NULL) return;
if (v->HasFront() && !v->IsPrimaryVehicle()) {
- v = GetFirstVehicleInChain(v);
+ v = v->First();
/* Do nothing when clicking on a train in depot with no loc attached */
if (v->type == VEH_TRAIN && !IsFrontEngine(v)) return;
}
@@ -902,7 +895,7 @@
} else if (gdvp.wagon == NULL || gdvp.wagon->index != sel) {
TrainDepotMoveVehicle(gdvp.wagon, sel, gdvp.head);
} else if (gdvp.head != NULL && IsFrontEngine(gdvp.head)) {
- ShowTrainViewWindow(gdvp.head);
+ ShowVehicleViewWindow(gdvp.head);
}
}
} else if (GetVehicleFromDepotWndPt(w, e->we.dragdrop.pt.x, e->we.dragdrop.pt.y, &v, NULL) == MODE_DRAG_VEHICLE &&
--- a/src/disaster_cmd.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/disaster_cmd.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -158,7 +158,7 @@
VehiclePositionChanged(v);
EndVehicleMove(v);
- if ((u = v->next) != NULL) {
+ if ((u = v->Next()) != NULL) {
int safe_x = clamp(x, 0, MapMaxX() * TILE_SIZE);
int safe_y = clamp(y - 1, 0, MapMaxY() * TILE_SIZE);
BeginVehicleMove(u);
@@ -173,7 +173,7 @@
VehiclePositionChanged(u);
EndVehicleMove(u);
- if ((u = u->next) != NULL) {
+ if ((u = u->Next()) != NULL) {
BeginVehicleMove(u);
u->x_pos = x;
u->y_pos = y;
@@ -611,7 +611,7 @@
w = new DisasterVehicle();
if (w == NULL) return;
- u->next = w;
+ u->SetNext(w);
InitializeDisasterVehicle(w, -6 * TILE_SIZE, v->y_pos, 0, DIR_SW, ST_Big_Ufo_Destroyer_Shadow);
w->vehstatus |= VS_SHADOW;
} else if (v->current_order.dest == 0) {
@@ -782,7 +782,7 @@
/* Allocate shadow too? */
u = new DisasterVehicle();
if (u != NULL) {
- v->next = u;
+ v->SetNext(u);
InitializeDisasterVehicle(u, x, 0, 0, DIR_SE, ST_Zeppeliner_Shadow);
u->vehstatus |= VS_SHADOW;
}
@@ -807,7 +807,7 @@
/* Allocate shadow too? */
u = new DisasterVehicle();
if (u != NULL) {
- v->next = u;
+ v->SetNext(u);
InitializeDisasterVehicle(u, x, 0, 0, DIR_SE, ST_Small_Ufo_Shadow);
u->vehstatus |= VS_SHADOW;
}
@@ -843,7 +843,7 @@
u = new DisasterVehicle();
if (u != NULL) {
- v->next = u;
+ v->SetNext(u);
InitializeDisasterVehicle(u, x, y, 0, DIR_SE, ST_Airplane_Shadow);
u->vehstatus |= VS_SHADOW;
}
@@ -878,13 +878,13 @@
u = new DisasterVehicle();
if (u != NULL) {
- v->next = u;
+ v->SetNext(u);
InitializeDisasterVehicle(u, x, y, 0, DIR_SW, ST_Helicopter_Shadow);
u->vehstatus |= VS_SHADOW;
w = new DisasterVehicle();
if (w != NULL) {
- u->next = w;
+ u->SetNext(w);
InitializeDisasterVehicle(w, x, y, 140, DIR_SW, ST_Helicopter_Rotors);
}
}
@@ -910,7 +910,7 @@
/* Allocate shadow too? */
u = new DisasterVehicle();
if (u != NULL) {
- v->next = u;
+ v->SetNext(u);
InitializeDisasterVehicle(u, x, y, 0, DIR_NW, ST_Big_Ufo_Shadow);
u->vehstatus |= VS_SHADOW;
}
--- a/src/dummy_land.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/dummy_land.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -68,6 +68,11 @@
return 0;
}
+static CommandCost TerraformTile_Dummy(TileIndex tile, uint32 flags, uint z_new, Slope tileh_new)
+{
+ return_cmd_error(STR_0001_OFF_EDGE_OF_MAP);
+}
+
extern const TileTypeProcs _tile_type_dummy_procs = {
DrawTile_Dummy, /* draw_tile_proc */
GetSlopeZ_Dummy, /* get_slope_z_proc */
@@ -82,4 +87,5 @@
NULL, /* get_produced_cargo_proc */
NULL, /* vehicle_enter_tile_proc */
GetFoundation_Dummy, /* get_foundation_proc */
+ TerraformTile_Dummy, /* terraform_tile_proc */
};
--- a/src/economy.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/economy.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -70,7 +70,7 @@
uint num = 0;
FOR_ALL_STATIONS(st) {
- if (st->owner == owner) num += CountBitsSet(st->facilities);
+ if (st->owner == owner) num += COUNTBITS(st->facilities);
}
value.AddCost(num * _price.station_value * 25);
@@ -146,7 +146,7 @@
const Station* st;
FOR_ALL_STATIONS(st) {
- if (st->owner == owner) num += CountBitsSet(st->facilities);
+ if (st->owner == owner) num += COUNTBITS(st->facilities);
}
_score_part[owner][SCORE_STATIONS] = num;
}
@@ -191,7 +191,7 @@
/* Generate score for variety of cargo */
{
- uint num = CountBitsSet(p->cargo_types);
+ uint num = COUNTBITS(p->cargo_types);
_score_part[owner][SCORE_CARGO] = num;
if (update) p->cargo_types = 0;
}
@@ -508,11 +508,10 @@
void DrawNewsBankrupcy(Window *w)
{
- Player *p;
-
DrawNewsBorder(w);
- p = GetPlayer((PlayerID)GB(WP(w,news_d).ni->string_id, 0, 4));
+ const NewsItem *ni = WP(w, news_d).ni;
+ Player *p = GetPlayer((PlayerID)GB(ni->string_id, 0, 4));
DrawPlayerFace(p->face, p->player_color, 2, 23);
GfxFillRect(3, 23, 3 + 91, 23 + 118, PALETTE_TO_STRUCT_GREY | (1 << USE_COLORTABLE));
@@ -520,9 +519,9 @@
DrawStringMultiCenter(49, 148, STR_7058_PRESIDENT, 94);
- switch (WP(w,news_d).ni->string_id & 0xF0) {
+ switch (ni->string_id & 0xF0) {
case NB_BTROUBLE:
- DrawStringCentered(w->width>>1, 1, STR_7056_TRANSPORT_COMPANY_IN_TROUBLE, 0);
+ DrawStringCentered(w->width >> 1, 1, STR_7056_TRANSPORT_COMPANY_IN_TROUBLE, 0);
SetDParam(0, p->index);
@@ -533,25 +532,21 @@
w->width - 101);
break;
- case NB_BMERGER: {
- int32 price;
-
- DrawStringCentered(w->width>>1, 1, STR_7059_TRANSPORT_COMPANY_MERGER, 0);
- CopyInDParam(0,WP(w,news_d).ni->params, 2);
- SetDParam(2, p->index);
- price = WP(w,news_d).ni->params[2];
- SetDParam(3, price);
+ case NB_BMERGER:
+ DrawStringCentered(w->width >> 1, 1, STR_7059_TRANSPORT_COMPANY_MERGER, 0);
+ SetDParam(0, ni->params[0]);
+ SetDParam(1, p->index);
+ SetDParam(2, ni->params[1]);
DrawStringMultiCenter(
((w->width - 101) >> 1) + 98,
90,
- price==0 ? STR_707F_HAS_BEEN_TAKEN_OVER_BY : STR_705A_HAS_BEEN_SOLD_TO_FOR,
+ ni->params[1] == 0 ? STR_707F_HAS_BEEN_TAKEN_OVER_BY : STR_705A_HAS_BEEN_SOLD_TO_FOR,
w->width - 101);
break;
- }
case NB_BBANKRUPT:
- DrawStringCentered(w->width>>1, 1, STR_705C_BANKRUPT, 0);
- CopyInDParam(0,WP(w,news_d).ni->params, 2);
+ DrawStringCentered(w->width >> 1, 1, STR_705C_BANKRUPT, 0);
+ SetDParam(0, ni->params[0]);
DrawStringMultiCenter(
((w->width - 101) >> 1) + 98,
90,
@@ -560,9 +555,9 @@
break;
case NB_BNEWCOMPANY:
- DrawStringCentered(w->width>>1, 1, STR_705E_NEW_TRANSPORT_COMPANY_LAUNCHED, 0);
+ DrawStringCentered(w->width >> 1, 1, STR_705E_NEW_TRANSPORT_COMPANY_LAUNCHED, 0);
SetDParam(0, p->index);
- CopyInDParam(1,WP(w,news_d).ni->params, 2);
+ SetDParam(1, ni->params[0]);
DrawStringMultiCenter(
((w->width - 101) >> 1) + 98,
90,
@@ -587,28 +582,25 @@
return STR_02B6;
case NB_BMERGER:
SetDParam(0, STR_7059_TRANSPORT_COMPANY_MERGER);
- SetDParam(1, STR_705A_HAS_BEEN_SOLD_TO_FOR);
- CopyInDParam(2,ni->params, 2);
- SetDParam(4, p->index);
- CopyInDParam(5,ni->params + 2, 1);
+ SetDParam(1, ni->params[1] == 0 ? STR_707F_HAS_BEEN_TAKEN_OVER_BY : STR_705A_HAS_BEEN_SOLD_TO_FOR);
+ SetDParam(2, ni->params[0]);
+ SetDParam(3, p->index);
+ SetDParam(4, ni->params[1]);
return STR_02B6;
case NB_BBANKRUPT:
SetDParam(0, STR_705C_BANKRUPT);
SetDParam(1, STR_705D_HAS_BEEN_CLOSED_DOWN_BY);
- CopyInDParam(2,ni->params, 2);
+ SetDParam(2, ni->params[0]);
return STR_02B6;
case NB_BNEWCOMPANY:
SetDParam(0, STR_705E_NEW_TRANSPORT_COMPANY_LAUNCHED);
SetDParam(1, STR_705F_STARTS_CONSTRUCTION_NEAR);
SetDParam(2, p->index);
- CopyInDParam(3,ni->params, 2);
+ SetDParam(3, ni->params[0]);
return STR_02B6;
default:
NOT_REACHED();
}
-
- /* useless, but avoids compiler warning this way */
- return 0;
}
static void PlayersGenStatistics()
@@ -1419,7 +1411,7 @@
/* Start unloading in at the first possible moment */
front_v->load_unload_time_rem = 1;
- for (Vehicle *v = front_v; v != NULL; v = v->next) {
+ for (Vehicle *v = front_v; v != NULL; v = v->Next()) {
/* No cargo to unload */
if (v->cargo_cap == 0 || v->cargo.Empty()) continue;
@@ -1436,7 +1428,7 @@
CargoPacket *cp = *it;
if (!cp->paid_for &&
cp->source != last_visited &&
- ge->acceptance &&
+ HASBIT(ge->acceptance_pickup, GoodsEntry::ACCEPTANCE) &&
(front_v->current_order.flags & OF_TRANSFER) == 0) {
/* Deliver goods to the station */
st->time_since_unload = 0;
@@ -1444,8 +1436,8 @@
/* 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
+ route_profit += profit; // display amount paid for final route delivery, A-D of a chain A-B-C-D
+ vehicle_profit += profit - cp->feeder_share; // whole vehicle is not payed for transfers picked up earlier
result |= 1;
@@ -1506,7 +1498,7 @@
if (--v->load_unload_time_rem != 0) {
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) {
+ for (; v != NULL; v = v->Next()) {
if (v->cargo_cap != 0) cargo_left[v->cargo_type] -= v->cargo_cap - v->cargo.Count();
}
}
@@ -1536,7 +1528,7 @@
StationID last_visited = v->last_station_visited;
Station *st = GetStation(last_visited);
- for (; v != NULL; v = v->next) {
+ for (; v != NULL; v = v->Next()) {
if (v->cargo_cap == 0) continue;
byte load_amount = EngInfo(v->engine_type)->load_amount;
@@ -1552,13 +1544,14 @@
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 (ge->acceptance && !(u->current_order.flags & OF_TRANSFER)) {
+ if (HASBIT(ge->acceptance_pickup, GoodsEntry::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)) {
remaining = v->cargo.MoveTo(&ge->cargo, amount_unloaded);
+ SETBIT(ge->acceptance_pickup, GoodsEntry::PICKUP);
result |= 2;
} else {
@@ -1598,6 +1591,7 @@
/* if last speed is 0, we treat that as if no vehicle has ever visited the station. */
ge->last_speed = min(t, 255);
ge->last_age = _cur_year - u->build_year;
+ ge->days_since_pickup = 0;
/* If there's goods waiting at the station, and the vehicle
* has capacity for it, load it on the vehicle. */
@@ -1633,11 +1627,11 @@
anything_loaded = true;
ge->cargo.MoveTo(&v->cargo, cap, CargoList::MTA_CARGO_LOAD, st->xy);
- ge->days_since_pickup = 0;
+
+ st->time_since_load = 0;
+ st->last_vehicle_type = v->type;
unloading_time += cap;
- st->time_since_load = 0;
- st->last_vehicle_type = v->type;
result |= 2;
}
@@ -1655,7 +1649,7 @@
* enough to fill the previous wagons) */
if (_patches.improved_load && HASBIT(u->current_order.flags, OFB_FULL_LOAD)) {
/* Update left cargo */
- for (v = u; v != NULL; v = v->next) {
+ for (v = u; v != NULL; v = v->Next()) {
if (v->cargo_cap != 0) cargo_left[v->cargo_type] -= v->cargo_cap - v->cargo.Count();
}
}
@@ -1806,11 +1800,16 @@
Player *p;
CommandCost cost;
- /* Check if buying shares is allowed (protection against modified clients */
- if (!IsValidPlayer((PlayerID)p1) || !_patches.allow_shares) return CMD_ERROR;
+ /* Check if buying shares is allowed (protection against modified clients) */
+ /* Cannot buy own shares */
+ if (!IsValidPlayer((PlayerID)p1) || !_patches.allow_shares || _current_player == (PlayerID)p1) return CMD_ERROR;
+
+ p = GetPlayer((PlayerID)p1);
+
+ /* Cannot buy shares of non-existent nor bankrupted company */
+ if (!p->is_active) return CMD_ERROR;
SET_EXPENSES_TYPE(EXPENSES_OTHER);
- p = GetPlayer((PlayerID)p1);
/* Protect new companies from hostile takeovers */
if (_cur_year - p->inaugurated_year < 6) return_cmd_error(STR_7080_PROTECTED);
@@ -1852,11 +1851,16 @@
Player *p;
Money cost;
- /* Check if buying shares is allowed (protection against modified clients */
- if (!IsValidPlayer((PlayerID)p1) || !_patches.allow_shares) return CMD_ERROR;
+ /* Check if selling shares is allowed (protection against modified clients) */
+ /* Cannot sell own shares */
+ if (!IsValidPlayer((PlayerID)p1) || !_patches.allow_shares || _current_player == (PlayerID)p1) return CMD_ERROR;
+
+ p = GetPlayer((PlayerID)p1);
+
+ /* Cannot sell shares of non-existent nor bankrupted company */
+ if (!p->is_active) return CMD_ERROR;
SET_EXPENSES_TYPE(EXPENSES_OTHER);
- p = GetPlayer((PlayerID)p1);
/* Those lines are here for network-protection (clients can be slow) */
if (GetAmountOwnedBy(p, _current_player) == 0) return CommandCost();
--- a/src/elrail.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/elrail.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -293,7 +293,8 @@
AddSortableSpriteToDraw(
sss->image, PAL_NONE, ti->x + sss->x_offset, ti->y + sss->y_offset,
sss->x_size, sss->y_size, sss->z_size,
- GetTileZ(ti->tile) + sss->z_offset
+ GetTileZ(ti->tile) + sss->z_offset,
+ HASBIT(_transparent_opt, TO_BUILDINGS)
);
break;
}
--- a/src/engine.h Sun Aug 19 14:04:13 2007 +0000
+++ b/src/engine.h Sun Sep 02 11:17:33 2007 +0000
@@ -284,7 +284,7 @@
EngineRenew(EngineID from = INVALID_ENGINE, EngineID to = INVALID_ENGINE) : from(from), to(to), next(NULL) {}
~EngineRenew() { this->from = INVALID_ENGINE; }
- bool IsValid() const { return this->from != INVALID_ENGINE; }
+ inline bool IsValid() const { return this->from != INVALID_ENGINE; }
};
#define FOR_ALL_ENGINE_RENEWS_FROM(er, start) for (er = GetEngineRenew(start); er != NULL; er = (er->index + 1U < GetEngineRenewPoolSize()) ? GetEngineRenew(er->index + 1U) : NULL) if (er->IsValid())
--- a/src/fios.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/fios.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -108,7 +108,9 @@
char *path = _fios_path;
switch (item->type) {
-#if defined(WIN32) || defined(__OS2__)
+#if defined(WINCE)
+ case FIOS_TYPE_DRIVE: sprintf(path, PATHSEP ""); break;
+#elif defined(WIN32) || defined(__OS2__)
case FIOS_TYPE_DRIVE: sprintf(path, "%c:" PATHSEP, item->title[0]); break;
#endif
--- a/src/functions.h Sun Aug 19 14:04:13 2007 +0000
+++ b/src/functions.h Sun Sep 02 11:17:33 2007 +0000
@@ -136,7 +136,6 @@
void ShowHighscoreTable(int difficulty, int8 rank);
int FindFirstBit(uint32 x);
-int CountBitsSet(uint32 value);
void AfterLoadTown();
void UpdatePatches();
--- a/src/gfx.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/gfx.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -62,7 +62,7 @@
if (xo == 0 && yo == 0) return;
if (_cursor.visible) UndrawMouseCursor();
- UndrawTextMessage();
+ UndrawChatMessage();
blitter->ScrollBuffer(_screen.dst_ptr, left, top, width, height, xo, yo);
/* This part of the screen is now dirty. */
@@ -495,10 +495,10 @@
DrawPixelInfo *dpi = _cur_dpi;
FontSize size = _cur_fontsize;
WChar c;
- byte color;
int xo = x, yo = y;
- color = real_color & 0xFF;
+ byte color = real_color & 0xFF;
+ byte previous_color = color;
if (color != 0xFE) {
if (x >= dpi->left + dpi->width ||
@@ -548,8 +548,12 @@
y += GetCharacterHeight(size);
goto check_bounds;
} else if (c >= SCC_BLUE && c <= SCC_BLACK) { // change color?
+ previous_color = color;
color = (byte)(c - SCC_BLUE);
goto switch_color;
+ } else if (c == SCC_PREVIOUS_COLOUR) { // revert to the previous color
+ Swap(color, previous_color);
+ goto switch_color;
} else if (c == SCC_SETX) { // {SETX}
x = xo + (byte)*string++;
} else if (c == SCC_SETXY) {// {SETXY}
@@ -840,6 +844,11 @@
void DrawMouseCursor()
{
+#if defined(WINCE)
+ /* Don't ever draw the mouse for WinCE, as we work with a stylus */
+ return;
+#endif
+
Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
int x;
int y;
@@ -903,7 +912,7 @@
UndrawMouseCursor();
}
}
- UndrawTextMessage();
+ UndrawChatMessage();
DrawOverlappedWindowForAll(left, top, right, bottom);
--- a/src/gfx.h Sun Aug 19 14:04:13 2007 +0000
+++ b/src/gfx.h Sun Sep 02 11:17:33 2007 +0000
@@ -194,7 +194,7 @@
uint32 InteractiveRandom(); //< Used for random sequences that are not the same on the other end of the multiplayer link
uint InteractiveRandomRange(uint max);
-void DrawTextMessage();
+void DrawChatMessage();
void DrawMouseCursor();
void ScreenSizeChanged();
void HandleExitGameRequest();
--- a/src/group.h Sun Aug 19 14:04:13 2007 +0000
+++ b/src/group.h Sun Sep 02 11:17:33 2007 +0000
@@ -29,8 +29,6 @@
Group(StringID str = STR_NULL);
virtual ~Group();
- void QuickFree();
-
bool IsValid() const;
};
@@ -78,15 +76,17 @@
* @param id_e The EngineID of the engine to count
* @return The number of engines with EngineID id_e in the group
*/
-static inline uint GetGroupNumEngines(GroupID id_g, EngineID id_e)
+static inline uint GetGroupNumEngines(PlayerID p, GroupID id_g, EngineID id_e)
{
if (IsValidGroupID(id_g)) return GetGroup(id_g)->num_engines[id_e];
- uint num = GetPlayer(_local_player)->num_engines[id_e];
+ uint num = GetPlayer(p)->num_engines[id_e];
if (!IsDefaultGroupID(id_g)) return num;
const Group *g;
- FOR_ALL_GROUPS(g) num -= g->num_engines[id_e];
+ FOR_ALL_GROUPS(g) {
+ if (g->owner == p) num -= g->num_engines[id_e];
+ }
return num;
}
--- a/src/group_cmd.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/group_cmd.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -50,15 +50,10 @@
Group::~Group()
{
- this->QuickFree();
+ DeleteName(this->string_id);
this->string_id = STR_NULL;
}
-void Group::QuickFree()
-{
- DeleteName(this->string_id);
-}
-
bool Group::IsValid() const
{
return this->string_id != STR_NULL;
@@ -221,12 +216,13 @@
if (!IsValidVehicleID(p2) || (!IsValidGroupID(new_g) && !IsDefaultGroupID(new_g))) return CMD_ERROR;
+ Vehicle *v = GetVehicle(p2);
+
if (IsValidGroupID(new_g)) {
Group *g = GetGroup(new_g);
- if (g->owner != _current_player) return CMD_ERROR;
+ if (g->owner != _current_player || g->vehicle_type != v->type) return CMD_ERROR;
}
- Vehicle *v = GetVehicle(p2);
if (v->owner != _current_player || !v->IsPrimaryVehicle()) return CMD_ERROR;
if (flags & DC_EXEC) {
@@ -376,7 +372,7 @@
assert(v->IsValid() && v->type == VEH_TRAIN && IsFrontEngine(v));
- for (Vehicle *u = v; u != NULL; u = u->next) {
+ for (Vehicle *u = v; u != NULL; u = u->Next()) {
if (IsEngineCountable(u)) UpdateNumEngineGroup(u->engine_type, u->group_id, new_g);
u->group_id = new_g;
@@ -399,7 +395,7 @@
assert(v->IsValid() && v->type == VEH_TRAIN && (IsFrontEngine(v) || IsFreeWagon(v)));
GroupID new_g = IsFrontEngine(v) ? v->group_id : (GroupID)DEFAULT_GROUP;
- for (Vehicle *u = v; u != NULL; u = u->next) {
+ for (Vehicle *u = v; u != NULL; u = u->Next()) {
if (IsEngineCountable(u)) UpdateNumEngineGroup(u->engine_type, u->group_id, new_g);
u->group_id = new_g;
--- a/src/group_gui.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/group_gui.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -451,36 +451,20 @@
max = min(w->vscroll2.pos + w->vscroll2.cap, gv->l.list_length);
for (i = w->vscroll2.pos ; i < max ; ++i) {
const Vehicle* v = gv->sort_list[i];
- StringID str;
assert(v->type == gv->vehicle_type && v->owner == owner);
DrawVehicleImage(v, x + 19, y2 + 6, w->hscroll.cap, 0, gv->vehicle_sel);
DrawVehicleProfitButton(v, x, y2 + 13);
- if (IsVehicleInDepot(v)) {
- str = STR_021F;
- } else {
- str = v->age > v->max_age - 366 ? STR_00E3 : STR_00E2;
- }
SetDParam(0, v->unitnumber);
- DrawString(x, y2 + 2, str, 0);
+ DrawString(x, y2 + 2, v->IsInDepot() ? STR_021F : (v->age > v->max_age - 366 ? STR_00E3 : STR_00E2), 0);
if (w->resize.step_height == PLY_WND_PRC__SIZE_OF_ROW_BIG2) DrawSmallOrderList(v, x + 138, y2);
- if (v->profit_this_year < 0) {
- str = v->profit_last_year < 0 ?
- STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR :
- STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR;
- } else {
- str = v->profit_last_year < 0 ?
- STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR :
- STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR;
- }
-
SetDParam(0, v->profit_this_year);
SetDParam(1, v->profit_last_year);
- DrawString(x + 19, y2 + w->resize.step_height - 8, str, 0);
+ DrawString(x + 19, y2 + w->resize.step_height - 8, STR_0198_PROFIT_THIS_YEAR_LAST_YEAR, 0);
if (IsValidGroupID(v->group_id)) {
SetDParam(0, v->group_id);
@@ -668,13 +652,7 @@
v = gv->sort_list[id_v];
if (vindex == v->index) {
- switch (gv->vehicle_type) {
- default: NOT_REACHED(); break;
- case VEH_TRAIN: ShowTrainViewWindow(v); break;
- case VEH_ROAD: ShowRoadVehViewWindow(v); break;
- case VEH_SHIP: ShowShipViewWindow(v); break;
- case VEH_AIRCRAFT: ShowAircraftViewWindow(v); break;
- }
+ ShowVehicleViewWindow(v);
}
break;
@@ -780,6 +758,8 @@
void ShowPlayerGroup(PlayerID player, VehicleType vehicle_type)
{
+ if (!IsValidPlayer(player)) return;
+
WindowClass wc;
switch (vehicle_type) {
--- a/src/gui.h Sun Aug 19 14:04:13 2007 +0000
+++ b/src/gui.h Sun Sep 02 11:17:33 2007 +0000
@@ -42,17 +42,14 @@
void ReinitGuiAfterToggleElrail(bool disable);
/* train_gui.cpp */
-void ShowTrainViewWindow(const Vehicle *v);
void ShowOrdersWindow(const Vehicle *v);
/* road_gui.cpp */
void ShowBuildRoadToolbar(RoadType roadtype);
void ShowBuildRoadScenToolbar();
-void ShowRoadVehViewWindow(const Vehicle *v);
/* dock_gui.cpp */
void ShowBuildDocksToolbar();
-void ShowShipViewWindow(const Vehicle *v);
/* aircraft_gui.cpp */
void ShowBuildAirToolbar();
--- a/src/industry.h Sun Aug 19 14:04:13 2007 +0000
+++ b/src/industry.h Sun Sep 02 11:17:33 2007 +0000
@@ -118,11 +118,12 @@
Date construction_date; ///< Date of the construction of the industry
uint8 construction_type; ///< Way the industry was constructed (@see IndustryConstructionType)
Date last_cargo_accepted_at; ///< Last day cargo was accepted by this industry
+ byte selected_layout; ///< Which tile layout was used when creating the industry
Industry(TileIndex tile = 0) : xy(tile) {}
~Industry();
- bool IsValid() const { return this->xy != 0; }
+ inline bool IsValid() const { return this->xy != 0; }
};
struct IndustryTileTable {
@@ -132,7 +133,7 @@
/** Data related to the handling of grf files. Common to both industry and industry tile */
struct GRFFileProps {
- uint8 subst_id;
+ uint16 subst_id;
uint16 local_id; ///< id defined by the grf file for this industry
struct SpriteGroup *spritegroup; ///< pointer to the different sprites of the industry
const struct GRFFile *grffile; ///< grf file that introduced this industry
@@ -211,7 +212,7 @@
/* industry_cmd.cpp*/
const IndustrySpec *GetIndustrySpec(IndustryType thistype); ///< Array of industries data
-const IndustryTileSpec *GetIndustryTileSpec(IndustryGfx gfx, bool full_check = true); ///< Array of industry tiles data
+const IndustryTileSpec *GetIndustryTileSpec(IndustryGfx gfx); ///< Array of industry tiles data
void ResetIndustries();
void PlantRandomFarmField(const Industry *i);
@@ -219,6 +220,22 @@
extern IndustrySpec _industry_specs[NUM_INDUSTRYTYPES];
extern IndustryTileSpec _industry_tile_specs[NUM_INDUSTRYTILES];
+static inline IndustryGfx GetTranslatedIndustryTileID(IndustryGfx gfx)
+{
+ /* the 0xFF should be GFX_WATERTILE_SPECIALCHECK but for reasons of include mess,
+ * we'll simplify the writing.
+ * Basically, the first test is required since the GFX_WATERTILE_SPECIALCHECK value
+ * will never be assigned as a tile index and is only required in order to do some
+ * tests while building the industry (as in WATER REQUIRED */
+ if (gfx != 0xFF) {
+ assert(gfx < INVALID_INDUSTRYTILE);
+ const IndustryTileSpec *it = &_industry_tile_specs[gfx];
+ return it->grf_prop.override == INVALID_INDUSTRYTILE ? gfx : it->grf_prop.override;
+ } else {
+ return gfx;
+ }
+}
+
/* smallmap_gui.cpp */
void BuildIndustriesLegend();
--- a/src/industry_cmd.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/industry_cmd.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -113,23 +113,19 @@
* This will ensure at once : proper access and
* not allowing modifications of it.
* @param gfx of industrytile (which is the index in _industry_tile_specs)
- * @param full_check (default to true) verify if an override is available.
- * If so, use it instead of the gfx provided.
* @pre gfx < INVALID_INDUSTRYTILE
* @return a pointer to the corresponding industrytile spec
**/
-const IndustryTileSpec *GetIndustryTileSpec(IndustryGfx gfx, bool full_check)
+const IndustryTileSpec *GetIndustryTileSpec(IndustryGfx gfx)
{
assert(gfx < INVALID_INDUSTRYTILE);
- const IndustryTileSpec *its = &_industry_tile_specs[gfx];
- if (full_check && its->grf_prop.override != INVALID_INDUSTRYTILE) {
- its = &_industry_tile_specs[its->grf_prop.override];
- }
- return its;
+ return &_industry_tile_specs[gfx];
}
Industry::~Industry()
{
+ if (CleaningPool()) return;
+
/* Industry can also be destroyed when not fully initialized.
* This means that we do not have to clear tiles either. */
if (this->width == 0) {
@@ -272,9 +268,11 @@
} 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);
+ if (indts->grf_prop.subst_id != INVALID_INDUSTRYTILE) {
+ gfx = indts->grf_prop.subst_id;
+ /* And point the industrytile spec accordingly */
+ indts = GetIndustryTileSpec(gfx);
+ }
}
}
@@ -1181,14 +1179,15 @@
_error_message = STR_0239_SITE_UNSUITABLE;
do {
+ IndustryGfx gfx = GetTranslatedIndustryTileID(it->gfx);
TileIndex cur_tile = tile + ToTileIndexDiff(it->ti);
if (!IsValidTile(cur_tile)) {
- if (it->gfx == 0xff) continue;
+ if (gfx == GFX_WATERTILE_SPECIALCHECK) continue;
return false;
}
- if (it->gfx == 0xFF) {
+ if (gfx == GFX_WATERTILE_SPECIALCHECK) {
if (!IsTileType(cur_tile, MP_WATER) ||
GetTileSlope(cur_tile, NULL) != SLOPE_FLAT) {
return false;
@@ -1202,7 +1201,7 @@
if (HASBIT(its->callback_flags, CBM_INDT_SHAPE_CHECK)) {
if (custom_shape_check != NULL) *custom_shape_check = true;
- if (!PerformIndustryTileSlopeCheck(cur_tile, its, type, it->gfx)) return false;
+ if (!PerformIndustryTileSlopeCheck(cur_tile, its, type, gfx)) return false;
} else {
if (ind_behav & INDUSTRYBEH_BUILT_ONWATER) {
/* As soon as the tile is not water, bail out.
@@ -1340,7 +1339,7 @@
if (!CheckCanTerraformSurroundingTiles(tile_walk, h, 0)) return false;
/* This is not 100% correct check, but the best we can do without modifying the map.
* What is missing, is if the difference in height is more than 1.. */
- if (CmdFailed(DoCommand(tile_walk, 8, (curh > h) ? 0 : 1, flags & ~DC_EXEC, CMD_TERRAFORM_LAND))) return false;
+ if (CmdFailed(DoCommand(tile_walk, SLOPE_N, (curh > h) ? 0 : 1, flags & ~DC_EXEC, CMD_TERRAFORM_LAND))) return false;
}
} END_TILE_LOOP(tile_walk, size_x, size_y, cur_tile)
@@ -1352,7 +1351,7 @@
/* We give the terraforming for free here, because we can't calculate
* exact cost in the test-round, and as we all know, that will cause
* a nice assert if they don't match ;) */
- DoCommand(tile_walk, 8, (curh > h) ? 0 : 1, flags, CMD_TERRAFORM_LAND);
+ DoCommand(tile_walk, SLOPE_N, (curh > h) ? 0 : 1, flags, CMD_TERRAFORM_LAND);
curh += (curh > h) ? -1 : 1;
}
} END_TILE_LOOP(tile_walk, size_x, size_y, cur_tile)
@@ -1394,7 +1393,7 @@
return true;
}
-static void DoCreateNewIndustry(Industry *i, TileIndex tile, int type, const IndustryTileTable *it, const Town *t, Owner owner)
+static void DoCreateNewIndustry(Industry *i, TileIndex tile, int type, const IndustryTileTable *it, byte layout, const Town *t, Owner owner)
{
const IndustrySpec *indspec = GetIndustrySpec(type);
uint32 r;
@@ -1441,6 +1440,11 @@
i->construction_type = (_game_mode == GM_EDITOR) ? ICT_SCENARIO_EDITOR :
(_generating_world ? ICT_MAP_GENERATION : ICT_NORMAL_GAMEPLAY);
+ /* Adding 1 here makes it conform to specs of var44 of varaction2 for industries
+ * 0 = created prior of newindustries
+ * else, chosen layout + 1 */
+ i->selected_layout = layout + 1;
+
if (!_generating_world) i->last_month_production[0] = i->last_month_production[1] = 0;
i->prod_level = 0x10;
@@ -1448,7 +1452,7 @@
do {
TileIndex cur_tile = tile + ToTileIndexDiff(it->ti);
- if (it->gfx != 0xFF) {
+ if (it->gfx != GFX_WATERTILE_SPECIALCHECK) {
byte size;
size = it->ti.x;
@@ -1512,7 +1516,7 @@
if (flags & DC_EXEC) {
if (!custom_shape_check) CheckIfCanLevelIndustryPlatform(tile, DC_EXEC, it, type);
- DoCreateNewIndustry(i, tile, type, it, t, OWNER_NONE);
+ DoCreateNewIndustry(i, tile, type, it, itspec_index, t, OWNER_NONE);
i_auto_delete.Detach();
}
@@ -1967,6 +1971,10 @@
)) >> 8;
}
+static CommandCost TerraformTile_Industry(TileIndex tile, uint32 flags, uint z_new, Slope tileh_new)
+{
+ return DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR); // funny magic bulldozer
+}
extern const TileTypeProcs _tile_type_industry_procs = {
DrawTile_Industry, /* draw_tile_proc */
@@ -1982,6 +1990,7 @@
GetProducedCargo_Industry, /* get_produced_cargo_proc */
NULL, /* vehicle_enter_tile_proc */
GetFoundation_Industry, /* get_foundation_proc */
+ TerraformTile_Industry, /* terraform_tile_proc */
};
static const SaveLoad _industry_desc[] = {
@@ -2015,6 +2024,7 @@
SLE_CONDVAR(Industry, construction_date, SLE_INT32, 70, SL_MAX_VERSION),
SLE_CONDVAR(Industry, construction_type, SLE_UINT8, 70, SL_MAX_VERSION),
SLE_CONDVAR(Industry, last_cargo_accepted_at, SLE_INT32, 70, SL_MAX_VERSION),
+ SLE_CONDVAR(Industry, selected_layout, SLE_UINT8, 73, SL_MAX_VERSION),
/* reserve extra space in savegame here. (currently 32 bytes) */
SLE_CONDNULL(32, 2, SL_MAX_VERSION),
--- a/src/industry_map.h Sun Aug 19 14:04:13 2007 +0000
+++ b/src/industry_map.h Sun Sep 02 11:17:33 2007 +0000
@@ -48,6 +48,7 @@
GFX_BUBBLE_CATCHER = 162,
GFX_TOFFEE_QUARY = 165,
GFX_SUGAR_MINE_SIEVE = 174,
+ GFX_WATERTILE_SPECIALCHECK = 255, ///< not really a tile, but rather a very special check
};
/**
@@ -132,7 +133,7 @@
static inline IndustryGfx GetIndustryGfx(TileIndex t)
{
assert(IsTileType(t, MP_INDUSTRY));
- return _m[t].m5;
+ return GetTranslatedIndustryTileID(_m[t].m5 | (GB(_m[t].m6, 2, 1) << 8));
}
/**
--- a/src/lang/american.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/american.txt Sun Sep 02 11:17:33 2007 +0000
@@ -11,7 +11,6 @@
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}{CURRENCY}
-STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Flat land required
STR_0008_WAITING :{BLACK}Waiting: {WHITE}{STRING}
@@ -1263,7 +1262,6 @@
STR_BUOY_IS_IN_USE :{WHITE}... buoy is in use!
-STR_LANDINFO_COORDS :{BLACK}Coordinates: {LTBLUE}{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Can't remove part of station...
STR_CANT_CONVERT_RAIL :{WHITE}Can't convert railtype here...
@@ -1376,32 +1374,16 @@
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Which map do you want to play?
STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Maximum allowed clients:
STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Choose a maximum number of clients. Not all slots need to be filled.
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :LAN / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (advertize)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :0 players
-STR_NETWORK_1_PLAYERS :1 player
-STR_NETWORK_2_PLAYERS :2 players
-STR_NETWORK_3_PLAYERS :3 players
-STR_NETWORK_4_PLAYERS :4 players
-STR_NETWORK_5_PLAYERS :5 players
-STR_NETWORK_6_PLAYERS :6 players
-STR_NETWORK_7_PLAYERS :7 players
-STR_NETWORK_8_PLAYERS :8 players
-STR_NETWORK_9_PLAYERS :9 players
-STR_NETWORK_10_PLAYERS :10 players
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Max companies:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Limit the server to a certain number of companies
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Max spectators:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Limit the server to a certain number of spectators
-STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Language spoken:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Other players will know which language is spoken on the server.
-STR_NETWORK_COMBO5 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}Start Game
STR_NETWORK_START_GAME_TIP :{BLACK}Start a new network game from a random map, or scenario
STR_NETWORK_LOAD_GAME :{BLACK}Load Game
@@ -1629,13 +1611,9 @@
STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :Railroad track with normal signals
STR_RAILROAD_TRACK_WITH_PRESIGNALS :Railroad track with pre-signals
STR_RAILROAD_TRACK_WITH_EXITSIGNALS :Railroad track with exit-signals
-STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Railroad track with combo-signals
STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS :Railway track with normal and pre-signals
STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :Railway track with normal and exit-signals
-STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :Railway track with normal and combo-signals
STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS :Railway track with pre- and exit-signals
-STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :Railway track with pre- and combo-signals
-STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Railway track with exit- and combo-signals
STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Must remove railway station first
@@ -3361,10 +3339,6 @@
STR_GROUP_RENAME_TIP :{BLACK}Rename the selected group
STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}Click to protect this group from global autoreplace
-STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Profit this year: {GREEN}{CURRENCY} {BLACK}(last year: {GREEN}{CURRENCY}{BLACK})
-STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Profit this year: {RED}{CURRENCY} {BLACK}(last year: {GREEN}{CURRENCY}{BLACK})
-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}
--- a/src/lang/brazilian_portuguese.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/brazilian_portuguese.txt Sun Sep 02 11:17:33 2007 +0000
@@ -13,7 +13,6 @@
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}{CURRENCY}
-STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Precisa de terreno plano
STR_0008_WAITING :{BLACK}Aguardando: {WHITE}{STRING}
@@ -1265,7 +1264,7 @@
STR_BUOY_IS_IN_USE :{WHITE}...bóia está em uso!
-STR_LANDINFO_COORDS :{BLACK}Coordenadas: {LTBLUE}{NUM}x{NUM} ({STRING})
+STR_LANDINFO_COORDS :{BLACK}Coordenadas: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Impossível remover parte da estação...
STR_CANT_CONVERT_RAIL :{WHITE}Impossível converter o tipo de linha aqui...
@@ -1376,34 +1375,23 @@
STR_NETWORK_PASSWORD_TIP :{BLACK}Proteja o jogo com uma senha se não desejar que seja publicamente acessível
STR_NETWORK_SELECT_MAP :{BLACK}Selecionar um mapa:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Em qual mapa deseja jogar?
-STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Máximo de clientes:
-STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Escolha o número máximo de clientes. Não precisam estar todos preenchidos
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LAN_INTERNET_COMBO :{BLACK}{SKIP}{STRING}
STR_NETWORK_LAN :Rede Local
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :Rede Local / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (divulgar)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :0 jogadores
-STR_NETWORK_1_PLAYERS :1 jogador
-STR_NETWORK_2_PLAYERS :2 jogadores
-STR_NETWORK_3_PLAYERS :3 jogadores
-STR_NETWORK_4_PLAYERS :4 jogadores
-STR_NETWORK_5_PLAYERS :5 jogadores
-STR_NETWORK_6_PLAYERS :6 jogadores
-STR_NETWORK_7_PLAYERS :7 jogadores
-STR_NETWORK_8_PLAYERS :8 jogadores
-STR_NETWORK_9_PLAYERS :9 jogadores
-STR_NETWORK_10_PLAYERS :10 jogadores
+STR_NETWORK_CLIENTS_SELECT :{BLACK}{SKIP}{SKIP}{NUM} cliente{P "" s}
+STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Máximo de clientes:
+STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Escolha o número máximo de clientes. Não precisam estar todos preenchidos
+STR_NETWORK_COMPANIES_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{NUM} compan{P ia ias}
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Máximo de empresas:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Limita o servidor para uma certa quantia de empresas
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_SPECTATORS_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{NUM} espectator{P "" es}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Max espectadores:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Limita o servidor para um certa quantia de espectadores
-STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Idioma falado:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Outros jogadores saberão o idioma utilizado no servidor.
-STR_NETWORK_COMBO5 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LANGUAGE_COMBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}Iniciar Jogo
STR_NETWORK_START_GAME_TIP :{BLACK}Iniciar um novo jogo em rede com mapa ou cenário aleatórios
STR_NETWORK_LOAD_GAME :{BLACK}Abrir Jogo
@@ -1631,13 +1619,13 @@
STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :Ferrovia com sinais normais
STR_RAILROAD_TRACK_WITH_PRESIGNALS :Ferrovia com pré-sinais
STR_RAILROAD_TRACK_WITH_EXITSIGNALS :Ferrovia com sinais de saída
-STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Ferrovia com sinais combinados
+STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Ferrovia com sinais combo
STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS :Linha de trem com sinais normais e pré-sinais
STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :Linha de trem com sinais normais e de saída
-STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :Linha de trem com sinais normais e sinais combo
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :Ferrovia com sinais normais e combo
STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS :Linha de trem com pré-sinais e de saída
-STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :Linha de trem com pré-sinais e sinais combo
-STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Linha de trem com sinais de saída e sinais combo
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :Ferrovia com pré-sinais e combo
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Ferrovia com sinais combo e de saída
STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Remova a estação de trem antes
@@ -1999,9 +1987,9 @@
STR_482F_COST :{BLACK}Custo: {YELLOW}{CURRENCY}
STR_4830_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Impossível construir este tipo de indústria aqui...
STR_4831_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}...a floresta só pode ser plantada acima do nível de neve
-STR_4832_ANNOUNCES_IMMINENT_CLOSURE :{BLACK}{BIGFONT}{INDUSTRY} anuncia falência iminente!
-STR_4833_SUPPLY_PROBLEMS_CAUSE_TO :{BLACK}{BIGFONT}Problemas de abastecimento forçaram {INDUSTRY} a anunciar falência iminente!
-STR_4834_LACK_OF_NEARBY_TREES_CAUSES :{BLACK}{BIGFONT}Falta de árvores nas proximidades forçaram {INDUSTRY} a anunciar falência iminente!
+STR_4832_ANNOUNCES_IMMINENT_CLOSURE :{BLACK}{BIGFONT}{INDUSTRY} anuncia o fechamento!
+STR_4833_SUPPLY_PROBLEMS_CAUSE_TO :{BLACK}{BIGFONT}Problemas de abastecimento forçaram {INDUSTRY} a anunciar o fechamento!
+STR_4834_LACK_OF_NEARBY_TREES_CAUSES :{BLACK}{BIGFONT}Falta de árvores nas proximidades forçaram {INDUSTRY} a anunciar o fechamento!
STR_4835_INCREASES_PRODUCTION :{BLACK}{BIGFONT}{INDUSTRY} aumenta a produção!
STR_4836_NEW_COAL_SEAM_FOUND_AT :{BLACK}{BIGFONT}Nova jazida de carvão encontrada em {INDUSTRY}!{}A expectativa é dobrar a produção!
STR_4837_NEW_OIL_RESERVES_FOUND :{BLACK}{BIGFONT}Novas reservas de petróleo encontradas em {INDUSTRY}!{}A expectativa é dobrar a produção!
@@ -3365,11 +3353,6 @@
STR_GROUP_RENAME_TIP :{BLACK}Renomeia o grupo selecionado
STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}Clique para excluir esse grupo da substituição automática
-STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Lucros do ano: {GREEN}{CURRENCY} {BLACK}(ano passado: {GREEN}{CURRENCY}{BLACK})
-STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Lucros do ano: {RED}{CURRENCY} {BLACK}(ano passado: {GREEN}{CURRENCY}{BLACK})
-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}
--- a/src/lang/bulgarian.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/bulgarian.txt Sun Sep 02 11:17:33 2007 +0000
@@ -13,7 +13,6 @@
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Края на картата е прекалено близо
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Недостатъчно пари - трябват {CURRENCY}
STR_0004 :{WHITE}{CURRENCY}
-STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Трябва равна земя
STR_0008_WAITING :{BLACK}Чакане: {WHITE}{STRING}
@@ -1263,7 +1262,6 @@
STR_BUOY_IS_IN_USE :{WHITE}...шамандурата се използва!
-STR_LANDINFO_COORDS :{BLACK}Координати: {LTBLUE}{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Не може да се премахва част от гарата...
STR_CANT_CONVERT_RAIL :{WHITE}Тук не може да се променя типа на жп линията...
@@ -1374,34 +1372,19 @@
STR_NETWORK_PASSWORD_TIP :{BLACK}Защитаване на вашата игра с парола за да не е публично достъпна
STR_NETWORK_SELECT_MAP :{BLACK}Избор на карта:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Коя карта желаете да играете?
-STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Макс. клиенти:
-STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Избор на максималния брой клиенти. Не всички слотове трябва да се попълнят
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LAN_INTERNET_COMBO :{BLACK}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Интернет
STR_NETWORK_LAN_INTERNET :LAN / Интернет
STR_NETWORK_INTERNET_ADVERTISE :Интернет (реклама)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :0 играча
-STR_NETWORK_1_PLAYERS :1 играч
-STR_NETWORK_2_PLAYERS :2 играча
-STR_NETWORK_3_PLAYERS :3 играча
-STR_NETWORK_4_PLAYERS :4 играча
-STR_NETWORK_5_PLAYERS :5 играча
-STR_NETWORK_6_PLAYERS :6 играча
-STR_NETWORK_7_PLAYERS :7 играча
-STR_NETWORK_8_PLAYERS :8 играча
-STR_NETWORK_9_PLAYERS :9 играча
-STR_NETWORK_10_PLAYERS :10 играча
+STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Макс. клиенти:
+STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Избор на максималния брой клиенти. Не всички слотове трябва да се попълнят
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Макс. компании:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Ограничаване на играта до определен брой компании
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Макс. наблюдатели:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Ограничаване на сървъра до определен брой наблюдатели
-STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Говорим език:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Другите играчи ще знаят езика на който се говори на сървъра
-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}Начало на игра
STR_NETWORK_START_GAME_TIP :{BLACK}Започване на нова мрежова игра от случайна карта или сценарий
STR_NETWORK_LOAD_GAME :{BLACK}Зареждане на игра
@@ -1629,10 +1612,7 @@
STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :ЖП линия с нормални сигнали
STR_RAILROAD_TRACK_WITH_PRESIGNALS :ЖП линия с пре-сигнали
STR_RAILROAD_TRACK_WITH_EXITSIGNALS :ЖП линия с изходни сигнали
-STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :ЖП линия с комбинирани сигнали
STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :Железопътна линиа с нормални и изходни сигнали
-STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :Железопътна линиа с нормални и съединени сигнали
-STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Железопътна линиа с изходни и съединени сигнали
STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Железопътната гара трябва да бъде премахната първо
@@ -1661,6 +1641,7 @@
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}Построи пъгническа трамвайна гара
@@ -2629,6 +2610,7 @@
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 "" s}
@@ -2675,6 +2657,7 @@
STR_REFIT_TIP :{BLACK}Избор какво преустройсто да се направи. Щракване със задържан контрол премахва инструкцията
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}
@@ -2691,6 +2674,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}
@@ -2722,11 +2708,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}Развален
@@ -2749,6 +2740,7 @@
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}
@@ -2760,7 +2752,13 @@
STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE}
STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Нов {STRING} е на разположение! - {ENGINE}
+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_AUTOFILL :{BLACK}Афтонапълване
##id 0x9000
@@ -3289,6 +3287,7 @@
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}
@@ -3304,6 +3303,10 @@
STR_GROUP_ALL_ROADS :Всички пътни превозни средства
STR_GROUP_ALL_SHIPS :Всички кораби
STR_GROUP_ALL_AIRCRAFTS :Всички самолети
+STR_GROUP_DEFAULT_TRAINS :Безгрупни влакове
+STR_GROUP_DEFAULT_ROADS :Безгрупни пътни превозни средства
+STR_GROUP_DEFAULT_SHIPS :Безгрупни кораби
+STR_GROUP_DEFAULT_AIRCRAFTS :Безгрупни самолети
STR_GROUP_TINY_NUM :{TINYFONT}{COMMA}
STR_GROUP_ADD_SHARED_VEHICLE :Добави споделени превозни средства
STR_GROUP_REMOVE_ALL_VEHICLES :Премахни всички превозни средсва
@@ -3328,11 +3331,6 @@
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}
@@ -3351,3 +3349,4 @@
STR_FUND_NEW_INDUSTRY :{BLACK}Фонд
STR_PROSPECT_NEW_INDUSTRY :{BLACK}Перспектива
STR_BUILD_NEW_INDUSTRY :{BLACK}Построи
+STR_INDUSTRY_SELECTION_HINT :{BLACK}Избери правилната промишленост от следниат списък
--- a/src/lang/catalan.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/catalan.txt Sun Sep 02 11:17:33 2007 +0000
@@ -11,7 +11,6 @@
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}{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}
@@ -1263,7 +1262,7 @@
STR_BUOY_IS_IN_USE :{WHITE}...boia en ús!
-STR_LANDINFO_COORDS :{BLACK}Coordenades: {LTBLUE}{NUM}x{NUM} ({STRING})
+STR_LANDINFO_COORDS :{BLACK}Coordenades: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}No es pot treure part de la estació...
STR_CANT_CONVERT_RAIL :{WHITE}Aquí no es pot convertir el tipus de via...
@@ -1374,34 +1373,23 @@
STR_NETWORK_PASSWORD_TIP :{BLACK}Protegeix el teu joc amb una contrasenya si no vols que d'altre gent el pugui utilitzar
STR_NETWORK_SELECT_MAP :{BLACK}Selecciona un mapa:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}amb quin mapa vols jugar?
-STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Màxim de clients permesos:
-STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Tria el nombre màxim de clients. No és necessari omplir tots els llocs.
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LAN_INTERNET_COMBO :{BLACK}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :LAN / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (anunci)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :0 jugadors
-STR_NETWORK_1_PLAYERS :1 jugador
-STR_NETWORK_2_PLAYERS :2 jugadors
-STR_NETWORK_3_PLAYERS :3 jugadors
-STR_NETWORK_4_PLAYERS :4 jugadors
-STR_NETWORK_5_PLAYERS :5 jugadors
-STR_NETWORK_6_PLAYERS :6 jugadors
-STR_NETWORK_7_PLAYERS :7 jugadors
-STR_NETWORK_8_PLAYERS :8 jugadors
-STR_NETWORK_9_PLAYERS :9 jugadors
-STR_NETWORK_10_PLAYERS :10 jugadors
+STR_NETWORK_CLIENTS_SELECT :{BLACK}{SKIP}{SKIP}{NUM} client{P "" s}
+STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Màxim de clients permesos:
+STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Tria el nombre màxim de clients. No és necessari omplir tots els llocs.
+STR_NETWORK_COMPANIES_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{NUM} companyi{P a es}
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Màx companyies:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Limita el servidor a un cert nombre de companyies
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_SPECTATORS_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{NUM} espectador{P "" s}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Màx espectadors:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Limita el servidor a un cert nombre de espectadors
-STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Idioma parlat:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Els altres jugadors sabran quin idioma es parla en aquest servidor.
-STR_NETWORK_COMBO5 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LANGUAGE_COMBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}Inicia el Joc
STR_NETWORK_START_GAME_TIP :{BLACK}Inicia un nou joc de xarxa des de un mapa aleatori, o escenari
STR_NETWORK_LOAD_GAME :{BLACK}Carrega Joc
@@ -3361,11 +3349,6 @@
STR_GROUP_RENAME_TIP :{BLACK}Canvia el nom del grup seleccionat
STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}Clica per protegir aquest grup de l'autosubstitueix global
-STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Benefici aquest any: {GREEN}{CURRENCY} {BLACK}(any passat: {GREEN}{CURRENCY}{BLACK})
-STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Benefici aquest any: {RED}{CURRENCY} {BLACK}(any passat: {GREEN}{CURRENCY}{BLACK})
-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}
--- a/src/lang/croatian.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/croatian.txt Sun Sep 02 11:17:33 2007 +0000
@@ -13,7 +13,6 @@
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}{CURRENCY}
-STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Potrebna ravna površina
STR_0008_WAITING :{BLACK}Čekanje: {WHITE}{STRING}
@@ -694,7 +693,7 @@
STR_0268_CONSTRUCT_FACTORY :{BLACK}Izgradi tvornicu
STR_0269_CONSTRUCT_STEEL_MILL :{BLACK}Izgradi čeličanu
STR_026A_CONSTRUCT_FARM :{BLACK}Izgradi farmu
-STR_026B_CONSTRUCT_IRON_ORE_MINE :{BLACK}Izgradi rudnik bakra
+STR_026B_CONSTRUCT_IRON_ORE_MINE :{BLACK}Izgradi rudnik željeza
STR_026C_CONSTRUCT_OIL_WELLS :{BLACK}Izgradi naftna polja
STR_026D_CONSTRUCT_BANK_CAN_ONLY :{BLACK}Izgradi banku (može biti izgrađena samo u gradovima s više od 1200 stanovnika)
STR_026E_CONSTRUCT_PAPER_MILL :{BLACK}Izgradi tvornicu papira
@@ -1265,7 +1264,7 @@
STR_BUOY_IS_IN_USE :{WHITE}...plutača je u uporabi!
-STR_LANDINFO_COORDS :{BLACK}Koordinate: {LTBLUE}{NUM}x{NUM} ({STRING})
+STR_LANDINFO_COORDS :{BLACK}Koordinate: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Ne možeš ukloniti dio stanice...
STR_CANT_CONVERT_RAIL :{WHITE}Ne možeš pretvoriti vrstu tračnica ovdje...
@@ -1376,34 +1375,23 @@
STR_NETWORK_PASSWORD_TIP :{BLACK}Zaštiti svoju igru pomoću zaporke ukoliko ne želiš da bude javno dostupna
STR_NETWORK_SELECT_MAP :{BLACK}Izaberi kartu:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Koju kartu želiš igrati?
-STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Maks klijenata:
-STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Izaberi maksimalan broj klijenata. Ne moraju sva mjesta biti popunjena.
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LAN_INTERNET_COMBO :{BLACK}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :LAN / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (oglasi)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :0 igrača
-STR_NETWORK_1_PLAYERS :1 igrač
-STR_NETWORK_2_PLAYERS :2 igrača
-STR_NETWORK_3_PLAYERS :3 igrača
-STR_NETWORK_4_PLAYERS :4 igrača
-STR_NETWORK_5_PLAYERS :5 igrača
-STR_NETWORK_6_PLAYERS :6 igrača
-STR_NETWORK_7_PLAYERS :7 igrača
-STR_NETWORK_8_PLAYERS :8 igrača
-STR_NETWORK_9_PLAYERS :9 igrača
-STR_NETWORK_10_PLAYERS :10 igrača
+STR_NETWORK_CLIENTS_SELECT :{BLACK}{SKIP}{SKIP}{NUM} klijen{P t a ata}
+STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Maks klijenata:
+STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Izaberi maksimalan broj klijenata. Ne moraju sva mjesta biti popunjena.
+STR_NETWORK_COMPANIES_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{NUM} tvrtk{P a e i}
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Maks tvrki:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Ograniči poslužitelj na određeni broj tvrtki
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_SPECTATORS_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{NUM} gledatelj{P "" a a}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Maks promatrača:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Ograniči poslužitelj na određeni broj gledatelja
-STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Jezik kojim se govori:
-STR_NETWORK_LANGUAGE_TIP :{BLACK}Drugi igrači znati će kojim se jezikom govori na poslužitelju
-STR_NETWORK_COMBO5 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LANGUAGE_TIP :{BLACK}Drugi igrači znat će kojim se jezikom govori na poslužitelju
+STR_NETWORK_LANGUAGE_COMBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}Započni igru
STR_NETWORK_START_GAME_TIP :{BLACK}Započni novu igru u mreži na nasumičnoj mapi ili iz nasumičnog scenarija
STR_NETWORK_LOAD_GAME :{BLACK}Učitaj igru
@@ -1610,7 +1598,7 @@
STR_1010_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Ovdje ne možeš postaviti znakove...
STR_1011_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Ovdje ne možeš graditi tračnice...
STR_1012_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Odavde ne možeš ukloniti tračnice...
-STR_1013_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Odavde ne možeš maknuti signale...
+STR_1013_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Ovdje ne možeš maknuti znakove...
STR_1014_TRAIN_DEPOT_ORIENTATION :{WHITE}Smjer spremišta vlakova
STR_1015_RAILROAD_CONSTRUCTION :Izgradnja tračnica
STR_TOOLB_ELRAIL_CONSTRUCTION :Izgradnja električne željezničke pruge
@@ -1619,7 +1607,7 @@
STR_1018_BUILD_RAILROAD_TRACK :{BLACK}Izgradi tračnicu
STR_1019_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Izgradi spremište vlakova (za gradnju i servisiranje vlakova)
STR_101A_BUILD_RAILROAD_STATION :{BLACK}Izgradi željezničku stanicu
-STR_101B_BUILD_RAILROAD_SIGNALS :{BLACK}Izgradi željezničke signale
+STR_101B_BUILD_RAILROAD_SIGNALS :{BLACK}Izgradi željezničke znakove
STR_101C_BUILD_RAILROAD_BRIDGE :{BLACK}Izgradi željeznički most
STR_101D_BUILD_RAILROAD_TUNNEL :{BLACK}Izgradi željeznički tunel
STR_101E_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Prebacuj izgradnju/uklanjanje za tračnice i željezničke signale
@@ -1628,16 +1616,16 @@
STR_1021_RAILROAD_TRACK :Tračnica
STR_1023_RAILROAD_TRAIN_DEPOT :Spremište vlakova
STR_1024_AREA_IS_OWNED_BY_ANOTHER :{WHITE}...područje je u vlasništvu druge tvrke
-STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :Željezničke tračnice s normalnim znakovima
-STR_RAILROAD_TRACK_WITH_PRESIGNALS :Željezničke tračnice s prethodno postavljenim znakovima
-STR_RAILROAD_TRACK_WITH_EXITSIGNALS :Željezničke tračnice s izlaznim znakovima
-STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Željezničke tračnice s kombo znakovima
-STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS :Tračnice sa normalnim i pre-signalima
-STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :Tračnice sa normalnim i izlaznim-signalima
-STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :Tračnice sa normalnim i kombiniranim-signalima
-STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS :Tračnice sa pre- i izlaznim signalima
-STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :Tračnice sa pre- i kombiniranim signalima
-STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Tračnice sa izlaznim i kombiniranim signalima
+STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :Tračnice s normalnim znakovima
+STR_RAILROAD_TRACK_WITH_PRESIGNALS :Tračnice s prethodno postavljenim znakovima
+STR_RAILROAD_TRACK_WITH_EXITSIGNALS :Tračnice s izlaznim znakovima
+STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Tračnice s kombo znakovima
+STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS :Tračnice sa normalnim i prethodno postavljenim znakovima
+STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :Tračnice sa normalnim i izlaznim znakovima
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :Tračnice s normalnim i kombo znakovima
+STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS :Tračnice sa prethodno postavljenim i izlaznim znakovima
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :Tračnice s prethodno postavljenim i kombo znakovima
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Tračnice s izlaznim i kombo znakovima
STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Morati prvo maknuti željezničku stanicu
@@ -2412,7 +2400,7 @@
STR_803F_GRAIN_HOPPER :Tegljač žita
STR_8040_WOOD_TRUCK :Kamion za drva
STR_8041_IRON_ORE_HOPPER :Tegljač željeza
-STR_8042_STEEL_TRUCK :Kamion za željezo
+STR_8042_STEEL_TRUCK :Kamion za čelik
STR_8043_ARMORED_VAN :Oklopno vozilo
STR_8044_FOOD_VAN :Kamion za hranu
STR_8045_PAPER_TRUCK :Kamion za papir
@@ -2493,7 +2481,7 @@
STR_8090_WITCOMBE_WOOD_TRUCK :Witcombe Kamion za drva
STR_8091_FOSTER_WOOD_TRUCK :Foster Kamion za drva
STR_8092_MORELAND_WOOD_TRUCK :Moreland Kamion za drva
-STR_8093_MPS_IRON_ORE_TRUCK :MPS Kamion za željeznu rudu
+STR_8093_MPS_IRON_ORE_TRUCK :MPS Kamion za željezo
STR_8094_UHL_IRON_ORE_TRUCK :Uhl Kamion za željezu rudu
STR_8095_CHIPPY_IRON_ORE_TRUCK :Chippy Kamion za željeznu rudu
STR_8096_BALOGH_STEEL_TRUCK :Balogh Kamion za čelik
@@ -2754,7 +2742,7 @@
STR_885F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Dobit ove godine: {LTBLUE}{CURRENCY} (prošle godine: {CURRENCY})
STR_8860_RELIABILITY_BREAKDOWNS :{BLACK}Pouzdanost: {LTBLUE}{COMMA}% {BLACK}Kvarova od zadnjeg servisa: {LTBLUE}{COMMA}
STR_8861_STOPPED :{RED}Zaustavljen
-STR_8862_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Ne mogu natjerati vlak da ignorira signale dok je opasnost...
+STR_8862_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Ne mogu natjerati vlak da ignorira znakove dok je opasnost...
STR_8863_CRASHED :{RED}Slupan!
STR_8865_NAME_TRAIN :{WHITE}Imenuj vlak
@@ -3363,11 +3351,6 @@
STR_GROUP_RENAME_TIP :{BLACK}Preimenuj odabranu grupu
STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}Klikni kako bi zaštitio ovu grupu od globalne automatske zamjene
-STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Dobit ove godine: {GREEN}{CURRENCY} {BLACK}(prošle godine: {GREEN}{CURRENCY}{BLACK})
-STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Dobit ove godine: {RED}{CURRENCY} {BLACK}(prošle godine: {GREEN}{CURRENCY}{BLACK})
-STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Dobit ove godine: {GREEN}{CURRENCY} {BLACK}(prošle godine: {RED}{CURRENCY}{BLACK})
-STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Dobit ove godine: {RED}{CURRENCY} {BLACK}(prošle godine: {RED}{CURRENCY}{BLACK})
-
STR_COMPANY_NAME :{COMPANY}
STR_ENGINE_NAME :{ENGINE}
STR_GROUP_NAME :{GROUP}
--- a/src/lang/czech.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/czech.txt Sun Sep 02 11:17:33 2007 +0000
@@ -13,7 +13,6 @@
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}{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}
@@ -1321,7 +1320,7 @@
STR_BUOY_IS_IN_USE :{WHITE}... bójka je používána!
-STR_LANDINFO_COORDS :{BLACK}Souřadnice: {LTBLUE}{NUM}x{NUM} ({STRING})
+STR_LANDINFO_COORDS :{BLACK}Souřadnice: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Nemůžu odstranit část stanice...
STR_CANT_CONVERT_RAIL :{WHITE}Zde nemohu změnit typ kolejí...
@@ -1432,34 +1431,23 @@
STR_NETWORK_PASSWORD_TIP :{BLACK}Svoji hru si můžeš ochránit heslem, když nechceš, aby se ti do ni hlásili jiní lidé
STR_NETWORK_SELECT_MAP :{BLACK}Vyber mapu:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Ve které mapě si chceš zahrát?
-STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Maximální počet hráčů:
-STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Zvol maximální počet hráčů. Může se jich připojit i méně.
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LAN_INTERNET_COMBO :{BLACK}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :LAN / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (oznámit)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :0 hráčů
-STR_NETWORK_1_PLAYERS :1 hráč
-STR_NETWORK_2_PLAYERS :2 hráči
-STR_NETWORK_3_PLAYERS :3 hráči
-STR_NETWORK_4_PLAYERS :4 hráči
-STR_NETWORK_5_PLAYERS :5 hráčů
-STR_NETWORK_6_PLAYERS :6 hráčů
-STR_NETWORK_7_PLAYERS :7 hráčů
-STR_NETWORK_8_PLAYERS :8 hráčů
-STR_NETWORK_9_PLAYERS :9 hráčů
-STR_NETWORK_10_PLAYERS :10 hráčů
+STR_NETWORK_CLIENTS_SELECT :{BLACK}{SKIP}{SKIP}{NUM} klient{P "" i ů}
+STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Maximální počet hráčů:
+STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Zvol maximální počet hráčů. Může se jich připojit i méně.
+STR_NETWORK_COMPANIES_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{NUM} společnost{P "" i í}
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Maximální počet společností:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Omezit serverem počet společností
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_SPECTATORS_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{NUM} pozorovatel{P "" é ů}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Maximální počet pozorovatelů:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Omezit serverem pocet pozorovatelů
-STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Jazyk ve hře:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Aby ostatní hráči věděli, jakým jazykem se bude ve hře mluvit.
-STR_NETWORK_COMBO5 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LANGUAGE_COMBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}Začít hru
STR_NETWORK_START_GAME_TIP :{BLACK}Hru po síti začít s náhodnou mapou nebo se scénářem
STR_NETWORK_LOAD_GAME :{BLACK}Nahrát hru
@@ -3425,11 +3413,6 @@
STR_GROUP_RENAME_TIP :{BLACK}Přejmenovat vybranou skupinu
STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}Kliknutím nebude na tuto skupinu mít vliv automatická výměna vozidel
-STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Letošní příjem: {GREEN}{CURRENCY} {BLACK}(minulý rok: {GREEN}{CURRENCY}{BLACK})
-STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Letošní příjem: {RED}{CURRENCY} {BLACK}(minulý rok: {GREEN}{CURRENCY}{BLACK})
-STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Letošní příjem: {GREEN}{CURRENCY} {BLACK}(minulý rok: {RED}{CURRENCY}{BLACK})
-STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Letošní příjem: {RED}{CURRENCY} {BLACK}(minulý rok: {RED}{CURRENCY}{BLACK})
-
STR_COMPANY_NAME :{COMPANY}
STR_ENGINE_NAME :{ENGINE}
STR_GROUP_NAME :{GROUP}
--- a/src/lang/danish.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/danish.txt Sun Sep 02 11:17:33 2007 +0000
@@ -11,7 +11,6 @@
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}{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}
@@ -1263,7 +1262,6 @@
STR_BUOY_IS_IN_USE :{WHITE}... bøjen er i brug!
-STR_LANDINFO_COORDS :{BLACK}Koordinater: {LTBLUE}{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Kan ikke fjerne en del af en station...
STR_CANT_CONVERT_RAIL :{WHITE}Kan ikke konvertere jernbanetype her...
@@ -1376,32 +1374,16 @@
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Hvilket kort vil du spille?
STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Maksimalt antal tilladte klienter:
STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Vælg det maksimale antal klienter. Det er ikke nødvendigt at fylde dem alle
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :LAN / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (bekendtgør spillet)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :0 spillere
-STR_NETWORK_1_PLAYERS :1 spiller
-STR_NETWORK_2_PLAYERS :2 spillere
-STR_NETWORK_3_PLAYERS :3 spillere
-STR_NETWORK_4_PLAYERS :4 spillere
-STR_NETWORK_5_PLAYERS :5 spillere
-STR_NETWORK_6_PLAYERS :6 spillere
-STR_NETWORK_7_PLAYERS :7 spillere
-STR_NETWORK_8_PLAYERS :8 spillere
-STR_NETWORK_9_PLAYERS :9 spillere
-STR_NETWORK_10_PLAYERS :10 spillere
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Maks. selskaber:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Begræns serveren til et bestemt antal selskaber
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Maks. tilskuere:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Begræns serveren til et bestemt antal tilskurere
-STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Talt sprog:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Andre spillere vil vide hvilket sprog, der bliver talt på serveren
-STR_NETWORK_COMBO5 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}Start spillet
STR_NETWORK_START_GAME_TIP :{BLACK}Start et nyt netværksspil med et tilfældigt kort eller et scenarie
STR_NETWORK_LOAD_GAME :{BLACK}Hent et spil
@@ -1629,13 +1611,9 @@
STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :Jernbane med almindelige signaler
STR_RAILROAD_TRACK_WITH_PRESIGNALS :Jernbane med præ-signaler
STR_RAILROAD_TRACK_WITH_EXITSIGNALS :Jernbane med exit-signaler
-STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Jernbane med kombi-signaler
STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS :Jernbanespor med normale og præ-signaler
STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :Jernbanespor med normale og exit-signaler
-STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :Jernbanespor med normale og kombi-signaler
STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS :Jernbanespor med præ- og exit-signaler
-STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :Jernbanespor med præ- og kombi-signaler
-STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Jernbanespor med exit- og kombi-signaler
STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Jernbanestation skal fjernes først
@@ -3361,10 +3339,6 @@
STR_GROUP_RENAME_TIP :{BLACK}Omdøb den valgte gruppe
STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}Klik for at beskytte denne gruppe mod global auto-udskiftning
-STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Afkast i indeværende år: {GREEN}{CURRENCY} {BLACK}(sidste år: {GREEN}{CURRENCY}{BLACK})
-STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Afkast i indeværende år: {RED}{CURRENCY} {BLACK}(sidste år: {GREEN}{CURRENCY}{BLACK})
-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_COMPANY_NAME :{COMPANY}
STR_ENGINE_NAME :{ENGINE}
--- a/src/lang/dutch.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/dutch.txt Sun Sep 02 11:17:33 2007 +0000
@@ -11,7 +11,6 @@
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}{CURRENCY}
-STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Vlak land nodig
STR_0008_WAITING :{BLACK}Wachtend: {WHITE}{STRING}
@@ -238,7 +237,7 @@
STR_010C_RUBBER_PLANTATION :{BLACK}{TINYFONT}Rubberplantage
STR_010D_WATER_SUPPLY :{BLACK}{TINYFONT}Waterbron
STR_010E_WATER_TOWER :{BLACK}{TINYFONT}Watertoren
-STR_010F_LUMBER_MILL :{BLACK}{TINYFONT}Houtkapperij
+STR_010F_LUMBER_MILL :{BLACK}{TINYFONT}Houtzagerij
STR_0110_COTTON_CANDY_FOREST :{BLACK}{TINYFONT}Suikerspinbos
STR_0111_CANDY_FACTORY :{BLACK}{TINYFONT}Snoepfabriek
STR_0112_BATTERY_FARM :{BLACK}{TINYFONT}Batterijplantage
@@ -640,7 +639,7 @@
STR_0236_CAN_T_BUILD_TOWN_HERE :{WHITE}Kan hier geen nieuwe stad bouwen...
STR_0237_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}...te dicht bij de rand van de kaart
STR_0238_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}...te dicht bij een andere stad
-STR_0239_SITE_UNSUITABLE :{WHITE}...lokatie ongeschikt
+STR_0239_SITE_UNSUITABLE :{WHITE}...locatie ongeschikt
STR_023A_TOO_MANY_TOWNS :{WHITE}...te veel steden
STR_CANNOT_GENERATE_TOWN :{WHITE}Kan geen enkele stad bouwen
STR_NO_SPACE_FOR_TOWN :{WHITE}...er is geen ruimte meer op de kaart
@@ -665,7 +664,7 @@
STR_024D_FOOD_PROCESSING_PLANT :{BLACK}Voedselverwerkingsfabriek
STR_024E_PRINTING_WORKS :{BLACK}Drukkerij
STR_024F_GOLD_MINE :{BLACK}Goudmijn
-STR_0250_LUMBER_MILL :{BLACK}Houtkapperij
+STR_0250_LUMBER_MILL :{BLACK}Houtzagerij
STR_0251_FRUIT_PLANTATION :{BLACK}Fruitplantage
STR_0252_RUBBER_PLANTATION :{BLACK}Rubberplantage
STR_0253_WATER_SUPPLY :{BLACK}Waterbron
@@ -700,7 +699,7 @@
STR_0270_CONSTRUCT_PRINTING_WORKS :{BLACK}Plaats drukkerij
STR_0271_CONSTRUCT_GOLD_MINE :{BLACK}Plaats goudmijn
STR_0272_CONSTRUCT_BANK_CAN_ONLY :{BLACK}Plaats bank (alleen in steden)
-STR_0273_CONSTRUCT_LUMBER_MILL_TO :{BLACK}Plaats houtkapperij (kapt regenwoud en produceert hout)
+STR_0273_CONSTRUCT_LUMBER_MILL_TO :{BLACK}Plaats houtzagerij (kapt regenwoud en produceert hout)
STR_0274_PLANT_FRUIT_PLANTATION :{BLACK}Plant fruitplantage
STR_0275_PLANT_RUBBER_PLANTATION :{BLACK}Plant rubberplantage
STR_0276_CONSTRUCT_WATER_SUPPLY :{BLACK}Plaats waterbron
@@ -810,9 +809,9 @@
STR_TOWN_POPULATION :{BLACK}Wereldbevolking: {COMMA}
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Kijkvenster {COMMA}
STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Kopieer naar kijkvenster
-STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Kopieer de lokatie van het algemene scherm naar dit kijkvenster
+STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Kopieer de locatie van het algemene scherm naar dit kijkvenster
STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Plak van kijkvenster
-STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Plak de lokatie van dit kijkvenster naar het algemene scherm
+STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Plak de locatie van dit kijkvenster naar het algemene scherm
STR_02E0_CURRENCY_UNITS :{BLACK}Valuta
STR_02E1 :{BLACK}{SKIP}{STRING}
@@ -909,26 +908,26 @@
STR_CURR_ATS :Australische Shilling (ATS)
STR_CURR_BEF :Belgische Franken (BEF)
STR_CURR_CHF :Zwitserse Franken (CHF)
-STR_CURR_CZK :Tsjechise Koruna (CZK)
+STR_CURR_CZK :Tsjechische Corona (CZK)
STR_CURR_DEM :Duitse Mark (DEM)
STR_CURR_DKK :Deense Kronen (DKK)
STR_CURR_ESP :Spaanse Peseta (ESP)
STR_CURR_FIM :Finse Mark (FIM)
STR_CURR_FRF :Franse Franc (FRF)
-STR_CURR_GRD :Griekse Drachma (GRD)
+STR_CURR_GRD :Griekse Drachme (GRD)
STR_CURR_HUF :Hongaarse Forint (HUF)
STR_CURR_ISK :IJslandse Kronen (ISK)
STR_CURR_ITL :Italiaanse Lieren (ITL)
STR_CURR_NLG :Nederlandse Gulden (NLG)
-STR_CURR_NOK :Noorweegse Kronen (NOK)
+STR_CURR_NOK :Noorse Kronen (NOK)
STR_CURR_PLN :Poolse Zloty (PLN)
STR_CURR_ROL :Roemeense Leu (ROL)
STR_CURR_RUR :Russische Rubel (RUR)
STR_CURR_SIT :Sloveense Tolar (SIT)
STR_CURR_SEK :Zweedse Kronen (SEK)
STR_CURR_YTL :Turkse Lire (YTL)
-STR_CURR_SKK :Slovaakse Koruna (SKK)
-STR_CURR_BRR :Brazilliaanse Real (BRL)
+STR_CURR_SKK :Slowaakse Corona (SKK)
+STR_CURR_BRR :Braziliaanse Real (BRL)
STR_CURR_CUSTOM :Aangepast...
@@ -980,7 +979,7 @@
STR_SMALL_RIGHT_ARROW :{TINYFONT}{RIGHTARROW}
STR_CANT_SHARE_ORDER_LIST :{WHITE}Kan orderlijst niet delen...
-STR_CANT_COPY_ORDER_LIST :{WHITE}Kan orderlijst niet kopieren...
+STR_CANT_COPY_ORDER_LIST :{WHITE}Kan orderlijst niet kopiëren...
STR_END_OF_SHARED_ORDERS :{SETX 10}- - Einde gedeelde orders - -
STR_TRAIN_IS_LOST :{WHITE}Trein {COMMA} is verdwaald.
@@ -1079,12 +1078,12 @@
STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_SMOOTH :vlak
STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_ROUGH :Ruig
STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Erg ruig
-STR_CONFIG_PATCHES_TREE_PLACER :{LTBLUE}Boomplaatser alogeritme: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TREE_PLACER :{LTBLUE}Boomplaatser algoritme: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TREE_PLACER_NONE :Geen
STR_CONFIG_PATCHES_TREE_PLACER_ORIGINAL :Origineel
STR_CONFIG_PATCHES_TREE_PLACER_IMPROVED :Verbeterd
-STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION :{LTBLUE}Heightmap draaiing: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Tegen de klok
+STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION :{LTBLUE}Hoogtekaart draaiing: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Tegen de klok in
STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION_CLOCKWISE :Met de klok mee
STR_CONFIG_PATCHES_SE_FLAT_WORLD_HEIGHT :{LTBLUE}De hoogte van een plat scenario wordt: {ORANGE}{STRING}
@@ -1094,7 +1093,7 @@
STR_CONFIG_PATCHES_REVERSE_SCROLLING :{LTBLUE}Omgekeerde scrollrichting: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SMOOTH_SCROLLING :{LTBLUE}Vloeiend scrollen kijkvenster: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MEASURE_TOOLTIP :{LTBLUE}Toon dimensie informatie bij het gebruik van diverse bouw-tools: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_LIVERIES :{LTBLUE}Laat all bedrijfslogo's zien: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LIVERIES :{LTBLUE}Laat alle bedrijfslogo's zien: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LIVERIES_NONE :Niets
STR_CONFIG_PATCHES_LIVERIES_OWN :Eigen bedrijf
STR_CONFIG_PATCHES_LIVERIES_ALL :Alle bedrijven
@@ -1142,7 +1141,7 @@
STR_CONFIG_PATCHES_SERVINT_SHIPS_DISABLED :{LTBLUE}Standaard reparatie interval voor schepen: {ORANGE}uit
STR_CONFIG_PATCHES_NOSERVICE :{LTBLUE}Schakel onderhoud uit wanneer defecten uit staan: {ORANGE}{STRING}
STR_CONFIG_PATCHES_WAGONSPEEDLIMITS :{LTBLUE}Zet wagon snelheidslimieten aan: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_DISABLE_ELRAILS :{LTBLUE}Schakel electrische sporen uit: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DISABLE_ELRAILS :{LTBLUE}Schakel elektrische sporen uit: {ORANGE}{STRING}
STR_CONFIG_PATCHES_COLORED_NEWS_YEAR :{LTBLUE}Kleurenfoto's komen in: {ORANGE}{STRING}
STR_CONFIG_PATCHES_STARTING_YEAR :{LTBLUE}Beginjaar: {ORANGE}{STRING}
@@ -1152,7 +1151,7 @@
STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY :{LTBLUE}Bij slepen, plaats seinen elke: {ORANGE}{STRING} tegel(s)
STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE :{LTBLUE}Plaats automatisch semaphore seinen voor: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID :{WHITE}De stadindeling "geen wegen" is niet geldig in de scenario editor
+STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID :{WHITE}De stadsindeling "geen wegen" is niet geldig in de scenario editor
STR_CONFIG_PATCHES_TOWN_LAYOUT :{LTBLUE}Selecteer stedelijke wegindeling: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TOWN_LAYOUT_NO_ROADS :geen wegen
STR_CONFIG_PATCHES_TOWN_LAYOUT_DEFAULT :standaard
@@ -1206,7 +1205,7 @@
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}
STR_CHEAT_BUILD_IN_PAUSE :{LTBLUE}Bouwen in gepauzeerde toestand: {ORANGE}{STRING}
-STR_CHEAT_NO_JETCRASH :{LTBLUE}Jetvliegtuigen storten niet (vaak) neer op kleine vliegvelden: {ORANGE} {STRING}
+STR_CHEAT_NO_JETCRASH :{LTBLUE}Jet vliegtuigen storten niet (vaak) neer op kleine vliegvelden: {ORANGE} {STRING}
STR_CHEAT_SWITCH_CLIMATE :{LTBLUE}Verander klimaat: {ORANGE} {STRING}
STR_CHEAT_CHANGE_DATE :{LTBLUE}Verander datum: {ORANGE} {DATE_SHORT}
STR_CHEAT_SETUP_PROD :{LTBLUE}Sta aanpassen productiewaarden toe: {ORANGE}{STRING}
@@ -1263,7 +1262,7 @@
STR_BUOY_IS_IN_USE :{WHITE}... boei is in gebruik!
-STR_LANDINFO_COORDS :{BLACK}Coördinaten: {LTBLUE}{NUM}x{NUM} ({STRING})
+STR_LANDINFO_COORDS :{BLACK}Coördinaten: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Kan deel van station niet weghalen...
STR_CANT_CONVERT_RAIL :{WHITE}Kan railtype hier niet veranderen...
@@ -1374,34 +1373,23 @@
STR_NETWORK_PASSWORD_TIP :{BLACK}Bescherm je spel met een wachtwoord als je niet wil dat andere mensen meespelen
STR_NETWORK_SELECT_MAP :{BLACK}Selecteer een kaart:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Op welke kaart wil je spelen?
-STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Maximaal aantal spelers
-STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Kies een maximaal aantal toegestane spelers. Niet alle posities hoeven gebruikt te worden.
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LAN_INTERNET_COMBO :{BLACK}{SKIP}{STRING}
STR_NETWORK_LAN :Netwerk
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :LAN / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (adverteren)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :0 spelers
-STR_NETWORK_1_PLAYERS :1 speler
-STR_NETWORK_2_PLAYERS :2 spelers
-STR_NETWORK_3_PLAYERS :3 spelers
-STR_NETWORK_4_PLAYERS :4 spelers
-STR_NETWORK_5_PLAYERS :5 spelers
-STR_NETWORK_6_PLAYERS :6 spelers
-STR_NETWORK_7_PLAYERS :7 spelers
-STR_NETWORK_8_PLAYERS :8 spelers
-STR_NETWORK_9_PLAYERS :9 spelers
-STR_NETWORK_10_PLAYERS :10 spelers
+STR_NETWORK_CLIENTS_SELECT :{BLACK}{SKIP}{SKIP}{NUM} speler{P "" s}
+STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Maximaal aantal spelers
+STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Kies een maximaal aantal toegestane spelers. Niet alle posities hoeven gebruikt te worden.
+STR_NETWORK_COMPANIES_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{NUM} bedr{P ijf ijven}
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Max bedrijven:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Beperk de server tot een bepaald aantal bedrijven
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_SPECTATORS_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{NUM} toeschouwer{P "" s}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Max toeschouwers:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Beperk de server tot een bepaald aantal toeschouwers
-STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Gesproken taal:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Andere spelers zullen weten welke taal er wordt gesproken op de server.
-STR_NETWORK_COMBO5 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LANGUAGE_COMBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}Start spel
STR_NETWORK_START_GAME_TIP :{BLACK}Start een nieuw netwerkspel van een willekeurige kaart, of scenario
STR_NETWORK_LOAD_GAME :{BLACK}Laad spel
@@ -1412,10 +1400,10 @@
STR_NETWORK_LANG_ENGLISH :Engels
STR_NETWORK_LANG_GERMAN :Duits
STR_NETWORK_LANG_FRENCH :Frans
-STR_NETWORK_LANG_BRAZILIAN :Brazilliaans
+STR_NETWORK_LANG_BRAZILIAN :Braziliaans
STR_NETWORK_LANG_BULGARIAN :Bulgaars
STR_NETWORK_LANG_CHINESE :Chinees
-STR_NETWORK_LANG_CZECH :Tchechisch
+STR_NETWORK_LANG_CZECH :Tsjechisch
STR_NETWORK_LANG_DANISH :Deens
STR_NETWORK_LANG_DUTCH :Nederlands
STR_NETWORK_LANG_ESPERANTO :Esperanto
@@ -1431,7 +1419,7 @@
STR_NETWORK_LANG_PORTUGUESE :Portugees
STR_NETWORK_LANG_ROMANIAN :Roemeens
STR_NETWORK_LANG_RUSSIAN :Russisch
-STR_NETWORK_LANG_SLOVAK :Slovaaks
+STR_NETWORK_LANG_SLOVAK :Slowaaks
STR_NETWORK_LANG_SLOVENIAN :Sloveens
STR_NETWORK_LANG_SPANISH :Spaans
STR_NETWORK_LANG_SWEDISH :Zweeds
@@ -1479,7 +1467,7 @@
STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Ophalen bedrijfsinformatie...
############ End of leave-in-this-order
STR_NETWORK_CONNECTING_WAITING :{BLACK}{NUM} spelers{P "" s} voor ons
-STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{NUM} / {NUM} kbytes gedownloaded
+STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{NUM} / {NUM} kbytes opgehaald
STR_NETWORK_DISCONNECT :{BLACK}Verbinding verbroken
@@ -1498,13 +1486,13 @@
STR_NETWORK_ERR_SERVER_START :{WHITE} Kan server niet starten.
STR_NETWORK_ERR_CLIENT_START :{WHITE} Kan geen verbinding maken.
STR_NETWORK_ERR_TIMEOUT :{WHITE} Verbinding #{NUM} duurde te lang.
-STR_NETWORK_ERR_SERVER_ERROR :{WHITE} Er is een protocol-fout gemaakt en onze verbinding is gesloten.
+STR_NETWORK_ERR_SERVER_ERROR :{WHITE} Er is een protocolfout gemaakt en onze verbinding is gesloten.
STR_NETWORK_ERR_WRONG_REVISION :{WHITE} De revisie van deze client komt niet overeen met de revisie van de server.
STR_NETWORK_ERR_WRONG_PASSWORD :{WHITE} Ongeldig wachtwoord.
STR_NETWORK_ERR_SERVER_FULL :{WHITE} De server is vol
STR_NETWORK_ERR_SERVER_BANNED :{WHITE}Je bent verbannen van deze server
STR_NETWORK_ERR_KICKED :{WHITE} Je bent van de server geschopt
-STR_NETWORK_ERR_CHEATER :{WHITE} Valsspelen is niet toegestaan op deze server
+STR_NETWORK_ERR_CHEATER :{WHITE} Vals spelen is niet toegestaan op deze server
STR_NETWORK_ERR_LEFT :heeft het spel verlaten
############ Leave those lines in this order!!
@@ -1540,7 +1528,7 @@
STR_NETWORK_SERVER_REBOOT :{WHITE} De server wordt opnieuw gestart...{}Wacht aub...
STR_NETWORK_SERVER :Server
-STR_NETWORK_CLIENT :Client
+STR_NETWORK_CLIENT :Speler
STR_NETWORK_SPECTATORS :Toeschouwer
STR_NETWORK_CLIENTLIST_NONE :(geen)
@@ -1601,7 +1589,7 @@
STR_100A_RAILROAD_CONSTRUCTION :{WHITE}Spoorwegconstructie
STR_TITLE_ELRAIL_CONSTRUCTION :{WHITE}Geëlectrificeerde spoorwegconstructie
STR_100B_MONORAIL_CONSTRUCTION :{WHITE}Monorailconstructie
-STR_100C_MAGLEV_CONSTRUCTION :{WHITE}MagLevconstructie
+STR_100C_MAGLEV_CONSTRUCTION :{WHITE}MagLev constructie
STR_100D_SELECT_RAIL_BRIDGE :{WHITE}Kies spoorbrug
STR_100E_CAN_T_BUILD_TRAIN_DEPOT :{WHITE}Kan hier geen treindepot bouwen...
STR_100F_CAN_T_BUILD_RAILROAD_STATION :{WHITE}Kan hier geen treinstation bouwen...
@@ -1611,9 +1599,9 @@
STR_1013_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Kan hier geen seinen weghalen...
STR_1014_TRAIN_DEPOT_ORIENTATION :{WHITE}Bouw Treindepot
STR_1015_RAILROAD_CONSTRUCTION :Spoorwegconstructie
-STR_TOOLB_ELRAIL_CONSTRUCTION :Geëlectrificeerde spoorwegconstructie
+STR_TOOLB_ELRAIL_CONSTRUCTION :Geëlektrificeerde spoorwegconstructie
STR_1016_MONORAIL_CONSTRUCTION :Monorailconstructie
-STR_1017_MAGLEV_CONSTRUCTION :MagLevconstructie
+STR_1017_MAGLEV_CONSTRUCTION :MagLev constructie
STR_1018_BUILD_RAILROAD_TRACK :{BLACK}Plaats spoor
STR_1019_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Bouw treindepot (om treinen te bouwen en te onderhouden)
STR_101A_BUILD_RAILROAD_STATION :{BLACK}Bouw treinstation
@@ -1646,7 +1634,7 @@
STR_1802_ROAD_CONSTRUCTION :{WHITE}Wegenbouw
STR_1802_TRAMWAY_CONSTRUCTION :{WHITE}Bouw tramrails
STR_1803_SELECT_ROAD_BRIDGE :{WHITE}Kies brug
-STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION :{WHITE}... een richtings wegen kunnen geen kruisingen hebben
+STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION :{WHITE}... eenrichtingswegen kunnen geen kruisingen hebben
STR_1804_CAN_T_BUILD_ROAD_HERE :{WHITE}Kan hier geen weg bouwen...
STR_1804_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Kan geen tramrails bouwen hier...
STR_1805_CAN_T_REMOVE_ROAD_FROM :{WHITE}Kan hier geen weg weghalen...
@@ -1701,9 +1689,9 @@
STR_2008_CAN_T_RENAME_TOWN :{WHITE}Kan stad niet hernoemen...
STR_2009_LOCAL_AUTHORITY_REFUSES :{WHITE}De gemeenteraad van {TOWN} staat dit niet toe
STR_200A_TOWN_NAMES_CLICK_ON_NAME :{BLACK}Plaatsnamen - klik op naam om het hoofdbeeld te centreren op de stad
-STR_200B_CENTER_THE_MAIN_VIEW_ON :{BLACK}Centreer het hoofdbeeld op de lokatie van de stad
+STR_200B_CENTER_THE_MAIN_VIEW_ON :{BLACK}Centreer het hoofdbeeld op de locatie van de stad
STR_200C_CHANGE_TOWN_NAME :{BLACK}Hernoem stad
-STR_200D_PASSENGERS_LAST_MONTH_MAX :{BLACK}Passagiers afelopen maand: {ORANGE}{COMMA}{BLACK} max: {ORANGE}{COMMA}
+STR_200D_PASSENGERS_LAST_MONTH_MAX :{BLACK}Passagiers afgelopen maand: {ORANGE}{COMMA}{BLACK} max: {ORANGE}{COMMA}
STR_200E_MAIL_LAST_MONTH_MAX :{BLACK}Post afgelopen maand: {ORANGE}{COMMA}{BLACK} max: {ORANGE}{COMMA}
STR_200F_TALL_OFFICE_BLOCK :Hoog kantoorgebouw
STR_2010_OFFICE_BLOCK :Kantoorgebouw
@@ -1758,7 +1746,7 @@
STR_2042_DO_IT :{BLACK}Doe het
STR_2043_LIST_OF_THINGS_TO_DO_AT :{BLACK}Lijst met dingen die mogelijk zijn in deze stad - klik op een item voor meer details
STR_2044_CARRY_OUT_THE_HIGHLIGHTED :{BLACK}Voer de geselecteerde actie uit in de bovenstaande lijst
-STR_2045_ACTIONS_AVAILABLE :{BLACK}Mogelijkheiden:
+STR_2045_ACTIONS_AVAILABLE :{BLACK}Mogelijkheden:
STR_2046_SMALL_ADVERTISING_CAMPAIGN :Kleine reclamecampagne
STR_2047_MEDIUM_ADVERTISING_CAMPAIGN :Middelgrote reclamecampagne
STR_2048_LARGE_ADVERTISING_CAMPAIGN :Grote reclamecampagne
@@ -1772,7 +1760,7 @@
STR_204F_INITIATE_A_LARGE_LOCAL :{WHITE}{STRING}{}{YELLOW} Begin een grote advertentiecampagne, om meer passagiers en goederen naar je transportdiensten te trekken.{} Kosten: {CURRENCY}
STR_2050_FUND_THE_RECONSTRUCTION :{WHITE}{STRING}{}{YELLOW} Betaal een vernieuwing van het wegdek. Veroorzaakt merkbare verstoring van het wegverkeer tot 6 maanden.{} Kosten: {CURRENCY}
STR_2051_BUILD_A_STATUE_IN_HONOR :{WHITE}{STRING}{}{YELLOW} Bouw een standbeeld ter ere van jouw bedrijf.{} Kosten: {CURRENCY}
-STR_2052_FUND_THE_CONSTRUCTION_OF :{WHITE}{STRING}{}{YELLOW} Betaal de bouw van nieuwe commerciele gebouwen in de stad.{} Kosten: {CURRENCY}
+STR_2052_FUND_THE_CONSTRUCTION_OF :{WHITE}{STRING}{}{YELLOW} Betaal de bouw van nieuwe commerciële gebouwen in de stad.{} Kosten: {CURRENCY}
STR_2053_BUY_1_YEAR_S_EXCLUSIVE :{WHITE}{STRING}{}{YELLOW} Koop 1 jaar exclusieve transportrechten in deze stad. De gemeenteraad staat passagiers en goederen toe alleen jouw stations te gebruiken.{} Kosten: {CURRENCY}
STR_TOWN_BRIBE_THE_LOCAL_AUTHORITY_DESC :{WHITE}{STRING}{}{YELLOW} Koop het plaatselijk gezag om om je rang te verhogen, met het gevaar van een strenge sanctie, wanneer gepakt.{} Kosten: {CURRENCY}
STR_2055_TRAFFIC_CHAOS_IN_ROAD_REBUILDING :{BIGFONT}{BLACK}Verkeerschaos in {TOWN}!{}{}Wegreparatie betaald door {COMPANY} zorgt voor 6 maanden van irritatie bij weggebruikers!
@@ -1860,8 +1848,8 @@
STR_3049_0 :{YELLOW}{STATION} {STATIONFEATURES}
STR_304A_NONE :{YELLOW}- Geen -
STR_304B_SITE_UNSUITABLE :{WHITE}...plaats ongeschikt
-STR_304C_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Te dicht bij een andere dok
-STR_304D_MUST_DEMOLISH_DOCK_FIRST :{WHITE}Verwijder eerst dock
+STR_304C_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Te dicht bij een andere haven
+STR_304D_MUST_DEMOLISH_DOCK_FIRST :{WHITE}Verwijder eerst haven
STR_304E_SELECT_RAILROAD_STATION :{BLACK}Selecteer treinstation richting
STR_304F_SELECT_NUMBER_OF_PLATFORMS :{BLACK}Selecteer aantal platforms voor station
STR_3050_SELECT_LENGTH_OF_RAILROAD :{BLACK}Selecteer lengte van station
@@ -1869,7 +1857,7 @@
STR_3052_SELECT_TRUCK_LOADING_BAY :{BLACK}Selecteer richting van vrachtwagenstation
STR_3051_SELECT_PASSENGER_TRAM_STATION_ORIENTATION :{BLACK}Selecteer passagiers tram station richting
STR_3052_SELECT_CARGO_TRAM_STATION_ORIENTATION :{BLACK}Selecteer vracht tram station richting
-STR_3053_CENTER_MAIN_VIEW_ON_STATION :{BLACK}Centreer hoofdbeeld op lokatie van station
+STR_3053_CENTER_MAIN_VIEW_ON_STATION :{BLACK}Centreer hoofdbeeld op locatie van station
STR_3054_SHOW_STATION_RATINGS :{BLACK}Bekijk stationsreputaties
STR_3055_CHANGE_NAME_OF_STATION :{BLACK}Hernoem station
STR_3056_SHOW_LIST_OF_ACCEPTED_CARGO :{BLACK}Laat lijst van gevraagde goederen zien
@@ -1886,7 +1874,7 @@
STR_3064_HIGHLIGHT_COVERAGE_AREA :{BLACK}Markeer het dekkingsgebied van de voorgestelde locatie
STR_3065_DON_T_HIGHLIGHT_COVERAGE :{BLACK}Markeer het dekkingsgebied van de voorgestelde locatie niet
STR_3066_COVERAGE_AREA_HIGHLIGHT :{BLACK}Dekkingsgebied markeren
-STR_3068_DOCK :{WHITE}Dok
+STR_3068_DOCK :{WHITE}Haven
STR_3069_BUOY :Boei
STR_306A_BUOY_IN_THE_WAY :{WHITE}...boei in de weg
STR_306C_STATION_TOO_SPREAD_OUT :{WHITE}...station te verspreid
@@ -1931,7 +1919,7 @@
STR_400E_SELECT_NEW_GAME_TYPE :{WHITE}Selecteer nieuw speltype
STR_400F_SELECT_SCENARIO_GREEN_PRE :{BLACK}Selecteer scenario (groen), vooraf ingesteld spel (blauw), or willekeurig nieuw spel
STR_4010_GENERATE_RANDOM_NEW_GAME :Genereer willekeurig nieuw spel
-STR_4011_LOAD_HEIGHTMAP :{WHITE}Laad Heightmap
+STR_4011_LOAD_HEIGHTMAP :{WHITE}Laad Hoogtekaart
##id 0x4800
STR_4800_IN_THE_WAY :{WHITE}{STRING} in de weg
@@ -1953,7 +1941,7 @@
STR_4810_PAPER_MILL :Papierfabriek
STR_4811_GOLD_MINE :Goudmijn
STR_4812_BANK :Bank
-STR_4813_DIAMOND_MINE :Diamandmijn
+STR_4813_DIAMOND_MINE :Diamantmijn
STR_4814_IRON_ORE_MINE :IJzermijn
STR_4815_FRUIT_PLANTATION :Boomgaard
STR_4816_RUBBER_PLANTATION :Rubberboerderij
@@ -1961,7 +1949,7 @@
STR_4818_WATER_TOWER :Watertoren
STR_4819_FACTORY :Fabriek
STR_481A_FARM :Boerderij
-STR_481B_LUMBER_MILL :Houtkapperij
+STR_481B_LUMBER_MILL :Houtzagerij
STR_481C_COTTON_CANDY_FOREST :Suikerspinbos
STR_481D_CANDY_FACTORY :Snoepfabriek
STR_481E_BATTERY_FARM :Batterijplantage
@@ -2051,8 +2039,8 @@
STR_5800_OBJECT_IN_THE_WAY :{WHITE}Object in de weg
STR_5801_TRANSMITTER :Zender
STR_5802_LIGHTHOUSE :Vuurtoren
-STR_5803_COMPANY_HEADQUARTERS :Bedrijfs Hoofdkwartier
-STR_5804_COMPANY_HEADQUARTERS_IN :{WHITE}...bedrijfs hoofdkwartier in de weg
+STR_5803_COMPANY_HEADQUARTERS :Bedrijfshoofdkwartier
+STR_5804_COMPANY_HEADQUARTERS_IN :{WHITE}...bedrijfshoofdkwartier in de weg
STR_5805_COMPANY_OWNED_LAND :Door een bedrijf opgekocht terrein
STR_5806_CAN_T_PURCHASE_THIS_LAND :{WHITE}Kan dit stuk land niet kopen...
STR_5807_YOU_ALREADY_OWN_IT :{WHITE}...het is al van jou!
@@ -2106,7 +2094,7 @@
############ end of savegame specific region!
##id 0x6800
-STR_6800_DIFFICULTY_LEVEL :{WHITE}Moeilijksheidsgraad
+STR_6800_DIFFICULTY_LEVEL :{WHITE}Moeilijkheidsgraad
STR_OPTIONS_SAVE_CHANGES :{BLACK}Opslaan
############ range for difficulty levels starts
@@ -2258,19 +2246,19 @@
STR_704E_KEY_TO_COMPANY_GRAPHS :{WHITE}Legenda voor bedrijfsgrafieken
STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY :{BLACK}Klik hier om dit bedrijf weer te geven of te verbergen op de grafiek
STR_7050_UNITS_OF_CARGO_DELIVERED :{WHITE}Eenheden van goederen afgeleverd
-STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}Bedrijfs prestatie score (maximale score=1000)
+STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}Bedrijfsprestatie 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}{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_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT}{COMPANY} wordt verkocht of failliet verklaard tenzij financiële situatie snel verbetert!
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME}{}(Directeur)
STR_7059_TRANSPORT_COMPANY_MERGER :{BLACK}{BIGFONT}Transportbedrijf overgenomen!
STR_705A_HAS_BEEN_SOLD_TO_FOR :{BLACK}{BIGFONT}{COMPANY} is verkocht aan {COMPANY} voor {CURRENCY}!
STR_705B_WE_ARE_LOOKING_FOR_A_TRANSPORT :{WHITE}We zoeken voor een transportbedrijf dat ons bedrijf over kan nemen.{}{}Wil je {COMPANY} kopen voor {CURRENCY}?
STR_705C_BANKRUPT :{BLACK}{BIGFONT}Failliet!
-STR_705D_HAS_BEEN_CLOSED_DOWN_BY :{BLACK}{BIGFONT}{COMPANY} is gesloten door schuldeisers en alle eigendomen zijn verkocht!
+STR_705D_HAS_BEEN_CLOSED_DOWN_BY :{BLACK}{BIGFONT}{COMPANY} is gesloten door schuldeisers en alle eigendommen zijn verkocht!
STR_705E_NEW_TRANSPORT_COMPANY_LAUNCHED :{BLACK}{BIGFONT}Nieuw transportbedrijf opgestart!
STR_705F_STARTS_CONSTRUCTION_NEAR :{BLACK}{BIGFONT}{COMPANY} begint werkzaamheden bij {TOWN}!
STR_7060_CAN_T_BUY_COMPANY :{WHITE}Kan bedrijf niet kopen...
@@ -2289,9 +2277,9 @@
STR_706D_PRESIDENT :President
STR_706E_TYCOON :Tycoon
STR_706F_BUILD_HQ :{BLACK}Bouw HQ
-STR_7070_BUILD_COMPANY_HEADQUARTERS :{BLACK}Bouw bedrijfs hoofdkwartier / bekijk bedrijfs hoodkwartier
-STR_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Herbouw bedrijfs hoofdkwartier ergens anders voor 1% van de bedrijfswaarde
-STR_7071_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Kan bedrijfs hoofdkwartier niet bouwen
+STR_7070_BUILD_COMPANY_HEADQUARTERS :{BLACK}Bouw bedrijfshoofdkwartier / bekijk bedrijfshoofdkwartier
+STR_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Herbouw bedrijfshoofdkwartier ergens anders voor 1% van de bedrijfswaarde
+STR_7071_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Kan bedrijfshoofdkwartier niet bouwen
STR_7072_VIEW_HQ :{BLACK}Bekijk HQ
STR_RELOCATE_HQ :{BLACK}Verplaats HQ
STR_COMPANY_PASSWORD :{BLACK}Wachtwoord
@@ -2339,7 +2327,7 @@
STR_LIVERY_ROADVEH_TIP :{BLACK}Laat wegvoertuig kleurschema's zien
STR_LIVERY_SHIP_TIP :{BLACK}Laat schip kleurschema's zien
STR_LIVERY_AIRCRAFT_TIP :{BLACK}Laat de vliegtuig kleurschema's zien
-STR_LIVERY_PRIMARY_TIP :{BLACK}Kies de oofdkleur voor het geselecteerde schema
+STR_LIVERY_PRIMARY_TIP :{BLACK}Kies de hoofdkleur voor het geselecteerde schema
STR_LIVERY_SECONDARY_TIP :{BLACK}Kies de tweede kleur voor het geselecteerde schema
STR_LIVERY_PANEL_TIP :{BLACK}Kies een kleurschema om te wijzigen, of meerdere schema's met CTRL+klik. Klik in het venster het gebruik van het kleurschema te kiezen
@@ -2381,7 +2369,7 @@
STR_8022_WOOD_TRUCK :Houttruck
STR_8023_IRON_ORE_HOPPER :IJzererts Wagon
STR_8024_STEEL_TRUCK :Staaltruck
-STR_8025_ARMORED_VAN :Gepanserde wagen
+STR_8025_ARMORED_VAN :Gepantserde wagen
STR_8026_FOOD_VAN :Voedselwagen
STR_8027_PAPER_TRUCK :Papiertruck
STR_8028_COPPER_ORE_HOPPER :Kopererts Wagon
@@ -2411,7 +2399,7 @@
STR_8040_WOOD_TRUCK :Hout Truck
STR_8041_IRON_ORE_HOPPER :IJzererts Wagon
STR_8042_STEEL_TRUCK :Staal Truck
-STR_8043_ARMORED_VAN :Gepanserde wagen
+STR_8043_ARMORED_VAN :Gepantserde wagen
STR_8044_FOOD_VAN :Voedselwagen
STR_8045_PAPER_TRUCK :Papier Truck
STR_8046_COPPER_ORE_HOPPER :Koper erts Wagon
@@ -2443,7 +2431,7 @@
STR_8060_WOOD_TRUCK :Hout Truck
STR_8061_IRON_ORE_HOPPER :IJzererts Wagon
STR_8062_STEEL_TRUCK :Staal Truck
-STR_8063_ARMORED_VAN :Gepanserde wagen
+STR_8063_ARMORED_VAN :Gepantserde wagen
STR_8064_FOOD_VAN :Voedselwagen
STR_8065_PAPER_TRUCK :Papier Truck
STR_8066_COPPER_ORE_HOPPER :Koper erts Wagon
@@ -2497,9 +2485,9 @@
STR_8096_BALOGH_STEEL_TRUCK :Balogh Staal Truck
STR_8097_UHL_STEEL_TRUCK :Uhl Staal Truck
STR_8098_KELLING_STEEL_TRUCK :Kelling Staal Truck
-STR_8099_BALOGH_ARMORED_TRUCK :Balogh Gepanserde Truck
-STR_809A_UHL_ARMORED_TRUCK :Uhl Gepanserde Truck
-STR_809B_FOSTER_ARMORED_TRUCK :Foster Gepanserde Truck
+STR_8099_BALOGH_ARMORED_TRUCK :Balogh Gepantserde Truck
+STR_809A_UHL_ARMORED_TRUCK :Uhl Gepantserde Truck
+STR_809B_FOSTER_ARMORED_TRUCK :Foster Gepantserde Truck
STR_809C_FOSTER_FOOD_VAN :Foster Voedsel Wagen
STR_809D_PERRY_FOOD_VAN :Perry Voedsel Wagen
STR_809E_CHIPPY_FOOD_VAN :Chippy Voedsel Wagen
@@ -2601,7 +2589,7 @@
STR_80FE_GURU_X2_HELICOPTER :Guru X2 Helikopter
STR_80FF_POWERNAUT_HELICOPTER :Powernaut Helikopter
STR_8100_MESSAGE_FROM_VEHICLE_MANUFACTURE :{WHITE}Bericht van voertuigenfabrikant
-STR_8101_WE_HAVE_JUST_DESIGNED_A :{GOLD}We hebben zojuist een nieuwe {STRING} ontworpen - ben je geinteresseerd in een jaar lang exclusief gebruik van dit voertuig, zodat we kunnen zien of het goed werkt voordat we het wereldwijd beschikbaar maken?
+STR_8101_WE_HAVE_JUST_DESIGNED_A :{GOLD}We hebben zojuist een nieuwe {STRING} ontworpen - ben je geïnteresseerd in een jaar lang exclusief gebruik van dit voertuig, zodat we kunnen zien of het goed werkt voordat we het wereldwijd beschikbaar maken?
STR_8102_RAILROAD_LOCOMOTIVE :spoorweg locomotief
STR_8103_ROAD_VEHICLE :wegvoertuig
STR_8104_AIRCRAFT :vliegtuig
@@ -2659,18 +2647,18 @@
STR_881B_TRAINS :{WHITE}{COMPANY} - {COMMA} Treinen
STR_881C_NEW_RAIL_VEHICLES :{WHITE}Nieuwe spoorvoertuigen
-STR_NEW_ELRAIL_VEHICLES :{WHITE}Nieuwe electrische spoorvoertuigen
+STR_NEW_ELRAIL_VEHICLES :{WHITE}Nieuwe elektrische spoorvoertuigen
STR_881D_NEW_MONORAIL_VEHICLES :{WHITE}Nieuwe monorailvoertuigen
-STR_881E_NEW_MAGLEV_VEHICLES :{WHITE}Nieuwe maglevvoertuigen
+STR_881E_NEW_MAGLEV_VEHICLES :{WHITE}Nieuwe maglev voertuigen
STR_ALL_AVAIL_RAIL_VEHICLES :{WHITE}Rails Voertuig
STR_881F_BUILD_VEHICLE :{BLACK}Bouw voertuig
STR_CLONE_ROAD_VEHICLE :{BLACK}Kloon voertuig
-STR_CLONE_ROAD_VEHICLE_INFO :{BLACK}Hierdoor wordt een kopie gebouw van dit voertuig. Control-click deelt de orders
-STR_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Hierdoor wordt een kopie gebouwd van een voertuig. Klik op deze knop en dan op een voertuig binnen of buiten het depot. Control-click deelt de orders
+STR_CLONE_ROAD_VEHICLE_INFO :{BLACK}Hierdoor wordt een kopie gebouw van dit voertuig. Control-klik deelt de orders
+STR_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Hierdoor wordt een kopie gebouwd van een voertuig. Klik op deze knop en dan op een voertuig binnen of buiten het depot. Control-klik deelt de orders
STR_CLONE_TRAIN :{BLACK}Kloon Trein
-STR_CLONE_TRAIN_INFO :{BLACK}Hierdoor wordt een kopie gebouw van deze trein inclusief wagons. Control-click deelt de orders
-STR_CLONE_TRAIN_DEPOT_INFO :{BLACK}Hierdoor wordt een kopie gebouwd van een trein inclusief wagons. Klik op deze knop en dan op een trein binnen of buiten het depot. Control-click deelt de orders
+STR_CLONE_TRAIN_INFO :{BLACK}Hierdoor wordt een kopie gebouw van deze trein inclusief wagons. Control-klik deelt de orders
+STR_CLONE_TRAIN_DEPOT_INFO :{BLACK}Hierdoor wordt een kopie gebouwd van een trein inclusief wagons. Klik op deze knop en dan op een trein binnen of buiten het depot. Control-klik deelt de orders
STR_8820_RENAME :{BLACK}Hernoemen
STR_8823_SKIP :{BLACK}Sla over
STR_8824_DELETE :{BLACK}Verwijder
@@ -2708,11 +2696,11 @@
STR_8839_CAN_T_SELL_RAILROAD_VEHICLE :{WHITE}Kan treinonderdeel niet verkopen
STR_883A_UNABLE_TO_FIND_ROUTE_TO :{WHITE}Kan geen route naar lokale depot vinden
STR_883B_CAN_T_STOP_START_TRAIN :{WHITE}Kan trein niet starten of stoppen...
-STR_883C_SERVICING_INTERVAL_DAYS :{BLACK}Reparatieinterval: {LTBLUE}{COMMA}dagen{BLACK} Laatste reparatie: {LTBLUE}{DATE_LONG}
+STR_883C_SERVICING_INTERVAL_DAYS :{BLACK}Reparatie-interval: {LTBLUE}{COMMA}dagen{BLACK} Laatste reparatie: {LTBLUE}{DATE_LONG}
STR_SERVICING_INTERVAL_PERCENT :{BLACK}Service interval: {LTBLUE}{COMMA}%{BLACK} Laatste service: {LTBLUE}{DATE_LONG}
STR_883D_TRAINS_CLICK_ON_TRAIN_FOR :{BLACK}Treinen - klik op een trein voor informatie
STR_883E_BUILD_NEW_TRAINS_REQUIRES :{BLACK}Bouw nieuwe treinen (treindepot nodig)
-STR_883F_TRAINS_CLICK_ON_TRAIN_FOR :{BLACK}Treinen - klik op trein voor info., sleep voertuig om toe tevoegen/verwijderen van trein
+STR_883F_TRAINS_CLICK_ON_TRAIN_FOR :{BLACK}Treinen - klik op trein voor info., sleep voertuig om toe toevoegen/verwijderen van trein
STR_8840_BUILD_NEW_TRAIN_VEHICLE :{BLACK}Bouw nieuw treinonderdeel
STR_8841_DRAG_TRAIN_VEHICLE_TO_HERE :{BLACK}Sleep treinonderdeel hier om het te verkopen
STR_8842_CENTER_MAIN_VIEW_ON_TRAIN :{BLACK}Centreer het scherm op de locatie van de trein depot
@@ -2726,12 +2714,12 @@
STR_884A_FORCE_TRAIN_TO_PROCEED :{BLACK}Forceer trein verder te rijden zonder te wachten op een groen signaal
STR_884B_REVERSE_DIRECTION_OF_TRAIN :{BLACK}Keer trein om
STR_884C_SHOW_TRAIN_DETAILS :{BLACK}Toon trein details
-STR_884D_INCREASE_SERVICING_INTERVAL :{BLACK}Vergroot reperatie interval
+STR_884D_INCREASE_SERVICING_INTERVAL :{BLACK}Vergroot reparatie-interval
STR_884E_DECREASE_SERVICING_INTERVAL :{BLACK}Verklein reparatieinterval
STR_884F_SHOW_DETAILS_OF_CARGO_CARRIED :{BLACK}Laat details zien van vervoerde goederen
STR_8850_SHOW_DETAILS_OF_TRAIN_VEHICLES :{BLACK}Laat details zien van treinvoertuigen
STR_8851_SHOW_CAPACITIES_OF_EACH :{BLACK}Laat de mogelijkheden van elk voertuig zien
-STR_8852_SHOW_TOTAL_CARGO :{BLACK}Laat totale capaiteit van trein zien, gescheiden door goederentype
+STR_8852_SHOW_TOTAL_CARGO :{BLACK}Laat totale capaciteit van trein zien, gescheiden door goederentype
STR_8852_ORDERS_LIST_CLICK_ON_ORDER :{BLACK}Orderlijst - klik op een order om deze te selecteren. CTRL + klikken gaat naar het station
STR_8853_SKIP_THE_CURRENT_ORDER :{BLACK}Sla huidige order over, en begin met de volgende. CTRL + klik, begin direct met geselecteerde order
STR_8854_DELETE_THE_HIGHLIGHTED :{BLACK}Verwijder de geselecteerde order
@@ -2784,8 +2772,8 @@
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
-STR_TIMETABLE_TOTAL_TIME :Dit tijdscheme duurt {STRING} om te volbrengen
-STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :Dit tijdscheme duurt minstens {STRING} om te volbrengen (niet alles geselecteerd)
+STR_TIMETABLE_TOTAL_TIME :Dit tijdschema duurt {STRING} om te volbrengen
+STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :Dit tijdschema duurt minstens {STRING} om te volbrengen (niet alles geselecteerd)
STR_TIMETABLE_AUTOFILL :{BLACK}Auto aanvullen
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Vul het tijdschema automatisch met de waardes van de eerste reis
@@ -2819,14 +2807,14 @@
STR_901B_BUILD_NEW_ROAD_VEHICLES :{BLACK}Bouw nieuwe wegvoertuigen (heeft wegvoertuigdepot nodig)
STR_901C_CURRENT_VEHICLE_ACTION :{BLACK}Huidige actie van voertuig - klik hier om voertuig te starten of te stoppen
STR_901D_SHOW_VEHICLE_S_ORDERS :{BLACK}Laat orders van voertuig zien
-STR_901E_CENTER_MAIN_VIEW_ON_VEHICLE :{BLACK}Centreer hoofdscherm op de lokatie van het voertuig
+STR_901E_CENTER_MAIN_VIEW_ON_VEHICLE :{BLACK}Centreer hoofdscherm op de locatie van het voertuig
STR_901F_SEND_VEHICLE_TO_DEPOT :{BLACK}Stuur voertuig naar depot
STR_9020_FORCE_VEHICLE_TO_TURN_AROUND :{BLACK}Dwing het voertuig om om te draaien
STR_9021_SHOW_ROAD_VEHICLE_DETAILS :{BLACK}Laat details van wegvoertuig zien
STR_9022_VEHICLES_CLICK_ON_VEHICLE :{BLACK}Voertuigen - klik op voertuig voor informatie
STR_9023_BUILD_NEW_ROAD_VEHICLE :{BLACK}Bouw nieuw wegvoertuig
STR_9024_DRAG_ROAD_VEHICLE_TO_HERE :{BLACK}Sleep een wegvoertuig hier om het te verkopen
-STR_9025_CENTER_MAIN_VIEW_ON_ROAD :{BLACK}Centreer hoofdscherm op wegvoertuigs depot lokatie
+STR_9025_CENTER_MAIN_VIEW_ON_ROAD :{BLACK}Centreer hoofdscherm op wegvoertuigdepot locatie
STR_9026_ROAD_VEHICLE_SELECTION :{BLACK}Wegvoertuig selectie lijst - klik op voertuig voor informatie
STR_9027_BUILD_THE_HIGHLIGHTED_ROAD :{BLACK}Bouw het geselecteerde wegvoertuig
STR_902A_COST_SPEED_RUNNING_COST :{BLACK}Prijs: {CURRENCY}{}Snelheid: {VELOCITY}{}Brandstofkosten: {CURRENCY}/jr{}Capaciteit: {CARGO}
@@ -2838,7 +2826,7 @@
STR_902E_NAME_ROAD_VEHICLE :{BLACK}Benoem wegvoertuig
STR_902F_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Inwoners feesten...{}Eerste bus arriveert in {STATION}!
STR_9030_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Inwoners feesten...{}Eerste vrachtwagen arriveert in {STATION}!
-STR_902F_CITIZENS_CELEBRATE_FIRST_TRAM :{BLACK}{BIGFONT}Infwoners feesten . . .{}Eerste passagiers tram arriveert in {STATION}!
+STR_902F_CITIZENS_CELEBRATE_FIRST_TRAM :{BLACK}{BIGFONT}Inwoners feesten . . .{}Eerste passagiers tram arriveert in {STATION}!
STR_9030_CITIZENS_CELEBRATE_FIRST_TRAM :{BLACK}{BIGFONT}Inwoners feesten . . .{}Eerste vracht tram arriveert in {STATION}!
STR_9031_ROAD_VEHICLE_CRASH_DRIVER :{BLACK}{BIGFONT}Wegvoertuig gebotst!{}Bestuurder verongelukt door treinbotsing
STR_9032_ROAD_VEHICLE_CRASH_DIE :{BLACK}{BIGFONT}Wegvoertuig gebotst!{}{COMMA} verongelukt door treinbotsing
@@ -2858,17 +2846,17 @@
STR_ROAD_SELECT_TYPE_OF_CARGO_FOR :{BLACK}Selecteer welk type vracht het wagen moet vervoeren
##id 0x9800
-STR_9800_DOCK_CONSTRUCTION :Dokbouw
-STR_9801_DOCK_CONSTRUCTION :{WHITE}Dokbouw
-STR_9802_CAN_T_BUILD_DOCK_HERE :{WHITE}Kan hier geen dok bouwen...
+STR_9800_DOCK_CONSTRUCTION :Havenbouw
+STR_9801_DOCK_CONSTRUCTION :{WHITE}Havenbouw
+STR_9802_CAN_T_BUILD_DOCK_HERE :{WHITE}Kan hier geen haven bouwen...
STR_9803_SHIP_DEPOT :{WHITE}{TOWN} Scheepswerf
STR_9804_NEW_SHIPS :{BLACK}Nieuwe schepen
STR_9805_SHIPS :{WHITE}{COMPANY} - {COMMA} Schepen
STR_9808_NEW_SHIPS :{WHITE}Nieuwe schepen
STR_9809_BUILD_SHIP :{BLACK}Bouw schip
STR_CLONE_SHIP :{BLACK}Kloon Schip
-STR_CLONE_SHIP_INFO :{BLACK}Hierdoor wordt een kopie gebouw van dit schip. Control-click deelt de orders
-STR_CLONE_SHIP_DEPOT_INFO :{BLACK}Hierdoor wordt een kopie gebouwd van een schip. Klik op deze knop en dan op een schip binnen of buiten het depot. Control-click deelt de orders
+STR_CLONE_SHIP_INFO :{BLACK}Hierdoor wordt een kopie gebouw van dit schip. Control-klik deelt de orders
+STR_CLONE_SHIP_DEPOT_INFO :{BLACK}Hierdoor wordt een kopie gebouwd van een schip. Klik op deze knop en dan op een schip binnen of buiten het depot. Control-klik deelt de orders
STR_980B_SHIP_MUST_BE_STOPPED_IN :{WHITE}Schip moet gestopt zijn binnen een depot
STR_980C_CAN_T_SELL_SHIP :{WHITE}Kan schip niet verkopen...
STR_980D_CAN_T_BUILD_SHIP :{WHITE}Kan schip niet kopen...
@@ -2894,14 +2882,14 @@
STR_981F_SHIPS_CLICK_ON_SHIP_FOR :{BLACK}Schepen - klik op schip voor informatie
STR_9820_BUILD_NEW_SHIP :{BLACK}Bouw nieuw schip
STR_9821_DRAG_SHIP_TO_HERE_TO_SELL :{BLACK}Sleep schip hierheen om het te verkopen
-STR_9822_CENTER_MAIN_VIEW_ON_SHIP :{BLACK}Centreer hoofdbeeld op de lokatie van het schipdepot
+STR_9822_CENTER_MAIN_VIEW_ON_SHIP :{BLACK}Centreer hoofdbeeld op de locatie van het schipdepot
STR_9823_SHIPS_CLICK_ON_SHIP_FOR :{BLACK}Schepen - klik op een schip voor informatie
STR_9824_BUILD_NEW_SHIPS_REQUIRES :{BLACK}Bouw nieuwe schepen (heeft schipdepot nodig)
STR_9825_SHIP_SELECTION_LIST_CLICK :{BLACK}Schepenlijst - klik op een schip voor informatie
STR_9826_BUILD_THE_HIGHLIGHTED_SHIP :{BLACK}Bouw het geselecteerde schip
STR_9827_CURRENT_SHIP_ACTION_CLICK :{BLACK}Actie van dit schip - klik hier om het te starten of te stoppen
STR_9828_SHOW_SHIP_S_ORDERS :{BLACK}Laat orders van schip zien
-STR_9829_CENTER_MAIN_VIEW_ON_SHIP :{BLACK}Centreer hoofdbeeld op de lokatie van dit schip
+STR_9829_CENTER_MAIN_VIEW_ON_SHIP :{BLACK}Centreer hoofdbeeld op de locatie van dit schip
STR_982A_SEND_SHIP_TO_DEPOT :{BLACK}Stuur schip naar depot
STR_982B_SHOW_SHIP_DETAILS :{BLACK}Laat details van schip zien
STR_982E_COST_MAX_SPEED_CAPACITY :{BLACK}Prijs: {CURRENCY} Max. snelheid: {VELOCITY}{}Capaciteit: {CARGO}{}Brandstofkosten: {CURRENCY}/jr
@@ -2920,7 +2908,7 @@
STR_983B_REFIT :{WHITE}{VEHICLE} (Ombouwen)
STR_983C_REFIT_SHIP :{BLACK}Schip ombouwen
STR_983D_SELECT_TYPE_OF_CARGO_FOR :{BLACK}Selecteer type goederen dat dit schip moet vervoeren
-STR_983E_REFIT_SHIP_TO_CARRY_HIGHLIGHTED :{BLACK}Bouw schip om om geselecteerde goederen te vervoeren
+STR_983E_REFIT_SHIP_TO_CARRY_HIGHLIGHTED :{BLACK}Bouw schip om, om geselecteerde goederen te vervoeren
STR_983F_SELECT_CARGO_TYPE_TO_CARRY :{GOLD}Selecteer goederentype om te vervoeren:
STR_9840_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Nieuwe capaciteit: {GOLD}{CARGO}{}{BLACK}Ombouwkosten: {GOLD}{CURRENCY}
STR_9841_CAN_T_REFIT_SHIP :{WHITE}Kan schip niet ombouwen...
@@ -2934,8 +2922,8 @@
STR_A002_AIRCRAFT_HANGAR :{WHITE}{STATION} Vliegtuighangar
STR_A003_NEW_AIRCRAFT :{BLACK}Nieuw vliegtuig
STR_CLONE_AIRCRAFT :{BLACK}Kloon Vliegtuig
-STR_CLONE_AIRCRAFT_INFO :{BLACK}Hierdoor wordt een kopie gebouw van dit vliegtuig. Control-click deelt de orders
-STR_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Hierdoor wordt een kopie gebouw van een vliegtuig. Klik op deze knop en dan op een vliegtuig binnen of buiten de hangar. Control-click deelt de orders
+STR_CLONE_AIRCRAFT_INFO :{BLACK}Hierdoor wordt een kopie gebouw van dit vliegtuig. Control-klik deelt de orders
+STR_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Hierdoor wordt een kopie gebouw van een vliegtuig. Klik op deze knop en dan op een vliegtuig binnen of buiten de hangar. Control-klik deelt de orders
STR_A005_NEW_AIRCRAFT :{WHITE}Nieuw Vliegtuig
STR_A006_BUILD_AIRCRAFT :{BLACK}Bouw Vliegtuig
STR_A008_CAN_T_BUILD_AIRCRAFT :{WHITE}Kan vliegtuig niet bouwen...
@@ -2956,7 +2944,7 @@
STR_A014_AIRCRAFT_IS_WAITING_IN :{WHITE}Vliegtuig {COMMA} wacht in de vliegtuig hangar
STR_A015_AIRCRAFT_IN_THE_WAY :{WHITE}Vliegtuig in de weg
STR_A016_CAN_T_STOP_START_AIRCRAFT :{WHITE}Kan vliegtuig niet stoppen/starten...
-STR_A017_AIRCRAFT_IS_IN_FLIGHT :{WHITE}Vliegutig is in the lucht
+STR_A017_AIRCRAFT_IS_IN_FLIGHT :{WHITE}Vliegtuig is in the lucht
STR_A019_CAPACITY :{BLACK}Capaciteit: {LTBLUE}{CARGO}, {CARGO}
STR_A01A_CAPACITY :{BLACK}Capaciteit: {LTBLUE}{CARGO}
STR_A01B_AIRCRAFT_MUST_BE_STOPPED :{WHITE}Vliegtuig moet gestopt zijn in een hangar
@@ -2968,12 +2956,12 @@
STR_A021_AIRCRAFT_CLICK_ON_AIRCRAFT :{BLACK}Vliegtuig - klik op vliegtuig voor informatie
STR_A022_BUILD_NEW_AIRCRAFT :{BLACK}Bouw nieuw vliegtuig
STR_A023_DRAG_AIRCRAFT_TO_HERE_TO :{BLACK}Sleep vliegtuig hierheen om het te verkopen
-STR_A024_CENTER_MAIN_VIEW_ON_HANGAR :{BLACK}Centreer hoofdbeeld op hangarlokatie
+STR_A024_CENTER_MAIN_VIEW_ON_HANGAR :{BLACK}Centreer hoofdbeeld op hangarlocatie
STR_A025_AIRCRAFT_SELECTION_LIST :{BLACK}Vliegtuiglijst - klik op een vliegtuig voor informatie
STR_A026_BUILD_THE_HIGHLIGHTED_AIRCRAFT :{BLACK}Bouw het geselecteerde vliegtuig
STR_A027_CURRENT_AIRCRAFT_ACTION :{BLACK}Actie van huidig vliegtuig - klik hier om het vliegtuig te stoppen of te starten
STR_A028_SHOW_AIRCRAFT_S_ORDERS :{BLACK}Laat vliegtuigorders zien
-STR_A029_CENTER_MAIN_VIEW_ON_AIRCRAFT :{BLACK}Centreer hoofdbeeld op de vliegtuiglokatie
+STR_A029_CENTER_MAIN_VIEW_ON_AIRCRAFT :{BLACK}Centreer hoofdbeeld op de vliegtuiglocatie
STR_A02A_SEND_AIRCRAFT_TO_HANGAR :{BLACK}Stuur vliegtuig naar hangar
STR_A02B_SHOW_AIRCRAFT_DETAILS :{BLACK}Laat vliegtuigdetails zien
STR_A02E_COST_MAX_SPEED_CAPACITY :{BLACK}Prijs: {CURRENCY} Max. snelheid: {VELOCITY}{}Capaciteit: {COMMA} passagiers, {COMMA} zakken post{}Brandstofkosten: {CURRENCY}/jr
@@ -2993,26 +2981,26 @@
STR_A03C_REFIT :{WHITE}{VEHICLE} (Omgebouwd)
STR_A03D_REFIT_AIRCRAFT :{BLACK}Vliegtuig ombouwen
STR_A03E_SELECT_TYPE_OF_CARGO_FOR :{BLACK}Selecteer goederentype om te vervoeren door het vliegtuig
-STR_A03F_REFIT_AIRCRAFT_TO_CARRY :{BLACK}Bouw vliegtuig om om het geselecteerde goederentype te vervoeren
+STR_A03F_REFIT_AIRCRAFT_TO_CARRY :{BLACK}Bouw vliegtuig om, om het geselecteerde goederentype te vervoeren
STR_A040_SELECT_CARGO_TYPE_TO_CARRY :{GOLD}Selecteer goederentype om te vervoeren:
STR_A041_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Nieuwe capaciteit: {GOLD}{STRING}{}{BLACK}Ombouwkosten: {GOLD}{CURRENCY}
STR_A042_CAN_T_REFIT_AIRCRAFT :{WHITE}Kan vliegtuig niet ombouwen...
STR_GO_TO_AIRPORT_HANGAR :Ga naar {STATION} hanger
-SERVICE_AT_AIRPORT_HANGAR :Reperatie bij {STATION} hanger
+SERVICE_AT_AIRPORT_HANGAR :Reparatie 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'
-STR_B002_OIL_REFINERY_EXPLOSION :{BLACK}{BIGFONT}Olieraffinaderij in de buurt van {TOWN} is explodeerd!
+STR_B002_OIL_REFINERY_EXPLOSION :{BLACK}{BIGFONT}Olieraffinaderij in de buurt van {TOWN} is geëxplodeerd!
STR_B003_FACTORY_DESTROYED_IN_SUSPICIOUS :{BLACK}{BIGFONT}Fabriek in de buurt van {TOWN} is vernietigd onder verdachte omstandigheden!
STR_B004_UFO_LANDS_NEAR :{BLACK}{BIGFONT}'UFO' landt in de buurt van {TOWN}!
STR_B005_COAL_MINE_SUBSIDENCE_LEAVES :{BLACK}{BIGFONT}Instorting van kolenmijn laat spoor van vernietiging achter in de buurt van {TOWN}!
STR_B006_FLOOD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}Overstromingen!{}Minstens {COMMA} zijn vermist of dood na overstromingen!
STR_BRIBE_FAILED :{WHITE}Je poging tot omkopen is
-STR_BRIBE_FAILED_2 :{WHITE}ondekt door regionale onderzoekers
+STR_BRIBE_FAILED_2 :{WHITE}ontdekt door een regionale onderzoeker
STR_BUILD_DATE :{BLACK}Bouwjaar: {LTBLUE}{DATE_LONG}
STR_PERFORMANCE_DETAIL :{WHITE}Detail van de prestatiewaarde
@@ -3035,7 +3023,7 @@
############ End of order list
STR_PERFORMANCE_DETAIL_VEHICLES_TIP :{BLACK}Aantal voertuigen. Dit is inclusief wegvoertuigen, treinen, schepen en vliegtuigen.
STR_PERFORMANCE_DETAIL_STATIONS_TIP :{BLACK}Aantal stationsonderdelen. Elke deel van een station (b.v. trein station, bushalte, vliegveld) wordt geteld, zelfs als deze zijn verbonden met een station.
-STR_PERFORMANCE_DETAIL_MIN_PROFIT_TIP :{BLACK}De winst van de voertuigen met het laagste inkomen (van alle voeruigen ouder dan 2 jaar)
+STR_PERFORMANCE_DETAIL_MIN_PROFIT_TIP :{BLACK}De winst van de voertuigen met het laagste inkomen (van alle voertuigen ouder dan 2 jaar)
STR_PERFORMANCE_DETAIL_MIN_INCOME_TIP :{BLACK}Het hoeveelheid aan geld dat is verdient in de maand met de laagste winst van de afgelopen 12 kwartalen
STR_PERFORMANCE_DETAIL_MAX_INCOME_TIP :{BLACK}Het hoeveelheid aan geld dat is verdient in de maand met de hoogste winst van de afgelopen 12 kwartalen
STR_PERFORMANCE_DETAIL_DELIVERED_TIP :{BLACK}Het aantal eenheden aan goederen dat is bezorgd in de afgelopen vier kwartalen.
@@ -3062,7 +3050,7 @@
STR_NEWGRF_ERROR_VERSION_NUMBER :{STRING} werkt niet met de TTDPatch versie, gerapporteerd door OpenTTD.
STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{STRING} is voor de {STRING} versie van TTD.
STR_NEWGRF_ERROR_UNSET_SWITCH :{STRING} is ontwikkeld voor {STRING}
-STR_NEWGRF_ERROR_INVALID_PARAMETER :Ongeldide parameter voor {STRING}: parameter {STRING} ({NUM})
+STR_NEWGRF_ERROR_INVALID_PARAMETER :Ongeldige parameter voor {STRING}: parameter {STRING} ({NUM})
STR_NEWGRF_ERROR_LOAD_BEFORE :{STRING} moet geladen zijn voor {STRING}.
STR_NEWGRF_ERROR_LOAD_AFTER :{STRING} moet geladen zijn na {STRING}.
STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :het GRF bestand is bedoelt voor het vertalen van
@@ -3135,7 +3123,7 @@
STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TIP :{BLACK}Geef een lijst van alle treinen met huidig depot in hun orders
STR_DEPOT_VEHICLE_ORDER_LIST_ROADVEH_TIP :{BLACK}Geef een lijst van alle wegvoertuigen met huidig depot in hun orders
-STR_DEPOT_VEHICLE_ORDER_LIST_SHIP_TIP :{BLACK}Geef een lijst van alle schepen met huidig schepswerf in hun orders
+STR_DEPOT_VEHICLE_ORDER_LIST_SHIP_TIP :{BLACK}Geef een lijst van alle schepen met huidig scheepswerf in hun orders
STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TIP :{BLACK}Geef een lijst van alle vliegtuigen met een hangar van dit vliegveld in hun orders
STR_DEPOT_AUTOREPLACE_TRAIN_TIP :{BLACK}Vervang automatisch alle treinen in het depot
@@ -3156,7 +3144,7 @@
STR_REPLACE_HELP_LEFT_ARRAY :{BLACK}Selecteer het type locmotief om te vervangen
STR_REPLACE_HELP_RIGHT_ARRAY :{BLACK}Selecteer een nieuw type locomotief die je wil gebruiken om het links geselecteerde type locomotief te vervangen
STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Klik op deze knop als je de aan de linkerkant geselecteerde locomotief niet wil vervangen
-STR_REPLACE_HELP_START_BUTTON :{BLACK}Klik op deze knop als je de aan de linkerkant geseleteerde locomotief wil vervangen met die aan de rechterkant
+STR_REPLACE_HELP_START_BUTTON :{BLACK}Klik op deze knop als je de aan de linkerkant geselecteerde locomotief wil vervangen met die aan de rechterkant
STR_REPLACE_HELP_RAILTYPE :{BLACK}Selecteer een railtype waar je locomotieven voor wil selecteren
STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Dit geeft weer waarmee de aan de linkerkant geselecteerde locomotief mee vervangen wordt
STR_REPLACE_HELP :{BLACK}Deze optie stelt je in staat om een type voertuig te selecteren en die te vervangen door een andere, zodra de voertuigen een depot inrijden
@@ -3193,7 +3181,7 @@
############ Lists rail types
STR_RAIL_VEHICLES :Treinstellen
-STR_ELRAIL_VEHICLES :Electrische spoorvoertuigen
+STR_ELRAIL_VEHICLES :Elektrische spoorvoertuigen
STR_MONORAIL_VEHICLES :Monorail Voertuigen
STR_MAGLEV_VEHICLES :Maglev Voertuigen
@@ -3248,7 +3236,7 @@
STR_SNOW_LINE_HEIGHT_NUM :{NUM}
STR_HEIGHTMAP_NAME :{BLACK}Hoogtekaart naam:
STR_HEIGHTMAP_SIZE :{BLACK}Grootte: {ORANGE}{NUM} x {NUM}
-STR_GENERATION_WORLD :{WHITE}Wereld creeren
+STR_GENERATION_WORLD :{WHITE}Wereld creëren
STR_GENERATION_ABORT :{BLACK}Stop
STR_GENERATION_ABORT_CAPTION :{WHITE}Stop Wereld Generatie
STR_GENERATION_ABORT_MESSAGE :{YELLOW}Weet je zeker dat je de actie wilt stoppen?
@@ -3261,7 +3249,7 @@
STR_SETTINGUP_GAME :{BLACK}Spel aan het configureren
STR_PREPARING_TILELOOP :{BLACK}Bezig met vlakken
STR_PREPARING_GAME :{BLACK}Voorbereiden spel
-STR_DIFFICULTY_TO_CUSTOM :{WHITE}Deze aktie past de moeilijkheidsgraag aan naam custom
+STR_DIFFICULTY_TO_CUSTOM :{WHITE}Deze actie past de moeilijkheidsgraad aan naar custom
STR_SE_FLAT_WORLD :{WHITE}Vlak land
STR_SE_FLAT_WORLD_TIP :{BLACK}Genereer een vlakke kaart
STR_SE_RANDOM_LAND :{WHITE}Willekeurig land
@@ -3361,11 +3349,6 @@
STR_GROUP_RENAME_TIP :{BLACK}Hernoem de geselecteerde groep
STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}Klik om deze groep te beschermen tegen globaal automatisch vervangen
-STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Winst dit jaar: {GREEN}{CURRENCY} {BLACK}(vorig jaar: {GREEN}{CURRENCY}{BLACK})
-STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Winst dit jaar: {RED}{CURRENCY} {BLACK}(vorig jaar: {GREEN}{CURRENCY}{BLACK})
-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_COMPANY_NAME :{COMPANY}
STR_ENGINE_NAME :{ENGINE}
STR_GROUP_NAME :{GROUP}
@@ -3373,7 +3356,7 @@
STR_SIGN_NAME :{SIGN}
STR_VEHICLE_NAME :{VEHICLE}
-STR_NAME_MUST_BE_UNIQUE :{WHITE}Naam moet unique zijn
+STR_NAME_MUST_BE_UNIQUE :{WHITE}Naam moet uniek zijn
#### Improved sign GUI
STR_NEXT_SIGN_TOOLTIP :{BLACK}Ga naar volgende bord
--- a/src/lang/english.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/english.txt Sun Sep 02 11:17:33 2007 +0000
@@ -11,7 +11,6 @@
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}{CURRENCY}
-STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Flat land required
STR_0008_WAITING :{BLACK}Waiting: {WHITE}{STRING}
@@ -1104,6 +1103,12 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL :Scroll map
STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :Off
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Map scrollwheel speed: {ORANGE}{STRING1}
+
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU :{LTBLUE}Right-click emulation: {ORANGE}{STRING1}
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_COMMAND :Command-click
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_CONTROL :Control-click
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_OFF :Off
+
STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME :{LTBLUE}Automatically pause when starting a new game: {ORANGE}{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}
@@ -1263,7 +1268,7 @@
STR_BUOY_IS_IN_USE :{WHITE}...buoy is in use!
-STR_LANDINFO_COORDS :{BLACK}Coordinates: {LTBLUE}{NUM}x{NUM} ({STRING})
+STR_LANDINFO_COORDS :{BLACK}Coordinates: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Can't remove part of station...
STR_CANT_CONVERT_RAIL :{WHITE}Can't convert railtype here...
@@ -1374,34 +1379,23 @@
STR_NETWORK_PASSWORD_TIP :{BLACK}Protect your game with a password if you don't want it to be publicly accessible
STR_NETWORK_SELECT_MAP :{BLACK}Select a map:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Which map do you want to play?
-STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Max clients:
-STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Choose the maximum number of clients. Not all slots need to be filled
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LAN_INTERNET_COMBO :{BLACK}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :LAN / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (advertise)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :0 players
-STR_NETWORK_1_PLAYERS :1 player
-STR_NETWORK_2_PLAYERS :2 players
-STR_NETWORK_3_PLAYERS :3 players
-STR_NETWORK_4_PLAYERS :4 players
-STR_NETWORK_5_PLAYERS :5 players
-STR_NETWORK_6_PLAYERS :6 players
-STR_NETWORK_7_PLAYERS :7 players
-STR_NETWORK_8_PLAYERS :8 players
-STR_NETWORK_9_PLAYERS :9 players
-STR_NETWORK_10_PLAYERS :10 players
+STR_NETWORK_CLIENTS_SELECT :{BLACK}{SKIP}{SKIP}{NUM} client{P "" s}
+STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Max clients:
+STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Choose the maximum number of clients. Not all slots need to be filled
+STR_NETWORK_COMPANIES_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{NUM} compan{P y ies}
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Max companies:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Limit the server to a certain amount of companies
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_SPECTATORS_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{NUM} spectator{P "" s}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Max spectators:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Limit the server to a certain amount of spectators
-STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Language spoken:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Other players will know which language is spoken on the server
-STR_NETWORK_COMBO5 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LANGUAGE_COMBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}Start Game
STR_NETWORK_START_GAME_TIP :{BLACK}Start a new network game from a random map, or scenario
STR_NETWORK_LOAD_GAME :{BLACK}Load Game
@@ -3361,11 +3355,6 @@
STR_GROUP_RENAME_TIP :{BLACK}Rename the selected group
STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}Click to protect this group from global autoreplace
-STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Profit this year: {GREEN}{CURRENCY} {BLACK}(last year: {GREEN}{CURRENCY}{BLACK})
-STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Profit this year: {RED}{CURRENCY} {BLACK}(last year: {GREEN}{CURRENCY}{BLACK})
-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}
--- a/src/lang/esperanto.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/esperanto.txt Sun Sep 02 11:17:33 2007 +0000
@@ -12,7 +12,6 @@
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}{CURRENCY}
-STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Necesas ebena lando
STR_0008_WAITING :{BLACK}Atendas: {WHITE}{STRING}
@@ -1246,7 +1245,6 @@
STR_BUOY_IS_IN_USE :{WHITE}...buo estas uzata
-STR_LANDINFO_COORDS :{BLACK}Koordinatoj: {LTBLUE}{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Ne povas forigi stacidomeron...
STR_CANT_CONVERT_RAIL :{WHITE}Ne povas transigi reltipon ĉi tie...
@@ -1359,32 +1357,16 @@
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Kiun mapon vi volas ludi?
STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Klienta maksimumo:
STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Elektu klientan maksimumon. Ne ĉiuj lokoj estas plenigendaj
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LAN :Loka reto
STR_NETWORK_INTERNET :Interreto
STR_NETWORK_LAN_INTERNET :Loka reto / Interreto
STR_NETWORK_INTERNET_ADVERTISE :Interreto (reklamu)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :0 ludantoj
-STR_NETWORK_1_PLAYERS :1 ludanto
-STR_NETWORK_2_PLAYERS :2 ludantoj
-STR_NETWORK_3_PLAYERS :3 ludantoj
-STR_NETWORK_4_PLAYERS :4 ludantoj
-STR_NETWORK_5_PLAYERS :5 ludantoj
-STR_NETWORK_6_PLAYERS :6 ludantoj
-STR_NETWORK_7_PLAYERS :7 ludantoj
-STR_NETWORK_8_PLAYERS :8 ludantoj
-STR_NETWORK_9_PLAYERS :9 ludantoj
-STR_NETWORK_10_PLAYERS :10 ludantoj
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Kompania maksimumo:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Limu la servilon al certa kvanto da kompanioj
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Spektanta maksimumo:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Limigu la servilon al certa kvanto da spektantoj
-STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Parolata lingvo:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Aliaj ludantoj scios kiu lingvo paroliĝas en la servilo
-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}Startu Ludon
STR_NETWORK_START_GAME_TIP :{BLACK}Komencu novan retan ludon de hazarda mapo, aŭ scenaro
STR_NETWORK_LOAD_GAME :{BLACK}Ŝarĝu Ludon
@@ -1587,7 +1569,6 @@
STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :Reloj kun normalaj signaloj
STR_RAILROAD_TRACK_WITH_PRESIGNALS :Reloj kun antaŭ-signaloj
STR_RAILROAD_TRACK_WITH_EXITSIGNALS :Reloj kun elir-signaloj
-STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Reloj kun kombin-signaloj
--- a/src/lang/estonian.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/estonian.txt Sun Sep 02 11:17:33 2007 +0000
@@ -12,7 +12,6 @@
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}{CURRENCY}
-STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Maapind peab olema tasane
STR_0008_WAITING :{BLACK}Ootel: {WHITE}{STRING}
@@ -693,7 +692,7 @@
STR_0207_ARRIVAL_OF_FIRST_VEHICLE :{YELLOW}Konkurendi jaama saabus esimene veovahend
STR_0208_ACCIDENTS_DISASTERS :{YELLOW}Õnnetused / katastroofid
STR_0209_COMPANY_INFORMATION :{YELLOW}Ettevõtte teave
-STR_NEWS_OPEN_CLOSE :{YELLOW}Ava / sulge tööstuseid
+STR_NEWS_OPEN_CLOSE :{YELLOW}Tööstuste avamised ja sulgemised
STR_020A_ECONOMY_CHANGES :{YELLOW}Muutused majanduses
STR_020B_ADVICE_INFORMATION_ON_PLAYER :{YELLOW}Soovitused ja teated mängija veovahendite kohta
STR_020C_NEW_VEHICLES :{YELLOW}Uus veerem
@@ -1363,7 +1362,7 @@
STR_BUOY_IS_IN_USE :{WHITE}...poi on kasutusel!
-STR_LANDINFO_COORDS :{BLACK}Koordinaadid: {LTBLUE}{NUM}x{NUM} ({STRING})
+STR_LANDINFO_COORDS :{BLACK}Koordinaadid: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Siinset jaamablokki ei saa lammutada...
STR_CANT_CONVERT_RAIL :{WHITE}Siin ei saa raudteetüüpi muuta...
@@ -1474,34 +1473,23 @@
STR_NETWORK_PASSWORD_TIP :{BLACK}Kaitse oma mäng parooliga, kui sa ei taha, et kõik sellele ligi pääseksid
STR_NETWORK_SELECT_MAP :{BLACK}Vali kaart:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Millist kaarti sa tahad mängida?
-STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Suurim klientide arv:
-STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Määra suurim klientide arv. Kõik vabad kohad ei pea täidetud olema
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LAN_INTERNET_COMBO :{BLACK}{SKIP}{STRING}
STR_NETWORK_LAN :kohtvõrk (LAN)
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :LAN / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (reklaami)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :0 mängijat
-STR_NETWORK_1_PLAYERS :1 mängija
-STR_NETWORK_2_PLAYERS :2 mängijat
-STR_NETWORK_3_PLAYERS :3 mängijat
-STR_NETWORK_4_PLAYERS :4 mängijat
-STR_NETWORK_5_PLAYERS :5 mängijat
-STR_NETWORK_6_PLAYERS :6 mängijat
-STR_NETWORK_7_PLAYERS :7 mängijat
-STR_NETWORK_8_PLAYERS :8 mängijat
-STR_NETWORK_9_PLAYERS :9 mängijat
-STR_NETWORK_10_PLAYERS :10 mängijat
+STR_NETWORK_CLIENTS_SELECT :{BLACK}{SKIP}{SKIP}{NUM} klient{P "" i}
+STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Suurim klientide arv:
+STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Määra suurim klientide arv. Kõik vabad kohad ei pea täidetud olema
+STR_NETWORK_COMPANIES_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{NUM} ettevõte{P "" t}
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Enim ettevõtteid:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Luba serveris X mängijat
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_SPECTATORS_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{NUM} pealtvaataja{P "" t}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Enim pealtvaatajaid
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Luba serveris X vaatajat
-STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Räägitav keel:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Teistele mängijatele teadmiseks, et mis keelt serveris räägitakse
-STR_NETWORK_COMBO5 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LANGUAGE_COMBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}Alusta mängu
STR_NETWORK_START_GAME_TIP :{BLACK}Uue võrgumängu alustamine suvalise kaardiga
STR_NETWORK_LOAD_GAME :{BLACK}Mängu laadimine
@@ -1578,7 +1566,7 @@
STR_NETWORK_CONNECTING_SPECIAL_1 :{BLACK}Hangin mängu infot...
STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Hangin ettevõtte infot...
############ End of leave-in-this-order
-STR_NETWORK_CONNECTING_WAITING :{BLACK}{NUM} kelint{P "" e} sinu ees
+STR_NETWORK_CONNECTING_WAITING :{BLACK}{NUM} klient{P "" i} sinu ees
STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{NUM} / {NUM} kbaiti tõmmatud
STR_NETWORK_DISCONNECT :{BLACK}Katkesta
@@ -1729,13 +1717,13 @@
STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :Rööbastee läbisõidusignaalidega
STR_RAILROAD_TRACK_WITH_PRESIGNALS :Rööbastee sissesõidusignaalidega
STR_RAILROAD_TRACK_WITH_EXITSIGNALS :Rööbastee väljasõidusignaalidega
-STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Rööbastee mitmiksignaalidega
+STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Raudtee mitmiksignaalidega
STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS :Rööbastee läbisõidu- ja hoiatussignaalidega
STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :Rööbastee läbisõidu- ja väljasõidusignaalidega
-STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :Rööbastee läbisõidu- ja mitmiksignaalidega
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :Raudtee tava- ja mitmiksignaalidega
STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS :Rööbastee hoiatus- ja väljasõidusignaalidega
-STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :Rööbastee hoiatus- ja mitmiksignaalidega
-STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Rööbastee väljasõidu- ja mitmiksignaalidega
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :Raudtee eel- ja mitmiksignaalidega
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Raudtee väljumis- ja mitmiksignaalidega
STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Raudteejaama peab eelnevalt lammutama
@@ -3221,7 +3209,7 @@
STR_SCHEDULED_AIRCRAFT_TIP :{BLACK}Näita kõiki lennukeid, mille sõidugraafik sisaldab seda lennujaama
STR_SCHEDULED_SHIPS_TIP :{BLACK}Näita kõiki laevu, mille sõidugraafik sisaldab seda sadamat
-STR_VEH_WITH_SHARED_ORDERS_LIST :{WHITE}Jagatud sõidugraafik{COMMA} Auto{P "" d}
+STR_VEH_WITH_SHARED_ORDERS_LIST :{WHITE}{COMMA} sõiduki vahel jagatud sõidugraafik
STR_VEH_WITH_SHARED_ORDERS_LIST_TIP :{BLACK}Näita kõiki sama sõidugraafikuga mootorsõidukeid
### depot strings
@@ -3461,11 +3449,6 @@
STR_GROUP_RENAME_TIP :{BLACK}Nimeta valitud üksus ümber
STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}Klõpsa, et seda üksust üldise iseväljavahetuse eest kaitsta
-STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Selle aasta kasum: {GREEN}{CURRENCY} {BLACK}(eelmisel aastal: {GREEN}{CURRENCY}{BLACK})
-STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Selle aasta kasum: {RED}{CURRENCY} {BLACK}(eelmisel aastal: {GREEN}{CURRENCY}{BLACK})
-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_COMPANY_NAME :{COMPANY}
STR_ENGINE_NAME :{ENGINE}
STR_GROUP_NAME :{GROUP}
--- a/src/lang/finnish.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/finnish.txt Sun Sep 02 11:17:33 2007 +0000
@@ -11,7 +11,6 @@
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}{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}
@@ -402,7 +401,7 @@
STR_AVAILABLE_ROAD_VEHICLES :{BLACK}Käytettävissä olevat ajoneuvot
STR_AVAILABLE_SHIPS :{BLACK}Käytettävissä olevat laivat
STR_AVAILABLE_AIRCRAFT :{BLACK}Käytettävissä olevat ilma-alukset
-STR_AVAILABLE_ENGINES_TIP :{BLACK}Näytä lista mahdollisista moottorimalleista tälle kulkuneuvolle.
+STR_AVAILABLE_ENGINES_TIP :{BLACK}Näytä lista saatavilla olevista moottorityypeistä tälle ajoneuvotyypille.
STR_MANAGE_LIST :{BLACK}Muokkaa listaa
STR_MANAGE_LIST_TIP :{BLACK}Ohjaa kaikkia listan ajoneuvoja
STR_REPLACE_VEHICLES :Korvaa liikennevälineitä
@@ -1260,7 +1259,7 @@
STR_BUOY_IS_IN_USE :{WHITE}...poiju on käytössä!
-STR_LANDINFO_COORDS :{BLACK}Koordinaatit: {LTBLUE}{NUM}x{NUM} ({STRING})
+STR_LANDINFO_COORDS :{BLACK}Koordinaatit: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Aseman osaa ei voi poistaa...
STR_CANT_CONVERT_RAIL :{WHITE}Raidetyyppiä ei voi muuntaa...
@@ -1358,7 +1357,7 @@
STR_NETWORK_SERVER_OFFLINE :{SILVER}PALVELIN KIINNI
STR_NETWORK_SERVER_FULL :{SILVER}PALVELIN TÄYNNÄ
STR_NETWORK_VERSION_MISMATCH :{SILVER}VERSIO EI TÄSMÄÄ
-STR_NETWORK_GRF_MISMATCH :{SILVER}NEWGRF YHTEENSOPIMATTOMUUS
+STR_NETWORK_GRF_MISMATCH :{SILVER}NEWGRF ei täsmää
STR_NETWORK_JOIN_GAME :{BLACK}Liity peliin
@@ -1371,34 +1370,20 @@
STR_NETWORK_PASSWORD_TIP :{BLACK}Jos peliin ei halua ulkopuolisia, voi sen suojata salasanalla.
STR_NETWORK_SELECT_MAP :{BLACK}Valitse kartta:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Mitä karttaa haluat pelata?
-STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Pelaajien enimmäismäärä:
-STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Pelaajien enimmäismäärä. Pelissä voi olla myös vähemmän pelaajia.
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LAN_INTERNET_COMBO :{BLACK}{SKIP}{STRING}
STR_NETWORK_LAN :Lähiverkko
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :Lähiverkko/Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (mainosta)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :0 pelaajaa
-STR_NETWORK_1_PLAYERS :1 pelaaja
-STR_NETWORK_2_PLAYERS :2 pelaajaa
-STR_NETWORK_3_PLAYERS :3 pelaajaa
-STR_NETWORK_4_PLAYERS :4 pelaajaa
-STR_NETWORK_5_PLAYERS :5 pelaajaa
-STR_NETWORK_6_PLAYERS :6 pelaajaa
-STR_NETWORK_7_PLAYERS :7 pelaajaa
-STR_NETWORK_8_PLAYERS :8 pelaajaa
-STR_NETWORK_9_PLAYERS :9 pelaajaa
-STR_NETWORK_10_PLAYERS :10 pelaajaa
+STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Pelaajien enimmäismäärä:
+STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Pelaajien enimmäismäärä. Pelissä voi olla myös vähemmän pelaajia.
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Yhtiöiden enimmäismäärä:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Rajoita yhtiöiden määrää palvelimella
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Katsojien enimmäismäärä:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Rajoita katsojien määrää palvelimella
-STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Puhuttu kieli:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Toiset pelaajat tietävät tästä, mitä kieltä palvelimella puhutaan.
-STR_NETWORK_COMBO5 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LANGUAGE_COMBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}Aloita peli
STR_NETWORK_START_GAME_TIP :{BLACK}Aloita uusi verkkopeli skenaariolla tai satunnaisella kartalla.
STR_NETWORK_LOAD_GAME :{BLACK}Lataa peli
@@ -1626,13 +1611,9 @@
STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :Rautatie tavallisin opastimin
STR_RAILROAD_TRACK_WITH_PRESIGNALS :Rautatie esiopastimin
STR_RAILROAD_TRACK_WITH_EXITSIGNALS :Rautatie poistumisopastimin
-STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Rautatie 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
@@ -2745,7 +2726,7 @@
STR_885C_BROKEN_DOWN :{RED}Rikki
STR_885D_AGE_RUNNING_COST_YR :{BLACK}Ikä: {LTBLUE}{STRING}{BLACK} Käyttökustannukset: {LTBLUE}{CURRENCY}/vuosi
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Paino: {LTBLUE}{WEIGHT_S} {BLACK}Teho: {LTBLUE}{POWER}{BLACK} Huippunopeus: {LTBLUE}{VELOCITY}
-STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Paino: {LTBLUE}{WEIGHT_S} {BLACK}Teho: {LTBLUE}{POWER}{BLACK} Huippunopeus: {LTBLUE}{VELOCITY} {BLACK}Suurin vetokyky.: {LTBLUE}{FORCE}
+STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Massa: {LTBLUE}{WEIGHT_S} {BLACK}Voima: {LTBLUE}{POWER}{BLACK} Huippunopeus: {LTBLUE}{VELOCITY} {BLACK}Huippuvääntö: {LTBLUE}{FORCE}
STR_885F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Tuotto tänä vuonna: {LTBLUE}{CURRENCY} (viime vuonna: {CURRENCY})
STR_8860_RELIABILITY_BREAKDOWNS :{BLACK}Luotettavuus: {LTBLUE}{COMMA}% {BLACK}Hajoamisia viime huollon jälkeen: {LTBLUE}{COMMA}
STR_8861_STOPPED :{RED}Pysäytetty
@@ -3213,7 +3194,7 @@
STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Sovitettavissa: {GOLD}
STR_PURCHASE_INFO_ALL_TYPES :Kaikki rahtityypit
STR_PURCHASE_INFO_ALL_BUT :Kaikki paitsi {GOLD}
-STR_PURCHASE_INFO_MAX_TE :{BLACK}Suurin vetokyky: {GOLD}{FORCE}
+STR_PURCHASE_INFO_MAX_TE :{BLACK}Suurin vääntömomentti: {GOLD}{FORCE}
########### String for New Landscape Generator
@@ -3358,11 +3339,6 @@
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})
-
STR_COMPANY_NAME :{COMPANY}
STR_ENGINE_NAME :{ENGINE}
STR_GROUP_NAME :{GROUP}
--- a/src/lang/french.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/french.txt Sun Sep 02 11:17:33 2007 +0000
@@ -12,7 +12,6 @@
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}{CURRENCY}
-STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Terrain plat requis
STR_0008_WAITING :{BLACK}En attente: {WHITE}{STRING}
@@ -1264,7 +1263,7 @@
STR_BUOY_IS_IN_USE :{WHITE}... bouée utilisée !
-STR_LANDINFO_COORDS :{BLACK}Coordonnées: {LTBLUE}{NUM}x{NUM} ({STRING})
+STR_LANDINFO_COORDS :{BLACK}Coordonnées: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Impossible de supprimer une partie de la gare...
STR_CANT_CONVERT_RAIL :{WHITE}Impossible de convertir le type de rail...
@@ -1375,34 +1374,23 @@
STR_NETWORK_PASSWORD_TIP :{BLACK}Protéger votre partie avec un mot de passe si vous ne souhaitez pas que d'autres l'utilisent
STR_NETWORK_SELECT_MAP :{BLACK}Choisir une carte:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Sur quelle carte désirez-vous jouer?
-STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Nombre de clients max. :
-STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Choisir un nombre maximum de clients. Tous les emplacements n'auront pas besoin d'être remplis.
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LAN_INTERNET_COMBO :{BLACK}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :LAN / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (publier)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :0 joueurs
-STR_NETWORK_1_PLAYERS :1 joueur
-STR_NETWORK_2_PLAYERS :2 joueurs
-STR_NETWORK_3_PLAYERS :3 joueurs
-STR_NETWORK_4_PLAYERS :4 joueurs
-STR_NETWORK_5_PLAYERS :5 joueurs
-STR_NETWORK_6_PLAYERS :6 joueurs
-STR_NETWORK_7_PLAYERS :7 joueurs
-STR_NETWORK_8_PLAYERS :8 joueurs
-STR_NETWORK_9_PLAYERS :9 joueurs
-STR_NETWORK_10_PLAYERS :10 joueurs
+STR_NETWORK_CLIENTS_SELECT :{BLACK}{SKIP}{SKIP}{NUM} client{P "" s}
+STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Nombre de clients max. :
+STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Choisir un nombre maximum de clients. Tous les emplacements n'auront pas besoin d'être remplis.
+STR_NETWORK_COMPANIES_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{NUM} compagnie{P "" s}
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Max compagnies:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Limiter le serveur à un certain nombre de compagnies
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_SPECTATORS_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{NUM} spectateur{P "" s}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Max spectateurs:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Limiter le serveur à un certain nombre de spectateurs
-STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Langue utilisée :
STR_NETWORK_LANGUAGE_TIP :{BLACK}Les autres joueurs sauront quelle langue est parlée sur ce serveur.
-STR_NETWORK_COMBO5 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LANGUAGE_COMBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}Démarrer la partie
STR_NETWORK_START_GAME_TIP :{BLACK}Démarrer une nouvelle partie réseau à partir d'une carte aléatoire ou d'un scénario
STR_NETWORK_LOAD_GAME :{BLACK}Charger une partie
@@ -3362,11 +3350,6 @@
STR_GROUP_RENAME_TIP :{BLACK}Renommer le groupe sélectionné
STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}Cliquer pour protéger ce groupe contre l'auto-remplacement global
-STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Profit cette année: {GREEN}{CURRENCY} {BLACK}(an dernier: {GREEN}{CURRENCY}{BLACK})
-STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Profit cette année: {RED}{CURRENCY} {BLACK}(an dernier: {GREEN}{CURRENCY}{BLACK})
-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}
--- a/src/lang/galician.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/galician.txt Sun Sep 02 11:17:33 2007 +0000
@@ -12,7 +12,6 @@
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}{CURRENCY}
-STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Necesitas terreo chan
STR_0008_WAITING :{BLACK}Esperando: {WHITE}{STRING}
@@ -1182,7 +1181,6 @@
STR_BUOY_IS_IN_USE :{WHITE}...a boia está en uso!
-STR_LANDINFO_COORDS :{BLACK}Coordenadas: {LTBLUE}{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Non se pode eliminar parte da estación...
STR_CANT_CONVERT_RAIL :{WHITE}Non se pode converti-lo tipo de vía aí...
@@ -1291,32 +1289,16 @@
STR_NETWORK_SELECT_MAP_TIP :{BLACK}¿Que mapa queres xogar?
STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Máximo de clientes permitidos:
STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Escolle o máximo número de clientes. Non tódolas liñas teñen que estar cubertas
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :LAN / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (anunciar)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :0 xogadores
-STR_NETWORK_1_PLAYERS :1 xogador
-STR_NETWORK_2_PLAYERS :2 xogadores
-STR_NETWORK_3_PLAYERS :3 xogadores
-STR_NETWORK_4_PLAYERS :4 xogadores
-STR_NETWORK_5_PLAYERS :5 xogadores
-STR_NETWORK_6_PLAYERS :6 xogadores
-STR_NETWORK_7_PLAYERS :7 xogadores
-STR_NETWORK_8_PLAYERS :8 xogadores
-STR_NETWORK_9_PLAYERS :9 xogadores
-STR_NETWORK_10_PLAYERS :10 xogadores
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Nº máx. de compañías:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Limita-lo servidor a unha certa cantidade de compañías
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Nº máx. de espectadores:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Limita-lo servidor a unha certa cantidade de espectadores
-STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Idioma falado:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Outros xogadores sabrán cal é o idioma que se fala no servidor
-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}Iniciar Partida
STR_NETWORK_START_GAME_TIP :{BLACK}Comezar unha nova partida en rede a partires dun mapa aleatorio, ou un escenario
STR_NETWORK_LOAD_GAME :{BLACK}Cargar Partida
@@ -1531,7 +1513,6 @@
STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :Vía de ferrocarril con sinais normais
STR_RAILROAD_TRACK_WITH_PRESIGNALS :Vía de ferrocarril con pre-sinais
STR_RAILROAD_TRACK_WITH_EXITSIGNALS :vía de ferrocarril con sinais de saída
-STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Via de ferrocarril con sinais combinados
--- a/src/lang/german.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/german.txt Sun Sep 02 11:17:33 2007 +0000
@@ -8,14 +8,13 @@
##id 0x0000
STR_NULL :
-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_0001_OFF_EDGE_OF_MAP :{WHITE}Zu weit vom Spielfeldrand entfernt
+STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Zu nahe am Spielfeldrand
+STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Nicht genug Geld - {CURRENCY} erforderlich
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}
+STR_0008_WAITING :{BLACK}Im Wartezustand: {WHITE}{STRING}
STR_0009 :{WHITE}{CARGO}
STR_000A_EN_ROUTE_FROM :{WHITE}{CARGO}{YELLOW} (unterwegs von
STR_000B :{YELLOW}{STATION})
@@ -153,14 +152,14 @@
STR_ABBREV_ALL :{TINYFONT}ALLE
STR_00AE :{WHITE}{DATE_SHORT}
STR_00AF :{WHITE}{DATE_LONG}
-STR_00B0_MAP :{WHITE}Karte - {STRING}
+STR_00B0_MAP :{WHITE}Weltkarte - {STRING}
STR_00B1_GAME_OPTIONS :{WHITE}Spieleinstellungen
STR_00B2_MESSAGE :{YELLOW}Nachricht
STR_00B3_MESSAGE_FROM :{YELLOW}Nachricht von {STRING}
STR_POPUP_CAUTION_CAPTION :{WHITE}Achtung!
-STR_00B4_CAN_T_DO_THIS :{WHITE}Kann dies nicht tun....
-STR_00B5_CAN_T_CLEAR_THIS_AREA :{WHITE}Kann das Gebiet nicht räumen....
-STR_00B6_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, Alle Rechte vorbehalten
+STR_00B4_CAN_T_DO_THIS :{WHITE}Befehl nicht ausführbar...
+STR_00B5_CAN_T_CLEAR_THIS_AREA :{WHITE}Gebiet kann nicht geräumt werden...
+STR_00B6_ORIGINAL_COPYRIGHT :{BLACK}Ursprüngliches Urheberrecht {COPYRIGHT} 1995 Chris Sawyer, Alle Rechte vorbehalten
STR_00B7_VERSION :{BLACK}OpenTTD Version {REV}
STR_00BA_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2007 OpenTTD-Team
STR_TRANSLATED_BY :{BLACK} Übersetzer -
@@ -170,7 +169,7 @@
STR_00C7_QUIT :{WHITE}Verlassen
STR_00C8_YES :{BLACK}Ja
STR_00C9_NO :{BLACK}Nein
-STR_00CA_ARE_YOU_SURE_YOU_WANT_TO :{YELLOW}Bist du sicher, dass du das Spiel abbrechen und zu {STRING} zurückkehren willst?
+STR_00CA_ARE_YOU_SURE_YOU_WANT_TO :{YELLOW}Sind Sie sicher, dass Sie das Spiel abbrechen und zu {STRING} zurückkehren wollen?
STR_00CB_1 :{BLACK}1
STR_00CC_2 :{BLACK}2
STR_00CD_3 :{BLACK}3
@@ -227,14 +226,14 @@
STR_0100_FACTORY :{BLACK}{TINYFONT}Fabrik
STR_0101_PRINTING_WORKS :{BLACK}{TINYFONT}Druckerei
STR_0102_OIL_WELLS :{BLACK}{TINYFONT}Ölquellen
-STR_0103_IRON_ORE_MINE :{BLACK}{TINYFONT}Eisenerzmine
+STR_0103_IRON_ORE_MINE :{BLACK}{TINYFONT}Eisenerzbergwerk
STR_0104_STEEL_MILL :{BLACK}{TINYFONT}Stahlfabrik
STR_0105_BANK :{BLACK}{TINYFONT}Bank
STR_0106_PAPER_MILL :{BLACK}{TINYFONT}Papiermühle
STR_0107_GOLD_MINE :{BLACK}{TINYFONT}Goldmine
STR_0108_FOOD_PROCESSING_PLANT :{BLACK}{TINYFONT}Nahrungsmittelfabrik
STR_0109_DIAMOND_MINE :{BLACK}{TINYFONT}Diamantenmine
-STR_010A_COPPER_ORE_MINE :{BLACK}{TINYFONT}Kupfermine
+STR_010A_COPPER_ORE_MINE :{BLACK}{TINYFONT}Kupfererzbergwerk
STR_010B_FRUIT_PLANTATION :{BLACK}{TINYFONT}Fruchtplantage
STR_010C_RUBBER_PLANTATION :{BLACK}{TINYFONT}Kautschukplantage
STR_010D_WATER_SUPPLY :{BLACK}{TINYFONT}Wasserquelle
@@ -299,7 +298,7 @@
STR_0141_LOAD_GAME :{BLACK}Spiel laden
STR_SINGLE_PLAYER :{BLACK}Einzelspieler
STR_MULTIPLAYER :{BLACK}Mehrspieler
-STR_SCENARIO_EDITOR :{BLACK}Szenario Editor
+STR_SCENARIO_EDITOR :{BLACK}Szenarieneditor
STR_64 :64
STR_128 :128
@@ -307,7 +306,7 @@
STR_512 :512
STR_1024 :1024
STR_2048 :2048
-STR_MAPSIZE :{BLACK}Kartengröße:
+STR_MAPSIZE :{BLACK}Spielfeldgröße:
STR_BY :{BLACK}*
STR_0148_GAME_OPTIONS :{BLACK}Spieleinstellungen
@@ -364,7 +363,7 @@
STR_015D_LOAD_GAME :Spiel laden
STR_015E_QUIT_GAME :Spiel beenden
STR_015F_QUIT :Beenden
-STR_ABANDON_GAME_QUERY :{YELLOW}Bist du sicher, dass du das Spiel beenden willst?
+STR_ABANDON_GAME_QUERY :{YELLOW}Sind Sie sicher, dass Sie das Spiel beenden wollen?
STR_0161_QUIT_GAME :{WHITE}Spiel beenden
STR_SORT_ORDER_TIP :{BLACK}Sortierreihenfolge auswählen (absteigend/aufsteigend)
STR_SORT_CRITERIA_TIP :{BLACK}Sortierkriterium auswählen
@@ -378,8 +377,8 @@
STR_SORT_BY_DROPDOWN_NAME :Name
STR_SORT_BY_DATE :{BLACK}Datum
STR_SORT_BY_NUMBER :Nummer
-STR_SORT_BY_PROFIT_LAST_YEAR :Profit letztes Jahr
-STR_SORT_BY_PROFIT_THIS_YEAR :Profit dieses Jahr
+STR_SORT_BY_PROFIT_LAST_YEAR :Gewinn im letzten Jahr
+STR_SORT_BY_PROFIT_THIS_YEAR :Gewinn in diesem Jahr
STR_SORT_BY_AGE :Alter
STR_SORT_BY_RELIABILITY :Zuverlässigkeit
STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :Gesamtkapazität pro Fracht
@@ -396,21 +395,21 @@
STR_ENGINE_SORT_RUNNING_COST :Betriebskosten
STR_ENGINE_SORT_POWER_VS_RUNNING_COST :Leistung/Betriebskosten
STR_ENGINE_SORT_CARGO_CAPACITY :Frachtkapazität
-STR_NO_WAITING_CARGO :{BLACK}Keine Fracht wartet
-STR_SELECT_ALL_FACILITIES :{BLACK}Wähle alle Anlagen
-STR_SELECT_ALL_TYPES :{BLACK}Wähle alle Frachtarten (einschließlich ohne wartender Fracht)
+STR_NO_WAITING_CARGO :{BLACK}Keine Fracht im Wartezustand
+STR_SELECT_ALL_FACILITIES :{BLACK}Alle Anlagen auswählen
+STR_SELECT_ALL_TYPES :{BLACK}Alle Frachtarten auswählen (einschließlich keine Fracht)
STR_AVAILABLE_TRAINS :{BLACK}Verfügbare Züge
STR_AVAILABLE_ROAD_VEHICLES :{BLACK}Verfügbare Fahrzeuge
STR_AVAILABLE_SHIPS :{BLACK}Verfügbare Schiffe
STR_AVAILABLE_AIRCRAFT :{BLACK}Verfügbare Flugzeuge
-STR_AVAILABLE_ENGINES_TIP :{BLACK}Zeige eine Liste von verfügbaren Fahrzeugen für diesen Fahrzeugtyp
-STR_MANAGE_LIST :{BLACK}Verwalte die Liste
+STR_AVAILABLE_ENGINES_TIP :{BLACK}Verfügbare Fahrzeuge für diesen Fahrzeugtyp auflisten
+STR_MANAGE_LIST :{BLACK}Liste verwalten
STR_MANAGE_LIST_TIP :{BLACK}Aufträge an alle Fahrzeuge in der Liste verschicken
-STR_REPLACE_VEHICLES :Ersetze Fahrzeuge
-STR_SEND_TRAIN_TO_DEPOT :Sende nach Depot
-STR_SEND_ROAD_VEHICLE_TO_DEPOT :Sende nach Depot
-STR_SEND_SHIP_TO_DEPOT :Sende nach Depot
-STR_SEND_AIRCRAFT_TO_HANGAR :Sende nach Hangar
+STR_REPLACE_VEHICLES :Fahrzeuge ersetzen
+STR_SEND_TRAIN_TO_DEPOT :Ins Depot schicken
+STR_SEND_ROAD_VEHICLE_TO_DEPOT :Ins Depot schicken
+STR_SEND_SHIP_TO_DEPOT :In die Werft schicken
+STR_SEND_AIRCRAFT_TO_HANGAR :In den Hangar schicken
STR_SEND_FOR_SERVICING :Zur Wartung schicken
############ range for months starts
@@ -445,8 +444,8 @@
STR_017C_DISPLAY_LIST_OF_COMPANY :{BLACK}Fahrzeuglisten der Firmen
STR_017D_DISPLAY_LIST_OF_COMPANY :{BLACK}Schiffslisten der Firmen
STR_017E_DISPLAY_LIST_OF_COMPANY :{BLACK}Flugzeuglisten der Firmen
-STR_017F_ZOOM_THE_VIEW_IN :{BLACK}Heranzoomen (vergrößern)
-STR_0180_ZOOM_THE_VIEW_OUT :{BLACK}Wegzoomen (verkleinern)
+STR_017F_ZOOM_THE_VIEW_IN :{BLACK}Ansicht vergrößern (hereinzoomen)
+STR_0180_ZOOM_THE_VIEW_OUT :{BLACK}Ansicht verkleinern (herauszoomen)
STR_0181_BUILD_RAILROAD_TRACK :{BLACK}Gleise legen
STR_0182_BUILD_ROADS :{BLACK}Straßen bauen
STR_0183_BUILD_SHIP_DOCKS :{BLACK}Hafen bauen
@@ -465,16 +464,16 @@
STR_018D_DEMOLISH_BUILDINGS_ETC :{BLACK}Gebäude usw. auf einem Planquadrat abreißen
STR_018E_LOWER_A_CORNER_OF_LAND :{BLACK}Land absenken
STR_018F_RAISE_A_CORNER_OF_LAND :{BLACK}Land anheben
-STR_0190_SCROLL_BAR_SCROLLS_LIST :{BLACK}Scrollbalken - Liste auf- und abwärts blättern
-STR_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Scrollbalken - Liste nach links und rechts blättern
-STR_0191_SHOW_LAND_CONTOURS_ON_MAP :{BLACK}Höhenlinien auf der Karte anzeigen
-STR_0192_SHOW_VEHICLES_ON_MAP :{BLACK}Fahrzeuge auf der Karte anzeigen
-STR_0193_SHOW_INDUSTRIES_ON_MAP :{BLACK}Industrien auf der Karte anzeigen
-STR_0194_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Transportwege auf der Karte anzeigen
-STR_0195_SHOW_VEGETATION_ON_MAP :{BLACK}Vegetation auf der Karte anzeigen
-STR_0196_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Landeigentümer auf der Karte anzeigen
-STR_0197_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Stadtnamen anzeigen an/aus
-STR_0198_PROFIT_THIS_YEAR_LAST_YEAR :{TINYFONT}{BLACK}Profit laufendes Jahr: {CURRENCY} (vorheriges Jahr: {CURRENCY})
+STR_0190_SCROLL_BAR_SCROLLS_LIST :{BLACK}Bildlaufleiste - Liste auf- und abwärts blättern
+STR_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Bildlaufleiste - Liste nach links und rechts blättern
+STR_0191_SHOW_LAND_CONTOURS_ON_MAP :{BLACK}Höhenlinien auf der Weltkarte anzeigen
+STR_0192_SHOW_VEHICLES_ON_MAP :{BLACK}Fahrzeuge auf der Weltkarte anzeigen
+STR_0193_SHOW_INDUSTRIES_ON_MAP :{BLACK}Industrien auf der Weltkarte anzeigen
+STR_0194_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Transportwege auf der Weltkarte anzeigen
+STR_0195_SHOW_VEGETATION_ON_MAP :{BLACK}Vegetation auf der Weltkarte anzeigen
+STR_0196_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Landeigentümer auf der Weltkarte anzeigen
+STR_0197_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Städtenamen anzeigen ein/aus
+STR_0198_PROFIT_THIS_YEAR_LAST_YEAR :{TINYFONT}{BLACK}Gewinn im laufenden Jahr: {CURRENCY} (vergangenes Jahr: {CURRENCY})
############ range for service numbers starts
STR_AGE :{COMMA} Jahr{P "" e} ({COMMA})
@@ -544,8 +543,8 @@
STR_01D6_OLD_STYLE :{TINYFONT}Traditionell
STR_01D7_NEW_STYLE :{TINYFONT}Modern
STR_01D8_EZY_STREET :{TINYFONT}Ezy Street
-STR_01D9_CUSTOM_1 :{TINYFONT}Individuell 1
-STR_01DA_CUSTOM_2 :{TINYFONT}Individuell 2
+STR_01D9_CUSTOM_1 :{TINYFONT}Benutzerdefiniert 1
+STR_01DA_CUSTOM_2 :{TINYFONT}Benutzerdefiniert 2
STR_01DB_MUSIC_VOLUME :{BLACK}{TINYFONT}Musiklautstärke
STR_01DC_EFFECTS_VOLUME :{BLACK}{TINYFONT}Soundlautstärke
STR_01DD_MIN_MAX :{BLACK}{TINYFONT}MIN ' ' ' ' ' ' MAX
@@ -573,15 +572,15 @@
STR_01F3_SELECT_ALL_TRACKS_PROGRAM :{BLACK}Programm 'Alle Titel' wählen
STR_01F4_SELECT_OLD_STYLE_MUSIC :{BLACK}Programm 'Traditionell' wählen
STR_01F5_SELECT_NEW_STYLE_MUSIC :{BLACK}Programm 'Modern' wählen
-STR_01F6_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Programm 'Individuell 1' (benutzerdefiniert) wählen
-STR_01F7_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Programm 'Individuell 2' (benutzerdefiniert) wählen
-STR_01F8_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Lösche laufendes Programm (nur für Individuell 1 und Individuell 2)
+STR_01F6_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Programm 'Benutzerdefiniert 1' wählen
+STR_01F7_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Programm 'Benutzerdefiniert 2' wählen
+STR_01F8_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Lösche laufendes Programm (nur für Benutzerdefiniert 1 und 2)
STR_01F9_SAVE_MUSIC_SETTINGS :{BLACK}Musikeinstellungen speichern
-STR_01FA_CLICK_ON_MUSIC_TRACK_TO :{BLACK}Klicke auf den Musiktitel, um ihn in das laufende Programm zu übernehmen (nur für Individuell 1 und Individuell 2)
+STR_01FA_CLICK_ON_MUSIC_TRACK_TO :{BLACK}Klicke auf den Musiktitel, um ihn in das laufende Programm zu übernehmen (nur für Benutzerdefiniert 1 und 2)
STR_CLICK_ON_TRACK_TO_REMOVE :{BLACK}Klicke auf einen Musiktitel, um ihn aus der aktuellen Liste zu entfernen(Custom1 or Custom2 only)
STR_01FB_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Schalte Programmauswahl an/aus
STR_01FC_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Zeige Musiktitelauswahl
-STR_01FD_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Anklicken, um die Ansicht auf die Industrie/Stadt zu zentrieren
+STR_01FD_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klick auf Dienstleistung scrollt Hauptansicht zur Industrie/Stadt
STR_01FE_DIFFICULTY :{BLACK}Schwierigkeit ({STRING})
STR_01FF :{TINYFONT}{BLACK}{DATE_LONG}
STR_0200_LAST_MESSAGE_NEWS_REPORT :Letzte Mitteilung / Nachricht
@@ -629,8 +628,8 @@
STR_022A_GENERATE_RANDOM_LAND :{BLACK}Erzeuge Land durch Zufall
STR_022B_RESET_LANDSCAPE :{BLACK}Landfläche wiederherstellen
STR_022C_RESET_LANDSCAPE :{WHITE}Landfläche wiederherstellen
-STR_RESET_LANDSCAPE_TOOLTIP :{BLACK}Entferne das gesamte Spielereigentum von der Karte
-STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Bist du sicher, daß du das gesamte Spielereigentum entfernen willst?
+STR_RESET_LANDSCAPE_TOOLTIP :{BLACK}Das gesamte Spielereigentum von der Karte entfernen
+STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Sind Sie sicher, dass das gesamte Spielereigentum entfernt werden soll?
STR_022E_LANDSCAPE_GENERATION :{BLACK}Landfläche erzeugen
STR_022F_TOWN_GENERATION :{BLACK}Stadt errichten
STR_0230_INDUSTRY_GENERATION :{BLACK}Industrie errichten
@@ -638,13 +637,13 @@
STR_0233_TOWN_GENERATION :{WHITE}Stadt errichten
STR_0234_NEW_TOWN :{BLACK}Neue Stadt
STR_0235_CONSTRUCT_NEW_TOWN :{BLACK}Neue Stadt errichten
-STR_0236_CAN_T_BUILD_TOWN_HERE :{WHITE}Kann hier keine Stadt errichten...
-STR_0237_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}...zu dicht am Kartenrand
+STR_0236_CAN_T_BUILD_TOWN_HERE :{WHITE}Stadt kann hier nicht errichtet werden...
+STR_0237_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}...zu dicht am Spielfeldrand
STR_0238_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}...zu dicht an einer anderen Stadt
STR_0239_SITE_UNSUITABLE :{WHITE}...ungeeigneter Standort
STR_023A_TOO_MANY_TOWNS :{WHITE}...zu viele Städte
STR_CANNOT_GENERATE_TOWN :{WHITE}Bau von Städten unmöglich
-STR_NO_SPACE_FOR_TOWN :{WHITE}...es ist kein Platz mehr auf der Karte.
+STR_NO_SPACE_FOR_TOWN :{WHITE}...es ist kein Platz mehr auf dem Spielfeld.
STR_023B_INCREASE_SIZE_OF_TOWN :{BLACK}Vergrößere die Stadt
STR_023C_EXPAND :{BLACK}Ausdehnen
STR_023D_RANDOM_TOWN :{BLACK}Zufällige Stadt
@@ -657,9 +656,9 @@
STR_0244_OIL_REFINERY :{BLACK}Ölraffinerie
STR_0245_OIL_RIG :{BLACK}Ölbohrinsel
STR_0246_FACTORY :{BLACK}Fabrik
-STR_0247_STEEL_MILL :{BLACK}Stahlwerk
+STR_0247_STEEL_MILL :{BLACK}Stahlwalzwerk
STR_0248_FARM :{BLACK}Bauernhof
-STR_0249_IRON_ORE_MINE :{BLACK}Eisenerzmine
+STR_0249_IRON_ORE_MINE :{BLACK}Eisenerzbergwerk
STR_024A_OIL_WELLS :{BLACK}Ölquellen
STR_024B_BANK :{BLACK}Bank
STR_024C_PAPER_MILL :{BLACK}Papiermühle
@@ -672,7 +671,7 @@
STR_0253_WATER_SUPPLY :{BLACK}Wasserquelle
STR_0254_WATER_TOWER :{BLACK}Wasserturm
STR_0255_DIAMOND_MINE :{BLACK}Diamantenmine
-STR_0256_COPPER_ORE_MINE :{BLACK}Kupfermine
+STR_0256_COPPER_ORE_MINE :{BLACK}Kupfererzbergwerk
STR_0257_COTTON_CANDY_FOREST :{BLACK}Zuckerwattewald
STR_0258_CANDY_FACTORY :{BLACK}Bonbonfabrik
STR_0259_BATTERY_FARM :{BLACK}Batterieplantage
@@ -689,23 +688,23 @@
STR_0264_CONSTRUCT_SAWMILL :{BLACK}Sägewerk errichten
STR_0265_PLANT_FOREST :{BLACK}Wald aufforsten
STR_0266_CONSTRUCT_OIL_REFINERY :{BLACK}Ölraffinerie errichten
-STR_0267_CONSTRUCT_OIL_RIG_CAN_ONLY :{BLACK}Ölbohrinsel errichten (Kann nur am Kartenrand erfolgen)
+STR_0267_CONSTRUCT_OIL_RIG_CAN_ONLY :{BLACK}Ölbohrinsel errichten (nur am Spielfeldrand möglich)
STR_0268_CONSTRUCT_FACTORY :{BLACK}Fabrik errichten
-STR_0269_CONSTRUCT_STEEL_MILL :{BLACK}Stahlwerk errichten
+STR_0269_CONSTRUCT_STEEL_MILL :{BLACK}Stahlwalzwerk errichten
STR_026A_CONSTRUCT_FARM :{BLACK}Bauernhof errichten
-STR_026B_CONSTRUCT_IRON_ORE_MINE :{BLACK}Eisenerzmine errichten
+STR_026B_CONSTRUCT_IRON_ORE_MINE :{BLACK}Eisenerzbergwerk errichten
STR_026C_CONSTRUCT_OIL_WELLS :{BLACK}Ölquellen errichten
STR_026D_CONSTRUCT_BANK_CAN_ONLY :{BLACK}Bank errichten (Nur in Städten mit mehr als 1200 Einwohnern möglich)
STR_026E_CONSTRUCT_PAPER_MILL :{BLACK}Papiermühle errichten
STR_026F_CONSTRUCT_FOOD_PROCESSING :{BLACK}Nahrungsmittelfabrik errichten
STR_0270_CONSTRUCT_PRINTING_WORKS :{BLACK}Druckerei errichten
STR_0271_CONSTRUCT_GOLD_MINE :{BLACK}Goldmine errichten
-STR_0272_CONSTRUCT_BANK_CAN_ONLY :{BLACK}Bank errichten (Kann nur in Städten errichtet werden)
+STR_0272_CONSTRUCT_BANK_CAN_ONLY :{BLACK}Bank errichten (nur in Städten möglich)
STR_0273_CONSTRUCT_LUMBER_MILL_TO :{BLACK}Holzmühle errichten (Zur Säuberung des Regenwaldes und zur Holzproduktion)
STR_0274_PLANT_FRUIT_PLANTATION :{BLACK}Fruchtplantage aufforsten
STR_0275_PLANT_RUBBER_PLANTATION :{BLACK}Kautschukplantage aufforsten
STR_0276_CONSTRUCT_WATER_SUPPLY :{BLACK}Wasserquelle errichten
-STR_0277_CONSTRUCT_WATER_TOWER_CAN :{BLACK}Wasserturm errichten (Kann nur in Städten errichtet werden)
+STR_0277_CONSTRUCT_WATER_TOWER_CAN :{BLACK}Wasserturm errichten (nur in Städten möglich)
STR_0278_CONSTRUCT_DIAMOND_MINE :{BLACK}Diamantenmine errichten
STR_0279_CONSTRUCT_COPPER_ORE_MINE :{BLACK}Kupfermine errichten
STR_027A_PLANT_COTTON_CANDY_FOREST :{BLACK}Zuckerwattewald aufforsten
@@ -719,7 +718,7 @@
STR_0282_CONSTRUCT_BUBBLE_GENERATOR :{BLACK}Luftblasengenerator errichten
STR_0283_CONSTRUCT_TOFFEE_QUARRY :{BLACK}Karamellgrube errichten
STR_0284_CONSTRUCT_SUGAR_MINE :{BLACK}Zuckerbergwerk errichten
-STR_0285_CAN_T_BUILD_HERE :{WHITE}Kann {STRING} hier nicht bauen...
+STR_0285_CAN_T_BUILD_HERE :{WHITE}{STRING} kann hier nicht gebaut werden...
STR_0286_MUST_BUILD_TOWN_FIRST :{WHITE}...erst muss eine Stadt errichtet werden
STR_0287_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}...pro Stadt nur einmal erlaubt
STR_0288_PLANT_TREES :{BLACK}Bäume pflanzen
@@ -745,7 +744,7 @@
STR_029A_PLAY_SCENARIO :{BLACK}Szenario spielen
STR_PLAY_HEIGHTMAP :{BLACK}Reliefkarte spielen
STR_PLAY_HEIGHTMAP_HINT :{BLACK}Ein neues Spiel mit Reliefkarte als Landschaft starten
-STR_QUIT_SCENARIO_QUERY :{YELLOW}Bist du dir sicher, dass du das Szenario verlassen willst?
+STR_QUIT_SCENARIO_QUERY :{YELLOW}Sind Sie sicher, dass Sie das Szenario verlassen wollen?
STR_029C_QUIT_EDITOR :{WHITE}Bearbeitung beenden
STR_029D_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...kann nur in Städten mit mehr als 1200 Einwohnern gebaut werden
STR_029E_MOVE_THE_STARTING_DATE :{BLACK}Startdatum auf 1 Jahr früher setzen
@@ -867,8 +866,8 @@
STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}...kann nur im Wüstengebiet errichtet werden
STR_0319_PAUSED :{YELLOW}* * ANGEHALTEN * *
-STR_031B_SCREENSHOT_SUCCESSFULLY :{WHITE}Screenshot ist gespeichert als '{STRING}'
-STR_031C_SCREENSHOT_FAILED :{WHITE}Screenshot misslungen!
+STR_031B_SCREENSHOT_SUCCESSFULLY :{WHITE}Screenshot gespeichert als '{STRING}'
+STR_031C_SCREENSHOT_FAILED :{WHITE}Screenshot fehlgeschlagen
STR_0329_PURCHASE_LAND_FOR_FUTURE :{BLACK}Land für künftige Nutzung kaufen
STR_032F_AUTOSAVE :{RED}Autosicherung
@@ -946,7 +945,7 @@
STR_OPTIONS_SCREENSHOT_FORMAT :{BLACK}Screenshotformat
STR_OPTIONS_SCREENSHOT_FORMAT_CBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_OPTIONS_SCREENSHOT_FORMAT_TIP :{BLACK}Wähle das zu benutzende Screenshotformat aus
+STR_OPTIONS_SCREENSHOT_FORMAT_TIP :{BLACK}Format auswählen, in dem Screenshots abgespeichert werden sollen
STR_AUTOSAVE_1_MONTH :Jeden Monat
STR_AUTOSAVE_FAILED :{WHITE}Autosicherung fehlgeschlagen
@@ -964,8 +963,8 @@
STR_MONTH_NOV :November
STR_MONTH_DEC :Dezember
-STR_HEADING_FOR_STATION :{LTBLUE}Unterwegs zu {STATION}
-STR_HEADING_FOR_STATION_VEL :{LTBLUE}Unterwegs zu {STATION}, {VELOCITY}
+STR_HEADING_FOR_STATION :{LTBLUE}Unterwegs nach {STATION}
+STR_HEADING_FOR_STATION_VEL :{LTBLUE}Unterwegs nach {STATION}, {VELOCITY}
STR_NO_ORDERS :{LTBLUE}Keine Aufträge
STR_NO_ORDERS_VEL :{LTBLUE}Keine Aufträge, {VELOCITY}
@@ -980,39 +979,39 @@
STR_SMALL_RIGHT_ARROW :{TINYFONT}{RIGHTARROW}
-STR_CANT_SHARE_ORDER_LIST :{WHITE}Der Fahrplan kann nicht gemeinsam benutzt werden...
-STR_CANT_COPY_ORDER_LIST :{WHITE}Kann Fahrplan nicht kopieren...
-STR_END_OF_SHARED_ORDERS :{SETX 10}- - Ende des gemeinsamen Fahrplans - -
+STR_CANT_SHARE_ORDER_LIST :{WHITE}Fehler beim Erstellen eines gemeinsam genutzten Fahrplans...
+STR_CANT_COPY_ORDER_LIST :{WHITE}Fahrplan kann nicht kopiert werden...
+STR_END_OF_SHARED_ORDERS :{SETX 10}- - Ende des gemeinsam genutzten Fahrplans - -
-STR_TRAIN_IS_LOST :{WHITE}Zug {COMMA} findet den Weg nicht.
+STR_TRAIN_IS_LOST :{WHITE}Zug {COMMA} hat sich verirrt.
STR_TRAIN_IS_UNPROFITABLE :{WHITE}Einkommen von Zug {COMMA} war letztes Jahr {CURRENCY}
STR_EURO_INTRODUCE :{BLACK}{BIGFONT}Europäische Währungsunion!{}{}Der Euro wird einzige Währung für alltägliche Zahlungsvorgänge.
# Start of order review system.
# DON'T ADD OR REMOVE LINES HERE
-STR_TRAIN_HAS_TOO_FEW_ORDERS :{WHITE}Zug {COMMA} hat zu wenige Aufträge im Fahrplan
-STR_TRAIN_HAS_VOID_ORDER :{WHITE}Zug {COMMA} hat einen leeren Auftrag
-STR_TRAIN_HAS_DUPLICATE_ENTRY :{WHITE}Zug {COMMA} hat doppelte Aufträge
-STR_TRAIN_HAS_INVALID_ENTRY :{WHITE}Zug {COMMA} hat einen ungültigen Stationsnamen im Fahrplan
-STR_ROADVEHICLE_HAS_TOO_FEW_ORDERS :{WHITE}Fahrzeug {COMMA} hat zu wenige Aufträge im Fahrplan
-STR_ROADVEHICLE_HAS_VOID_ORDER :{WHITE}Fahrzeug {COMMA} hat einen leeren Auftrag
-STR_ROADVEHICLE_HAS_DUPLICATE_ENTRY :{WHITE}Fahrzeug {COMMA} hat doppelte Aufträge
-STR_ROADVEHICLE_HAS_INVALID_ENTRY :{WHITE}Fahrzeug {COMMA} hat einen ungültigen Stationsnamen im Fahrplan
-STR_SHIP_HAS_TOO_FEW_ORDERS :{WHITE}Schiff {COMMA} hat zu wenige Aufträge im Fahrplan
-STR_SHIP_HAS_VOID_ORDER :{WHITE}Schiff {COMMA} hat einen leeren Auftrag
-STR_SHIP_HAS_DUPLICATE_ENTRY :{WHITE}Schiff {COMMA} hat doppelte Aufträge
-STR_SHIP_HAS_INVALID_ENTRY :{WHITE}Schiff {COMMA} hat einen ungültigen Stationsnamen im Fahrplan
-STR_AIRCRAFT_HAS_TOO_FEW_ORDERS :{WHITE}Flugzeug {COMMA} hat zu wenige Aufträge im Flugplan
-STR_AIRCRAFT_HAS_VOID_ORDER :{WHITE}Flugzeug {COMMA} hat einen leeren Auftrag
-STR_AIRCRAFT_HAS_DUPLICATE_ENTRY :{WHITE}Flugzeug {COMMA} hat doppelte Aufträge
-STR_AIRCRAFT_HAS_INVALID_ENTRY :{WHITE}Flugzeug {COMMA} hat einen ungültigen Stationsnamen im Fahrplan
+STR_TRAIN_HAS_TOO_FEW_ORDERS :{WHITE}Zug {COMMA} hat nicht genug Aufträge im Fahrplan
+STR_TRAIN_HAS_VOID_ORDER :{WHITE}Zug {COMMA} hat keine Aufträge
+STR_TRAIN_HAS_DUPLICATE_ENTRY :{WHITE}Zug {COMMA} hat einen Auftrag mehrfach
+STR_TRAIN_HAS_INVALID_ENTRY :{WHITE}Zug {COMMA} hat einen ungültigen Bahnhof im Fahrplan
+STR_ROADVEHICLE_HAS_TOO_FEW_ORDERS :{WHITE}Fahrzeug {COMMA} hat nicht genug Aufträge im Fahrplan
+STR_ROADVEHICLE_HAS_VOID_ORDER :{WHITE}Fahrzeug {COMMA} hat keine Aufträge
+STR_ROADVEHICLE_HAS_DUPLICATE_ENTRY :{WHITE}Fahrzeug {COMMA} hat einen Auftrag mehrfach
+STR_ROADVEHICLE_HAS_INVALID_ENTRY :{WHITE}Fahrzeug {COMMA} hat eine ungültige Haltestelle im Fahrplan
+STR_SHIP_HAS_TOO_FEW_ORDERS :{WHITE}Schiff {COMMA} hat nicht genug Aufträge im Fahrplan
+STR_SHIP_HAS_VOID_ORDER :{WHITE}Schiff {COMMA} hat keine Aufträge
+STR_SHIP_HAS_DUPLICATE_ENTRY :{WHITE}Schiff {COMMA} hat einen Auftrag mehrfach
+STR_SHIP_HAS_INVALID_ENTRY :{WHITE}Schiff {COMMA} hat einen ungültigen Hafen im Fahrplan
+STR_AIRCRAFT_HAS_TOO_FEW_ORDERS :{WHITE}Flugzeug {COMMA} hat nicht genug Aufträge im Fahrplan
+STR_AIRCRAFT_HAS_VOID_ORDER :{WHITE}Flugzeug {COMMA} hat keine Aufträge
+STR_AIRCRAFT_HAS_DUPLICATE_ENTRY :{WHITE}Flugzeug {COMMA} hat einen Auftrag mehrfach
+STR_AIRCRAFT_HAS_INVALID_ENTRY :{WHITE}Flugzeug {COMMA} hat einen ungültigen Flughafen im Fahrplan
# end of order system
STR_TRAIN_AUTORENEW_FAILED :{WHITE}Zug {COMMA} kann nicht erneuert werden (Geld fehlt)
STR_ROADVEHICLE_AUTORENEW_FAILED :{WHITE}Fahrzeug {COMMA} kann nicht erneuert werden (Geld fehlt)
STR_SHIP_AUTORENEW_FAILED :{WHITE}Schiff {COMMA} kann nicht erneuert werden (Geld fehlt)
STR_AIRCRAFT_AUTORENEW_FAILED :{WHITE}Flugzeug {COMMA} kann nicht erneuert werden (Geld fehlt)
-STR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}Zug {COMMA} nach Ersetzung zu lang
+STR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}Zug {COMMA} nach Erneuerung zu lang
STR_CONFIG_PATCHES :{BLACK}Einstellungen der Patches
STR_CONFIG_PATCHES_TIP :{BLACK}Einstellungen der Patches
@@ -1035,10 +1034,10 @@
STR_CONFIG_PATCHES_SELECTGOODS :{LTBLUE}Liefere Fracht nur, wenn die Station diese annimmt: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LONGBRIDGES :{LTBLUE}Erlaube das Bauen von sehr langen Brücken: {ORANGE}{STRING}
STR_CONFIG_PATCHES_GOTODEPOT :{LTBLUE}Erlaube "Gehe zum Depot"-Aufträge im Fahrplan: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD :{LTBLUE}Finanziere Bau von Primärindustrie: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD :{LTBLUE}Methode zum manuellen Bau von Primärindustrien: {ORANGE}{STRING}
STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE :keine
-STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL :wie andere Industrie
-STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :erkundend
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL :wie andere Industrien
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :mit Prospektion
STR_CONFIG_PATCHES_MULTIPINDTOWN :{LTBLUE}Erlaube mehrere gleichartige Industrien pro Stadt: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SAMEINDCLOSE :{LTBLUE}Gleiche Industrien können nahe beieinander gebaut werden: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LONGDATE :{LTBLUE}Lange Datumsanzeige in der Statusleiste (links unten): {ORANGE}{STRING}
@@ -1046,13 +1045,13 @@
STR_CONFIG_PATCHES_SHOWFINANCES :{LTBLUE}Zeige Firmenfinanzen am Ende des Jahres: {ORANGE}{STRING}
STR_CONFIG_PATCHES_NEW_NONSTOP :{LTBLUE}TTDPatch kompatibles "Nonstop"-Verhalten: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ROADVEH_QUEUE :{LTBLUE}Fahrzeugwarteschlange (mit Überlagerung): {ORANGE}{STRING}
-STR_CONFIG_PATCHES_AUTOSCROLL :{LTBLUE}Karte scrollen, wenn die Maus am Bildrand anstößt: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AUTOSCROLL :{LTBLUE}Spielfeld scrollen, wenn die Maus am Bildrand anstößt: {ORANGE}{STRING}
STR_CONFIG_PATCHES_BRIBE :{LTBLUE}Bestechen der Stadtverwaltung erlauben: {ORANGE}{STRING}
STR_CONFIG_PATCHES_NONUNIFORM_STATIONS :{LTBLUE}Ungleichmäßige Bahnhöfe: {ORANGE}{STRING}
STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL :{LTBLUE}Neue globale Wegfindung für alle Fahrzeuge: {ORANGE}{STRING}
STR_CONFIG_PATCHES_FREIGHT_TRAINS :{LTBLUE}Frachtgewicht erhöhen um schwere Züge zu simulieren: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD :{LTBLUE}Erlaube Bushaltestellen an städtischen Straßen: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_ADJACENT_STATIONS :{LTBLUE}Erlaube das Bauen aneinanderliegender Stationen: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD :{LTBLUE}Bushaltestellen an städtischen Straßen erlauben: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADJACENT_STATIONS :{LTBLUE}Bau angrenzender Stationen erlauben: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SMALL_AIRPORTS :{LTBLUE}Kleine Flughäfen immer erlauben: {ORANGE}{STRING}
@@ -1073,53 +1072,53 @@
STR_CONFIG_PATCHES_LAND_GENERATOR :{LTBLUE}Land Generator: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LAND_GENERATOR_ORIGINAL :Original
STR_CONFIG_PATCHES_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis
-STR_CONFIG_PATCHES_OIL_REF_EDGE_DISTANCE :{LTBLUE}Maximaler Abstand der Ölraffinerien vom Kartenrand{ORANGE}{STRING}
+STR_CONFIG_PATCHES_OIL_REF_EDGE_DISTANCE :{LTBLUE}Maximaler Abstand der Ölraffinerien vom Spielfeldrand: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SNOWLINE_HEIGHT :{LTBLUE}Schneegrenze auf: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN :{LTBLUE}Rauhheit (nur TerraGenesis) : {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN :{LTBLUE}Rauheit (nur TerraGenesis): {ORANGE}{STRING}
STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Sehr sanft
STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_SMOOTH :Sanft
STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_ROUGH :Rauh
STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Sehr rauh
-STR_CONFIG_PATCHES_TREE_PLACER :{LTBLUE}Baumplazierungsalgorithmus: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TREE_PLACER :{LTBLUE}Baumplatzierungsalgorithmus: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TREE_PLACER_NONE :Keiner
STR_CONFIG_PATCHES_TREE_PLACER_ORIGINAL :Original
STR_CONFIG_PATCHES_TREE_PLACER_IMPROVED :Verbessert
STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION :{LTBLUE}Drehung der Reliefkarte: {ORANGE}{STRING}
STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :links
STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION_CLOCKWISE :rechts
-STR_CONFIG_PATCHES_SE_FLAT_WORLD_HEIGHT :{LTBLUE}Höhenstufe der Karte eines flachen Szenarios: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SE_FLAT_WORLD_HEIGHT :{LTBLUE}Höhenstufe des Spielfeldes in einem flachen Szenario: {ORANGE}{STRING}
STR_CONFIG_PATCHES_STATION_SPREAD :{LTBLUE}Maximale Stationsgröße: {ORANGE}{STRING} {RED}Achtung: Große Werte verlangsamen das Spiel
STR_CONFIG_PATCHES_SERVICEATHELIPAD :{LTBLUE}Hubschrauber auf Helipads automatisch warten: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR :{LTBLUE}Landschaftsbau-Toolbar an Eisenbahn/Straßen/Hafen/Flughafen-Toolbar binden: {ORANGE}{STRING}
STR_CONFIG_PATCHES_REVERSE_SCROLLING :{LTBLUE}Beim Verschieben mit der Maus die Ansicht in die Gegenrichtung verschieben: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_SMOOTH_SCROLLING :{LTBLUE}Weiches Scrollen in den Ansichten: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SMOOTH_SCROLLING :{LTBLUE}Optimierten Bildlauf in den Ansichten verwenden: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MEASURE_TOOLTIP :{LTBLUE}Zeige Tooltip mit Abmessungen bei verschiedenen Bauwerkzeugen: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LIVERIES :{LTBLUE}Anzeigen der Firmenlackierungen: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LIVERIES_NONE :Keine
STR_CONFIG_PATCHES_LIVERIES_OWN :Eigene Firma
STR_CONFIG_PATCHES_LIVERIES_ALL :Alle Firmen
STR_CONFIG_PATCHES_PREFER_TEAMCHAT :{LTBLUE}Bevorzuge Teamchat mit <ENTER>: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLLING :{LTBLUE}Funktion des Scrollrads: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_SCROLLWHEEL_ZOOM :Karte vergrößern
-STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL :Kartenansicht verschieben
+STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLLING :{LTBLUE}Funktion des Mausrads: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SCROLLWHEEL_ZOOM :Spielfeld vergrößern
+STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL :Hauptansicht verschieben
STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :Aus
-STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Scrollradgeschwindigkeit auf der Karte: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Mausradgeschwindigkeit auf dem Spielfeld: {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_LOADING_INDICATORS :{LTBLUE}Ladestandanzeiger verwenden: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_TIMETABLE_ALLOW :{LTBLUE}Aktiviere Fahrpläne für Fahrzeuge: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS :{LTBLUE}Zeige Zeitpläne in Ticks anstatt in Tagen: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_ALLOW :{LTBLUE}Fahrpläne für Fahrzeuge aktivieren: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS :{LTBLUE}Zeitpläne in Ticks anstatt in Tagen anzeigen: {ORANGE}{STRING}
STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE :{LTBLUE}Standard-Gleistyp (bei Spielbeginn/geladenem Spiel): {ORANGE}{STRING}
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_LAST :Neuste
-STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED :Meistbenutze
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST :erster verfügbarer
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST :letzter verfügbarer
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED :meistbenutzer
-STR_CONFIG_PATCHES_ALWAYS_BUILD_INFRASTRUCTURE :{LTBLUE}Zeige Bauwerkzeuge auch wenn keine passenden Fahrzeuge verfügbar sind: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ALWAYS_BUILD_INFRASTRUCTURE :{LTBLUE}Bauwerkzeuge auch anzeigen, wenn keine passenden Fahrzeuge verfügbar sind: {ORANGE}{STRING}
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}
STR_CONFIG_PATCHES_MAX_AIRCRAFT :{LTBLUE}Maximale Anzahl der Flugzeuge pro Spieler: {ORANGE}{STRING}
@@ -1153,13 +1152,13 @@
STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY :{LTBLUE}Errichte Signale alle {ORANGE}{STRING} Felder beim Ziehen mit der Maus
STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE :{LTBLUE}Automatischer Bau von Formsignalen bis: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID :{WHITE}Der Stadtaufbau "keine weiteren Straßen" ist im Szenarioeditor nicht möglich
-STR_CONFIG_PATCHES_TOWN_LAYOUT :{LTBLUE}Wähle den Stadtstraßenaufbau: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID :{WHITE}Der Stadtaufbau "keine weiteren Straßen" ist im Szenarieneditor nicht möglich
+STR_CONFIG_PATCHES_TOWN_LAYOUT :{LTBLUE}Stadtstraßenaufbau auswählen: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TOWN_LAYOUT_NO_ROADS :keine weiteren Straßen
STR_CONFIG_PATCHES_TOWN_LAYOUT_DEFAULT :Vorgabe
STR_CONFIG_PATCHES_TOWN_LAYOUT_BETTER_ROADS :bessere Straßen
-STR_CONFIG_PATCHES_TOWN_LAYOUT_2X2_GRID :2x2 Gitter
-STR_CONFIG_PATCHES_TOWN_LAYOUT_3X3_GRID :3x3 Gitter
+STR_CONFIG_PATCHES_TOWN_LAYOUT_2X2_GRID :2×2-Gitter
+STR_CONFIG_PATCHES_TOWN_LAYOUT_3X3_GRID :3×3-Gitter
STR_CONFIG_PATCHES_TOOLBAR_POS :{LTBLUE}Position der Werkzeugleiste: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT :Links
@@ -1167,14 +1166,14 @@
STR_CONFIG_PATCHES_TOOLBAR_POS_RIGHT :Rechts
STR_CONFIG_PATCHES_SNAP_RADIUS :{LTBLUE}Fenster schnappen aneinander, wenn näher als: {ORANGE}{STRING} px
STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED :{LTBLUE}Fenster schnappen aneinander, wenn näher als: {ORANGE}ausgeschaltet
-STR_CONFIG_PATCHES_TOWN_GROWTH :{LTBLUE}Stadtwachstumgeschwindigkeit: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_TOWN_GROWTH_NONE :Keins
-STR_CONFIG_PATCHES_TOWN_GROWTH_SLOW :Langsam
-STR_CONFIG_PATCHES_TOWN_GROWTH_NORMAL :Normal
-STR_CONFIG_PATCHES_TOWN_GROWTH_FAST :Schnell
-STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST :Sehr schnell
-STR_CONFIG_PATCHES_LARGER_TOWNS :{LTBLUE}Anteil der Städte die doppelt so schnell wachsen: {ORANGE}1 in {STRING}
-STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED :{LTBLUE}Anteil der Städte die doppelt so schnell wachsen: {ORANGE}Keine
+STR_CONFIG_PATCHES_TOWN_GROWTH :{LTBLUE}Wachstumsgeschwindigkeit von Städten: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_GROWTH_NONE :keine
+STR_CONFIG_PATCHES_TOWN_GROWTH_SLOW :langsam
+STR_CONFIG_PATCHES_TOWN_GROWTH_NORMAL :mittel
+STR_CONFIG_PATCHES_TOWN_GROWTH_FAST :schnell
+STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST :sehr schnell
+STR_CONFIG_PATCHES_LARGER_TOWNS :{LTBLUE}Anteil der Städte die doppelt so schnell wachsen: {ORANGE}jede {STRING}.
+STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED :{LTBLUE}Anteil der Städte die doppelt so schnell wachsen: {ORANGE}keine
STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER :{LTBLUE}Startmultiplikator der Stadtgröße: {ORANGE}{STRING}
STR_CONFIG_PATCHES_GUI :{BLACK}Oberfläche
@@ -1200,8 +1199,8 @@
STR_TOYLAND_LANDSCAPE :Fantastisch
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_CHEATS_TIP :{BLACK}Die Kontrollkästchen zeigen an, ob dieser Cheat schonmal verwendet worden ist.
+STR_CHEATS_WARNING :{BLACK}Achtung! Sie sind im Begriff, Ihre Mitspieler zu betrügen. Bedenken Sie, dass sie Ihnen das niemals verzeihen werden.
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}
@@ -1228,25 +1227,25 @@
STR_WAYPOINT_VIEWPORT :{WHITE}{WAYPOINT}
STR_WAYPOINT_VIEWPORT_TINY :{TINYFONT}{WHITE}{WAYPOINT}
STR_WAYPOINT_RAW :{WAYPOINT}
-STR_EDIT_WAYPOINT_NAME :{WHITE}Wegpunktename ändern
+STR_EDIT_WAYPOINT_NAME :{WHITE}Wegpunktname ändern
-STR_CANT_CHANGE_WAYPOINT_NAME :{WHITE}Kann Wegpunktname nicht ändern...
-STR_CONVERT_RAIL_TO_WAYPOINT_TIP :{BLACK}Ändere Gleis in einen Wegpunkt
-STR_CANT_BUILD_TRAIN_WAYPOINT :{WHITE}Kann Wegpunkt hier nicht bauen...
-STR_CANT_REMOVE_TRAIN_WAYPOINT :{WHITE}Kann Wegpunkt hier nicht entfernen...
+STR_CANT_CHANGE_WAYPOINT_NAME :{WHITE}Wegpunktname kann nicht geändert werden...
+STR_CONVERT_RAIL_TO_WAYPOINT_TIP :{BLACK}Schiene in einen Wegpunkt umwandeln
+STR_CANT_BUILD_TRAIN_WAYPOINT :{WHITE}Wegpunkt kann hier nicht gebaut werden...
+STR_CANT_REMOVE_TRAIN_WAYPOINT :{WHITE}Wegpunkt kann hier nicht entfernt werden...
-STR_BUILD_AUTORAIL_TIP :{BLACK}Bauen von Gleisen unter Verwendung des Automatikmodus
+STR_BUILD_AUTORAIL_TIP :{BLACK}Bauen von Schienen unter Verwendung des Autoschienenmodus
STR_NO_TOWN_IN_SCENARIO :{WHITE}...in diesem Szenario gibt es keine Stadt
STR_GENERATE_RANDOM_LANDSCAPE :{WHITE}Soll wirklich eine zufällige Landschaft erzeugt werden?
STR_MANY_RANDOM_TOWNS :{BLACK}Viele zufällige Städte
-STR_RANDOM_TOWNS_TIP :{BLACK}Bedecke die Karte mit zufällig platzierten Städten
+STR_RANDOM_TOWNS_TIP :{BLACK}Das Spielfeld mit zufällig platzierten Städten füllen
STR_MANY_RANDOM_INDUSTRIES :Viele zufällige Industrien
-STR_RANDOM_INDUSTRIES_TIP :{BLACK}Bedecke die Karte mit zufällig platzierten Industrien
-STR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Kann keine Industrie erzeugen...
+STR_RANDOM_INDUSTRIES_TIP :{BLACK}Das Spielfeld mit zufällig platzierten Industrien füllen
+STR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Industrie kann nicht erzeugt werden...
-STR_LANDSCAPING_TOOLBAR_TIP :{BLACK}Öffne die Landschaftsbau-Toolbar, um Land zu senken/heben, Bäume zu pflanzen, etc.
+STR_LANDSCAPING_TOOLBAR_TIP :{BLACK}Die Landschaftsbau-Toolbar ermöglicht es, Land zu senken/heben, Bäume zu pflanzen, etc.
STR_LANDSCAPING_TOOLBAR :{WHITE}Landschaftsbau
STR_LEVEL_LAND_TOOLTIP :{BLACK}Land ausgleichen
@@ -1254,21 +1253,21 @@
STR_TREES_RANDOM_TYPE :{BLACK}Zufällige Baumart
STR_TREES_RANDOM_TYPE_TIP :{BLACK}Zufällige Baumart pflanzen
-STR_CANT_BUILD_CANALS :{WHITE}Kann hier keinen Kanal bauen...
+STR_CANT_BUILD_CANALS :{WHITE}Kanal kann hier nicht gebaut werden...
STR_BUILD_CANALS_TIP :{BLACK}Kanalbau.
STR_LANDINFO_CANAL :Kanal
-STR_CANT_BUILD_LOCKS :{WHITE}Kann hier keine Schleuse bauen...
+STR_CANT_BUILD_LOCKS :{WHITE}Schleuse kann hier nicht gebaut werden...
STR_BUILD_LOCKS_TIP :{BLACK}Schleusen bauen
STR_LANDINFO_LOCK :Schleuse
-STR_BUOY_IS_IN_USE :{WHITE}... Boje wird genutzt!
+STR_BUOY_IS_IN_USE :{WHITE}... Boje ist in Benutzung
-STR_LANDINFO_COORDS :{BLACK}Koordinaten: {LTBLUE}{NUM}x{NUM} ({STRING})
+STR_LANDINFO_COORDS :{BLACK}Koordinaten: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
-STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Kann den Teil des Bahnhofs nicht entfernen...
-STR_CANT_CONVERT_RAIL :{WHITE}Kann Gleistyp hier nicht verändern...
-STR_CONVERT_RAIL_TIP :{BLACK}Konvertiere / Erweitere den Typ des Gleises
+STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Dieser Teil des Bahnhofs kann nicht entfernt werden...
+STR_CANT_CONVERT_RAIL :{WHITE}Gleistyp kann hier nicht verändert werden...
+STR_CONVERT_RAIL_TIP :{BLACK}Gleis umwandeln / erweitern
STR_DRAG_WHOLE_TRAIN_TO_SELL_TIP :{BLACK}Lok hierher ziehen, um den ganzen Zug zu verkaufen
@@ -1278,7 +1277,7 @@
STR_SELECT_STATION_TYPE_TIP :{BLACK}Wähle die Stationsart aus, die gebaut werden soll
STR_FAST_FORWARD :{BLACK}Spiel vorspulen
-STR_MESSAGE_HISTORY :{WHITE}Vorhergehende Nachrichten
+STR_MESSAGE_HISTORY :{WHITE}Vergangene Nachrichten
STR_MESSAGE_HISTORY_TIP :{BLACK}Eine Liste der aktuellen Nachrichten
STR_MESSAGES_DISABLE_ALL :{BLACK}Alles deaktivieren
STR_MESSAGES_ENABLE_ALL :{BLACK}Alles aktivieren
@@ -1287,11 +1286,11 @@
STR_CONSTRUCT_FOREST_TIP :{BLACK}Wald aufforsten
STR_CONSTRUCT_OIL_RIG_TIP :{BLACK}Ölbohrinsel errichten
STR_CONSTRUCT_FARM_TIP :{BLACK}Bauernhof errichten
-STR_CONSTRUCT_COPPER_ORE_MINE_TIP :{BLACK}Kupfermine errichten
+STR_CONSTRUCT_COPPER_ORE_MINE_TIP :{BLACK}Kupfererzmine errichten
STR_CONSTRUCT_OIL_WELLS_TIP :{BLACK}Nach Öl bohren
STR_CONSTRUCT_GOLD_MINE_TIP :{BLACK}Goldmine errichten
STR_CONSTRUCT_DIAMOND_MINE_TIP :{BLACK}Diamantenmine errichten
-STR_CONSTRUCT_IRON_ORE_MINE_TIP :{BLACK}Eisenerzmine errichten
+STR_CONSTRUCT_IRON_ORE_MINE_TIP :{BLACK}Eisenerzbergwerk errichten
STR_CONSTRUCT_FRUIT_PLANTATION_TIP :{BLACK}Fruchtplantage aufforsten
STR_CONSTRUCT_RUBBER_PLANTATION_TIP :{BLACK}Kautschukplantage aufforsten
STR_CONSTRUCT_WATER_SUPPLY_TIP :{BLACK}Wasserquelle errichten
@@ -1314,20 +1313,20 @@
STR_RAIL_REFIT_VEHICLE :{BLACK}Zug umrüsten
STR_RAIL_SELECT_TYPE_OF_CARGO_FOR :{BLACK}Wähle die Frachten aus, die der Zug befördern soll
STR_RAIL_REFIT_TO_CARRY_HIGHLIGHTED :{BLACK}Umrüstung des Zuges auf die ausgewählte Frachtart
-STR_RAIL_CAN_T_REFIT_VEHICLE :{WHITE}Kann den Zug nicht umrüsten...
+STR_RAIL_CAN_T_REFIT_VEHICLE :{WHITE}Zug kann nicht umgerüstet werden...
STR_CONFIG_PATCHES_SERVINT_ISPERCENT :{LTBLUE}Wartungsintervalle in Prozent: {ORANGE}{STRING}
STR_CONFIG_GAME_PRODUCTION :{WHITE}Produktion ändern
-TEMP_AI_IN_PROGRESS :{WHITE}Willkommen bei der neuen KI. Erwarte Fehler. Falls du einen findest, mache einen Screenshot und berichte im Forum. Viel Spaß!
+TEMP_AI_IN_PROGRESS :{WHITE}Willkommen bei der neuen KI. Fehlfunktionen können vorkommen. In diesem Falle bitten wir um einen Screenshot und einen Fehlerbericht im Forum. Viel Spaß!
TEMP_AI_ACTIVATED :{WHITE}Achtung: Die neue KI ist noch im Alpha-Stadium. Derzeit funktionieren nur Straßenfahrzeuge.
-TEMP_AI_MULTIPLAYER :{WHITE}Warnung: Diese Funktion ist noch experimentell. Bitte melde jedwede Probleme damit an truelight@openttd.org.
+TEMP_AI_MULTIPLAYER :{WHITE}Warnung: Diese Funktion ist noch im experimentellen Stadium. Probleme bitte an truelight@openttd.org melden.
############ network gui strings
STR_NETWORK_MULTIPLAYER :{WHITE}Mehrspieler
STR_NETWORK_PLAYER_NAME :{BLACK}Spielername:
-STR_NETWORK_ENTER_NAME_TIP :{BLACK}Mit diesem Namen identifizieren dich andere Spieler
+STR_NETWORK_ENTER_NAME_TIP :{BLACK}Dieser Name wird Sie anderen Spielern gegenüber identifizieren
STR_NETWORK_CONNECTION :{BLACK}Verbindung:
STR_NETWORK_CONNECTION_TIP :{BLACK}Wähle zwischen Internet oder LAN-Verbindung aus
@@ -1353,7 +1352,7 @@
STR_NETWORK_CLIENTS :{SILVER}Teilnehmer: {WHITE}{COMMA} / {COMMA} - {COMMA} / {COMMA}
STR_NETWORK_LANGUAGE :{SILVER}Sprache: {WHITE}{STRING}
STR_NETWORK_TILESET :{SILVER}Landschaft: {WHITE}{STRING}
-STR_NETWORK_MAP_SIZE :{SILVER}Kartengröße: {WHITE}{COMMA}x{COMMA}
+STR_NETWORK_MAP_SIZE :{SILVER}Spielfeldgröße: {WHITE}{COMMA}x{COMMA}
STR_NETWORK_SERVER_VERSION :{SILVER}Serverversion: {WHITE}{STRING}
STR_NETWORK_SERVER_ADDRESS :{SILVER}Serveradresse: {WHITE}{STRING} : {NUM}
STR_NETWORK_START_DATE :{SILVER}Startdatum: {WHITE}{DATE_SHORT}
@@ -1373,38 +1372,27 @@
STR_NETWORK_NEW_GAME_NAME_TIP :{BLACK}Der Name des Spieles wird anderen Spielern im Mehrspielerdialog angezeigt
STR_NETWORK_SET_PASSWORD :{BLACK}Passwort setzen
STR_NETWORK_PASSWORD_TIP :{BLACK}Vergebe ein Passwort, um zu verhindern, dass unbefugte Leute beitreten können
-STR_NETWORK_SELECT_MAP :{BLACK}Karte auswählen:
-STR_NETWORK_SELECT_MAP_TIP :{BLACK}Welche Karte möchtest du spielen?
-STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Max. Teilnehmeranzahl:
-STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Wählt die max. Anzahl an Teilnehmern aus. Nicht alle Slots müssen belegt werden.
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_SELECT_MAP :{BLACK}Spielfeld auswählen:
+STR_NETWORK_SELECT_MAP_TIP :{BLACK}Welches Spielfeld soll verwendet werden?
+STR_NETWORK_LAN_INTERNET_COMBO :{BLACK}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :LAN / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (ankündigen)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :0 Spieler
-STR_NETWORK_1_PLAYERS :1 Spieler
-STR_NETWORK_2_PLAYERS :2 Spieler
-STR_NETWORK_3_PLAYERS :3 Spieler
-STR_NETWORK_4_PLAYERS :4 Spieler
-STR_NETWORK_5_PLAYERS :5 Spieler
-STR_NETWORK_6_PLAYERS :6 Spieler
-STR_NETWORK_7_PLAYERS :7 Spieler
-STR_NETWORK_8_PLAYERS :8 Spieler
-STR_NETWORK_9_PLAYERS :9 Spieler
-STR_NETWORK_10_PLAYERS :10 Spieler
+STR_NETWORK_CLIENTS_SELECT :{BLACK}{SKIP}{SKIP}{NUM} Client{P "" s}
+STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Max. Teilnehmeranzahl:
+STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Auswahl der maximal erlaubten Anzahl von Teilnehmern. Nicht alle Slots müssen belegt werden.
+STR_NETWORK_COMPANIES_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{NUM} Firm{P a en}
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Max. Firmenanzahl:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Begrenzt den Server auf eine gewisse Anzahl an Firmen
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_SPECTATORS_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{NUM} Beobachter
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Max. Beobachteranzahl:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Begrenzt den Server auf eine gewisse Anzahl an Beobachter
-STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Gesprochene Sprachen:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Damit andere Spieler wissen, welche Sprache auf diesem Server gesprochen wird.
-STR_NETWORK_COMBO5 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LANGUAGE_COMBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}Spiel beginnen
-STR_NETWORK_START_GAME_TIP :{BLACK}Startet ein neues Mehrspielerspiel auf einer Zufallskarte oder einem Szenario
+STR_NETWORK_START_GAME_TIP :{BLACK}Startet ein neues Mehrspielerspiel auf einem zufällig generierten Spielfeld oder einem Szenario
STR_NETWORK_LOAD_GAME :{BLACK}Spiel Laden
STR_NETWORK_LOAD_GAME_TIP :{BLACK}Lädt ein gespeichertes Spiel
@@ -1418,7 +1406,7 @@
STR_NETWORK_LANG_CHINESE :Chinesisch
STR_NETWORK_LANG_CZECH :Tschechisch
STR_NETWORK_LANG_DANISH :Dänisch
-STR_NETWORK_LANG_DUTCH :Holländisch
+STR_NETWORK_LANG_DUTCH :Niederländisch
STR_NETWORK_LANG_ESPERANTO :Esperanto
STR_NETWORK_LANG_FINNISH :Finnisch
STR_NETWORK_LANG_HUNGARIAN :Ungarisch
@@ -1443,7 +1431,7 @@
STR_NETWORK_GAME_LOBBY :{WHITE}Mehrspielerlobby
STR_NETWORK_PREPARE_TO_JOIN :{BLACK}Spieleintritt vorbereiten: {ORANGE}{STRING}
-STR_NETWORK_COMPANY_LIST_TIP :{BLACK}Eine Liste aller Firmen, die sich im Spiel befinden. Du kannst einer Firma beitreten oder eine eigene Firma gründen, sofern ein Platz frei ist.
+STR_NETWORK_COMPANY_LIST_TIP :{BLACK}Eine Liste aller Firmen, die sich im Spiel befinden. Sie können einer Firma beitreten oder eine eigene Firma gründen, sofern ein Platz frei ist.
STR_NETWORK_NEW_COMPANY :{BLACK}Neues Unternehmen
STR_NETWORK_NEW_COMPANY_TIP :{BLACK}Ein neues Unternehmen gründen
STR_NETWORK_SPECTATE_GAME :{BLACK}Beim Spiel zusehen
@@ -1472,71 +1460,71 @@
STR_NETWORK_CONNECTING_1 :{BLACK}(1/6) Verbinden...
STR_NETWORK_CONNECTING_2 :{BLACK}(2/6) Autorisieren...
STR_NETWORK_CONNECTING_3 :{BLACK}(3/6) Warten...
-STR_NETWORK_CONNECTING_4 :{BLACK}(4/6) Herunterladen der Karte..
+STR_NETWORK_CONNECTING_4 :{BLACK}(4/6) Herunterladen des Spielfeldes...
STR_NETWORK_CONNECTING_5 :{BLACK}(5/6) Spieldaten verarbeiten...
STR_NETWORK_CONNECTING_6 :{BLACK}(6/6) Registrieren...
STR_NETWORK_CONNECTING_SPECIAL_1 :{BLACK}Spielinformationen holen...
STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Firmeninformationen holen...
############ End of leave-in-this-order
-STR_NETWORK_CONNECTING_WAITING :{BLACK}{NUM} Teilnehmer vor dir
+STR_NETWORK_CONNECTING_WAITING :{BLACK}{NUM} Teilnehmer vor Ihnen
STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{NUM} / {NUM} KB bisher heruntergeladen
STR_NETWORK_DISCONNECT :{BLACK}Trennen
-STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Gib an, wieviel Geld du geben möchtest
-STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server ist geschützt. Gib das Passwort ein
-STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Firma ist geschützt! Passwort eingeben
+STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Wieviel Geld soll vergeben werden?
+STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server ist geschützt. Passwort eingeben:
+STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Firma ist geschützt. Passwort eingeben:
STR_NETWORK_CLIENT_LIST :{WHITE}Teilnehmerliste
STR_NETWORK_ERR_NOTAVAILABLE :{WHITE}Keine Netzwerkschnittstellen gefunden oder ohne ENABLE_NETWORK kompiliert
STR_NETWORK_ERR_NOSERVER :{WHITE}Keine Netzwerkspiele gefunden
-STR_NETWORK_ERR_NOCONNECTION :{WHITE}Der Server antwortete nicht auf die Anfrage
-STR_NETWORK_ERR_NEWGRF_MISMATCH :{WHITE} Konnte Verbindung nicht herstellen, da die NewGRF Versionen nicht übereinstimmen.
+STR_NETWORK_ERR_NOCONNECTION :{WHITE} Der Server antwortet nicht
+STR_NETWORK_ERR_NEWGRF_MISMATCH :{WHITE} Konnte Verbindung nicht herstellen, da die NewGRF-Versionen nicht übereinstimmen.
STR_NETWORK_ERR_DESYNC :{WHITE}Synchronisation des Netzwerkspiels fehlgeschlagen
STR_NETWORK_ERR_LOSTCONNECTION :{WHITE}Verbindung zum Netzwerkspiel verloren
STR_NETWORK_ERR_SAVEGAMEERROR :{WHITE}Spielstand konnte nicht vom Server geladen werden
STR_NETWORK_ERR_SERVER_START :{WHITE}Server konnte nicht gestartet werden
STR_NETWORK_ERR_CLIENT_START :{WHITE}Verbindung konnte nicht hergestellt werden
-STR_NETWORK_ERR_TIMEOUT :{WHITE}Verbindung #{NUM} abgelaufen
+STR_NETWORK_ERR_TIMEOUT :{WHITE} Verbindung #{NUM} hat das Zeitlimit überschritten
STR_NETWORK_ERR_SERVER_ERROR :{WHITE}Protokollfehler: Die Verbindung musste getrennt werden
STR_NETWORK_ERR_WRONG_REVISION :{WHITE}Ihre Version entspricht nicht der Serverversion
STR_NETWORK_ERR_WRONG_PASSWORD :{WHITE}Falsches Passwort
STR_NETWORK_ERR_SERVER_FULL :{WHITE}Der Server ist voll
-STR_NETWORK_ERR_SERVER_BANNED :{WHITE}Du bist von diesem Server verbannt
-STR_NETWORK_ERR_KICKED :{WHITE}Du wurdest vom Server gekickt
+STR_NETWORK_ERR_SERVER_BANNED :{WHITE} Sie sind auf diesem Server gesperrt
+STR_NETWORK_ERR_KICKED :{WHITE} Sie wurden vom Server ausgeschlossen
STR_NETWORK_ERR_CHEATER :{WHITE}Mogeln ist auf diesem Server nicht erlaubt
STR_NETWORK_ERR_LEFT :hat das Spiel verlassen
############ Leave those lines in this order!!
STR_NETWORK_ERR_CLIENT_GENERAL :Allgemeiner Fehler
STR_NETWORK_ERR_CLIENT_DESYNC :Synchronisationsfehler
-STR_NETWORK_ERR_CLIENT_SAVEGAME :Karte konnte nicht geladen werden.
+STR_NETWORK_ERR_CLIENT_SAVEGAME :Spielfeld konnte nicht geladen werden.
STR_NETWORK_ERR_CLIENT_CONNECTION_LOST :Verbindung verloren
STR_NETWORK_ERR_CLIENT_PROTOCOL_ERROR :Protokollfehler
-STR_NETWORK_ERR_CLIENT_NEWGRF_MISMATCH :NewGRF Versionen stimmen nicht überein
-STR_NETWORK_ERR_CLIENT_NOT_AUTHORIZED :nicht authorisiert
-STR_NETWORK_ERR_CLIENT_NOT_EXPECTED :Unerwartetes Paket empfangen
+STR_NETWORK_ERR_CLIENT_NEWGRF_MISMATCH :NewGRF-Versionen stimmen nicht überein
+STR_NETWORK_ERR_CLIENT_NOT_AUTHORIZED :nicht autorisiert
+STR_NETWORK_ERR_CLIENT_NOT_EXPECTED :Unerwartetes Datenpaket empfangen
STR_NETWORK_ERR_CLIENT_WRONG_REVISION :Falsche Version
STR_NETWORK_ERR_CLIENT_NAME_IN_USE :Name wird bereits verwendet
STR_NETWORK_ERR_CLIENT_WRONG_PASSWORD :Falsches Spielpasswort
-STR_NETWORK_ERR_CLIENT_PLAYER_MISMATCH :Falsche-SpielerID in DoCommand (Verarbeitungsfehler)
-STR_NETWORK_ERR_CLIENT_KICKED :gekickt
-STR_NETWORK_ERR_CLIENT_CHEATER :versuchte einen Cheat zu nutzen
+STR_NETWORK_ERR_CLIENT_PLAYER_MISMATCH :Falsche Spieler-ID in DoCommand (Verarbeitungsfehler)
+STR_NETWORK_ERR_CLIENT_KICKED :ausgeschlossen
+STR_NETWORK_ERR_CLIENT_CHEATER :hat versucht zu mogeln
STR_NETWORK_ERR_CLIENT_SERVER_FULL :Server voll
############ End of leave-in-this-order
-STR_NETWORK_CLIENT_JOINED :hat das Spiel betreten
-STR_NETWORK_GIVE_MONEY :gab dir etwas Geld ({CURRENCY})
-STR_NETWORK_GAVE_MONEY_AWAY :Du hast {STRING} etwas Geld gegeben ({CURRENCY})
+STR_NETWORK_CLIENT_JOINED :betritt das Spiel
+STR_NETWORK_GIVE_MONEY :schenkt Ihnen {CURRENCY}
+STR_NETWORK_GAVE_MONEY_AWAY :Sie haben {STRING} {CURRENCY} geschenkt
STR_NETWORK_CHAT_COMPANY_CAPTION :[Team] :
STR_NETWORK_CHAT_COMPANY :[Team] {STRING}: {GRAY}{STRING}
-STR_NETWORK_CHAT_TO_COMPANY :[Team] An {STRING}: {GRAY}{STRING}
+STR_NETWORK_CHAT_TO_COMPANY :[Team] an {STRING}: {GRAY}{STRING}
STR_NETWORK_CHAT_CLIENT_CAPTION :[Privat] :
STR_NETWORK_CHAT_CLIENT :[Privat] {STRING}: {GRAY}{STRING}
-STR_NETWORK_CHAT_TO_CLIENT :[Privat] An {STRING}: {GRAY}{STRING}
+STR_NETWORK_CHAT_TO_CLIENT :[Privat] an {STRING}: {GRAY}{STRING}
STR_NETWORK_CHAT_ALL_CAPTION :[Alle] :
STR_NETWORK_CHAT_ALL :[Alle] {STRING}: {GRAY}{STRING}
-STR_NETWORK_NAME_CHANGE :hat seinen Namen geändert zu
+STR_NETWORK_NAME_CHANGE :ändert seinen Namen in
STR_NETWORK_SERVER_SHUTDOWN :{WHITE}Der Server hat das Spiel beendet
STR_NETWORK_SERVER_REBOOT :{WHITE}Der Server startet neu...{}Bitte warten...
@@ -1545,31 +1533,31 @@
STR_NETWORK_SPECTATORS :Zuschauer
STR_NETWORK_CLIENTLIST_NONE :(keiner)
-STR_NETWORK_CLIENTLIST_KICK :Kicken
-STR_NETWORK_CLIENTLIST_GIVE_MONEY :Geld geben
+STR_NETWORK_CLIENTLIST_KICK :Ausschließen
+STR_NETWORK_CLIENTLIST_GIVE_MONEY :Geld schenken
STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Mit allen sprechen
STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Mit eigener Firma sprechen
STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Private Nachricht
-STR_NETWORK_SEND :{BLACK}Senden
+STR_NETWORK_SEND :{BLACK}Abschicken
############ end network gui strings
-STR_CONFIG_PATCHES_MAP_X :{LTBLUE}X-Abmessung der Karte: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_MAP_Y :{LTBLUE}Y-Abmessung der Karte: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MAP_X :{LTBLUE}X-Abmessung des Spielfeldes: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MAP_Y :{LTBLUE}Y-Abmessung des Spielfeldes: {ORANGE}{STRING}
##### PNG-MAP-Loader
-STR_PNGMAP_ERROR :{WHITE}Kann Landschaft nicht aus PNG-Datei laden...
+STR_PNGMAP_ERROR :{WHITE}Landschaft kann nicht aus PNG-Datei geladen werden...
STR_PNGMAP_ERR_FILE_NOT_FOUND :{WHITE}...Datei nicht gefunden.
-STR_PNGMAP_ERR_IMAGE_TYPE :{WHITE}...kann Grafik-Typ nicht umwandeln. 8- oder 24-bit PNG Datei erforderlich.
-STR_PNGMAP_ERR_MISC :{WHITE}...irgend etwas ging schief. Sorry. (Vielleicht eine kaputte Datei)
+STR_PNGMAP_ERR_IMAGE_TYPE :{WHITE}...Bildtyp kann nicht umgewandelt werden. 8- oder 24-bit-PNG-Datei erforderlich.
+STR_PNGMAP_ERR_MISC :{WHITE}...irgend etwas ging schief. Sorry. (Vielleicht eine kaputte Datei?)
-STR_BMPMAP_ERROR :{WHITE}Kann Landschaft nicht aus BMP-Datei laden...
-STR_BMPMAP_ERR_IMAGE_TYPE :{WHITE}...kann Bildtyp nicht umwandeln.
+STR_BMPMAP_ERROR :{WHITE}Landschaft kann nicht aus BMP-Datei geladen werden...
+STR_BMPMAP_ERR_IMAGE_TYPE :{WHITE}...Bildtyp kann nicht umgewandelt werden.
##id 0x0800
STR_0800_COST :{TINYFONT}{RED}Kosten: {CURRENCY}
@@ -1580,8 +1568,8 @@
STR_FEEDER :{YELLOW}Umladen: {CURRENCY}
STR_0805_ESTIMATED_COST :{WHITE}Geschätzte Kosten: {CURRENCY}
STR_0807_ESTIMATED_INCOME :{WHITE}Geschätzte Einnahmen: {CURRENCY}
-STR_0808_CAN_T_RAISE_LAND_HERE :{WHITE}Kann das Land nicht anheben...
-STR_0809_CAN_T_LOWER_LAND_HERE :{WHITE}Kann das Land nicht absenken...
+STR_0808_CAN_T_RAISE_LAND_HERE :{WHITE}Land kann nicht angehoben werden...
+STR_0809_CAN_T_LOWER_LAND_HERE :{WHITE}Land kann nicht abgesenkt werden...
STR_080A_ROCKS :Gebirge
STR_080B_ROUGH_LAND :Unebenes Land
STR_080C_BARE_LAND :Kahles Land
@@ -1604,12 +1592,12 @@
STR_100B_MONORAIL_CONSTRUCTION :{WHITE}Einschienenbahnbau
STR_100C_MAGLEV_CONSTRUCTION :{WHITE}Magnetschwebebahnbau
STR_100D_SELECT_RAIL_BRIDGE :{WHITE}Eisenbahnbrücke auswählen
-STR_100E_CAN_T_BUILD_TRAIN_DEPOT :{WHITE}Kann hier kein Zugdepot bauen...
-STR_100F_CAN_T_BUILD_RAILROAD_STATION :{WHITE}Kann hier keinen Bahnhof bauen...
-STR_1010_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Kann hier kein Signal aufstellen...
-STR_1011_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Kann hier keine Gleise legen...
+STR_100E_CAN_T_BUILD_TRAIN_DEPOT :{WHITE}Zugdepot kann hier nicht gebaut werden...
+STR_100F_CAN_T_BUILD_RAILROAD_STATION :{WHITE}Bahnhof kann hier nicht gebaut werden...
+STR_1010_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Signal kann hier nicht aufgestellt werden...
+STR_1011_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Gleise können hier nicht verlegt werden...
STR_1012_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Gleise können nicht abgerissen werden...
-STR_1013_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Kann die Signale hier nicht entfernen...
+STR_1013_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Signale können hier nicht entfernt werden...
STR_1014_TRAIN_DEPOT_ORIENTATION :{WHITE}Zugdepotausrichtung
STR_1015_RAILROAD_CONSTRUCTION :Eisenbahnbau
STR_TOOLB_ELRAIL_CONSTRUCTION :Bau elektrifizierter Strecken
@@ -1630,14 +1618,14 @@
STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :Gleis mit normalen Signalen
STR_RAILROAD_TRACK_WITH_PRESIGNALS :Gleis mit Vorsignalen
STR_RAILROAD_TRACK_WITH_EXITSIGNALS :Gleis mit Ausfahrsignalen
-STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Gleis mit kombinierten Vor-/Ausfahrsignalen
-STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS :Eisenbahnschienen mit Vor- und Hauptsignalen
-STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :Eisenbahnschienen mit Haupt- und Ausfahrsignalen
-STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :Eisenbahnschienen mit Haupt- und Kombinationssignalen
-STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS :Eisenbahnschienen mit Vor- und Ausfahrsignalen
-STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :Eisenbahnschienen mit Vor- und Kombinationssignalen
-STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Eisenbahnschienen mit Ausfahr- und Kombinationssignalen
-STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Bahnhof muss erst entfernt werden
+STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Gleise mit Kombinationssignalen
+STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS :Gleis mit Vor- und Hauptsignalen
+STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :Gleis mit Haupt- und Ausfahrsignalen
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :Gleise mit normalen und Kombinationssignalen
+STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS :Gleis mit Vor- und Ausfahrsignalen
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :Gleise mit Vor- und Kombinationssignalen
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Gleise mit Ausfahr- und Kombinationssignalen
+STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Bahnhof muss erst abgerissen werden
@@ -1647,35 +1635,35 @@
STR_1802_ROAD_CONSTRUCTION :{WHITE}Straßenbau
STR_1802_TRAMWAY_CONSTRUCTION :{WHITE}Straßenbahnbau
STR_1803_SELECT_ROAD_BRIDGE :{WHITE}Brücke wählen
-STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION :{WHITE}... Einbahnstraßen können keinen Abzweig haben
-STR_1804_CAN_T_BUILD_ROAD_HERE :{WHITE}Kann hier keine Straße bauen...
-STR_1804_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Kann Straßenbahn hier nicht bauen...
-STR_1805_CAN_T_REMOVE_ROAD_FROM :{WHITE}Kann diese Straße nicht entfernen...
-STR_1805_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Kann Straßenbahn hier nicht entfernen...
+STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION :{WHITE}... Einbahnstraßen können keine Abzweigung haben
+STR_1804_CAN_T_BUILD_ROAD_HERE :{WHITE}Straße kann hier nicht gebaut werden...
+STR_1804_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Straßenbahn kann hier nicht gebaut werden...
+STR_1805_CAN_T_REMOVE_ROAD_FROM :{WHITE}Diese Straße kann nicht entfernt werden...
+STR_1805_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Straßenbahn kann hier nicht entfernt werden...
STR_1806_ROAD_DEPOT_ORIENTATION :{WHITE}Fahrzeugdepot-Ausr.
STR_1806_TRAM_DEPOT_ORIENTATION :{WHITE}Ausrichtung des Straßenbahndepots
-STR_1807_CAN_T_BUILD_ROAD_VEHICLE :{WHITE}Kann Fahrzeugdepot hier nicht bauen...
-STR_1807_CAN_T_BUILD_TRAM_VEHICLE :{WHITE}Kann Straßenbahndepot hier nicht bauen...
-STR_1808_CAN_T_BUILD_BUS_STATION :{WHITE}Kann Busbahnhof nicht bauen...
-STR_1809_CAN_T_BUILD_TRUCK_STATION :{WHITE}Kann Lkw-Ladeplatz nicht bauen...
-STR_1808_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Kann Haltestelle hier nicht bauen...
-STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Kann Güterverladestelle hier nicht bauen...
+STR_1807_CAN_T_BUILD_ROAD_VEHICLE :{WHITE}Fahrzeugdepot kann hier nicht gebaut werden...
+STR_1807_CAN_T_BUILD_TRAM_VEHICLE :{WHITE}Straßenbahndepot kann hier nicht gebaut werden...
+STR_1808_CAN_T_BUILD_BUS_STATION :{WHITE}Busbahnhof kann nicht gebaut werden...
+STR_1809_CAN_T_BUILD_TRUCK_STATION :{WHITE}Lkw-Ladeplatz kann nicht gebaut werden...
+STR_1808_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Straßenbahnhaltestelle kann hier nicht gebaut werden...
+STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Güterverladestelle kann hier nicht gebaut werden...
STR_180A_ROAD_CONSTRUCTION :Straßenbau
STR_180A_TRAMWAY_CONSTRUCTION :Straßenbahnbau
STR_180B_BUILD_ROAD_SECTION :{BLACK}Straße bauen
-STR_180B_BUILD_TRAMWAY_SECTION :{BLACK}Baue Straßenbahnabschnitt
+STR_180B_BUILD_TRAMWAY_SECTION :{BLACK}Straßenbahnabschnitt bauen
STR_180C_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Fahrzeugdepot bauen (zum Bau und zur Wartung von Fahrzeugen)
-STR_180C_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Baue Straßenbahndepot (zum Erstellen und Warten von Straßenbahnen)
+STR_180C_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Straßenbahndepot bauen (zum Erstellen und Warten von Straßenbahnen)
STR_180D_BUILD_BUS_STATION :{BLACK}Busbahnhof bauen
STR_180E_BUILD_TRUCK_LOADING_BAY :{BLACK}Lkw-Ladeplatz bauen
-STR_180D_BUILD_PASSENGER_TRAM_STATION :{BLACK}Baue Haltestelle
-STR_180E_BUILD_CARGO_TRAM_STATION :{BLACK}Baue Güterverladestelle
+STR_180D_BUILD_PASSENGER_TRAM_STATION :{BLACK}Straßenbahnhaltestelle bauen
+STR_180E_BUILD_CARGO_TRAM_STATION :{BLACK}Güterverladestelle bauen
STR_180F_BUILD_ROAD_BRIDGE :{BLACK}Straßenbrücke bauen
-STR_180F_BUILD_TRAMWAY_BRIDGE :{BLACK}Baue Straßenbahnbrücke
+STR_180F_BUILD_TRAMWAY_BRIDGE :{BLACK}Straßenbahnbrücke bauen
STR_1810_BUILD_ROAD_TUNNEL :{BLACK}Straßentunnel bauen
-STR_1810_BUILD_TRAMWAY_TUNNEL :{BLACK}Baue Straßenbahntunnel
+STR_1810_BUILD_TRAMWAY_TUNNEL :{BLACK}Straßenbahntunnel bauen
STR_1811_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Zwischen Bau/Abriss der Straße umschalten
-STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Umschalten zwischen bauen/entfernen für Straßenbahnbau
+STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Umschalten zwischen Bauen/Entfernen für Straßenbahnbau
STR_1813_SELECT_ROAD_VEHICLE_DEPOT :{BLACK}Ausrichtung des Fahrzeugdepots wählen
STR_1813_SELECT_TRAM_VEHICLE_DEPOT :{BLACK}Ausrichtung des Straßenbahndepots wählen
STR_1814_ROAD :Straße
@@ -1683,9 +1671,9 @@
STR_1816_TREE_LINED_ROAD :Straße mit Bäumen
STR_1817_ROAD_VEHICLE_DEPOT :Fahrzeugdepot
STR_1818_ROAD_RAIL_LEVEL_CROSSING :Bahnübergang
-STR_CAN_T_REMOVE_BUS_STATION :{WHITE}Kann Bushaltestelle nicht entfernen...
-STR_CAN_T_REMOVE_TRUCK_STATION :{WHITE}Kann LKW-Ladestelle nicht entfernen...
-STR_CAN_T_REMOVE_PASSENGER_TRAM_STATION :{WHITE} Haltestelle kann nicht entfernt werden...
+STR_CAN_T_REMOVE_BUS_STATION :{WHITE}Bushaltestelle kann nicht entfernt werden...
+STR_CAN_T_REMOVE_TRUCK_STATION :{WHITE}LKW-Ladestelle kann nicht entfernt werden...
+STR_CAN_T_REMOVE_PASSENGER_TRAM_STATION :{WHITE}Straßenbahnhaltestelle kann nicht entfernt werden...
STR_CAN_T_REMOVE_CARGO_TRAM_STATION :{WHITE}Güterverladestelle kann nicht entfernt werden...
##id 0x2000
@@ -1701,8 +1689,8 @@
STR_2007_RENAME_TOWN :Stadt umbenennen
STR_2008_CAN_T_RENAME_TOWN :{WHITE}Die Stadt kann nicht umbenannt werden...
STR_2009_LOCAL_AUTHORITY_REFUSES :{WHITE}Die Stadtverwaltung von {TOWN} erteilt keine Genehmigung
-STR_200A_TOWN_NAMES_CLICK_ON_NAME :{BLACK}Städtenamen - klicke auf den Namen, um die Stadt anzuzeigen
-STR_200B_CENTER_THE_MAIN_VIEW_ON :{BLACK}Ansicht auf Stadt zentrieren
+STR_200A_TOWN_NAMES_CLICK_ON_NAME :{BLACK}Städtenamen - Klick auf den Namen scrollt Hauptansicht zur Stadt
+STR_200B_CENTER_THE_MAIN_VIEW_ON :{BLACK}Hauptansicht zur Stadt scrollen
STR_200C_CHANGE_TOWN_NAME :{BLACK}Stadt umbenennen
STR_200D_PASSENGERS_LAST_MONTH_MAX :{BLACK}Passagiere letzten Monat: {ORANGE}{COMMA}{BLACK} max: {ORANGE}{COMMA}
STR_200E_MAIL_LAST_MONTH_MAX :{BLACK}Postsäcke letzten Monat: {ORANGE}{COMMA}{BLACK} max: {ORANGE}{COMMA}
@@ -1736,18 +1724,18 @@
STR_202B_SERVICES_ALREADY_SUBSIDISED :{BLACK}Bereits vergebene Subventionen:
STR_202C_FROM_TO :{ORANGE}{STRING} von {STATION} nach {STATION}{YELLOW} ({COMPANY}
STR_202D_UNTIL :{YELLOW}, bis {DATE_SHORT})
-STR_202E_OFFER_OF_SUBSIDY_EXPIRED :{BLACK}{BIGFONT}Subventionsangebot abgelaufen:{}{}{STRING} von {STRING} nach {STRING} wird nicht mehr subventioniert.
-STR_202F_SUBSIDY_WITHDRAWN_SERVICE :{BLACK}{BIGFONT}Subventionsende: {}{}{STRING} Dienstleistung von {STATION} nach {STATION} wird nicht mehr subventioniert.
-STR_2030_SERVICE_SUBSIDY_OFFERED :{BLACK}{BIGFONT}Subventionsangebot {}{}Erster {STRING}transport von {STRING} nach {STRING} wird ein Jahr von der Stadtverwaltung subventioniert!
-STR_2031_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}Subvention wird vergeben an {COMPANY}!{}{}{STRING}transport von {STATION} nach {STATION} bringt im nächsten Jahr einen 50% höheren Frachtpreis!
-STR_2032_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}Subvention wird vergeben an {COMPANY}!{}{}{STRING}transport von {STATION} nach {STATION} bringt im nächsten Jahr den doppelten Frachtpreis!
-STR_2033_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}Subvention wird vergeben an {COMPANY}!{}{}{STRING}transport von {STATION} nach {STATION} bringt im nächsten Jahr den dreifachen Frachtpreis!
-STR_2034_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}Subvention wird vergeben an {COMPANY}!{}{}{STRING}transport von {STATION} nach {STATION} bringt im nächsten Jahr den vierfachen Frachtpreis!
-STR_2035_LOCAL_AUTHORITY_REFUSES :{WHITE}Die Stadtverwaltung {TOWN} erlaubt nicht den Bau eines weiteren Flughafens in der Stadt
+STR_202E_OFFER_OF_SUBSIDY_EXPIRED :{BLACK}{BIGFONT}Subventionsangebot abgelaufen:{}{}{STRING}transport von {STRING} nach {STRING} wird nicht mehr subventioniert.
+STR_202F_SUBSIDY_WITHDRAWN_SERVICE :{BLACK}{BIGFONT}Subventionsende:{}{}{STRING}transport von {STATION} nach {STATION} wird nicht mehr subventioniert.
+STR_2030_SERVICE_SUBSIDY_OFFERED :{BLACK}{BIGFONT}Subventionsangebot:{}{}Erster {STRING}transport von {STRING} nach {STRING} wird ein Jahr von den örtlichen Behörden subventioniert!
+STR_2031_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}Subvention vergeben an {COMPANY}!{}{}{STRING}transport von {STATION} nach {STATION} erhält im nächsten Jahr einen 50% höheren Preis!
+STR_2032_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}Subvention vergeben an {COMPANY}!{}{}{STRING}transport von {STATION} nach {STATION} erhält im nächsten Jahr den doppelten Preis!
+STR_2033_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}Subvention vergeben an {COMPANY}!{}{}{STRING}transport von {STATION} nach {STATION} erhält im nächsten Jahr den dreifachen Preis!
+STR_2034_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}Subvention vergeben an {COMPANY}!{}{}{STRING}transport von {STATION} nach {STATION} erhält im nächsten Jahr den vierfachen Preis!
+STR_2035_LOCAL_AUTHORITY_REFUSES :{WHITE}Die Stadtverwaltung von {TOWN} verweigert die Genehmigung für den Bau eines weiteren Flughafens in der Stadt
STR_2036_COTTAGES :Landhaus
STR_2037_HOUSES :Haus
STR_2038_FLATS :Wohnhaus
-STR_2039_TALL_OFFICE_BLOCK :Hohes Geschäftshaus
+STR_2039_TALL_OFFICE_BLOCK :Geschäftshochhaus
STR_203A_SHOPS_AND_OFFICES :Läden und Büros
STR_203B_SHOPS_AND_OFFICES :Läden und Büros
STR_203C_THEATER :Theater
@@ -1756,10 +1744,10 @@
STR_203F_HOUSES :Häuser
STR_2040_CINEMA :Kino
STR_2041_SHOPPING_MALL :Einkaufszentrum
-STR_2042_DO_IT :{BLACK}Tu es
-STR_2043_LIST_OF_THINGS_TO_DO_AT :{BLACK}Liste der verfügbaren Handlungen in dieser Stadt - klicke hier für Einzelheiten
-STR_2044_CARRY_OUT_THE_HIGHLIGHTED :{BLACK}Ausführung der markierten Handlung
-STR_2045_ACTIONS_AVAILABLE :{BLACK}Verfügbare Handlungen:
+STR_2042_DO_IT :{BLACK}Ausführen
+STR_2043_LIST_OF_THINGS_TO_DO_AT :{BLACK}Liste der verfügbaren Maßnahmen in dieser Stadt - Klick zeigt Einzelheiten an
+STR_2044_CARRY_OUT_THE_HIGHLIGHTED :{BLACK}Ausgewählte Maßnahme durchführen
+STR_2045_ACTIONS_AVAILABLE :{BLACK}Verfügbare Maßnahmen:
STR_2046_SMALL_ADVERTISING_CAMPAIGN :Kleine Werbekampagne
STR_2047_MEDIUM_ADVERTISING_CAMPAIGN :Mittlere Werbekampagne
STR_2048_LARGE_ADVERTISING_CAMPAIGN :Große Werbekampagne
@@ -1803,7 +1791,7 @@
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}Schild kann hier nicht aufgestellt werden...
STR_280A_SIGN :Schild
STR_280B_EDIT_SIGN_TEXT :{WHITE}Schildtext ändern
-STR_280C_CAN_T_CHANGE_SIGN_NAME :{WHITE}Kann Schildnamen nicht ändern...
+STR_280C_CAN_T_CHANGE_SIGN_NAME :{WHITE}Schildname kann nicht geändert werden...
STR_280D_SELECT_TREE_TYPE_TO_PLANT :{BLACK}Wähle die zu pflanzende Baumart
STR_280E_TREES :Bäume
STR_280F_RAINFOREST :Regenwald
@@ -1828,7 +1816,7 @@
STR_300E_MUST_DEMOLISH_AIRPORT_FIRST :{WHITE}Flughafen muss erst abgerissen werden
STR_3030_RENAME_STATION_LOADING :Station/Ladeplatz umbenennen
-STR_3031_CAN_T_RENAME_STATION :{WHITE}Kann die Station nicht umbenennen...
+STR_3031_CAN_T_RENAME_STATION :{WHITE}Station kann nicht umbenannt werden...
STR_3032_RATINGS :{BLACK}Einschätzung
STR_3033_ACCEPTS :{BLACK}Akzeptiert
STR_3034_LOCAL_RATING_OF_TRANSPORT :{BLACK}Örtliche Bewertung der Transportunternehmen:
@@ -1846,16 +1834,16 @@
STR_303D :{WHITE}{STRING}: {YELLOW}{STRING} ({COMMA}%)
STR_303E_NO_LONGER_ACCEPTS :{WHITE}{STATION} akzeptiert keine {STRING} mehr
-STR_303F_NO_LONGER_ACCEPTS_OR :{WHITE}{STATION} akzeptiert keine {STRING} oder {STRING} mehr
-STR_3040_NOW_ACCEPTS :{WHITE}{STATION} akzeptiert jetzt {STRING}
-STR_3041_NOW_ACCEPTS_AND :{WHITE}{STATION} akzeptiert jetzt {STRING} und {STRING}
+STR_303F_NO_LONGER_ACCEPTS_OR :{WHITE}{STATION} akzeptiert keine {STRING} und keine {STRING} mehr
+STR_3040_NOW_ACCEPTS :{WHITE}{STATION} akzeptiert jetzt auch {STRING}
+STR_3041_NOW_ACCEPTS_AND :{WHITE}{STATION} akzeptiert jetzt auch {STRING} und {STRING}
STR_3042_BUS_STATION_ORIENTATION :{WHITE}Busbahnhof-Ausr.
STR_3043_TRUCK_STATION_ORIENT :{WHITE}Lkw-Ladeplatz-Ausr.
-STR_3042_PASSENGER_TRAM_STATION_ORIENTATION :{WHITE}Ausrichtung der Haltestelle
+STR_3042_PASSENGER_TRAM_STATION_ORIENTATION :{WHITE}Ausrichtung der Straßenbahnhaltestelle
STR_3043_CARGO_TRAM_STATION_ORIENT :{WHITE}Ausrichtung der Güterverladestelle
STR_3046_MUST_DEMOLISH_BUS_STATION :{WHITE}Der Busbahnhof muss erst abgerissen werden
STR_3047_MUST_DEMOLISH_TRUCK_STATION :{WHITE}Der Lkw-Ladeplatz muss erst abgerissen werden
-STR_3046_MUST_DEMOLISH_PASSENGER_TRAM_STATION :{WHITE}Haltestelle muss vorher abgerissen werden
+STR_3046_MUST_DEMOLISH_PASSENGER_TRAM_STATION :{WHITE}Straßenbahnhaltestelle muss vorher abgerissen werden
STR_3047_MUST_DEMOLISH_CARGO_TRAM_STATION :{WHITE}Güterverladestelle muss vorher abgerissen werden
STR_3048_STATIONS :{WHITE}{COMPANY} - {COMMA} Haltestelle{P "" n}
STR_3049_0 :{YELLOW}{STATION} {STATIONFEATURES}
@@ -1868,9 +1856,9 @@
STR_3050_SELECT_LENGTH_OF_RAILROAD :{BLACK}Bahnsteiglänge wählen
STR_3051_SELECT_BUS_STATION_ORIENTATION :{BLACK}Busbahnhofsausrichtung wählen
STR_3052_SELECT_TRUCK_LOADING_BAY :{BLACK}Ladeplatzausrichtung wählen
-STR_3051_SELECT_PASSENGER_TRAM_STATION_ORIENTATION :{BLACK}Ausrichtung für die Haltestelle wählen
+STR_3051_SELECT_PASSENGER_TRAM_STATION_ORIENTATION :{BLACK}Ausrichtung für die Straßenbahnhaltestelle wählen
STR_3052_SELECT_CARGO_TRAM_STATION_ORIENTATION :{BLACK}Ausrichtung für die Güterverladestelle wählen
-STR_3053_CENTER_MAIN_VIEW_ON_STATION :{BLACK}Ansicht auf die Station zentrieren
+STR_3053_CENTER_MAIN_VIEW_ON_STATION :{BLACK}Hauptansicht zur Station scrollen
STR_3054_SHOW_STATION_RATINGS :{BLACK}Stationsbewertung anzeigen
STR_3055_CHANGE_NAME_OF_STATION :{BLACK}Name der Station ändern
STR_3056_SHOW_LIST_OF_ACCEPTED_CARGO :{BLACK}Zeige Liste der akzeptierten Frachten
@@ -1884,9 +1872,9 @@
STR_3061_TRUCK_LOADING_AREA :Lkw-Ladeplatz
STR_3062_BUS_STATION :Busbahnhof
STR_3063_SHIP_DOCK :Schiffshafen
-STR_3064_HIGHLIGHT_COVERAGE_AREA :{BLACK}Einzugsgebiet angezeigen
+STR_3064_HIGHLIGHT_COVERAGE_AREA :{BLACK}Einzugsgebiet anzeigen
STR_3065_DON_T_HIGHLIGHT_COVERAGE :{BLACK}Einzugsgebiet nicht angezeigen
-STR_3066_COVERAGE_AREA_HIGHLIGHT :{BLACK}Zeige Einzugsgebiet
+STR_3066_COVERAGE_AREA_HIGHLIGHT :{BLACK}Einzugsgebiet anzeigen
STR_3068_DOCK :{WHITE}Hafen
STR_3069_BUOY :Boje
STR_306A_BUOY_IN_THE_WAY :{WHITE}...Boje ist im Weg
@@ -1901,13 +1889,13 @@
##id 0x3800
STR_3800_SHIP_DEPOT_ORIENTATION :{WHITE}Werftausrichtung
STR_3801_MUST_BE_BUILT_ON_WATER :{WHITE}...muss auf Wasser gebaut werden
-STR_3802_CAN_T_BUILD_SHIP_DEPOT :{WHITE}Kann hier keine Werft bauen...
+STR_3802_CAN_T_BUILD_SHIP_DEPOT :{WHITE}Werft kann hier nicht gebaut werden...
STR_3803_SELECT_SHIP_DEPOT_ORIENTATION :{BLACK}Werftausrichtung auswählen
STR_3804_WATER :Wasser
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
+STR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Kanal muss erst abgerissen werden
##id 0x4000
STR_4000_SAVE_GAME :{WHITE}Spiel speichern
@@ -1916,15 +1904,15 @@
STR_4003_DELETE :{BLACK}Löschen
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_4006_UNABLE_TO_READ_DRIVE :{BLACK}Laufwerk nicht betriebsbereit
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{}{STRING}
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :interner Fehler: {STRING}
-STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Defekte Spielstandsdatei - {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Spielstandsdatei defekt - {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_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Datei kann nicht gelesen werden
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Datei kann nicht geschrieben werden
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
@@ -1945,9 +1933,9 @@
STR_4807_OIL_RIG :{G=w}Ölbohrinsel
STR_4808_FACTORY :{G=w}Fabrik
STR_4809_PRINTING_WORKS :{G=w}Druckerei
-STR_480A_STEEL_MILL :{G=n}Stahlwerk
+STR_480A_STEEL_MILL :{G=n}Stahlwalzwerk
STR_480B_FARM :{G=m}Bauernhof
-STR_480C_COPPER_ORE_MINE :{G=w}Kupfermine
+STR_480C_COPPER_ORE_MINE :{G=n}Kupfererzbergwerk
STR_480D_OIL_WELLS :{G=w}Ölquellen
STR_480E_BANK :{G=w}Bank
STR_480F_FOOD_PROCESSING_PLANT :{G=w}Nahrungsmittelfabrik
@@ -1955,7 +1943,7 @@
STR_4811_GOLD_MINE :{G=w}Goldmine
STR_4812_BANK :{G=w}Bank
STR_4813_DIAMOND_MINE :{G=w}Diamantenmine
-STR_4814_IRON_ORE_MINE :{G=w}Eisenerzmine
+STR_4814_IRON_ORE_MINE :{G=n}Eisenerzbergwerk
STR_4815_FRUIT_PLANTATION :{G=w}Fruchtplantage
STR_4816_RUBBER_PLANTATION :{G=w}Kautschukplantage
STR_4817_WATER_SUPPLY :{G=w}Wasserquelle
@@ -1982,7 +1970,7 @@
############ range for requires ends
############ range for produces starts
-STR_INDUSTRY_WINDOW_WAITING_FOR_PROCESSING :{BLACK}Auf Verarbeitung wartende Fracht:
+STR_INDUSTRY_WINDOW_WAITING_FOR_PROCESSING :{BLACK}Zur Verarbeitung bereitstehende Fracht:
STR_INDUSTRY_WINDOW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO}{BLACK}
STR_4827_PRODUCES :{BLACK}Produziert: {YELLOW}{STRING}
STR_4828_PRODUCES :{BLACK}Produziert: {YELLOW}{STRING}, {STRING}
@@ -1990,11 +1978,11 @@
STR_482A_PRODUCTION_LAST_MONTH :{BLACK}Produktion im letzten Monat:
STR_482B_TRANSPORTED :{YELLOW}{CARGO}{BLACK} ({COMMA}% befördert)
-STR_482C_CENTER_THE_MAIN_VIEW_ON :{BLACK}Zentriere die Ansicht auf das Industriegebiet
+STR_482C_CENTER_THE_MAIN_VIEW_ON :{BLACK}Hauptansicht zum Industriegebiet scrollen
STR_482D_NEW_UNDER_CONSTRUCTION :{BLACK}{BIGFONT}Neue{G r "" s} {STRING} wird nahe {TOWN} gebaut!
STR_482E_NEW_BEING_PLANTED_NEAR :{BLACK}{BIGFONT}Neue{G r "" s} {STRING} wird nahe {TOWN} aufgeforstet!
STR_482F_COST :{BLACK}Kosten: {YELLOW}{CURRENCY}
-STR_4830_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Kann diese Industrie hier nicht bauen...
+STR_4830_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Industrie kann hier nicht gebaut werden...
STR_4831_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}...Wald kann nur oberhalb der Schneegrenze gepflanzt werden
STR_4832_ANNOUNCES_IMMINENT_CLOSURE :{BLACK}{BIGFONT}{INDUSTRY} gibt bevorstehende Schließung bekannt!
STR_4833_SUPPLY_PROBLEMS_CAUSE_TO :{BLACK}{BIGFONT}Wegen fehlender Rohstoffe kündigt {INDUSTRY} die drohende Schließung an!
@@ -2003,21 +1991,21 @@
STR_4836_NEW_COAL_SEAM_FOUND_AT :{BLACK}{BIGFONT}Neue Kohlevorkommen bei {INDUSTRY} gefunden!{}Förderung verdoppelt!
STR_4837_NEW_OIL_RESERVES_FOUND :{BLACK}{BIGFONT}Neue Ölfunde bei {INDUSTRY}!{}Förderung wird vermutlich verdoppelt!
STR_4838_IMPROVED_FARMING_METHODS :{BLACK}{BIGFONT}Neue Getreideanbaumethoden bei {INDUSTRY} werden Erträge verdoppeln!
-STR_4839_PRODUCTION_DOWN_BY_50 :{BLACK}{BIGFONT}{INDUSTRY} Produktion sinkt um 50%
+STR_4839_PRODUCTION_DOWN_BY_50 :{BLACK}{BIGFONT}Produktion bei {INDUSTRY} sinkt um 50%
STR_483A_INSECT_INFESTATION_CAUSES :{BLACK}{BIGFONT}Insektenplage bei {INDUSTRY} verursacht Schaden!{}Produktion sinkt um 50%
-STR_483B_CAN_ONLY_BE_POSITIONED :{WHITE}...kann nur in der Nähe des Kartenrandes errichtet werden
-STR_INDUSTRY_PROD_GOUP :{BLACK}{BIGFONT}{STRING}produktion bei {INDUSTRY} erhöht sich um {COMMA}%!
-STR_INDUSTRY_PROD_GODOWN :{BLACK}{BIGFONT}{STRING}produktion bei {INDUSTRY} verringert sich um {COMMA}%!
+STR_483B_CAN_ONLY_BE_POSITIONED :{WHITE}...kann nur in der Nähe des Spielfeldrandes errichtet werden
+STR_INDUSTRY_PROD_GOUP :{BLACK}{BIGFONT}{STRING}produktion von {INDUSTRY} erhöht sich um {COMMA}%!
+STR_INDUSTRY_PROD_GODOWN :{BLACK}{BIGFONT}{STRING}produktion von {INDUSTRY} verringert sich um {COMMA}%!
##id 0x5000
STR_5000_TRAIN_IN_TUNNEL :{WHITE}Zug im Tunnel
STR_5001_ROAD_VEHICLE_IN_TUNNEL :{WHITE}Fahrzeug im Tunnel
STR_5003_ANOTHER_TUNNEL_IN_THE_WAY :{WHITE}Ein anderer Tunnel ist im Weg
-STR_5005_UNABLE_TO_EXCAVATE_LAND :{WHITE}Kann das Land am anderen Ende des Tunnels nicht anheben
+STR_5005_UNABLE_TO_EXCAVATE_LAND :{WHITE}Land kann am anderen Ende des Tunnels nicht angehoben werden
STR_5006_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Der Tunnel muss zuerst abgerissen werden
STR_5007_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Die Brücke muss erst abgerissen werden
STR_5008_CANNOT_START_AND_END_ON :{WHITE}Anfang und Ende können nicht im selben Feld liegen
-STR_5009_LEVEL_LAND_OR_WATER_REQUIRED :{WHITE}Ebenes Land oder Wasser muss unter der Brücke sein
+STR_5009_LEVEL_LAND_OR_WATER_REQUIRED :{WHITE}Unter der Brücke ist ebenes Land oder Wasser erforderlich
STR_500A_START_AND_END_MUST_BE_IN :{WHITE}Anfang und Ende müssen auf einer Ebene liegen
STR_500B_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}Platz ist nicht für einen Tunnel geeignet
STR_500D :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY}
@@ -2029,8 +2017,8 @@
STR_5013_CONCRETE :Betonbrücke
STR_5014_TUBULAR_STEEL :Rundstahlbrücke
STR_BRIDGE_TUBULAR_SILICON :Siliziumrundbrücke
-STR_5015_CAN_T_BUILD_BRIDGE_HERE :{WHITE}Kann die Brücke hier nicht bauen...
-STR_5016_CAN_T_BUILD_TUNNEL_HERE :{WHITE}Kann den Tunnel hier nicht bauen...
+STR_5015_CAN_T_BUILD_BRIDGE_HERE :{WHITE}Brücke kann hier nicht gebaut werden...
+STR_5016_CAN_T_BUILD_TUNNEL_HERE :{WHITE}Tunnel kann hier nicht gebaut werden...
STR_5017_RAILROAD_TUNNEL :Eisenbahntunnel
STR_5018_ROAD_TUNNEL :Straßentunnel
STR_501B_STEEL_SUSPENSION_RAIL_BRIDGE :Stahlhängebrücke
@@ -2079,7 +2067,7 @@
STR_SV_STNAME_HALT :{STRING} Halt
STR_SV_STNAME_VALLEY :{STRING} Tal
STR_SV_STNAME_HEIGHTS :{STRING} Höhe
-STR_SV_STNAME_WOODS :{STRING} Wald
+STR_SV_STNAME_WOODS :{STRING} Waldfrieden
STR_SV_STNAME_LAKESIDE :{STRING} Seeblick
STR_SV_STNAME_EXCHANGE :{STRING} Zentrum
STR_SV_STNAME_AIRPORT :{STRING} Flughafen
@@ -2114,7 +2102,7 @@
STR_6801_EASY :{BLACK}Leicht
STR_6802_MEDIUM :{BLACK}Normal
STR_6803_HARD :{BLACK}Schwer
-STR_6804_CUSTOM :{BLACK}Individuell
+STR_6804_CUSTOM :{BLACK}Benutzerdefiniert
############ range for difficulty levels ends
############ range for difficulty settings starts
@@ -2222,12 +2210,12 @@
STR_7027_LOAN :{WHITE}Kredit
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_7029_BORROW :{BLACK}{SKIP}{SKIP}{CURRENCY} leihen
+STR_702A_REPAY :{BLACK}{SKIP}{SKIP}{CURRENCY} zurückzahlen
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_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Weitere Kreditaufnahme nicht möglich ...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}...Kredit bereits zurückgezahlt
-STR_702E_REQUIRED :{WHITE}...{CURRENCY} benötigt
+STR_702E_REQUIRED :{WHITE}...erfordert {CURRENCY}
STR_702F_CAN_T_REPAY_LOAN :{WHITE}Kredit kann nicht getilgt werden...
STR_INSUFFICIENT_FUNDS :{WHITE}Von der Bank geliehenes Geld kann nicht abgegeben werden...
STR_7030_SELECT_NEW_FACE_FOR_PRESIDENT :{BLACK}Neues Profil für Manager aussuchen
@@ -2274,7 +2262,7 @@
STR_705D_HAS_BEEN_CLOSED_DOWN_BY :{BLACK}{BIGFONT}{COMPANY} ist von den Gläubigern geschlossen worden, alles Vermögen wurde veräussert!
STR_705E_NEW_TRANSPORT_COMPANY_LAUNCHED :{BLACK}{BIGFONT}Neue Transportfirma gegründet!
STR_705F_STARTS_CONSTRUCTION_NEAR :{BLACK}{BIGFONT}{COMPANY} startet bei {TOWN}!
-STR_7060_CAN_T_BUY_COMPANY :{WHITE}Kann die Firma nicht kaufen...
+STR_7060_CAN_T_BUY_COMPANY :{WHITE}Firmenkauf nicht möglich...
STR_7061_CARGO_PAYMENT_RATES :{WHITE}Frachtbeförderungspreise
STR_7062_DAYS_IN_TRANSIT :{BLACK}{TINYFONT}Tage unterwegs
STR_7063_PAYMENT_FOR_DELIVERING :{BLACK}{TINYFONT}Zahlung für 10 gelieferte Einheiten (oder 10.000 Liter) Fracht über eine Strecke von 20 Feldern
@@ -2292,28 +2280,28 @@
STR_706F_BUILD_HQ :{BLACK}Firmensitz bauen
STR_7070_BUILD_COMPANY_HEADQUARTERS :{BLACK}Firmensitz bauen / anzeigen
STR_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Errichte Firmensitz für 1% des Firmenwertes an anderer Stelle neu.
-STR_7071_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Kann keinen Firmensitz bauen ...
-STR_7072_VIEW_HQ :{BLACK}Zeige Firmensitz
+STR_7071_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Firmensitz kann nicht gebaut werden ...
+STR_7072_VIEW_HQ :{BLACK}Firmensitz anzeigen
STR_RELOCATE_HQ :{BLACK}Firmensitz verlegen
STR_COMPANY_PASSWORD :{BLACK}Passwort
-STR_COMPANY_PASSWORD_TOOLTIP :{BLACK}Schütze deine Firma mit einem Passwort, um unautorisierten Spielern den Beitritt zu verwehren.
+STR_COMPANY_PASSWORD_TOOLTIP :{BLACK}Sie können Ihre Firma mit einem Passwort schützen, sodass nur ausgewählte Spieler beitreten können.
STR_SET_COMPANY_PASSWORD :Firmenpasswort setzen
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}{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
-STR_707A_SELL_25_SHARE_IN_THIS_COMPANY :{BLACK}Verkaufe 25% Anteil an dieser Firma
-STR_707B_CAN_T_BUY_25_SHARE_IN_THIS :{WHITE}Kann 25% Anteil an dieser Firma nicht kaufen...
-STR_707C_CAN_T_SELL_25_SHARE_IN :{WHITE}Kann 25% Anteil an dieser Firma nicht verkaufen...
+STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}25% der Aktien der Firma kaufen
+STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}25% der Aktien der Firma verkaufen
+STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}25% der Aktien dieser Firma kaufen
+STR_707A_SELL_25_SHARE_IN_THIS_COMPANY :{BLACK}25% der Aktien dieser Firma verkaufen
+STR_707B_CAN_T_BUY_25_SHARE_IN_THIS :{WHITE}Kauf von 25% der Aktien dieser Firma nicht möglich...
+STR_707C_CAN_T_SELL_25_SHARE_IN :{WHITE}Verkauf von 25% der Aktien dieser Firma nicht möglich...
STR_707D_OWNED_BY :{WHITE}({COMMA}% Eigentum von {COMPANY})
STR_707E_OWNED_BY_OWNED_BY :{WHITE}({COMMA}% Eigentum von {COMPANY}{} {COMMA}% Eigentum von {COMPANY})
STR_707F_HAS_BEEN_TAKEN_OVER_BY :{BLACK}{BIGFONT}{COMPANY} wurde von {COMPANY} übernommen!
-STR_7080_PROTECTED :{WHITE}Dieses Unternehmen handelt noch nicht mit Anteilen...
+STR_7080_PROTECTED :{WHITE}Dieses Unternehmen ist noch nicht an der Börse...
-STR_LIVERY_DEFAULT :Standard Lackierung
+STR_LIVERY_DEFAULT :Standardlackierung
STR_LIVERY_STEAM :Dampflok
STR_LIVERY_DIESEL :Diesellok
STR_LIVERY_ELECTRIC :E-Lok
@@ -2324,7 +2312,7 @@
STR_LIVERY_PASSENGER_WAGON_STEAM :Passagierwagen (Dampf)
STR_LIVERY_PASSENGER_WAGON_DIESEL :Passagierwagen (Diesel)
STR_LIVERY_PASSENGER_WAGON_ELECTRIC :Passagierwagen (elektrisch)
-STR_LIVERY_FREIGHT_WAGON :Güterwagen
+STR_LIVERY_FREIGHT_WAGON :Güterwaggon
STR_LIVERY_BUS :Bus
STR_LIVERY_TRUCK :Lastwagen
STR_LIVERY_PASSENGER_SHIP :Passagierfähre
@@ -2372,26 +2360,26 @@
STR_8018_SH_40_ELECTRIC :SH '40' (Elektrisch)
STR_8019_T_I_M_ELECTRIC :'T.I.M.' (Elektrisch)
STR_801A_ASIASTAR_ELECTRIC :'AsiaStar' (Elektrisch)
-STR_801B_PASSENGER_CAR :Passagierwagen
-STR_801C_MAIL_VAN :Postwagen
-STR_801D_COAL_CAR :Kohlenwagen
+STR_801B_PASSENGER_CAR :Passagierwaggon
+STR_801C_MAIL_VAN :Postwaggon
+STR_801D_COAL_CAR :Kohlenwaggon
STR_801E_OIL_TANKER :Öltanker
STR_801F_LIVESTOCK_VAN :Viehtransporter
-STR_8020_GOODS_VAN :Güterwagen
+STR_8020_GOODS_VAN :Güterwaggon
STR_8021_GRAIN_HOPPER :Getreidetransporter
-STR_8022_WOOD_TRUCK :Holzwagen
-STR_8023_IRON_ORE_HOPPER :Eisenerzwagen
+STR_8022_WOOD_TRUCK :Holzwaggon
+STR_8023_IRON_ORE_HOPPER :Eisenerzwaggon
STR_8024_STEEL_TRUCK :Stahltransporter
STR_8025_ARMORED_VAN :Sicherheitstransporter
STR_8026_FOOD_VAN :Lebensmitteltransporter
STR_8027_PAPER_TRUCK :Papiertransporter
-STR_8028_COPPER_ORE_HOPPER :Kupfererzwagen
+STR_8028_COPPER_ORE_HOPPER :Kupfererzwaggon
STR_8029_WATER_TANKER :Wassertanker
STR_802A_FRUIT_TRUCK :Fruchttransporter
-STR_802B_RUBBER_TRUCK :Kautschukwagen
+STR_802B_RUBBER_TRUCK :Kautschukwaggon
STR_802C_SUGAR_TRUCK :Zuckerlaster
-STR_802D_COTTON_CANDY_HOPPER :Zuckerwattewagen
-STR_802E_TOFFEE_HOPPER :Karamellwagen
+STR_802D_COTTON_CANDY_HOPPER :Zuckerwattewaggon
+STR_802E_TOFFEE_HOPPER :Karamellwaggon
STR_802F_BUBBLE_VAN :Luftblasentransporter
STR_8030_COLA_TANKER :Colatanker
STR_8031_CANDY_VAN :Bonbontransporter
@@ -2402,25 +2390,25 @@
STR_8036_X2001_ELECTRIC :'X2001' (Elektrisch)
STR_8037_MILLENNIUM_Z1_ELECTRIC :'Millennium Z1' (Elektrisch)
STR_8038_WIZZOWOW_Z99 :Wizzowow Z99
-STR_8039_PASSENGER_CAR :Passagierwagen
-STR_803A_MAIL_VAN :Postwagen
-STR_803B_COAL_CAR :Kohlewagen
+STR_8039_PASSENGER_CAR :Passagierwaggon
+STR_803A_MAIL_VAN :Postwaggon
+STR_803B_COAL_CAR :Kohlewaggon
STR_803C_OIL_TANKER :Öltanker
STR_803D_LIVESTOCK_VAN :Viehtransporter
-STR_803E_GOODS_VAN :Güterwagen
-STR_803F_GRAIN_HOPPER :Getreidewagen
-STR_8040_WOOD_TRUCK :Holzwagen
-STR_8041_IRON_ORE_HOPPER :Eisenerzwagen
+STR_803E_GOODS_VAN :Güterwaggon
+STR_803F_GRAIN_HOPPER :Getreidewaggon
+STR_8040_WOOD_TRUCK :Holzwaggon
+STR_8041_IRON_ORE_HOPPER :Eisenerzwaggon
STR_8042_STEEL_TRUCK :Stahltransporter
STR_8043_ARMORED_VAN :Sicherheitstransporter
STR_8044_FOOD_VAN :Lebensmitteltransporter
STR_8045_PAPER_TRUCK :Papiertransporter
-STR_8046_COPPER_ORE_HOPPER :Kupfererzwagen
+STR_8046_COPPER_ORE_HOPPER :Kupfererzwaggon
STR_8047_WATER_TANKER :Wassertanker
STR_8048_FRUIT_TRUCK :Fruchttransporter
STR_8049_RUBBER_TRUCK :Kautschuktransporter
STR_804A_SUGAR_TRUCK :Zuckertransporter
-STR_804B_COTTON_CANDY_HOPPER :Zuckerwattewagen
+STR_804B_COTTON_CANDY_HOPPER :Zuckerwattewaggon
STR_804C_TOFFEE_HOPPER :Karamelltransporter
STR_804D_BUBBLE_VAN :Luftblasentransporter
STR_804E_COLA_TANKER :Colatransporter
@@ -2428,31 +2416,31 @@
STR_8050_TOY_VAN :Spielwarentransporter
STR_8051_BATTERY_TRUCK :Batterietransporter
STR_8052_FIZZY_DRINK_TRUCK :Limonadetransporter
-STR_8053_PLASTIC_TRUCK :Plastikwagen
-STR_8054_LEV1_LEVIATHAN_ELECTRIC :Lev1 'Leviathan' (Elektrisch)
-STR_8055_LEV2_CYCLOPS_ELECTRIC :Lev2 'Cyclops' (Elektrisch)
-STR_8056_LEV3_PEGASUS_ELECTRIC :Lev3 'Pegasus' (Elektrisch)
-STR_8057_LEV4_CHIMAERA_ELECTRIC :Lev4 'Chimaera' (Elektrisch)
+STR_8053_PLASTIC_TRUCK :Plastikwaggon
+STR_8054_LEV1_LEVIATHAN_ELECTRIC :Lev1 'Leviathan' (elektrisch)
+STR_8055_LEV2_CYCLOPS_ELECTRIC :Lev2 'Cyclops' (elektrisch)
+STR_8056_LEV3_PEGASUS_ELECTRIC :Lev3 'Pegasus' (elektrisch)
+STR_8057_LEV4_CHIMAERA_ELECTRIC :Lev4 'Chimaera' (elektrisch)
STR_8058_WIZZOWOW_ROCKETEER :Wizzowow Rocketeer
-STR_8059_PASSENGER_CAR :Passagierwagen
-STR_805A_MAIL_VAN :Postwagen
-STR_805B_COAL_CAR :Kohlewagen
+STR_8059_PASSENGER_CAR :Passagierwaggon
+STR_805A_MAIL_VAN :Postwaggon
+STR_805B_COAL_CAR :Kohlewaggon
STR_805C_OIL_TANKER :Öltanker
STR_805D_LIVESTOCK_VAN :Viehtransporter
-STR_805E_GOODS_VAN :Warenwagen
+STR_805E_GOODS_VAN :Warenwaggon
STR_805F_GRAIN_HOPPER :Getreidetransporter
-STR_8060_WOOD_TRUCK :Holzwagen
-STR_8061_IRON_ORE_HOPPER :Eisenerzwagen
+STR_8060_WOOD_TRUCK :Holzwaggon
+STR_8061_IRON_ORE_HOPPER :Eisenerzwaggon
STR_8062_STEEL_TRUCK :Stahltransporter
STR_8063_ARMORED_VAN :Sicherheitstransporter
STR_8064_FOOD_VAN :Lebensmitteltransporter
STR_8065_PAPER_TRUCK :Papiertransporter
-STR_8066_COPPER_ORE_HOPPER :Kupfererzwagen
+STR_8066_COPPER_ORE_HOPPER :Kupfererzwaggon
STR_8067_WATER_TANKER :Wassertanker
STR_8068_FRUIT_TRUCK :Fruchttransporter
-STR_8069_RUBBER_TRUCK :Kautschukwagen
+STR_8069_RUBBER_TRUCK :Kautschukwaggon
STR_806A_SUGAR_TRUCK :Zuckertransporter
-STR_806B_COTTON_CANDY_HOPPER :Zuckerwattewagen
+STR_806B_COTTON_CANDY_HOPPER :Zuckerwattewaggon
STR_806C_TOFFEE_HOPPER :Karamelltransporter
STR_806D_BUBBLE_VAN :Luftblasentransporter
STR_806E_COLA_TANKER :Colatransporter
@@ -2460,7 +2448,7 @@
STR_8070_TOY_VAN :Spielwarentransporter
STR_8071_BATTERY_TRUCK :Batterielaster
STR_8072_FIZZY_DRINK_TRUCK :Limonadetransporter
-STR_8073_PLASTIC_TRUCK :Plastikwagen
+STR_8073_PLASTIC_TRUCK :Plastikwaggon
STR_8074_MPS_REGAL_BUS :MPS Regal Bus
STR_8075_HEREFORD_LEOPARD_BUS :Hereford Leopard Bus
STR_8076_FOSTER_BUS :Foster Bus
@@ -2612,7 +2600,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_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Die Einwohner feiern . . .{}Der erste Zug erreicht {STATION}!
STR_8802_DETAILS :{WHITE}{VEHICLE} (Details)
STR_8803_TRAIN_IN_THE_WAY :{WHITE}Zug ist im Weg
STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2635,9 +2623,9 @@
STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :Wartung (ohne Halt) bei {TOWN} Zugdepot
STR_TIMETABLE_GO_TO :{STRING} {STRING}
-STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Fahre (ohne Fahrplan)
-STR_TIMETABLE_TRAVEL_FOR :Fahre für {STRING}
-STR_TIMETABLE_STAY_FOR :und bleibe für {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Fahren (ohne Fahrplan)
+STR_TIMETABLE_TRAVEL_FOR :{STRING} lang fahren
+STR_TIMETABLE_STAY_FOR :und {STRING} lang bleiben
STR_TIMETABLE_DAYS :{COMMA} Tag{P "" e}
STR_TIMETABLE_TICKS :{COMMA} Tick{P "" s}
@@ -2673,56 +2661,56 @@
STR_CLONE_TRAIN_INFO :{BLACK}Baut eine Kopie des Zuges mit allen Waggons. Strg+Klick erzeugt gemeinsamen Fahrplan
STR_CLONE_TRAIN_DEPOT_INFO :{BLACK}Baut eine Kopie des Zuges mit allen Waggons. Klicke diese Schaltfläche und dann auf einen Zug innerhalb oder außerhalb des Depots. Strg+Klick erzeugt gemeinsamen Fahrplan
STR_8820_RENAME :{BLACK}Umbenennen
-STR_8823_SKIP :{BLACK}Übergehen
+STR_8823_SKIP :{BLACK}Überspringen
STR_8824_DELETE :{BLACK}Löschen
STR_8825_NON_STOP :{BLACK}ohne Halt
STR_8826_GO_TO :{BLACK}Nach
STR_8827_FULL_LOAD :{BLACK}Beladen
STR_8828_UNLOAD :{BLACK}Entladen
-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_REFIT :{BLACK}Umrüsten
+STR_REFIT_TIP :{BLACK}Frachtart auswählen, auf die umgerüstet werden soll. Strg+Klick, um einen Umrüstungsauftrag wieder zu entfernen
+STR_REFIT_ORDER :(umrüsten auf {STRING})
STR_TIMETABLE_VIEW :{BLACK}Fahrplan
-STR_TIMETABLE_VIEW_TOOLTIP :{BLACK}Gehe zur Fahrplanansicht
+STR_TIMETABLE_VIEW_TOOLTIP :{BLACK}Zur Fahrplanansicht wechseln
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_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}Schienenfahrzeug kann nicht gebaut werden...
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
-STR_8830_CAN_T_SEND_TRAIN_TO_DEPOT :{WHITE}Kann den Zug nicht ins Depot schicken...
+STR_8830_CAN_T_SEND_TRAIN_TO_DEPOT :{WHITE}Zug kann nicht ins Depot geschickt werden...
STR_8831_NO_MORE_SPACE_FOR_ORDERS :{WHITE}Kein Platz für weitere Aufträge
STR_8832_TOO_MANY_ORDERS :{WHITE}Zu viele Aufträge
-STR_8833_CAN_T_INSERT_NEW_ORDER :{WHITE}Kann keinen neuen Auftrag hinzufügen...
-STR_8834_CAN_T_DELETE_THIS_ORDER :{WHITE}Kann den Auftrag nicht löschen...
-STR_8835_CAN_T_MODIFY_THIS_ORDER :{WHITE}Kann den Auftrag nicht bearbeiten...
-STR_CAN_T_MOVE_THIS_ORDER :{WHITE}Kann diesen Auftrag nicht verschieben...
-STR_CAN_T_SKIP_ORDER :{WHITE}Kann diesen Auftrag nicht auslassen...
-STR_CAN_T_SKIP_TO_ORDER :{WHITE}Kann nicht zum gewählten Auftrag wechseln...
-STR_8837_CAN_T_MOVE_VEHICLE :{WHITE}Kann das Fahrzeug nicht bewegen...
+STR_8833_CAN_T_INSERT_NEW_ORDER :{WHITE}Neuer Auftrag kann nicht hinzugefügt werden...
+STR_8834_CAN_T_DELETE_THIS_ORDER :{WHITE}Auftrag kann nicht gelöscht werden...
+STR_8835_CAN_T_MODIFY_THIS_ORDER :{WHITE}Auftrag kann nicht bearbeitet werden...
+STR_CAN_T_MOVE_THIS_ORDER :{WHITE}Auftrag kann nicht verschoben werden...
+STR_CAN_T_SKIP_ORDER :{WHITE}Auftrag kann nicht ausgelassen werden...
+STR_CAN_T_SKIP_TO_ORDER :{WHITE}Wechseln zum ausgewählten Auftrag nicht möglich...
+STR_8837_CAN_T_MOVE_VEHICLE :{WHITE}Fahrzeug kann nicht bewegt werden...
STR_REAR_ENGINE_FOLLOW_FRONT_ERROR :{WHITE}Hintere Lok folgt immer der vorderen Lok
STR_8838_N_A :k.A.{SKIP}
-STR_8839_CAN_T_SELL_RAILROAD_VEHICLE :{WHITE}Kann Schienenfahrzeug nicht verkaufen...
-STR_883A_UNABLE_TO_FIND_ROUTE_TO :{WHITE}Kann keinen weg zum Depot finden
-STR_883B_CAN_T_STOP_START_TRAIN :{WHITE}Kann den Zug nicht anhalten/starten ...
+STR_8839_CAN_T_SELL_RAILROAD_VEHICLE :{WHITE}Schienenfahrzeug kann nicht verkauft werden...
+STR_883A_UNABLE_TO_FIND_ROUTE_TO :{WHITE}Weg zum Depot kann nicht gefunden werden
+STR_883B_CAN_T_STOP_START_TRAIN :{WHITE}Zug kann nicht angehalten/losgeschickt werden ...
STR_883C_SERVICING_INTERVAL_DAYS :{BLACK}Wartungsintervall: {LTBLUE}{COMMA}Tage {BLACK} Letzte Wartung: {LTBLUE}{DATE_LONG}
STR_SERVICING_INTERVAL_PERCENT :{BLACK}Wartungsintervall: {LTBLUE}{COMMA}%{BLACK} Letzte Wartung: {LTBLUE}{DATE_LONG}
STR_883D_TRAINS_CLICK_ON_TRAIN_FOR :{BLACK}Züge - für Einzelheiten auf den jeweiligen Zug klicken
STR_883E_BUILD_NEW_TRAINS_REQUIRES :{BLACK}Neue Züge bauen (setzt Zugdepot voraus)
STR_883F_TRAINS_CLICK_ON_TRAIN_FOR :{BLACK}Züge - für Einzelheiten auf den Zug klicken; Waggon ziehen, um ihn an-/abzukoppeln
-STR_8840_BUILD_NEW_TRAIN_VEHICLE :{BLACK}Baue neues Schienenfahrzeug
+STR_8840_BUILD_NEW_TRAIN_VEHICLE :{BLACK}Neues Schienenfahrzeug bauen
STR_8841_DRAG_TRAIN_VEHICLE_TO_HERE :{BLACK}Schienenfahrzeug hierher ziehen, um es zu verkaufen
-STR_8842_CENTER_MAIN_VIEW_ON_TRAIN :{BLACK}Ansicht auf das Zugdepot zentrieren
+STR_8842_CENTER_MAIN_VIEW_ON_TRAIN :{BLACK}Hauptansicht zum Zugdepot scrollen
STR_8843_TRAIN_VEHICLE_SELECTION :{BLACK}Zugfahrzeugliste - Einzelheiten durch Anklicken des Fahrzeuges
-STR_8844_BUILD_THE_HIGHLIGHTED_TRAIN :{BLACK}Baue das angewählte Fahrzeug
+STR_8844_BUILD_THE_HIGHLIGHTED_TRAIN :{BLACK}Angewähltes Fahrzeug bauen
STR_8845_RENAME_TRAIN_VEHICLE_TYPE :{BLACK}Umbenennen der Waggontypen
STR_8846_CURRENT_TRAIN_ACTION_CLICK :{BLACK}Laufende Zugbewegung - Klicke hier, um den Zug anzuhalten / zu starten
STR_8847_SHOW_TRAIN_S_ORDERS :{BLACK}Anzeige der Zugaufträge
-STR_8848_CENTER_MAIN_VIEW_ON_TRAIN :{BLACK}Ansicht auf den Zug zentrieren
+STR_8848_CENTER_MAIN_VIEW_ON_TRAIN :{BLACK}Hauptansicht zum Zug scrollen
STR_8849_SEND_TRAIN_TO_DEPOT :{BLACK}Zug ins Depot schicken
STR_884A_FORCE_TRAIN_TO_PROCEED :{BLACK}Zug zur Weiterfahrt zwingen, ohne das Signal zu beachten
STR_884B_REVERSE_DIRECTION_OF_TRAIN :{BLACK}Zug umkehren
@@ -2734,30 +2722,30 @@
STR_8851_SHOW_CAPACITIES_OF_EACH :{BLACK}Zeige Kapazität jedes Fahrzeugs
STR_8852_SHOW_TOTAL_CARGO :{BLACK}Frachtübersicht des Zuges anzeigen, aufgeteilt nach Frachttyp
STR_8852_ORDERS_LIST_CLICK_ON_ORDER :{BLACK}Auftragsliste - zum Markieren hier anklicken
-STR_8853_SKIP_THE_CURRENT_ORDER :{BLACK}Den aktuellen Auftrag auslassen und den Nächsten starten. STRG + Klick geht zum ausgewählten Auftrag
+STR_8853_SKIP_THE_CURRENT_ORDER :{BLACK}Übergehe den laufenden Auftrag, und starte den nächsten
STR_8854_DELETE_THE_HIGHLIGHTED :{BLACK}Lösche den markierten Auftrag
STR_8855_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Führe den markierten Auftrag ohne Halt durch
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_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Zeitrahmen für den markierten Auftrag ändern
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Zeitrahmen für den markierten Auftrag löschen
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Verspätungsmelder zurücksetzen (das Fahrzeug gilt dann als 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_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER :{BLACK}Kosten: {CURRENCY} Gewicht: {WEIGHT_S}{}Geschwindigk.: {VELOCITY} Leistung: {POWER}{}Betriebskosten: {CURRENCY} pro Jahr{}Kapazität: {CARGO}
STR_885C_BROKEN_DOWN :{RED}Panne
-STR_885D_AGE_RUNNING_COST_YR :{BLACK}Alter: {LTBLUE}{STRING}{BLACK} Betriebskosten: {LTBLUE}{CURRENCY}/Jahr
+STR_885D_AGE_RUNNING_COST_YR :{BLACK}Alter: {LTBLUE}{STRING}{BLACK} Betriebskosten: {LTBLUE}{CURRENCY} pro Jahr
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Gewicht: {LTBLUE}{WEIGHT_S} {BLACK}Leistung: {LTBLUE}{POWER}{BLACK} Höchstgeschwindigk.: {LTBLUE}{VELOCITY}
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Gewicht: {LTBLUE}{WEIGHT_S} {BLACK}Leistung: {LTBLUE}{POWER}{BLACK} Höchstgeschw.: {LTBLUE}{VELOCITY} {BLACK}Max. Zugkraft: {LTBLUE}{FORCE}
-STR_885F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Profit lfd. Jahr: {LTBLUE}{CURRENCY} (letztes Jahr: {CURRENCY})
+STR_885F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Gewinn lfd. Jahr: {LTBLUE}{CURRENCY} (vergangenes Jahr: {CURRENCY})
STR_8860_RELIABILITY_BREAKDOWNS :{BLACK}Zuverlässigkeit: {LTBLUE}{COMMA}% {BLACK}Ausfälle seit letzter Wartung: {LTBLUE}{COMMA}
STR_8861_STOPPED :{RED}Angehalten
STR_8862_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Der Zug kann das Signal nicht ohne Gefahr passieren...
STR_8863_CRASHED :{RED}Zusammenstoß!
STR_8865_NAME_TRAIN :{WHITE}Name des Zuges
-STR_8866_CAN_T_NAME_TRAIN :{WHITE}Kann den Zug nicht benennen...
+STR_8866_CAN_T_NAME_TRAIN :{WHITE}Zug kann nicht benannt werden...
STR_8867_NAME_TRAIN :{BLACK}Name des Zuges
STR_8868_TRAIN_CRASH_DIE_IN_FIREBALL :{BLACK}{BIGFONT}Zugunglück!{}{COMMA} sterben in einem Feuerball nach Zusammenstoß
STR_8869_CAN_T_REVERSE_DIRECTION :{WHITE}Die Zugbewegung kann nicht umgekehrt werden...
@@ -2766,7 +2754,7 @@
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_RESET_LATENESS :{BLACK}Verspätungszähler zurücksetzen
STR_TRAIN_STOPPING :{RED}Halte an
STR_TRAIN_STOPPING_VEL :{RED}Halte an, {VELOCITY}
@@ -2781,14 +2769,14 @@
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_CHANGE_TIME :{BLACK}Zeit ändern
STR_TIMETABLE_STATUS_ON_TIME :Das Fahrzeug ist derzeit pünktlich.
STR_TIMETABLE_STATUS_LATE :Dieses Fahrzeug hat {STRING} Verspätung
STR_TIMETABLE_STATUS_EARLY :Dieses Fahrzeug ist {STRING} zu früh
STR_TIMETABLE_TOTAL_TIME :Dieser Fahrplan benötigt {STRING}
STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :Dieser Fahrplan benötigt mindestens {STRING} (nicht alle geplant)
-STR_TIMETABLE_AUTOFILL :{BLACK}Autom. Füllung
-STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Ergänze den Fahrplan automatisch mit den Werten der ersten Fahrt
+STR_TIMETABLE_AUTOFILL :{BLACK}Autom. ausfüllen
+STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Fahrplan automatisch mit den Ergebnissen der ersten Fahrt ergänzen
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Fahrzeug ist im Weg
@@ -2797,126 +2785,126 @@
STR_9003_ROAD_VEHICLE_DEPOT :{WHITE}{TOWN} Fahrzeugdepot
STR_9004_NEW_VEHICLES :{BLACK}Neue Fahrzeuge
STR_9006_NEW_ROAD_VEHICLES :{WHITE}Neue Fahrzeuge
-STR_9007_BUILD_VEHICLE :{BLACK}Baue Fahrzeug
-STR_9009_CAN_T_BUILD_ROAD_VEHICLE :{WHITE}Kann das Fahrzeug nicht bauen...
+STR_9007_BUILD_VEHICLE :{BLACK}Fahrzeug bauen
+STR_9009_CAN_T_BUILD_ROAD_VEHICLE :{WHITE}Fahrzeug kann nicht gebaut werden...
STR_900C_DETAILS :{WHITE}{VEHICLE} (Einzelheiten)
-STR_900D_AGE_RUNNING_COST_YR :{BLACK}Alter: {LTBLUE}{STRING}{BLACK} Betriebskosten: {LTBLUE}{CURRENCY}/Jahr
+STR_900D_AGE_RUNNING_COST_YR :{BLACK}Alter: {LTBLUE}{STRING}{BLACK} Betriebskosten: {LTBLUE}{CURRENCY} pro Jahr
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_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Gewinn lfd. Jahr: {LTBLUE}{CURRENCY} (vergangenes Jahr: {CURRENCY})
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}Zuverlässigkeit: {LTBLUE}{COMMA}% {BLACK}Pannen seit letzter Wartung: {LTBLUE}{COMMA}
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...
-STR_9015_CAN_T_STOP_START_ROAD_VEHICLE :{WHITE}Kann das Fahrzeug nicht anhalten/starten...
+STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Fahrzeug kann nicht verkauft werden...
+STR_9015_CAN_T_STOP_START_ROAD_VEHICLE :{WHITE}Fahrzeug kann nicht angehalten/losgeschickt werden...
STR_9016_ROAD_VEHICLE_IS_WAITING :{WHITE}Fahrzeug {COMMA} wartet im Depot
-STR_HEADING_FOR_ROAD_DEPOT :{ORANGE}Unterwegs zu {TOWN} Fahrzeugdepot
-STR_HEADING_FOR_ROAD_DEPOT_VEL :{ORANGE}Unterwegs zu {TOWN} Fahrzeugdepot, {VELOCITY}
-STR_HEADING_FOR_ROAD_DEPOT_SERVICE :{LTBLUE}Wartung in {TOWN} Fahrzeugdepot
-STR_HEADING_FOR_ROAD_DEPOT_SERVICE_VEL :{LTBLUE}Wartung in {TOWN} Fahrzeugdepot, {VELOCITY}
-STR_9018_CAN_T_SEND_VEHICLE_TO_DEPOT :{WHITE}Kann das Fahrzeug nicht zum Depot schicken...
-STR_9019_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Kann kein Fahrzeugdepot finden
+STR_HEADING_FOR_ROAD_DEPOT :{ORANGE}Unterwegs zum Fahrzeugdepot {TOWN}
+STR_HEADING_FOR_ROAD_DEPOT_VEL :{ORANGE}Unterwegs zum Fahrzeugdepot {TOWN}, {VELOCITY}
+STR_HEADING_FOR_ROAD_DEPOT_SERVICE :{LTBLUE}Wartung im Fahrzeugdepot {TOWN}
+STR_HEADING_FOR_ROAD_DEPOT_SERVICE_VEL :{LTBLUE}Wartung im Fahrzeugdepot {TOWN}, {VELOCITY}
+STR_9018_CAN_T_SEND_VEHICLE_TO_DEPOT :{WHITE}Fahrzeug kann nicht ins Depot geschickt werden...
+STR_9019_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Fahrzeugdepot unauffindbar
STR_901A_ROAD_VEHICLES_CLICK_ON :{BLACK}Straßenfahrzeuge - für Einzelheiten auf das Fahrzeug klicken
-STR_901B_BUILD_NEW_ROAD_VEHICLES :{BLACK}Baue neues Fahrzeug (setzt Fahrzeugdepot voraus)
-STR_901C_CURRENT_VEHICLE_ACTION :{BLACK}Laufende Fahrzeugbewegung - Klicke hier, um das Fahrzeug anzuhalten / zu starten
-STR_901D_SHOW_VEHICLE_S_ORDERS :{BLACK}Zeige Aufträge für das Fahrzeug
-STR_901E_CENTER_MAIN_VIEW_ON_VEHICLE :{BLACK}Ansicht auf das Fahrzeug zentrieren
-STR_901F_SEND_VEHICLE_TO_DEPOT :{BLACK}Schicke das Fahrzeug ins Depot
+STR_901B_BUILD_NEW_ROAD_VEHICLES :{BLACK}Neues Fahrzeug bauen (erfordert ein Fahrzeugdepot)
+STR_901C_CURRENT_VEHICLE_ACTION :{BLACK}Laufende Fahrzeugbewegung - Klick zum Anhalten bzw. Losschicken
+STR_901D_SHOW_VEHICLE_S_ORDERS :{BLACK}Aufträge für das Fahrzeug anzeigen
+STR_901E_CENTER_MAIN_VIEW_ON_VEHICLE :{BLACK}Hauptansicht auf das Fahrzeug richten
+STR_901F_SEND_VEHICLE_TO_DEPOT :{BLACK}Das Fahrzeug ins Depot schicken
STR_9020_FORCE_VEHICLE_TO_TURN_AROUND :{BLACK}Das Fahrzeug zur Umkehr zwingen
-STR_9021_SHOW_ROAD_VEHICLE_DETAILS :{BLACK}Zeige Einzelheiten des Fahrzeuges
+STR_9021_SHOW_ROAD_VEHICLE_DETAILS :{BLACK}Einzelheiten des Fahrzeuges anzeigen
STR_9022_VEHICLES_CLICK_ON_VEHICLE :{BLACK}Straßenfahrzeuge - für Einzelheiten auf das Fahrzeug klicken
-STR_9023_BUILD_NEW_ROAD_VEHICLE :{BLACK}Baue neues Fahrzeug
+STR_9023_BUILD_NEW_ROAD_VEHICLE :{BLACK}Neues Fahrzeug bauen
STR_9024_DRAG_ROAD_VEHICLE_TO_HERE :{BLACK}Ziehe Fahrzeug hierher, um es zu verkaufen
-STR_9025_CENTER_MAIN_VIEW_ON_ROAD :{BLACK}Ansicht auf das Fahrzeugdepot zentrieren
+STR_9025_CENTER_MAIN_VIEW_ON_ROAD :{BLACK}Hauptansicht zum Fahrzeugdepot scrollen
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_9027_BUILD_THE_HIGHLIGHTED_ROAD :{BLACK}Ausgewähltes Fahrzeug bauen
+STR_902A_COST_SPEED_RUNNING_COST :{BLACK}Kosten: {CURRENCY}{}Geschwindigk.: {VELOCITY}{}Betriebskosten: {CURRENCY} pro 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...
+STR_902D_CAN_T_NAME_ROAD_VEHICLE :{WHITE}Fahrzeug kann nicht benannt werden...
STR_902E_NAME_ROAD_VEHICLE :{BLACK}Name des Fahrzeuges
-STR_902F_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Die Stadt feiert . . .{}Der erste Bus erreicht {STATION}!
-STR_9030_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Die Stadt feiert . . .{}Der erste Lkw erreicht {STATION}!
+STR_902F_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Die Einwohner feiern . . .{}Der erste Bus erreicht {STATION}!
+STR_9030_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Die Einwohner feiern . . .{}Der erste Lkw erreicht {STATION}!
STR_902F_CITIZENS_CELEBRATE_FIRST_TRAM :{BLACK}{BIGFONT}Die Einwohner feiern . . .{}Die erste Straßenbahn erreicht {STATION}!
STR_9030_CITIZENS_CELEBRATE_FIRST_TRAM :{BLACK}{BIGFONT}Die Einwohner feiern . . .{}Die erste Frachtstraßenbahn erreicht {STATION}!
-STR_9031_ROAD_VEHICLE_CRASH_DRIVER :{BLACK}{BIGFONT}Fahrzeug verunglückt!{}Fahrer stirbt in einem Feuerball nach Zusammenstoß mit einem Zug
-STR_9032_ROAD_VEHICLE_CRASH_DIE :{BLACK}{BIGFONT}Fahrzeug verunglückt!{}{COMMA} sterben nach Zusammenstoß mit einem Zug im Feuerball
-STR_9033_CAN_T_MAKE_VEHICLE_TURN :{WHITE}Das Fahrzeug kann nicht gewendet werden...
-STR_ONLY_TURN_SINGLE_UNIT :{WHITE}Fahrzeuge die aus mehreren Einheiten bestehen, können nicht gedreht werden.
+STR_9031_ROAD_VEHICLE_CRASH_DRIVER :{BLACK}{BIGFONT}Fahrzeug verunglückt!{}Fahrer stirbt in Inferno nach Zusammenstoß mit Zug
+STR_9032_ROAD_VEHICLE_CRASH_DIE :{BLACK}{BIGFONT}Fahrzeug verunglückt!{}{COMMA} sterben in Inferno nach Zusammenstoß mit Zug
+STR_9033_CAN_T_MAKE_VEHICLE_TURN :{WHITE}Das Fahrzeug kann nicht wenden...
+STR_ONLY_TURN_SINGLE_UNIT :{WHITE}Fahrzeuge, die aus mehreren Einheiten bestehen, können nicht wenden.
STR_9034_RENAME :{BLACK}Umbenennen
STR_9035_RENAME_ROAD_VEHICLE_TYPE :{BLACK}Fahrzeug umbenennen
STR_9036_RENAME_ROAD_VEHICLE_TYPE :{WHITE}Fahrzeug umbenennen
-STR_9037_CAN_T_RENAME_ROAD_VEHICLE :{WHITE}Kann das Fahrzeug nicht umbenennen...
-STR_9038_GO_TO_ROADVEH_DEPOT :Fahre zu {TOWN} Fahrzeugdepot
-STR_SERVICE_AT_ROADVEH_DEPOT :Wartung bei {TOWN} Fahrzeugdepot
+STR_9037_CAN_T_RENAME_ROAD_VEHICLE :{WHITE}Fahrzeug kann nicht umbenannt werden...
+STR_9038_GO_TO_ROADVEH_DEPOT :Fahre zum Fahrzeugdepot {TOWN}
+STR_SERVICE_AT_ROADVEH_DEPOT :Wartung im Fahrzeugdepot {TOWN}
-STR_REFIT_ROAD_VEHICLE_TO_CARRY :{BLACK}Straßenfahrzeug für den Transport anderer Güter ausrüsten
-STR_REFIT_ROAD_VEHICLE :{BLACK}Erneuere Straßenfahrzeug
-STR_REFIT_ROAD_VEHICLE_TO_CARRY_HIGHLIGHTED :{BLACK}Straßenfahrzeug für den Transport des markierten Gutes ausrüsten
-STR_REFIT_ROAD_VEHICLE_CAN_T :{WHITE}Kann Straßenfahrzeug nicht erneuern...
-STR_ROAD_SELECT_TYPE_OF_CARGO_FOR :{BLACK}Wähle die Frachtart aus, die vom Straßenfahrzeug transportiert werden soll
+STR_REFIT_ROAD_VEHICLE_TO_CARRY :{BLACK}Straßenfahrzeug für den Transport anderer Güter umrüsten
+STR_REFIT_ROAD_VEHICLE :{BLACK}Straßenfahrzeug erneuern
+STR_REFIT_ROAD_VEHICLE_TO_CARRY_HIGHLIGHTED :{BLACK}Straßenfahrzeug für den Transport des markierten Gutes umrüsten
+STR_REFIT_ROAD_VEHICLE_CAN_T :{WHITE}Straßenfahrzeug kann nicht umgerüstet werden...
+STR_ROAD_SELECT_TYPE_OF_CARGO_FOR :{BLACK}Wählen Sie aus, welche Fracht das Straßenfahrzeug transportieren soll
##id 0x9800
STR_9800_DOCK_CONSTRUCTION :Hafenanlage bauen
STR_9801_DOCK_CONSTRUCTION :{WHITE}Hafenanlage bauen
-STR_9802_CAN_T_BUILD_DOCK_HERE :{WHITE}Kann den Hafen hier nicht bauen...
+STR_9802_CAN_T_BUILD_DOCK_HERE :{WHITE}Hafen kann hier nicht gebaut werden...
STR_9803_SHIP_DEPOT :{WHITE}{TOWN} Werft
STR_9804_NEW_SHIPS :{BLACK}Neue Schiffe
STR_9805_SHIPS :{WHITE}{COMPANY} - {COMMA} Schiff{P "" e}
STR_9808_NEW_SHIPS :{WHITE}Neue Schiffe
-STR_9809_BUILD_SHIP :{BLACK}Baue Schiff
+STR_9809_BUILD_SHIP :{BLACK}Schiff bauen
STR_CLONE_SHIP :{BLACK}Schiff duplizieren
STR_CLONE_SHIP_INFO :{BLACK}Baut eine Kopie des Schiffes. Strg+Klick erzeugt gemeinsamen Fahrplan
STR_CLONE_SHIP_DEPOT_INFO :{BLACK}Baut eine Kopie des Schiffes. Klicke diese Schaltfläche und dann auf eine Schiff innerhalb oder außerhalb des Depots. Strg+Klick erzeugt gemeinsamen Fahrplan
STR_980B_SHIP_MUST_BE_STOPPED_IN :{WHITE}Schiff muss in der Werft angehalten werden
-STR_980C_CAN_T_SELL_SHIP :{WHITE}Kann das Schiff nicht verkaufen...
-STR_980D_CAN_T_BUILD_SHIP :{WHITE}Kann das Schiff nicht bauen...
+STR_980C_CAN_T_SELL_SHIP :{WHITE}Schiff kann nicht verkauft werden...
+STR_980D_CAN_T_BUILD_SHIP :{WHITE}Schiff kann nicht gebaut werden...
STR_980E_SHIP_IN_THE_WAY :{WHITE}Schiff ist im Weg
STR_980F :{WHITE}{VEHICLE}
STR_9811_DETAILS :{WHITE}{VEHICLE} (Einzelheiten)
-STR_9812_AGE_RUNNING_COST_YR :{BLACK}Alter: {LTBLUE}{STRING}{BLACK} Betriebskosten: {LTBLUE}{CURRENCY}/Jahr
+STR_9812_AGE_RUNNING_COST_YR :{BLACK}Alter: {LTBLUE}{STRING}{BLACK} Betriebskosten: {LTBLUE}{CURRENCY} pro Jahr
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_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Gewinn lfd. Jahr: {LTBLUE}{CURRENCY} (vergangenes Jahr: {CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}Zuverlässigkeit: {LTBLUE}{COMMA}% {BLACK}Pannen seit letzter Wartung: {LTBLUE}{COMMA}
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...
-STR_981A_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Kann keine Werft finden
-STR_HEADING_FOR_SHIP_DEPOT :{ORANGE}Unterwegs zu {TOWN} Werft
-STR_HEADING_FOR_SHIP_DEPOT_VEL :{ORANGE}Unterwegs zu {TOWN} Werft, {VELOCITY}
-STR_HEADING_FOR_SHIP_DEPOT_SERVICE :{LTBLUE}Wartung in {TOWN} Werft
-STR_HEADING_FOR_SHIP_DEPOT_SERVICE_VEL :{LTBLUE}Wartung in {TOWN} Werft, {VELOCITY}
+STR_9818_CAN_T_STOP_START_SHIP :{WHITE}Schiff kann nicht angehalten/losgeschickt werden...
+STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Schiff kann nicht in die Werft geschickt werden...
+STR_981A_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Werft unauffindbar
+STR_HEADING_FOR_SHIP_DEPOT :{ORANGE}Unterwegs zur Werft {TOWN}
+STR_HEADING_FOR_SHIP_DEPOT_VEL :{ORANGE}Unterwegs zur Werft {TOWN}, {VELOCITY}
+STR_HEADING_FOR_SHIP_DEPOT_SERVICE :{LTBLUE}Wartung in der Werft {TOWN}
+STR_HEADING_FOR_SHIP_DEPOT_SERVICE_VEL :{LTBLUE}Wartung in der Werft {TOWN}, {VELOCITY}
STR_981C_SHIP_IS_WAITING_IN_DEPOT :{WHITE}Schiff {COMMA} wartet in der Werft
STR_981D_BUILD_SHIP_DOCK :{BLACK}Hafen bauen
STR_981E_BUILD_SHIP_DEPOT_FOR_BUILDING :{BLACK}Werft bauen (für den Bau und die Wartung von Schiffen)
STR_981F_SHIPS_CLICK_ON_SHIP_FOR :{BLACK}Schiffe - für Einzelheiten auf das Schiff klicken
STR_9820_BUILD_NEW_SHIP :{BLACK}Neues Schiff bauen
STR_9821_DRAG_SHIP_TO_HERE_TO_SELL :{BLACK}Ziehe Schiff hierher, um es zu verkaufen
-STR_9822_CENTER_MAIN_VIEW_ON_SHIP :{BLACK}Ansicht auf die Werft zentrieren
+STR_9822_CENTER_MAIN_VIEW_ON_SHIP :{BLACK}Hauptansicht zur Werft scrollen
STR_9823_SHIPS_CLICK_ON_SHIP_FOR :{BLACK}Schiffe - für Einzelheiten auf das Schiff klicken
-STR_9824_BUILD_NEW_SHIPS_REQUIRES :{BLACK}Baue neues Schiff (setzt Werft voraus)
+STR_9824_BUILD_NEW_SHIPS_REQUIRES :{BLACK}Neues Schiff bauen (erfordert eine Werft)
STR_9825_SHIP_SELECTION_LIST_CLICK :{BLACK}Schiffauswahliste - für Einzelheiten auf das Schiff klicken
-STR_9826_BUILD_THE_HIGHLIGHTED_SHIP :{BLACK}Baue das ausgewählte Schiff
+STR_9826_BUILD_THE_HIGHLIGHTED_SHIP :{BLACK}Ausgewähltes Schiff bauen
STR_9827_CURRENT_SHIP_ACTION_CLICK :{BLACK}Laufende Schiffsbewegung - Klicke hier, um das Schiff anzuhalten / zu starten
STR_9828_SHOW_SHIP_S_ORDERS :{BLACK}Aufträge des Schiffes
-STR_9829_CENTER_MAIN_VIEW_ON_SHIP :{BLACK}Anzeige auf das Schiff zentrieren
+STR_9829_CENTER_MAIN_VIEW_ON_SHIP :{BLACK}Hauptansicht zum Schiff scrollen
STR_982A_SEND_SHIP_TO_DEPOT :{BLACK}Schicke das Schiff zur Werft
STR_982B_SHOW_SHIP_DETAILS :{BLACK}Zeige Einzelheiten des Schiffes
-STR_982E_COST_MAX_SPEED_CAPACITY :{BLACK}Kosten: {CURRENCY} Höchstgeschwindigk.: {VELOCITY}{}Kapazität: {CARGO}{}Betriebskosten: {CURRENCY}/Jahr
+STR_982E_COST_MAX_SPEED_CAPACITY :{BLACK}Kosten: {CURRENCY} Höchstgeschwindigk.: {VELOCITY}{}Kapazität: {CARGO}{}Betriebskosten: {CURRENCY} pro Jahr
STR_982F_NAME_SHIP :{BLACK}Schiffsname
STR_9831_NAME_SHIP :{WHITE}Schiffsname
-STR_9832_CAN_T_NAME_SHIP :{WHITE}Kann Schiffsnamen nicht vergeben...
-STR_9833_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Die Stadt feiert . . .{}Das erste Schiff erreicht {STATION}!
+STR_9832_CAN_T_NAME_SHIP :{WHITE}Schiff kann nicht benannt werden...
+STR_9833_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Die Einwohner feiern . . .{}Das erste Schiff erreicht {STATION}!
STR_9834_POSITION_BUOY_WHICH_CAN :{BLACK}Positionsboje, wird als Wegpunkt benötigt
-STR_9835_CAN_T_POSITION_BUOY_HERE :{WHITE}Kann die Boje hier nicht plazieren...
+STR_9835_CAN_T_POSITION_BUOY_HERE :{WHITE}Boje kann hier nicht platziert werden...
STR_9836_RENAME :{BLACK}Umbenennen
STR_9837_RENAME_SHIP_TYPE :{BLACK}Schiff umbenennen
STR_9838_RENAME_SHIP_TYPE :{WHITE}Schiff umbenennen
-STR_9839_CAN_T_RENAME_SHIP_TYPE :{WHITE}Kann das Schiff nicht umbenennen...
+STR_9839_CAN_T_RENAME_SHIP_TYPE :{WHITE}Schiffstyp kann nicht umbenannt werden...
STR_983A_REFIT_CARGO_SHIP_TO_CARRY :{BLACK}Umrüstung des Schiffes zur Beförderung anderer Frachtarten
STR_983B_REFIT :{WHITE}{VEHICLE} (Umrüsten)
STR_983C_REFIT_SHIP :{BLACK}Schiff umrüsten
@@ -2924,7 +2912,7 @@
STR_983E_REFIT_SHIP_TO_CARRY_HIGHLIGHTED :{BLACK}Umrüstung des Schiffes auf die ausgewählte Frachtart
STR_983F_SELECT_CARGO_TYPE_TO_CARRY :{GOLD}Wähle Frachtart für die Beförderung:
STR_9840_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Neue Kapazität: {GOLD}{CARGO}{}{BLACK}Kosten der Umrüstung: {GOLD}{CURRENCY}
-STR_9841_CAN_T_REFIT_SHIP :{WHITE}Kann das Schiff nicht umrüsten...
+STR_9841_CAN_T_REFIT_SHIP :{WHITE}Schiff kann nicht umgerüstet werden...
STR_9842_REFITTABLE :(umrüstbar)
STR_GO_TO_SHIP_DEPOT :Fahre zu {TOWN} Schiffswerft
SERVICE_AT_SHIP_DEPOT :Wartung in der {TOWN} Schiffswerft
@@ -2939,57 +2927,57 @@
STR_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Baut eine Kopie des Flugzeuges. Klicke auf diese Schaltfläche und dann auf ein Flugzeug innerhalb oder außerhalb des Depots. Strg+Klick erzeugt gemeinsamen Fahrplan
STR_A005_NEW_AIRCRAFT :{WHITE}Neue Flugzeuge
STR_A006_BUILD_AIRCRAFT :{BLACK}Flugzeug bauen
-STR_A008_CAN_T_BUILD_AIRCRAFT :{WHITE}Kann das Flugzeug nicht bauen...
+STR_A008_CAN_T_BUILD_AIRCRAFT :{WHITE}Flugzeug kann nicht gebaut werden...
STR_A009_AIRCRAFT :{WHITE}{COMPANY} - {COMMA} Flugzeug{P "" e}
STR_A00A :{WHITE}{VEHICLE}
STR_A00B_ORDERS :{WHITE}{VEHICLE} (Aufträge)
STR_A00C_DETAILS :{WHITE}{VEHICLE} (Einzelheiten)
-STR_A00D_AGE_RUNNING_COST_YR :{BLACK}Alter: {LTBLUE}{STRING}{BLACK} Betriebskosten: {LTBLUE}{CURRENCY}/Jahr
+STR_A00D_AGE_RUNNING_COST_YR :{BLACK}Alter: {LTBLUE}{STRING}{BLACK} Betriebskosten: {LTBLUE}{CURRENCY} pro Jahr
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_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Gewinn lfd. Jahr: {LTBLUE}{CURRENCY} (vergangenes Jahr: {CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}Zuverlässigkeit: {LTBLUE}{COMMA}% {BLACK}Pannen seit letzter Wartung: {LTBLUE}{COMMA}
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_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}Flugzeug kann nicht in den Hangar geschickt werden...
STR_HEADING_FOR_HANGAR :{ORANGE}Unterwegs zu {STATION} Hangar
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}Unterwegs zu {STATION} Hangar, {VELOCITY}
STR_HEADING_FOR_HANGAR_SERVICE :{LTBLUE}Wartung in {STATION} Hangar
STR_HEADING_FOR_HANGAR_SERVICE_VEL :{LTBLUE}Wartung in {STATION} Hangar, {VELOCITY}
STR_A014_AIRCRAFT_IS_WAITING_IN :{WHITE}Flugzeug {COMMA} wartet im Hangar
STR_A015_AIRCRAFT_IN_THE_WAY :{WHITE}Flugzeug ist auf dem Weg
-STR_A016_CAN_T_STOP_START_AIRCRAFT :{WHITE}Kann das Flugzeug nicht anhalten/starten...
+STR_A016_CAN_T_STOP_START_AIRCRAFT :{WHITE}Flugzeug kann nicht angehalten/losgeschickt werden...
STR_A017_AIRCRAFT_IS_IN_FLIGHT :{WHITE}Das Flugzeug ist in der Luft
STR_A019_CAPACITY :{BLACK}Kapazität: {LTBLUE}{CARGO}, {CARGO}
STR_A01A_CAPACITY :{BLACK}Kapazität: {LTBLUE}{CARGO}
STR_A01B_AIRCRAFT_MUST_BE_STOPPED :{WHITE}Flugzeug muss im Hangar angehalten werden
-STR_A01C_CAN_T_SELL_AIRCRAFT :{WHITE}Kann das Flugzeug nicht verkaufen...
+STR_A01C_CAN_T_SELL_AIRCRAFT :{WHITE}Flugzeug kann nicht verkauft werden...
STR_A01D_AIRPORT_CONSTRUCTION :Flughafenbau
-STR_A01E_BUILD_AIRPORT :{BLACK}Baue Flughafen
+STR_A01E_BUILD_AIRPORT :{BLACK}Flughafen bauen
STR_A01F_AIRCRAFT_CLICK_ON_AIRCRAFT :{BLACK}Flugzeuge - für Einzelheiten auf das Flugzeug klicken
-STR_A020_BUILD_NEW_AIRCRAFT_REQUIRES :{BLACK}Baue neues Flugzeug (setzt Flughafen mit Hangar voraus)
+STR_A020_BUILD_NEW_AIRCRAFT_REQUIRES :{BLACK}Neues Flugzeug bauen (erfordert einen Flughafen mit Hangar)
STR_A021_AIRCRAFT_CLICK_ON_AIRCRAFT :{BLACK}Flugzeuge - für Einzelheiten auf das Flugzeug klicken
-STR_A022_BUILD_NEW_AIRCRAFT :{BLACK}Baue neues Flugzeug
+STR_A022_BUILD_NEW_AIRCRAFT :{BLACK}Neues Flugzeug bauen
STR_A023_DRAG_AIRCRAFT_TO_HERE_TO :{BLACK}Zum Verkauf des Flugzeuges hierher ziehen
-STR_A024_CENTER_MAIN_VIEW_ON_HANGAR :{BLACK}Ansicht auf den Hangar zentrieren
-STR_A025_AIRCRAFT_SELECTION_LIST :{BLACK}Flugzeugauswahlliste - Klicke auf das Flugzeug für weitere Einzelheiten
-STR_A026_BUILD_THE_HIGHLIGHTED_AIRCRAFT :{BLACK}Baue das augewählte Flugzeug
-STR_A027_CURRENT_AIRCRAFT_ACTION :{BLACK}Laufende Flugzeugbewegung - Klicke hier, um das Flugzeug anzuhalten / zu starten
+STR_A024_CENTER_MAIN_VIEW_ON_HANGAR :{BLACK}Hauptansicht zum Hangar scrollen
+STR_A025_AIRCRAFT_SELECTION_LIST :{BLACK}Flugzeugauswahlliste - Klick auf das Flugzeug zeigt weitere Einzelheiten an
+STR_A026_BUILD_THE_HIGHLIGHTED_AIRCRAFT :{BLACK}Augewähltes Flugzeug bauen
+STR_A027_CURRENT_AIRCRAFT_ACTION :{BLACK}Laufende Flugzeugbewegung - Klick zum Anhalten bzw. losschicken
STR_A028_SHOW_AIRCRAFT_S_ORDERS :{BLACK}Zeige Aufträge für das Flugzeug
-STR_A029_CENTER_MAIN_VIEW_ON_AIRCRAFT :{BLACK}Ansicht auf das Flugzeug zentrieren
+STR_A029_CENTER_MAIN_VIEW_ON_AIRCRAFT :{BLACK}Hauptansicht zum Flugzeug scrollen
STR_A02A_SEND_AIRCRAFT_TO_HANGAR :{BLACK}Schicke das Flugzeug in den Hangar
STR_A02B_SHOW_AIRCRAFT_DETAILS :{BLACK}Zeige Einzelheiten des Flugzeuges
-STR_A02E_COST_MAX_SPEED_CAPACITY :{BLACK}Kosten: {CURRENCY} Höchstgeschwindigk.: {VELOCITY}{}Kapazität: {COMMA} Passagiere, {COMMA} Postsäcke{}Betriebskosten: {CURRENCY}/Jahr
+STR_A02E_COST_MAX_SPEED_CAPACITY :{BLACK}Kosten: {CURRENCY} Höchstgeschw.: {VELOCITY}{}Kapazität: {COMMA} Passagiere, {COMMA} Postsäcke{}Betriebskosten: {CURRENCY} pro Jahr
STR_A030_NAME_AIRCRAFT :{WHITE}Flugzeugname
-STR_A031_CAN_T_NAME_AIRCRAFT :{WHITE}Kann Flugzeugname nicht vergeben...
+STR_A031_CAN_T_NAME_AIRCRAFT :{WHITE}Flugzeug kann nicht benannt werden...
STR_A032_NAME_AIRCRAFT :{BLACK}Flugzeugname
-STR_A033_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Die Stadt feiert . . .{}Erstes Flugzeug landet auf {STATION}!
+STR_A033_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Die Einwohner feiern . . .{}Das erste Flugzeug startet von {STATION}!
STR_A034_PLANE_CRASH_DIE_IN_FIREBALL :{BLACK}{BIGFONT}Flugzeugabsturz!{}{COMMA} sterben in einem Feuerball auf {STATION}
STR_PLANE_CRASH_OUT_OF_FUEL :{BLACK}{BIGFONT}Flugzeugabsturz!{}Dem Flugzeug ging der Treibstoff aus, {COMMA} sterben in einem Feuerball!
STR_A036 :{TINYFONT}{BLACK}{STATION}
STR_A037_RENAME :{BLACK}Umbenennen
STR_A038_RENAME_AIRCRAFT_TYPE :{BLACK}Flugzeug umbenennen
STR_A039_RENAME_AIRCRAFT_TYPE :{WHITE}Flugzeug umbenennen
-STR_A03A_CAN_T_RENAME_AIRCRAFT_TYPE :{WHITE}Kann das Flugzeug nicht umbenennen...
+STR_A03A_CAN_T_RENAME_AIRCRAFT_TYPE :{WHITE}Flugzeug kann nicht umbenannt werden...
STR_A03B_REFIT_AIRCRAFT_TO_CARRY :{BLACK}Umrüstung des Flugzeuges zum Transport anderer Frachten
STR_A03C_REFIT :{WHITE}{VEHICLE} (Umrüstung)
STR_A03D_REFIT_AIRCRAFT :{BLACK}Flugzeug umrüsten
@@ -2997,9 +2985,9 @@
STR_A03F_REFIT_AIRCRAFT_TO_CARRY :{BLACK}Umrüstung des Flugzeuges auf die ausgewählte Frachtart
STR_A040_SELECT_CARGO_TYPE_TO_CARRY :{GOLD}Wähle Frachtart für Umrüstung aus:
STR_A041_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Neue Kapazität: {GOLD}{STRING}{}{BLACK}Kosten der Umrüstung: {GOLD}{CURRENCY}
-STR_A042_CAN_T_REFIT_AIRCRAFT :{WHITE}Kann das Flugzeug nicht umrüsten...
-STR_GO_TO_AIRPORT_HANGAR :Fliege zu {STATION} Hangar
-SERVICE_AT_AIRPORT_HANGAR :Wartung im {STATION} Hangar
+STR_A042_CAN_T_REFIT_AIRCRAFT :{WHITE}Flugzeug kann nicht umgerüstet werden...
+STR_GO_TO_AIRPORT_HANGAR :Flug zum Hangar von {STATION}
+SERVICE_AT_AIRPORT_HANGAR :Wartung im Hangar von {STATION}
STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (Fahrplan)
@@ -3009,7 +2997,7 @@
STR_B002_OIL_REFINERY_EXPLOSION :{BLACK}{BIGFONT}Explosion einer Ölraffinerie nahe {TOWN}!
STR_B003_FACTORY_DESTROYED_IN_SUSPICIOUS :{BLACK}{BIGFONT}Fabrik nahe {TOWN} unter mysteriösen Umständen zerstört!
STR_B004_UFO_LANDS_NEAR :{BLACK}{BIGFONT}'UFO' landet bei {TOWN}!
-STR_B005_COAL_MINE_SUBSIDENCE_LEAVES :{BLACK}{BIGFONT}Stolleneinbruch hinterläßt einen Pfad der Zerstörung bei {TOWN}!
+STR_B005_COAL_MINE_SUBSIDENCE_LEAVES :{BLACK}{BIGFONT}Stolleneinbruch bei {TOWN} hinterlässt Pfad der Zerstörung!
STR_B006_FLOOD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}Hochwasser!{}Mindestens {COMMA} Mensch{P "" en} vermisst oder tot nach schwerer Flut!
STR_BRIBE_FAILED :{WHITE}Ihr Bestechungsversuch wurde
@@ -3025,7 +3013,7 @@
############ Those following lines need to be in this order!!
STR_PERFORMANCE_DETAIL_VEHICLES :{BLACK}Fahrzeuge:
STR_PERFORMANCE_DETAIL_STATIONS :{BLACK}Stationen:
-STR_PERFORMANCE_DETAIL_MIN_PROFIT :{BLACK}Min. Profit:
+STR_PERFORMANCE_DETAIL_MIN_PROFIT :{BLACK}Min. Gewinn:
STR_PERFORMANCE_DETAIL_MIN_INCOME :{BLACK}Min. Einkom.:
STR_PERFORMANCE_DETAIL_MAX_INCOME :{BLACK}Max. Einkom.:
STR_PERFORMANCE_DETAIL_DELIVERED :{BLACK}Geliefert:
@@ -3036,60 +3024,60 @@
############ End of order list
STR_PERFORMANCE_DETAIL_VEHICLES_TIP :{BLACK}Anzahl an Fahrzeugen (Straßenfahrzeuge, Züge, Schiffe und Flugzeuge/Helikopter)
STR_PERFORMANCE_DETAIL_STATIONS_TIP :{BLACK}Anzahl an Stationen (Jeder Teil einer Station zählt einzeln: Bahnhof, Ladeplatz, Busbahnhof, Flugplatz)
-STR_PERFORMANCE_DETAIL_MIN_PROFIT_TIP :{BLACK}Geringster Profit der Fahrzeuge, die älter als 2 Jahre sind
+STR_PERFORMANCE_DETAIL_MIN_PROFIT_TIP :{BLACK}Geringster Gewinn der Fahrzeuge, die älter als 2 Jahre sind
STR_PERFORMANCE_DETAIL_MIN_INCOME_TIP :{BLACK}Geringste Monatseinnahmen in den letzten 12 Quartalen
STR_PERFORMANCE_DETAIL_MAX_INCOME_TIP :{BLACK}Höchste Monatseinnahmen in den letzten 12 Quartalen
STR_PERFORMANCE_DETAIL_DELIVERED_TIP :{BLACK}In den letzten 4 Quartalen gelieferte Frachteinheiten
STR_PERFORMANCE_DETAIL_CARGO_TIP :{BLACK}Im letzten Quartal gelieferte Frachttypen
-STR_PERFORMANCE_DETAIL_MONEY_TIP :{BLACK}Bargeld
-STR_PERFORMANCE_DETAIL_LOAN_TIP :{BLACK}Schuldenfalle?
+STR_PERFORMANCE_DETAIL_MONEY_TIP :{BLACK}Kontostand dieser Firma
+STR_PERFORMANCE_DETAIL_LOAN_TIP :{BLACK}Das von dieser Firma in Anspruch genommene Darlehen
STR_PERFORMANCE_DETAIL_TOTAL_TIP :{BLACK}Erreichte Punkte von der maximal erreichbaren Anzahl
-STR_NEWGRF_SETTINGS_BUTTON :{BLACK}NewGRF Einstellungen
-STR_NEWGRF_SETTINGS_CAPTION :{WHITE}Newgrf Einstellungen
+STR_NEWGRF_SETTINGS_BUTTON :{BLACK}NewGRF-Einstellungen
+STR_NEWGRF_SETTINGS_CAPTION :{WHITE}NewGRF-Einstellungen
STR_NEWGRF_APPLY_CHANGES :{BLACK}Änderungen anwenden
STR_NEWGRF_SET_PARAMETERS :{BLACK}Parameter setzen
-STR_NEWGRF_TIP :{BLACK}Eine Liste aller Newgrf-Sets, die installiert sind. Per Klick auswählen.
-STR_NEWGRF_NO_FILES_INSTALLED :{BLACK}Keine Newgrf-Dateien installiert. Bitte Installationsanleitung im Handbuch nachschlagen.
+STR_NEWGRF_TIP :{BLACK}Eine Liste aller NewGRF-Sets, die installiert sind. Per Klick auswählen.
+STR_NEWGRF_NO_FILES_INSTALLED :{BLACK}Keine NewGRF-Dateien installiert. Bitte Installationsanleitung im Handbuch nachschlagen.
STR_NEWGRF_FILENAME :{BLACK}Dateiname: {SILVER}{STRING}
-STR_NEWGRF_GRF_ID :{BLACK}GRF ID: {SILVER}{STRING}
+STR_NEWGRF_GRF_ID :{BLACK}GRF-ID: {SILVER}{STRING}
STR_NEWGRF_MD5SUM :{BLACK}MD5-Summe: {SILVER}{STRING}
-STR_NEWGRF_CONFIRMATION_TEXT :{YELLOW}Du bist dabei Änderungen während eines laufenden Spiels zu machen. Dies kann zum Absturz von OpenTTD führen.{}Bist du Dir wirklich sicher?
+STR_NEWGRF_CONFIRMATION_TEXT :{YELLOW}Sie sind im Begriff, Änderungen während eines laufenden Spiels zu machen. Dies kann zum Absturz von OpenTTD führen.{}Sind Sie sicher?
STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING}
STR_NEWGRF_ERROR_MSG_WARNING :{RED}Warnung: {SILVER}{STRING}
STR_NEWGRF_ERROR_MSG_ERROR :{RED}Fehler: {SILVER}{STRING}
STR_NEWGRF_ERROR_MSG_FATAL :{RED}Fataler Fehler: {SILVER}{STRING}
-STR_NEWGRF_ERROR_VERSION_NUMBER :{STRING} Arbeitet nicht zusammen mit der TTDPatch Version in OpenTTD.
-STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{STRING} Ist für die {STRING} Version von TTD.
-STR_NEWGRF_ERROR_UNSET_SWITCH :{STRING} Ist erstellt für die Nutzung mit {STRING}
+STR_NEWGRF_ERROR_VERSION_NUMBER :{STRING} funktioniert nicht im Zusammenhang mit der von OpenTTD ermittelten TTDPatch-Version.
+STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{STRING} ist für die {STRING}-Version von TTD.
+STR_NEWGRF_ERROR_UNSET_SWITCH :{STRING} ist für die Nutzung mit {STRING} vorgesehen
STR_NEWGRF_ERROR_INVALID_PARAMETER :Falscher Parameter für {STRING}: Parameter {STRING} ({NUM})
-STR_NEWGRF_ERROR_LOAD_BEFORE :{STRING} Muß vor {STRING} geladen werden.
-STR_NEWGRF_ERROR_LOAD_AFTER :{STRING} Muß nach {STRING} geladen werden.
-STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :Die GRF Datei, die zur Übersetzung erstellt wurde
+STR_NEWGRF_ERROR_LOAD_BEFORE :{STRING} muss vor {STRING} geladen werden.
+STR_NEWGRF_ERROR_LOAD_AFTER :{STRING} muss nach {STRING} geladen werden.
+STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :der GRF-Datei, die es übersetzen soll,
STR_NEWGRF_ADD :{BLACK}Hinzufügen
-STR_NEWGRF_ADD_TIP :{BLACK}Füge eine neue NewGRF Datei zu Liste hinzu
+STR_NEWGRF_ADD_TIP :{BLACK}Eine neue NewGRF-Datei zur Liste hinzufügen
STR_NEWGRF_REMOVE :{BLACK}Entfernen
-STR_NEWGRF_REMOVE_TIP :{BLACK}Entferne die ausgewählte NewGRF Datei von der Liste
+STR_NEWGRF_REMOVE_TIP :{BLACK}Die ausgewählte NewGRF-Datei von der Liste entfernen
STR_NEWGRF_MOVEUP :{BLACK}Nach oben
-STR_NEWGRF_MOVEUP_TIP :{BLACK}Schiebe die ausgewählte NewGRF Datei in der Liste nach oben
+STR_NEWGRF_MOVEUP_TIP :{BLACK}Die ausgewählte NewGRF-Datei in der Liste nach oben verschieben
STR_NEWGRF_MOVEDOWN :{BLACK}Nach unten
-STR_NEWGRF_MOVEDOWN_TIP :{BLACK}Schiebe die ausgewählte NewGRF Datei in der Liste nach unten
-STR_NEWGRF_FILE_TIP :{BLACK}Eine Liste der installierten NewGRF Dateien. Wähle eine Datei und verändere deren Parameter
-STR_NEWGRF_PARAMETER :{BLACK}Parameter: {SILVER}{STRING}
-STR_NEWGRF_PARAMETER_QUERY :{BLACK}Schreibe neue NewGRF Parameter
+STR_NEWGRF_MOVEDOWN_TIP :{BLACK}Die ausgewählte NewGRF-Datei in der Liste nach unten verschieben
+STR_NEWGRF_FILE_TIP :{BLACK}Eine Liste der installierten NewGRF-Dateien. Zum Ändern der Einstellungen Datei auswählen
+STR_NEWGRF_PARAMETER :{BLACK}Einstellung: {SILVER}{STRING}
+STR_NEWGRF_PARAMETER_QUERY :{BLACK}Neue NewGRF-Einstellungen abspeichern
STR_NEWGRF_NO_INFO :{BLACK}Keine Informationen verfügbar
-STR_NEWGRF_ADD_CAPTION :{WHITE}Verfügbare NewGRF Dateien
+STR_NEWGRF_ADD_CAPTION :{WHITE}Verfügbare NewGRF-Dateien
STR_NEWGRF_ADD_FILE :{BLACK}Zur Auswahl hinzufügen
-STR_NEWGRF_ADD_FILE_TIP :{BLACK}Füge die ausgewählte NewGRF Datei zu deiner Konfiguration hinzu
-STR_NEWGRF_RESCAN_FILES :{BLACK}Aktualisiere Dateiliste
-STR_NEWGRF_RESCAN_FILES_TIP :{BLACK}Aktualisiere die Liste der verfügbaren NewGRF Dateien
-STR_NEWGRF_DUPLICATE_GRFID :{WHITE}Kann die Datei nicht hinzufügen: doppelte GRF ID
+STR_NEWGRF_ADD_FILE_TIP :{BLACK}Ausgewählte NewGRF-Datei zur Konfiguration hinzufügen
+STR_NEWGRF_RESCAN_FILES :{BLACK}Dateiliste aktualisieren
+STR_NEWGRF_RESCAN_FILES_TIP :{BLACK}Liste der verfügbaren NewGRF-Dateien aktualisieren
+STR_NEWGRF_DUPLICATE_GRFID :{WHITE}Datei kann nicht hinzugefügt werden: GRF-ID bereits vergeben
STR_NEWGRF_NOT_FOUND :{RED}Zugehörige Datei nicht gefunden
-STR_NEWGRF_DISABLED :{RED}Ausgeschaltet
+STR_NEWGRF_DISABLED :{RED}Deaktiviert
STR_NEWGRF_COMPATIBLE_LOADED :{ORANGE}Passende Datei nicht gefunden (kompatible GRF geladen)
STR_NEWGRF_COMPATIBLE_LOAD_WARNING :{WHITE}Kompatible GRF(s) für fehlende Dateien geladen
@@ -3117,53 +3105,53 @@
STR_SCHEDULED_AIRCRAFT :{WHITE}{STATION} - {COMMA} Flugzeug{P "" e}
STR_SCHEDULED_SHIPS :{WHITE}{STATION} - {COMMA} Schiff{P "" e}
-STR_SCHEDULED_TRAINS_TIP :{BLACK}Zeige alle Züge, die diesen Bahnhof anfahren
-STR_SCHEDULED_ROAD_VEHICLES_TIP :{BLACK}Zeige alle Fahrzeuge, die diese Station anfahren
-STR_SCHEDULED_AIRCRAFT_TIP :{BLACK}Zeige alle Flugzeuge, die diesen Flughafen anfliegen
-STR_SCHEDULED_SHIPS_TIP :{BLACK}Zeige alle Schiffe, die diesen Hafen ansteuern
+STR_SCHEDULED_TRAINS_TIP :{BLACK}Alle Züge, die diesen Bahnhof anfahren, anzeigen
+STR_SCHEDULED_ROAD_VEHICLES_TIP :{BLACK}Alle Fahrzeuge, die diese Station anfahren, anzeigen
+STR_SCHEDULED_AIRCRAFT_TIP :{BLACK}Alle Flugzeuge, die diesen Flughafen anfliegen, anzeigen
+STR_SCHEDULED_SHIPS_TIP :{BLACK}Alle Schiffe, die diesen Hafen ansteuern, anzeigen
STR_VEH_WITH_SHARED_ORDERS_LIST :{WHITE}Gemeinsamer Fahrplan von {COMMA} Fahrzeug{P "" en}
-STR_VEH_WITH_SHARED_ORDERS_LIST_TIP :{BLACK}Zeige alle Fahrzeuge mit demselben Fahrplan
+STR_VEH_WITH_SHARED_ORDERS_LIST_TIP :{BLACK}Alle Fahrzeuge mit demselben Fahrplan anzeigen
### depot strings
-STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}Möchtest du alle Fahrzeuge in diesem Depot verkaufen?
-STR_DEPOT_WRONG_DEPOT_TYPE :Falsche Depotart
-
-STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP :{BLACK}Verkaufe alle Züge im Depot
-STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP :{BLACK}Verkaufe alle Fahrzeuge im Depot
-STR_DEPOT_SELL_ALL_BUTTON_SHIP_TIP :{BLACK}Verkaufe alle Schiffe in der Werft
-STR_DEPOT_SELL_ALL_BUTTON_AIRCRAFT_TIP :{BLACK}Verkaufe alle Flugzeuge im Hangar
+STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}Sollen alle Fahrzeuge in diesem Depot verkauft werden?
+STR_DEPOT_WRONG_DEPOT_TYPE :Falsche Art von Depot
-STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TIP :{BLACK}Zeige eine Liste mit allen Zügen, die dieses Depot anfahren
-STR_DEPOT_VEHICLE_ORDER_LIST_ROADVEH_TIP :{BLACK}Zeige eine Liste mit allen Fahrzeugen, die dieses Depot anfahren
-STR_DEPOT_VEHICLE_ORDER_LIST_SHIP_TIP :{BLACK}Zeige eine Liste mit allen Schiffen, die diese Werft anfahren
-STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TIP :{BLACK}Zeige alle Flugzeuge mit irgendeinem Hangar dieses Flughafens in ihrem Flugplan
+STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP :{BLACK}Alle Züge im Depot verkaufen
+STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP :{BLACK}Alle Fahrzeuge im Depot verkaufen
+STR_DEPOT_SELL_ALL_BUTTON_SHIP_TIP :{BLACK}Alle Schiffe in der Werft verkaufen
+STR_DEPOT_SELL_ALL_BUTTON_AIRCRAFT_TIP :{BLACK}Alle Flugzeuge im Hangar verkaufen
-STR_DEPOT_AUTOREPLACE_TRAIN_TIP :{BLACK}Ersetze alle Züge im Depot automatisch
-STR_DEPOT_AUTOREPLACE_ROADVEH_TIP :{BLACK}Ersetze alle Fahrzeuge im Depot automatisch
-STR_DEPOT_AUTOREPLACE_SHIP_TIP :{BLACK}Ersetze alle Schiffe in der Werft automatisch
-STR_DEPOT_AUTOREPLACE_AIRCRAFT_TIP :{BLACK}Ersetze alle Flugzeuge im Hangar automatisch
+STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TIP :{BLACK}Züge, die dieses Depot anfahren, auflisten
+STR_DEPOT_VEHICLE_ORDER_LIST_ROADVEH_TIP :{BLACK}Fahrzeuge, die dieses Depot anfahren, auflisten
+STR_DEPOT_VEHICLE_ORDER_LIST_SHIP_TIP :{BLACK}Schiffe, die diese Werft anfahren, auflisten
+STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TIP :{BLACK}Flugzeuge, die diesen Flughafen anfliegen, auflisten
+
+STR_DEPOT_AUTOREPLACE_TRAIN_TIP :{BLACK}Alle Züge im Depot automatisch ersetzen
+STR_DEPOT_AUTOREPLACE_ROADVEH_TIP :{BLACK}Alle Fahrzeuge im Depot automatisch ersetzen
+STR_DEPOT_AUTOREPLACE_SHIP_TIP :{BLACK}Alle Schiffe in der Werft automatisch ersetzen
+STR_DEPOT_AUTOREPLACE_AIRCRAFT_TIP :{BLACK}Alle Flugzeuge im Hangar automatisch ersetzen
STR_VEHICLE_LIST_TRAIN_DEPOT :{BLACK}{STRING} - {COMMA} {P Zug Züge}
STR_VEHICLE_LIST_ROADVEH_DEPOT :{BLACK}{STRING} - {COMMA} Fahrzeug{P "" e}
STR_VEHICLE_LIST_SHIP_DEPOT :{BLACK}{STRING} - {COMMA} Schiff{P "" e}
STR_VEHICLE_LIST_AIRCRAFT_DEPOT :{BLACK}{STRING} - {COMMA} Flugzeug
-STR_REPLACE_VEHICLES_WHITE :{WHITE}Ersetze {STRING}
+STR_REPLACE_VEHICLES_WHITE :{WHITE}{STRING} ersetzen
STR_REPLACE_VEHICLES_START :{BLACK}Fahrzeugersetzung aktivieren
STR_REPLACE_VEHICLES_STOP :{BLACK}Fahrzeugersetzung deaktivieren
STR_NOT_REPLACING :{BLACK}Keine Ersetzung
STR_NOT_REPLACING_VEHICLE_SELECTED :{BLACK}Kein Fahrzeug gewählt
-STR_REPLACE_HELP_LEFT_ARRAY :{BLACK}Wähle das zu ersetzende Fahrzeug
-STR_REPLACE_HELP_RIGHT_ARRAY :{BLACK}Wähle den Fahrzeugtyp, der anstelle des links gewählten Fahrzeugs verwendet werden soll
-STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Drücke diesen Button, wenn das Fahrzeug auf der linken Seite nicht ersetzt werden soll
-STR_REPLACE_HELP_START_BUTTON :{BLACK}Drücke diesen Button, wenn das Fahrzeug auf der linken Seite durch das auf der rechten Seite gewählte ersetzt werden soll
-STR_REPLACE_HELP_RAILTYPE :{BLACK}Wähle einen Gleistyp für den Loks ersetzt werden sollen
-STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Hier wird angezeigt, gegen welches Fahrzeug das auf der linken Seite gewählte ersetzt wird
-STR_REPLACE_HELP :{BLACK}Dieses Feature ermöglicht es, einen Fahrzeugtyp auszuwählen und ihn durch einen anderen ersetzen zu lassen. Dies geschieht automatisch, wenn das Fahrzeug regulär das Depot besucht.
+STR_REPLACE_HELP_LEFT_ARRAY :{BLACK}Zu ersetzenden Loktyp auswählen
+STR_REPLACE_HELP_RIGHT_ARRAY :{BLACK}Loktyp auswählen, der anstelle des links gewählten Loktyps verwendet werden soll
+STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Klick zum Abbrechen der Ersetzung des Loktyps auf der linken Seite
+STR_REPLACE_HELP_START_BUTTON :{BLACK}Klick zum Ersetzen des Loktyps auf der linken Seite mit dem auf der rechten Seite
+STR_REPLACE_HELP_RAILTYPE :{BLACK}Schienentyp auswählen, für den Loks ersetzt werden sollen
+STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Hier wird angezeigt, gegen welche Lok die auf der linken Seite gewählte ersetzt wird
+STR_REPLACE_HELP :{BLACK}Diese Funktion ermöglicht es, einen Loktyp durch einen anderen ersetzen zu lassen, sobald ein Zug des ursprünglichen Typs das Depot besucht.
STR_REPLACE_REMOVE_WAGON :{BLACK}Waggon-Entfernung: {ORANGE}{SKIP}{STRING}
-STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Zwinge das automatische Ersetzen die Länge eines Zuges beizubehalten, indem (vorne beginnend) Waggons entfernt werden, falls das Ersetzen der Lokomotive den Zug verlängern würde.
-STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Ersetze: {ORANGE}{SKIP}{SKIP}{STRING}
+STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Ursprüngliche Länge des Zugs beibehalten, indem (vorne beginnend) Waggons entfernt werden, falls das Ersetzen der Lokomotive den Zug verlängern würde.
+STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Ersetzen: {ORANGE}{SKIP}{SKIP}{STRING}
STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK} EXPERIMENTELLE FUNKTION {}Umschalter für Lok- oder Waggonersetzung{}Waggons werden nur ersetzt, wenn der neue Waggon den selben Warentyp transportieren kann wie der alte. Dies wird beim Ersetzen eines jeden Waggons einzeln geprüft.
STR_RAIL_VEHICLE_NOT_AVAILABLE :{WHITE}Fahrzeug nicht verfügbar
STR_ROAD_VEHICLE_NOT_AVAILABLE :{WHITE}Fahrzeug nicht verfügbar
@@ -3173,23 +3161,23 @@
STR_ENGINES :Loks
STR_WAGONS :Waggons
-STR_MASS_STOP_DEPOT_TRAIN_TIP :{BLACK}Hier klicken um alle Züge im Depot anzuhalten
-STR_MASS_STOP_DEPOT_ROADVEH_TIP :{BLACK}Hier klicken um alle Fahrzeuge im Depot anzuhalten
-STR_MASS_STOP_DEPOT_SHIP_TIP :{BLACK}Hier klicken um alle Schiffe in der Werft anzuhalten
-STR_MASS_STOP_HANGAR_TIP :{BLACK}Hier klicken um alle Flugzeuge im Hangar anzuhalten
+STR_MASS_STOP_DEPOT_TRAIN_TIP :{BLACK}Alle Züge im Depot anhalten
+STR_MASS_STOP_DEPOT_ROADVEH_TIP :{BLACK}Alle Fahrzeuge im Depot anhalten
+STR_MASS_STOP_DEPOT_SHIP_TIP :{BLACK}Alle Schiffe in der Werft anhalten
+STR_MASS_STOP_HANGAR_TIP :{BLACK}Alle Flugzeuge im Hangar anhalten
-STR_MASS_START_DEPOT_TRAIN_TIP :{BLACK}Hier klicken um alle Züge im Depot zu starten
-STR_MASS_START_DEPOT_ROADVEH_TIP :{BLACK}Hier klicken um alle Fahrzeuge im Depot zu starten
-STR_MASS_START_DEPOT_SHIP_TIP :{BLACK}Hier klicken um alle Schiffe in der Werft zu starten
-STR_MASS_START_HANGAR_TIP :{BLACK}Hier klicken um alle Flugzeuge im Hangar zu starten
+STR_MASS_START_DEPOT_TRAIN_TIP :{BLACK}Alle Züge im Depot losschicken
+STR_MASS_START_DEPOT_ROADVEH_TIP :{BLACK}Alle Fahrzeuge im Depot losschicken
+STR_MASS_START_DEPOT_SHIP_TIP :{BLACK}Alle Schiffe in der Werft losschicken
+STR_MASS_START_HANGAR_TIP :{BLACK}Alle Flugzeuge im Hangar losschicken
-STR_MASS_STOP_LIST_TIP :{BLACK}Hier klicken um alle Fahrzeuge in der Liste anzuhalten
-STR_MASS_START_LIST_TIP :{BLACK}Hier klicken um alle Fahrzeuge in der Liste zu starten
+STR_MASS_STOP_LIST_TIP :{BLACK}Alle Fahrzeuge in der Liste anhalten
+STR_MASS_START_LIST_TIP :{BLACK}Alle Fahrzeuge in der Liste losschicken
STR_SHORT_DATE :{WHITE}{DATE_TINY}
-STR_SIGN_LIST_CAPTION :{WHITE}Schilderliste - {COMMA} Schild{P "" er}
+STR_SIGN_LIST_CAPTION :{WHITE}Schilderliste ({COMMA} Schild{P "" er})
-STR_ORDER_REFIT_FAILED :{WHITE}{STRING} {COMMA} wurde wegen Problemen beim Umrüsten angehalten
+STR_ORDER_REFIT_FAILED :{WHITE}{STRING} {COMMA} wurde aufgrund von Problemen beim Umrüsten angehalten
############ Lists rail types
@@ -3205,7 +3193,7 @@
STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}Kosten: {GOLD}{CURRENCY}{BLACK} Gewicht: {GOLD}{WEIGHT_S}
STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Geschwindigk.: {GOLD}{VELOCITY}{BLACK} Leistung: {GOLD}{POWER}
STR_PURCHASE_INFO_SPEED :{BLACK}Geschwindigkeit: {GOLD}{VELOCITY}
-STR_PURCHASE_INFO_RUNNINGCOST :{BLACK}Betriebskosten: {GOLD}{CURRENCY}/Jahr
+STR_PURCHASE_INFO_RUNNINGCOST :{BLACK}Betriebskosten: {GOLD}{CURRENCY} pro Jahr
STR_PURCHASE_INFO_CAPACITY :{BLACK}Kapazität: {GOLD}{CARGO} {STRING}
STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Entwurf: {GOLD}{NUM}{BLACK} Lebensdauer: {GOLD}{COMMA} Jahre
STR_PURCHASE_INFO_RELIABILITY :{BLACK}Max. Zuverlässigkeit: {GOLD}{COMMA}%
@@ -3229,7 +3217,7 @@
STR_RANDOM_SEED_HELP :{BLACK}Gib einen Zufallsstartwert ein
STR_LAND_GENERATOR :{BLACK}Landgenerator:
STR_TREE_PLACER :{BLACK}Baumalgorithmus
-STR_HEIGHTMAP_ROTATION :{BLACK}Kartendrehung:
+STR_HEIGHTMAP_ROTATION :{BLACK}Reliefkarte drehen:
STR_TERRAIN_TYPE :{BLACK}Landschaftstyp:
STR_QUANTITY_OF_SEA_LAKES :{BLACK}Gewässermenge:
STR_SMOOTHNESS :{BLACK}Weichheit:
@@ -3238,43 +3226,43 @@
STR_NUMBER_OF_TOWNS :{BLACK}Städteanzahl:
STR_NUMBER_OF_INDUSTRIES :{BLACK}Industriedichte:
STR_GENERATE_DATE :{BLACK}{DATE_LONG}
-STR_SNOW_LINE_UP :{BLACK}Höhenstufe der Schneegrenze um eins erhöhen
-STR_SNOW_LINE_DOWN :{BLACK}Höhenstufe der Schneegrenze um eins reduzieren
-STR_SNOW_LINE_QUERY_CAPT :{WHITE}Ändere die Höhe der Schneegrenze
-STR_START_DATE_QUERY_CAPT :{WHITE}Ändere Startjahr
+STR_SNOW_LINE_UP :{BLACK}Schneegrenze um eine Stufe erhöhen
+STR_SNOW_LINE_DOWN :{BLACK}Schneegrenze um eine Stufe senken
+STR_SNOW_LINE_QUERY_CAPT :{WHITE}Höhe der Schneegrenze ändern
+STR_START_DATE_QUERY_CAPT :{WHITE}Startjahr ändern
STR_HEIGHTMAP_SCALE_WARNING_CAPTION :{WHITE}Skalierungswarnung
-STR_HEIGHTMAP_SCALE_WARNING_MESSAGE :{YELLOW}Zu starke Skalierung der Karte ist nicht empfohlen. Trotzdem Generierung fortsetzen?
+STR_HEIGHTMAP_SCALE_WARNING_MESSAGE :{YELLOW}Zu starke Skalierung des Spielfeldes wird nicht empfohlen. Generierung dennoch fortsetzen?
STR_TOWN_LAYOUT_WARNING_CAPTION :{WHITE}Städtebauwarnung
-STR_TOWN_LAYOUT_WARNING_MESSAGE :{YELLOW}Der Stadtaufbau "keine weiteren Straßen" ist nicht empfohlen. Mit der Generierung fortfahren?
+STR_TOWN_LAYOUT_WARNING_MESSAGE :{YELLOW}Der Stadtaufbau "keine weiteren Straßen" wird nicht empfohlen. Mit der Generierung fortfahren?
STR_SNOW_LINE_HEIGHT_NUM :{NUM}
STR_HEIGHTMAP_NAME :{BLACK}Reliefkartenname:
-STR_HEIGHTMAP_SIZE :{BLACK}Größe: {ORANGE}{NUM} x {NUM}
-STR_GENERATION_WORLD :{WHITE}Generiere Welt...
+STR_HEIGHTMAP_SIZE :{BLACK}Größe: {ORANGE}{NUM} × {NUM}
+STR_GENERATION_WORLD :{WHITE}Spielfeld wird generiert...
STR_GENERATION_ABORT :{BLACK}Abbrechen
-STR_GENERATION_ABORT_CAPTION :{WHITE}Weltgenerierung abbrechen
-STR_GENERATION_ABORT_MESSAGE :{YELLOW}Soll die Weltgenerierung wirklich abgebrochen werden?
+STR_GENERATION_ABORT_CAPTION :{WHITE}Spielfeldgenerierung abbrechen
+STR_GENERATION_ABORT_MESSAGE :{YELLOW}Soll die Spielfeldgenerierung wirklich abgebrochen werden?
STR_PROGRESS :{WHITE}{NUM}% abgeschlossen
STR_GENERATION_PROGRESS :{BLACK}{NUM} / {NUM}
-STR_WORLD_GENERATION :{BLACK}Welterstellung
+STR_WORLD_GENERATION :{BLACK}Spielfeldgenerierung
STR_TREE_GENERATION :{BLACK}Baumerzeugung
-STR_UNMOVABLE_GENERATION :{BLACK}Erzeuge unbewegbare Objekte
-STR_CLEARING_TILES :{BLACK}Erzeuge leere, felsige Landschaft
-STR_SETTINGUP_GAME :{BLACK}Bereite Spiel vor
-STR_PREPARING_TILELOOP :{BLACK}Belebe Welt
-STR_PREPARING_GAME :{BLACK}Bereite Spiel vor
-STR_DIFFICULTY_TO_CUSTOM :{WHITE}Diese Aktion änderte den Schwierigkeitsgrad zu individuell
+STR_UNMOVABLE_GENERATION :{BLACK}Unbewegliche Objekte werden erzeugt
+STR_CLEARING_TILES :{BLACK}Leere, felsige Landschaft wird erzeugt
+STR_SETTINGUP_GAME :{BLACK}Spiel wird vorbereitet
+STR_PREPARING_TILELOOP :{BLACK}Spielfeld wird belebt
+STR_PREPARING_GAME :{BLACK}Spiel wird vorbereitet
+STR_DIFFICULTY_TO_CUSTOM :{WHITE}Hierdurch wurde der Schwierigkeitsgrad auf "benutzerdefiniert" gestellt.
STR_SE_FLAT_WORLD :{WHITE}Flache Landschaft
-STR_SE_FLAT_WORLD_TIP :{BLACK}Erzeuge flache Landschaft
+STR_SE_FLAT_WORLD_TIP :{BLACK}Flache Landschaft erzeugen
STR_SE_RANDOM_LAND :{WHITE}Zufällige Landschaft
-STR_SE_NEW_WORLD :{BLACK}Erzeuge neues Szenario
+STR_SE_NEW_WORLD :{BLACK}Neues Szenario erzeugen
STR_SE_CAPTION :{WHITE}Szenariotyp
-STR_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Höhenstufe des flachen Landes um eins reduzieren
-STR_FLAT_WORLD_HEIGHT_UP :{BLACK}Höhenstufe das flachen Landes um eins erhöhen
-STR_FLAT_WORLD_HEIGHT_QUERY_CAPT :{WHITE}Ändere die Höhenstufe des flachen Landes
+STR_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Flachland um eine Stufe senken
+STR_FLAT_WORLD_HEIGHT_UP :{BLACK}Flachland um eine Stufe erhöhen
+STR_FLAT_WORLD_HEIGHT_QUERY_CAPT :{WHITE}Flachlandhöhe ändern
STR_FLAT_WORLD_HEIGHT :{BLACK}Höhe des Flachlands:
STR_FLAT_WORLD_HEIGHT_NUM :{NUM}
-STR_SMALLMAP_CENTER :{BLACK}Zentriere Zusatzansicht auf akutelle Position
+STR_SMALLMAP_CENTER :{BLACK}Zusatzansicht zur akutellen Position scrollen
########### String for new airports
STR_SMALL_AIRPORT :{BLACK}klein
@@ -3295,9 +3283,9 @@
############ Tooltip measurment
STR_MEASURE_LENGTH :{BLACK}Länge: {NUM}
-STR_MEASURE_AREA :{BLACK}Gebiet: {NUM} x {NUM}
+STR_MEASURE_AREA :{BLACK}Gebiet: {NUM} × {NUM}
STR_MEASURE_LENGTH_HEIGHTDIFF :{BLACK}Länge: {NUM}{}Höhenunterschied: {NUM} m
-STR_MEASURE_AREA_HEIGHTDIFF :{BLACK}Gebiet: {NUM} x {NUM}{}Höhenunterschied: {NUM} m
+STR_MEASURE_AREA_HEIGHTDIFF :{BLACK}Gebiet: {NUM} × {NUM}{}Höhenunterschied: {NUM} m
############ Date formatting
STR_DATE_TINY :{STRING}-{STRING}-{NUM}
@@ -3306,19 +3294,19 @@
########
-STR_FEEDER_CARGO_VALUE :{BLACK}Überweise Geld: {LTBLUE}{CURRENCY}
+STR_FEEDER_CARGO_VALUE :{BLACK}Transfer-Kredit: {LTBLUE}{CURRENCY}
STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD :{WHITE}...diese Straße ist in kommunaler Trägerschaft
STR_DRIVE_THROUGH_ERROR_DIRECTION :{WHITE}...Straße verläuft in die falsche Richtung
STR_TRANSPARENCY_TOOLB :{WHITE}Transparenzoptionen
-STR_TRANSPARENT_SIGNS_DESC :{BLACK}Verändere die Transparenz für Stationsschilder
-STR_TRANSPARENT_TREES_DESC :{BLACK}Verändere die Transparenz für Bäume
-STR_TRANSPARENT_HOUSES_DESC :{BLACK}Verändere die Transparenz für Häuser
-STR_TRANSPARENT_INDUSTRIES_DESC :{BLACK}Verändere die Transparenz für Industrien
-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
+STR_TRANSPARENT_SIGNS_DESC :{BLACK}Transparenz für Stationsschilder einstellen
+STR_TRANSPARENT_TREES_DESC :{BLACK}Transparenz für Bäume einstellen
+STR_TRANSPARENT_HOUSES_DESC :{BLACK}Transparenz für Häuser einstellen
+STR_TRANSPARENT_INDUSTRIES_DESC :{BLACK}Transparenz für Industrien einstellen
+STR_TRANSPARENT_BUILDINGS_DESC :{BLACK}Transparenz für Gebäude wie Bahnhöfe, Depots, Wegpunkte und Oberleitung einstellen
+STR_TRANSPARENT_BRIDGES_DESC :{BLACK}Transparenz für Brücken einstellen
+STR_TRANSPARENT_STRUCTURES_DESC :{BLACK}Transparenz für Bauten wie Leuchttürme und Antennen, evtl. in der Zukunft auch für Sehenswürdigkeiten, einstellen
+STR_TRANSPARENT_LOADING_DESC :{BLACK}Transparenz für Ladestandsanzeige einstellen
STR_PERCENT_UP_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}
STR_PERCENT_UP :{WHITE}{NUM}%{UPARROW}
@@ -3339,33 +3327,28 @@
STR_GROUP_DEFAULT_SHIPS :Ungruppierte Schiffe
STR_GROUP_DEFAULT_AIRCRAFTS :Ungruppierte 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_ADD_SHARED_VEHICLE :Gemeinsam genutzte Fahrzeuge hinzufügen
+STR_GROUP_REMOVE_ALL_VEHICLES :Alle Fahrzeuge entfernen
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_GROUP_REPLACE_CAPTION :{WHITE}Fahrzeuge in "{GROUP}" ersetzen
-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_GROUP_CAN_T_CREATE :{WHITE}Gruppe kann nicht erstellt werden...
+STR_GROUP_CAN_T_DELETE :{WHITE}Gruppe kann nicht gelöscht werden...
+STR_GROUP_CAN_T_RENAME :{WHITE}Gruppe kann nicht umbenannt werden...
+STR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Entfernen aller Fahrzeuge dieser Gruppe nicht möglich...
+STR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Fahrzeug kann nicht zu dieser Gruppe hinzugefügt werden...
+STR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Gemeinsam genutztes Fahrzeug kann nicht zur Gruppe hinzugefügt werden...
-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})
+STR_GROUPS_CLICK_ON_GROUP_FOR_TIP :{BLACK}Gruppen - Klick auf eine Gruppe zeigt Liste aller Fahrzeuge der Gruppe an
+STR_GROUP_CREATE_TIP :{BLACK}Neue Gruppe erstellen
+STR_GROUP_DELETE_TIP :{BLACK}Ausgewählte Gruppe löschen
+STR_GROUP_RENAME_TIP :{BLACK}Ausgewählte Gruppe umbenennen
+STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}Diese Gruppe von der automatischen Fahrzeugersetzung ausschließen
STR_COMPANY_NAME :{COMPANY}
STR_ENGINE_NAME :{ENGINE}
@@ -3374,15 +3357,15 @@
STR_SIGN_NAME :{SIGN}
STR_VEHICLE_NAME :{VEHICLE}
-STR_NAME_MUST_BE_UNIQUE :{WHITE}Name muss eindeutig sein
+STR_NAME_MUST_BE_UNIQUE :{WHITE}Name bereits vergeben
#### Improved sign GUI
-STR_NEXT_SIGN_TOOLTIP :{BLACK}Gehe zum nächsten Schild
-STR_PREVIOUS_SIGN_TOOLTIP :{BLACK}Gehe zum vorherigen Schild
+STR_NEXT_SIGN_TOOLTIP :{BLACK}Zum nächsten Schild wechseln
+STR_PREVIOUS_SIGN_TOOLTIP :{BLACK}Zum vorherigen Schild wechseln
########
STR_FUND_NEW_INDUSTRY :{BLACK}Finanzieren
-STR_PROSPECT_NEW_INDUSTRY :{BLACK}Erforsche
+STR_PROSPECT_NEW_INDUSTRY :{BLACK}Prospektieren
STR_BUILD_NEW_INDUSTRY :{BLACK}Bauen
-STR_INDUSTRY_SELECTION_HINT :{BLACK}Wähle die gewünschte Industrie aus der Liste
+STR_INDUSTRY_SELECTION_HINT :{BLACK}Gewünschte Industrie aus der Liste auswählen
--- a/src/lang/hungarian.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/hungarian.txt Sun Sep 02 11:17:33 2007 +0000
@@ -12,7 +12,6 @@
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}{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}
@@ -1329,7 +1328,7 @@
STR_BUOY_IS_IN_USE :{WHITE}... a bóját használják!
-STR_LANDINFO_COORDS :{BLACK}Koordináták: {LTBLUE}{NUM}x{NUM} ({STRING})
+STR_LANDINFO_COORDS :{BLACK}Koordináták: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Nem lehet eltávolítani az állomás részét...
STR_CANT_CONVERT_RAIL :{WHITE}Itt nem lehet átalakítani a sínt...
@@ -1440,34 +1439,23 @@
STR_NETWORK_PASSWORD_TIP :{BLACK}Védd le a játékodat jelszóval ha nem akarod hogy mások csatlakozzanak
STR_NETWORK_SELECT_MAP :{BLACK}Válassz egy térképet:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Melyik terképen akarsz játszani?
-STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Maximum hány játékos lehet:
-STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Válaszd ki hány játékos kapcsolódhat maximum. Nem szükséges pont ennyi embernek éppen kapcsolódva lennie.
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LAN_INTERNET_COMBO :{BLACK}{SKIP}{STRING}
STR_NETWORK_LAN :Helyi hálózat
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :Hálózat / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (reklámoz)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :0 játékos
-STR_NETWORK_1_PLAYERS :1 játékos
-STR_NETWORK_2_PLAYERS :2 játékos
-STR_NETWORK_3_PLAYERS :3 játékos
-STR_NETWORK_4_PLAYERS :4 játékos
-STR_NETWORK_5_PLAYERS :5 játékos
-STR_NETWORK_6_PLAYERS :6 játékos
-STR_NETWORK_7_PLAYERS :7 játékos
-STR_NETWORK_8_PLAYERS :8 játékos
-STR_NETWORK_9_PLAYERS :9 játékos
-STR_NETWORK_10_PLAYERS :10 játékos
+STR_NETWORK_CLIENTS_SELECT :{BLACK}{SKIP}{SKIP}{NUM} kliens
+STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Maximum hány játékos lehet:
+STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Válaszd ki hány játékos kapcsolódhat maximum. Nem szükséges pont ennyi embernek éppen kapcsolódva lennie.
+STR_NETWORK_COMPANIES_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{NUM} vállalat
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Max cégszám:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}A cégek maximális száma
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_SPECTATORS_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{NUM} megfigyelő
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Max megfigyelő:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}A megfigyelők maximális száma
-STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Beszélt nyelv:
STR_NETWORK_LANGUAGE_TIP :{BLACK}A többi játékos megtudhatja milyen nyelven beszélnek a szerveren.
-STR_NETWORK_COMBO5 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LANGUAGE_COMBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}Játék elindítása
STR_NETWORK_START_GAME_TIP :{BLACK}Új hálózati játék kezdése véletlen térképpel vagy misszióval
STR_NETWORK_LOAD_GAME :{BLACK}Játék betöltése
@@ -3464,11 +3452,6 @@
STR_GROUP_RENAME_TIP :{BLACK}Kijelölt csoport átnevezése
STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}Csoport automata csere alóli mentességének beállításához kattints ide
-STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Idei profit: {GREEN}{CURRENCY} {BLACK}(tavalyi: {GREEN}{CURRENCY}{BLACK})
-STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Idei profit: {RED}{CURRENCY} {BLACK}(tavalyi: {GREEN}{CURRENCY}{BLACK})
-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}
--- a/src/lang/icelandic.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/icelandic.txt Sun Sep 02 11:17:33 2007 +0000
@@ -10,7 +10,6 @@
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}{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}
@@ -1213,7 +1212,6 @@
STR_BUOY_IS_IN_USE :{WHITE}... bauja í notkun!
-STR_LANDINFO_COORDS :{BLACK}Hnit: {LTBLUE}{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Get ekki fjarlægt hluta af stöð...
STR_CANT_CONVERT_RAIL :{WHITE}Get ekki breytt lestarteini...
@@ -1326,32 +1324,16 @@
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Hvaða kort viltu spila?
STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Hámarksfjöldi notenda:
STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Veldu hámarksfjölda notenda. Ekki þarf að fylla öll pláss
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LAN :Staðarnet
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :Staðarnet / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (auglýsa)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :0 leikmenn
-STR_NETWORK_1_PLAYERS :1 leikmaður
-STR_NETWORK_2_PLAYERS :2 leikmenn
-STR_NETWORK_3_PLAYERS :3 leikmenn
-STR_NETWORK_4_PLAYERS :4 leikmenn
-STR_NETWORK_5_PLAYERS :5 leikmenn
-STR_NETWORK_6_PLAYERS :6 leikmenn
-STR_NETWORK_7_PLAYERS :7 leikmenn
-STR_NETWORK_8_PLAYERS :8 leikmenn
-STR_NETWORK_9_PLAYERS :9 leikmenn
-STR_NETWORK_10_PLAYERS :10 leikmenn
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Hámarksfjöldi fyrirtækja:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Takmarka fjölda fyrirtækja á vefþjóni
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Hámarksfjöldi áhorfanda:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Takmarka fjölda áhorfanda á vefþjóninum
-STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Tungumál:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Aðrir notendur munu vita hvaða tungumál er talað á þjóninum
-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}Hefja leik
STR_NETWORK_START_GAME_TIP :{BLACK}Hefja nýjan netleik í sérvöldu korti eða landslagi af handahófi
STR_NETWORK_LOAD_GAME :{BLACK}Hlaða leik
@@ -1554,7 +1536,6 @@
STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :Lestarteinn með venjulegum ljósum
STR_RAILROAD_TRACK_WITH_PRESIGNALS :Lestarteinn með forljósum
STR_RAILROAD_TRACK_WITH_EXITSIGNALS :Lestarteinn með útljósum
-STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Lestarteinn með samljósum
--- a/src/lang/italian.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/italian.txt Sun Sep 02 11:17:33 2007 +0000
@@ -1,6 +1,6 @@
##name Italian
##ownname Italiano
-##isocode it
+##isocode it_IT
##plural 0
##case ms mp fs fp
##gender m f
@@ -13,7 +13,6 @@
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}{CURRENCY}
-STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Richiesto terreno pianeggiante
STR_0008_WAITING :{BLACK}In attesa: {WHITE}{STRING}
@@ -1265,7 +1264,7 @@
STR_BUOY_IS_IN_USE :{WHITE}...la boa è in uso!
-STR_LANDINFO_COORDS :{BLACK}Coordinate: {LTBLUE}{NUM}x{NUM} ({STRING})
+STR_LANDINFO_COORDS :{BLACK}Coordinate: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Impossibile rimuovere parte della stazione...
STR_CANT_CONVERT_RAIL :{WHITE}Impossibile convertire il tipo di rotaie qui...
@@ -1376,34 +1375,23 @@
STR_NETWORK_PASSWORD_TIP :{BLACK}Protegge la partita con una password in modo che non sia accessibile pubblicamente
STR_NETWORK_SELECT_MAP :{BLACK}Seleziona una mappa:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Con quale mappa vuoi giocare?
-STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Max client:
-STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Imposta il numero massimo di client. Non tutti i posti dovranno essere occupati
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LAN_INTERNET_COMBO :{BLACK}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :LAN / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (pubblicizza)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :0 giocatori
-STR_NETWORK_1_PLAYERS :1 giocatore
-STR_NETWORK_2_PLAYERS :2 giocatori
-STR_NETWORK_3_PLAYERS :3 giocatori
-STR_NETWORK_4_PLAYERS :4 giocatori
-STR_NETWORK_5_PLAYERS :5 giocatori
-STR_NETWORK_6_PLAYERS :6 giocatori
-STR_NETWORK_7_PLAYERS :7 giocatori
-STR_NETWORK_8_PLAYERS :8 giocatori
-STR_NETWORK_9_PLAYERS :9 giocatori
-STR_NETWORK_10_PLAYERS :10 giocatori
+STR_NETWORK_CLIENTS_SELECT :{BLACK}{SKIP}{SKIP}{NUM} client
+STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Max client:
+STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Imposta il numero massimo di client. Non tutti i posti dovranno essere occupati
+STR_NETWORK_COMPANIES_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{NUM} compagni{P a e}
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Max compagnie:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Limita il server a un certo numero di compagnie
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_SPECTATORS_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{NUM} spettator{P e i}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Max spettatori:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Limita il server a un certo numero di spettatori
-STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Lingua parlata:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Fa spaere agli altri giocatori quale lingua è parlata sul server
-STR_NETWORK_COMBO5 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LANGUAGE_COMBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}Avvia partita
STR_NETWORK_START_GAME_TIP :{BLACK}Inizia una nuova partita in rete con una mappa casuale o uno scenario
STR_NETWORK_LOAD_GAME :{BLACK}Carica partita
@@ -3363,11 +3351,6 @@
STR_GROUP_RENAME_TIP :{BLACK}Rinomina il gruppo selezionato
STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}Fare clic per proteggere questo gruppo dal rimpiazzo automatico
-STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Profitto quest'anno: {GREEN}{CURRENCY} {BLACK}(anno scorso: {GREEN}{CURRENCY}{BLACK})
-STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Profitto quest'anno: {RED}{CURRENCY} {BLACK}(anno scorso: {GREEN}{CURRENCY}{BLACK})
-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}
--- a/src/lang/japanese.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/japanese.txt Sun Sep 02 11:17:33 2007 +0000
@@ -11,7 +11,6 @@
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}地図の端に近すぎます
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}資金が足りません。{CURRENCY}がかかります
STR_0004 :{WHITE}{CURRENCY}
-STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}平地が必要です
STR_0008_WAITING :{BLACK}到着待ち:{WHITE}{STRING}
@@ -1263,7 +1262,7 @@
STR_BUOY_IS_IN_USE :{WHITE}...ブイは使用中です!
-STR_LANDINFO_COORDS :{BLACK}座標:{LTBLUE}{NUM}x{NUM}({STRING})
+STR_LANDINFO_COORDS :{BLACK}座標:{LTBLUE}{NUM}x{NUM}x{NUM}({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}駅の部分が破壊できません...
STR_CANT_CONVERT_RAIL :{WHITE}ここに線路の種類が交換できません...
@@ -1374,34 +1373,23 @@
STR_NETWORK_PASSWORD_TIP :{BLACK}ゲームをパスワードで保護することができます。正しいパスワードを入力しないと、接続できません。
STR_NETWORK_SELECT_MAP :{BLACK}地図を選択:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}プレイするマップを選択してください
-STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}最大接続数:
-STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}接続できるコンピュータの最大数を選択します。
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LAN_INTERNET_COMBO :{BLACK}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :インターネット
STR_NETWORK_LAN_INTERNET :LAN/インターネット
STR_NETWORK_INTERNET_ADVERTISE :インターネット(公開)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :0人のプレヤー
-STR_NETWORK_1_PLAYERS :1人のプレヤー
-STR_NETWORK_2_PLAYERS :2人のプレヤー
-STR_NETWORK_3_PLAYERS :3人のプレヤー
-STR_NETWORK_4_PLAYERS :4人のプレヤー
-STR_NETWORK_5_PLAYERS :5人のプレヤー
-STR_NETWORK_6_PLAYERS :6人のプレヤー
-STR_NETWORK_7_PLAYERS :7人のプレヤー
-STR_NETWORK_8_PLAYERS :8人のプレヤー
-STR_NETWORK_9_PLAYERS :9人のプレヤー
-STR_NETWORK_10_PLAYERS :10人のプレヤー
+STR_NETWORK_CLIENTS_SELECT :{BLACK}{SKIP}{SKIP}クライアント{NUM}人
+STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}最大接続数:
+STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}接続できるコンピュータの最大数を選択します。
+STR_NETWORK_COMPANIES_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}会社{NUM}つ
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}最高交通会社数:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}サーバ上の会社上限を指定します
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_SPECTATORS_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}観客者{NUM}人
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}最高傍観者人数:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}サーバ上の傍観者上限を指定します
-STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}言語:
STR_NETWORK_LANGUAGE_TIP :{BLACK}サーバ上の主の言語を表示します
-STR_NETWORK_COMBO5 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LANGUAGE_COMBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}ゲームを開始
STR_NETWORK_START_GAME_TIP :{BLACK}ランダムな地図もしくはシナリオを用いて新規ネットワークゲームを開始します
STR_NETWORK_LOAD_GAME :{BLACK}ゲームを開く
@@ -3361,11 +3349,6 @@
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}
--- a/src/lang/korean.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/korean.txt Sun Sep 02 11:17:33 2007 +0000
@@ -12,7 +12,6 @@
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}맵 가장자리와 너무 가깝습니다!
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}재정이 부족합니다 - {CURRENCY} 이(가) 필요합니다
STR_0004 :{WHITE}{CURRENCY}
-STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}평지가 필요합니다!
STR_0008_WAITING :{BLACK}대기: {WHITE}{STRING}
@@ -1264,7 +1263,6 @@
STR_BUOY_IS_IN_USE :{WHITE}...사용중인 부이입니다!
-STR_LANDINFO_COORDS :{BLACK}고도 일치화: {LTBLUE}{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}역의 일부를 제거할 수 없습니다...
STR_CANT_CONVERT_RAIL :{WHITE}이곳의 철도 타입을 바꿀 수 없습니다...
@@ -1377,32 +1375,16 @@
STR_NETWORK_SELECT_MAP_TIP :{BLACK}플레이할 맵을 선택합니다.
STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}최대 접속자 수:
STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}최대 접속자수를 선택합니다. 모든 슬롯이 차있을 필요는 없습니다.
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :인터넷
STR_NETWORK_LAN_INTERNET :LAN / 인터넷
STR_NETWORK_INTERNET_ADVERTISE :인터넷 (광고 허용)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :허용 안함
-STR_NETWORK_1_PLAYERS :1명
-STR_NETWORK_2_PLAYERS :2명
-STR_NETWORK_3_PLAYERS :3명
-STR_NETWORK_4_PLAYERS :4명
-STR_NETWORK_5_PLAYERS :5명
-STR_NETWORK_6_PLAYERS :6명
-STR_NETWORK_7_PLAYERS :7명
-STR_NETWORK_8_PLAYERS :8명
-STR_NETWORK_9_PLAYERS :9명
-STR_NETWORK_10_PLAYERS :10명
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}최대 회사수:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}서버의 회사의 수를 제한합니다
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}최대 관전자수:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}게임을 관전하는 접속자의 수를 제한합니다
-STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}대화 언어:
STR_NETWORK_LANGUAGE_TIP :{BLACK}서버에서 주로 사용하는 언어를 고르십시오.
-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}서버 열기
STR_NETWORK_START_GAME_TIP :{BLACK}무작위 맵이나 시나리오로 새로운 네트워크 게임을 시작합니다.
STR_NETWORK_LOAD_GAME :{BLACK}맵 불러오기
@@ -1630,13 +1612,9 @@
STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :일반 신호등이 설치된 철도
STR_RAILROAD_TRACK_WITH_PRESIGNALS :PRE 신호등이 설치된 철도
STR_RAILROAD_TRACK_WITH_EXITSIGNALS :출구 신호등이 설치된 철도
-STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :결합 신호등이 설치된 철도
STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS :일반 신호등과 PRE신호등이 설치된 철도
STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :일반 신호등과 출구신호등이 설치된 철도
-STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :일반 신호등과 결합신호등이 설치된 철도
STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS :PRE 신호등과 출구신호등이 설치된 철도
-STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :PRE 신호등과 결합신호등이 설치된 철도
-STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :출구 신호등과 결합신호등이 설치된 철도
STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}먼저 기차 정거장을 제거해야 합니다
@@ -3362,10 +3340,6 @@
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}
--- a/src/lang/lithuanian.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/lithuanian.txt Sun Sep 02 11:17:33 2007 +0000
@@ -11,7 +11,6 @@
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}{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}
@@ -1245,7 +1244,6 @@
STR_BUOY_IS_IN_USE :{WHITE}...pluduras naudojamas!
-STR_LANDINFO_COORDS :{BLACK}Koordinates: {LTBLUE}{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Neimanoma pasalinti stoties dalies...
STR_CANT_CONVERT_RAIL :{WHITE}Neimanoma cia pakeisti begio tipo...
@@ -1358,32 +1356,16 @@
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Kuriame zemelapyje norite zaisti?
STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Maksimalus klientu skaicius:
STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Pasirinkite maksimalu klientu skaiciu. Nebutinai visos jungtys turi buti uzpildytos
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LAN :Vietinis tinklas
STR_NETWORK_INTERNET :Internetas
STR_NETWORK_LAN_INTERNET :Vietinis tinklas/ Internetas
STR_NETWORK_INTERNET_ADVERTISE :Internetas (visiems)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :0 zaideju
-STR_NETWORK_1_PLAYERS :1 zaidejas
-STR_NETWORK_2_PLAYERS :2 zaidejai
-STR_NETWORK_3_PLAYERS :3 zaidejai
-STR_NETWORK_4_PLAYERS :4 zaidejai
-STR_NETWORK_5_PLAYERS :5 zaidejai
-STR_NETWORK_6_PLAYERS :6 zaidejai
-STR_NETWORK_7_PLAYERS :7 zaidejai
-STR_NETWORK_8_PLAYERS :8 zaidejai
-STR_NETWORK_9_PLAYERS :9 zaidejai
-STR_NETWORK_10_PLAYERS :10 zaideju
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Maksimum kompaniju:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Riboti serveri iki tam tikro skaiciaus kompaniju
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Maksimum ziurovu:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Riboti serveri iki tam tikro skaiciaus ziurovu
-STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Kalba:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Kiti zaidejai zinos kokia kalba kalbama serveryje
-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}Pradeti zaidima
STR_NETWORK_START_GAME_TIP :{BLACK}Predeti nauja zaidima tinkle (atsitiktinis zemelapis ar scenarijus)
STR_NETWORK_LOAD_GAME :{BLACK}Atverti zaidima
@@ -1586,7 +1568,6 @@
STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :Gelezinkelio begiai su paprastais sviesoforais
STR_RAILROAD_TRACK_WITH_PRESIGNALS :Gelezinkelio begiai su pre-sviesoforais
STR_RAILROAD_TRACK_WITH_EXITSIGNALS :Gelezinkelio begiai su exit-sviesoforais
-STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Gelezinkelio begiai su combo-sviesoforais
--- a/src/lang/norwegian_bokmal.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/norwegian_bokmal.txt Sun Sep 02 11:17:33 2007 +0000
@@ -11,7 +11,6 @@
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}{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}
@@ -1244,7 +1243,6 @@
STR_BUOY_IS_IN_USE :{WHITE}...bøye er i bruk!
-STR_LANDINFO_COORDS :{BLACK}Koordinater: {LTBLUE}{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Kan ikke fjerne del av stasjonen...
STR_CANT_CONVERT_RAIL :{WHITE}Kan ikke konvertere jernbanetype her...
@@ -1357,32 +1355,16 @@
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Hvilket kart vil du spille?
STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Maksimalt antall tillatte klienter
STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Velg maksimalt antall klienter. Alle plassene trenger ikke bli tatt.
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internett
STR_NETWORK_LAN_INTERNET :LAN / Internett
STR_NETWORK_INTERNET_ADVERTISE :Internett (annonser)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :0 spillere
-STR_NETWORK_1_PLAYERS :1 spiller
-STR_NETWORK_2_PLAYERS :2 spillere
-STR_NETWORK_3_PLAYERS :3 spillere
-STR_NETWORK_4_PLAYERS :4 spillere
-STR_NETWORK_5_PLAYERS :5 spillere
-STR_NETWORK_6_PLAYERS :6 spillere
-STR_NETWORK_7_PLAYERS :7 spillere
-STR_NETWORK_8_PLAYERS :8 spillere
-STR_NETWORK_9_PLAYERS :9 spillere
-STR_NETWORK_10_PLAYERS :10 spillere
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Maks. antall firmaer:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Begrens tjeneren til et bestemt antall firmaer
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Maks antall tilskuere
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Begrens tjeneren til et bestemt antall tilskuere
-STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Språk snakket på tjeneren:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Andre spillere skal kunne vite hvilket språk man snakker på denne tjeneren.
-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}Start spill
STR_NETWORK_START_GAME_TIP :{BLACK}Start et nytt nettverksspill fra en tilfeldig bane, eller scenario
STR_NETWORK_LOAD_GAME :{BLACK}Last spill
@@ -1602,13 +1584,9 @@
STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :Jernbanespor med normale signaler
STR_RAILROAD_TRACK_WITH_PRESIGNALS :Jernbanespor med for-signaler
STR_RAILROAD_TRACK_WITH_EXITSIGNALS :Jernbanespor med forlat-signaler
-STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Jernbanespor med kombinerte signaler
STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS :Togbane med normale og pre-signaler
STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :Togbane med normale og utgangs-signaler
-STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :Togbane med normale og kombinasjons-signaler
STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS :Togbane med pre- og utgangs-signaler
-STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :Togbane med pre- og kombinasjons-signaler
-STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Togbane med utgangs- og kombinasjons-signaler
STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Må fjerne togbanestasjon først
@@ -3266,10 +3244,6 @@
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}
--- a/src/lang/norwegian_nynorsk.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/norwegian_nynorsk.txt Sun Sep 02 11:17:33 2007 +0000
@@ -12,7 +12,6 @@
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}{CURRENCY}
-STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Flatt land er naudsynt
STR_0008_WAITING :{BLACK}Ventar: {WHITE}{STRING}
@@ -1264,7 +1263,6 @@
STR_BUOY_IS_IN_USE :{WHITE}...bøye er i bruk!
-STR_LANDINFO_COORDS :{BLACK}Koordinatar: {LTBLUE}{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Kan ikkje fjerne del av stasjonen...
STR_CANT_CONVERT_RAIL :{WHITE}Kan ikkje konvertere jernbanetype her...
@@ -1377,32 +1375,16 @@
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Kva kart vil du spele?
STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Maksimalt antal tillatne klientar
STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Vel maksimalt antal klientar. Alle plassane treng ikkje å verte tekne
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internett
STR_NETWORK_LAN_INTERNET :LAN / Internett
STR_NETWORK_INTERNET_ADVERTISE :Internett (annonser)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :0 spelarar
-STR_NETWORK_1_PLAYERS :1 spelar
-STR_NETWORK_2_PLAYERS :2 spelarar
-STR_NETWORK_3_PLAYERS :3 spelarar
-STR_NETWORK_4_PLAYERS :4 spelarar
-STR_NETWORK_5_PLAYERS :5 spelarar
-STR_NETWORK_6_PLAYERS :6 spelarar
-STR_NETWORK_7_PLAYERS :7 spelarar
-STR_NETWORK_8_PLAYERS :8 spelarar
-STR_NETWORK_9_PLAYERS :9 spelarar
-STR_NETWORK_10_PLAYERS :10 spelarar
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Maks. antal firma:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Begrens tenaren til eit visst antal firma
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Maks antal tilskodarar
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Begrens tenaren til eit visst antal tilskodarar
-STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Språk som vert tala på tenaren:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Andre spelarar skal vete kva språk ein talar på denne tenaren
-STR_NETWORK_COMBO5 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}Start spel
STR_NETWORK_START_GAME_TIP :{BLACK}Start eit nytt nettverksspel frå ein tilfeldig bane, eller eit scenario
STR_NETWORK_LOAD_GAME :{BLACK}Last spel
@@ -1630,13 +1612,9 @@
STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :Jernbanespor med normale signal
STR_RAILROAD_TRACK_WITH_PRESIGNALS :Jernbanespor med for-signal
STR_RAILROAD_TRACK_WITH_EXITSIGNALS :Jernbanespor med ut-signal
-STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Jernbanespor med samansette signal
STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS :Jernbanespor med normale- og pre-signal
STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :Jernbanespor med normale- og exit-spor
-STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :Jernbanespor med normale- og blandingssignal
STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS :Jernbanespor med pre- og exit-signal
-STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :Jernbanespor med pre- og blandingssignal
-STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Jernbanespor med exit- og blandingssignal
STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Må fjerne togstasjon først
@@ -3362,10 +3340,6 @@
STR_GROUP_RENAME_TIP :{BLACK}Gje den valde gruppa nytt namn
STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}Klikk for å beskytte denne gruppa frå å global automatisk erstatning
-STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Forteneste i år: {GREEN}{CURRENCY} {BLACK}(førre år: {GREEN}{CURRENCY}{BLACK})
-STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Forteneste i år: {RED}{CURRENCY} {BLACK}(førre år: {GREEN}{CURRENCY}{BLACK})
-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})
STR_COMPANY_NAME :{COMPANY}
STR_ENGINE_NAME :{ENGINE}
--- a/src/lang/piglatin.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/piglatin.txt Sun Sep 02 11:17:33 2007 +0000
@@ -11,7 +11,6 @@
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}{CURRENCY}
-STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Atflay andlay equiredray
STR_0008_WAITING :{BLACK}Aitingway: {WHITE}{STRING}
@@ -1263,7 +1262,6 @@
STR_BUOY_IS_IN_USE :{WHITE}...uoybay isway inway useway!
-STR_LANDINFO_COORDS :{BLACK}Oordinatescay: {LTBLUE}{NUM}xay{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}An'tcay emoveray artpay ofway ationstay...
STR_CANT_CONVERT_RAIL :{WHITE}An'tcay onvertcay ailtyperay erehay...
@@ -1376,32 +1374,16 @@
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Ichwhay apmay oday ouyay antway otay ayplay?
STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Axmay ientsclay:
STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Oosechay ethay aximummay umbernay ofway ientsclay. Otnay allway otsslay eednay otay ebay illedfay
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LAN :LANay
STR_NETWORK_INTERNET :Internetway
STR_NETWORK_LAN_INTERNET :LANay / Internetway
STR_NETWORK_INTERNET_ADVERTISE :Internetway (advertiseway)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :0 ayersplay
-STR_NETWORK_1_PLAYERS :1 ayerplay
-STR_NETWORK_2_PLAYERS :2 ayersplay
-STR_NETWORK_3_PLAYERS :3 ayersplay
-STR_NETWORK_4_PLAYERS :4 ayersplay
-STR_NETWORK_5_PLAYERS :5 ayersplay
-STR_NETWORK_6_PLAYERS :6 ayersplay
-STR_NETWORK_7_PLAYERS :7 ayersplay
-STR_NETWORK_8_PLAYERS :8 ayersplay
-STR_NETWORK_9_PLAYERS :9 ayersplay
-STR_NETWORK_10_PLAYERS :10 ayersplay
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Axmay ompaniescay:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Imitlay ethay erversay otay away ertaincay amountway ofway ompaniescay
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Axmay ectatorsspay:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Imitlay ethay erversay otay away ertaincay amountway ofway ectatorsspay
-STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Anguagelay okenspay:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Otherway ayersplay illway owknay ichwhay anguagelay isway okenspay onway ethay erversay
-STR_NETWORK_COMBO5 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}Artstay Amegay
STR_NETWORK_START_GAME_TIP :{BLACK}Artstay away ewnay etworknay amegay omfray away andomray apmay, orway enarioscay
STR_NETWORK_LOAD_GAME :{BLACK}Oadlay Amegay
@@ -1629,13 +1611,9 @@
STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :Ailwayray acktray ithway ormalnay ignalssay
STR_RAILROAD_TRACK_WITH_PRESIGNALS :Ailwayray acktray ithway epray-ignalssay
STR_RAILROAD_TRACK_WITH_EXITSIGNALS :Ailwayray acktray ithway exitway-ignalssay
-STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Ailwayray acktray ithway ombocay-ignalssay
STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS :Ailwayray acktray ithway ormalnay andway epray-ignalssay
STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :Ailwayray acktray ithway ormalnay andway exitway-ignalssay
-STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :Ailwayray acktray ithway ormalnay andway ombocay-ignalssay
STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS :Ailwayray acktray ithway epray- andway exitway-ignalssay
-STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :Ailwayray acktray ithway epray- andway ombocay-ignalssay
-STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Ailwayray acktray ithway exitway- andway ombocay-ignalssay
STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Ustmay emoveray ailwayray ationstay irstfay
@@ -3361,10 +3339,6 @@
STR_GROUP_RENAME_TIP :{BLACK}Enameray ethay electedsay oupgray
STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}Ickclay otay otectpray isthay oupgray omfray obalglay autoreplaceway
-STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Ofitpray isthay earyay: {GREEN}{CURRENCY} {BLACK}(astlay earyay: {GREEN}{CURRENCY}{BLACK})
-STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Ofitpray isthay earyay: {RED}{CURRENCY} {BLACK}(astlay earyay: {GREEN}{CURRENCY}{BLACK})
-STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Ofitpray isthay earyay: {GREEN}{CURRENCY} {BLACK}(astlay earyay: {RED}{CURRENCY}{BLACK})
-STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Ofitpray isthay earyay: {RED}{CURRENCY} {BLACK}(astlay earyay: {RED}{CURRENCY}{BLACK})
STR_COMPANY_NAME :{COMPANY}
STR_ENGINE_NAME :{ENGINE}
--- a/src/lang/polish.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/polish.txt Sun Sep 02 11:17:33 2007 +0000
@@ -13,7 +13,6 @@
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}{CURRENCY}
-STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Wymagany płaski teren
STR_0008_WAITING :{BLACK}Czeka: {WHITE}{STRING}
@@ -134,7 +133,7 @@
STR_QUANTITY_MAIL :{COMMA} pacz{P ka ki ek} poczty
STR_QUANTITY_OIL :{VOLUME} ropy
STR_QUANTITY_LIVESTOCK :{COMMA} sztuk{P a i ""} żywca
-STR_QUANTITY_GOODS :{COMMA} towarów
+STR_QUANTITY_GOODS :{COMMA} skrzy{P nia nie ń} towarów
STR_QUANTITY_GRAIN :{WEIGHT} zboża
STR_QUANTITY_WOOD :{WEIGHT} drewna
STR_QUANTITY_IRON_ORE :{WEIGHT} rudy żelaza
@@ -434,13 +433,13 @@
STR_SORT_BY_PROFIT_THIS_YEAR :Zysk w tym roku
STR_SORT_BY_AGE :Wiek
STR_SORT_BY_RELIABILITY :Niezawodność
-STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :Całkowita pojemność typu towaru
+STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :Całkowita pojemność typu ładunku
STR_SORT_BY_MAX_SPEED :Prędkość maks.
STR_SORT_BY_MODEL :Model
STR_SORT_BY_VALUE :Wartość
STR_SORT_BY_FACILITY :Typ stacji
-STR_SORT_BY_WAITING :Wartość czekającego towaru
-STR_SORT_BY_RATING_MAX :Ocena towaru
+STR_SORT_BY_WAITING :Wartość czekającego ładunku
+STR_SORT_BY_RATING_MAX :Ocena ładunku
STR_ENGINE_SORT_ENGINE_ID :ID pojazdu
STR_ENGINE_SORT_COST :Cena
STR_ENGINE_SORT_POWER :Moc
@@ -448,9 +447,9 @@
STR_ENGINE_SORT_RUNNING_COST :Koszty użytkowania
STR_ENGINE_SORT_POWER_VS_RUNNING_COST :Moc/Koszty użytkowania
STR_ENGINE_SORT_CARGO_CAPACITY :Pojemność
-STR_NO_WAITING_CARGO :{BLACK}Nie ma żadnego czekającego towaru
+STR_NO_WAITING_CARGO :{BLACK}Nie ma żadnego czekającego ładunku
STR_SELECT_ALL_FACILITIES :{BLACK}Zaznacz wszystkie typy stacji
-STR_SELECT_ALL_TYPES :{BLACK}Zaznacz wszystkie typy towaru (oraz brak czekającego towaru)
+STR_SELECT_ALL_TYPES :{BLACK}Zaznacz wszystkie typy ładunku (oraz brak czekającego ładunku)
STR_AVAILABLE_TRAINS :{BLACK}Dostępne Lokomotywy
STR_AVAILABLE_ROAD_VEHICLES :{BLACK}Dostępne Samochody
STR_AVAILABLE_SHIPS :{BLACK}Dostępne Statki
@@ -699,7 +698,7 @@
STR_NO_SPACE_FOR_TOWN :{WHITE}...nie ma więcej miejsca na mapie
STR_023B_INCREASE_SIZE_OF_TOWN :{BLACK}Zwiększ rozmiar miasta
STR_023C_EXPAND :{BLACK}Rozszerz
-STR_023D_RANDOM_TOWN :{BLACK}Dowolne miasto
+STR_023D_RANDOM_TOWN :{BLACK}Losowe miasto
STR_023E_BUILD_TOWN_IN_RANDOM_LOCATION :{BLACK}Budowanie miasta w losowym miejscu
STR_023F_INDUSTRY_GENERATION :{WHITE}Tworzenie przedsiębiorstw
STR_0240_COAL_MINE :{BLACK}{G=f}Kopalnia Węgla
@@ -810,7 +809,7 @@
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
-STR_028A_RANDOM_TREES :{BLACK}Dowolne drzewa
+STR_028A_RANDOM_TREES :{BLACK}Losowe drzewa
STR_028B_PLANT_TREES_RANDOMLY_OVER :{BLACK}Pokryj krajobraz losowymi drzewami
STR_028C_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Umieść kamieniste tereny
STR_028D_PLACE_LIGHTHOUSE :{BLACK}Umieść latarnię morską
@@ -1114,13 +1113,17 @@
STR_CONFIG_PATCHES_REALISTICACCEL :{LTBLUE}Realistyczne przyspieszenie pociągów: {ORANGE}{STRING}
STR_CONFIG_PATCHES_FORBID_90_DEG :{LTBLUE}Zabroń pociągom i statkom skręcać o 90st: {ORANGE}{STRING} {LTBLUE} (wymaga NPF)
STR_CONFIG_PATCHES_JOINSTATIONS :{LTBLUE}Połącz stacje budowane jedna obok drugiej: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_FULLLOADANY :{LTBLUE}Opuść stację gdy dowolny towar jest pełny, gdy 'Załadunek': {ORANGE}{STRING}
+STR_CONFIG_PATCHES_FULLLOADANY :{LTBLUE}Opuść stację gdy dowolny ładunek jest pełny, przy 'Załadunku': {ORANGE}{STRING}
STR_CONFIG_PATCHES_IMPROVEDLOAD :{LTBLUE}Użyj ulepszonego algorytmu załadunku: {ORANGE}{STRING}
STR_CONFIG_PATCHES_GRADUAL_LOADING :{LTBLUE}Stopniowy załadunek pojazdów: {ORANGE}{STRING}
STR_CONFIG_PATCHES_INFLATION :{LTBLUE}Inflacja: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SELECTGOODS :{LTBLUE}Dostarcz ładunek na stację tylko jeśli jest zapotrzebowanie: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LONGBRIDGES :{LTBLUE}Pozwól budować bardzo długie mosty: {ORANGE}{STRING}
STR_CONFIG_PATCHES_GOTODEPOT :{LTBLUE}Zezwalaj na wysyłanie do zajezdni: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD :{LTBLUE}Metoda budowania przedsiębiorstw pierwszego stopnia: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE :budowa niedostępna
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL :jak inne przedsiębiorstwa
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :przez poszukiwanie
STR_CONFIG_PATCHES_MULTIPINDTOWN :{LTBLUE}Pozwól na wiele podobnych przedsiębiorstw w mieście: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SAMEINDCLOSE :{LTBLUE}Przedsiębiorstwa jednego typu mogą być bud. obok siebie: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LONGDATE :{LTBLUE}Zawsze pokazuj datę w długim formacie w pasku statusu: {ORANGE}{STRING}
@@ -1324,7 +1327,7 @@
STR_GENERATE_RANDOM_LANDSCAPE :{WHITE}Jesteś pewien że chcesz stworzyć losowy krajobraz?
STR_MANY_RANDOM_TOWNS :{BLACK}Wiele losowych miast
STR_RANDOM_TOWNS_TIP :{BLACK}Pokryj mapę losowo położonymi miastami
-STR_MANY_RANDOM_INDUSTRIES :Wiele losowych przedsiębiorstw
+STR_MANY_RANDOM_INDUSTRIES :Wiele losowych
STR_RANDOM_INDUSTRIES_TIP :{BLACK}Pokryj mapę losowo położonymi przedsiębiorstwami
STR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Nie można stworzyć przedsiębiorstw...
@@ -1346,7 +1349,7 @@
STR_BUOY_IS_IN_USE :{WHITE}...boja w użyciu!
-STR_LANDINFO_COORDS :{BLACK}Pozycja: {LTBLUE}{NUM}x{NUM} ({STRING})
+STR_LANDINFO_COORDS :{BLACK}Współrzędne: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Nie można usunąć części stacji...
STR_CANT_CONVERT_RAIL :{WHITE}Nie można zmienić typu torów w tym miejscu...
@@ -1392,10 +1395,10 @@
STR_INDUSTRY_TOO_CLOSE :{WHITE}...zbyt blisko innego przedsiębiorstwa
-STR_RAIL_REFIT_VEHICLE_TO_CARRY :{BLACK}Przebudowa pociągu do przewozu innego typu towaru
+STR_RAIL_REFIT_VEHICLE_TO_CARRY :{BLACK}Przebudowa pociągu do przewozu innego typu ładunku
STR_RAIL_REFIT_VEHICLE :{BLACK}Przebudowa pociągu
STR_RAIL_SELECT_TYPE_OF_CARGO_FOR :{BLACK}Wybierz jaki ładunek ma przewozić pociąg
-STR_RAIL_REFIT_TO_CARRY_HIGHLIGHTED :{BLACK}Przebuduj pociąg do przewozu zaznaczonego typu towaru
+STR_RAIL_REFIT_TO_CARRY_HIGHLIGHTED :{BLACK}Przebuduj pociąg do przewozu zaznaczonego typu ładunku
STR_RAIL_CAN_T_REFIT_VEHICLE :{WHITE}Nie można przebudować pociągu...
STR_CONFIG_PATCHES_SERVINT_ISPERCENT :{LTBLUE}Okres między serwisowaniami w procentach: {ORANGE}{STRING}
STR_CONFIG_GAME_PRODUCTION :{WHITE}Zmiana produkcji
@@ -1457,34 +1460,23 @@
STR_NETWORK_PASSWORD_TIP :{BLACK}Zabezpiecz grę hasłem jeśli nie chcesz, by była publicznie dostępna
STR_NETWORK_SELECT_MAP :{BLACK}Wybierz mapę:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Na której mapie chcesz grac?
-STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Dopuszczalna ilość klientów:
-STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Ustaw maksymalną liczbę klientów. Nie wszystkie pola muszą być wypełnione.
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LAN_INTERNET_COMBO :{BLACK}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :LAN / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (publiczny)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :0 graczy
-STR_NETWORK_1_PLAYERS :1 gracz
-STR_NETWORK_2_PLAYERS :2 graczy
-STR_NETWORK_3_PLAYERS :3 graczy
-STR_NETWORK_4_PLAYERS :4 graczy
-STR_NETWORK_5_PLAYERS :5 graczy
-STR_NETWORK_6_PLAYERS :6 graczy
-STR_NETWORK_7_PLAYERS :7 graczy
-STR_NETWORK_8_PLAYERS :8 graczy
-STR_NETWORK_9_PLAYERS :9 graczy
-STR_NETWORK_10_PLAYERS :10 graczy
+STR_NETWORK_CLIENTS_SELECT :{BLACK}{SKIP}{SKIP}{NUM} klient{P "" ów ów}
+STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Dopuszczalna ilość klientów:
+STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Ustaw maksymalną liczbę klientów. Nie wszystkie pola muszą być wypełnione.
+STR_NETWORK_COMPANIES_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{NUM} firm{P a y ""}
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Maksymalna ilość firm:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Ogranicz serwer do określonej ilości firm
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_SPECTATORS_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{NUM} widz{P "" ów ów}
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}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_LANGUAGE_COMBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}Rozpocznij grę
STR_NETWORK_START_GAME_TIP :{BLACK}Uruchom nową grę sieciową z losową mapą lub scenariuszem
STR_NETWORK_LOAD_GAME :{BLACK}Wczytaj Grę
@@ -1713,12 +1705,12 @@
STR_RAILROAD_TRACK_WITH_PRESIGNALS :Tory kolejowe z pre-sygnałami
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_PRESIGNALS :Tory 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
+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
STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Należy najpierw usunąć stację kolejową
@@ -1955,7 +1947,7 @@
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
-STR_3056_SHOW_LIST_OF_ACCEPTED_CARGO :{BLACK}Pokaż listę akceptowanych towarów
+STR_3056_SHOW_LIST_OF_ACCEPTED_CARGO :{BLACK}Pokaż listę akceptowanych ładunków
STR_3057_STATION_NAMES_CLICK_ON :{BLACK}Nazwa stacji - kliknij na nazwie aby wycentrować główny widok na stacji
STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT :{BLACK}Wybierz wielkość/typ lotniska
STR_305C_0 :{STATION} {STATIONFEATURES}
@@ -2100,13 +2092,17 @@
############ range for requires ends
############ range for produces starts
+STR_INDUSTRY_WINDOW_WAITING_FOR_PROCESSING :{BLACK}Ładunek oczekujący na przetworzenie:
+STR_INDUSTRY_WINDOW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO}{BLACK}
+STR_4827_PRODUCES :{BLACK}Produkuje: {YELLOW}{STRING}
+STR_4828_PRODUCES :{BLACK}Produkuje: {YELLOW}{STRING}, {STRING}
############ range for produces ends
STR_482A_PRODUCTION_LAST_MONTH :{BLACK}Wyprodukowano w ostatnim miesiącu:
STR_482B_TRANSPORTED :{YELLOW}{CARGO}{BLACK} ({COMMA}% przetransportowano)
STR_482C_CENTER_THE_MAIN_VIEW_ON :{BLACK}Centruj główny widok na przedsiębiorstwie
STR_482D_NEW_UNDER_CONSTRUCTION :{BLACK}{BIGFONT}Rozpoczęto budowę nowe{G go j go} {STRING.d} blisko {TOWN}!
-STR_482E_NEW_BEING_PLANTED_NEAR :{BLACK}{BIGFONT}Now{G y a e} {STRING} został{G "" a o} posadzon{G y a e} blisko {TOWN}!
+STR_482E_NEW_BEING_PLANTED_NEAR :{BLACK}{BIGFONT}Now{G y a e} {STRING} został{G 0 "" a o} posadzon{G 0 y a e} blisko {TOWN}!
STR_482F_COST :{BLACK}Koszt: {YELLOW}{CURRENCY}
STR_4830_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Nie można tutaj wybudować tego przedsiębiorstwa...
STR_4831_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}...las może być posadzony tylko powyżej linii śniegu
@@ -2391,7 +2387,7 @@
STR_7060_CAN_T_BUY_COMPANY :{WHITE}Nie można kupić firmy...
STR_7061_CARGO_PAYMENT_RATES :{WHITE}Stawki za Ładunek
STR_7062_DAYS_IN_TRANSIT :{BLACK}{TINYFONT}Dni w transporcie
-STR_7063_PAYMENT_FOR_DELIVERING :{BLACK}{TINYFONT}Oplata za przewóz 10 jednostek (lub 10,000 litrów) towaru na odległość 20 pól
+STR_7063_PAYMENT_FOR_DELIVERING :{BLACK}{TINYFONT}Oplata za przewóz 10 jednostek (lub 10,000 litrów) ładunku na odległość 20 pól
STR_7064_TOGGLE_GRAPH_FOR_CARGO :{BLACK}Przełącznik wykresu ładunku wł./wył.
STR_7065 :{BLACK}{TINYFONT}{STRING}
STR_7066_ENGINEER :Inżynier
@@ -2738,15 +2734,15 @@
STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
STR_8806_GO_TO :Idź do {STATION}
-STR_8807_GO_TO_TRANSFER :Idź do {STATION} (Przewieź i weź towar)
+STR_8807_GO_TO_TRANSFER :Idź do {STATION} (Przewieź i weź ładunek)
STR_8808_GO_TO_UNLOAD :Idź do {STATION} (Wyładunek)
-STR_8809_GO_TO_TRANSFER_UNLOAD :Idź do {STATION} (Przewieź i nie bierz towaru)
+STR_8809_GO_TO_TRANSFER_UNLOAD :Idź do {STATION} (Przewieź i nie bierz ładunku)
STR_880A_GO_TO_LOAD :Idź do {STATION} (Załadunek)
STR_880B_GO_TO_TRANSFER_LOAD :Idź do {STATION} (Przewieź i czekaj na pełen załadunek)
STR_880C_GO_NON_STOP_TO :Idź bez zatrzymywania do {STATION}
-STR_880D_GO_TO_NON_STOP_TRANSFER :Idź bez zatrzymywania do {STATION} (Przewieź i weź towar)
+STR_880D_GO_TO_NON_STOP_TRANSFER :Idź bez zatrzymywania do {STATION} (Przewieź i weź ładunek)
STR_880E_GO_NON_STOP_TO_UNLOAD :Idź bez zatrzymywania do {STATION} (Wyładunek)
-STR_880F_GO_TO_NON_STOP_TRANSFER_UNLOAD :Idź bez zatrzymywania do {STATION} (Przewieź i nie bierz towaru)
+STR_880F_GO_TO_NON_STOP_TRANSFER_UNLOAD :Idź bez zatrzymywania do {STATION} (Przewieź i nie bierz ładunku)
STR_8810_GO_NON_STOP_TO_LOAD :Idź bez zatrzymywania do {STATION} (Załadunek)
STR_8811_GO_TO_NON_STOP_TRANSFER_LOAD :Idź bez zatrzymywania do {STATION} (Przewieź i czekaj na pełen załadunek)
STR_GO_TO_TRAIN_DEPOT :Idź do zajezdni w {TOWN}
@@ -2800,7 +2796,7 @@
STR_8827_FULL_LOAD :{BLACK}Załadunek
STR_8828_UNLOAD :{BLACK}Wyładunek
STR_REFIT :{BLACK}Przebuduj
-STR_REFIT_TIP :{BLACK}Wybierz do przewozu jakiego towaru przebudować pojazd w tym zadaniu. CTRL+klik usuwa polecenie przebudowy
+STR_REFIT_TIP :{BLACK}Wybierz do przewozu jakiego ładunku przebudować pojazd w tym zadaniu. CTRL+klik usuwa polecenie przebudowy
STR_REFIT_ORDER :(Przebuduj na {STRING})
STR_TIMETABLE_VIEW :{BLACK}Rozkład
STR_TIMETABLE_VIEW_TOOLTIP :{BLACK}Otwórz widok rozkładu jazdy
@@ -2849,7 +2845,7 @@
STR_884C_SHOW_TRAIN_DETAILS :{BLACK}Pokaż szczegóły pociągu
STR_884D_INCREASE_SERVICING_INTERVAL :{BLACK}Zwiększ okres między serwisowaniem
STR_884E_DECREASE_SERVICING_INTERVAL :{BLACK}Zmniejsz okres między serwisowaniem
-STR_884F_SHOW_DETAILS_OF_CARGO_CARRIED :{BLACK}Pokaż szczegóły przewożonych towarów
+STR_884F_SHOW_DETAILS_OF_CARGO_CARRIED :{BLACK}Pokaż szczegóły przewożonych ładunków
STR_8850_SHOW_DETAILS_OF_TRAIN_VEHICLES :{BLACK}Pokaż szczegóły pociągu
STR_8851_SHOW_CAPACITIES_OF_EACH :{BLACK}Pokaż pojemność każdego wagonu
STR_8852_SHOW_TOTAL_CARGO :{BLACK}Pokaż całkowitą pojemność pociągu, według typu ładunku
@@ -2883,7 +2879,7 @@
STR_8869_CAN_T_REVERSE_DIRECTION :{WHITE}Nie można odwrócić kierunku jazdy pociągu...
STR_886A_RENAME_TRAIN_VEHICLE_TYPE :{WHITE}Zmiana nazwy typu pociągu
STR_886B_CAN_T_RENAME_TRAIN_VEHICLE :{WHITE}Nie można zmienić nazwy typu pojazdu...
-STR_886D_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Spraw by w zaznaczonym poleceniu pojazd był zmuszony do pozostawienia towaru dla kolejnego pojazdu
+STR_886D_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Spraw by w zaznaczonym poleceniu pojazd był zmuszony do pozostawienia ładunku dla kolejnego pojazdu
STR_886F_TRANSFER :{BLACK}Przewieź
STR_CLEAR_TIME :{BLACK}Usuń czas
STR_RESET_LATENESS :{BLACK}Wyzeruj spóźnienia
@@ -2972,9 +2968,9 @@
STR_9038_GO_TO_ROADVEH_DEPOT :Idź do zajezdni sam. w {TOWN}
STR_SERVICE_AT_ROADVEH_DEPOT :Serwisuj w zajezdni sam. w {TOWN}
-STR_REFIT_ROAD_VEHICLE_TO_CARRY :{BLACK}Przebudowa samochodu do przewozu innego typu towaru
+STR_REFIT_ROAD_VEHICLE_TO_CARRY :{BLACK}Przebudowa samochodu do przewozu innego typu ładunku
STR_REFIT_ROAD_VEHICLE :{BLACK}Przebudowa samochodu
-STR_REFIT_ROAD_VEHICLE_TO_CARRY_HIGHLIGHTED :{BLACK}Przebuduj samochód do przewozu zaznaczonego typu towaru
+STR_REFIT_ROAD_VEHICLE_TO_CARRY_HIGHLIGHTED :{BLACK}Przebuduj samochód do przewozu zaznaczonego typu ładunku
STR_REFIT_ROAD_VEHICLE_CAN_T :{WHITE}Nie można przebudować samochodu...
STR_ROAD_SELECT_TYPE_OF_CARGO_FOR :{BLACK}Wybierz ładunek jaki ma przewozić ten samochód
@@ -3037,11 +3033,11 @@
STR_9837_RENAME_SHIP_TYPE :{BLACK}Zmień nazwę typu statku
STR_9838_RENAME_SHIP_TYPE :{WHITE}Zmień nazwę typu statku
STR_9839_CAN_T_RENAME_SHIP_TYPE :{WHITE}Nie można zmienić nazwy typu statku...
-STR_983A_REFIT_CARGO_SHIP_TO_CARRY :{BLACK}Przebudowa statku do przewozu innego typu towaru
+STR_983A_REFIT_CARGO_SHIP_TO_CARRY :{BLACK}Przebudowa statku do przewozu innego typu ładunku
STR_983B_REFIT :{WHITE}{VEHICLE} (Przebudowa)
STR_983C_REFIT_SHIP :{BLACK}Przebudowa statku
STR_983D_SELECT_TYPE_OF_CARGO_FOR :{BLACK}Wybierz jaki ładunek ma przewozić statek
-STR_983E_REFIT_SHIP_TO_CARRY_HIGHLIGHTED :{BLACK}Przebuduj statek do przewozu zaznaczonego typu towaru
+STR_983E_REFIT_SHIP_TO_CARRY_HIGHLIGHTED :{BLACK}Przebuduj statek do przewozu zaznaczonego typu ładunku
STR_983F_SELECT_CARGO_TYPE_TO_CARRY :{GOLD}Wybierz typ ładunku do przewozu:
STR_9840_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Nowa pojemność: {GOLD}{CARGO}{}{BLACK}Koszt przebudowy: {GOLD}{CURRENCY}
STR_9841_CAN_T_REFIT_SHIP :{WHITE}Nie można przebudować statku...
@@ -3110,12 +3106,12 @@
STR_A038_RENAME_AIRCRAFT_TYPE :{BLACK}Zmień nazwę typu samolotu
STR_A039_RENAME_AIRCRAFT_TYPE :{WHITE}Zmień nazwę typu samolotu
STR_A03A_CAN_T_RENAME_AIRCRAFT_TYPE :{WHITE}Nie można zmienić nazwy typu samolotu...
-STR_A03B_REFIT_AIRCRAFT_TO_CARRY :{BLACK}Przebudowa samolotu do przewozu innego typu towaru
+STR_A03B_REFIT_AIRCRAFT_TO_CARRY :{BLACK}Przebudowa samolotu do przewozu innego typu ładunku
STR_A03C_REFIT :{WHITE}{VEHICLE} (Przebudowa)
STR_A03D_REFIT_AIRCRAFT :{BLACK}Przebudowa samolotu
STR_A03E_SELECT_TYPE_OF_CARGO_FOR :{BLACK}Wybierz jaki ładunek ma przenosić samolot
-STR_A03F_REFIT_AIRCRAFT_TO_CARRY :{BLACK}Przebuduj samolot do przewozu zaznaczonego typu towaru
-STR_A040_SELECT_CARGO_TYPE_TO_CARRY :{GOLD}Wybierz typ towaru do przewozu:
+STR_A03F_REFIT_AIRCRAFT_TO_CARRY :{BLACK}Przebuduj samolot do przewozu zaznaczonego typu ładunku
+STR_A040_SELECT_CARGO_TYPE_TO_CARRY :{GOLD}Wybierz typ ładunku do przewozu:
STR_A041_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Nowa pojemność: {GOLD}{STRING}{}{BLACK}Koszt przebudowy: {GOLD}{CURRENCY}
STR_A042_CAN_T_REFIT_AIRCRAFT :{WHITE}Nie można przebudować samolotu...
STR_GO_TO_AIRPORT_HANGAR :Idź do hangaru na {STATION}
@@ -3149,7 +3145,7 @@
STR_PERFORMANCE_DETAIL_MIN_INCOME :{BLACK}Min. przychód:
STR_PERFORMANCE_DETAIL_MAX_INCOME :{BLACK}Maks. przychód:
STR_PERFORMANCE_DETAIL_DELIVERED :{BLACK}Przewieziono:
-STR_PERFORMANCE_DETAIL_CARGO :{BLACK}Towar:
+STR_PERFORMANCE_DETAIL_CARGO :{BLACK}Ładunek:
STR_PERFORMANCE_DETAIL_MONEY :{BLACK}Pieniądze:
STR_PERFORMANCE_DETAIL_LOAN :{BLACK}Pożyczka:
STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Łącznie:
@@ -3159,8 +3155,8 @@
STR_PERFORMANCE_DETAIL_MIN_PROFIT_TIP :{BLACK}Minimalny zysk spośród wszystkich pojazdów, które mają conajmniej 2 lata.
STR_PERFORMANCE_DETAIL_MIN_INCOME_TIP :{BLACK}Ilość pieniędzy zarobiona w miesiącu z najmniejszym zyskiem w ostatnich 12 kwartałach
STR_PERFORMANCE_DETAIL_MAX_INCOME_TIP :{BLACK}Ilość pieniędzy zarobiona w miesiącu z największym zyskiem w ostatnich 12 kwartałach
-STR_PERFORMANCE_DETAIL_DELIVERED_TIP :{BLACK}Ilość towaru przewieziona w poprzednich 4 kwartałach
-STR_PERFORMANCE_DETAIL_CARGO_TIP :{BLACK}Ilość rożnych towarów przewiezionych w ostatnim kwartale
+STR_PERFORMANCE_DETAIL_DELIVERED_TIP :{BLACK}Ilość ładunku przewiezionego w poprzednich 4 kwartałach
+STR_PERFORMANCE_DETAIL_CARGO_TIP :{BLACK}Ilość rożnych typów ładunku przewiezionych w ostatnim kwartale
STR_PERFORMANCE_DETAIL_MONEY_TIP :{BLACK}Ilość pieniędzy w ręku
STR_PERFORMANCE_DETAIL_LOAN_TIP :{BLACK}Wielkość pożyczki wziętej przez firmę
STR_PERFORMANCE_DETAIL_TOTAL_TIP :{BLACK}Suma przyznanych punktów
@@ -3284,7 +3280,7 @@
STR_REPLACE_REMOVE_WAGON :{BLACK}Usunięcie wagonów: {ORANGE}{SKIP}{STRING}
STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Autowymiana zachowuje długość pociągu poprzez usuwanie wagonów (począwszy od początku), jeśli wymiana lokomotywy spowoduje wydłużenie pociągu.
STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Zastępowanie: {ORANGE}{SKIP}{SKIP}{STRING}
-STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK} EKSPERYMENTALNE NARZEDZIE {}Przejdź pomiędzy oknami zamiany lokomotyw i wagonów.{}Wymiana wagonu nastąpi tylko jeśli nowy wagon może być przebudowany do przewożenia tego samego towaru co poprzedni. Każdy wagon pociągu jest sprawdzany podczas procesu zamiany.
+STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK} EKSPERYMENTALNE NARZĘDZIE {}Przejdź pomiędzy oknami zamiany lokomotyw i wagonów.{}Wymiana wagonu nastąpi tylko jeśli nowy wagon może być przebudowany do przewożenia tego samego typu ładunku co poprzedni. Każdy wagon pociągu jest sprawdzany podczas procesu zamiany.
STR_RAIL_VEHICLE_NOT_AVAILABLE :{WHITE}Pojazd nie jest dostępny
STR_ROAD_VEHICLE_NOT_AVAILABLE :{WHITE}Pojazd nie jest dostępny
STR_SHIP_NOT_AVAILABLE :{WHITE}Statek nie jest dostępny
@@ -3335,7 +3331,7 @@
STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Pojemność: {GOLD}{COMMA} pasażerów, {COMMA} paczek poczty
STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Moc: {GOLD}+{POWER}{BLACK} Waga: {GOLD}+{WEIGHT_S}
STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Można przebudować na: {GOLD}
-STR_PURCHASE_INFO_ALL_TYPES :Wszystkie typy towarów
+STR_PURCHASE_INFO_ALL_TYPES :Wszystkie typy ładunków
STR_PURCHASE_INFO_ALL_BUT :Wszystko oprócz {GOLD}
STR_PURCHASE_INFO_MAX_TE :{BLACK}Max. Siła Pociągowa: {GOLD}{FORCE}
@@ -3482,11 +3478,6 @@
STR_GROUP_RENAME_TIP :{BLACK}Zmień nazwę zaznaczonej grupy
STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}Kliknij, aby ochronić tę grupę przed globalną zamianą pojazdów
-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}
@@ -3502,4 +3493,7 @@
########
+STR_FUND_NEW_INDUSTRY :{BLACK}Ufunduj
+STR_PROSPECT_NEW_INDUSTRY :{BLACK}Zleć poszukiwanie
+STR_BUILD_NEW_INDUSTRY :{BLACK}Wybuduj
STR_INDUSTRY_SELECTION_HINT :{BLACK}Wybierz przedsiębiorstwo z listy
--- a/src/lang/portuguese.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/portuguese.txt Sun Sep 02 11:17:33 2007 +0000
@@ -11,7 +11,6 @@
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}{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}
@@ -1263,7 +1262,7 @@
STR_BUOY_IS_IN_USE :{WHITE}...boia está em uso!
-STR_LANDINFO_COORDS :{BLACK}Coordenadas: {LTBLUE}{NUM}x{NUM} ({STRING})
+STR_LANDINFO_COORDS :{BLACK}Coordenadas: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Não é possível remover parte da estação...
STR_CANT_CONVERT_RAIL :{WHITE}Não é possível converter o tipo de linha aqui...
@@ -1374,34 +1373,18 @@
STR_NETWORK_PASSWORD_TIP :{BLACK}Proteja o jogo com uma senha se não desejar que pessoas indesejadas se juntem
STR_NETWORK_SELECT_MAP :{BLACK}Seleccione um mapa:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Em que mapa deseja jogar?
-STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Máximo de clientes:
-STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Escolha o número máximo de clientes. Não necessitam estar todos presentes.
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LAN :Rede Local
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :Rede Local / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (divulgar)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :0 jogadores
-STR_NETWORK_1_PLAYERS :1 jogador
-STR_NETWORK_2_PLAYERS :2 jogadores
-STR_NETWORK_3_PLAYERS :3 jogadores
-STR_NETWORK_4_PLAYERS :4 jogadores
-STR_NETWORK_5_PLAYERS :5 jogadores
-STR_NETWORK_6_PLAYERS :6 jogadores
-STR_NETWORK_7_PLAYERS :7 jogadores
-STR_NETWORK_8_PLAYERS :8 jogadores
-STR_NETWORK_9_PLAYERS :9 jogadores
-STR_NETWORK_10_PLAYERS :10 jogadores
+STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Máximo de clientes:
+STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Escolha o número máximo de clientes. Não necessitam estar todos presentes.
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Máximo de Companhias:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Limitar o servidor a um certo número de Companhias
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Máximo de espectadores:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Limitar o servidor a um certo número de espectadores
-STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Idioma falado:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Outros jogadores ficarão a conhecer o idioma utilizado no servidor.
-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}Iniciar Jogo
STR_NETWORK_START_GAME_TIP :{BLACK}Iniciar um novo jogo em rede de um mapa aleatório, ou cenário
STR_NETWORK_LOAD_GAME :{BLACK}Abrir Jogo
@@ -3361,11 +3344,6 @@
STR_GROUP_RENAME_TIP :{BLACK}Mudar o nome do grupo seleccionado
STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}Clique para proteger este grupo da autosubstituição global
-STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Lucro deste ano: {GREEN}{CURRENCY} {BLACK}(ano passado: {GREEN}{CURRENCY}{BLACK})
-STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Lucro deste ano: {RED}{CURRENCY} {BLACK}(ano passado: {GREEN}{CURRENCY}{BLACK})
-STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Lucro deste ano: {GREEN}{CURRENCY} {BLACK}(ano passado: {RED}{CURRENCY}{BLACK})
-STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Lucro deste ano: {RED}{CURRENCY} {BLACK}(ano passado: {RED}{CURRENCY}{BLACK})
-
STR_COMPANY_NAME :{COMPANY}
STR_ENGINE_NAME :{ENGINE}
STR_GROUP_NAME :{GROUP}
--- a/src/lang/romanian.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/romanian.txt Sun Sep 02 11:17:33 2007 +0000
@@ -11,7 +11,6 @@
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}{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}
@@ -1263,7 +1262,6 @@
STR_BUOY_IS_IN_USE :{WHITE}... baliza in uz!
-STR_LANDINFO_COORDS :{BLACK}Coordonate: {LTBLUE}{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Nu pot demola o parte din statie...
STR_CANT_CONVERT_RAIL :{WHITE}Nu pot converti linia aici...
@@ -1376,32 +1374,16 @@
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Ce hartã doresti sa joci?
STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Numar maxim de clienti
STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Alege un numar maxim de clienti. Nu trebuie ocupate toate locurile.
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :LAN / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (fă reclamă)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :0 jucãtori
-STR_NETWORK_1_PLAYERS :1 jucãtor
-STR_NETWORK_2_PLAYERS :2 jucãtori
-STR_NETWORK_3_PLAYERS :3 jucãtori
-STR_NETWORK_4_PLAYERS :4 jucãtori
-STR_NETWORK_5_PLAYERS :5 jucãtori
-STR_NETWORK_6_PLAYERS :6 jucãtori
-STR_NETWORK_7_PLAYERS :7 jucãtori
-STR_NETWORK_8_PLAYERS :8 jucãtori
-STR_NETWORK_9_PLAYERS :9 jucãtori
-STR_NETWORK_10_PLAYERS :10 jucãtori
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Maximum companii:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Limiteazã serverle la un anumit numãr companii
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Maxim spectatori:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Limiteazã serverul la un anumit numãr de spectatori
-STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Limba vorbită:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Ceilalţi jucători vor şti în ce limbă se discută pe server.
-STR_NETWORK_COMBO5 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}Începe jocul
STR_NETWORK_START_GAME_TIP :{BLACK}Incepe un joc nou in retea cu o harta aleatoare sau intr-un scenariu
STR_NETWORK_LOAD_GAME :{BLACK}Incarca joc
@@ -1629,13 +1611,9 @@
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
@@ -3361,10 +3339,6 @@
STR_GROUP_RENAME_TIP :{BLACK}Redenumeste grupul selectat
STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}Click aici pentru a proteja acest grup de la inlocuirile automate globale
-STR_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}
--- a/src/lang/russian.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/russian.txt Sun Sep 02 11:17:33 2007 +0000
@@ -13,7 +13,6 @@
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Слишком близко к краю карты
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Недостаточно денег - требуется {CURRENCY}
STR_0004 :{WHITE}{CURRENCY}
-STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Необходимо ровное место
STR_0008_WAITING :{BLACK}Ожидает: {WHITE}{STRING}
@@ -1143,7 +1142,7 @@
STR_CONFIG_PATCHES_SERVINT_SHIPS :{LTBLUE}Обслуживание кораблей: {ORANGE}кажд{P 1 ый ые ые} {STRING} д{P 1 ень ня ней}/%
STR_CONFIG_PATCHES_SERVINT_SHIPS_DISABLED :{LTBLUE}Обслуживание кораблей: {ORANGE}не обслуживаются
STR_CONFIG_PATCHES_NOSERVICE :{LTBLUE}Не обслуживать транспорт, если отключены поломки: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_WAGONSPEEDLIMITS :{LTBLUE}Использовать органичение скорости у вагонов (если есть): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_WAGONSPEEDLIMITS :{LTBLUE}Использовать ограничение скорости у вагонов (если есть): {ORANGE}{STRING}
STR_CONFIG_PATCHES_DISABLE_ELRAILS :{LTBLUE}Выключить электрофицированную железную дорогу: {ORANGE}{STRING}
STR_CONFIG_PATCHES_COLORED_NEWS_YEAR :{LTBLUE}Цветные газеты появляются: {ORANGE}в {STRING} году
@@ -1265,7 +1264,6 @@
STR_BUOY_IS_IN_USE :{WHITE}...этот буй используется!
-STR_LANDINFO_COORDS :{BLACK}Координаты: {LTBLUE}{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Невозможно удалить часть станции...
STR_CANT_CONVERT_RAIL :{WHITE}Невозможно преобразовать тип рельса здесь...
@@ -1378,32 +1376,16 @@
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Какую карту вы хотите играть?
STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Макс. клиентов:
STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Выбор максимального числа клиентов. Не все места должны быть заняты
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LAN :Локальная сеть
STR_NETWORK_INTERNET :Интернет
STR_NETWORK_LAN_INTERNET :Лок. сеть/Интернет
STR_NETWORK_INTERNET_ADVERTISE :Интернет (объявл.)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :0 игроков
-STR_NETWORK_1_PLAYERS :1 игрок
-STR_NETWORK_2_PLAYERS :2 игрока
-STR_NETWORK_3_PLAYERS :3 игрока
-STR_NETWORK_4_PLAYERS :4 игрока
-STR_NETWORK_5_PLAYERS :5 игроков
-STR_NETWORK_6_PLAYERS :6 игроков
-STR_NETWORK_7_PLAYERS :7 игроков
-STR_NETWORK_8_PLAYERS :8 игроков
-STR_NETWORK_9_PLAYERS :9 игроков
-STR_NETWORK_10_PLAYERS :10 игроков
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Макс. компаний:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Ограничить максимальное число компаний на сервере
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Макс. наблюдателей:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Ограничить максимальное количество наблюдателей на сервере
-STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Язык общения:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Другие игроки будут знать, на каком языке говорят на сервере
-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}Запуск игры
STR_NETWORK_START_GAME_TIP :{BLACK}Запуск новой сетевой игры с произвольной карты или сценария
STR_NETWORK_LOAD_GAME :{BLACK}Загрузка игры
@@ -1631,13 +1613,9 @@
STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :Ж/Д путь с обычным сигналом
STR_RAILROAD_TRACK_WITH_PRESIGNALS :Ж/Д путь с пресигналами
STR_RAILROAD_TRACK_WITH_EXITSIGNALS :Ж/Д путь с выходными сигналами
-STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Ж/Д путь с комбинированными сигналами
STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS :Рельсы и нормальными и пре-сигналами
STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :Рельсы и нормальными и выходными сигналами
-STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :Рельсы с нормальными и комбо-сигналами
STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS :Рельсы с пре- и выходными сигналами
-STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :Рельсы с пре- и комбо-сигналами
-STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Рельсы с выходными и комбо-сигналами
STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Сначала удалите ЖД станцию
@@ -3374,11 +3352,6 @@
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}
--- a/src/lang/simplified_chinese.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/simplified_chinese.txt Sun Sep 02 11:17:33 2007 +0000
@@ -11,7 +11,6 @@
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}距离地图边界过近
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}没有足够的现金 - 需要 {CURRENCY}
STR_0004 :{WHITE}{CURRENCY}
-STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}需要平坦的地面
STR_0008_WAITING :{BLACK}等待:{WHITE}{STRING}
@@ -1236,7 +1235,6 @@
STR_BUOY_IS_IN_USE :{WHITE}浮标正在被使用……
-STR_LANDINFO_COORDS :{BLACK}坐标:{LTBLUE}{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}不能拆除站台的一部分……
STR_CANT_CONVERT_RAIL :{WHITE}不能转换铁路的类型……
@@ -1349,32 +1347,16 @@
STR_NETWORK_SELECT_MAP_TIP :{BLACK}选择你要玩的地图
STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}玩家数目:
STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}选择可以参加的玩家上限(达不到此数量仍然可以开始游戏)
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LAN :局域网
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :局域网 / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (advertise)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :0 个
-STR_NETWORK_1_PLAYERS :1 个
-STR_NETWORK_2_PLAYERS :2 个
-STR_NETWORK_3_PLAYERS :3 个
-STR_NETWORK_4_PLAYERS :4 个
-STR_NETWORK_5_PLAYERS :5 个
-STR_NETWORK_6_PLAYERS :6 个
-STR_NETWORK_7_PLAYERS :7 个
-STR_NETWORK_8_PLAYERS :8 个
-STR_NETWORK_9_PLAYERS :9 个
-STR_NETWORK_10_PLAYERS :10个
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}公司数量:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}限制服务器上可以创建的公司数量
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}旁观数量:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}限制服务器上旁观者的数量
-STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}语言选项:
STR_NETWORK_LANGUAGE_TIP :{BLACK}其他玩家可以知道服务器的官方语言
-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}开始游戏
STR_NETWORK_START_GAME_TIP :{BLACK}以指定场景或随机地图开始游戏
STR_NETWORK_LOAD_GAME :{BLACK}读取游戏
@@ -1577,7 +1559,6 @@
STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :带有普通信号的铁路
STR_RAILROAD_TRACK_WITH_PRESIGNALS :带有入口信号的铁路
STR_RAILROAD_TRACK_WITH_EXITSIGNALS :带有出口新乡的铁路
-STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :带有组合信号的铁路
--- a/src/lang/slovak.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/slovak.txt Sun Sep 02 11:17:33 2007 +0000
@@ -10,10 +10,9 @@
##id 0x0000
STR_NULL :
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_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}{CURRENCY}
-STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Potrebný rovný terén
STR_0008_WAITING :{BLACK}Caka: {WHITE}{STRING}
@@ -259,7 +258,7 @@
STR_00E1_TOO_MANY_VEHICLES_IN_GAME :{WHITE}V hre je prílis vela dopravných prostriedkov
STR_00E2 :{BLACK}{COMMA}
STR_00E3 :{RED}{COMMA}
-STR_00E4_LOCATION :{BLACK}Pozícia
+STR_00E4_LOCATION :{BLACK}Poloha
STR_00E5_CONTOURS :Vrstevnice
STR_00E6_VEHICLES :Dopravné prostriedky
STR_00E7_INDUSTRIES :Priemysel
@@ -380,7 +379,7 @@
STR_0153_SUBSIDIES :Dotácie
STR_UNITS_IMPERIAL :Imperialne
-STR_UNITS_METRIC :Metricke
+STR_UNITS_METRIC :Metrické
STR_UNITS_SI :SI
STR_UNITS_VELOCITY_IMPERIAL :{COMMA} mph
@@ -495,7 +494,7 @@
STR_016F :{TINYFONT}{STRING}{} {STRING}{}{NUM}
STR_0170 :{TINYFONT}{STRING}-
STR_0171_PAUSE_GAME :{BLACK}Pauza
-STR_0172_SAVE_GAME_ABANDON_GAME :{BLACK}Uložit hru, opustit hru, ukoncit program
+STR_0172_SAVE_GAME_ABANDON_GAME :{BLACK}Uložit hru, opustit hru, ukoncit OpenTTD
STR_0173_DISPLAY_LIST_OF_COMPANY :{BLACK}Zoznam staníc spolocnosti
STR_0174_DISPLAY_MAP :{BLACK}Zobrazit mapu
STR_0175_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Zobrazit mapu, zoznam miest
@@ -683,7 +682,7 @@
STR_021C_OF_ACHIEVES_STATUS :{WHITE}{BIGFONT}{PLAYERNAME} z {COMPANY} ziskal oznacenie '{STRING}' !
STR_021F :{BLUE}{COMMA}
STR_0221_OPENTTD :{YELLOW}OpenTTD
-STR_0222_SCENARIO_EDITOR :{YELLOW}Editor scenarov
+STR_0222_SCENARIO_EDITOR :{YELLOW}Editor scenárov
STR_0223_LAND_GENERATION :{WHITE}Generovanie uzemia
STR_0224 :{BLACK}{UPARROW}
STR_0225 :{BLACK}{DOWNARROW}
@@ -702,7 +701,7 @@
STR_0234_NEW_TOWN :{BLACK}Nove mesto
STR_0235_CONSTRUCT_NEW_TOWN :{BLACK}Stavat nove mesto
STR_0236_CAN_T_BUILD_TOWN_HERE :{WHITE}Tu sa mesto neda postavit...
-STR_0237_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}...prilis blizko okraja mapy
+STR_0237_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}... príliš blízko okraja mapy
STR_0238_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}...prilis blizko ineho mesta
STR_0239_SITE_UNSUITABLE :{WHITE}...miesto je nepouzitelne
STR_023A_TOO_MANY_TOWNS :{WHITE}...prilis vela miest
@@ -752,7 +751,7 @@
STR_0264_CONSTRUCT_SAWMILL :{BLACK}Postavit pilu
STR_0265_PLANT_FOREST :{BLACK}Vysadit les
STR_0266_CONSTRUCT_OIL_REFINERY :{BLACK}Postavit ropnu rafineriu
-STR_0267_CONSTRUCT_OIL_RIG_CAN_ONLY :{BLACK}Postavit vrtnu plosinu (da sa postavit len blizko kraja mapy)
+STR_0267_CONSTRUCT_OIL_RIG_CAN_ONLY :{BLACK}Postavit vrtnu plosinu (da sa postavit len blizko okraja mapy)
STR_0268_CONSTRUCT_FACTORY :{BLACK}Postavit tovaren
STR_0269_CONSTRUCT_STEEL_MILL :{BLACK}Postavit oceliaren
STR_026A_CONSTRUCT_FARM :{BLACK}Postavit farmu
@@ -796,17 +795,17 @@
STR_CREATE_LAKE :{BLACK}Definovat oblast vody.{}Vytvorí kanál, pri stlacení CTRL na úrovni mora zaplaví okolie
STR_0290_DELETE :{BLACK}Vymazat
STR_0291_DELETE_THIS_TOWN_COMPLETELY :{BLACK}Kompletne vymazat toto mesto
-STR_0292_SAVE_SCENARIO :Ulozit scenar
+STR_0292_SAVE_SCENARIO :Ulozit scenár
STR_0293_LOAD_SCENARIO :Nahrat scenár
STR_LOAD_HEIGHTMAP :Nahrat výškovú mapu
STR_0294_QUIT_EDITOR :Ukoncit editor
STR_0295 :
-STR_0296_QUIT :Ukoncit program
+STR_0296_QUIT :Ukoncit OpenTTD
STR_0297_SAVE_SCENARIO_LOAD_SCENARIO :{BLACK}Ulozit scenar, nahrat scenar, ukoncit editor scenara, ukoncit program
STR_0298_LOAD_SCENARIO :{WHITE}Nahrat scenár
STR_0299_SAVE_SCENARIO :{WHITE}Ulozit scenar
-STR_029A_PLAY_SCENARIO :{BLACK}Hrat scenar
-STR_PLAY_HEIGHTMAP :{BLACK}Hrat vyskovu mapu
+STR_029A_PLAY_SCENARIO :{BLACK}Hrat scenár
+STR_PLAY_HEIGHTMAP :{BLACK}Hrat výškovú mapu
STR_PLAY_HEIGHTMAP_HINT :{BLACK}Zacat novu hru s pouzitim vyskovej mapy ako krajiny
STR_QUIT_SCENARIO_QUERY :{YELLOW}Si si isty ze chces ukoncit tento scenar ?
STR_029C_QUIT_EDITOR :{WHITE}Ukoncit Editor
@@ -828,7 +827,7 @@
STR_FULL :Plne
STR_02BA :{SILVER}- - {COMPANY} - -
STR_02BB_TOWN_DIRECTORY :Zoznam miest
-STR_02BC_VEHICLE_DESIGN_NAMES :{BLACK}Nazvy vozidiel
+STR_02BC_VEHICLE_DESIGN_NAMES :{BLACK}Názvy vozidiel
STR_02BD :{BLACK}{STRING}
STR_02BE_DEFAULT :Vychodzie
STR_02BF_CUSTOM :Vlastne
@@ -884,31 +883,31 @@
STR_MEASURING_UNITS :{BLACK}Jednotky vzdialenosti
STR_02E4 :{BLACK}{SKIP}{SKIP}{STRING}
STR_MEASURING_UNITS_SELECTION :{BLACK}Výber jednotiek vzdialenosti
-STR_02E6_ROAD_VEHICLES :{BLACK}Cestne vozidla
+STR_02E6_ROAD_VEHICLES :{BLACK}Cestné vozidlá
STR_02E7 :{BLACK}{SKIP}{SKIP}{SKIP}{STRING}
STR_02E8_SELECT_SIDE_OF_ROAD_FOR :{BLACK}Strana po ktorej jazdia cestne vozidla
STR_02E9_DRIVE_ON_LEFT :Jazdia nalavo
STR_02EA_DRIVE_ON_RIGHT :Jazdia napravo
-STR_02EB_TOWN_NAMES :{BLACK}Nazvy miest
+STR_02EB_TOWN_NAMES :{BLACK}Názvy miest
STR_02EC :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_02ED_SELECT_STYLE_OF_TOWN_NAMES :{BLACK}Vyber styl nazvov miest
-STR_02F4_AUTOSAVE :{BLACK}Automaticke ukladanie
+STR_02F4_AUTOSAVE :{BLACK}Automatické ukladanie
STR_02F5 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_02F6_SELECT_INTERVAL_BETWEEN :{BLACK}Vyber interval automatickeho ukladania
STR_02F7_OFF :Vypnute
STR_02F8_EVERY_3_MONTHS :Kazde 3 mesiace
-STR_02F9_EVERY_6_MONTHS :Kazdych 6 mesiacov
-STR_02FA_EVERY_12_MONTHS :Kazdych 12 mesiacov
+STR_02F9_EVERY_6_MONTHS :Každých 6 mesiacov
+STR_02FA_EVERY_12_MONTHS :Každých 12 mesiacov
STR_02FB_START_A_NEW_GAME :{BLACK}Spustit novu hru
STR_02FC_LOAD_A_SAVED_GAME :{BLACK}Nahrat ulozenú hru
-STR_02FE_CREATE_A_CUSTOMIZED_GAME :{BLACK}Vytvorit vlastny svet / scenar
+STR_02FE_CREATE_A_CUSTOMIZED_GAME :{BLACK}Vytvorit vlastny scenar
STR_02FF_SELECT_SINGLE_PLAYER_GAME :{BLACK}Vyberte hru pre 1 hraca
STR_0300_SELECT_MULTIPLAYER_GAME :{BLACK}Vyberte hru pre 2-8 hracov
STR_0301_DISPLAY_GAME_OPTIONS :{BLACK}Zobraz nastavenia hry
STR_0302_DISPLAY_DIFFICULTY_OPTIONS :{BLACK}Zobraz nastavenia obtiaznosti
STR_0303_START_A_NEW_GAME_USING :{BLACK}Spustit novu hru s pouzitim vlastneho scenara
-STR_0304_QUIT :{BLACK}Ukoncit program
+STR_0304_QUIT :{BLACK}Ukoncit OpenTTD
STR_0305_QUIT_OPENTTD :{BLACK}Ukoncit 'OpenTTD'
STR_0307_OPENTTD :{WHITE}OpenTTD {REV}
STR_030D_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}... moze byt postavene len v meste
@@ -994,24 +993,24 @@
STR_CURR_SKK :Slovenske Koruny (SKK)
STR_CURR_BRR :Brazílske Realy (BRL)
-STR_CURR_CUSTOM :Vlastna ...
+STR_CURR_CUSTOM :Vlastná ...
STR_OPTIONS_LANG :{BLACK}Jazyk
STR_OPTIONS_LANG_CBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_OPTIONS_LANG_TIP :{BLACK}Vyber jazyka rozhrania
-STR_OPTIONS_FULLSCREEN :{BLACK}Cela obrazovka
+STR_OPTIONS_FULLSCREEN :{BLACK}Celá obrazovka
STR_OPTIONS_FULLSCREEN_TIP :{BLACK}Zaskrtnite, ak chcete hrat OpenTTD na celej obrazovke
-STR_OPTIONS_RES :{BLACK}Rozlisenie obrazovky
+STR_OPTIONS_RES :{BLACK}Rozlíšenie obrazovky
STR_OPTIONS_RES_CBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_OPTIONS_RES_TIP :{BLACK}Vyber rozlisenia obrazovky
-STR_OPTIONS_SCREENSHOT_FORMAT :{BLACK}Format screenshotov
+STR_OPTIONS_SCREENSHOT_FORMAT :{BLACK}Formát screenshotov
STR_OPTIONS_SCREENSHOT_FORMAT_CBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_OPTIONS_SCREENSHOT_FORMAT_TIP :{BLACK}Vyber format screenshotov
-STR_AUTOSAVE_1_MONTH :Kazdy mesiac
+STR_AUTOSAVE_1_MONTH :Každý mesiac
STR_AUTOSAVE_FAILED :{WHITE}Autoulozenie zlyhalo
STR_MONTH_JAN :Januar
@@ -1100,7 +1099,7 @@
STR_CONFIG_PATCHES_GOTODEPOT :{LTBLUE}Umoznit zaradenie depa do zoznamu prikazov: {ORANGE}{STRING}
STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD :{LTBLUE}Sposob výstavby priemyslu produkujúceho suroviny: {ORANGE}{STRING}
STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE :žiadny
-STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL :rovnaký ako ostatný priemysel
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL :normálny
STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :vyhladávací
STR_CONFIG_PATCHES_MULTIPINDTOWN :{LTBLUE}Umoznit viac priemyslu rovnakeho typu v jednom meste: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SAMEINDCLOSE :{LTBLUE}Rovnaky priemysel moze byt stavany blizko seba: {ORANGE}{STRING}
@@ -1109,7 +1108,7 @@
STR_CONFIG_PATCHES_SHOWFINANCES :{LTBLUE}Zobrazit rozpocet na konci roku: {ORANGE}{STRING}
STR_CONFIG_PATCHES_NEW_NONSTOP :{LTBLUE}TTDPatch kompatibilna interpretacia prikazu nonstop: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ROADVEH_QUEUE :{LTBLUE}Radenie cestnych vozidiel (podla mnozstva tovaru): {ORANGE}{STRING}
-STR_CONFIG_PATCHES_AUTOSCROLL :{LTBLUE}Posuvat okno ked je kurzor mysi na jeho okraji: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AUTOSCROLL :{LTBLUE}Posúvat pohlad ked je kurzor myši na okraji okna: {ORANGE}{STRING}
STR_CONFIG_PATCHES_BRIBE :{LTBLUE}Umoznit podplacanie miestnej spravy: {ORANGE}{STRING}
STR_CONFIG_PATCHES_NONUNIFORM_STATIONS :{LTBLUE}Roznorode stanice: {ORANGE}{STRING}
STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL :{LTBLUE}Novy globalny algoritmus hladania cesty (NPF namiesto NTP): {ORANGE}{STRING}
@@ -1133,7 +1132,7 @@
STR_CONFIG_PATCHES_POPULATION_IN_LABEL :{LTBLUE}Zobrazit pocet obyvatelov mesta v jeho nazve: {ORANGE}{STRING}
STR_CONFIG_PATCHES_INVISIBLE_TREES :{LTBLUE}Neviditelne stromy (pri priesvitnych budovach): {ORANGE}{STRING}
-STR_CONFIG_PATCHES_LAND_GENERATOR :{LTBLUE}Generator uzemia: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LAND_GENERATOR :{LTBLUE}Generátor uzemia: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LAND_GENERATOR_ORIGINAL :Povodny
STR_CONFIG_PATCHES_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis
STR_CONFIG_PATCHES_OIL_REF_EDGE_DISTANCE :{LTBLUE}Max. vzdialenost ropnych rafinerii od okraja mapy: {ORANGE}{STRING}
@@ -1153,24 +1152,24 @@
STR_CONFIG_PATCHES_SE_FLAT_WORLD_HEIGHT :{LTBLUE}Vyskova uroven pre rovinaty scenar: {ORANGE}{STRING}
STR_CONFIG_PATCHES_STATION_SPREAD :{LTBLUE}Max. rozsah stanice: {ORANGE}{STRING} {RED}Pozor: Vysoke hodnoty spomaluju hru
-STR_CONFIG_PATCHES_SERVICEATHELIPAD :{LTBLUE}Automaticke opravy vrtulnikov v heliporte: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SERVICEATHELIPAD :{LTBLUE}Automatické opravy vrtulníkov v heliporte: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR :{LTBLUE}Otvarat panel uprav terenu s panelom stavby trati, ciest, ... : {ORANGE}{STRING}
-STR_CONFIG_PATCHES_REVERSE_SCROLLING :{LTBLUE}Pri posuvani mapy mysou posuvat opacnym smerom: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_REVERSE_SCROLLING :{LTBLUE}Pri posúvaní pohladu myšou posúvat mapu opacným smerom: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SMOOTH_SCROLLING :{LTBLUE}Plynulé posúvanie pohladu: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_MEASURE_TOOLTIP :{LTBLUE}Zobrazit info o rozmerom pri vystavbe: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MEASURE_TOOLTIP :{LTBLUE}Zobrazit údaje o rozmeroch pri výstavbe: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LIVERIES :{LTBLUE}Zobrazit farebne schemy spolocnosti: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LIVERIES_NONE :Ziadne
-STR_CONFIG_PATCHES_LIVERIES_OWN :Vlastna spolocnost
+STR_CONFIG_PATCHES_LIVERIES_OWN :Vlastná spolocnost
STR_CONFIG_PATCHES_LIVERIES_ALL :Vsetky spolocnosti
STR_CONFIG_PATCHES_PREFER_TEAMCHAT :{LTBLUE}Preferovaný teamový chat: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLLING :{LTBLUE}Funkcia scrolovacieho kolieska: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SCROLLWHEEL_ZOOM :Zvacšit mapu
STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL :Posúvat mapu
STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :Vypnuté
-STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Rychlost posúvania mapy: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Rychlost posúvania pohladu: {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_LOADING_INDICATORS :{LTBLUE}Zobrazovat ukazovatele nakladania a vykladania: {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}
@@ -1180,12 +1179,12 @@
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_DEFAULT_RAIL_TYPE_MOST_USED :Najpoužívanejšie
-STR_CONFIG_PATCHES_ALWAYS_BUILD_INFRASTRUCTURE :{LTBLUE}Zobrazit nástroje výstavby ak nie sú dostupné žiadne vhodné vozidlá: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ALWAYS_BUILD_INFRASTRUCTURE :{LTBLUE}Zobrazit nástroje výstavby ak nie sú dostupné vhodné vozidlá: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_TRAINS :{LTBLUE}Maximalny pocet vlakov hraca: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_ROADVEH :{LTBLUE}Maximalny pocet automobilov hraca: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_MAX_AIRCRAFT :{LTBLUE}Maximalny pocet lietadiel hraca: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MAX_AIRCRAFT :{LTBLUE}Maximálny pocet lietadiel hráca: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_SHIPS :{LTBLUE}Maximalny pocet lodi hraca: {ORANGE}{STRING}
STR_CONFIG_PATCHES_AI_BUILDS_TRAINS :{LTBLUE}Zakazat vlaky pre pocitac: {ORANGE}{STRING}
@@ -1217,7 +1216,7 @@
STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE :{LTBLUE}Automatická stavba semafórov pred: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID :{WHITE}Struktúra mesta "žiadne cesty naviac" nie je platná v editore scenárov
-STR_CONFIG_PATCHES_TOWN_LAYOUT :{LTBLUE}Štruktúra mestských ciestt: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TOWN_LAYOUT :{LTBLUE}Struktúra mestských ciest: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TOWN_LAYOUT_NO_ROADS :žiadne cesty naviac
STR_CONFIG_PATCHES_TOWN_LAYOUT_DEFAULT :štandardná
STR_CONFIG_PATCHES_TOWN_LAYOUT_BETTER_ROADS :lepšie cesty
@@ -1236,13 +1235,13 @@
STR_CONFIG_PATCHES_TOWN_GROWTH_NORMAL :Normálny
STR_CONFIG_PATCHES_TOWN_GROWTH_FAST :Rýchly
STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST :Velmi rýchly
-STR_CONFIG_PATCHES_LARGER_TOWNS :{LTBLUE}Pomer miest, ktoré budú rást 2x rýchlejšie: {ORANGE}1 v {STRING}
-STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED :{LTBLUE}Pomer miest, ktoré budú rást 2x rýchlejšie: {ORANGE}Žiadny
+STR_CONFIG_PATCHES_LARGER_TOWNS :{LTBLUE}Pomer miest, ktoré sa budú rozvíjat rýchlejšie: {ORANGE}1 z {STRING}
+STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED :{LTBLUE}Pomer miest, ktoré sa budú rozvíjat rýchlejšie: {ORANGE}Žiadny
STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER :{LTBLUE}Násobok pociatocnej velkosti mesta: {ORANGE}{STRING}
STR_CONFIG_PATCHES_GUI :{BLACK}Rozhranie
STR_CONFIG_PATCHES_CONSTRUCTION :{BLACK}Vystavba
-STR_CONFIG_PATCHES_VEHICLES :{BLACK}Vozidla
+STR_CONFIG_PATCHES_VEHICLES :{BLACK}Vozidlá
STR_CONFIG_PATCHES_STATIONS :{BLACK}Stanice
STR_CONFIG_PATCHES_ECONOMY :{BLACK}Ekonomika
STR_CONFIG_PATCHES_AI :{BLACK}Protivnici
@@ -1327,7 +1326,7 @@
STR_BUOY_IS_IN_USE :{WHITE}... boja sa pouziva!
-STR_LANDINFO_COORDS :{BLACK}Suradnice: {LTBLUE}{NUM}x{NUM} ({STRING})
+STR_LANDINFO_COORDS :{BLACK}Súradnice: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Nemozno odstranit cast stanice ...
STR_CANT_CONVERT_RAIL :{WHITE}Tu nemozno zkonvertovat typ zeleznice ...
@@ -1438,34 +1437,23 @@
STR_NETWORK_PASSWORD_TIP :{BLACK}Ochran hru heslom, ak nechcec aby sa pripajali ostatni ludia
STR_NETWORK_SELECT_MAP :{BLACK}Vyber mapu:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Ktoru mapu chces hrat?
-STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Maximalny pocet klientov:
-STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Zvol maximalny pocet klientov. Moze sa ich pripojit aj menej.
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LAN_INTERNET_COMBO :{BLACK}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :LAN / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (oznamit)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :0 hracov
-STR_NETWORK_1_PLAYERS :1 hrac
-STR_NETWORK_2_PLAYERS :2 hráci
-STR_NETWORK_3_PLAYERS :3 hráci
-STR_NETWORK_4_PLAYERS :4 hráci
-STR_NETWORK_5_PLAYERS :5 hrácov
-STR_NETWORK_6_PLAYERS :6 hrácov
-STR_NETWORK_7_PLAYERS :7 hrácov
-STR_NETWORK_8_PLAYERS :8 hrácov
-STR_NETWORK_9_PLAYERS :9 hrácov
-STR_NETWORK_10_PLAYERS :10 hrácov
+STR_NETWORK_CLIENTS_SELECT :{BLACK}{SKIP}{SKIP}{NUM} klient{P "" i ov}
+STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Maximálny pocet klientov:
+STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Zvol maximalny pocet klientov. Moze sa ich pripojit aj menej.
+STR_NETWORK_COMPANIES_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{NUM} spolocnost{P "" i í}
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Max. pocet spolocnosti:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Obmedzi maximalny pocet spolocnosti na serveri
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_SPECTATORS_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{NUM} pozorovatel{P "" ia ov}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Max. pocet divakov:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Omedzi maximalny pocet divakov na serveri
-STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Jazyk hracov:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Aby ostatni hraci vedeli, akym jazykom sa bude hovorit na serveri.
-STR_NETWORK_COMBO5 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LANGUAGE_COMBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}Spustit hru
STR_NETWORK_START_GAME_TIP :{BLACK}Zacat sietovu hru z nahodnej mapy alebo scenara
STR_NETWORK_LOAD_GAME :{BLACK}Nahrat hru
@@ -1693,13 +1681,13 @@
STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :Zeleznicne kolaje so standartnym semaforom
STR_RAILROAD_TRACK_WITH_PRESIGNALS :Zeleznicne kolaje s pre-signalmi
STR_RAILROAD_TRACK_WITH_EXITSIGNALS :Zeleznicne kolaje s exit-signalmi
-STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Zeleznicne kolaje s combo-signalmi
+STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Zeleznicné kolaje s combo signálmi
STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS :Železnicné kolaje s normálnymi a pre-signálmi
STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :Železnicné kolaje s normálnymi a exit-signálmi
-STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :Železnicné kolaje s normálnymi a combo-signálmi
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :Zeleznicné kolaje s normálnymi a combo signálmi
STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS :Železnicné kolaje s pre- a exit-signálmi
-STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :Železnicné kolaje s pre- a combo-signálmi
-STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Železnicné kolaje s exit- a combo-signálmi
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :Zeleznicné kolaje s pre- a combo signálmi
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Zeleznicné kolaje s exit- a combo signálmi
STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Je potrebné najprv odstránit železnicnú stanicu
@@ -1764,7 +1752,7 @@
STR_2007_RENAME_TOWN :Premenovat mesto
STR_2008_CAN_T_RENAME_TOWN :{WHITE}Mesto nemoze byt odstranene ...
STR_2009_LOCAL_AUTHORITY_REFUSES :{WHITE}{TOWN} miestna sprava to nedovoli
-STR_200A_TOWN_NAMES_CLICK_ON_NAME :{BLACK}Nazvy miest - kliknut na meno pre pohlad na stred mesta
+STR_200A_TOWN_NAMES_CLICK_ON_NAME :{BLACK}Názvy miest - kliknite na názov pre pohlad mesto
STR_200B_CENTER_THE_MAIN_VIEW_ON :{BLACK}Pohlad na stred mesta
STR_200C_CHANGE_TOWN_NAME :{BLACK}Zmenit nazov mesta
STR_200D_PASSENGERS_LAST_MONTH_MAX :{BLACK}Cestujuci posledny mesiac: {ORANGE}{COMMA}{BLACK} max: {ORANGE}{COMMA}
@@ -1803,7 +1791,7 @@
STR_202F_SUBSIDY_WITHDRAWN_SERVICE :{BLACK}{BIGFONT}Dotacia ukoncena:{}{}Preprava {STRING.g} z {STATION} do {STATION} uz viac nebude dotovana.
STR_2030_SERVICE_SUBSIDY_OFFERED :{BLACK}{BIGFONT}Ponuka dotacie:{}{}Prva preprava {STRING.g} z {STRING} do {STRING} bude dotovana miestnou spravou!
STR_2031_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}Dotacia udelena spolocnosti {COMPANY}!{}{}Preprava {STRING.g} z {STATION} do {STATION} bude buduci rok o 50% vynosnejsia!
-STR_2032_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}Dotacia udelena spolocnosti {COMPANY}!{}{}Preprava {STRING.g} z {STATION} to {STATION} bude buduci rok 2x vynosejnsia!
+STR_2032_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}Dotácia udelená spolocnosti {COMPANY}!{}{}Preprava {STRING.g} z {STATION} to {STATION} bude budúci rok 2x výnosnejšia!
STR_2033_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}Dotacia udelena spolocnosti {COMPANY}!{}{}Preprava {STRING.g} z {STATION} do {STATION} bude buduci rok 3x vynosnejsia!
STR_2034_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}Dotacia udelena spolocnosti {COMPANY}!{}{}Preprava {STRING.g} z {STATION} do {STATION} bude buduci rok 4x vynosnejsia!
STR_2035_LOCAL_AUTHORITY_REFUSES :{WHITE}Miestna sprava {TOWN} odmietla stavbu letiska v tomto meste
@@ -1824,7 +1812,7 @@
STR_2044_CARRY_OUT_THE_HIGHLIGHTED :{BLACK}Vykonat vybranu cinnost
STR_2045_ACTIONS_AVAILABLE :{BLACK}Dostupne cinnosti:
STR_2046_SMALL_ADVERTISING_CAMPAIGN :Mala reklamna kampan
-STR_2047_MEDIUM_ADVERTISING_CAMPAIGN :Stredna reklamna kampan
+STR_2047_MEDIUM_ADVERTISING_CAMPAIGN :Stredná reklamná kampan
STR_2048_LARGE_ADVERTISING_CAMPAIGN :Velka reklamna kampan
STR_2049_FUND_LOCAL_ROAD_RECONSTRUCTION :Financovat rekonstrukciu ciest
STR_204A_BUILD_STATUE_OF_COMPANY :Postavit sochu majitela spolocnosti
@@ -1937,7 +1925,7 @@
STR_3054_SHOW_STATION_RATINGS :{BLACK}Zobrazit hodnotenie stanice
STR_3055_CHANGE_NAME_OF_STATION :{BLACK}Zmenit nazov stanice
STR_3056_SHOW_LIST_OF_ACCEPTED_CARGO :{BLACK}Zobrazit zoznam prijimaneho nakladu
-STR_3057_STATION_NAMES_CLICK_ON :{BLACK}Nazvy stanic - kliknut pre vycentrovanie pohladu na poziciu stanice
+STR_3057_STATION_NAMES_CLICK_ON :{BLACK}Názvy staíic - kliknite pre pohlad na polohu stanice
STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT :{BLACK}Vybrat velkost/typ letiska
STR_305C_0 :{STATION} {STATIONFEATURES}
STR_STATION_SIGN_TINY :{TINYFONT}{STATION}
@@ -2174,26 +2162,26 @@
STR_OPTIONS_SAVE_CHANGES :{BLACK}Ulozit
############ range for difficulty levels starts
-STR_6801_EASY :{BLACK}Lahka
-STR_6802_MEDIUM :{BLACK}Stredna
-STR_6803_HARD :{BLACK}Tazka
-STR_6804_CUSTOM :{BLACK}Vlastna
+STR_6801_EASY :{BLACK}Lahká
+STR_6802_MEDIUM :{BLACK}Stredná
+STR_6803_HARD :{BLACK}Tažká
+STR_6804_CUSTOM :{BLACK}Vlastná
############ range for difficulty levels ends
############ range for difficulty settings starts
STR_6805_MAXIMUM_NO_COMPETITORS :{LTBLUE}Max. pocet konkurentov: {ORANGE}{COMMA}
-STR_6806_COMPETITOR_START_TIME :{LTBLUE}Zaciatok konkurencie: {ORANGE}{STRING}
+STR_6806_COMPETITOR_START_TIME :{LTBLUE}Vznik konkurencie: {ORANGE}{STRING}
STR_6807_NO_OF_TOWNS :{LTBLUE}Pocet miest: {ORANGE}{STRING}
STR_6808_NO_OF_INDUSTRIES :{LTBLUE}Pocet priemyslu: {ORANGE}{STRING}
-STR_6809_MAXIMUM_INITIAL_LOAN_000 :{LTBLUE}Maximalny prvotny uver: {ORANGE}{CURRENCY}
+STR_6809_MAXIMUM_INITIAL_LOAN_000 :{LTBLUE}Maximálny prvotný úver: {ORANGE}{CURRENCY}
STR_680A_INITIAL_INTEREST_RATE :{LTBLUE}Pociatocny urok: {ORANGE}{COMMA}%
-STR_680B_VEHICLE_RUNNING_COSTS :{LTBLUE}Naklady na prevadzku vozidiel: {ORANGE}{STRING}
+STR_680B_VEHICLE_RUNNING_COSTS :{LTBLUE}Náklady na prevádzku vozidiel: {ORANGE}{STRING}
STR_680C_CONSTRUCTION_SPEED_OF_COMPETITOR :{LTBLUE}Rychlost konkurencie: {ORANGE}{STRING}
STR_680D_INTELLIGENCE_OF_COMPETITORS :{LTBLUE}Inteligencia konkurencie: {ORANGE}{STRING}
STR_680E_VEHICLE_BREAKDOWNS :{LTBLUE}Poruchy vozidiel: {ORANGE}{STRING}
STR_680F_SUBSIDY_MULTIPLIER :{LTBLUE}Nasobok dotacii: {ORANGE}{STRING}
-STR_6810_COST_OF_CONSTRUCTION :{LTBLUE}Naklady na vystavbu: {ORANGE}{STRING}
-STR_6811_TERRAIN_TYPE :{LTBLUE}Typ terenu: {ORANGE}{STRING}
+STR_6810_COST_OF_CONSTRUCTION :{LTBLUE}Náklady na výstavbu: {ORANGE}{STRING}
+STR_6811_TERRAIN_TYPE :{LTBLUE}Typ terénu: {ORANGE}{STRING}
STR_6812_QUANTITY_OF_SEA_LAKES :{LTBLUE}Rozsah oceanov/jazier: {ORANGE}{STRING}
STR_6813_ECONOMY :{LTBLUE}Ekonomika: {ORANGE}{STRING}
STR_6814_TRAIN_REVERSING :{LTBLUE}Otacanie vlakov: {ORANGE}{STRING}
@@ -2202,10 +2190,10 @@
############ range for difficulty settings ends
STR_26816_NONE :Ziadny
-STR_NUM_VERY_LOW :Velmi malý
-STR_6816_LOW :Nizke
-STR_6817_NORMAL :Normalne
-STR_6818_HIGH :Vysoke
+STR_NUM_VERY_LOW :Velmi nízky
+STR_6816_LOW :Nízky
+STR_6817_NORMAL :Normálny
+STR_6818_HIGH :Vysoký
STR_6819 :{BLACK}{SMALLLEFTARROW}
STR_681A :{BLACK}{SMALLRIGHTARROW}
STR_681B_VERY_SLOW :Velmi Pomale
@@ -2214,12 +2202,12 @@
STR_681E_FAST :Rychle
STR_681F_VERY_FAST :Velmi rychle
STR_VERY_LOW :Velmi nizke
-STR_6820_LOW :Nizke
+STR_6820_LOW :Nízky
STR_6821_MEDIUM :Stredne
-STR_6822_HIGH :Vysoke
+STR_6822_HIGH :Vysoký
STR_6823_NONE :Ziadne
STR_6824_REDUCED :Znizene
-STR_6825_NORMAL :Normalne
+STR_6825_NORMAL :Normálny
STR_6826_X1_5 :x1.5
STR_6827_X2 :x2
STR_6828_X3 :x3
@@ -2260,7 +2248,7 @@
STR_700E_FINANCES :{WHITE}{COMPANY} Financie {BLACK}{COMPANYNUM}
STR_700F_EXPENDITURE_INCOME :{WHITE}Vydavky/Prijmy
STR_7010 :{WHITE}{NUM}
-STR_7011_CONSTRUCTION :{GOLD}Vystavba
+STR_7011_CONSTRUCTION :{GOLD}Výstavba
STR_7012_NEW_VEHICLES :{GOLD}Nove vozidla
STR_7013_TRAIN_RUNNING_COSTS :{GOLD}Prevadzka vlakov
STR_7014_ROAD_VEH_RUNNING_COSTS :{GOLD}Prevadzka automobilov
@@ -2340,7 +2328,7 @@
STR_7060_CAN_T_BUY_COMPANY :{WHITE}Spolocnost nie je mozne kupit ...
STR_7061_CARGO_PAYMENT_RATES :{WHITE}Ceny prepravy
STR_7062_DAYS_IN_TRANSIT :{BLACK}{TINYFONT}Pocet dni transportu
-STR_7063_PAYMENT_FOR_DELIVERING :{BLACK}{TINYFONT}Platba za prepravenie 10 jednotiek (alebo 10,000 litrov) nakladu cez 20 stvorcov terenu
+STR_7063_PAYMENT_FOR_DELIVERING :{BLACK}{TINYFONT}Platba za prepravu 10 jednotiek (alebo 10 000 litrov) nákladu cez 20 stvorcov
STR_7064_TOGGLE_GRAPH_FOR_CARGO :{BLACK}Graf pre typ nakladu zap./vyp.
STR_7065 :{BLACK}{TINYFONT}{STRING}
STR_7066_ENGINEER :Inzinier
@@ -2810,7 +2798,7 @@
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
-STR_885D_AGE_RUNNING_COST_YR :{BLACK}Vek: {LTBLUE}{STRING}{BLACK} Naklady na prevadzku: {LTBLUE}{CURRENCY}/rok
+STR_885D_AGE_RUNNING_COST_YR :{BLACK}Vek: {LTBLUE}{STRING}{BLACK} Náklady na prevádzku: {LTBLUE}{CURRENCY}/rok
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Hmotnost: {LTBLUE}{WEIGHT_S} {BLACK}Výkon: {LTBLUE}{POWER}{BLACK} Max. rýchlost: {LTBLUE}{VELOCITY}
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Hmotnost: {LTBLUE}{WEIGHT_S} {BLACK}Výkon: {LTBLUE}{POWER}{BLACK} Max. rýchlost: {LTBLUE}{VELOCITY} {BLACK}Max. T.S.: {LTBLUE}{FORCE}
STR_885F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Zisk tento rok: {LTBLUE}{CURRENCY} (predchadzajuci rok: {CURRENCY})
@@ -2863,7 +2851,7 @@
STR_9007_BUILD_VEHICLE :{BLACK}Zakupit vozidlo
STR_9009_CAN_T_BUILD_ROAD_VEHICLE :{WHITE}Nie je mozne zakupit automobil ...
STR_900C_DETAILS :{WHITE}{VEHICLE} (Detaily)
-STR_900D_AGE_RUNNING_COST_YR :{BLACK}Vek: {LTBLUE}{STRING}{BLACK} Naklady na prevadzku: {LTBLUE}{CURRENCY}/rok
+STR_900D_AGE_RUNNING_COST_YR :{BLACK}Vek: {LTBLUE}{STRING}{BLACK} Náklady na prevádzku: {LTBLUE}{CURRENCY}/rok
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}
@@ -2893,7 +2881,7 @@
STR_9025_CENTER_MAIN_VIEW_ON_ROAD :{BLACK}Centrovat pohlad na poziciu garaze
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_902A_COST_SPEED_RUNNING_COST :{BLACK}Cena: {CURRENCY}{}Rýchlost: {VELOCITY}{}Náklady na prevádzku: {CURRENCY}/rok{}Kapacita: {CARGO}
STR_ARTICULATED_RV_CAPACITY :{BLACK}Kapacita: {LTBLUE}
STR_BARE_CARGO :{CARGO}
@@ -2939,7 +2927,7 @@
STR_980E_SHIP_IN_THE_WAY :{WHITE}Lod v ceste
STR_980F :{WHITE}{VEHICLE}
STR_9811_DETAILS :{WHITE}{VEHICLE} (Detaily)
-STR_9812_AGE_RUNNING_COST_YR :{BLACK}Vek: {LTBLUE}{STRING}{BLACK} Naklady na prevadzku: {LTBLUE}{CURRENCY}/rok
+STR_9812_AGE_RUNNING_COST_YR :{BLACK}Vek: {LTBLUE}{STRING}{BLACK} Náklady na prevádzku: {LTBLUE}{CURRENCY}/rok
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}
@@ -2968,7 +2956,7 @@
STR_9829_CENTER_MAIN_VIEW_ON_SHIP :{BLACK}Vycentrovat pohlad na lod
STR_982A_SEND_SHIP_TO_DEPOT :{BLACK}Poslat lod do lodenice
STR_982B_SHOW_SHIP_DETAILS :{BLACK}Zobrazit detaily o lodi
-STR_982E_COST_MAX_SPEED_CAPACITY :{BLACK}Cena: {CURRENCY} Max. rychlost: {VELOCITY}{}Kapacita: {CARGO}{}Naklady na prevadzku: {CURRENCY}/rok
+STR_982E_COST_MAX_SPEED_CAPACITY :{BLACK}Cena: {CURRENCY} Max. rýchlost: {VELOCITY}{}Kapacita: {CARGO}{}Náklady na prevádzku: {CURRENCY}/rok
STR_982F_NAME_SHIP :{BLACK}Pomenovat lod
STR_9831_NAME_SHIP :{WHITE}Pomenovat lod
@@ -3007,7 +2995,7 @@
STR_A00A :{WHITE}{VEHICLE}
STR_A00B_ORDERS :{WHITE}{VEHICLE} (Prikazy)
STR_A00C_DETAILS :{WHITE}{VEHICLE} (Detaily)
-STR_A00D_AGE_RUNNING_COST_YR :{BLACK}Vek: {LTBLUE}{STRING}{BLACK} Naklady na prevadzku: {LTBLUE}{CURRENCY}/rok
+STR_A00D_AGE_RUNNING_COST_YR :{BLACK}Vek: {LTBLUE}{STRING}{BLACK} Náklady na prevádzku: {LTBLUE}{CURRENCY}/rok
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}
@@ -3040,7 +3028,7 @@
STR_A029_CENTER_MAIN_VIEW_ON_AIRCRAFT :{BLACK}Vycentrovat pohlad na lietadlo
STR_A02A_SEND_AIRCRAFT_TO_HANGAR :{BLACK}Poslat lietadlo do hangaru
STR_A02B_SHOW_AIRCRAFT_DETAILS :{BLACK}Zobrazit detaily o lietadle
-STR_A02E_COST_MAX_SPEED_CAPACITY :{BLACK}Cena: {CURRENCY} Max. rychlost: {VELOCITY}{}Kapacita: {COMMA} cestujucich, {COMMA} balikov posty{}Naklady na prevadzku: {CURRENCY}/rok
+STR_A02E_COST_MAX_SPEED_CAPACITY :{BLACK}Cena: {CURRENCY} Max. rýchlost: {VELOCITY}{}Kapacita: {COMMA} cestujúcich, {COMMA} balíkov pošty{}Náklady na prevádzku: {CURRENCY}/rok
STR_A030_NAME_AIRCRAFT :{WHITE}Pomenovat lietadlo
STR_A031_CAN_T_NAME_AIRCRAFT :{WHITE}Nie je mozne pomenovat lietadlo ...
@@ -3268,7 +3256,7 @@
STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}Cena: {GOLD}{CURRENCY}{BLACK} Hmotnost: {GOLD}{WEIGHT_S}
STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Rychlost: {GOLD}{VELOCITY}{BLACK} Vykon: {GOLD}{POWER}
STR_PURCHASE_INFO_SPEED :{BLACK}Rychlost: {GOLD}{VELOCITY}
-STR_PURCHASE_INFO_RUNNINGCOST :{BLACK}Naklady na prevadzku: {GOLD}{CURRENCY}/rok
+STR_PURCHASE_INFO_RUNNINGCOST :{BLACK}Náklady na prevádzku: {GOLD}{CURRENCY}/rok
STR_PURCHASE_INFO_CAPACITY :{BLACK}Kapacita: {GOLD}{CARGO} {STRING}
STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Vyrobene: {GOLD}{NUM}{BLACK} Zivotnost: {GOLD}{COMMA} rokov
STR_PURCHASE_INFO_RELIABILITY :{BLACK}Max. spolahlivost: {GOLD}{COMMA}%
@@ -3285,15 +3273,15 @@
########### String for New Landscape Generator
STR_GENERATE :{WHITE}Generovat
-STR_RANDOM :{BLACK}Novy kod
+STR_RANDOM :{BLACK}Nový kód
STR_RANDOM_HELP :{BLACK}Zmenit nahodny kod pre generovanie terenu
STR_WORLD_GENERATION_CAPTION :{WHITE}Generovanie krajiny
-STR_RANDOM_SEED :{BLACK}Nahodny kod:
+STR_RANDOM_SEED :{BLACK}Náhodný kód:
STR_RANDOM_SEED_HELP :{BLACK}Kliknite pre zadanie nahodneho kodu
-STR_LAND_GENERATOR :{BLACK}Generator krajiny:
-STR_TREE_PLACER :{BLACK}Generator stromov:
+STR_LAND_GENERATOR :{BLACK}Generátor krajiny:
+STR_TREE_PLACER :{BLACK}Generátor stromov:
STR_HEIGHTMAP_ROTATION :{BLACK}Orientacia vyskovej mapy:
-STR_TERRAIN_TYPE :{BLACK}Typ terenu:
+STR_TERRAIN_TYPE :{BLACK}Typ terénu:
STR_QUANTITY_OF_SEA_LAKES :{BLACK}Mnozstvo jazier:
STR_SMOOTHNESS :{BLACK}Clenitost:
STR_SNOW_LINE_HEIGHT :{BLACK}Vyska linie snehu:
@@ -3381,7 +3369,7 @@
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_TRANSPARENT_LOADING_DESC :{BLACK}Prepnút priehladnost pre ukazovatele nakladania a vykladania
STR_PERCENT_UP_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}
STR_PERCENT_UP :{WHITE}{NUM}%{UPARROW}
@@ -3425,11 +3413,6 @@
STR_GROUP_RENAME_TIP :{BLACK}Premenovat vybranú skupinu
STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}Kliknite pre znemoznenie automatického nahradzovania v skupine
-STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Zisk tento rok: {GREEN}{CURRENCY} {BLACK}(minulý rok: {GREEN}{CURRENCY}{BLACK})
-STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Zisk tento rok: {RED}{CURRENCY} {BLACK}(lminulý rok: {GREEN}{CURRENCY}{BLACK})
-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}
--- a/src/lang/slovenian.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/slovenian.txt Sun Sep 02 11:17:33 2007 +0000
@@ -12,7 +12,6 @@
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}{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}
@@ -1305,7 +1304,7 @@
STR_BUOY_IS_IN_USE :{WHITE} ... boja v uporabi!
-STR_LANDINFO_COORDS :{BLACK}Koordinate: {LTBLUE}{NUM}x{NUM} ({STRING})
+STR_LANDINFO_COORDS :{BLACK}Koordinate: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Ni mogoče odstraniti dela postaje ...
STR_CANT_CONVERT_RAIL :{WHITE}Ni mogoče spremeniti tipa železnice tukaj ...
@@ -1416,34 +1415,23 @@
STR_NETWORK_PASSWORD_TIP :{BLACK}Zaščiti igro z geslom, če želiš preprečiti dostop nepovabljenim
STR_NETWORK_SELECT_MAP :{BLACK}Izberi ozemlje:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Kateri zemljevid želiš igrati?
-STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Dovoljeno število gostov:
-STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Izberite največje število gostov. Ni potrebno, da so vsi prisotni
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LAN_INTERNET_COMBO :{BLACK}{SKIP}{STRING}
STR_NETWORK_LAN :Lokalno omrežje
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :Lokalno omrežje / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (oglašuj)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :0 igralcev
-STR_NETWORK_1_PLAYERS :1 igralec
-STR_NETWORK_2_PLAYERS :2 igralca
-STR_NETWORK_3_PLAYERS :3 igralci
-STR_NETWORK_4_PLAYERS :4 igralci
-STR_NETWORK_5_PLAYERS :5 igralcev
-STR_NETWORK_6_PLAYERS :6 igralcev
-STR_NETWORK_7_PLAYERS :7 igralcev
-STR_NETWORK_8_PLAYERS :8 igralcev
-STR_NETWORK_9_PLAYERS :9 igralcev
-STR_NETWORK_10_PLAYERS :10 igralcev
+STR_NETWORK_CLIENTS_SELECT :{BLACK}{SKIP}{SKIP}{NUM} gost{P "" a i ov}
+STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Dovoljeno število gostov:
+STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Izberite največje število gostov. Ni potrebno, da so vsi prisotni
+STR_NETWORK_COMPANIES_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{NUM} podjet{P je ji ja ij}
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Dovoljeno število podjetij:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Omeji strežnik na določeno število podjetij
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_SPECTATORS_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{NUM} opazoval{P ec ca ci cev}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Največje število opazovalcev:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Omeji strežnik na določeno število opazovalcev
-STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Govorni jezik:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Drugi igralci bodo lahko vedeli, kateri jezik se govori na strežniku
-STR_NETWORK_COMBO5 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LANGUAGE_COMBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}Začni igro
STR_NETWORK_START_GAME_TIP :{BLACK}Poženi novo večigralsko igro na naključnem ozemlju
STR_NETWORK_LOAD_GAME :{BLACK}Naloži igro
@@ -1674,10 +1662,10 @@
STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Železniški tiri s kombiniranimi signali
STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS :Tiri z normalnimi in uvodnimi signali
STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :Tiri z normalnimi in izhodnimi signali
-STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :Tiri z normalnimi in kombiniranimi signali
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :Železniški tiri z normalnimi in kombiniranimi signali
STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS :Tiri z uvodnimi in izhodnimi signali
-STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :Tiri z uvodnimi in kombiniranimi signali
-STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Tiri z izhodnimi in kombiniranimi signali
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :Železniški tiri s pred- in kombiniranimi signali
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Železniški tiri z izhodnimi in kombiniranimi signali
STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Najprej moraš odstraniti železniško postajo
@@ -3441,11 +3429,6 @@
STR_GROUP_RENAME_TIP :{BLACK}Preimenuj izbrano skupino
STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}Klikni za zaščito skupine pred splošno samoobnovo
-STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Dobiček letos: {GREEN}{CURRENCY} {BLACK}(lani: {GREEN}{CURRENCY}{BLACK})
-STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Dobiček letos: {RED}{CURRENCY} {BLACK}(lani: {GREEN}{CURRENCY}{BLACK})
-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})
-
STR_COMPANY_NAME :{COMPANY}
STR_ENGINE_NAME :{ENGINE}
STR_GROUP_NAME :{GROUP}
--- a/src/lang/spanish.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/spanish.txt Sun Sep 02 11:17:33 2007 +0000
@@ -12,7 +12,6 @@
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}{CURRENCY}
-STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Se requiere terreno llano
STR_0008_WAITING :{BLACK}Esperando: {WHITE}{STRING}
@@ -1264,7 +1263,7 @@
STR_BUOY_IS_IN_USE :{WHITE}...boya en uso!
-STR_LANDINFO_COORDS :{BLACK}Coordenadas: {LTBLUE}{NUM}x{NUM} ({STRING})
+STR_LANDINFO_COORDS :{BLACK}Coordenadas: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}No se puede retirar parte de la estación...
STR_CANT_CONVERT_RAIL :{WHITE}No se puede convertir tipo de raíl aquí...
@@ -1375,34 +1374,23 @@
STR_NETWORK_PASSWORD_TIP :{BLACK}Proteje tu juego con una contraseña si no quieres que otras personas se unan a él
STR_NETWORK_SELECT_MAP :{BLACK}Selecciona mapa:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}¿En qué mapa desea jugar?
-STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Máx. clientes permitidos:
-STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Seleccione un número máximo de clientes. No todos los slots serán ocupados.
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LAN_INTERNET_COMBO :{BLACK}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :LAN / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (anuncio)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :0 jugadores
-STR_NETWORK_1_PLAYERS :1 jugador
-STR_NETWORK_2_PLAYERS :2 jugadores
-STR_NETWORK_3_PLAYERS :3 jugadores
-STR_NETWORK_4_PLAYERS :4 jugadores
-STR_NETWORK_5_PLAYERS :5 jugadores
-STR_NETWORK_6_PLAYERS :6 jugadores
-STR_NETWORK_7_PLAYERS :7 jugadores
-STR_NETWORK_8_PLAYERS :8 jugadores
-STR_NETWORK_9_PLAYERS :9 jugadores
-STR_NETWORK_10_PLAYERS :10 jugadores
+STR_NETWORK_CLIENTS_SELECT :{BLACK}{SKIP}{SKIP}{NUM} cliente{P "" s}
+STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Máx. clientes permitidos:
+STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Seleccione un número máximo de clientes. No todos los slots serán ocupados.
+STR_NETWORK_COMPANIES_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{NUM} compañia{P y s}
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Máximo compañías:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Limitar el servidor a un cierto número de compañías
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_SPECTATORS_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{NUM} espectador{P "" es}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Espectadores máximos
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Limitar el servidor a un cierto número de espectadores
-STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Idioma hablado:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Otros jugadores sabrán cual es el idioma hablado en este servidor.
-STR_NETWORK_COMBO5 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LANGUAGE_COMBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}Empezar Juego
STR_NETWORK_START_GAME_TIP :{BLACK}Empezar un nuevo juego en red desde un mapa al azar o escenario
STR_NETWORK_LOAD_GAME :{BLACK}Cargar Juego
@@ -3362,11 +3350,6 @@
STR_GROUP_RENAME_TIP :{BLACK}Renombrar el grupo seleccionado
STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}Pulsa para proteger este grupo del auto reemplazado global
-STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Beneficio este año: {GREEN}{CURRENCY} {BLACK}(año pasado: {GREEN}{CURRENCY}{BLACK})
-STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Beneficio este año: {RED}{CURRENCY} {BLACK}(año pasado: {GREEN}{CURRENCY}{BLACK})
-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_COMPANY_NAME :{COMPANY}
STR_ENGINE_NAME :{ENGINE}
STR_GROUP_NAME :{GROUP}
--- a/src/lang/swedish.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/swedish.txt Sun Sep 02 11:17:33 2007 +0000
@@ -11,7 +11,6 @@
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}{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}
@@ -1263,7 +1262,6 @@
STR_BUOY_IS_IN_USE :{WHITE}... bojen används!
-STR_LANDINFO_COORDS :{BLACK}Koordinater: {LTBLUE}{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Kan ej ta bort del av station...
STR_CANT_CONVERT_RAIL :{WHITE}Kan inte konvertera spårtyp här...
@@ -1376,32 +1374,16 @@
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Vilken karta vill du spela?
STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Max antal tillåtna klienter:
STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Välj max antal tillåtna klienter. Alla platser måste inte fyllas.
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :LAN / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (publik)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :Inga spelare
-STR_NETWORK_1_PLAYERS :1 spelare
-STR_NETWORK_2_PLAYERS :2 spelare
-STR_NETWORK_3_PLAYERS :3 spelare
-STR_NETWORK_4_PLAYERS :4 spelare
-STR_NETWORK_5_PLAYERS :5 spelare
-STR_NETWORK_6_PLAYERS :6 spelare
-STR_NETWORK_7_PLAYERS :7 spelare
-STR_NETWORK_8_PLAYERS :8 spelare
-STR_NETWORK_9_PLAYERS :9 spelare
-STR_NETWORK_10_PLAYERS :10 spelare
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Max företag:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Begränsa antalet företag på servern
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Max observatörer:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Begränsa antalet observatörer på servern
-STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Språk som talas:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Andra spelare kommer vara medvetna vilket språk som talas på servern.
-STR_NETWORK_COMBO5 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}Starta spelet
STR_NETWORK_START_GAME_TIP :{BLACK}Starta ett nytt spel med en slumpmässig karta eller från ett scenario
STR_NETWORK_LOAD_GAME :{BLACK}Ladda spel
@@ -1629,13 +1611,9 @@
STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :Järnväg med vanliga signaler
STR_RAILROAD_TRACK_WITH_PRESIGNALS :Järnväg med för-signaler
STR_RAILROAD_TRACK_WITH_EXITSIGNALS :Järnväg med utgående signaler
-STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Järnväg med kombinerade signaler
STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS :Järnväg med normala signaler och för-signaler
STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :Järnväg med normala signaler och utfarts-signaler
-STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :Järnväg med normala signaler och kombo-signaler
STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS :Järnväg med för- och utfarts-signaler
-STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :Järnväg med för- och kombo-signaler
-STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Järnväg med utfards-signaler och kombo-signaler
STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Måste ta bort tågstationen först
@@ -3357,10 +3335,6 @@
STR_GROUP_RENAME_TIP :{BLACK}Döp om den valda gruppen
STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}Klicka för att skydda denna grupp från globalt autoutbyte
-STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Vinst detta år: {GREEN}{CURRENCY} {BLACK}(förra året: {GREEN}{CURRENCY}{BLACK})
-STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Vinst detta år: {RED}{CURRENCY} {BLACK}(förra året: {GREEN}{CURRENCY}{BLACK})
-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}
--- a/src/lang/traditional_chinese.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/traditional_chinese.txt Sun Sep 02 11:17:33 2007 +0000
@@ -11,7 +11,6 @@
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}太接近版圖邊緣
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}現金不足 - 需要 {CURRENCY}
STR_0004 :{WHITE}{CURRENCY}
-STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}需要平地
STR_0008_WAITING :{BLACK}等候:{WHITE}{STRING}
@@ -1263,7 +1262,6 @@
STR_BUOY_IS_IN_USE :{WHITE}...浮標正被使用!
-STR_LANDINFO_COORDS :{BLACK}座標:{LTBLUE}{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}不能移除車站部份...
STR_CANT_CONVERT_RAIL :{WHITE}無法轉換軌道種類...
@@ -1376,32 +1374,16 @@
STR_NETWORK_SELECT_MAP_TIP :{BLACK}您想玩哪個地圖?
STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}客戶端上限:
STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}選擇連線人數上限。未必每個名額都需連線
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LAN :局域網絡(LAN)
STR_NETWORK_INTERNET :互聯網
STR_NETWORK_LAN_INTERNET :局域網/互聯網
STR_NETWORK_INTERNET_ADVERTISE :Internet (廣告)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :0 位玩家
-STR_NETWORK_1_PLAYERS :1 位玩家
-STR_NETWORK_2_PLAYERS :2 位玩家
-STR_NETWORK_3_PLAYERS :3 位玩家
-STR_NETWORK_4_PLAYERS :4 位玩家
-STR_NETWORK_5_PLAYERS :5 位玩家
-STR_NETWORK_6_PLAYERS :6 位玩家
-STR_NETWORK_7_PLAYERS :7 位玩家
-STR_NETWORK_8_PLAYERS :8 位玩家
-STR_NETWORK_9_PLAYERS :9 位玩家
-STR_NETWORK_10_PLAYERS :10 位玩家
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}公司上限:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}限制伺服器可以建立的公司數
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}觀看者上限:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}限制可加入的觀察者數量
-STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}所用的語言:
STR_NETWORK_LANGUAGE_TIP :{BLACK}讓其他人知道這個伺服器使用的交談語言
-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}開始遊戲
STR_NETWORK_START_GAME_TIP :{BLACK}以隨機地圖或劇本開始新的網路遊戲
STR_NETWORK_LOAD_GAME :{BLACK}載入遊戲
@@ -1629,13 +1611,9 @@
STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :有一般號誌的鐵軌
STR_RAILROAD_TRACK_WITH_PRESIGNALS :有入口號誌的鐵軌
STR_RAILROAD_TRACK_WITH_EXITSIGNALS :有出口號誌的鐵軌
-STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :有綜合號誌的鐵軌
STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS :有一般號誌及入口號誌的鐵軌
STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :有一般號誌及出口號誌的鐵軌
-STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :有一般號誌及綜合號誌的鐵軌
STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS :有入口號誌及出口號誌的鐵軌
-STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :有入口號誌及綜合號誌的鐵軌
-STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :有出口號誌及綜合號誌的鐵軌
STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}必須先移除火車站
@@ -3361,10 +3339,6 @@
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}
--- a/src/lang/turkish.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/turkish.txt Sun Sep 02 11:17:33 2007 +0000
@@ -11,7 +11,6 @@
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}{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}
@@ -1254,7 +1253,6 @@
STR_BUOY_IS_IN_USE :{WHITE}...samandıra kullanımda!
-STR_LANDINFO_COORDS :{BLACK}Koordinatlar: {LTBLUE}{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}İstasyonun parçasi kaldırılamaz...
STR_CANT_CONVERT_RAIL :{WHITE}Ray türü değiştirilemiyor...
@@ -1367,32 +1365,16 @@
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Hangi haritada oynamak istiyorsun?
STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}İzin verilen en fazla oyuncu:
STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}İzin verilen en fazla oyuncu sayısını seç. Her yerin dolması gerekmez
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :İnternet
STR_NETWORK_LAN_INTERNET :LAN / internet
STR_NETWORK_INTERNET_ADVERTISE :İnternet (reklam vererek)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :0 oyuncu
-STR_NETWORK_1_PLAYERS :1 oyuncu
-STR_NETWORK_2_PLAYERS :2 oyuncu
-STR_NETWORK_3_PLAYERS :3 oyuncu
-STR_NETWORK_4_PLAYERS :4 oyuncu
-STR_NETWORK_5_PLAYERS :5 oyuncu
-STR_NETWORK_6_PLAYERS :6 oyuncu
-STR_NETWORK_7_PLAYERS :7 oyuncu
-STR_NETWORK_8_PLAYERS :8 oyuncu
-STR_NETWORK_9_PLAYERS :9 oyuncu
-STR_NETWORK_10_PLAYERS :10 oyuncu
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}En fazla şirket:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Sunucudaki şirket sayısını sınırla
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}En fazla izleyici:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Sunucudaki izleyici sayısını sınırla
-STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Konuşulan dil:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Diğer oyuncular sunucuda hangi dilin konuşulacağını bilecek
-STR_NETWORK_COMBO5 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}Oyunu Başlat
STR_NETWORK_START_GAME_TIP :{BLACK}Rastgele harita ya da senaryoda network oyunu aç
STR_NETWORK_LOAD_GAME :{BLACK}Oyun Yükle
@@ -1613,13 +1595,9 @@
STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :Normal sinyalli ray
STR_RAILROAD_TRACK_WITH_PRESIGNALS :Ön-sinayalli ray
STR_RAILROAD_TRACK_WITH_EXITSIGNALS :Çıkış-sinyalli ray
-STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Ön+çikis-sinyalli ray
STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS :Normal ve ön sinyalli ray
STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :Normal ve çıkış sinyalli ray
-STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :Normal ve birleşik sinyalli ray
STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS :Ön ve Çıkış sinyalli ray
-STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :Ön ve birleşik sinyalli ray
-STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Çıkış ve birleşik sinyalli ray
STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Önce tren istasyonu kaldırılmalı
@@ -3330,10 +3308,6 @@
STR_GROUP_RENAME_TIP :{BLACK}Seçili grubun ismini değiştir
STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}Bu grubu otomatik yenilemeden ayrı tutmak için tıklayın
-STR_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}
--- a/src/lang/ukrainian.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/ukrainian.txt Sun Sep 02 11:17:33 2007 +0000
@@ -13,7 +13,6 @@
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Надто близько до краю карти
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Недостатньо коштів - потрібно {CURRENCY}
STR_0004 :{WHITE}{CURRENCY}
-STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Потрібна рівна ділянка
STR_0008_WAITING :{BLACK}Чекає: {WHITE}{STRING}
@@ -1389,7 +1388,7 @@
STR_BUOY_IS_IN_USE :{WHITE}...бакен використовується!
-STR_LANDINFO_COORDS :{BLACK}Координати: {LTBLUE}{NUM}x{NUM} ({STRING})
+STR_LANDINFO_COORDS :{BLACK}Координати: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Не можна зруйнувати частину станції...
STR_CANT_CONVERT_RAIL :{WHITE}Тут не можна модернізувати колію...
@@ -1500,34 +1499,23 @@
STR_NETWORK_PASSWORD_TIP :{BLACK}Захистіть вашу гру паролем, якщо не бажаєте загального доступу
STR_NETWORK_SELECT_MAP :{BLACK}Виберіть карту:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}На якій карті бажаєте грати?
-STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Макс. клієнтів:
-STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Виберіть максимальну кількість клієнтів. Не всі слоти мають бути зайняті
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LAN_INTERNET_COMBO :{BLACK}{SKIP}{STRING}
STR_NETWORK_LAN :Локальна
STR_NETWORK_INTERNET :Інтернет
STR_NETWORK_LAN_INTERNET :Локальна/Інтернет
STR_NETWORK_INTERNET_ADVERTISE :Internet (advertise)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :0 гравців
-STR_NETWORK_1_PLAYERS :1 гравець
-STR_NETWORK_2_PLAYERS :2 гравця
-STR_NETWORK_3_PLAYERS :3 гравця
-STR_NETWORK_4_PLAYERS :4 гравця
-STR_NETWORK_5_PLAYERS :5 гравців
-STR_NETWORK_6_PLAYERS :6 гравців
-STR_NETWORK_7_PLAYERS :7 гравців
-STR_NETWORK_8_PLAYERS :8 гравців
-STR_NETWORK_9_PLAYERS :9 гравців
-STR_NETWORK_10_PLAYERS :10 гравців
+STR_NETWORK_CLIENTS_SELECT :{BLACK}{SKIP}{SKIP}{NUM} клієнт{P "" а ів}
+STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Макс. клієнтів:
+STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Виберіть максимальну кількість клієнтів. Не всі слоти мають бути зайняті
+STR_NETWORK_COMPANIES_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{NUM} компані{P я ї й}
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Максимум компаній:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Обмежує кількість компаній на сервері
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_SPECTATORS_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{NUM} споглядач{P "" а ів}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Максмум глядачів:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Обмежує кількість глядачів на сервері
-STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Мова:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Інші гравці будуть знати якою мовою спілкуються на сервері
-STR_NETWORK_COMBO5 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
+STR_NETWORK_LANGUAGE_COMBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}Почати гру
STR_NETWORK_START_GAME_TIP :{BLACK}Почати нову мережну гру з випадковою картою або сценарієм
STR_NETWORK_LOAD_GAME :{BLACK}Завантаження гри
@@ -1755,13 +1743,13 @@
STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :Колія зі звичайними сигналами
STR_RAILROAD_TRACK_WITH_PRESIGNALS :Колія з вхідними сигналами
STR_RAILROAD_TRACK_WITH_EXITSIGNALS :Колія з вихідними сигналами
-STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Колія з комбінованими сигналами
+STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Колія з комбо-сигналами
STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS :Залізнична колія зі звичайним та пре-сигналами
STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :Залізнична колія зі звичайним та вихід-сигналами
-STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :Залізнична колія зі звичайним та комбо-сигналами
+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_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :Колія з пре- і комбо-сигналами
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Колія з вихідними і комбо-сигналами
STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Спочатку потрібно знести залізничну станцію
@@ -3524,11 +3512,6 @@
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}
--- a/src/lang/unfinished/afrikaans.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/unfinished/afrikaans.txt Sun Sep 02 11:17:33 2007 +0000
@@ -9,7 +9,6 @@
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}{CURRENCY}
-STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Platte land vereis
STR_0008_WAITING :{BLACK}Wagtend: {WHITE}{STRING}
@@ -1142,7 +1141,6 @@
STR_BUOY_IS_IN_USE :{WHITE}...baken is in gebruik!
-STR_LANDINFO_COORDS :{BLACK}Neweskikke: {LTBLUE}{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Kan nie deel van stasie verwyder nie...
STR_CANT_CONVERT_RAIL :{WHITE}Kan nie spoor tipe hier verdoel nie...
@@ -1243,32 +1241,16 @@
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Watter kaart wil jy speel?
STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Max kliente:
STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Kies die maksimum nommer van kielnte. Alle gleufe hoef nie om vol te wees nie
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :LAN / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (adverteer)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :0 spelers
-STR_NETWORK_1_PLAYERS :1 speler
-STR_NETWORK_2_PLAYERS :2 spelers
-STR_NETWORK_3_PLAYERS :3 spelers
-STR_NETWORK_4_PLAYERS :4 spelers
-STR_NETWORK_5_PLAYERS :5 spelers
-STR_NETWORK_6_PLAYERS :6 spelers
-STR_NETWORK_7_PLAYERS :7 spelers
-STR_NETWORK_8_PLAYERS :8 spelers
-STR_NETWORK_9_PLAYERS :9 spelers
-STR_NETWORK_10_PLAYERS :10 spelers
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Max maatskappye:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Beperk die bedinder na 'n sekere bedrag van maatskappye
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Max aanskouers:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Beperk die bediender na 'n sekere bedrag van aanskouers
-STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Taal gepraat:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Ander spelers sal weet watter taal op die bediender gepraat is
-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}Begin Spel
STR_NETWORK_START_GAME_TIP :{BLACK}Begin 'n nuwe netwerk spel van 'n lukraak kaart, of draaiboek
STR_NETWORK_LOAD_GAME :{BLACK}Laai Spel
--- a/src/lang/unfinished/frisian.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/unfinished/frisian.txt Sun Sep 02 11:17:33 2007 +0000
@@ -1,6 +1,6 @@
##name Frisian
##ownname Frysk
-##isocode fy
+##isocode fy_NL
##id 0x0000
STR_NULL :
@@ -8,7 +8,6 @@
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}{CURRENCY}
-STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Flak lân nedich
STR_0008_WAITING :{BLACK}Wachtsjend: {WHITE}{STRING}
--- a/src/lang/unfinished/greek.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/unfinished/greek.txt Sun Sep 02 11:17:33 2007 +0000
@@ -10,7 +10,6 @@
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Πολυ κοντά στην άκρη του χάρτη
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Δεν υπάρχουν αρκετά χρήματα - απαιτούνται {CURRENCY}
STR_0004 :{WHITE}{CURRENCY}.
-STR_0005 :{RED}{CURRENCY}.
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Απαιτείται επίπεδο εδαφος
STR_0008_WAITING :{BLACK}Αναμονη: {WHITE}{STRING}
@@ -1211,7 +1210,6 @@
STR_BUOY_IS_IN_USE :{WHITE}...σημαδούρα σε χρήση
-STR_LANDINFO_COORDS :{BLACK}Συντεταγμένες: {LTBLUE}{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Δεν μπορεί να διαλειθεί μέρος του σταθμού...
STR_CONVERT_RAIL_TIP :{BLACK}Μετατρέψτε/Αλλάξτε τον τύπο της γραμμής
--- a/src/lang/unfinished/latvian.txt Sun Aug 19 14:04:13 2007 +0000
+++ b/src/lang/unfinished/latvian.txt Sun Sep 02 11:17:33 2007 +0000
@@ -13,7 +13,6 @@
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Pārāk tuvu kartes malai
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Nepietiek naudas - nepieciešami {CURRENCY}
STR_0004 :{WHITE}{CURRENCY}
-STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Zemei jābūt plakanai
STR_0008_WAITING :{BLACK}Gaidam: {WHITE}{STRING.a}
@@ -1190,7 +1189,6 @@
STR_BUOY_IS_IN_USE :{WHITE}...boja jau tiek lietota!
-STR_LANDINFO_COORDS :{BLACK}Koordinātes: {LTBLUE}{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Nevar novākt daļu stacijas
STR_CANT_CONVERT_RAIL :{WHITE}Nevar pārveidot sliežu veidu šeit...
@@ -1302,32 +1300,16 @@
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Kuru karti jūs vēlaties spēlēt?
STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Maks. klientu sk.:
STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Izvēlaties maksimālo klientu skaitu. Ne visiem slotiem ir jābūt aizpildītiem
-STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internets
STR_NETWORK_LAN_INTERNET :LAN / Internets
STR_NETWORK_INTERNET_ADVERTISE :Internets (reklamēt)
-STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_0_PLAYERS :0 spēlētāju
-STR_NETWORK_1_PLAYERS :1 spēlētājs
-STR_NETWORK_2_PLAYERS :2 clienti
-STR_NETWORK_3_PLAYERS :3 spēlētāji
-STR_NETWORK_4_PLAYERS :4 spēlētāji
-STR_NETWORK_5_PLAYERS :5 spēlētāji
-STR_NETWORK_6_PLAYERS :6 spēlētāji
-STR_NETWORK_7_PLAYERS :7 spēlētāji
-STR_NETWORK_8_PLAYERS :8 spēlētāji
-STR_NETWORK_9_PLAYERS :9 spēlētāji
-STR_NETWORK_10_PLAYERS :10 spēlētāji
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Maks. uzņēmumu sk.:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Ierobežo serveri noteiktam uzņēmumu daudzumam
-STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Maks. novērotāju sk.:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Ierobēžo serveri noteiktam novērotāju skaitam
-STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Valodu, kurā runā:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Citi lietotāji zinās, kurā valodā tiek runāts uz servera
-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}Sakt spçli
STR_NETWORK_START_GAME_TIP :{BLACK}Sāk jaunu tīkla spēli ar nejaušu karti vai scenāriju
STR_NETWORK_LOAD_GAME :{BLACK}Ielādēt spēli
--- a/src/macros.h Sun Aug 19 14:04:13 2007 +0000
+++ b/src/macros.h Sun Sep 02 11:17:33 2007 +0000
@@ -421,6 +421,28 @@
}
/**
+ * Counts the number of set bits in a variable.
+ *
+ * @param value the value to count the number of bits in.
+ * @return the number of bits.
+ */
+template<typename T> static inline uint COUNTBITS(T value)
+{
+ uint num;
+
+ /* This loop is only called once for every bit set by clearing the lowest
+ * bit in each loop. The number of bits is therefore equal to the number of
+ * times the loop was called. It was found at the following website:
+ * http://graphics.stanford.edu/~seander/bithacks.html */
+
+ for (num = 0; value != 0; num++) {
+ value &= (T)(value - 1);
+ }
+
+ return num;
+}
+
+/**
* Returns true if value a has only one bit set to 1
*
* This macro returns true if only one bit is set.
--- a/src/main_gui.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/main_gui.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -90,7 +90,7 @@
#ifdef ENABLE_NETWORK
case 3: { // Give money, you can only give money in excess of loan
const Player *p = GetPlayer(_current_player);
- Money money = min(p->player_money - p->current_loan, atoi(str) / _currency->rate);
+ Money money = min(p->player_money - p->current_loan, (Money)(atoi(str) / _currency->rate));
uint32 money_c = clamp(ClampToI32(money), 0, 20000000); // Clamp between 20 million and 0
@@ -1086,7 +1086,7 @@
StringID msg =
mode ? STR_0808_CAN_T_RAISE_LAND_HERE : STR_0809_CAN_T_LOWER_LAND_HERE;
- DoCommandP(tile, 8, (uint32)mode, CcTerraform, CMD_TERRAFORM_LAND | CMD_AUTO | CMD_MSG(msg));
+ DoCommandP(tile, SLOPE_N, (uint32)mode, CcTerraform, CMD_TERRAFORM_LAND | CMD_AUTO | CMD_MSG(msg));
} else {
SndPlayTileFx(SND_1F_SPLAT, tile);
@@ -1113,7 +1113,7 @@
BEGIN_TILE_LOOP(tile2, sizex, sizey, tile) {
if (TileHeight(tile2) == h) {
- DoCommandP(tile2, 8, (uint32)mode, NULL, CMD_TERRAFORM_LAND | CMD_AUTO);
+ DoCommandP(tile2, SLOPE_N, (uint32)mode, NULL, CMD_TERRAFORM_LAND | CMD_AUTO);
}
} END_TILE_LOOP(tile2, sizex, sizey, tile)
}
@@ -2068,7 +2068,7 @@
if (p != NULL) {
/* Draw player money */
SetDParam(0, p->player_money);
- DrawStringCentered(w->widget[2].left + 70, 1, p->player_money >= 0 ? STR_0004 : STR_0005, 0);
+ DrawStringCentered(w->widget[2].left + 70, 1, STR_0004, 0);
}
/* Draw status bar */
--- a/src/map.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/map.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -84,7 +84,7 @@
snprintf(buf, lengthof(buf), "TILE_ADD(%s) when adding 0x%.4X and 0x%.4X failed",
exp, tile, add);
-#if !defined(_MSC_VER)
+#if !defined(_MSC_VER) || defined(WINCE)
fprintf(stderr, "%s:%d %s\n", file, line, buf);
#else
_assert(buf, (char*)file, line);
--- a/src/minilzo.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/minilzo.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -60,7 +60,7 @@
# define LZO_HAVE_CONFIG_H
#endif
-#if !defined(LZO_NO_SYS_TYPES_H)
+#if !defined(LZO_NO_SYS_TYPES_H) && !defined(WINCE)
# include <sys/types.h>
#endif
#include <stdio.h>
--- a/src/misc.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/misc.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -151,7 +151,7 @@
InitializeCheats();
InitTextEffects();
- InitTextMessage();
+ InitChatMessage();
InitializeAnimatedTiles();
InitializeLandscapeVariables(false);
@@ -273,22 +273,6 @@
return i;
}
-int CountBitsSet(uint32 value)
-{
- int num;
-
- /* This loop is only called once for every bit set by clearing the lowest
- * bit in each loop. The number of bits is therefore equal to the number of
- * times the loop was called. It was found at the following website:
- * http://graphics.stanford.edu/~seander/bithacks.html */
-
- for (num = 0; value != 0; num++) {
- value &= value - 1;
- }
-
- return num;
-}
-
static void Save_NAME()
{
int i;
--- a/src/misc/strapi.hpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/misc/strapi.hpp Sun Sep 02 11:17:33 2007 +0000
@@ -38,7 +38,7 @@
/** ::vsprintf wrapper specialization for char */
template <> /*static*/ inline int CStrApiBaseT<char>::SPrintFL(char *buf, size_t count, const char *fmt, va_list args)
{
-#if defined(_MSC_VER) && (_MSC_VER >= 1400) // VC 8.0 and above
+#if defined(_MSC_VER) && (_MSC_VER >= 1400) && !defined(WINCE) // VC 8.0 and above
return ::vsnprintf_s(buf, count, count - 1, fmt, args);
#else /* ! VC 8.0 and above */
return ::vsnprintf(buf, count, fmt, args);
@@ -55,7 +55,7 @@
/** ::vsprintf wrapper specialization for wchar_t */
template <> /*static*/ inline int CStrApiBaseT<wchar_t>::SPrintFL(wchar_t *buf, size_t count, const wchar_t *fmt, va_list args)
{
-#if defined(_MSC_VER) && (_MSC_VER >= 1400) // VC 8.0 and above
+#if defined(_MSC_VER) && (_MSC_VER >= 1400) && !defined(WINCE) // VC 8.0 and above
return ::_vsnwprintf_s(buf, count, count - 1, fmt, args);
#else /* ! VC 8.0 and above */
# if defined(_WIN32)
--- a/src/misc_gui.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/misc_gui.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -130,7 +130,8 @@
snprintf(_userstring, lengthof(_userstring), "0x%.4X", tile);
SetDParam(0, TileX(tile));
SetDParam(1, TileY(tile));
- SetDParam(2, STR_SPEC_USERSTRING);
+ SetDParam(2, TileHeight(tile));
+ SetDParam(3, STR_SPEC_USERSTRING);
GetString(_landinfo_data[3], STR_LANDINFO_COORDS, lastof(_landinfo_data[3]));
SetDParam(0, STR_01A9_NONE);
--- a/src/music/win32_m.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/music/win32_m.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -11,6 +11,7 @@
bool playing;
int new_vol;
HANDLE wait_obj;
+ HANDLE thread;
UINT_PTR devid;
char start_song[260];
} _midi;
@@ -84,8 +85,6 @@
static DWORD WINAPI MidiThread(LPVOID arg)
{
- _midi.wait_obj = CreateEvent(NULL, FALSE, FALSE, NULL);
-
do {
char *s;
int vol;
@@ -102,7 +101,7 @@
s[0] = '\0';
// Delay somewhat in case we don't manage to play.
- if (!_midi.playing) Sleep(5000);
+ if (!_midi.playing) WaitForMultipleObjects(1, &_midi.wait_obj, FALSE, 5000);
}
if (_midi.stop_song && _midi.playing) {
@@ -116,14 +115,13 @@
WaitForMultipleObjects(1, &_midi.wait_obj, FALSE, 1000);
} while (!_midi.terminate);
- DeleteObject(_midi.wait_obj);
+ MidiIntStopSong();
return 0;
}
const char *MusicDriver_Win32::Start(const char * const *parm)
{
MIDIOUTCAPS midicaps;
- DWORD threadId;
UINT nbdev;
UINT_PTR dev;
char buf[16];
@@ -143,7 +141,8 @@
}
}
- if (CreateThread(NULL, 8192, MidiThread, 0, 0, &threadId) == NULL) return "Failed to create thread";
+ if (NULL == (_midi.wait_obj = CreateEvent(NULL, FALSE, FALSE, NULL))) return "Failed to create event";
+ if (NULL == (_midi.thread = CreateThread(NULL, 8192, MidiThread, 0, 0, NULL))) return "Failed to create thread";
return NULL;
}
@@ -152,4 +151,7 @@
{
_midi.terminate = true;
SetEvent(_midi.wait_obj);
+ WaitForMultipleObjects(1, &_midi.thread, true, INFINITE);
+ CloseHandle(_midi.wait_obj);
+ CloseHandle(_midi.thread);
}
--- a/src/network/network.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/network/network.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -200,7 +200,7 @@
debug_dump_commands("ddc:cmsg:%d;%d;%s\n", _date, _date_fract, message);
#endif /* DUMP_COMMANDS */
IConsolePrintF(color, "%s", message);
- AddTextMessage(color, duration, "%s", message);
+ AddChatMessage(color, duration, "%s", message);
}
// Calculate the frame-lag of a client
--- a/src/network/network_gui.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/network/network_gui.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -35,6 +35,7 @@
struct network_d {
PlayerID company; // select company in network lobby
byte field; // select text-field in start-server and game-listing
+ byte widget_id; ///< The widget that has the pop-up input menu
NetworkGameList *server; // selected server in lobby and game-listing
FiosItem *map; // selected map in start-server
};
@@ -70,21 +71,6 @@
INVALID_STRING_ID
};
-static const StringID _players_dropdown[] = {
- STR_NETWORK_0_PLAYERS,
- STR_NETWORK_1_PLAYERS,
- STR_NETWORK_2_PLAYERS,
- STR_NETWORK_3_PLAYERS,
- STR_NETWORK_4_PLAYERS,
- STR_NETWORK_5_PLAYERS,
- STR_NETWORK_6_PLAYERS,
- STR_NETWORK_7_PLAYERS,
- STR_NETWORK_8_PLAYERS,
- STR_NETWORK_9_PLAYERS,
- STR_NETWORK_10_PLAYERS,
- INVALID_STRING_ID
-};
-
static StringID _language_dropdown[NETLANG_COUNT + 1] = {STR_NULL};
void SortNetworkLanguages()
@@ -264,7 +250,7 @@
sel->info.grfconfig == NULL);
SetDParam(0, 0x00);
- SetDParam(7, _lan_internet_types_dropdown[_network_lan_internet]);
+ SetDParam(1, _lan_internet_types_dropdown[_network_lan_internet]);
DrawWindowWidgets(w);
DrawEditBox(w, &WP(w, network_ql_d).q, 3);
@@ -535,38 +521,38 @@
}
static const Widget _network_game_window_widgets[] = {
-{ WWT_CLOSEBOX, RESIZE_NONE, BGC, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
-{ WWT_CAPTION, RESIZE_RIGHT, BGC, 11, 449, 0, 13, STR_NETWORK_MULTIPLAYER, STR_NULL},
-{ WWT_PANEL, RESIZE_RB, BGC, 0, 449, 14, 263, 0x0, STR_NULL},
+{ WWT_CLOSEBOX, RESIZE_NONE, BGC, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
+{ WWT_CAPTION, RESIZE_RIGHT, BGC, 11, 449, 0, 13, STR_NETWORK_MULTIPLAYER, STR_NULL},
+{ WWT_PANEL, RESIZE_RB, BGC, 0, 449, 14, 263, 0x0, STR_NULL},
/* LEFT SIDE */
-{ WWT_PANEL, RESIZE_LR, BGC, 290, 440, 22, 33, 0x0, STR_NETWORK_ENTER_NAME_TIP},
-
-{ WWT_INSET, RESIZE_NONE, BGC, 90, 181, 22, 33, STR_NETWORK_COMBO1, STR_NETWORK_CONNECTION_TIP},
-{ WWT_TEXTBTN, RESIZE_NONE, BGC, 170, 180, 23, 32, STR_0225, STR_NETWORK_CONNECTION_TIP},
+{ WWT_PANEL, RESIZE_LR, BGC, 290, 440, 22, 33, 0x0, STR_NETWORK_ENTER_NAME_TIP},
-{ WWT_PUSHTXTBTN, RESIZE_RIGHT, BTC, 10, 70, 42, 53, STR_NETWORK_GAME_NAME, STR_NETWORK_GAME_NAME_TIP},
-{ WWT_PUSHTXTBTN, RESIZE_LR, BTC, 71, 150, 42, 53, STR_NETWORK_CLIENTS_CAPTION, STR_NETWORK_CLIENTS_CAPTION_TIP},
-{ WWT_PUSHTXTBTN, RESIZE_LR, BTC, 151, 190, 42, 53, STR_EMPTY, STR_NETWORK_INFO_ICONS_TIP},
+{ WWT_INSET, RESIZE_NONE, BGC, 90, 181, 22, 33, STR_NETWORK_LAN_INTERNET_COMBO, STR_NETWORK_CONNECTION_TIP},
+{ WWT_TEXTBTN, RESIZE_NONE, BGC, 170, 180, 23, 32, STR_0225, STR_NETWORK_CONNECTION_TIP},
-{ WWT_MATRIX, RESIZE_RB, BGC, 10, 190, 54, 236, (13 << 8) + 1, STR_NETWORK_CLICK_GAME_TO_SELECT},
-{ WWT_SCROLLBAR, RESIZE_LRB, BGC, 191, 202, 42, 236, STR_NULL, STR_0190_SCROLL_BAR_SCROLLS_LIST},
+{ WWT_PUSHTXTBTN, RESIZE_RIGHT, BTC, 10, 70, 42, 53, STR_NETWORK_GAME_NAME, STR_NETWORK_GAME_NAME_TIP},
+{ WWT_PUSHTXTBTN, RESIZE_LR, BTC, 71, 150, 42, 53, STR_NETWORK_CLIENTS_CAPTION, STR_NETWORK_CLIENTS_CAPTION_TIP},
+{ WWT_PUSHTXTBTN, RESIZE_LR, BTC, 151, 190, 42, 53, STR_EMPTY, STR_NETWORK_INFO_ICONS_TIP},
-{ WWT_PUSHTXTBTN, RESIZE_TB, BTC, 10, 110, 246, 257, STR_NETWORK_FIND_SERVER, STR_NETWORK_FIND_SERVER_TIP},
-{ WWT_PUSHTXTBTN, RESIZE_TB, BTC, 118, 218, 246, 257, STR_NETWORK_ADD_SERVER, STR_NETWORK_ADD_SERVER_TIP},
+{ WWT_MATRIX, RESIZE_RB, BGC, 10, 190, 54, 236, (13 << 8) + 1, STR_NETWORK_CLICK_GAME_TO_SELECT},
+{ WWT_SCROLLBAR, RESIZE_LRB, BGC, 191, 202, 42, 236, STR_NULL, STR_0190_SCROLL_BAR_SCROLLS_LIST},
+
+{ WWT_PUSHTXTBTN, RESIZE_TB, BTC, 10, 110, 246, 257, STR_NETWORK_FIND_SERVER, STR_NETWORK_FIND_SERVER_TIP},
+{ WWT_PUSHTXTBTN, RESIZE_TB, BTC, 118, 218, 246, 257, STR_NETWORK_ADD_SERVER, STR_NETWORK_ADD_SERVER_TIP},
/* RIGHT SIDE */
-{ WWT_PUSHTXTBTN, RESIZE_TB, BTC, 226, 326, 246, 257, STR_NETWORK_START_SERVER, STR_NETWORK_START_SERVER_TIP},
-{ WWT_PUSHTXTBTN, RESIZE_TB, BTC, 334, 434, 246, 257, STR_012E_CANCEL, STR_NULL},
-
-{ WWT_PANEL, RESIZE_LRB, BGC, 210, 440, 42, 236, 0x0, STR_NULL},
+{ WWT_PUSHTXTBTN, RESIZE_TB, BTC, 226, 326, 246, 257, STR_NETWORK_START_SERVER, STR_NETWORK_START_SERVER_TIP},
+{ WWT_PUSHTXTBTN, RESIZE_TB, BTC, 334, 434, 246, 257, STR_012E_CANCEL, STR_NULL},
-{ WWT_PUSHTXTBTN, RESIZE_LRTB, BTC, 215, 315, 215, 226, STR_NETWORK_JOIN_GAME, STR_NULL},
-{ WWT_PUSHTXTBTN, RESIZE_LRTB, BTC, 330, 435, 215, 226, STR_NETWORK_REFRESH, STR_NETWORK_REFRESH_TIP},
+{ WWT_PANEL, RESIZE_LRB, BGC, 210, 440, 42, 236, 0x0, STR_NULL},
-{ WWT_PUSHTXTBTN, RESIZE_LRTB, BTC, 330, 435, 197, 208, STR_NEWGRF_SETTINGS_BUTTON, STR_NULL},
+{ WWT_PUSHTXTBTN, RESIZE_LRTB, BTC, 215, 315, 215, 226, STR_NETWORK_JOIN_GAME, STR_NULL},
+{ WWT_PUSHTXTBTN, RESIZE_LRTB, BTC, 330, 435, 215, 226, STR_NETWORK_REFRESH, STR_NETWORK_REFRESH_TIP},
-{ WWT_RESIZEBOX, RESIZE_LRTB, BGC, 438, 449, 252, 263, 0x0, STR_RESIZE_BUTTON },
+{ WWT_PUSHTXTBTN, RESIZE_LRTB, BTC, 330, 435, 197, 208, STR_NEWGRF_SETTINGS_BUTTON, STR_NULL},
+
+{ WWT_RESIZEBOX, RESIZE_LRTB, BGC, 438, 449, 252, 263, 0x0, STR_RESIZE_BUTTON },
{ WIDGETS_END},
};
@@ -631,11 +617,11 @@
int y = NSSWND_START, pos;
const FiosItem *item;
- SetDParam( 7, _connection_types_dropdown[_network_advertise]);
- SetDParam( 9, _players_dropdown[_network_game_info.clients_max]);
- SetDParam(11, _players_dropdown[_network_game_info.companies_max]);
- SetDParam(13, _players_dropdown[_network_game_info.spectators_max]);
- SetDParam(15, STR_NETWORK_LANG_ANY + _network_game_info.server_lang);
+ SetDParam(1, _connection_types_dropdown[_network_advertise]);
+ SetDParam(2, _network_game_info.clients_max);
+ SetDParam(3, _network_game_info.companies_max);
+ SetDParam(4, _network_game_info.spectators_max);
+ SetDParam(5, STR_NETWORK_LANG_ANY + _network_game_info.server_lang);
DrawWindowWidgets(w);
GfxFillRect(11, 63, 258, 215, 0xD7);
@@ -676,11 +662,12 @@
nd->field = e->we.click.widget;
switch (e->we.click.widget) {
case 0: /* Close 'X' */
- case 19: /* Cancel button */
+ case 22: /* Cancel button */
ShowNetworkGameWindow();
break;
case 4: /* Set password button */
+ nd->widget_id = 4;
ShowQueryString(BindCString(_network_server_password), STR_NETWORK_SET_PASSWORD, 20, 250, w, CS_ALPHANUMERAL);
break;
@@ -696,16 +683,38 @@
case 7: case 8: /* Connection type */
ShowDropDownMenu(w, _connection_types_dropdown, _network_advertise, 8, 0, 0); // do it for widget 8
break;
- case 9: case 10: /* Number of Players (hide 0 and 1 players) */
- ShowDropDownMenu(w, _players_dropdown, _network_game_info.clients_max, 10, 0, 3);
+ case 9: case 11: // Click on up/down button for number of players
+ case 12: case 14: // Click on up/down button for number of companies
+ case 15: case 17: // Click on up/down button for number of spectators
+ /* Don't allow too fast scrolling */
+ if ((w->flags4 & WF_TIMEOUT_MASK) <= 2 << WF_TIMEOUT_SHL) {
+ HandleButtonClick(w, e->we.click.widget);
+ SetWindowDirty(w);
+ switch (e->we.click.widget) {
+ default: NOT_REACHED();
+ case 9: case 11: _network_game_info.clients_max = clamp(_network_game_info.clients_max + e->we.click.widget - 10, 2, MAX_CLIENTS); break;
+ case 12: case 14: _network_game_info.companies_max = clamp(_network_game_info.companies_max + e->we.click.widget - 13, 1, MAX_PLAYERS); break;
+ case 15: case 17: _network_game_info.spectators_max = clamp(_network_game_info.spectators_max + e->we.click.widget - 16, 0, MAX_CLIENTS); break;
+ }
+ }
+ _left_button_clicked = false;
break;
- case 11: case 12: /* Number of Companies (hide 0, 9 and 10 companies; max is 8) */
- ShowDropDownMenu(w, _players_dropdown, _network_game_info.companies_max, 12, 0, 1537);
+ case 10: // Click on number of players
+ nd->widget_id = 10;
+ SetDParam(0, _network_game_info.clients_max);
+ ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_NETWORK_NUMBER_OF_CLIENTS, 3, 50, w, CS_NUMERAL);
break;
- case 13: case 14: /* Number of Spectators */
- ShowDropDownMenu(w, _players_dropdown, _network_game_info.spectators_max, 14, 0, 0);
+ case 13: // Click on number of companies
+ nd->widget_id = 13;
+ SetDParam(0, _network_game_info.companies_max);
+ ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_NETWORK_NUMBER_OF_COMPANIES, 3, 50, w, CS_NUMERAL);
break;
- case 15: case 16: { /* Language */
+ case 16: // Click on number of companies
+ nd->widget_id = 16;
+ SetDParam(0, _network_game_info.spectators_max);
+ ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_NETWORK_NUMBER_OF_SPECTATORS, 3, 50, w, CS_NUMERAL);
+ break;
+ case 18: case 19: { /* Language */
uint sel = 0;
for (uint i = 0; i < lengthof(_language_dropdown) - 1; i++) {
if (_language_dropdown[i] == STR_NETWORK_LANG_ANY + _network_game_info.server_lang) {
@@ -713,10 +722,10 @@
break;
}
}
- ShowDropDownMenu(w, _language_dropdown, sel, 16, 0, 0);
+ ShowDropDownMenu(w, _language_dropdown, sel, 19, 0, 0);
break;
}
- case 17: /* Start game */
+ case 20: /* Start game */
_is_network_server = true;
if (nd->map == NULL) { // start random new game
@@ -733,7 +742,7 @@
}
}
break;
- case 18: /* Load game */
+ case 21: /* Load game */
_is_network_server = true;
/* XXX - WC_NETWORK_WINDOW should stay, but if it stays, it gets
* copied all the elements of 'load game' and upon closing that, it segfaults */
@@ -769,39 +778,57 @@
}
break;
- case WE_ON_EDIT_TEXT: {
- ttd_strlcpy(_network_server_password, e->we.edittext.str, lengthof(_network_server_password));
- _network_game_info.use_password = (_network_server_password[0] != '\0');
+ case WE_ON_EDIT_TEXT:
+ if (e->we.edittext.str == NULL) break;
+
+ if (nd->widget_id == 4) {
+ ttd_strlcpy(_network_server_password, e->we.edittext.str, lengthof(_network_server_password));
+ _network_game_info.use_password = (_network_server_password[0] != '\0');
+ } else {
+ int32 value = atoi(e->we.edittext.str);
+ InvalidateWidget(w, nd->widget_id);
+ switch (nd->widget_id) {
+ default: NOT_REACHED();
+ case 10: _network_game_info.clients_max = clamp(value, 2, MAX_CLIENTS); break;
+ case 13: _network_game_info.companies_max = clamp(value, 1, MAX_PLAYERS); break;
+ case 16: _network_game_info.spectators_max = clamp(value, 0, MAX_CLIENTS); break;
+ }
+ }
+
SetWindowDirty(w);
- } break;
+ break;
}
}
static const Widget _network_start_server_window_widgets[] = {
-{ WWT_CLOSEBOX, RESIZE_NONE, BGC, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW },
-{ WWT_CAPTION, RESIZE_NONE, BGC, 11, 419, 0, 13, STR_NETWORK_START_GAME_WINDOW, STR_NULL},
-{ WWT_PANEL, RESIZE_NONE, BGC, 0, 419, 14, 243, 0x0, STR_NULL},
-
-{ WWT_PANEL, RESIZE_NONE, BGC, 100, 272, 22, 33, 0x0, STR_NETWORK_NEW_GAME_NAME_TIP},
-{ WWT_PUSHTXTBTN, RESIZE_NONE, BTC, 285, 405, 22, 33, STR_NETWORK_SET_PASSWORD, STR_NETWORK_PASSWORD_TIP},
+{ WWT_CLOSEBOX, RESIZE_NONE, BGC, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW },
+{ WWT_CAPTION, RESIZE_NONE, BGC, 11, 419, 0, 13, STR_NETWORK_START_GAME_WINDOW, STR_NULL},
+{ WWT_PANEL, RESIZE_NONE, BGC, 0, 419, 14, 243, 0x0, STR_NULL},
-{ WWT_INSET, RESIZE_NONE, BGC, 10, 271, 62, 216, 0x0, STR_NETWORK_SELECT_MAP_TIP},
-{ WWT_SCROLLBAR, RESIZE_NONE, BGC, 259, 270, 63, 215, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST},
-/* Combo boxes to control Connection Type / Max Clients / Max Companies / Max Observers / Language */
-{ WWT_INSET, RESIZE_NONE, BGC, 280, 410, 77, 88, STR_NETWORK_COMBO1, STR_NETWORK_CONNECTION_TIP},
-{ WWT_TEXTBTN, RESIZE_NONE, BGC, 399, 409, 78, 87, STR_0225, STR_NETWORK_CONNECTION_TIP},
-{ WWT_INSET, RESIZE_NONE, BGC, 280, 410, 109, 120, STR_NETWORK_COMBO2, STR_NETWORK_NUMBER_OF_CLIENTS_TIP},
-{ WWT_TEXTBTN, RESIZE_NONE, BGC, 399, 409, 110, 119, STR_0225, STR_NETWORK_NUMBER_OF_CLIENTS_TIP},
-{ WWT_INSET, RESIZE_NONE, BGC, 280, 410, 141, 152, STR_NETWORK_COMBO3, STR_NETWORK_NUMBER_OF_COMPANIES_TIP},
-{ WWT_TEXTBTN, RESIZE_NONE, BGC, 399, 409, 142, 151, STR_0225, STR_NETWORK_NUMBER_OF_COMPANIES_TIP},
-{ WWT_INSET, RESIZE_NONE, BGC, 280, 410, 173, 184, STR_NETWORK_COMBO4, STR_NETWORK_NUMBER_OF_SPECTATORS_TIP},
-{ WWT_TEXTBTN, RESIZE_NONE, BGC, 399, 409, 174, 183, STR_0225, STR_NETWORK_NUMBER_OF_SPECTATORS_TIP},
-{ WWT_INSET, RESIZE_NONE, BGC, 280, 410, 205, 216, STR_NETWORK_COMBO5, STR_NETWORK_LANGUAGE_TIP},
-{ WWT_TEXTBTN, RESIZE_NONE, BGC, 399, 409, 206, 215, STR_0225, STR_NETWORK_LANGUAGE_TIP},
+{ WWT_PANEL, RESIZE_NONE, BGC, 100, 272, 22, 33, 0x0, STR_NETWORK_NEW_GAME_NAME_TIP},
+{ WWT_PUSHTXTBTN, RESIZE_NONE, BTC, 285, 405, 22, 33, STR_NETWORK_SET_PASSWORD, STR_NETWORK_PASSWORD_TIP},
-{ WWT_PUSHTXTBTN, RESIZE_NONE, BTC, 40, 140, 224, 235, STR_NETWORK_START_GAME, STR_NETWORK_START_GAME_TIP},
-{ WWT_PUSHTXTBTN, RESIZE_NONE, BTC, 150, 250, 224, 235, STR_NETWORK_LOAD_GAME, STR_NETWORK_LOAD_GAME_TIP},
-{ WWT_PUSHTXTBTN, RESIZE_NONE, BTC, 260, 360, 224, 235, STR_012E_CANCEL, STR_NULL},
+{ WWT_INSET, RESIZE_NONE, BGC, 10, 271, 62, 216, 0x0, STR_NETWORK_SELECT_MAP_TIP},
+{ WWT_SCROLLBAR, RESIZE_NONE, BGC, 259, 270, 63, 215, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST},
+/* Combo/selection boxes to control Connection Type / Max Clients / Max Companies / Max Observers / Language */
+{ WWT_INSET, RESIZE_NONE, BGC, 280, 410, 77, 88, STR_NETWORK_LAN_INTERNET_COMBO, STR_NETWORK_CONNECTION_TIP},
+{ WWT_TEXTBTN, RESIZE_NONE, BGC, 399, 409, 78, 87, STR_0225, STR_NETWORK_CONNECTION_TIP},
+{ WWT_IMGBTN, RESIZE_NONE, BGC, 280, 291, 109, 120, SPR_ARROW_DOWN, STR_NETWORK_NUMBER_OF_CLIENTS_TIP},
+{ WWT_PUSHTXTBTN, RESIZE_NONE, BGC, 292, 397, 109, 120, STR_NETWORK_CLIENTS_SELECT, STR_NETWORK_NUMBER_OF_CLIENTS_TIP},
+{ WWT_IMGBTN, RESIZE_NONE, BGC, 398, 410, 109, 120, SPR_ARROW_UP, STR_NETWORK_NUMBER_OF_CLIENTS_TIP},
+{ WWT_IMGBTN, RESIZE_NONE, BGC, 280, 291, 141, 152, SPR_ARROW_DOWN, STR_NETWORK_NUMBER_OF_COMPANIES_TIP},
+{ WWT_PUSHTXTBTN, RESIZE_NONE, BGC, 292, 397, 141, 152, STR_NETWORK_COMPANIES_SELECT, STR_NETWORK_NUMBER_OF_COMPANIES_TIP},
+{ WWT_IMGBTN, RESIZE_NONE, BGC, 398, 410, 141, 152, SPR_ARROW_UP, STR_NETWORK_NUMBER_OF_COMPANIES_TIP},
+{ WWT_IMGBTN, RESIZE_NONE, BGC, 280, 291, 173, 184, SPR_ARROW_DOWN, STR_NETWORK_NUMBER_OF_SPECTATORS_TIP},
+{ WWT_PUSHTXTBTN, RESIZE_NONE, BGC, 292, 397, 173, 184, STR_NETWORK_SPECTATORS_SELECT, STR_NETWORK_NUMBER_OF_SPECTATORS_TIP},
+{ WWT_IMGBTN, RESIZE_NONE, BGC, 398, 410, 173, 184, SPR_ARROW_UP, STR_NETWORK_NUMBER_OF_SPECTATORS_TIP},
+
+{ WWT_INSET, RESIZE_NONE, BGC, 280, 410, 205, 216, STR_NETWORK_LANGUAGE_COMBO, STR_NETWORK_LANGUAGE_TIP},
+{ WWT_TEXTBTN, RESIZE_NONE, BGC, 399, 409, 206, 215, STR_0225, STR_NETWORK_LANGUAGE_TIP},
+
+{ WWT_PUSHTXTBTN, RESIZE_NONE, BTC, 40, 140, 224, 235, STR_NETWORK_START_GAME, STR_NETWORK_START_GAME_TIP},
+{ WWT_PUSHTXTBTN, RESIZE_NONE, BTC, 150, 250, 224, 235, STR_NETWORK_LOAD_GAME, STR_NETWORK_LOAD_GAME_TIP},
+{ WWT_PUSHTXTBTN, RESIZE_NONE, BTC, 260, 360, 224, 235, STR_012E_CANCEL, STR_NULL},
{ WIDGETS_END},
};
--- a/src/network/network_server.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/network/network_server.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -822,6 +822,11 @@
return false;
}
+ if (cp->cmd != CMD_PLAYER_CTRL && !IsValidPlayer(cp->player) && ci->client_index != NETWORK_SERVER_INDEX) {
+ IConsolePrintF(_icolour_err, "WARNING: spectator issueing command from client %d (IP: %s), kicking...", ci->client_index, GetPlayerIP(ci));
+ return false;
+ }
+
return true;
}
--- a/src/newgrf.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/newgrf.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -1242,6 +1242,14 @@
housespec->random_colour[2] = 0x0C; // they stand for red, blue, orange and green
housespec->random_colour[3] = 0x06;
+ /* Make sure that the third cargo type is valid in this
+ * climate. This can cause problems when copying the properties
+ * of a house that accepts food, where the new house is valid
+ * in the temperate climate. */
+ if (!GetCargo(housespec->accepts_cargo[2])->IsValid()) {
+ housespec->cargo_acceptance[2] = 0;
+ }
+
/**
* New houses do not (currently) expect to have a default start
* date before 1930, as this breaks the build date stuff.
@@ -1280,9 +1288,13 @@
/* If value of goods is negative, it means in fact food or, if in toyland, fizzy_drink acceptance.
* Else, we have "standard" 3rd cargo type, goods or candy, for toyland once more */
- housespec->accepts_cargo[2] = (goods >= 0) ? ((_opt.landscape == LT_TOYLAND) ? CT_CANDY : CT_GOODS) :
+ CargoID cid = (goods >= 0) ? ((_opt.landscape == LT_TOYLAND) ? CT_CANDY : CT_GOODS) :
((_opt.landscape == LT_TOYLAND) ? CT_FIZZY_DRINKS : CT_FOOD);
+ /* Make sure the cargo type is valid in this climate. */
+ if (!GetCargo(cid)->IsValid()) goods = 0;
+
+ housespec->accepts_cargo[2] = cid;
housespec->cargo_acceptance[2] = abs(goods); // but we do need positive value here
} break;
@@ -1712,12 +1724,7 @@
IndustryTileSpec **tilespec = &_cur_grffile->indtspec[indtid + i];
byte subs_id = grf_load_byte(&buf);
- if (subs_id == 0xFF) {
- /* Instead of defining a new industry, a substitute industry id
- * of 0xFF disables the old industry with the current id. */
- tsp->enabled = false;
- continue;
- } else if (subs_id >= NEW_INDUSTRYTILEOFFSET) {
+ if (subs_id >= NEW_INDUSTRYTILEOFFSET) {
/* The substitute id must be one of the original industry tile. */
grfmsg(2, "IndustryTilesChangeInfo: Attempt to use new industry tile %u as substitute industry tile for %u. Ignoring.", subs_id, indtid + i);
return false;
--- a/src/newgrf_engine.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/newgrf_engine.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -516,14 +516,14 @@
byte chain_before = 0;
byte chain_after = 0;
- for (u = GetFirstVehicleInChain(v); u != v; u = u->next) {
+ for (u = v->First(); u != v; u = u->Next()) {
chain_before++;
if (variable == 0x41 && u->engine_type != v->engine_type) chain_before = 0;
}
- while (u->next != NULL && (variable == 0x40 || u->next->engine_type == v->engine_type)) {
+ while (u->Next() != NULL && (variable == 0x40 || u->Next()->engine_type == v->engine_type)) {
chain_after++;
- u = u->next;
+ u = u->Next();
}
return chain_before | chain_after << 8 | (chain_before + chain_after + (variable == 0x41)) << 16;
@@ -544,7 +544,7 @@
memset(common_cargos, 0, sizeof(common_cargos));
memset(common_subtypes, 0, sizeof(common_subtypes));
- for (u = v; u != NULL; u = u->next) {
+ for (u = v; u != NULL; u = u->Next()) {
/* Skip empty engines */
if (u->cargo_cap == 0) continue;
@@ -579,7 +579,7 @@
if (v->type != VEH_AIRCRAFT) return UINT_MAX;
{
- const Vehicle *w = v->next;
+ const Vehicle *w = v->Next();
uint16 altitude = v->z_pos - w->z_pos; // Aircraft height - shadow height
byte airporttype;
@@ -610,8 +610,8 @@
*/
if (v->type != VEH_TRAIN) return 0;
- const Vehicle *u_p = GetPrevVehicleInChain(v);
- const Vehicle *u_n = v->next;
+ const Vehicle *u_p = v->Previous();
+ const Vehicle *u_n = v->Next();
DirDiff f = (u_p == NULL) ? DIRDIFF_SAME : DirDifference(u_p->direction, v->direction);
DirDiff b = (u_n == NULL) ? DIRDIFF_SAME : DirDifference(v->direction, u_n->direction);
DirDiff t = ChangeDirDiff(f, b);
@@ -644,7 +644,7 @@
{
uint count = 0;
- for (; v != NULL; v = v->next) {
+ for (; v != NULL; v = v->Next()) {
if (v->engine_type == parameter) count++;
}
return count;
@@ -735,7 +735,7 @@
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 0x5A: return v->Next() == NULL ? INVALID_VEHICLE : v->Next()->index;
case 0x5C: return ClampToI32(v->value);
case 0x5D: return GB(ClampToI32(v->value), 8, 24);
case 0x5E: return GB(ClampToI32(v->value), 16, 16);
@@ -758,8 +758,8 @@
case 0x75: return GB(v->u.rail.cached_power, 8, 24);
case 0x76: return GB(v->u.rail.cached_power, 16, 16);
case 0x77: return GB(v->u.rail.cached_power, 24, 8);
- case 0x7C: return v->first->index;
- case 0x7D: return GB(v->first->index, 8, 8);
+ case 0x7C: return v->First()->index;
+ case 0x7D: return GB(v->First()->index, 8, 8);
case 0x7F: return 0; // Used for vehicle reversing hack in TTDP
}
break;
@@ -804,7 +804,7 @@
if (v == NULL) return group->g.real.loading[0];
if (v->type == VEH_TRAIN) {
- in_motion = GetFirstVehicleInChain(v)->current_order.type != OT_LOADING;
+ in_motion = v->First()->current_order.type != OT_LOADING;
} else {
in_motion = v->current_order.type != OT_LOADING;
}
@@ -832,7 +832,7 @@
res->ResolveReal = &VehicleResolveReal;
res->u.vehicle.self = v;
- res->u.vehicle.parent = (v != NULL && v->HasFront()) ? GetFirstVehicleInChain(v) : v;
+ res->u.vehicle.parent = (v != NULL && v->HasFront()) ? v->First() : v;
res->u.vehicle.self_type = engine_type;
@@ -914,7 +914,7 @@
if (v == NULL) return group->g.result.sprite;
- return group->g.result.sprite + (info_view ? 0 : (v->next->next->u.air.state % group->g.result.num_sprites));
+ return group->g.result.sprite + (info_view ? 0 : (v->Next()->Next()->u.air.state % group->g.result.num_sprites));
}
@@ -1033,14 +1033,14 @@
* i.e.), so we give them all the NEW_CARGO triggered
* vehicle's portion of random bits. */
assert(first);
- DoTriggerVehicle((v->type == VEH_TRAIN) ? GetFirstVehicleInChain(v) : v, VEHICLE_TRIGGER_ANY_NEW_CARGO, new_random_bits, false);
+ DoTriggerVehicle((v->type == VEH_TRAIN) ? v->First() : v, VEHICLE_TRIGGER_ANY_NEW_CARGO, new_random_bits, false);
break;
case VEHICLE_TRIGGER_DEPOT:
/* We now trigger the next vehicle in chain recursively.
* The random bits portions may be different for each
* vehicle in chain. */
- if (v->next != NULL) DoTriggerVehicle(v->next, trigger, 0, true);
+ if (v->Next() != NULL) DoTriggerVehicle(v->Next(), trigger, 0, true);
break;
case VEHICLE_TRIGGER_EMPTY:
@@ -1048,14 +1048,14 @@
* recursively. The random bits portions must be same
* for each vehicle in chain, so we give them all
* first chained vehicle's portion of random bits. */
- if (v->next != NULL) DoTriggerVehicle(v->next, trigger, first ? new_random_bits : base_random_bits, false);
+ if (v->Next() != NULL) DoTriggerVehicle(v->Next(), trigger, first ? new_random_bits : base_random_bits, false);
break;
case VEHICLE_TRIGGER_ANY_NEW_CARGO:
/* Now pass the trigger recursively to the next vehicle
* in chain. */
assert(!first);
- if (v->next != NULL) DoTriggerVehicle(v->next, VEHICLE_TRIGGER_ANY_NEW_CARGO, base_random_bits, false);
+ if (v->Next() != NULL) DoTriggerVehicle(v->Next(), VEHICLE_TRIGGER_ANY_NEW_CARGO, base_random_bits, false);
break;
}
}
--- a/src/newgrf_house.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/newgrf_house.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -33,6 +33,8 @@
void CheckHouseIDs()
{
+ InitializeBuildingCounts();
+
for (TileIndex t = 0; t < MapSize(); t++) {
HouseID house_id;
@@ -42,13 +44,11 @@
if (!GetHouseSpecs(house_id)->enabled && house_id >= NEW_HOUSE_OFFSET) {
/* The specs for this type of house are not available any more, so
* replace it with the substitute original house type. */
- SetHouseType(t, _house_mngr.GetSubstituteID(house_id));
+ house_id = _house_mngr.GetSubstituteID(house_id);
+ SetHouseType(t, house_id);
}
+ IncreaseBuildingCount(GetTownByTile(t), house_id);
}
-
- InitializeBuildingCounts();
- AfterLoadCountBuildings();
-
}
HouseClassID AllocateHouseClassID(byte grf_class_id, uint32 grfid)
--- a/src/newgrf_industries.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/newgrf_industries.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -78,7 +78,7 @@
/** Make an analysis of a tile and check for its belonging to the same
* industry, and/or the same grf file
* @param new_tile TileIndex of the tile to query
- * @param old_tile TileINdex of teh reference tile
+ * @param old_tile TileIndex of the reference tile
* @param i Industry to which old_tile belongs to
* @return value encoded as per NFO specs */
uint32 GetIndustryIDAtOffset(TileIndex new_tile, TileIndex old_tile, const Industry *i)
@@ -87,8 +87,8 @@
if (GetIndustryIndex(new_tile) == i->index) { // Does it belong to the same industry?
IndustryGfx gfx = GetIndustryGfx(new_tile);
- const IndustryTileSpec *indtsp = GetIndustryTileSpec(gfx, false);
- const IndustryTileSpec *indold = GetIndustryTileSpec(GetIndustryGfx(old_tile), false);
+ const IndustryTileSpec *indtsp = GetIndustryTileSpec(gfx);
+ const IndustryTileSpec *indold = GetIndustryTileSpec(GetIndustryGfx(old_tile));
if (gfx < NEW_INDUSTRYOFFSET) { // Does it belongs to an old type?
/* It is an old tile. We have to see if it's been overriden */
@@ -133,6 +133,56 @@
return best_dist;
}
+/** Implementation of both var 67 and 68
+ * since the mechanism is almost the same, it is easier to regroup them on the same
+ * function.
+ * @param param_setID parameter given to the callback, which is the set id, or the local id, in our terminology
+ * @param layout_filter on what layout do we filter?
+ * @param current Industry for which the inquiry is made
+ * @return the formatted answer to the callback : rr(reserved) cc(count) dddd(manhattan distance of closest sister)
+ */
+static uint32 GetCountAndDistanceOfClosestInstance(byte param_setID, byte layout_filter, const Industry *current)
+{
+ uint32 GrfID = GetRegister(0x100); ///< Get the GRFID of the definition to look for in register 100h
+ IndustryType ind_index;
+ uint32 closest_dist = MAX_UVALUE(uint32);
+ byte count = 0;
+
+ /* Determine what will be the industry type to look for */
+ switch (GrfID) {
+ case 0: // this is a default industry type
+ ind_index = param_setID;
+ break;
+
+ case 0xFFFFFFFF: // current grf
+ ind_index = GetIndustrySpec(current->type)->grf_prop.grffile->grfid;
+ /*Fall through*/
+
+ default: //use the grfid specified in register 100h
+ ind_index = MapNewGRFIndustryType(param_setID, GrfID);
+ break;
+ }
+
+ if (layout_filter == 0) {
+ /* If the filter is 0, it could be because none was specified as well as being really a 0.
+ * In either case, just do the regular var67 */
+ closest_dist = GetClosestIndustry(current->xy, ind_index, current);
+ count = GetIndustryTypeCount(ind_index);
+ } else {
+ /* Count only those who match the same industry type and layout filter
+ * Unfortunately, we have to do it manually */
+ const Industry *i;
+ FOR_ALL_INDUSTRIES(i) {
+ if (i->type == ind_index && i != current && i->selected_layout == layout_filter) {
+ closest_dist = min(closest_dist, DistanceManhattan(current->xy, i->xy));
+ count++;
+ }
+ }
+ }
+
+ return count << 16 | GB(closest_dist, 0, 16);
+}
+
/** This function implements the industries variables that newGRF defines.
* @param variable that is queried
* @param parameter unused
@@ -160,6 +210,9 @@
/* Manhattan distance of closes dry/water tile */
case 0x43: return GetClosestWaterDistance(tile, (object->u.industry_location.spec->behaviour & INDUSTRYBEH_BUILT_ONWATER) == 0);
+ /* Layout number */
+ case 0x44: return industry->selected_layout;
+
/* Get industry ID at offset param */
case 0x60: return GetIndustryIDAtOffset(GetNearbyTile(parameter, industry->xy), tile, industry);
@@ -169,7 +222,7 @@
case 0x62: return GetNearbyIndustryTileInformation(parameter, tile, INVALID_INDUSTRY);
/* Animation stage of nearby tiles */
- case 0x63 : {
+ case 0x63: {
tile = GetNearbyTile(parameter, tile);
if (IsTileType(tile, MP_INDUSTRY) && GetIndustryByTile(tile) == industry) {
return GetIndustryAnimationState(tile);
@@ -185,11 +238,9 @@
case 0x66: return GetTownRadiusGroup(industry->town, tile) << 16 | min(DistanceSquare(tile, industry->town->xy), 0xFFFF);
/* Count of industry, distance of closest instance
- * format is rr(reserved) cc(count) dddd(manhattan distance of closest sister)
- * A lot more should be done, since it has to check for local id, grf id etc...
- * let's just say it is a beginning ;) */
- case 0x67: return GetIndustryTypeCount(industry->type) << 16 | 0;
- case 0x68: break;
+ * 68 is the same as 67, but with a filtering on selected layout */
+ case 0x67:
+ case 0x68: return GetCountAndDistanceOfClosestInstance(parameter, variable == 0x68 ? GB(GetRegister(0x101), 0, 8) : 0, industry);
/* Industry structure access*/
case 0x80: return industry->xy;
--- a/src/newgrf_industrytiles.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/newgrf_industrytiles.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -35,7 +35,7 @@
byte tile_type;
bool is_same_industry;
- tile = GetNearbyTile(parameter, tile);
+ if (parameter != 0) tile = GetNearbyTile(parameter, tile); // only perform if it is required
is_same_industry = (IsTileType(tile, MP_INDUSTRY) && GetIndustryIndex(tile) == index);
tile_type = GetTerrainType(tile) << 2 | (IsTileType(tile, MP_WATER) ? 1 : 0) << 1 | (is_same_industry ? 1 : 0);
@@ -236,6 +236,7 @@
{
Industry ind;
ind.xy = 0;
+ ind.width = 0;
ind.type = type;
uint16 callback_res = GetIndustryTileCallback(CBID_INDTILE_SHAPE_CHECK, 0, 0, gfx, &ind, tile);
--- a/src/newgrf_station.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/newgrf_station.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -429,7 +429,7 @@
uint32 value = 0;
for (cargo_type = 0; cargo_type < NUM_CARGO; cargo_type++) {
- if (st->goods[cargo_type].acceptance) SETBIT(value, cargo_type);
+ if (HASBIT(st->goods[cargo_type].acceptance_pickup, GoodsEntry::PICKUP)) SETBIT(value, cargo_type);
}
return value;
}
@@ -467,7 +467,7 @@
case 0x62: return ge->rating;
case 0x63: return ge->cargo.DaysInTransit();
case 0x64: return ge->last_speed | (ge->last_age << 8);
- case 0x65: return ge->acceptance << 3;
+ case 0x65: return GB(ge->acceptance_pickup, GoodsEntry::ACCEPTANCE, 1) << 3;
}
}
@@ -476,7 +476,7 @@
const GoodsEntry *g = &st->goods[GB(variable - 0x8C, 3, 4)];
switch (GB(variable - 0x8C, 0, 3)) {
case 0: return g->cargo.Count();
- case 1: return GB(min(g->cargo.Count(), 4095), 0, 4) | (g->acceptance << 7);
+ case 1: return GB(min(g->cargo.Count(), 4095), 0, 4) | (GB(g->acceptance_pickup, GoodsEntry::ACCEPTANCE, 1) << 7);
case 2: return g->days_since_pickup;
case 3: return g->rating;
case 4: return g->cargo.Source();
--- a/src/newgrf_text.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/newgrf_text.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -101,7 +101,7 @@
{"es_ES", GRFLX_SPANISH},
{"af_ZA", GRFLX_AFRIKAANS},
{"hr_HR", GRFLX_CROATIAN},
- {"cs_CS", GRFLX_CZECH},
+ {"cs_CZ", GRFLX_CZECH},
{"ca_ES", GRFLX_CATALAN},
{"da_DA", GRFLX_DANISH},
{"nl_NL", GRFLX_DUTCH},
--- a/src/oldloader.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/oldloader.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -579,12 +579,15 @@
Station *st = GetStation(_current_station_id);
GoodsEntry *ge = &st->goods[num];
bool ret = LoadChunk(ls, ge, goods_chunk);
- if (ret && GB(_waiting_acceptance, 0, 12) != 0) {
+ if (!ret) return false;
+
+ SB(ge->acceptance_pickup, GoodsEntry::ACCEPTANCE, 1, HASBIT(_waiting_acceptance, 15));
+ SB(ge->acceptance_pickup, GoodsEntry::PICKUP, 1, _cargo_source != 0xFF);
+ if (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;
@@ -1056,7 +1059,7 @@
default: v->spritenum >>= 1; break;
}
- if (_old_next_ptr != 0xFFFF) v->next = GetVehicle(_old_next_ptr);
+ if (_old_next_ptr != 0xFFFF) v->SetNext(GetVehicle(_old_next_ptr));
v->string_id = RemapOldStringID(_old_string_id);
--- a/src/oldpool.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/oldpool.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -18,6 +18,7 @@
DEBUG(misc, 4, "[Pool] (%s) cleaning pool..", this->name);
+ this->cleaning_pool = true;
/* Free all blocks */
for (i = 0; i < this->current_blocks; i++) {
if (this->clean_block_proc != NULL) {
@@ -25,6 +26,7 @@
}
free(this->blocks[i]);
}
+ this->cleaning_pool = false;
/* Free the block itself */
free(this->blocks);
--- a/src/oldpool.h Sun Aug 19 14:04:13 2007 +0000
+++ b/src/oldpool.h Sun Sep 02 11:17:33 2007 +0000
@@ -25,7 +25,7 @@
OldMemoryPoolNewBlock *new_block_proc, OldMemoryPoolCleanBlock *clean_block_proc) :
name(name), max_blocks(max_blocks), block_size_bits(block_size_bits),
new_block_proc(new_block_proc), clean_block_proc(clean_block_proc), current_blocks(0),
- total_items(0), item_size(item_size), first_free_index(0), blocks(NULL) {}
+ total_items(0), cleaning_pool(false), item_size(item_size), first_free_index(0), blocks(NULL) {}
const char* name; ///< Name of the pool (just for debugging)
@@ -40,6 +40,7 @@
uint current_blocks; ///< How many blocks we have in our pool
uint total_items; ///< How many items we now have in this pool
+ bool cleaning_pool; ///< Are we currently cleaning the pool?
public:
const uint item_size; ///< How many bytes one block is
uint first_free_index; ///< The index of the first free pool item in this pool
@@ -84,6 +85,15 @@
{
return this->name;
}
+
+ /**
+ * Is the pool in the cleaning phase?
+ * @return true if it is
+ */
+ inline bool CleaningPool() const
+ {
+ return this->cleaning_pool;
+ }
};
template <typename T>
@@ -121,7 +131,6 @@
/**
* Generic function to free a new block in a pool.
- * This function uses QuickFree that is intended to only free memory that would be lost if the pool is freed.
* @param start_item the first item that needs to be cleaned
* @param end_item the last item that needs to be cleaned
*/
@@ -130,9 +139,7 @@
{
for (uint i = start_item; i <= end_item; i++) {
T *t = Tpool->Get(i);
- if (t->IsValid()) {
- t->QuickFree();
- }
+ delete t;
}
}
@@ -157,15 +164,6 @@
}
/**
- * Called on each object when the pool is being destroyed, so one
- * can free allocated memory without the need for freeing for
- * example orders.
- */
- virtual void QuickFree()
- {
- }
-
- /**
* An overriden version of new that allocates memory on the pool.
* @param size the size of the variable (unused)
* @return the memory that is 'allocated'
@@ -227,31 +225,14 @@
{
}
- /**
- * Is this a valid object or not?
- * @return true if and only if it is valid
- */
- virtual bool IsValid() const
- {
- return false;
- }
-
-protected:
- /**
- * Allocate a pool item; possibly allocate a new block in the pool.
- * @return the allocated pool item (or NULL when the pool is full).
- */
- static T *AllocateRaw()
- {
- return AllocateRaw(Tpool->first_free_index);
- }
-
+private:
/**
* Allocate a pool item; possibly allocate a new block in the pool.
* @param first the first pool item to start searching
+ * @pre first <= Tpool->GetSize()
* @return the allocated pool item (or NULL when the pool is full).
*/
- static T *AllocateRaw(uint &first)
+ static inline T *AllocateSafeRaw(uint &first)
{
uint last_minus_one = Tpool->GetSize() - 1;
@@ -271,6 +252,37 @@
return NULL;
}
+
+protected:
+ /**
+ * Allocate a pool item; possibly allocate a new block in the pool.
+ * @return the allocated pool item (or NULL when the pool is full).
+ */
+ static inline T *AllocateRaw()
+ {
+ return AllocateSafeRaw(Tpool->first_free_index);
+ }
+
+ /**
+ * Allocate a pool item; possibly allocate a new block in the pool.
+ * @param first the first pool item to start searching
+ * @return the allocated pool item (or NULL when the pool is full).
+ */
+ static inline T *AllocateRaw(uint &first)
+ {
+ if (first >= Tpool->GetSize() && !Tpool->AddBlockToPool()) return NULL;
+
+ return AllocateSafeRaw(first);
+ }
+
+ /**
+ * Are we cleaning this pool?
+ * @return true if we are
+ */
+ static inline bool CleaningPool()
+ {
+ return Tpool->CleaningPool();
+ }
};
--- a/src/openttd.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/openttd.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -460,6 +460,11 @@
}
}
+#if defined(WINCE) && defined(_DEBUG)
+ /* Switch on debug lvl 4 for WinCE if Debug release, as you can't give params, and you most likely do want this information */
+ SetDebugString("4");
+#endif
+
DeterminePaths(argv[0]);
CheckExternalFiles();
@@ -1027,7 +1032,7 @@
SetDParam(0, _local_player);
SetDParam(1, _date);
GetString(buf, STR_4004, lastof(buf));
- ttd_strlcpy(buf, ".sav", sizeof(buf));
+ ttd_strlcat(buf, ".sav", lengthof(buf));
} else {
/* generate a savegame name and number according to _patches.max_num_autosaves */
snprintf(buf, sizeof(buf), "autosave%d.sav", _autosave_ctr);
@@ -2107,6 +2112,18 @@
CLRBIT(v->vehicle_flags, VF_LOADING_FINISHED);
}
}
+ } else if (CheckSavegameVersion(59)) {
+ /* For some reason non-loading vehicles could be in the station's loading vehicle list */
+
+ Station *st;
+ FOR_ALL_STATIONS(st) {
+ std::list<Vehicle *>::iterator iter;
+ for (iter = st->loading_vehicles.begin(); iter != st->loading_vehicles.end();) {
+ Vehicle *v = *iter;
+ iter++;
+ if (v->current_order.type != OT_LOADING) st->loading_vehicles.remove(v);
+ }
+ }
}
if (CheckSavegameVersion(58)) {
@@ -2161,6 +2178,16 @@
}
}
+ if (CheckSavegameVersion(74)) {
+ Station *st;
+ FOR_ALL_STATIONS(st) {
+ for (CargoID c = 0; c < NUM_CARGO; c++) {
+ st->goods[c].last_speed = 0;
+ if (st->goods[c].cargo.Count() != 0) SETBIT(st->goods[c].acceptance_pickup, GoodsEntry::PICKUP);
+ }
+ }
+ }
+
return true;
}
--- a/src/openttd.h Sun Aug 19 14:04:13 2007 +0000
+++ b/src/openttd.h Sun Sep 02 11:17:33 2007 +0000
@@ -473,6 +473,20 @@
/** @see VehicleEnterTileStatus to see what the return values mean */
typedef uint32 VehicleEnterTileProc(Vehicle *v, TileIndex tile, int x, int y);
typedef Foundation GetFoundationProc(TileIndex tile, Slope tileh);
+/**
+ * Called when a tile is affected by a terraforming operation.
+ * The function has to check if terraforming of the tile is allowed and return extra terraform-cost that depend on the tiletype.
+ * With DC_EXEC in flags it has to perform tiletype-specific actions (like clearing land etc., but not the terraforming itself).
+ *
+ * @note The terraforming has not yet taken place. So GetTileZ() and GetTileSlope() refer to the landscape before the terraforming operation.
+ *
+ * @param tile The involved tile.
+ * @param flags Command flags passed to the terraform command (DC_EXEC, DC_QUERY_COST, etc.).
+ * @param z_new TileZ after terraforming.
+ * @param tileh_new Slope after terraforming.
+ * @return Error code or extra cost for terraforming (like clearing land, building foundations, etc., but not the terraforming itself.)
+ */
+typedef CommandCost TerraformTileProc(TileIndex tile, uint32 flags, uint z_new, Slope tileh_new);
struct TileTypeProcs {
DrawTileProc *draw_tile_proc;
@@ -488,6 +502,7 @@
GetProducedCargoProc *get_produced_cargo_proc;
VehicleEnterTileProc *vehicle_enter_tile_proc;
GetFoundationProc *get_foundation_proc;
+ TerraformTileProc *terraform_tile_proc;
};
--- a/src/order.h Sun Aug 19 14:04:13 2007 +0000
+++ b/src/order.h Sun Sep 02 11:17:33 2007 +0000
@@ -107,7 +107,11 @@
Order() : refit_cargo(CT_NO_REFIT) {}
~Order() { this->type = OT_NOTHING; }
- bool IsValid() const;
+ /**
+ * Check if a Order really exists.
+ */
+ inline bool IsValid() const { return this->type != OT_NOTHING; }
+
void Free();
void FreeChain();
};
@@ -140,14 +144,6 @@
return GetOrderPoolSize();
}
-/**
- * Check if a Order really exists.
- */
-inline bool Order::IsValid() const
-{
- return this->type != OT_NOTHING;
-}
-
inline void Order::Free()
{
this->type = OT_NOTHING;
--- a/src/order_gui.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/order_gui.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -356,7 +356,7 @@
if (u->type != v->type) return false;
if (u->HasFront() && !u->IsPrimaryVehicle()) {
- u = GetFirstVehicleInChain(u);
+ u = u->First();
if (!u->IsPrimaryVehicle()) return false;
}
--- a/src/os/macosx/macos.mm Sun Aug 19 14:04:13 2007 +0000
+++ b/src/os/macosx/macos.mm Sun Sep 02 11:17:33 2007 +0000
@@ -158,3 +158,16 @@
ShowMacDialog(error, buffer, "Quit");
abort();
}
+
+
+/** Determine the current user's locale. */
+const char *GetCurrentLocale(const char *)
+{
+ static char retbuf[32] = { '\0' };
+ NSUserDefaults* defs = [NSUserDefaults standardUserDefaults];
+ NSArray* languages = [defs objectForKey:@"AppleLanguages"];
+ NSString* preferredLang = [languages objectAtIndex:0];
+ /* preferredLang is either 2 or 5 characters long ("xx" or "xx_YY"). */
+ strncpy(retbuf, [preferredLang cString], 31);
+ return retbuf;
+}
--- a/src/os_timer.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/os_timer.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -8,7 +8,7 @@
/* rdtsc for MSC_VER, uses simple inline assembly, or _rdtsc
* from external win64.asm because VS2005 does not support inline assembly */
-#if defined(_MSC_VER) && !defined(RDTSC_AVAILABLE)
+#if defined(_MSC_VER) && !defined(RDTSC_AVAILABLE) && !defined(WINCE)
# if _MSC_VER >= 1400
#include <intrin.h>
uint64 _rdtsc()
@@ -71,6 +71,9 @@
/* In all other cases we have no support for rdtsc. No major issue,
* you just won't be able to profile your code with TIC()/TOC() */
#if !defined(RDTSC_AVAILABLE)
+/* MSVC (in case of WinCE) can't handle #warning */
+# if !defined(_MSC_VER)
#warning "(non-fatal) No support for rdtsc(), you won't be able to profile with TIC/TOC"
+# endif
uint64 _rdtsc() {return 0;}
#endif
--- a/src/player.h Sun Aug 19 14:04:13 2007 +0000
+++ b/src/player.h Sun Sep 02 11:17:33 2007 +0000
@@ -85,8 +85,8 @@
void SetLocalPlayer(PlayerID new_player);
#define FOR_ALL_PLAYERS(p) for (p = _players; p != endof(_players); p++)
-VARDEF PlayerID _local_player;
-VARDEF PlayerID _current_player;
+VARDEF PlayerByte _local_player;
+VARDEF PlayerByte _current_player;
VARDEF Player _players[MAX_PLAYERS];
/* NOSAVE: can be determined from player structs */
--- a/src/player_gui.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/player_gui.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -117,26 +117,6 @@
{ WIDGETS_END},
};
-static const Widget _other_player_finances_widgets[] = {
-{ WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
-{ WWT_CAPTION, RESIZE_NONE, 14, 11, 379, 0, 13, STR_700E_FINANCES, STR_018C_WINDOW_TITLE_DRAG_THIS},
-{ WWT_IMGBTN, RESIZE_NONE, 14, 380, 394, 0, 13, SPR_LARGE_SMALL_WINDOW, STR_7075_TOGGLE_LARGE_SMALL_WINDOW},
-{ WWT_STICKYBOX, RESIZE_NONE, 14, 395, 406, 0, 13, 0x0, STR_STICKY_BUTTON},
-{ WWT_PANEL, RESIZE_NONE, 14, 0, 406, 14, 169, 0x0, STR_NULL},
-{ WWT_PANEL, RESIZE_NONE, 14, 0, 406, 170, 203, 0x0, STR_NULL},
-{ WIDGETS_END},
-};
-
-static const Widget _other_player_finances_small_widgets[] = {
-{ WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
-{ WWT_CAPTION, RESIZE_NONE, 14, 11, 253, 0, 13, STR_700E_FINANCES, STR_018C_WINDOW_TITLE_DRAG_THIS},
-{ WWT_IMGBTN, RESIZE_NONE, 14, 254, 267, 0, 13, SPR_LARGE_SMALL_WINDOW, STR_7075_TOGGLE_LARGE_SMALL_WINDOW},
-{ WWT_STICKYBOX, RESIZE_NONE, 14, 268, 279, 0, 13, 0x0, STR_STICKY_BUTTON},
-{ WWT_EMPTY, RESIZE_NONE, 0, 0, 0, 0, 0, 0x0, STR_NULL},
-{ WWT_PANEL, RESIZE_NONE, 14, 0, 279, 14, 47, 0x0, STR_NULL},
-{ WIDGETS_END},
-};
-
static const Widget _player_finances_small_widgets[] = {
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, RESIZE_NONE, 14, 11, 253, 0, 13, STR_700E_FINANCES, STR_018C_WINDOW_TITLE_DRAG_THIS},
@@ -157,15 +137,24 @@
PlayerID player = (PlayerID)w->window_number;
const Player *p = GetPlayer(player);
- /* Borrow/repay buttons only exist for local player */
- if (player == _local_player) {
- /* Borrow button only shows when there is any more money to loan */
- SetWindowWidgetDisabledState(w, 6, p->current_loan == _economy.max_loan);
+ /* Recheck the size of the window as it might need to be resized due to the local player changing */
+ int new_height = ((player != _local_player) ? 0 : 12) + ((WP(w, def_d).data_1 != 0) ? 48 : 204);
+ if (w->height != new_height) {
+ /* Make window dirty before and after resizing */
+ SetWindowDirty(w);
+ w->height = new_height;
+ SetWindowDirty(w);
- /* Repay button only shows when there is any more money to repay */
- SetWindowWidgetDisabledState(w, 7, p->current_loan == 0);
+ SetWindowWidgetHiddenState(w, 6, player != _local_player);
+ SetWindowWidgetHiddenState(w, 7, player != _local_player);
}
+ /* Borrow button only shows when there is any more money to loan */
+ SetWindowWidgetDisabledState(w, 6, p->current_loan == _economy.max_loan);
+
+ /* Repay button only shows when there is any more money to repay */
+ SetWindowWidgetDisabledState(w, 7, player != _local_player || p->current_loan == 0);
+
SetDParam(0, p->index);
SetDParam(1, p->index);
SetDParam(2, LOAN_INTERVAL);
@@ -212,39 +201,14 @@
PlayerFinancesWndProc
};
-static const WindowDesc _other_player_finances_desc = {
- WDP_AUTO, WDP_AUTO, 407, 204, 407, 204,
- WC_FINANCES, WC_NONE,
- WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON,
- _other_player_finances_widgets,
- PlayerFinancesWndProc
-};
-
-static const WindowDesc _other_player_finances_small_desc = {
- WDP_AUTO, WDP_AUTO, 280, 48, 280, 48,
- WC_FINANCES, WC_NONE,
- WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON,
- _other_player_finances_small_widgets,
- PlayerFinancesWndProc
-};
-
static void DoShowPlayerFinances(PlayerID player, bool show_small, bool show_stickied)
{
- Window *w;
- int mode;
-
- static const WindowDesc * const desc_table[2 * 2] = {
- &_player_finances_desc, &_player_finances_small_desc,
- &_other_player_finances_desc, &_other_player_finances_small_desc,
- };
-
if (!IsValidPlayer(player)) return;
- mode = (player != _local_player) * 2 + show_small;
- w = AllocateWindowDescFront(desc_table[mode], player);
+ Window *w = AllocateWindowDescFront(show_small ? &_player_finances_small_desc : &_player_finances_desc, player);
if (w != NULL) {
w->caption_color = w->window_number;
- WP(w, def_d).data_1 = mode;
+ WP(w, def_d).data_1 = show_small;
if (show_stickied) w->flags4 |= WF_STICKY;
}
}
--- a/src/rail_cmd.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/rail_cmd.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -78,6 +78,44 @@
* 11uuuudd => rail depot
*/
+/** Struct used in EnsureNoTrainOnTrack() */
+struct TrainOnTrackData {
+ TileIndex tile; ///< tile to check
+ uint z; ///< tile max Z
+ TrackBits rail_bits; ///< trackbits of interest
+};
+
+static void *EnsureNoTrainOnTrackProc(Vehicle *v, void *data)
+{
+ const TrainOnTrackData *info = (const TrainOnTrackData *)data;
+
+ if (v->tile != info->tile || v->type != VEH_TRAIN) return NULL;
+ if (v->z_pos > info->z) return NULL;
+
+ if ((v->u.rail.track != info->rail_bits) && !TracksOverlap(v->u.rail.track | info->rail_bits)) return NULL;
+
+ _error_message = VehicleInTheWayErrMsg(v);
+ return v;
+}
+
+/**
+ * Tests if a vehicle interacts with the specified track.
+ * All track bits interact except parallel TRACK_BIT_HORZ or TRACK_BIT_VERT.
+ *
+ * @param tile The tile.
+ * @param track The track.
+ */
+static bool EnsureNoTrainOnTrack(TileIndex tile, Track track)
+{
+ TrainOnTrackData info;
+
+ info.tile = tile;
+ info.z = GetTileMaxZ(tile);
+ info.rail_bits = TrackToTrackBits(track);
+
+ return VehicleFromPos(tile, &info, EnsureNoTrainOnTrackProc) == NULL;
+}
+
static bool CheckTrackCombination(TileIndex tile, TrackBits to_build, uint flags)
{
TrackBits current; // The current track layout
@@ -239,7 +277,7 @@
switch (GetTileType(tile)) {
case MP_RAILWAY:
if (!CheckTrackCombination(tile, trackbit, flags) ||
- !EnsureNoVehicleOnGround(tile)) {
+ !EnsureNoTrainOnTrack(tile, track)) {
return CMD_ERROR;
}
if (!IsTileOwner(tile, _current_player) ||
@@ -374,7 +412,7 @@
if (!IsPlainRailTile(tile) ||
(_current_player != OWNER_WATER && !CheckTileOwnership(tile)) ||
- !EnsureNoVehicleOnGround(tile)) {
+ !EnsureNoTrainOnTrack(tile, track)) {
return CMD_ERROR;
}
@@ -646,7 +684,7 @@
SignalVariant sigvar = (pre_signal ^ HASBIT(p1, 4)) ? SIG_SEMAPHORE : SIG_ELECTRIC;
CommandCost cost;
- if (!ValParamTrackOrientation(track) || !IsTileType(tile, MP_RAILWAY) || !EnsureNoVehicleOnGround(tile))
+ if (!ValParamTrackOrientation(track) || !IsTileType(tile, MP_RAILWAY) || !EnsureNoTrainOnTrack(tile, track))
return CMD_ERROR;
/* Protect against invalid signal copying */
@@ -934,7 +972,7 @@
if (!ValParamTrackOrientation(track) ||
!IsTileType(tile, MP_RAILWAY) ||
- !EnsureNoVehicleOnGround(tile) ||
+ !EnsureNoTrainOnTrack(tile, track) ||
!HasSignalOnTrack(tile, track)) {
return CMD_ERROR;
}
@@ -2117,7 +2155,7 @@
v->u.rail.track = TRACK_BIT_DEPOT,
v->vehstatus |= VS_HIDDEN; /* hide it */
v->direction = ReverseDir(v->direction);
- if (v->next == NULL) VehicleEnterDepot(v);
+ if (v->Next() == NULL) VehicleEnterDepot(v);
v->tile = tile;
InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile);
@@ -2126,7 +2164,7 @@
} else if (fract_coord_leave == fract_coord) {
if (DiagDirToDir(dir) == v->direction) {
/* leave the depot? */
- if ((v = v->next) != NULL) {
+ if ((v = v->Next()) != NULL) {
v->vehstatus &= ~VS_HIDDEN;
v->u.rail.track = (DiagDirToAxis(dir) == AXIS_X ? TRACK_BIT_X : TRACK_BIT_Y);
}
@@ -2136,6 +2174,73 @@
return VETSB_CONTINUE;
}
+static CommandCost TerraformTile_Track(TileIndex tile, uint32 flags, uint z_new, Slope tileh_new)
+{
+ if (IsPlainRailTile(tile)) {
+ uint z_old;
+ Slope tileh_old = GetTileSlope(tile, &z_old);
+ TrackBits rail_bits = GetTrackBits(tile);
+
+ _error_message = STR_1008_MUST_REMOVE_RAILROAD_TRACK;
+
+ /* When there is only a single horizontal/vertical track, one corner can be terraformed. */
+ Slope allowed_corner;
+ switch (rail_bits) {
+ case TRACK_BIT_RIGHT: allowed_corner = SLOPE_W; break;
+ case TRACK_BIT_UPPER: allowed_corner = SLOPE_S; break;
+ case TRACK_BIT_LEFT: allowed_corner = SLOPE_E; break;
+ case TRACK_BIT_LOWER: allowed_corner = SLOPE_N; break;
+ default: return CMD_ERROR;
+ }
+
+ Slope track_corners = ComplementSlope(allowed_corner);
+
+ Foundation f_old = GetRailFoundation(tileh_old, rail_bits);
+ switch (f_old) {
+ case FOUNDATION_NONE:
+ /* Everything is valid, which only changes allowed_corner */
+
+ /* Compute height of track */
+ if (tileh_old == track_corners) z_old += TILE_HEIGHT;
+ if (tileh_new == track_corners) {
+ z_new += TILE_HEIGHT;
+ } else {
+ /* do not build a foundation */
+ if ((tileh_new != SLOPE_FLAT) && (tileh_new != allowed_corner)) return CMD_ERROR;
+ }
+
+ /* Track height must remain unchanged */
+ if (z_old != z_new) return CMD_ERROR;
+ break;
+
+ case FOUNDATION_LEVELED:
+ /* Is allowed_corner covered by the foundation? */
+ if ((tileh_old & allowed_corner) == 0) return CMD_ERROR;
+
+ /* allowed_corner may only be raised -> steep slope */
+ if ((z_old != z_new) || (tileh_new != (tileh_old | SLOPE_STEEP))) return CMD_ERROR;
+ break;
+
+ case FOUNDATION_STEEP_LOWER:
+ /* Only allow to lower highest corner */
+ if ((z_old != z_new) || (tileh_new != (tileh_old & ~SLOPE_STEEP))) return CMD_ERROR;
+ break;
+
+ case FOUNDATION_STEEP_HIGHER:
+ return CMD_ERROR;
+
+ default: NOT_REACHED();
+ }
+
+ /* Make the ground dirty */
+ if ((flags & DC_EXEC) != 0) SetRailGroundType(tile, RAIL_GROUND_BARREN);
+
+ /* allow terraforming, no extra costs */
+ return CommandCost();
+ }
+ return DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
+}
+
extern const TileTypeProcs _tile_type_rail_procs = {
DrawTile_Track, /* draw_tile_proc */
@@ -2151,4 +2256,5 @@
NULL, /* get_produced_cargo_proc */
VehicleEnter_Track, /* vehicle_enter_tile_proc */
GetFoundation_Track, /* get_foundation_proc */
+ TerraformTile_Track, /* terraform_tile_proc */
};
--- a/src/road_cmd.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/road_cmd.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -33,19 +33,6 @@
#include "tunnel_map.h"
#include "misc/autoptr.hpp"
-
-static uint CountRoadBits(RoadBits r)
-{
- uint count = 0;
-
- if (r & ROAD_NW) ++count;
- if (r & ROAD_SW) ++count;
- if (r & ROAD_SE) ++count;
- if (r & ROAD_NE) ++count;
- return count;
-}
-
-
bool CheckAllowRemoveRoad(TileIndex tile, RoadBits remove, Owner owner, bool *edge_road, RoadType rt)
{
RoadBits present;
@@ -225,7 +212,7 @@
MarkTileDirtyByTile(tile);
}
}
- return CommandCost(CountRoadBits(c) * _price.remove_road);
+ return CommandCost(COUNTBITS(c) * _price.remove_road);
}
case ROAD_TILE_CROSSING: {
@@ -487,7 +474,7 @@
pieces &= ComplementRoadBits(existing);
}
- cost.AddCost(CountRoadBits(pieces) * _price.build_road);
+ cost.AddCost(COUNTBITS(pieces) * _price.build_road);
if (IsTileType(tile, MP_TUNNELBRIDGE)) {
/* Pay for *every* tile of the bridge or tunnel */
cost.MultiplyCost(DistanceManhattan(IsTunnel(tile) ? GetOtherTunnelEnd(tile) : GetOtherBridgeEnd(tile), tile));
@@ -588,6 +575,7 @@
TileIndex start_tile, tile;
CommandCost cost, ret;
bool had_bridge = false;
+ bool had_tunnel = false;
bool had_success = false;
DisallowedRoadDirections drd = DRD_NORTHBOUND;
@@ -633,12 +621,19 @@
_error_message = INVALID_STRING_ID;
} else {
had_success = true;
- /* 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.AddCost(ret);
+ /* Only pay for the upgrade on one side of the bridges and tunnels */
+ if (IsTileType(tile, MP_TUNNELBRIDGE)) {
+ if (IsBridge(tile)) {
+ if ((!had_bridge || GetBridgeRampDirection(tile) == DIAGDIR_SE || GetBridgeRampDirection(tile) == DIAGDIR_SW)) {
+ cost.AddCost(ret);
+ }
+ had_bridge = true;
+ } else {
+ if ((!had_tunnel || GetTunnelDirection(tile) == DIAGDIR_SE || GetTunnelDirection(tile) == DIAGDIR_SW)) {
+ cost.AddCost(ret);
+ }
+ had_tunnel = true;
}
- had_bridge = true;
} else {
cost.AddCost(ret);
}
@@ -665,7 +660,7 @@
CommandCost CmdRemoveLongRoad(TileIndex end_tile, uint32 flags, uint32 p1, uint32 p2)
{
TileIndex start_tile, tile;
- CommandCost cost, ret;
+ CommandCost cost, ret, money;
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
@@ -687,6 +682,7 @@
p2 ^= IS_INT_INSIDE(p2 & 3, 1, 3) ? 3 : 0;
}
+ money.AddCost(GetAvailableMoneyForCommand());
tile = start_tile;
/* Start tile is the small number. */
for (;;) {
@@ -697,8 +693,18 @@
/* try to remove the halves. */
if (bits != 0) {
- ret = DoCommand(tile, rt << 4 | bits, 0, flags, CMD_REMOVE_ROAD);
- if (CmdSucceeded(ret)) cost.AddCost(ret);
+ ret = DoCommand(tile, rt << 4 | bits, 0, flags & ~DC_EXEC, CMD_REMOVE_ROAD);
+ if (CmdSucceeded(ret)) {
+ if (flags & DC_EXEC) {
+ money.AddCost(-ret.GetCost());
+ if (money.GetCost() < 0) {
+ _additional_cash_required = DoCommand(end_tile, start_tile, p2, flags & ~DC_EXEC, CMD_REMOVE_LONG_ROAD).GetCost();
+ return cost;
+ }
+ DoCommand(tile, rt << 4 | bits, 0, flags, CMD_REMOVE_ROAD);
+ }
+ cost.AddCost(ret);
+ }
}
if (tile == end_tile) break;
@@ -1320,7 +1326,7 @@
v->u.road.state = RVSB_IN_DEPOT;
v->vehstatus |= VS_HIDDEN;
v->direction = ReverseDir(v->direction);
- if (v->next == NULL) VehicleEnterDepot(v);
+ if (v->Next() == NULL) VehicleEnterDepot(v);
v->tile = tile;
InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile);
@@ -1366,6 +1372,11 @@
}
}
+static CommandCost TerraformTile_Road(TileIndex tile, uint32 flags, uint z_new, Slope tileh_new)
+{
+ return DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
+}
+
extern const TileTypeProcs _tile_type_road_procs = {
DrawTile_Road, /* draw_tile_proc */
@@ -1381,4 +1392,5 @@
NULL, /* get_produced_cargo_proc */
VehicleEnter_Road, /* vehicle_enter_tile_proc */
GetFoundation_Road, /* get_foundation_proc */
+ TerraformTile_Road, /* terraform_tile_proc */
};
--- a/src/roadveh.h Sun Aug 19 14:04:13 2007 +0000
+++ b/src/roadveh.h Sun Sep 02 11:17:33 2007 +0000
@@ -6,7 +6,8 @@
#define ROADVEH_H
#include "vehicle.h"
-
+#include "engine.h"
+#include "variables.h"
enum RoadVehicleSubType {
RVST_FRONT,
@@ -40,23 +41,11 @@
static inline bool RoadVehHasArticPart(const Vehicle *v)
{
assert(v->type == VEH_ROAD);
- return v->next != NULL && IsRoadVehArticPart(v->next);
+ return v->Next() != NULL && IsRoadVehArticPart(v->Next());
}
-static inline bool IsRoadVehInDepot(const Vehicle *v)
-{
- assert(v->type == VEH_ROAD);
- return v->u.road.state == 254;
-}
-
-static inline bool IsRoadVehInDepotStopped(const Vehicle *v)
-{
- return IsRoadVehInDepot(v) && v->vehstatus & VS_STOPPED;
-}
-
void CcBuildRoadVeh(bool success, TileIndex tile, uint32 p1, uint32 p2);
-void CcCloneRoadVeh(bool success, TileIndex tile, uint32 p1, uint32 p2);
/**
@@ -72,7 +61,7 @@
RoadVehicle() { this->type = VEH_ROAD; }
/** We want to 'destruct' the right class. */
- virtual ~RoadVehicle() {}
+ virtual ~RoadVehicle() { this->PreDestructor(); }
const char *GetTypeString() const { return "road vehicle"; }
void MarkDirty();
@@ -82,6 +71,10 @@
bool IsPrimaryVehicle() const { return IsRoadVehFront(this); }
bool HasFront() const { return true; }
int GetImage(Direction direction) const;
+ int GetDisplaySpeed() const { return this->cur_speed * 10 / 32; }
+ int GetDisplayMaxSpeed() const { return this->max_speed * 10 / 32; }
+ Money GetRunningCost() const { return RoadVehInfo(this->engine_type)->running_cost * _price.roadveh_running; }
+ bool IsInDepot() const { return this->u.road.state == RVSB_IN_DEPOT; }
void Tick();
};
--- a/src/roadveh_cmd.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/roadveh_cmd.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -141,9 +141,9 @@
assert(v->type == VEH_ROAD);
assert(IsRoadVehFront(v));
- for (Vehicle *u = v; u != NULL; u = u->next) {
- /* Update the v->first cache. */
- if (u->first == NULL) u->first = v;
+ for (Vehicle *u = v; u != NULL; u = u->Next()) {
+ /* Check the v->first cache. */
+ assert(u->First() == v);
/* Update the 'first engine' */
u->u.road.first_engine = (v == u) ? INVALID_ENGINE : v->engine_type;
@@ -260,7 +260,6 @@
v->vehicle_flags = 0;
if (e->flags & ENGINE_EXCLUSIVE_PREVIEW) SETBIT(v->vehicle_flags, VF_BUILT_AS_PROTOTYPE);
- v->first = NULL;
v->cargo_cap = GetVehicleProperty(v, 0x0F, rvi->capacity);
AddArticulatedParts(vl, VEH_ROAD);
@@ -271,7 +270,7 @@
RebuildVehicleLists();
InvalidateWindow(WC_COMPANY, v->owner);
if (IsLocalPlayer())
- InvalidateAutoreplaceWindow(VEH_ROAD, v->group_id); // updates the replace Road window
+ InvalidateAutoreplaceWindow(v->engine_type, v->group_id); // updates the replace Road window
GetPlayer(_current_player)->num_engines[p1]++;
}
@@ -305,7 +304,7 @@
}
if (flags & DC_EXEC) {
- if (IsRoadVehInDepotStopped(v)) {
+ if (v->IsStoppedInDepot()) {
DeleteVehicleNews(p1, STR_9016_ROAD_VEHICLE_IS_WAITING);
}
@@ -336,9 +335,10 @@
{
TileIndex tile = v->tile;
- if (!IsTileDepotType(tile, TRANSPORT_ROAD) || !(v->vehstatus & VS_STOPPED)) return false;
+ if (!IsTileDepotType(tile, TRANSPORT_ROAD)) return false;
+ if (IsRoadVehFront(v) && !(v->vehstatus & VS_STOPPED)) return false;
- for (; v != NULL; v = v->next) {
+ for (; v != NULL; v = v->Next()) {
if (v->u.road.state != RVSB_IN_DEPOT || v->tile != tile) return false;
}
return true;
@@ -469,7 +469,7 @@
if (v->vehstatus & VS_CRASHED) return CMD_ERROR;
- if (IsRoadVehInDepot(v)) return CMD_ERROR;
+ if (v->IsInDepot()) return CMD_ERROR;
/* If the current orders are already goto-depot */
if (v->current_order.type == OT_GOTO_DEPOT) {
@@ -534,12 +534,11 @@
if (v->type != VEH_ROAD || !CheckOwnership(v->owner)) return CMD_ERROR;
if (v->vehstatus & VS_STOPPED ||
- v->u.road.roadtype == ROADTYPE_TRAM ||
- v->u.road.crashed_ctr != 0 ||
+ v->vehstatus & VS_CRASHED ||
v->breakdown_ctr != 0 ||
v->u.road.overtaking != 0 ||
v->u.road.state == RVSB_WORMHOLE ||
- IsRoadVehInDepot(v) ||
+ v->IsInDepot() ||
v->cur_speed < 5) {
return CMD_ERROR;
}
@@ -557,8 +556,10 @@
void RoadVehicle::MarkDirty()
{
- this->cur_image = this->GetImage(this->direction);
- MarkAllViewportsDirty(this->left_coord, this->top_coord, this->right_coord + 1, this->bottom_coord + 1);
+ for (Vehicle *v = this; v != NULL; v = v->Next()) {
+ v->cur_image = v->GetImage(v->direction);
+ MarkAllViewportsDirty(v->left_coord, v->top_coord, v->right_coord + 1, v->bottom_coord + 1);
+ }
}
void RoadVehicle::UpdateDeltaXY(Direction direction)
@@ -598,8 +599,8 @@
static void DeleteLastRoadVeh(Vehicle *v)
{
Vehicle *u = v;
- for (; v->next != NULL; v = v->next) u = v;
- u->next = NULL;
+ for (; v->Next() != NULL; v = v->Next()) u = v;
+ u->SetNext(NULL);
DeleteWindowById(WC_VEHICLE_VIEW, v->index);
@@ -645,7 +646,7 @@
v->UpdateDeltaXY(v->direction);
v->cur_image = v->GetImage(v->direction);
SetRoadVehPosition(v, v->x_pos, v->y_pos);
- } while ((v = v->next) != NULL);
+ } while ((v = v->Next()) != NULL);
}
static void RoadVehIsCrashed(Vehicle *v)
@@ -678,7 +679,7 @@
v->u.road.crashed_ctr++;
- for (Vehicle *u = v; u != NULL; u = u->next) {
+ for (Vehicle *u = v; u != NULL; u = u->Next()) {
if (IsCargoInClass(u->cargo_type, CC_PASSENGERS)) pass += u->cargo.Count();
u->vehstatus |= VS_CRASHED;
@@ -707,7 +708,7 @@
static void RoadVehCheckTrainCrash(Vehicle *v)
{
- for (Vehicle *u = v; u != NULL; u = u->next) {
+ for (Vehicle *u = v; u != NULL; u = u->Next()) {
if (u->u.road.state == RVSB_WORMHOLE) continue;
TileIndex tile = u->tile;
@@ -795,24 +796,17 @@
switch (order->type) {
case OT_GOTO_STATION: {
- const RoadStop* rs;
-
if (order->dest == v->last_station_visited) {
v->last_station_visited = INVALID_STATION;
}
- rs = GetStation(order->dest)->GetPrimaryRoadStop(
- IsCargoInClass(v->cargo_type, CC_PASSENGERS) ? RoadStop::BUS : RoadStop::TRUCK
- );
+ const RoadStop *rs = GetStation(order->dest)->GetPrimaryRoadStop(v);
TileIndex dest = INVALID_TILE;
if (rs != NULL) {
uint mindist = MAX_UVALUE(uint);
- for (; rs != NULL; rs = rs->next) {
- /* The vehicle cannot go to this roadstop */
- if ((GetRoadTypes(rs->xy) & v->u.road.compatible_roadtypes) == ROADTYPES_NONE) continue;
-
+ for (; rs != NULL; rs = rs->GetNextRoadStop(v)) {
uint dist = DistanceManhattan(v->tile, rs->xy);
if (dist < mindist) {
@@ -873,10 +867,10 @@
return
v->type == VEH_ROAD &&
- !IsRoadVehInDepot(v) &&
+ !v->IsInDepot() &&
myabs(v->z_pos - rvf->veh->z_pos) < 6 &&
v->direction == rvf->dir &&
- GetFirstVehicleInChain(rvf->veh) != GetFirstVehicleInChain(v) &&
+ rvf->veh->First() != v->First() &&
(dist_x[v->direction] >= 0 || (x_diff > dist_x[v->direction] && x_diff <= 0)) &&
(dist_x[v->direction] <= 0 || (x_diff < dist_x[v->direction] && x_diff >= 0)) &&
(dist_y[v->direction] >= 0 || (y_diff > dist_y[v->direction] && y_diff <= 0)) &&
@@ -1092,7 +1086,7 @@
static int PickRandomBit(uint bits)
{
uint i;
- uint num = RandomRange(CountBitsSet(bits));
+ uint num = RandomRange(COUNTBITS(bits));
for (i = 0; !(bits & 1) || (int)--num >= 0; bits >>= 1, i++) {}
return i;
@@ -1144,7 +1138,7 @@
FindRoadToChooseData frd;
Trackdir best_track;
- uint32 r = GetTileTrackStatus(tile, TRANSPORT_ROAD, v->u.road.compatible_roadtypes);
+ uint32 r = GetTileTrackStatus(tile, TRANSPORT_ROAD, v->u.road.compatible_roadtypes);
TrackdirBits signal = (TrackdirBits)GB(r, 16, 16);
TrackdirBits trackdirs = (TrackdirBits)GB(r, 0, 16);
@@ -1155,8 +1149,9 @@
}
} else if (IsTileType(tile, MP_STATION) && IsStandardRoadStopTile(tile)) {
/* Standard road stop (drive-through stops are treated as normal road) */
- if (!IsTileOwner(tile, v->owner) || GetRoadStopDir(tile) == enterdir) {
- /* different station owner or wrong orientation */
+
+ if (!IsTileOwner(tile, v->owner) || GetRoadStopDir(tile) == enterdir || RoadVehHasArticPart(v)) {
+ /* different station owner or wrong orientation or the vehicle has articulated parts */
trackdirs = TRACKDIR_BIT_NONE;
} else {
/* Our station */
@@ -1167,7 +1162,7 @@
trackdirs = TRACKDIR_BIT_NONE;
} else {
/* Proper station type, check if there is free loading bay */
- if (!_patches.roadveh_queue && IsStandardRoadStopTile(tile) &&
+ if (!_patches.roadveh_queue && IsStandardRoadStopTile(tile) &&
!GetRoadStopByTile(tile, rstype)->HasFreeBay()) {
/* Station is full and RV queuing is off */
trackdirs = TRACKDIR_BIT_NONE;
@@ -1340,7 +1335,7 @@
static bool RoadVehLeaveDepot(Vehicle *v, bool first)
{
/* Don't leave if not all the wagons are in the depot. */
- for (const Vehicle *u = v; u != NULL; u = u->next) {
+ for (const Vehicle *u = v; u != NULL; u = u->Next()) {
if (u->u.road.state != RVSB_IN_DEPOT || u->tile != v->tile) return false;
}
@@ -1379,9 +1374,9 @@
return true;
}
-static Trackdir FollowPreviousRoadVehicle(const Vehicle *v, const Vehicle *prev, TileIndex tile, DiagDirection entry_dir)
+static Trackdir FollowPreviousRoadVehicle(const Vehicle *v, const Vehicle *prev, TileIndex tile, DiagDirection entry_dir, bool already_reversed)
{
- if (prev->tile == v->tile) {
+ if (prev->tile == v->tile && !already_reversed) {
/* If the previous vehicle is on the same tile as this vehicle is
* then it must have reversed. */
return _road_reverse_table[entry_dir];
@@ -1446,7 +1441,7 @@
/* If this vehicle is in a depot and we've reached this point it must be
* one of the articulated parts. It will stay in the depot until activated
* by the previous vehicle in the chain when it gets to the right place. */
- if (IsRoadVehInDepot(v)) return true;
+ if (v->IsInDepot()) return true;
/* Save old vehicle position to use at end of move to set viewport area dirty */
BeginVehicleMove(v);
@@ -1494,7 +1489,7 @@
/* If this is the front engine, look for the right path. */
dir = RoadFindPathToDest(v, tile, (DiagDirection)(rd.x & 3));
} else {
- dir = FollowPreviousRoadVehicle(v, prev, tile, (DiagDirection)(rd.x & 3));
+ dir = FollowPreviousRoadVehicle(v, prev, tile, (DiagDirection)(rd.x & 3), false);
}
if (dir == INVALID_TRACKDIR) {
@@ -1586,11 +1581,18 @@
if (rd.x & RDE_TURNED) {
/* Vehicle has finished turning around, it will now head back onto the same tile */
- Trackdir dir = RoadFindPathToDest(v, v->tile, (DiagDirection)(rd.x & 3));
+ Trackdir dir;
uint32 r;
Direction newdir;
const RoadDriveEntry *rdp;
+ if (IsRoadVehFront(v)) {
+ /* If this is the front engine, look for the right path. */
+ dir = RoadFindPathToDest(v, v->tile, (DiagDirection)(rd.x & 3));
+ } else {
+ dir = FollowPreviousRoadVehicle(v, prev, v->tile, (DiagDirection)(rd.x & 3), true);
+ }
+
if (dir == INVALID_TRACKDIR) {
v->cur_speed = 0;
return false;
@@ -1627,11 +1629,11 @@
/* This vehicle is not in a wormhole and it hasn't entered a new tile. If
* it's on a depot tile, check if it's time to activate the next vehicle in
* the chain yet. */
- if (v->next != NULL &&
+ if (v->Next() != NULL &&
IsTileType(v->tile, MP_ROAD) && GetRoadTileType(v->tile) == ROAD_TILE_DEPOT) {
if (v->u.road.frame == v->u.road.cached_veh_length + RVC_DEPOT_START_FRAME) {
- RoadVehLeaveDepot(v->next, false);
+ RoadVehLeaveDepot(v->Next(), false);
}
}
@@ -1794,7 +1796,7 @@
if (v->u.road.reverse_ctr != 0) v->u.road.reverse_ctr--;
/* handle crashed */
- if (v->u.road.crashed_ctr != 0) {
+ if (v->vehstatus & VS_CRASHED) {
RoadVehIsCrashed(v);
return;
}
@@ -1817,12 +1819,12 @@
if (v->current_order.type == OT_LOADING) return;
- if (IsRoadVehInDepot(v) && RoadVehLeaveDepot(v, true)) return;
+ if (v->IsInDepot() && RoadVehLeaveDepot(v, true)) return;
/* Check if vehicle needs to proceed, return if it doesn't */
if (!RoadVehAccelerate(v)) return;
- for (Vehicle *prev = NULL; v != NULL; prev = v, v = v->next) {
+ for (Vehicle *prev = NULL; v != NULL; prev = v, v = v->Next()) {
if (!IndividualRoadVehicleController(v, prev)) break;
}
}
@@ -1842,29 +1844,15 @@
static void CheckIfRoadVehNeedsService(Vehicle *v)
{
- const Depot* depot;
-
- if (_patches.servint_roadveh == 0) return;
- if (!VehicleNeedsService(v)) return;
- if (v->vehstatus & VS_STOPPED) return;
- if (_patches.gotodepot && VehicleHasDepotOrders(v)) return;
-
- /* Don't interfere with a depot visit scheduled by the user, or a
- * depot visit by the order list. */
- if (v->current_order.type == OT_GOTO_DEPOT &&
- (v->current_order.flags & (OF_HALT_IN_DEPOT | OF_PART_OF_ORDERS)) != 0)
- return;
-
/* If we already got a slot at a stop, use that FIRST, and go to a depot later */
- if (v->u.road.slot != NULL) return;
-
- if (IsRoadVehInDepot(v)) {
+ if (v->u.road.slot != NULL || _patches.servint_roadveh == 0 || !VehicleNeedsService(v)) return;
+ if (v->IsInDepot()) {
VehicleServiceInDepot(v);
return;
}
/* XXX If we already have a depot order, WHY do we search over and over? */
- depot = FindClosestRoadDepot(v);
+ const Depot *depot = FindClosestRoadDepot(v);
if (depot == NULL || DistanceManhattan(v->tile, depot->xy) > 12) {
if (v->current_order.type == OT_GOTO_DEPOT) {
@@ -1916,9 +1904,9 @@
/* update destination */
if (v->current_order.type == OT_GOTO_STATION && v->u.road.slot == NULL && !(v->vehstatus & VS_CRASHED)) {
- Station* st = GetStation(v->current_order.dest);
- RoadStop* rs = st->GetPrimaryRoadStop(IsCargoInClass(v->cargo_type, CC_PASSENGERS) ? RoadStop::BUS : RoadStop::TRUCK);
- RoadStop* best = NULL;
+ Station *st = GetStation(v->current_order.dest);
+ RoadStop *rs = st->GetPrimaryRoadStop(v);
+ RoadStop *best = NULL;
if (rs != NULL) {
/* We try to obtain a slot if:
@@ -1935,7 +1923,7 @@
v->unitnumber, v->index, st->index, st->xy
);
/* Now we find the nearest road stop that has a free slot */
- for (; rs != NULL; rs = rs->next) {
+ for (; rs != NULL; rs = rs->GetNextRoadStop(v)) {
dist = RoadFindPathToStop(v, rs->xy);
if (dist == UINT_MAX) {
DEBUG(ms, 4, " stop 0x%X is unreachable, not treating further", rs->xy);
@@ -2005,7 +1993,7 @@
* @param p2 Bitstuffed elements
* - p2 = (bit 0-7) - the new cargo type to refit to
* - p2 = (bit 8-15) - the new cargo subtype to refit to
- * - p2 = (bit 16) - refit only this vehicle (ignored)
+ * - p2 = (bit 16) - refit only this vehicle
* @return cost of refit or error
*/
CommandCost CmdRefitRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
@@ -2014,7 +2002,9 @@
CommandCost cost;
CargoID new_cid = GB(p2, 0, 8);
byte new_subtype = GB(p2, 8, 8);
+ bool only_this = HASBIT(p2, 16);
uint16 capacity = CALLBACK_FAILED;
+ uint total_capacity = 0;
if (!IsValidVehicleID(p1)) return CMD_ERROR;
@@ -2023,63 +2013,79 @@
if (v->type != VEH_ROAD || !CheckOwnership(v->owner)) return CMD_ERROR;
if (!CheckRoadVehInDepotStopped(v)) return_cmd_error(STR_9013_MUST_BE_STOPPED_INSIDE);
- if (new_cid >= NUM_CARGO || !CanRefitTo(v->engine_type, new_cid)) return CMD_ERROR;
+ if (new_cid >= NUM_CARGO) return CMD_ERROR;
SET_EXPENSES_TYPE(EXPENSES_ROADVEH_RUN);
- if (HASBIT(EngInfo(v->engine_type)->callbackmask, CBM_REFIT_CAPACITY)) {
- /* Back up the cargo type */
- CargoID temp_cid = v->cargo_type;
- byte temp_subtype = v->cargo_subtype;
- v->cargo_type = new_cid;
- v->cargo_subtype = new_subtype;
+ for (; v != NULL; v = v->Next()) {
+ /* XXX: We refit all the attached wagons en-masse if they can be
+ * refitted. This is how TTDPatch does it. TODO: Have some nice
+ * [Refit] button near each wagon. */
+ if (!CanRefitTo(v->engine_type, new_cid)) continue;
- /* Check the refit capacity callback */
- capacity = GetVehicleCallback(CBID_VEHICLE_REFIT_CAPACITY, 0, 0, v->engine_type, v);
+ if (v->cargo_cap == 0) continue;
- /* Restore the original cargo type */
- v->cargo_type = temp_cid;
- v->cargo_subtype = temp_subtype;
+ if (HASBIT(EngInfo(v->engine_type)->callbackmask, CBM_REFIT_CAPACITY)) {
+ /* Back up the cargo type */
+ CargoID temp_cid = v->cargo_type;
+ byte temp_subtype = v->cargo_subtype;
+ v->cargo_type = new_cid;
+ v->cargo_subtype = new_subtype;
+
+ /* Check the refit capacity callback */
+ capacity = GetVehicleCallback(CBID_VEHICLE_REFIT_CAPACITY, 0, 0, v->engine_type, v);
+
+ /* Restore the original cargo type */
+ v->cargo_type = temp_cid;
+ v->cargo_subtype = temp_subtype;
+ }
+
+ if (capacity == CALLBACK_FAILED) {
+ /* callback failed or not used, use default capacity */
+ const RoadVehicleInfo *rvi = RoadVehInfo(v->engine_type);
+
+ CargoID old_cid = rvi->cargo_type;
+ /* normally, the capacity depends on the cargo type, a vehicle can
+ * carry twice as much mail/goods as normal cargo, and four times as
+ * many passengers
+ */
+ capacity = GetVehicleProperty(v, 0x0F, rvi->capacity);
+ switch (old_cid) {
+ case CT_PASSENGERS: break;
+ case CT_MAIL:
+ case CT_GOODS: capacity *= 2; break;
+ default: capacity *= 4; break;
+ }
+ switch (new_cid) {
+ case CT_PASSENGERS: break;
+ case CT_MAIL:
+ case CT_GOODS: capacity /= 2; break;
+ default: capacity /= 4; break;
+ }
+ }
+
+ if (capacity == 0) continue;
+
+ total_capacity += capacity;
+
+ if (IsHumanPlayer(v->owner) && new_cid != v->cargo_type) {
+ cost.AddCost(GetRefitCost(v->engine_type));
+ }
+
+ if (flags & DC_EXEC) {
+ v->cargo_cap = capacity;
+ 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);
+ InvalidateWindow(WC_VEHICLE_DEPOT, v->tile);
+ RebuildVehicleLists();
+ }
+
+ if (only_this) break;
}
- if (capacity == CALLBACK_FAILED) {
- /* callback failed or not used, use default capacity */
- const RoadVehicleInfo *rvi = RoadVehInfo(v->engine_type);
-
- CargoID old_cid = rvi->cargo_type;
- /* normally, the capacity depends on the cargo type, a vehicle can
- * carry twice as much mail/goods as normal cargo, and four times as
- * many passengers
- */
- capacity = GetVehicleProperty(v, 0x0F, rvi->capacity);
- switch (old_cid) {
- case CT_PASSENGERS: break;
- case CT_MAIL:
- case CT_GOODS: capacity *= 2; break;
- default: capacity *= 4; break;
- }
- switch (new_cid) {
- case CT_PASSENGERS: break;
- case CT_MAIL:
- case CT_GOODS: capacity /= 2; break;
- default: capacity /= 4; break;
- }
- }
- _returned_refit_capacity = capacity;
-
- if (IsHumanPlayer(v->owner) && new_cid != v->cargo_type) {
- cost = GetRefitCost(v->engine_type);
- }
-
- if (flags & DC_EXEC) {
- v->cargo_cap = capacity;
- 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);
- InvalidateWindow(WC_VEHICLE_DEPOT, v->tile);
- RebuildVehicleLists();
- }
+ _returned_refit_capacity = total_capacity;
return cost;
}
--- a/src/roadveh_gui.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/roadveh_gui.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -46,7 +46,7 @@
}
dx += length;
- v = v->next;
+ v = v->Next();
} while (v != NULL && dx < max_length);
}
@@ -65,7 +65,7 @@
/* Add space for the cargo amount for each part. */
do {
height_extension += 11;
- } while ((v = v->next) != NULL);
+ } while ((v = v->Next()) != NULL);
ResizeWindow(w, 0, height_extension);
} break;
@@ -91,13 +91,13 @@
SetDParam(0, (v->age + 365 < v->max_age) ? STR_AGE : STR_AGE_RED);
SetDParam(2, v->max_age / 366);
- SetDParam(3, RoadVehInfo(v->engine_type)->running_cost * _price.roadveh_running >> 8);
+ SetDParam(3, v->GetDisplayRunningCost());
DrawString(2, 15, STR_900D_AGE_RUNNING_COST_YR, 0);
}
/* Draw max speed */
{
- SetDParam(0, v->max_speed * 10 / 32);
+ SetDParam(0, v->GetDisplayMaxSpeed());
DrawString(2, 25, STR_900E_MAX_SPEED, 0);
}
@@ -128,7 +128,7 @@
memset(max_cargo, 0, sizeof(max_cargo));
- for (const Vehicle *u = v; u != NULL; u = u->next) {
+ for (const Vehicle *u = v; u != NULL; u = u->Next()) {
max_cargo[u->cargo_type] += u->cargo_cap;
}
@@ -145,13 +145,15 @@
if (!first) strecat(capacity, ", ", lastof(capacity));
strecat(capacity, buffer, lastof(capacity));
+
+ first = false;
}
}
SetDParamStr(0, capacity);
DrawStringTruncated(34, 67 + y_offset, STR_JUST_STRING, 0, w->width - 34);
- for (const Vehicle *u = v; u != NULL; u = u->next) {
+ for (const Vehicle *u = v; u != NULL; u = u->Next()) {
str = STR_8812_EMPTY;
if (!u->cargo.Empty()) {
SetDParam(0, u->cargo_type);
@@ -249,7 +251,8 @@
RoadVehDetailsWndProc
};
-static void ShowRoadVehDetailsWindow(const Vehicle *v)
+
+void ShowRoadVehDetailsWindow(const Vehicle *v)
{
Window *w;
VehicleID veh = v->index;
@@ -261,178 +264,6 @@
w->caption_color = v->owner;
}
-void CcCloneRoadVeh(bool success, TileIndex tile, uint32 p1, uint32 p2)
-{
- if (success) ShowRoadVehViewWindow(GetVehicle(_new_vehicle_id));
-}
-
-static void RoadVehViewWndProc(Window *w, WindowEvent *e)
-{
- switch (e->event) {
- case WE_PAINT: {
- Vehicle *v = GetVehicle(w->window_number);
- StringID str;
- bool is_localplayer = v->owner == _local_player;
-
- SetWindowWidgetDisabledState(w, 7, !is_localplayer);
- SetWindowWidgetDisabledState(w, 8, !is_localplayer || v->u.road.roadtype == ROADTYPE_TRAM);
- SetWindowWidgetDisabledState(w, 11, !is_localplayer);
- /* Disable refit button if vehicle not refittable */
- SetWindowWidgetDisabledState(w, 12, !is_localplayer ||
- EngInfo(v->engine_type)->refit_mask == 0);
-
- /* draw widgets & caption */
- SetDParam(0, v->index);
- DrawWindowWidgets(w);
-
- if (v->u.road.crashed_ctr != 0) {
- str = STR_8863_CRASHED;
- } else if (v->breakdown_ctr == 1) {
- str = STR_885C_BROKEN_DOWN;
- } else if (v->vehstatus & VS_STOPPED) {
- str = STR_8861_STOPPED;
- } else {
- switch (v->current_order.type) {
- case OT_GOTO_STATION: {
- SetDParam(0, v->current_order.dest);
- SetDParam(1, v->cur_speed * 10 / 32);
- str = STR_HEADING_FOR_STATION + _patches.vehicle_speed;
- } break;
-
- case OT_GOTO_DEPOT: {
- Depot *depot = GetDepot(v->current_order.dest);
- SetDParam(0, depot->town_index);
- SetDParam(1, v->cur_speed * 10 / 32);
- if (HASBIT(v->current_order.flags, OFB_HALT_IN_DEPOT) && !HASBIT(v->current_order.flags, OFB_PART_OF_ORDERS)) {
- str = STR_HEADING_FOR_ROAD_DEPOT + _patches.vehicle_speed;
- } else {
- str = STR_HEADING_FOR_ROAD_DEPOT_SERVICE + _patches.vehicle_speed;
- }
- } break;
-
- case OT_LOADING:
- case OT_LEAVESTATION:
- str = STR_882F_LOADING_UNLOADING;
- break;
-
- default:
- if (v->num_orders == 0) {
- str = STR_NO_ORDERS + _patches.vehicle_speed;
- SetDParam(0, v->cur_speed * 10 / 32);
- } else {
- str = STR_EMPTY;
- }
- break;
- }
- }
-
- /* draw the flag plus orders */
- DrawSprite(v->vehstatus & VS_STOPPED ? SPR_FLAG_VEH_STOPPED : SPR_FLAG_VEH_RUNNING, PAL_NONE, 2, w->widget[5].top + 1);
- DrawStringCenteredTruncated(w->widget[5].left + 8, w->widget[5].right, w->widget[5].top + 1, str, 0);
- DrawWindowViewport(w);
- } break;
-
- case WE_CLICK: {
- const Vehicle *v = GetVehicle(w->window_number);
-
- switch (e->we.click.widget) {
- case 5: /* start stop */
- DoCommandP(v->tile, v->index, 0, NULL, CMD_START_STOP_ROADVEH | CMD_MSG(STR_9015_CAN_T_STOP_START_ROAD_VEHICLE));
- break;
- case 6: /* center main view */
- ScrollMainWindowTo(v->x_pos, v->y_pos);
- break;
- case 7: /* goto depot */
- DoCommandP(v->tile, v->index, _ctrl_pressed ? DEPOT_SERVICE : 0, NULL, CMD_SEND_ROADVEH_TO_DEPOT | CMD_MSG(STR_9018_CAN_T_SEND_VEHICLE_TO_DEPOT));
- break;
- case 8: /* turn around */
- DoCommandP(v->tile, v->index, 0, NULL, CMD_TURN_ROADVEH | CMD_MSG(STR_9033_CAN_T_MAKE_VEHICLE_TURN));
- break;
- case 9: /* show orders */
- ShowOrdersWindow(v);
- break;
- case 10: /* show details */
- ShowRoadVehDetailsWindow(v);
- break;
- case 11: /* clone vehicle */
- DoCommandP(v->tile, v->index, _ctrl_pressed ? 1 : 0, CcCloneRoadVeh, CMD_CLONE_VEHICLE | CMD_MSG(STR_9009_CAN_T_BUILD_ROAD_VEHICLE));
- break;
- case 12: /* Refit vehicle */
- ShowVehicleRefitWindow(v, INVALID_VEH_ORDER_ID);
- break;
- }
- } break;
-
- case WE_RESIZE:
- w->viewport->width += e->we.sizing.diff.x;
- w->viewport->height += e->we.sizing.diff.y;
- w->viewport->virtual_width += e->we.sizing.diff.x;
- w->viewport->virtual_height += e->we.sizing.diff.y;
- break;
-
- case WE_DESTROY:
- 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: {
- const Vehicle *v = GetVehicle(w->window_number);
- bool rv_stopped = IsRoadVehInDepotStopped(v);
-
- /* Widget 7 (send to depot) must be hidden if the truck/bus is already stopped in depot.
- * Widget 11 (clone) should then be shown, since cloning is allowed only while in depot and stopped.
- * This sytem allows to have two buttons, on top of each other.
- * The same system applies to widget 8 and 12, force turn around and refit. */
- if (rv_stopped != IsWindowWidgetHidden(w, 7) || rv_stopped == IsWindowWidgetHidden(w, 11)) {
- SetWindowWidgetHiddenState(w, 7, rv_stopped); // send to depot
- SetWindowWidgetHiddenState(w, 8, rv_stopped); // force turn around
- SetWindowWidgetHiddenState(w, 11, !rv_stopped); // clone
- SetWindowWidgetHiddenState(w, 12, !rv_stopped); // refit
- SetWindowDirty(w);
- }
- }
- }
-}
-
-static const Widget _roadveh_view_widgets[] = {
-{ WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW },
-{ WWT_CAPTION, RESIZE_RIGHT, 14, 11, 237, 0, 13, STR_9002, STR_018C_WINDOW_TITLE_DRAG_THIS },
-{ WWT_STICKYBOX, RESIZE_LR, 14, 238, 249, 0, 13, 0x0, STR_STICKY_BUTTON },
-{ WWT_PANEL, RESIZE_RB, 14, 0, 231, 14, 103, 0x0, STR_NULL },
-{ WWT_INSET, RESIZE_RB, 14, 2, 229, 16, 101, 0x0, STR_NULL },
-{ WWT_PUSHBTN, RESIZE_RTB, 14, 0, 237, 104, 115, 0x0, STR_901C_CURRENT_VEHICLE_ACTION },
-{ WWT_PUSHIMGBTN, RESIZE_LR, 14, 232, 249, 14, 31, SPR_CENTRE_VIEW_VEHICLE, STR_901E_CENTER_MAIN_VIEW_ON_VEHICLE },
-{ WWT_PUSHIMGBTN, RESIZE_LR, 14, 232, 249, 32, 49, SPR_SEND_ROADVEH_TODEPOT,STR_901F_SEND_VEHICLE_TO_DEPOT },
-{ WWT_PUSHIMGBTN, RESIZE_LR, 14, 232, 249, 50, 67, SPR_FORCE_VEHICLE_TURN, STR_9020_FORCE_VEHICLE_TO_TURN_AROUND },
-{ WWT_PUSHIMGBTN, RESIZE_LR, 14, 232, 249, 68, 85, SPR_SHOW_ORDERS, STR_901D_SHOW_VEHICLE_S_ORDERS },
-{ WWT_PUSHIMGBTN, RESIZE_LR, 14, 232, 249, 86, 103, SPR_SHOW_VEHICLE_DETAILS,STR_9021_SHOW_ROAD_VEHICLE_DETAILS },
-{ WWT_PUSHIMGBTN, RESIZE_LR, 14, 232, 249, 32, 49, SPR_CLONE_ROADVEH, STR_CLONE_ROAD_VEHICLE_INFO },
-{ WWT_PUSHIMGBTN, RESIZE_LR, 14, 232, 249, 50, 67, SPR_REFIT_VEHICLE, STR_REFIT_ROAD_VEHICLE_TO_CARRY },
-{ WWT_PANEL, RESIZE_LRB, 14, 232, 249, 104, 103, 0x0, STR_NULL },
-{ WWT_RESIZEBOX, RESIZE_LRTB, 14, 238, 249, 104, 115, 0x0, STR_NULL },
-{ WIDGETS_END }
-};
-
-static const WindowDesc _roadveh_view_desc = {
- WDP_AUTO, WDP_AUTO, 250, 116, 250, 116,
- WC_VEHICLE_VIEW, WC_NONE,
- WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE,
- _roadveh_view_widgets,
- RoadVehViewWndProc,
-};
-
-void ShowRoadVehViewWindow(const Vehicle *v)
-{
- Window *w = AllocateWindowDescFront(&_roadveh_view_desc, v->index);
-
- if (w != NULL) {
- w->caption_color = v->owner;
- AssignWindowViewport(w, 3, 17, 0xE2, 0x54, w->window_number | (1 << 31), ZOOM_LVL_ROADVEH);
- }
-}
-
void CcBuildRoadVeh(bool success, TileIndex tile, uint32 p1, uint32 p2)
{
const Vehicle *v;
@@ -444,5 +275,5 @@
_backup_orders_tile = 0;
RestoreVehicleOrders(v, _backup_orders_data);
}
- ShowRoadVehViewWindow(v);
+ ShowVehicleViewWindow(v);
}
--- a/src/saveload.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/saveload.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -27,10 +27,9 @@
#include "variables.h"
#include "table/strings.h"
#include "strings.h"
-#include <setjmp.h>
#include <list>
-extern const uint16 SAVEGAME_VERSION = 72;
+extern const uint16 SAVEGAME_VERSION = 74;
uint16 _sl_version; ///< the major savegame version identifier
byte _sl_minor_version; ///< the minor savegame version, DO NOT USE!
@@ -53,7 +52,6 @@
ReaderProc *read_bytes; ///< savegame loader function
const ChunkHandler* const *chs; ///< the chunk of data that is being processed atm (vehicles, signs, etc.)
- const SaveLoad* const *includes; ///< the internal layouf of the given chunk
/* When saving/loading savegames, they are always saved to a temporary memory-place
* to be flushed to file (save) or to final place (load) when full. */
@@ -68,7 +66,6 @@
void (*excpt_uninit)(); ///< the function to execute on any encountered error
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;
@@ -143,7 +140,7 @@
_sl.error_str = string;
free(_sl.extra_msg);
_sl.extra_msg = (extra_msg == NULL) ? NULL : strdup(extra_msg);
- longjmp(_sl.excpt, 0);
+ throw std::exception();
}
/** Read in a single byte from file. If the temporary buffer is full,
@@ -757,7 +754,7 @@
}
break;
case SL_WRITEBYTE: return 1; // a byte is logically of size 1
- case SL_INCLUDE: return SlCalcObjLength(object, _sl.includes[sld->version_from]);
+ case SL_VEH_INCLUDE: return SlCalcObjLength(object, GetVehicleDescription(VEH_END));
default: NOT_REACHED();
}
return 0;
@@ -806,11 +803,9 @@
}
break;
- /* SL_INCLUDE loads common code for a type
- * XXX - variable renaming abuse
- * include_index: common code to include from _desc_includes[], abused by sld->version_from */
- case SL_INCLUDE:
- SlObject(ptr, _sl.includes[sld->version_from]);
+ /* SL_VEH_INCLUDE loads common code for vehicles */
+ case SL_VEH_INCLUDE:
+ SlObject(ptr, GetVehicleDescription(VEH_END));
break;
default: NOT_REACHED();
}
@@ -1283,12 +1278,6 @@
NULL,
};
-/* used to include a vehicle desc in another desc. */
-extern const SaveLoad _common_veh_desc[];
-static const SaveLoad* const _desc_includes[] = {
- _common_veh_desc
-};
-
/**
* Pointers cannot be saved to a savegame, so this functions gets
* the index of the item, and if not available, it hussles with
@@ -1521,9 +1510,42 @@
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)) {
+ try {
+ fmt = GetSavegameFormat(_savegame_format);
+
+ /* 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(STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE);
+
+ if (!fmt->init_write()) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR, "cannot initialize compressor");
+
+ {
+ uint i;
+ uint count = 1 << Savegame_POOL_BLOCK_SIZE_BITS;
+
+ assert(_ts.count == _sl.offs_base);
+ for (i = 0; i != _Savegame_pool.GetBlockCount() - 1; i++) {
+ _sl.buf = _Savegame_pool.blocks[i];
+ fmt->writer(count);
+ }
+
+ /* The last block is (almost) always not fully filled, so only write away
+ * as much data as it is in there */
+ _sl.buf = _Savegame_pool.blocks[i];
+ fmt->writer(_ts.count - (i * count));
+ }
+
+ fmt->uninit_write();
+ assert(_ts.count == _sl.offs_base);
+ GetSavegameFormat("memory")->uninit_write(); // clean the memorypool
+ fclose(_sl.fh);
+
+ if (threaded) OTTD_SendThreadMessage(MSG_OTTD_SAVETHREAD_DONE);
+
+ return SL_OK;
+ }
+ catch (...) {
AbortSaveLoad();
if (_sl.excpt_uninit != NULL) _sl.excpt_uninit();
@@ -1537,40 +1559,6 @@
}
return SL_ERROR;
}
-
- fmt = GetSavegameFormat(_savegame_format);
-
- /* 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(STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE);
-
- if (!fmt->init_write()) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR, "cannot initialize compressor");
-
- {
- uint i;
- uint count = 1 << Savegame_POOL_BLOCK_SIZE_BITS;
-
- assert(_ts.count == _sl.offs_base);
- for (i = 0; i != _Savegame_pool.GetBlockCount() - 1; i++) {
- _sl.buf = _Savegame_pool.blocks[i];
- fmt->writer(count);
- }
-
- /* The last block is (almost) always not fully filled, so only write away
- * as much data as it is in there */
- _sl.buf = _Savegame_pool.blocks[i];
- fmt->writer(_ts.count - (i * count));
- }
-
- fmt->uninit_write();
- assert(_ts.count == _sl.offs_base);
- GetSavegameFormat("memory")->uninit_write(); // clean the memorypool
- fclose(_sl.fh);
-
- if (threaded) OTTD_SendThreadMessage(MSG_OTTD_SAVETHREAD_DONE);
-
- return SL_OK;
}
static void* SaveFileToDiskThread(void *arg)
@@ -1616,10 +1604,127 @@
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)) {
+ try {
+ _sl.fh = (mode == SL_SAVE) ? FioFOpenFile(filename, "wb", sb) : FioFOpenFile(filename, "rb", sb);
+
+ /* Make it a little easier to load savegames from the console */
+ if (_sl.fh == NULL && mode == SL_LOAD) _sl.fh = FioFOpenFile(filename, "rb", SAVE_DIR);
+ if (_sl.fh == NULL && mode == SL_LOAD) _sl.fh = FioFOpenFile(filename, "rb", BASE_DIR);
+
+ if (_sl.fh == NULL) {
+ SlError(mode == SL_SAVE ? STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE : STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE);
+ }
+
+ _sl.bufe = _sl.bufp = NULL;
+ _sl.offs_base = 0;
+ _sl.save = (mode != 0);
+ _sl.chs = _chunk_handlers;
+
+ /* 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 */
+ fmt = GetSavegameFormat("memory"); // write to memory
+
+ _sl.write_bytes = fmt->writer;
+ _sl.excpt_uninit = fmt->uninit_write;
+ if (!fmt->init_write()) {
+ DEBUG(sl, 0, "Initializing writer '%s' failed.", fmt->name);
+ return AbortSaveLoad();
+ }
+
+ _sl_version = SAVEGAME_VERSION;
+
+ BeforeSaveGame();
+ SlSaveChunks();
+ SlWriteFill(); // flush the save buffer
+
+ SaveFileStart();
+ if (_network_server ||
+ (save_thread = OTTDCreateThread(&SaveFileToDiskThread, NULL)) == NULL) {
+ if (!_network_server) DEBUG(sl, 1, "Cannot create savegame thread, reverting to single-threaded mode...");
+
+ SaveOrLoadResult result = SaveFileToDisk(false);
+ SaveFileDone();
+
+ return result;
+ }
+ } else { /* LOAD game */
+ assert(mode == SL_LOAD);
+ #ifdef DEBUG_DUMP_COMMANDS
+ debug_dump_commands("ddc:load:%s\n", filename);
+ #endif /* DUMP_COMMANDS */
+
+ 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++) {
+ /* No loader found, treat as version 0 and use LZO format */
+ if (fmt == endof(_saveload_formats)) {
+ DEBUG(sl, 0, "Unknown savegame type, trying to load it as the buggy format");
+ #if defined(WINCE)
+ /* Of course some system had not to support rewind ;) */
+ fseek(_sl.fh, 0L, SEEK_SET);
+ clearerr(_sl.fh);
+ #else
+ rewind(_sl.fh);
+ #endif
+ _sl_version = 0;
+ _sl_minor_version = 0;
+ fmt = _saveload_formats + 1; // LZO
+ break;
+ }
+
+ if (fmt->tag == hdr[0]) {
+ /* check version number */
+ _sl_version = TO_BE32(hdr[1]) >> 16;
+ /* Minor is not used anymore from version 18.0, but it is still needed
+ * in versions before that (4 cases) which can't be removed easy.
+ * Therefor it is loaded, but never saved (or, it saves a 0 in any scenario).
+ * So never EVER use this minor version again. -- TrueLight -- 22-11-2005 */
+ _sl_minor_version = (TO_BE32(hdr[1]) >> 8) & 0xFF;
+
+ DEBUG(sl, 1, "Loading savegame version %d", _sl_version);
+
+ /* Is the version higher than the current? */
+ if (_sl_version > SAVEGAME_VERSION) SlError(STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME);
+ break;
+ }
+ }
+
+ _sl.read_bytes = fmt->reader;
+ _sl.excpt_uninit = fmt->uninit_read;
+
+ /* loader for this savegame type is not implemented? */
+ if (fmt->init_read == NULL) {
+ 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()) {
+ 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
+ * any mapsize information. Pre-initialize to 256x256 to not to
+ * confuse old games */
+ InitializeGame(IG_DATE_RESET, 256, 256);
+
+ SlLoadChunks();
+ fmt->uninit_read();
+ fclose(_sl.fh);
+
+ /* After loading fix up savegame for any internal changes that
+ * might've occured since then. If it fails, load back the old game */
+ if (!AfterLoadGame()) return SL_REINIT;
+ }
+
+ return SL_OK;
+ }
+ catch (...) {
AbortSaveLoad();
/* deinitialize compressor. */
@@ -1631,125 +1736,6 @@
/* 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 */
- if (_sl.fh == NULL && mode == SL_LOAD) _sl.fh = FioFOpenFile(filename, "rb", SAVE_DIR);
- if (_sl.fh == NULL && mode == SL_LOAD) _sl.fh = FioFOpenFile(filename, "rb", BASE_DIR);
-
- if (_sl.fh == NULL) {
- SlError(mode == SL_SAVE ? STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE : STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE);
- }
-
- _sl.bufe = _sl.bufp = NULL;
- _sl.offs_base = 0;
- _sl.save = (mode != 0);
- _sl.includes = _desc_includes;
- _sl.chs = _chunk_handlers;
-
- /* 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 */
- fmt = GetSavegameFormat("memory"); // write to memory
-
- _sl.write_bytes = fmt->writer;
- _sl.excpt_uninit = fmt->uninit_write;
- if (!fmt->init_write()) {
- DEBUG(sl, 0, "Initializing writer '%s' failed.", fmt->name);
- return AbortSaveLoad();
- }
-
- _sl_version = SAVEGAME_VERSION;
-
- BeforeSaveGame();
- SlSaveChunks();
- SlWriteFill(); // flush the save buffer
-
- SaveFileStart();
- if (_network_server ||
- (save_thread = OTTDCreateThread(&SaveFileToDiskThread, NULL)) == NULL) {
- if (!_network_server) DEBUG(sl, 1, "Cannot create savegame thread, reverting to single-threaded mode...");
-
- SaveOrLoadResult result = SaveFileToDisk(false);
- SaveFileDone();
-
- return result;
- }
- } else { /* LOAD game */
- assert(mode == SL_LOAD);
-#ifdef DEBUG_DUMP_COMMANDS
- debug_dump_commands("ddc:load:%s\n", filename);
-#endif /* DUMP_COMMANDS */
-
- 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++) {
- /* No loader found, treat as version 0 and use LZO format */
- if (fmt == endof(_saveload_formats)) {
- DEBUG(sl, 0, "Unknown savegame type, trying to load it as the buggy format");
-#if defined(WINCE)
- /* Of course some system had not to support rewind ;) */
- fseek(_sl.fh, 0L, SEEK_SET);
- clearerr(_sl.fh);
-#else
- rewind(_sl.fh);
-#endif
- _sl_version = 0;
- _sl_minor_version = 0;
- fmt = _saveload_formats + 1; // LZO
- break;
- }
-
- if (fmt->tag == hdr[0]) {
- /* check version number */
- _sl_version = TO_BE32(hdr[1]) >> 16;
- /* Minor is not used anymore from version 18.0, but it is still needed
- * in versions before that (4 cases) which can't be removed easy.
- * Therefor it is loaded, but never saved (or, it saves a 0 in any scenario).
- * So never EVER use this minor version again. -- TrueLight -- 22-11-2005 */
- _sl_minor_version = (TO_BE32(hdr[1]) >> 8) & 0xFF;
-
- DEBUG(sl, 1, "Loading savegame version %d", _sl_version);
-
- /* Is the version higher than the current? */
- if (_sl_version > SAVEGAME_VERSION) SlError(STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME);
- break;
- }
- }
-
- _sl.read_bytes = fmt->reader;
- _sl.excpt_uninit = fmt->uninit_read;
-
- /* loader for this savegame type is not implemented? */
- if (fmt->init_read == NULL) {
- 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()) {
- 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
- * any mapsize information. Pre-initialize to 256x256 to not to
- * confuse old games */
- InitializeGame(IG_DATE_RESET, 256, 256);
-
- SlLoadChunks();
- fmt->uninit_read();
- fclose(_sl.fh);
-
- /* After loading fix up savegame for any internal changes that
- * might've occured since then. If it fails, load back the old game */
- if (!AfterLoadGame()) return SL_REINIT;
- }
-
- return SL_OK;
}
/** Do a save when exiting the game (patch option) _patches.autosave_on_exit */
--- a/src/saveload.h Sun Aug 19 14:04:13 2007 +0000
+++ b/src/saveload.h Sun Sep 02 11:17:33 2007 +0000
@@ -161,15 +161,15 @@
typedef uint32 VarType;
enum SaveLoadTypes {
- SL_VAR = 0,
- SL_REF = 1,
- SL_ARR = 2,
- SL_STR = 3,
- SL_LST = 4,
+ SL_VAR = 0,
+ SL_REF = 1,
+ SL_ARR = 2,
+ SL_STR = 3,
+ SL_LST = 4,
// non-normal save-load types
- SL_WRITEBYTE = 8,
- SL_INCLUDE = 9,
- SL_END = 15
+ SL_WRITEBYTE = 8,
+ SL_VEH_INCLUDE = 9,
+ SL_END = 15
};
typedef byte SaveLoadType;
@@ -210,8 +210,6 @@
/* Translate values ingame to different values in the savegame and vv */
#define SLE_WRITEBYTE(base, variable, value) SLE_GENERAL(SL_WRITEBYTE, base, variable, 0, 0, value, value)
-/* Load common code and put it into each struct (currently only for vehicles */
-#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) {false, cmd, type, 0, param1, param2, (void*)(offset)}
@@ -222,7 +220,7 @@
#define SLE_REFX(offset, type) SLE_CONDREFX(offset, type, 0, SL_MAX_VERSION)
#define SLE_WRITEBYTEX(offset, something) SLE_GENERALX(SL_WRITEBYTE, offset, 0, something, 0)
-#define SLE_INCLUDEX(offset, type) SLE_GENERALX(SL_INCLUDE, offset, type, 0, SL_MAX_VERSION)
+#define SLE_VEH_INCLUDEX() SLE_GENERALX(SL_VEH_INCLUDE, 0, 0, 0, SL_MAX_VERSION)
/* End marker */
#define SLE_END() {false, SL_END, 0, 0, 0, 0, NULL}
--- a/src/settings.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/settings.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -1278,9 +1278,9 @@
SDTG_BOOL("autoclean_companies", S, 0, _network_autoclean_companies, false, STR_NULL, NULL),
SDTG_VAR("autoclean_unprotected",SLE_UINT8, S, 0, _network_autoclean_unprotected,12, 0, 60, 0, STR_NULL, NULL),
SDTG_VAR("autoclean_protected", SLE_UINT8, S, 0, _network_autoclean_protected, 36, 0, 180, 0, STR_NULL, NULL),
- SDTG_VAR("max_companies", SLE_UINT8, S, 0, _network_game_info.companies_max, 8, 0, 8, 0, STR_NULL, NULL),
- SDTG_VAR("max_clients", SLE_UINT8, S, 0, _network_game_info.clients_max, 10, 0, 10, 0, STR_NULL, NULL),
- SDTG_VAR("max_spectators", SLE_UINT8, S, 0, _network_game_info.spectators_max, 10, 0, 10, 0, STR_NULL, NULL),
+ SDTG_VAR("max_companies", SLE_UINT8, S, 0, _network_game_info.companies_max, 8, 1, MAX_PLAYERS, 0, STR_NULL, NULL),
+ SDTG_VAR("max_clients", SLE_UINT8, S, 0, _network_game_info.clients_max, 10, 2, MAX_CLIENTS, 0, STR_NULL, NULL),
+ SDTG_VAR("max_spectators", SLE_UINT8, S, 0, _network_game_info.spectators_max, 10, 0, MAX_CLIENTS, 0, STR_NULL, NULL),
SDTG_VAR("restart_game_year", SLE_INT32, S,D0, _network_restart_game_year, 0, MIN_YEAR, MAX_YEAR, 1, STR_NULL, NULL),
SDTG_VAR("min_players", SLE_UINT8, S, 0, _network_min_players, 0, 0, 10, 0, STR_NULL, NULL),
SDTG_OMANY("server_lang", SLE_UINT8, S, 0, _network_game_info.server_lang, 0, 28, "ANY|ENGLISH|GERMAN|FRENCH|BRAZILIAN|BULGARIAN|CHINESE|CZECH|DANISH|DUTCH|ESPERANTO|FINNISH|HUNGARIAN|ICELANDIC|ITALIAN|JAPANESE|KOREAN|LITHUANIAN|NORWEGIAN|POLISH|PORTUGUESE|ROMANIAN|RUSSIAN|SLOVAK|SLOVENIAN|SPANISH|SWEDISH|TURKISH|UKRAINIAN", STR_NULL, NULL),
@@ -1342,6 +1342,10 @@
SDT_BOOL(Patches, prefer_teamchat, S, 0, false, STR_CONFIG_PATCHES_PREFER_TEAMCHAT, NULL),
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),
+#ifdef __APPLE__
+ /* We might need to emulate a right mouse button on mac */
+ SDT_VAR(Patches,right_mouse_btn_emulation,SLE_UINT8,S,MS,0, 0, 2, 0, STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU, NULL),
+#endif
SDT_BOOL(Patches, pause_on_newgame, S, 0, false, STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME, NULL),
SDT_BOOL(Patches, advanced_vehicle_list, S, 0, true, STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS, NULL),
SDT_BOOL(Patches, timetable_in_ticks, S, 0, false, STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS, NULL),
--- a/src/settings_gui.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/settings_gui.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -650,6 +650,10 @@
* Since it's also able to completely disable the scrollwheel will we display it on all platforms anyway */
"scrollwheel_scrolling",
"scrollwheel_multiplier",
+#ifdef __APPLE__
+ /* We might need to emulate a right mouse button on mac */
+ "right_mouse_btn_emulation",
+#endif
"pause_on_newgame",
"advanced_vehicle_list",
"loading_indicators",
--- a/src/ship.h Sun Aug 19 14:04:13 2007 +0000
+++ b/src/ship.h Sun Sep 02 11:17:33 2007 +0000
@@ -6,24 +6,13 @@
#define SHIP_H
#include "vehicle.h"
+#include "engine.h"
+#include "variables.h"
void CcBuildShip(bool success, TileIndex tile, uint32 p1, uint32 p2);
-void CcCloneShip(bool success, TileIndex tile, uint32 p1, uint32 p2);
void RecalcShipStuff(Vehicle *v);
void GetShipSpriteSize(EngineID engine, uint &width, uint &height);
-static inline bool IsShipInDepot(const Vehicle *v)
-{
- assert(v->type == VEH_SHIP);
- return v->u.ship.state == 0x80;
-}
-
-static inline bool IsShipInDepotStopped(const Vehicle *v)
-{
- return IsShipInDepot(v) && v->vehstatus & VS_STOPPED;
-}
-
-
/**
* This class 'wraps' Vehicle; you do not actually instantiate this class.
* You create a Vehicle using AllocateVehicle, so it is added to the pool
@@ -37,7 +26,7 @@
Ship() { this->type = VEH_SHIP; }
/** We want to 'destruct' the right class. */
- virtual ~Ship() {}
+ virtual ~Ship() { this->PreDestructor(); }
const char *GetTypeString() const { return "ship"; }
void MarkDirty();
@@ -47,6 +36,10 @@
void PlayLeaveStationSound() const;
bool IsPrimaryVehicle() const { return true; }
int GetImage(Direction direction) const;
+ int GetDisplaySpeed() const { return this->cur_speed * 10 / 32; }
+ int GetDisplayMaxSpeed() const { return this->max_speed * 10 / 32; }
+ Money GetRunningCost() const { return ShipVehInfo(this->engine_type)->running_cost * _price.ship_running; }
+ bool IsInDepot() const { return this->u.ship.state == 0x80; }
void Tick();
};
--- a/src/ship_cmd.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/ship_cmd.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -140,24 +140,13 @@
static void CheckIfShipNeedsService(Vehicle *v)
{
- const Depot* depot;
-
- if (_patches.servint_ships == 0) return;
- if (!VehicleNeedsService(v)) return;
- if (v->vehstatus & VS_STOPPED) return;
-
- if (v->current_order.type == OT_GOTO_DEPOT &&
- v->current_order.flags & OF_HALT_IN_DEPOT)
- return;
-
- if (_patches.gotodepot && VehicleHasDepotOrders(v)) return;
-
- if (IsShipInDepot(v)) {
+ if (_patches.servint_ships == 0 || !VehicleNeedsService(v)) return;
+ if (v->IsInDepot()) {
VehicleServiceInDepot(v);
return;
}
- depot = FindClosestShipDepot(v);
+ const Depot *depot = FindClosestShipDepot(v);
if (depot == NULL || DistanceManhattan(v->tile, depot->xy) > 12) {
if (v->current_order.type == OT_GOTO_DEPOT) {
@@ -168,7 +157,6 @@
return;
}
- if (v->current_order.type == OT_LOADING) v->LeaveStation();
v->current_order.type = OT_GOTO_DEPOT;
v->current_order.flags = OF_NON_STOP;
v->current_order.dest = depot->index;
@@ -355,7 +343,7 @@
Axis axis;
uint m;
- if (!IsShipInDepot(v)) return;
+ if (!v->IsInDepot()) return;
tile = v->tile;
axis = GetShipDepotAxis(tile);
@@ -678,7 +666,7 @@
GetNewVehiclePosResult gp = GetNewVehiclePos(v);
if (gp.old_tile == gp.new_tile) {
/* Staying in tile */
- if (IsShipInDepot(v)) {
+ if (v->IsInDepot()) {
gp.x = v->x_pos;
gp.y = v->y_pos;
} else {
@@ -897,7 +885,7 @@
RebuildVehicleLists();
InvalidateWindow(WC_COMPANY, v->owner);
if (IsLocalPlayer())
- InvalidateAutoreplaceWindow(VEH_SHIP, v->group_id); // updates the replace Ship window
+ InvalidateAutoreplaceWindow(v->engine_type, v->group_id); // updates the replace Ship window
GetPlayer(_current_player)->num_engines[p1]++;
@@ -925,7 +913,7 @@
SET_EXPENSES_TYPE(EXPENSES_NEW_VEHICLES);
- if (!IsShipInDepotStopped(v)) {
+ if (!v->IsStoppedInDepot()) {
return_cmd_error(STR_980B_SHIP_MUST_BE_STOPPED_IN);
}
@@ -967,7 +955,7 @@
}
if (flags & DC_EXEC) {
- if (IsShipInDepotStopped(v)) {
+ if (v->IsStoppedInDepot()) {
DeleteVehicleNews(p1, STR_981C_SHIP_IS_WAITING_IN_DEPOT);
}
@@ -1007,7 +995,7 @@
if (v->vehstatus & VS_CRASHED) return CMD_ERROR;
- if (IsShipInDepot(v)) return CMD_ERROR;
+ if (v->IsInDepot()) return CMD_ERROR;
/* If the current orders are already goto-depot */
if (v->current_order.type == OT_GOTO_DEPOT) {
@@ -1079,7 +1067,7 @@
if (v->type != VEH_SHIP || !CheckOwnership(v->owner)) return CMD_ERROR;
- if (!IsShipInDepotStopped(v)) {
+ if (!v->IsStoppedInDepot()) {
return_cmd_error(STR_980B_SHIP_MUST_BE_STOPPED_IN);
}
--- a/src/ship_gui.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/ship_gui.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -50,13 +50,13 @@
SetDParam(0, (v->age + 365 < v->max_age) ? STR_AGE : STR_AGE_RED);
SetDParam(2, v->max_age / 366);
- SetDParam(3, ShipVehInfo(v->engine_type)->running_cost * _price.ship_running >> 8);
+ SetDParam(3, v->GetDisplayRunningCost());
DrawString(2, 15, STR_9812_AGE_RUNNING_COST_YR, 0);
}
/* Draw max speed */
{
- SetDParam(0, v->max_speed * 10 / 32);
+ SetDParam(0, v->GetDisplayMaxSpeed());
DrawString(2, 25, STR_9813_MAX_SPEED, 0);
}
@@ -163,7 +163,7 @@
ShipDetailsWndProc
};
-static void ShowShipDetailsWindow(const Vehicle *v)
+void ShowShipDetailsWindow(const Vehicle *v)
{
Window *w;
VehicleID veh = v->index;
@@ -184,169 +184,5 @@
_backup_orders_tile = 0;
RestoreVehicleOrders(v, _backup_orders_data);
}
- ShowShipViewWindow(v);
-}
-
-void CcCloneShip(bool success, TileIndex tile, uint32 p1, uint32 p2)
-{
- if (success) ShowShipViewWindow(GetVehicle(_new_vehicle_id));
+ ShowVehicleViewWindow(v);
}
-
-static void ShipViewWndProc(Window *w, WindowEvent *e)
-{
- switch (e->event) {
- case WE_PAINT: {
- Vehicle *v = GetVehicle(w->window_number);
- StringID str;
- bool refitable_and_stopped_in_depot = ShipVehInfo(v->engine_type)->refittable && IsShipInDepotStopped(v);
- bool is_localplayer = v->owner == _local_player;
-
- SetWindowWidgetDisabledState(w, 7, !is_localplayer);
- SetWindowWidgetDisabledState(w, 8,
- !is_localplayer || // Disable if owner is not local player
- !refitable_and_stopped_in_depot); // Disable if the ship is not refitable or stopped in a depot
- SetWindowWidgetDisabledState(w, 11, !is_localplayer);
-
- /* draw widgets & caption */
- SetDParam(0, v->index);
- DrawWindowWidgets(w);
-
- if (v->breakdown_ctr == 1) {
- str = STR_885C_BROKEN_DOWN;
- } else if (v->vehstatus & VS_STOPPED) {
- str = STR_8861_STOPPED;
- } else {
- switch (v->current_order.type) {
- case OT_GOTO_STATION: {
- SetDParam(0, v->current_order.dest);
- SetDParam(1, v->cur_speed * 10 / 32);
- str = STR_HEADING_FOR_STATION + _patches.vehicle_speed;
- } break;
-
- case OT_GOTO_DEPOT: {
- Depot *depot = GetDepot(v->current_order.dest);
- SetDParam(0, depot->town_index);
- SetDParam(1, v->cur_speed * 10 / 32);
- if (HASBIT(v->current_order.flags, OFB_HALT_IN_DEPOT) && !HASBIT(v->current_order.flags, OFB_PART_OF_ORDERS)) {
- str = STR_HEADING_FOR_SHIP_DEPOT + _patches.vehicle_speed;
- } else {
- str = STR_HEADING_FOR_SHIP_DEPOT_SERVICE + _patches.vehicle_speed;
- }
- } break;
-
- case OT_LOADING:
- case OT_LEAVESTATION:
- str = STR_882F_LOADING_UNLOADING;
- break;
-
- default:
- if (v->num_orders == 0) {
- str = STR_NO_ORDERS + _patches.vehicle_speed;
- SetDParam(0, v->cur_speed * 10 / 32);
- } else {
- str = STR_EMPTY;
- }
- break;
- }
- }
-
- /* draw the flag plus orders */
- DrawSprite(v->vehstatus & VS_STOPPED ? SPR_FLAG_VEH_STOPPED : SPR_FLAG_VEH_RUNNING, PAL_NONE, 2, w->widget[5].top + 1);
- DrawStringCenteredTruncated(w->widget[5].left + 8, w->widget[5].right, w->widget[5].top + 1, str, 0);
- DrawWindowViewport(w);
- } break;
-
- case WE_CLICK: {
- const Vehicle *v = GetVehicle(w->window_number);
-
- switch (e->we.click.widget) {
- case 5: /* start stop */
- DoCommandP(v->tile, v->index, 0, NULL, CMD_START_STOP_SHIP | CMD_MSG(STR_9818_CAN_T_STOP_START_SHIP));
- break;
- case 6: /* center main view */
- ScrollMainWindowTo(v->x_pos, v->y_pos);
- break;
- case 7: /* goto hangar */
- DoCommandP(v->tile, v->index, _ctrl_pressed ? DEPOT_SERVICE : 0, NULL, CMD_SEND_SHIP_TO_DEPOT | CMD_MSG(STR_9819_CAN_T_SEND_SHIP_TO_DEPOT));
- break;
- case 8: /* refit */
- ShowVehicleRefitWindow(v, INVALID_VEH_ORDER_ID);
- break;
- case 9: /* show orders */
- ShowOrdersWindow(v);
- break;
- case 10: /* show details */
- ShowShipDetailsWindow(v);
- break;
- case 11: {
- /* clone vehicle */
- DoCommandP(v->tile, v->index, _ctrl_pressed ? 1 : 0, CcCloneShip, CMD_CLONE_VEHICLE | CMD_MSG(STR_980D_CAN_T_BUILD_SHIP));
- } break;
- }
- } break;
-
- case WE_RESIZE:
- w->viewport->width += e->we.sizing.diff.x;
- w->viewport->height += e->we.sizing.diff.y;
- w->viewport->virtual_width += e->we.sizing.diff.x;
- w->viewport->virtual_height += e->we.sizing.diff.y;
- break;
-
- case WE_DESTROY:
- 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: {
- const Vehicle *v = GetVehicle(w->window_number);
- bool ship_stopped = IsShipInDepotStopped(v);
-
- /* Widget 7 (send to depot) must be hidden if the ship is already stopped in depot.
- * Widget 11 (clone) should then be shown, since cloning is allowed only while in depot and stopped.
- * This sytem allows to have two buttons, on top of each otherother*/
- if (ship_stopped != IsWindowWidgetHidden(w, 7) || ship_stopped == IsWindowWidgetHidden(w, 11)) {
- SetWindowWidgetHiddenState(w, 7, ship_stopped); // send to depot
- SetWindowWidgetHiddenState(w, 11, !ship_stopped); // clone
- SetWindowDirty(w);
- }
- }
- }
-}
-
-static const Widget _ship_view_widgets[] = {
-{ WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
-{ WWT_CAPTION, RESIZE_RIGHT, 14, 11, 237, 0, 13, STR_980F, STR_018C_WINDOW_TITLE_DRAG_THIS},
-{ WWT_STICKYBOX, RESIZE_LR, 14, 238, 249, 0, 13, 0x0, STR_STICKY_BUTTON},
-{ WWT_PANEL, RESIZE_RB, 14, 0, 231, 14, 103, 0x0, STR_NULL},
-{ WWT_INSET, RESIZE_RB, 14, 2, 229, 16, 101, 0x0, STR_NULL},
-{ WWT_PUSHBTN, RESIZE_RTB, 14, 0, 237, 104, 115, 0x0, STR_9827_CURRENT_SHIP_ACTION_CLICK},
-{ WWT_PUSHIMGBTN, RESIZE_LR, 14, 232, 249, 14, 31, SPR_CENTRE_VIEW_VEHICLE, STR_9829_CENTER_MAIN_VIEW_ON_SHIP},
-{ WWT_PUSHIMGBTN, RESIZE_LR, 14, 232, 249, 32, 49, SPR_SEND_SHIP_TODEPOT, STR_982A_SEND_SHIP_TO_DEPOT},
-{ WWT_PUSHIMGBTN, RESIZE_LR, 14, 232, 249, 50, 67, SPR_REFIT_VEHICLE, STR_983A_REFIT_CARGO_SHIP_TO_CARRY},
-{ WWT_PUSHIMGBTN, RESIZE_LR, 14, 232, 249, 68, 85, SPR_SHOW_ORDERS, STR_9828_SHOW_SHIP_S_ORDERS},
-{ WWT_PUSHIMGBTN, RESIZE_LR, 14, 232, 249, 86, 103, SPR_SHOW_VEHICLE_DETAILS, STR_982B_SHOW_SHIP_DETAILS},
-{ WWT_PUSHIMGBTN, RESIZE_LR, 14, 232, 249, 32, 49, SPR_CLONE_SHIP, STR_CLONE_SHIP_INFO},
-{ WWT_PANEL, RESIZE_LRB, 14, 232, 249, 104, 103, 0x0, STR_NULL },
-{ WWT_RESIZEBOX, RESIZE_LRTB, 14, 238, 249, 104, 115, 0x0, STR_NULL },
-{ WIDGETS_END }
-};
-
-static const WindowDesc _ship_view_desc = {
- WDP_AUTO, WDP_AUTO, 250, 116, 250, 116,
- WC_VEHICLE_VIEW, WC_NONE,
- WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE,
- _ship_view_widgets,
- ShipViewWndProc
-};
-
-void ShowShipViewWindow(const Vehicle *v)
-{
- Window *w = AllocateWindowDescFront(&_ship_view_desc, v->index);
-
- if (w != NULL) {
- w->caption_color = v->owner;
- AssignWindowViewport(w, 3, 17, 0xE2, 0x54, w->window_number | (1 << 31), ZOOM_LVL_SHIP);
- }
-}
--- a/src/signs.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/signs.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -13,6 +13,7 @@
#include "saveload.h"
#include "command.h"
#include "variables.h"
+#include "string.h"
#include "misc/autoptr.hpp"
SignID _new_sign_id;
@@ -28,15 +29,10 @@
Sign::~Sign()
{
- this->QuickFree();
+ DeleteName(this->str);
this->str = STR_NULL;
}
-void Sign::QuickFree()
-{
- DeleteName(this->str);
-}
-
/**
*
* Update the coordinate of one sign
@@ -133,7 +129,7 @@
/* If _cmd_text 0 means the new text for the sign is non-empty.
* So rename the sign. If it is empty, it has no name, so delete it */
- if (_cmd_text[0] != '\0') {
+ if (!StrEmpty(_cmd_text)) {
/* Create the name */
StringID str = AllocateName(_cmd_text, 0);
if (str == 0) return CMD_ERROR;
--- a/src/signs.h Sun Aug 19 14:04:13 2007 +0000
+++ b/src/signs.h Sun Sep 02 11:17:33 2007 +0000
@@ -26,9 +26,7 @@
/** Destroy the sign */
~Sign();
- bool IsValid() const { return this->str != STR_NULL; }
-
- void QuickFree();
+ inline bool IsValid() const { return this->str != STR_NULL; }
};
enum {
--- a/src/smallmap_gui.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/smallmap_gui.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -169,28 +169,6 @@
_legend_land_owners,
};
-static inline void WRITE_PIXELS(void *d, uint32 val)
-{
- Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
- uint8 *val8 = (uint8 *)&val;
-
- blitter->SetPixel(d, 0, 0, val8[0]);
- blitter->SetPixel(d, 1, 0, val8[1]);
- blitter->SetPixel(d, 2, 0, val8[2]);
- blitter->SetPixel(d, 3, 0, val8[3]);
-}
-
-static inline void WRITE_PIXELS_OR(void *d, uint32 val)
-{
- Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
- uint8 *val8 = (uint8 *)&val;
-
- blitter->SetPixelIfEmpty(d, 0, 0, val8[0]);
- blitter->SetPixelIfEmpty(d, 1, 0, val8[1]);
- blitter->SetPixelIfEmpty(d, 2, 0, val8[2]);
- blitter->SetPixelIfEmpty(d, 3, 0, val8[3]);
-}
-
#define MKCOLOR(x) TO_LE32X(x)
/**
@@ -290,14 +268,31 @@
static void DrawSmallMapStuff(void *dst, uint xc, uint yc, int pitch, int reps, uint32 mask, GetSmallMapPixels *proc)
{
Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
- void *dst_ptr_end = blitter->MoveTo(_screen.dst_ptr, _screen.width, _screen.height - 1);
+ void *dst_ptr_abs_end = blitter->MoveTo(_screen.dst_ptr, 0, _screen.height);
+ void *dst_ptr_end = blitter->MoveTo(dst_ptr_abs_end, -4, 0);
do {
/* check if the tile (xc,yc) is within the map range */
if (xc < MapMaxX() && yc < MapMaxY()) {
/* check if the dst pointer points to a pixel inside the screen buffer */
- if (dst > _screen.dst_ptr && dst < dst_ptr_end)
- WRITE_PIXELS_OR(dst, proc(TileXY(xc, yc)) & mask);
+ if (dst < _screen.dst_ptr) continue;
+ if (dst >= dst_ptr_abs_end) continue;
+
+ uint32 val = proc(TileXY(xc, yc)) & mask;
+ uint8 *val8 = (uint8 *)&val;
+
+ if (dst <= dst_ptr_end) {
+ blitter->SetPixelIfEmpty(dst, 0, 0, val8[0]);
+ blitter->SetPixelIfEmpty(dst, 1, 0, val8[1]);
+ blitter->SetPixelIfEmpty(dst, 2, 0, val8[2]);
+ blitter->SetPixelIfEmpty(dst, 3, 0, val8[3]);
+ } else {
+ /* It happens that there are only 1, 2 or 3 pixels left to fill, so in that special case, write till the end of the video-buffer */
+ int i = 0;
+ do {
+ blitter->SetPixelIfEmpty(dst, 0, 0, val8[i]);
+ } while (i++, dst = blitter->MoveTo(dst, 1, 0), dst < dst_ptr_abs_end);
+ }
}
/* switch to next tile in the column */
} while (xc++, yc++, dst = blitter->MoveTo(dst, pitch, 0), --reps != 0);
--- a/src/station.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/station.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -34,6 +34,8 @@
#include "yapf/yapf.h"
#include "date.h"
#include "helpers.hpp"
+#include "cargotype.h"
+#include "roadveh.h"
Station::Station(TileIndex tile)
{
@@ -64,6 +66,15 @@
{
DEBUG(station, cDebugCtorLevel, "I-%3d", index);
+ DeleteName(this->string_id);
+ free(this->speclist);
+
+ if (CleaningPool()) return;
+
+ while (!loading_vehicles.empty()) {
+ loading_vehicles.front()->LeaveStation();
+ }
+
MarkDirty();
RebuildStationLists();
InvalidateWindowClasses(WC_STATION_LIST);
@@ -81,14 +92,29 @@
for (CargoID c = 0; c < NUM_CARGO; c++) {
goods[c].cargo.Truncate(0);
}
-
- this->QuickFree();
}
-void Station::QuickFree()
+
+/**
+ * Get the primary road stop (the first road stop) that the given vehicle can load/unload.
+ * @param v the vehicle to get the first road stop for
+ * @return the first roadstop that this vehicle can load at
+ */
+RoadStop *Station::GetPrimaryRoadStop(const Vehicle *v) const
{
- DeleteName(this->string_id);
- free(this->speclist);
+ RoadStop *rs = this->GetPrimaryRoadStop(IsCargoInClass(v->cargo_type, CC_PASSENGERS) ? RoadStop::BUS : RoadStop::TRUCK);
+
+ for (; rs != NULL; rs = rs->next) {
+ /* The vehicle cannot go to this roadstop (different roadtype) */
+ if ((GetRoadTypes(rs->xy) & v->u.road.compatible_roadtypes) == ROADTYPES_NONE) continue;
+ /* The vehicle is articulated and can therefor not go the a standard road stop */
+ if (IsStandardRoadStopTile(rs->xy) && RoadVehHasArticPart(v)) continue;
+
+ /* The vehicle can actually go to this road stop. So, return it! */
+ break;
+ }
+
+ return rs;
}
/** Called when new facility is built on the station. If it is the first facility
@@ -211,14 +237,6 @@
return (had_vehicle_of_type & HVOT_BUOY) != 0;
}
-/** Determines whether a station exists
- * @todo replace 0 by INVALID_TILE
- */
-bool Station::IsValid() const
-{
- return xy != 0;
-}
-
/************************************************************************/
/* StationRect implementation */
@@ -394,6 +412,8 @@
*/
RoadStop::~RoadStop()
{
+ if (CleaningPool()) return;
+
/* Clear the slot assignment of all vehicles heading for this road stop */
if (num_vehicles != 0) {
Vehicle *v;
@@ -409,12 +429,6 @@
xy = 0;
}
-/** Determines whether a RoadStop is a valid (i.e. existing) one */
-bool RoadStop::IsValid() const
-{
- return xy != 0;
-}
-
/** Checks whether there is a free bay in this road stop */
bool RoadStop::HasFreeBay() const
{
@@ -477,3 +491,23 @@
{
SB(status, 7, 1, busy);
}
+
+/**
+ * Get the next road stop accessible by this vehicle.
+ * @param v the vehicle to get the next road stop for.
+ * @return the next road stop accessible.
+ */
+RoadStop *RoadStop::GetNextRoadStop(const Vehicle *v) const
+{
+ for (RoadStop *rs = this->next; rs != NULL; rs = rs->next) {
+ /* The vehicle cannot go to this roadstop (different roadtype) */
+ if ((GetRoadTypes(rs->xy) & v->u.road.compatible_roadtypes) == ROADTYPES_NONE) continue;
+ /* The vehicle is articulated and can therefor not go the a standard road stop */
+ if (IsStandardRoadStopTile(rs->xy) && RoadVehHasArticPart(v)) continue;
+
+ /* The vehicle can actually go to this road stop. So, return it! */
+ return rs;
+ }
+
+ return NULL;
+}
--- a/src/station.h Sun Aug 19 14:04:13 2007 +0000
+++ b/src/station.h Sun Sep 02 11:17:33 2007 +0000
@@ -24,15 +24,20 @@
static const byte INITIAL_STATION_RATING = 175;
struct GoodsEntry {
+ enum AcceptancePickup {
+ ACCEPTANCE,
+ PICKUP
+ };
+
GoodsEntry() :
- acceptance(false),
+ acceptance_pickup(0),
days_since_pickup(255),
rating(INITIAL_STATION_RATING),
last_speed(0),
last_age(255)
{}
- bool acceptance;
+ byte acceptance_pickup;
byte days_since_pickup;
byte rating;
byte last_speed;
@@ -48,7 +53,7 @@
TRUCK ///< A standard stop for trucks
};
- static const int cDebugCtorLevel = 3; ///< Debug level on which Contructor / Destructor messages are printed
+ static const int cDebugCtorLevel = 5; ///< Debug level on which Contructor / Destructor messages are printed
static const uint LIMIT = 16; ///< The maximum amount of roadstops that are allowed at a single station
static const uint MAX_BAY_COUNT = 2; ///< The maximum number of loading bays
@@ -60,7 +65,11 @@
RoadStop(TileIndex tile = 0);
virtual ~RoadStop();
- bool IsValid() const;
+ /**
+ * Determines whether a road stop exists
+ * @return true if and only is the road stop exists
+ */
+ inline bool IsValid() const { return this->xy != 0; }
/* For accessing status */
bool HasFreeBay() const;
@@ -70,6 +79,8 @@
void FreeBay(uint nr);
bool IsEntranceBusy() const;
void SetEntranceBusy(bool busy);
+
+ RoadStop *GetNextRoadStop(const Vehicle *v) const;
};
struct StationSpecList {
@@ -102,17 +113,19 @@
};
struct Station : PoolItem<Station, StationID, &_Station_pool> {
- public:
- RoadStop *GetPrimaryRoadStop(RoadStop::Type type) const
- {
- return type == RoadStop::BUS ? bus_stops : truck_stops;
- }
+public:
+ RoadStop *GetPrimaryRoadStop(RoadStop::Type type) const
+ {
+ return type == RoadStop::BUS ? bus_stops : truck_stops;
+ }
- const AirportFTAClass *Airport() const
- {
- if (airport_tile == 0) return GetAirport(AT_DUMMY);
- return GetAirport(airport_type);
- }
+ RoadStop *GetPrimaryRoadStop(const Vehicle *v) const;
+
+ const AirportFTAClass *Airport() const
+ {
+ if (airport_tile == 0) return GetAirport(AT_DUMMY);
+ return GetAirport(airport_type);
+ }
TileIndex xy;
RoadStop *bus_stops;
@@ -154,13 +167,11 @@
StationRect rect; ///< Station spread out rectangle (not saved) maintained by StationRect_xxx() functions
- static const int cDebugCtorLevel = 3;
+ static const int cDebugCtorLevel = 5;
Station(TileIndex tile = 0);
virtual ~Station();
- void QuickFree();
-
void AddFacility(byte new_facility_bit, TileIndex facil_xy);
void MarkDirty() const;
void MarkTilesDirty(bool cargo_change) const;
@@ -168,7 +179,12 @@
uint GetPlatformLength(TileIndex tile, DiagDirection dir) const;
uint GetPlatformLength(TileIndex tile) const;
bool IsBuoy() const;
- bool IsValid() const;
+
+ /**
+ * Determines whether a station exists
+ * @return true if and only is the station exists
+ */
+ inline bool IsValid() const { return this->xy != 0; }
};
enum StationType {
@@ -206,7 +222,9 @@
CA_BUS = 3,
CA_TRUCK = 3,
CA_TRAIN = 4,
- CA_DOCK = 5
+ CA_DOCK = 5,
+
+ MAX_CATCHMENT = 10, ///< Airports have a catchment up to this number.
};
void ModifyStationRatingAround(TileIndex tile, PlayerID owner, int amount, uint radius);
--- a/src/station_cmd.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/station_cmd.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -389,7 +389,7 @@
uint mask = 0;
for (CargoID i = 0; i < NUM_CARGO; i++) {
- if (st->goods[i].acceptance) mask |= 1 << i;
+ if (HASBIT(st->goods[i].acceptance_pickup, GoodsEntry::ACCEPTANCE)) mask |= 1 << i;
}
return mask;
}
@@ -570,7 +570,7 @@
(is_passengers && !(st->facilities & (byte)~FACIL_TRUCK_STOP)))
amt = 0;
- st->goods[i].acceptance = (amt >= 8);
+ SB(st->goods[i].acceptance_pickup, GoodsEntry::ACCEPTANCE, 1, amt >= 8);
}
// Only show a message in case the acceptance was actually changed.
@@ -2343,8 +2343,8 @@
}
/* For normal (non drive-through) road stops */
- /* Check if station is busy or if there are no free bays. */
- if (rs->IsEntranceBusy() || !rs->HasFreeBay()) return VETSB_CANNOT_ENTER;
+ /* Check if station is busy or if there are no free bays or whether it is a articulated vehicle. */
+ if (rs->IsEntranceBusy() || !rs->HasFreeBay() || RoadVehHasArticPart(v)) return VETSB_CANNOT_ENTER;
SETBIT(v->u.road.state, RVS_IN_ROAD_STOP);
@@ -2384,10 +2384,12 @@
/* 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->days_since_pickup == 255 && ge->rating < INITIAL_STATION_RATING)
+ if (!HASBIT(ge->acceptance_pickup, GoodsEntry::PICKUP) && ge->rating < INITIAL_STATION_RATING) {
ge->rating++;
+ }
+
/* Only change the rating if we are moving this cargo */
- if (ge->last_speed != 0) {
+ if (HASBIT(ge->acceptance_pickup, GoodsEntry::PICKUP)) {
byte_inc_sat(&ge->days_since_pickup);
int rating = 0;
@@ -2519,7 +2521,7 @@
for (CargoID i = 0; i < NUM_CARGO; i++) {
GoodsEntry* ge = &st->goods[i];
- if (ge->days_since_pickup != 255) {
+ if (ge->acceptance_pickup != 0) {
ge->rating = clamp(ge->rating + amount, 0, 255);
}
}
@@ -2530,6 +2532,7 @@
static void UpdateStationWaiting(Station *st, CargoID type, uint amount)
{
st->goods[type].cargo.Append(new CargoPacket(st->index, amount));
+ SETBIT(st->goods[type].acceptance_pickup, GoodsEntry::PICKUP);
InvalidateWindow(WC_STATION_VIEW, st->index);
st->MarkTilesDirty(true);
@@ -2595,9 +2598,9 @@
if (_patches.modified_catchment) {
w_prod = w;
h_prod = h;
- w += 16;
- h += 16;
- max_rad = 8;
+ w += 2 * MAX_CATCHMENT;
+ h += 2 * MAX_CATCHMENT;
+ max_rad = MAX_CATCHMENT;
} else {
w_prod = 0;
h_prod = 0;
@@ -2616,16 +2619,16 @@
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].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->goods[type].rating != 0 && // when you've got the lowest rating you can get, it's better not to give cargo anymore
+ (!_patches.selectgoods || st->goods[type].last_speed != 0) && // we are servicing the station (or cargo is dumped on all stations)
((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
if (_patches.modified_catchment) {
// min and max coordinates of the producer relative
- const int x_min_prod = 9;
- const int x_max_prod = 8 + w_prod;
- const int y_min_prod = 9;
- const int y_max_prod = 8 + h_prod;
+ const int x_min_prod = max_rad + 1;
+ const int x_max_prod = max_rad + w_prod;
+ const int y_min_prod = max_rad + 1;
+ const int y_max_prod = max_rad + h_prod;
int rad = FindCatchmentRadius(st);
@@ -2746,7 +2749,7 @@
st->build_date = _date;
for (CargoID j = 0; j < NUM_CARGO; j++) {
- st->goods[j].acceptance = false;
+ st->goods[j].acceptance_pickup = 0;
st->goods[j].days_since_pickup = 255;
st->goods[j].rating = INITIAL_STATION_RATING;
st->goods[j].last_speed = 0;
@@ -2876,6 +2879,11 @@
}
}
+static CommandCost TerraformTile_Station(TileIndex tile, uint32 flags, uint z_new, Slope tileh_new)
+{
+ return DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
+}
+
extern const TileTypeProcs _tile_type_station_procs = {
DrawTile_Station, /* draw_tile_proc */
@@ -2891,6 +2899,7 @@
NULL, /* get_produced_cargo_proc */
VehicleEnter_Station, /* vehicle_enter_tile_proc */
GetFoundation_Station, /* get_foundation_proc */
+ TerraformTile_Station, /* terraform_tile_proc */
};
static const SaveLoad _roadstop_desc[] = {
@@ -2975,25 +2984,6 @@
static uint16 _cargo_days;
static Money _cargo_feeder_share;
-static const SaveLoad _goods_desc[] = {
- 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()
-};
-
static const SaveLoad _station_speclist_desc[] = {
SLE_CONDVAR(StationSpecList, grfid, SLE_UINT32, 27, SL_MAX_VERSION),
SLE_CONDVAR(StationSpecList, localidx, SLE_UINT8, 27, SL_MAX_VERSION),
@@ -3002,8 +2992,28 @@
};
-static void SaveLoad_STNS(Station *st)
+void SaveLoad_STNS(Station *st)
{
+ static const SaveLoad _goods_desc[] = {
+ SLEG_CONDVAR( _waiting_acceptance, SLE_UINT16, 0, 67),
+ SLE_CONDVAR(GoodsEntry, acceptance_pickup, SLE_UINT8, 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.packets, REF_CARGO_PACKET, 68, SL_MAX_VERSION),
+
+ SLE_END()
+};
+
+
SlObject(st, _station_desc);
_waiting_acceptance = 0;
@@ -3013,7 +3023,7 @@
GoodsEntry *ge = &st->goods[i];
SlObject(ge, _goods_desc);
if (CheckSavegameVersion(68)) {
- ge->acceptance = HASBIT(_waiting_acceptance, 15);
+ SB(ge->acceptance_pickup, GoodsEntry::ACCEPTANCE, 1, 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();
@@ -3025,9 +3035,8 @@
cp->source_xy = _cargo_source_xy;
cp->days_in_transit = _cargo_days;
cp->feeder_share = _cargo_feeder_share;
+ SB(ge->acceptance_pickup, GoodsEntry::PICKUP, 1, 1);
ge->cargo.Append(cp);
- } else {
- ge->days_since_pickup = 255;
}
}
}
--- a/src/station_gui.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/station_gui.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -157,8 +157,8 @@
byte maxr2 = 0;
for (CargoID j = 0; j < NUM_CARGO; j++) {
- 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);
+ if (HASBIT(st1->goods[j].acceptance_pickup, GoodsEntry::PICKUP)) maxr1 = max(maxr1, st1->goods[j].rating);
+ if (HASBIT(st2->goods[j].acceptance_pickup, GoodsEntry::PICKUP)) maxr2 = max(maxr2, st2->goods[j].rating);
}
return (_internal_sort_order & 1) ? maxr2 - maxr1 : maxr1 - maxr2;
@@ -771,7 +771,7 @@
for (CargoID i = 0; i < NUM_CARGO; i++) {
if (b >= endof(_userstring) - 5 - 1) break;
- if (st->goods[i].acceptance) {
+ if (HASBIT(st->goods[i].acceptance_pickup, GoodsEntry::ACCEPTANCE)) {
if (first) {
first = false;
} else {
@@ -797,7 +797,7 @@
if (!cs->IsValid()) continue;
const GoodsEntry *ge = &st->goods[i];
- if (ge->days_since_pickup == 255) continue;
+ if (!HASBIT(ge->acceptance_pickup, GoodsEntry::PICKUP)) continue;
SetDParam(0, cs->name);
SetDParam(2, ge->rating * 101 >> 8);
--- a/src/stdafx.h Sun Aug 19 14:04:13 2007 +0000
+++ b/src/stdafx.h Sun Sep 02 11:17:33 2007 +0000
@@ -142,7 +142,9 @@
# define _WIN32_WINNT 0x0500 // Windows 2000
# define _WIN32_WINDOWS 0x400 // Windows 95
+#if !defined(WINCE)
# define WINVER 0x0400 // Windows NT 4.0 / Windows 95
+#endif
# define _WIN32_IE_ 0x0401 // 4.01 (win98 and NT4SP5+)
# define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
@@ -169,9 +171,11 @@
# define NORETURN __declspec(noreturn)
# define FORCEINLINE __forceinline
# define inline _inline
-# define CDECL _cdecl
+# if !defined(WINCE)
+# define CDECL _cdecl
+# endif
int CDECL snprintf(char *str, size_t size, const char *format, ...);
-# if _MSC_VER < 1400
+# if _MSC_VER < 1400 || defined(WINCE)
int CDECL vsnprintf(char *str, size_t size, const char *format, va_list ap);
# endif
@@ -192,8 +196,14 @@
# endif
# endif
-# define strcasecmp stricmp
-# define strncasecmp strnicmp
+# if defined(WINCE)
+# define strcasecmp _stricmp
+# define strncasecmp _strnicmp
+# undef DEBUG
+# else
+# define strcasecmp stricmp
+# define strncasecmp strnicmp
+# endif
/* suppress: warning C4005: 'offsetof' : macro redefinition (VC8) */
#endif /* defined(_MSC_VER) */
--- a/src/string.h Sun Aug 19 14:04:13 2007 +0000
+++ b/src/string.h Sun Sep 02 11:17:33 2007 +0000
@@ -49,7 +49,7 @@
void strtolower(char *str);
-static inline bool StrEmpty(const char *s) { return s[0] == '\0'; }
+static inline bool StrEmpty(const char *s) { return s == NULL || s[0] == '\0'; }
/** Get the length of a string, within a limited buffer */
--- a/src/strings.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/strings.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -343,6 +343,8 @@
/* convert from negative */
if (number < 0) {
+ if (buff + Utf8CharLen(SCC_RED) > last) return buff;
+ buff += Utf8Encode(buff, SCC_RED);
buff = strecpy(buff, "-", last);
number = -number;
}
@@ -383,6 +385,12 @@
* The only remaining value is 1 (prefix), so everything that is not 0 */
if (spec->symbol_pos != 0) buff = strecpy(buff, spec->suffix, last);
+ if (cs.GetCost() < 0) {
+ if (buff + Utf8CharLen(SCC_PREVIOUS_COLOUR) > last) return buff;
+ buff += Utf8Encode(buff, SCC_PREVIOUS_COLOUR);
+ *buff = '\0';
+ }
+
return buff;
}
@@ -680,7 +688,18 @@
const char* s = GetStringPtr(argv_orig[(byte)*str++]); // contains the string that determines gender.
int len;
int gender = 0;
- if (s != NULL && Utf8Consume(&s) == SCC_GENDER_INDEX) gender = (byte)s[0];
+ if (s != NULL) {
+ wchar_t c = Utf8Consume(&s);
+ /* Switch case is always put before genders, so remove those bits */
+ if (c == SCC_SWITCH_CASE) {
+ /* Skip to the last (i.e. default) case */
+ for (uint num = (byte)*s++; num != 0; num--) s += 3 + (s[1] << 8) + s[2];
+
+ c = Utf8Consume(&s);
+ }
+ /* Does this string have a gender, if so, set it */
+ if (c == SCC_GENDER_INDEX) gender = (byte)s[0];
+ }
str = ParseStringChoice(str, gender, buff, &len);
buff += len;
break;
@@ -1218,7 +1237,8 @@
}
/* Win32 implementation in win32.cpp. */
-#ifndef WIN32
+/* OS X implementation in os/macosx/macos.mm. */
+#if !(defined(WIN32) || defined(__APPLE__))
/** Determine the current charset based on the environment
* First check some default values, after this one we passed ourselves
* and if none exist return the value for $LANG
@@ -1242,7 +1262,7 @@
return getenv("LANG");
}
-#endif /* ifndef WIN32 */
+#endif /* !(defined(WIN32) || defined(__APPLE__)) */
static int CDECL LanguageCompareFunc(const void *a, const void *b)
{
--- a/src/table/build_industry.h Sun Aug 19 14:04:13 2007 +0000
+++ b/src/table/build_industry.h Sun Sep 02 11:17:33 2007 +0000
@@ -1177,7 +1177,7 @@
c1, c2, c3, proc, p1, r1, p2, r2, m, a1, im1, a2, im2, a3, im3, pr, clim, bev, in, intx, s1, s2, s3) \
{tbl, lengthof(tbl), min(255, d), d, pc, {c1, c2, c3}, proc, {p1, p2}, {r1, r2}, m, \
{a1, a2, a3}, {{im1, 0}, {im2, 0}, {im3, 0}}, pr, clim, bev, col, in, intx, s1, s2, s3, {ai1, ai2, ai3, ai4}, {ag1, ag2, ag3, ag4}, \
- sndc, snd, 0, 0, true, {0, 0, NULL, NULL, INVALID_INDUSTRYTYPE}}
+ sndc, snd, 0, 0, true, {INVALID_INDUSTRYTYPE, 0, NULL, NULL, INVALID_INDUSTRYTYPE}}
/* Format:
tile table count and sounds table
cost multiplier appear chances(4ingame, 4random) map colour
@@ -1573,7 +1573,7 @@
* @param a2 next frame of animation
* @param a3 chooses between animation or construction state
*/
-#define MT(ca1, c1, ca2, c2, ca3, c3, sl, a1, a2, a3) {{c1, c2, c3}, {ca1, ca2, ca3}, sl, a1, a2, a3, 0, 0xFFFF, 2, 0, 0, true, {0, 0, NULL, NULL, INVALID_INDUSTRYTILE}}
+#define MT(ca1, c1, ca2, c2, ca3, c3, sl, a1, a2, a3) {{c1, c2, c3}, {ca1, ca2, ca3}, sl, a1, a2, a3, 0, 0xFFFF, 2, 0, 0, true, {INVALID_INDUSTRYTILE, 0, NULL, NULL, INVALID_INDUSTRYTILE}}
static const IndustryTileSpec _origin_industry_tile_specs[NEW_INDUSTRYTILEOFFSET] = {
/* Coal Mine */
MT(0, CT_INVALID, 0, CT_INVALID, 0, CT_INVALID, SLOPE_STEEP, INDUSTRYTILE_NOANIM, INDUSTRYTILE_NOANIM, false),
--- a/src/table/control_codes.h Sun Aug 19 14:04:13 2007 +0000
+++ b/src/table/control_codes.h Sun Sep 02 11:17:33 2007 +0000
@@ -88,6 +88,7 @@
SCC_GRAY,
SCC_DKBLUE,
SCC_BLACK,
+ SCC_PREVIOUS_COLOUR,
/* Special printable symbols.
* These are mapped to the original glyphs */
--- a/src/texteff.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/texteff.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -41,31 +41,33 @@
};
-struct TextMessage {
+struct ChatMessage {
char message[MAX_TEXTMESSAGE_LENGTH];
uint16 color;
Date end_date;
};
+/* used for text effects */
static TextEffect *_text_effect_list = NULL;
-static TextMessage _textmsg_list[MAX_CHAT_MESSAGES];
+static uint16 _num_text_effects = INIT_NUM_TEXT_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;
+/* used for chat window */
+static ChatMessage _chatmsg_list[MAX_CHAT_MESSAGES];
+static bool _chatmessage_dirty = false;
+static bool _chatmessage_visible = false;
/* 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 * 6]; // (height * width)
+static const Oblong _chatmsg_box = {10, 30, 500, 150};
+static uint8 _chatmessage_backup[150 * 500 * 6]; // (height * width)
-static inline uint GetTextMessageCount()
+static inline uint GetChatMessageCount()
{
uint i;
for (i = 0; i < MAX_CHAT_MESSAGES; i++) {
- if (_textmsg_list[i].message[0] == '\0') break;
+ if (_chatmsg_list[i].message[0] == '\0') break;
}
return i;
@@ -75,7 +77,7 @@
* @param color The colour this message is to be shown in
* @param duration The duration of the chat message in game-days
* @param message message itself in printf() style */
-void CDECL AddTextMessage(uint16 color, uint8 duration, const char *message, ...)
+void CDECL AddChatMessage(uint16 color, uint8 duration, const char *message, ...)
{
char buf[MAX_TEXTMESSAGE_LENGTH];
const char *bufp;
@@ -91,45 +93,45 @@
Utf8TrimString(buf, MAX_TEXTMESSAGE_LENGTH);
/* Force linebreaks for strings that are too long */
- lines = GB(FormatStringLinebreaks(buf, _textmsg_box.width - 8), 0, 16) + 1;
+ lines = GB(FormatStringLinebreaks(buf, _chatmsg_box.width - 8), 0, 16) + 1;
if (lines >= MAX_CHAT_MESSAGES) return;
- msg_count = GetTextMessageCount();
+ msg_count = GetChatMessageCount();
/* We want to add more chat messages than there is free space for, remove 'old' */
if (lines > MAX_CHAT_MESSAGES - msg_count) {
int i = lines - (MAX_CHAT_MESSAGES - msg_count);
- memmove(&_textmsg_list[0], &_textmsg_list[i], sizeof(_textmsg_list[0]) * (msg_count - i));
+ memmove(&_chatmsg_list[0], &_chatmsg_list[i], sizeof(_chatmsg_list[0]) * (msg_count - i));
msg_count = MAX_CHAT_MESSAGES - lines;
}
for (bufp = buf; lines != 0; lines--) {
- TextMessage *tmsg = &_textmsg_list[msg_count++];
- ttd_strlcpy(tmsg->message, bufp, sizeof(tmsg->message));
+ ChatMessage *cmsg = &_chatmsg_list[msg_count++];
+ ttd_strlcpy(cmsg->message, bufp, sizeof(cmsg->message));
/* The default colour for a message is player colour. Replace this with
* white for any additional lines */
- tmsg->color = (bufp == buf && color & IS_PALETTE_COLOR) ? color : (0x1D - 15) | IS_PALETTE_COLOR;
- tmsg->end_date = _date + duration;
+ cmsg->color = (bufp == buf && color & IS_PALETTE_COLOR) ? color : (0x1D - 15) | IS_PALETTE_COLOR;
+ cmsg->end_date = _date + duration;
bufp += strlen(bufp) + 1; // jump to 'next line' in the formatted string
}
- _textmessage_dirty = true;
+ _chatmessage_dirty = true;
}
-void InitTextMessage()
+void InitChatMessage()
{
uint i;
for (i = 0; i < MAX_CHAT_MESSAGES; i++) {
- _textmsg_list[i].message[0] = '\0';
+ _chatmsg_list[i].message[0] = '\0';
}
}
-/** Hide the textbox */
-void UndrawTextMessage()
+/** Hide the chatbox */
+void UndrawChatMessage()
{
- if (_textmessage_visible) {
+ if (_chatmessage_visible) {
Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
/* Sometimes we also need to hide the cursor
* This is because both textmessage and the cursor take a shot of the
@@ -143,20 +145,20 @@
*/
if (_cursor.visible) {
- if (_cursor.draw_pos.x + _cursor.draw_size.x >= _textmsg_box.x &&
- _cursor.draw_pos.x <= _textmsg_box.x + _textmsg_box.width &&
- _cursor.draw_pos.y + _cursor.draw_size.y >= _screen.height - _textmsg_box.y - _textmsg_box.height &&
- _cursor.draw_pos.y <= _screen.height - _textmsg_box.y) {
+ if (_cursor.draw_pos.x + _cursor.draw_size.x >= _chatmsg_box.x &&
+ _cursor.draw_pos.x <= _chatmsg_box.x + _chatmsg_box.width &&
+ _cursor.draw_pos.y + _cursor.draw_size.y >= _screen.height - _chatmsg_box.y - _chatmsg_box.height &&
+ _cursor.draw_pos.y <= _screen.height - _chatmsg_box.y) {
UndrawMouseCursor();
}
}
- int x = _textmsg_box.x;
- int y = _screen.height - _textmsg_box.y - _textmsg_box.height;
- int width = _textmsg_box.width;
- int height = _textmsg_box.height;
+ int x = _chatmsg_box.x;
+ int y = _screen.height - _chatmsg_box.y - _chatmsg_box.height;
+ int width = _chatmsg_box.width;
+ int height = _chatmsg_box.height;
if (y < 0) {
- height = max(height + y, min(_textmsg_box.height, _screen.height));
+ height = max(height + y, min(_chatmsg_box.height, _screen.height));
y = 0;
}
if (x + width >= _screen.width) {
@@ -164,33 +166,33 @@
}
if (width <= 0 || height <= 0) return;
- _textmessage_visible = false;
+ _chatmessage_visible = false;
/* Put our 'shot' back to the screen */
- blitter->CopyFromBuffer(blitter->MoveTo(_screen.dst_ptr, x, y), _textmessage_backup, width, height);
+ blitter->CopyFromBuffer(blitter->MoveTo(_screen.dst_ptr, x, y), _chatmessage_backup, width, height);
/* And make sure it is updated next time */
_video_driver->MakeDirty(x, y, width, height);
- _textmessage_dirty = true;
+ _chatmessage_dirty = true;
}
}
/** Check if a message is expired every day */
-void TextMessageDailyLoop()
+void ChatMessageDailyLoop()
{
uint i;
for (i = 0; i < MAX_CHAT_MESSAGES; i++) {
- TextMessage *tmsg = &_textmsg_list[i];
- if (tmsg->message[0] == '\0') continue;
+ ChatMessage *cmsg = &_chatmsg_list[i];
+ if (cmsg->message[0] == '\0') continue;
/* Message has expired, remove from the list */
- if (tmsg->end_date < _date) {
+ if (cmsg->end_date < _date) {
/* Move the remaining messages over the current message */
- if (i != MAX_CHAT_MESSAGES - 1) memmove(tmsg, tmsg + 1, sizeof(*tmsg) * (MAX_CHAT_MESSAGES - i - 1));
+ if (i != MAX_CHAT_MESSAGES - 1) memmove(cmsg, cmsg + 1, sizeof(*cmsg) * (MAX_CHAT_MESSAGES - i - 1));
/* Mark the last item as empty */
- _textmsg_list[MAX_CHAT_MESSAGES - 1].message[0] = '\0';
- _textmessage_dirty = true;
+ _chatmsg_list[MAX_CHAT_MESSAGES - 1].message[0] = '\0';
+ _chatmessage_dirty = true;
/* Go one item back, because we moved the array 1 to the left */
i--;
@@ -198,27 +200,27 @@
}
}
-/** Draw the textmessage-box */
-void DrawTextMessage()
+/** Draw the chat message-box */
+void DrawChatMessage()
{
Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
- if (!_textmessage_dirty) return;
+ if (!_chatmessage_dirty) return;
/* First undraw if needed */
- UndrawTextMessage();
+ UndrawChatMessage();
if (_iconsole_mode == ICONSOLE_FULL) return;
/* Check if we have anything to draw at all */
- uint count = GetTextMessageCount();
+ uint count = GetChatMessageCount();
if (count == 0) return;
- int x = _textmsg_box.x;
- int y = _screen.height - _textmsg_box.y - _textmsg_box.height;
- int width = _textmsg_box.width;
- int height = _textmsg_box.height;
+ int x = _chatmsg_box.x;
+ int y = _screen.height - _chatmsg_box.y - _chatmsg_box.height;
+ int width = _chatmsg_box.width;
+ int height = _chatmsg_box.height;
if (y < 0) {
- height = max(height + y, min(_textmsg_box.height, _screen.height));
+ height = max(height + y, min(_chatmsg_box.height, _screen.height));
y = 0;
}
if (x + width >= _screen.width) {
@@ -226,34 +228,35 @@
}
if (width <= 0 || height <= 0) return;
- assert(blitter->BufferSize(width, height) < (int)sizeof(_textmessage_backup));
+ assert(blitter->BufferSize(width, height) < (int)sizeof(_chatmessage_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);
+ blitter->CopyToBuffer(blitter->MoveTo(_screen.dst_ptr, x, y), _chatmessage_backup, width, height);
_cur_dpi = &_screen; // switch to _screen painting
- /* Paint a half-transparent box behind the text messages */
+ /* Paint a half-transparent box behind the chat messages */
GfxFillRect(
- _textmsg_box.x,
- _screen.height - _textmsg_box.y - count * 13 - 2,
- _textmsg_box.x + _textmsg_box.width - 1,
- _screen.height - _textmsg_box.y - 2,
+ _chatmsg_box.x,
+ _screen.height - _chatmsg_box.y - count * 13 - 2,
+ _chatmsg_box.x + _chatmsg_box.width - 1,
+ _screen.height - _chatmsg_box.y - 2,
PALETTE_TO_TRANSPARENT | (1 << USE_COLORTABLE) // black, but with some alpha for background
);
- /* Paint the messages starting with the lowest at the bottom */
+ /* Paint the chat messages starting with the lowest at the bottom */
for (uint y = 13; count-- != 0; y += 13) {
- DoDrawString(_textmsg_list[count].message, _textmsg_box.x + 3, _screen.height - _textmsg_box.y - y + 1, _textmsg_list[count].color);
+ DoDrawString(_chatmsg_list[count].message, _chatmsg_box.x + 3, _screen.height - _chatmsg_box.y - y + 1, _chatmsg_list[count].color);
}
/* Make sure the data is updated next flush */
_video_driver->MakeDirty(x, y, width, height);
- _textmessage_visible = true;
- _textmessage_dirty = false;
+ _chatmessage_visible = true;
+ _chatmessage_dirty = false;
}
+/** Text Effects */
static void MarkTextEffectAreaDirty(TextEffect *te)
{
MarkAllViewportsDirty(
--- a/src/texteff.hpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/texteff.hpp Sun Sep 02 11:17:33 2007 +0000
@@ -22,10 +22,10 @@
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();
+void InitChatMessage();
+void DrawChatMessage();
+void CDECL AddChatMessage(uint16 color, uint8 duration, const char *message, ...);
+void UndrawChatMessage();
/* misc_gui.cpp */
TextEffectID ShowFillingPercent(int x, int y, int z, uint8 percent, StringID color);
--- a/src/town.h Sun Aug 19 14:04:13 2007 +0000
+++ b/src/town.h Sun Sep 02 11:17:33 2007 +0000
@@ -159,9 +159,7 @@
/** Destroy the town */
~Town();
- bool IsValid() const { return this->xy != 0; }
-
- void QuickFree();
+ inline bool IsValid() const { return this->xy != 0; }
};
struct HouseSpec {
--- a/src/town_cmd.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/town_cmd.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -47,11 +47,16 @@
Town::Town(TileIndex tile)
{
+ if (tile != 0) _total_towns++;
this->xy = tile;
}
Town::~Town()
{
+ DeleteName(this->townnametype);
+
+ if (CleaningPool()) return;
+
Industry *i;
/* Delete town authority window
@@ -86,15 +91,9 @@
MarkWholeScreenDirty();
- this->QuickFree();
this->xy = 0;
}
-void Town::QuickFree()
-{
- DeleteName(this->townnametype);
-}
-
// Local
static int _grow_town_result;
@@ -648,7 +647,7 @@
* @return true if one of the neighboring tiles at the
* given distance is a road tile else
*/
-static bool NeighborIsRoadTile(TileIndex tile, int dir, RoadBlockTitleDistance dist_multi)
+static bool IsNeighborRoadTile(TileIndex tile, int dir, RoadBlockTitleDistance dist_multi)
{
return (HASBIT(GetTownRoadMask(TILE_ADD(tile, dist_multi * ToTileIndexDiff(_roadblock_tileadd[dir + 1]))), dir ^ 2) ||
HASBIT(GetTownRoadMask(TILE_ADD(tile, dist_multi * ToTileIndexDiff(_roadblock_tileadd[dir + 3]))), dir ^ 2) ||
@@ -673,7 +672,7 @@
/* No, try to build one in the direction.
* if that fails clear the land, and if that fails exit.
* This is to make sure that we can build a road here later. */
- if (CmdFailed(DoCommand(tile, (dir & 1 ? ROAD_X : ROAD_Y), 0, DC_AUTO, CMD_BUILD_ROAD)) &&
+ if (CmdFailed(DoCommand(tile, (dir & ROAD_NW ? ROAD_X : ROAD_Y), 0, DC_AUTO, CMD_BUILD_ROAD)) &&
CmdFailed(DoCommand(tile, 0, 0, DC_AUTO, CMD_LANDSCAPE_CLEAR)))
return false;
}
@@ -686,17 +685,17 @@
default: NOT_REACHED();
case TL_ORIGINAL: /* Disallow the road if any neighboring tile has a road (distance: 1) */
- return !NeighborIsRoadTile(tile, dir, RB_TILE_DIST1);
+ return !IsNeighborRoadTile(tile, dir, RB_TILE_DIST1);
case TL_BETTER_ROADS: /* Disallow the road if any neighboring tile has a road (distance: 1 and 2). */
- return !(NeighborIsRoadTile(tile, dir, RB_TILE_DIST1) ||
- NeighborIsRoadTile(tile, dir, RB_TILE_DIST2));
+ return !(IsNeighborRoadTile(tile, dir, RB_TILE_DIST1) ||
+ IsNeighborRoadTile(tile, dir, RB_TILE_DIST2));
}
}
/* If the tile is not a slope in the right direction, then
* maybe terraform some. */
- k = (dir & 1) ? SLOPE_NE : SLOPE_NW;
+ k = (dir & ROAD_NW) ? SLOPE_NE : SLOPE_NW;
if (k != slope && ComplementSlope(k) != slope) {
uint32 r = Random();
@@ -707,6 +706,7 @@
res = DoCommand(tile, slope, 0, DC_EXEC | DC_AUTO | DC_NO_WATER,
CMD_TERRAFORM_LAND);
} else {
+ /* Note: Do not replace " ^ 0xF" with ComplementSlope(). The slope might be steep. */
res = DoCommand(tile, slope ^ 0xF, 1, DC_EXEC | DC_AUTO | DC_NO_WATER,
CMD_TERRAFORM_LAND);
}
@@ -830,7 +830,7 @@
* @return true if there are more than 2 house tiles next
* to the current one
*/
-static bool NeighborsAreHouseTiles(TileIndex tile)
+static bool AreNeighborsHouseTiles(TileIndex tile)
{
uint counter = 0; ///< counts the house neighbor tiles
@@ -939,7 +939,7 @@
* at any side of the new road. */
}
- rcmd = (RoadBits)((1 << a) + (1 << b));
+ rcmd = (RoadBits)((ROAD_NW << a) + (ROAD_NW << b));
break;
}
@@ -961,7 +961,7 @@
case TL_BETTER_ROADS:
case TL_ORIGINAL:
- rcmd = (RoadBits)(1 << (block ^ 2));
+ rcmd = (RoadBits)(ROAD_NW << (block ^ 2));
break;
}
} else {
@@ -1000,7 +1000,7 @@
case TL_3X3_GRID: /* Use 2x2 grid afterwards! */
/* Fill gap if house has enougth neighbors */
tmptile2 = TILE_ADD(tmptile, ToTileIndexDiff(_roadblock_tileadd[i]));
- if (NeighborsAreHouseTiles(tmptile2) && BuildTownHouse(t1, tmptile2)) {
+ if (AreNeighborsHouseTiles(tmptile2) && BuildTownHouse(t1, tmptile2)) {
_grow_town_result = -1;
}
@@ -1012,7 +1012,7 @@
case TL_BETTER_ROADS: /* Use original afterwards! */
/* Fill gap if house has enougth neighbors */
tmptile2 = TILE_ADD(tmptile, ToTileIndexDiff(_roadblock_tileadd[i]));
- if (NeighborsAreHouseTiles(tmptile2) && BuildTownHouse(t1, tmptile2)) {
+ if (AreNeighborsHouseTiles(tmptile2) && BuildTownHouse(t1, tmptile2)) {
_grow_town_result = -1;
}
@@ -1040,7 +1040,7 @@
}
_grow_town_result = 0;
- rcmd = (RoadBits)(1 << i);
+ rcmd = (RoadBits)(ROAD_NW << i);
}
/* Return if a water tile */
@@ -1084,19 +1084,17 @@
/* Quit if it selecting an appropiate bridge type fails a large number of times. */
j = 22;
- {
- int32 bridge_len = GetBridgeLength(tile, tmptile);
- do {
- byte bridge_type = RandomRange(MAX_BRIDGES - 1);
- if (CheckBridge_Stuff(bridge_type, bridge_len)) {
- 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 */
- return;
- }
- } while (--j != 0);
- }
+ do {
+ byte bridge_type = RandomRange(MAX_BRIDGES - 1);
+ /* Can we actually build the bridge? */
+ if (CmdSucceeded(DoCommand(tile, tmptile, bridge_type | ((0x80 | ROADTYPES_ROAD) << 8), DC_AUTO, CMD_BUILD_BRIDGE))) {
+ DoCommand(tile, tmptile, bridge_type | ((0x80 | ROADTYPES_ROAD) << 8), DC_EXEC | DC_AUTO, CMD_BUILD_BRIDGE);
+ _grow_town_result = -1;
+
+ /* obviously, if building any bridge would fail, there is no need to try other bridge-types */
+ return;
+ }
+ } while (--j != 0);
}
/** Returns "growth" if a house was built, or no if the build failed.
@@ -1138,7 +1136,7 @@
/* Exclude the source position from the bitmask
* and return if no more road blocks available */
ClrBitT(mask, (block ^ 2));
- if (mask == 0)
+ if (mask == ROAD_NONE)
return _grow_town_result;
/* Select a random bit from the blockmask, walk a step
@@ -1354,8 +1352,6 @@
extern int _nb_orig_names;
int x, i;
- _total_towns++;
-
t->xy = tile;
t->num_houses = 0;
t->time_until_rebuild = 10;
@@ -2305,6 +2301,11 @@
_town_sort_dirty = true;
}
+static CommandCost TerraformTile_Town(TileIndex tile, uint32 flags, uint z_new, Slope tileh_new)
+{
+ return DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
+}
+
extern const TileTypeProcs _tile_type_town_procs = {
DrawTile_Town, /* draw_tile_proc */
GetSlopeZ_Town, /* get_slope_z_proc */
@@ -2319,6 +2320,7 @@
NULL, /* get_produced_cargo_proc */
NULL, /* vehicle_enter_tile_proc */
GetFoundation_Town, /* get_foundation_proc */
+ TerraformTile_Town, /* terraform_tile_proc */
};
--- a/src/train.h Sun Aug 19 14:04:13 2007 +0000
+++ b/src/train.h Sun Sep 02 11:17:33 2007 +0000
@@ -200,7 +200,7 @@
static inline bool EngineHasArticPart(const Vehicle *v)
{
assert(v->type == VEH_TRAIN);
- return (v->next != NULL && IsArticulatedPart(v->next));
+ return (v->Next() != NULL && IsArticulatedPart(v->Next()));
}
/**
@@ -211,7 +211,7 @@
static inline Vehicle *GetNextArticPart(const Vehicle *v)
{
assert(EngineHasArticPart(v));
- return v->next;
+ return v->Next();
}
/** Get the last part of a multi-part engine.
@@ -235,7 +235,7 @@
while (EngineHasArticPart(v)) v = GetNextArticPart(v);
/* v now contains the last artic part in the engine */
- return v->next;
+ return v->Next();
}
void ConvertOldMultiheadToNew();
@@ -245,10 +245,12 @@
int CheckTrainInDepot(const Vehicle *v, bool needs_to_be_stopped);
void CcBuildLoco(bool success, TileIndex tile, uint32 p1, uint32 p2);
void CcBuildWagon(bool success, TileIndex tile, uint32 p1, uint32 p2);
-void CcCloneTrain(bool success, TileIndex tile, uint32 p1, uint32 p2);
byte FreightWagonMult(CargoID cargo);
+int CheckTrainInDepot(const Vehicle *v, bool needs_to_be_stopped);
+int CheckTrainStoppedInDepot(const Vehicle *v);
+
/**
* This class 'wraps' Vehicle; you do not actually instantiate this class.
* You create a Vehicle using AllocateVehicle, so it is added to the pool
@@ -262,7 +264,7 @@
Train() { this->type = VEH_TRAIN; }
/** We want to 'destruct' the right class. */
- virtual ~Train() {}
+ virtual ~Train() { this->PreDestructor(); }
const char *GetTypeString() const { return "train"; }
void MarkDirty();
@@ -273,6 +275,11 @@
bool IsPrimaryVehicle() const { return IsFrontEngine(this); }
bool HasFront() const { return true; }
int GetImage(Direction direction) const;
+ int GetDisplaySpeed() const { return this->cur_speed * 10 / 16; }
+ int GetDisplayMaxSpeed() const { return this->u.rail.cached_max_speed * 10 / 16; }
+ Money GetRunningCost() const;
+ bool IsInDepot() const { return CheckTrainInDepot(this, false) != -1; }
+ bool IsStoppedInDepot() const { return CheckTrainStoppedInDepot(this) >= 0; }
void Tick();
};
--- a/src/train_cmd.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/train_cmd.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -71,7 +71,7 @@
uint32 total_power = 0;
uint32 max_te = 0;
- for (const Vehicle *u = v; u != NULL; u = u->next) {
+ for (const Vehicle *u = v; u != NULL; u = u->Next()) {
/* Power is not added for articulated parts */
if (IsArticulatedPart(u)) continue;
@@ -113,7 +113,7 @@
{
uint32 weight = 0;
- for (Vehicle *u = v; u != NULL; u = u->next) {
+ for (Vehicle *u = v; u != NULL; u = u->Next()) {
uint32 vweight = GetCargo(u->cargo_type)->weight * u->cargo.Count() * FreightWagonMult(u->cargo_type) / 16;
/* Vehicle weight is not added for articulated parts. */
@@ -159,11 +159,11 @@
v->u.rail.cached_total_length = 0;
v->u.rail.compatible_railtypes = 0;
- for (Vehicle *u = v; u != NULL; u = u->next) {
+ for (Vehicle *u = v; u != NULL; u = u->Next()) {
const RailVehicleInfo *rvi_u = RailVehInfo(u->engine_type);
- /* Update the v->first cache. This is faster than having to brute force it later. */
- if (u->first == NULL) u->first = v;
+ /* Check the v->first cache. */
+ assert(u->First() == v);
/* update the 'first engine' */
u->u.rail.first_engine = v == u ? INVALID_ENGINE : first_engine;
@@ -236,7 +236,7 @@
veh_len = GetVehicleCallback(CBID_VEHICLE_LENGTH, 0, 0, u->engine_type, u);
}
if (veh_len == CALLBACK_FAILED) veh_len = rvi_u->shorten_factor;
- veh_len = clamp(veh_len, 0, u->next == NULL ? 7 : 5); // the clamp on vehicles not the last in chain is stricter, as too short wagons can break the 'follow next vehicle' code
+ veh_len = clamp(veh_len, 0, u->Next() == NULL ? 7 : 5); // the clamp on vehicles not the last in chain is stricter, as too short wagons can break the 'follow next vehicle' code
u->u.rail.cached_veh_length = 8 - veh_len;
v->u.rail.cached_total_length += u->u.rail.cached_veh_length;
}
@@ -302,7 +302,7 @@
static int GetTrainAcceleration(Vehicle *v, bool mode)
{
int max_speed = 2000;
- int speed = v->cur_speed * 10 / 16; //[mph]
+ int speed = v->GetDisplaySpeed(); //[mph]
int curvecount[2] = {0, 0};
/*first find the curve speed limit */
@@ -310,9 +310,9 @@
int sum = 0;
int pos = 0;
int lastpos = -1;
- for (const Vehicle *u = v; u->next != NULL; u = u->next, pos++) {
+ for (const Vehicle *u = v; u->Next() != NULL; u = u->Next(), pos++) {
Direction dir = u->direction;
- Direction ndir = u->next->direction;
+ Direction ndir = u->Next()->direction;
int i;
for (i = 0; i < 2; i++) {
@@ -372,7 +372,7 @@
int num = 0; //number of vehicles, change this into the number of axles later
int incl = 0;
int drag_coeff = 20; //[1e-4]
- for (const Vehicle *u = v; u != NULL; u = u->next) {
+ for (const Vehicle *u = v; u != NULL; u = u->Next()) {
num++;
drag_coeff += 3;
@@ -559,7 +559,7 @@
SetTrainWagon(v);
if (u != NULL) {
- u->next = v;
+ u->SetNext(v);
} else {
SetFreeWagon(v);
InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile);
@@ -584,12 +584,12 @@
_new_vehicle_id = v->index;
VehiclePositionChanged(v);
- TrainConsistChanged(GetFirstVehicleInChain(v));
- UpdateTrainGroupID(GetFirstVehicleInChain(v));
+ TrainConsistChanged(v->First());
+ UpdateTrainGroupID(v->First());
InvalidateWindow(WC_VEHICLE_DEPOT, v->tile);
if (IsLocalPlayer()) {
- InvalidateAutoreplaceWindow(VEH_TRAIN, v->group_id); // updates the replace Train window
+ InvalidateAutoreplaceWindow(v->engine_type, v->group_id); // updates the replace Train window
}
GetPlayer(_current_player)->num_engines[engine]++;
}
@@ -621,6 +621,7 @@
static void AddRearEngineToMultiheadedTrain(Vehicle* v, Vehicle* u, bool building)
{
+ u = new (u) Train();
u->direction = v->direction;
u->owner = v->owner;
u->tile = v->tile;
@@ -629,7 +630,6 @@
u->z_pos = v->z_pos;
u->u.rail.track = TRACK_BIT_DEPOT;
u->vehstatus = v->vehstatus & ~VS_STOPPED;
- u = new (u) Train();
u->subtype = 0;
SetMultiheaded(u);
u->spritenum = v->spritenum + 1;
@@ -637,7 +637,7 @@
u->cargo_subtype = v->cargo_subtype;
u->cargo_cap = v->cargo_cap;
u->u.rail.railtype = v->u.rail.railtype;
- if (building) v->next = u;
+ if (building) v->SetNext(u);
u->engine_type = v->engine_type;
u->build_year = v->build_year;
if (building) v->value >>= 1;
@@ -773,7 +773,7 @@
RebuildVehicleLists();
InvalidateWindow(WC_COMPANY, v->owner);
if (IsLocalPlayer())
- InvalidateAutoreplaceWindow(VEH_TRAIN, v->group_id); // updates the replace Train window
+ InvalidateAutoreplaceWindow(v->engine_type, v->group_id); // updates the replace Train window
GetPlayer(_current_player)->num_engines[p1]++;
}
@@ -793,7 +793,7 @@
if (!IsTileDepotType(tile, TRANSPORT_RAIL) || v->cur_speed != 0) return -1;
int count = 0;
- for (; v != NULL; v = v->next) {
+ for (; v != NULL; v = v->Next()) {
/* This count is used by the depot code to determine the number of engines
* in the consist. Exclude articulated parts so that autoreplacing to
* engines with more articulated parts than before works correctly.
@@ -841,8 +841,7 @@
Vehicle *u;
for (u = first; GetNextVehicle(u) != v; u = GetNextVehicle(u)) {}
- GetLastEnginePart(u)->next = GetNextVehicle(v);
- v->first = NULL; // we shouldn't point to the old first, since the vehicle isn't in that chain anymore
+ GetLastEnginePart(u)->SetNext(GetNextVehicle(v));
return first;
}
@@ -858,7 +857,7 @@
Vehicle *v = dst;
while (v->engine_type == eng) {
- v = v->next;
+ v = v->Next();
if (v == NULL) return dst;
}
}
@@ -873,11 +872,12 @@
*/
static void AddWagonToConsist(Vehicle *v, Vehicle *dest)
{
- UnlinkWagon(v, GetFirstVehicleInChain(v));
+ UnlinkWagon(v, v->First());
if (dest == NULL) return;
- v->next = dest->next;
- dest->next = v;
+ Vehicle *next = dest->Next();
+ dest->SetNext(v);
+ v->SetNext(next);
ClearFreeWagon(v);
ClearFrontEngine(v);
}
@@ -897,7 +897,7 @@
/* make sure that there are no free cars before next engine */
Vehicle *u;
- for (u = v; u->next != NULL && !IsTrainEngine(u->next); u = u->next) {}
+ for (u = v; u->Next() != NULL && !IsTrainEngine(u->Next()); u = u->Next()) {}
if (u == v->u.rail.other_multiheaded_part) continue;
AddWagonToConsist(v->u.rail.other_multiheaded_part, u);
@@ -934,19 +934,19 @@
}
/* if an articulated part is being handled, deal with its parent vehicle */
- while (IsArticulatedPart(src)) src = GetPrevVehicleInChain(src);
+ while (IsArticulatedPart(src)) src = src->Previous();
if (dst != NULL) {
- while (IsArticulatedPart(dst)) dst = GetPrevVehicleInChain(dst);
+ while (IsArticulatedPart(dst)) dst = dst->Previous();
}
/* don't move the same vehicle.. */
if (src == dst) return CommandCost();
/* locate the head of the two chains */
- Vehicle *src_head = GetFirstVehicleInChain(src);
+ Vehicle *src_head = src->First();
Vehicle *dst_head;
if (dst != NULL) {
- dst_head = GetFirstVehicleInChain(dst);
+ dst_head = dst->First();
if (dst_head->tile != src_head->tile) return CMD_ERROR;
/* Now deal with articulated part of destination wagon */
dst = GetLastEnginePart(dst);
@@ -1023,10 +1023,6 @@
/* do it? */
if (flags & DC_EXEC) {
- /* clear the ->first cache */
- for (Vehicle *u = src_head; u != NULL; u = u->next) u->first = NULL;
- for (Vehicle *u = dst_head; u != NULL; u = u->next) u->first = NULL;
-
/* If we move the front Engine and if the second vehicle is not an engine
add the whole vehicle to the DEFAULT_GROUP */
if (IsFrontEngine(src) && !IsDefaultGroupID(src->group_id)) {
@@ -1042,7 +1038,7 @@
if (src != src_head) {
Vehicle *v = src_head;
while (GetNextVehicle(v) != src) v = GetNextVehicle(v);
- GetLastEnginePart(v)->next = NULL;
+ GetLastEnginePart(v)->SetNext(NULL);
} else {
InvalidateWindowData(WC_VEHICLE_DEPOT, src_head->tile); // We removed a line
src_head = NULL;
@@ -1052,7 +1048,7 @@
if (src_head == dst_head) dst_head = NULL;
/* unlink single wagon from linked list */
src_head = UnlinkWagon(src, src_head);
- GetLastEnginePart(src)->next = NULL;
+ GetLastEnginePart(src)->SetNext(NULL);
}
if (dst == NULL) {
@@ -1098,17 +1094,16 @@
Vehicle *v;
for (v = src; GetNextVehicle(v) != NULL; v = GetNextVehicle(v));
- GetLastEnginePart(v)->next = dst->next;
+ GetLastEnginePart(v)->SetNext(dst->Next());
}
- dst->next = src;
+ dst->SetNext(src);
}
+
if (src->u.rail.other_multiheaded_part != NULL) {
if (src->u.rail.other_multiheaded_part == src_head) {
- src_head = src_head->next;
+ src_head = src_head->Next();
}
AddWagonToConsist(src->u.rail.other_multiheaded_part, src);
- /* previous line set the front engine to the old front. We need to clear that */
- src->u.rail.other_multiheaded_part->first = NULL;
}
/* If there is an engine behind first_engine we moved away, it should become new first_engine
@@ -1219,8 +1214,8 @@
SET_EXPENSES_TYPE(EXPENSES_NEW_VEHICLES);
- while (IsArticulatedPart(v)) v = GetPrevVehicleInChain(v);
- Vehicle *first = GetFirstVehicleInChain(v);
+ while (IsArticulatedPart(v)) v = v->Previous();
+ Vehicle *first = v->First();
/* make sure the vehicle is stopped in the depot */
if (CheckTrainStoppedInDepot(first) < 0) {
@@ -1263,9 +1258,6 @@
if ((flags & DC_EXEC) && v == first) {
Vehicle *new_f = GetNextVehicle(first);
- /* 2.1 If the first wagon is sold, update the first-> pointers to NULL */
- for (Vehicle *tmp = first; tmp != NULL; tmp = tmp->next) tmp->first = NULL;
-
/* 2.2 If there are wagons present after the deleted front engine, check
* if the second wagon (which will be first) is an engine. If it is one,
* promote it as a new train, retaining the unitnumber, orders */
@@ -1300,7 +1292,7 @@
first->next_shared = NULL;
/* If we deleted a window then open a new one for the 'new' train */
- if (IsLocalPlayer() && w != NULL) ShowTrainViewWindow(new_f);
+ if (IsLocalPlayer() && w != NULL) ShowVehicleViewWindow(new_f);
}
}
@@ -1471,8 +1463,8 @@
Vehicle *a, *b;
/* locate vehicles to swap */
- for (a = v; l != 0; l--) a = a->next;
- for (b = v; r != 0; r--) b = b->next;
+ for (a = v; l != 0; l--) a = a->Next();
+ for (b = v; r != 0; r--) b = b->Next();
if (a != b) {
/* swap the hidden bits */
@@ -1540,30 +1532,30 @@
static void AdvanceWagons(Vehicle *v, bool before)
{
Vehicle *base = v;
- Vehicle *first = base->next;
+ Vehicle *first = base->Next();
uint length = CountVehiclesInChain(v);
while (length > 2) {
/* find pairwise matching wagon
* start<>end, start+1<>end-1, ... */
Vehicle *last = first;
- for (uint i = length - 3; i > 0; i--) last = last->next;
+ for (uint i = length - 3; i > 0; i--) last = last->Next();
int differential = last->u.rail.cached_veh_length - base->u.rail.cached_veh_length;
if (before) differential *= -1;
if (differential > 0) {
/* disconnect last car to make sure only this subset moves */
- Vehicle *tempnext = last->next;
- last->next = NULL;
+ Vehicle *tempnext = last->Next();
+ last->SetNext(NULL);
for (int i = 0; i < differential; i++) TrainController(first, false);
- last->next = tempnext;
+ last->SetNext(tempnext);
}
base = first;
- first = first->next;
+ first = first->Next();
length -= 2;
}
}
@@ -1594,7 +1586,7 @@
/* count number of vehicles */
int r = -1;
const Vehicle *u = v;
- do r++; while ( (u = u->next) != NULL );
+ do r++; while ((u = u->Next()) != NULL);
AdvanceWagons(v, true);
@@ -1634,7 +1626,7 @@
return_cmd_error(STR_ONLY_TURN_SINGLE_UNIT);
}
- Vehicle *front = GetFirstVehicleInChain(v);
+ Vehicle *front = v->First();
/* make sure the vehicle is stopped in the depot */
if (CheckTrainStoppedInDepot(front) < 0) {
return_cmd_error(STR_881A_TRAINS_CAN_ONLY_BE_ALTERED);
@@ -1646,8 +1638,8 @@
InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
}
} else {
- /*turn the whole train around */
- if (v->u.rail.crash_anim_pos != 0 || v->breakdown_ctr != 0) return CMD_ERROR;
+ /* turn the whole train around */
+ if (v->vehstatus & VS_CRASHED || v->breakdown_ctr != 0) return CMD_ERROR;
if (flags & DC_EXEC) {
if (_patches.realistic_acceleration && v->cur_speed != 0) {
@@ -1773,12 +1765,12 @@
}
}
}
- } while ((v = v->next) != NULL && !only_this);
+ } while ((v = v->Next()) != NULL && !only_this);
_returned_refit_capacity = num;
/* Update the train's cached variables */
- if (flags & DC_EXEC) TrainConsistChanged(GetFirstVehicleInChain(GetVehicle(p1)));
+ if (flags & DC_EXEC) TrainConsistChanged(GetVehicle(p1)->First());
return cost;
}
@@ -2018,7 +2010,7 @@
}
break;
}
- } while ((v = v->next) != NULL);
+ } while ((v = v->Next()) != NULL);
if (sound) PlayVehicleSound(u, VSE_TRAIN_EFFECT);
}
@@ -2047,7 +2039,7 @@
static bool CheckTrainStayInDepot(Vehicle *v)
{
/* bail out if not all wagons are in the same depot or not in a depot at all */
- for (const Vehicle *u = v; u != NULL; u = u->next) {
+ for (const Vehicle *u = v; u != NULL; u = u->Next()) {
if (u->u.rail.track != TRACK_BIT_DEPOT || u->tile != v->tile) return false;
}
@@ -2471,7 +2463,7 @@
do {
v->cur_image = v->GetImage(v->direction);
MarkAllViewportsDirty(v->left_coord, v->top_coord, v->right_coord + 1, v->bottom_coord + 1);
- } while ((v = v->next) != NULL);
+ } while ((v = v->Next()) != NULL);
/* need to update acceleration and cached values since the goods on the train changed. */
TrainCargoChanged(this);
@@ -2719,7 +2711,7 @@
myabs(v->x_pos - tcc->v->x_pos) < 6 &&
myabs(v->y_pos - tcc->v->y_pos) < 6 ) {
- Vehicle *coll = GetFirstVehicleInChain(v);
+ Vehicle *coll = v->First();
/* it can't collide with its own wagons */
if (tcc->v == coll ||
@@ -2757,7 +2749,7 @@
TrainCollideChecker tcc;
tcc.v = v;
- tcc.v_skip = v->next;
+ tcc.v_skip = v->Next();
tcc.num = 0;
/* find colliding vehicles */
@@ -2809,7 +2801,7 @@
Vehicle *prev;
/* For every vehicle after and including the given vehicle */
- for (prev = GetPrevVehicleInChain(v); v != NULL; prev = v, v = v->next) {
+ for (prev = v->Previous(); v != NULL; prev = v, v = v->Next()) {
DiagDirection enterdir = DIAGDIR_BEGIN;
bool update_signals = false;
BeginVehicleMove(v);
@@ -2936,7 +2928,7 @@
goto invalid_rail;
}
- if (IsLevelCrossingTile(v->tile) && v->next == NULL) {
+ if (IsLevelCrossingTile(v->tile) && v->Next() == NULL) {
UnbarCrossing(v->tile);
MarkTileDirtyByTile(v->tile);
}
@@ -2947,7 +2939,7 @@
v->tile = gp.new_tile;
if (GetTileRailType(gp.new_tile) != GetTileRailType(gp.old_tile)) {
- TrainPowerChanged(GetFirstVehicleInChain(v));
+ TrainPowerChanged(v->First());
}
v->u.rail.track = chosen_track;
@@ -2999,7 +2991,7 @@
/* Signals can only change when the first
* (above) or the last vehicle moves. */
- if (v->next == NULL) TrainMovedChangeSignals(gp.old_tile, ReverseDiagDir(enterdir));
+ if (v->Next() == NULL) TrainMovedChangeSignals(gp.old_tile, ReverseDiagDir(enterdir));
}
}
return;
@@ -3030,8 +3022,8 @@
* *u is then the one-before-last wagon, and *v the last
* one which will physicially be removed */
Vehicle *u = v;
- for (; v->next != NULL; v = v->next) u = v;
- u->next = NULL;
+ for (; v->Next() != NULL; v = v->Next()) u = v;
+ u->SetNext(NULL);
InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
DeleteWindowById(WC_VEHICLE_VIEW, v->index);
@@ -3092,7 +3084,7 @@
the bridge in that case */
if (v->u.rail.track != TRACK_BIT_WORMHOLE) AfterSetTrainPos(v, false);
}
- } while ((v = v->next) != NULL);
+ } while ((v = v->Next()) != NULL);
}
static void HandleCrashedTrain(Vehicle *v)
@@ -3119,7 +3111,7 @@
EV_EXPLOSION_SMALL);
break;
}
- } while ((u = u->next) != NULL);
+ } while ((u = u->Next()) != NULL);
}
if (state <= 240 && !(v->tick_counter & 3)) ChangeTrainDirRandomly(v);
@@ -3257,7 +3249,7 @@
static void TrainLocoHandler(Vehicle *v, bool mode)
{
/* train has crashed? */
- if (v->u.rail.crash_anim_pos != 0) {
+ if (v->vehstatus & VS_CRASHED) {
if (!mode) HandleCrashedTrain(v);
return;
}
@@ -3315,6 +3307,25 @@
}
+
+Money Train::GetRunningCost() const
+{
+ Money cost = 0;
+ const Vehicle *v = this;
+
+ do {
+ const RailVehicleInfo *rvi = RailVehInfo(v->engine_type);
+
+ byte cost_factor = GetVehicleProperty(v, 0x0D, rvi->running_cost_base);
+ if (cost_factor == 0) continue;
+
+ cost += cost_factor * _price.running_rail[rvi->running_cost_class];
+ } while ((v = GetNextVehicle(v)) != NULL);
+
+ return cost;
+}
+
+
void Train::Tick()
{
if (_age_cargo_skip_counter == 0) this->cargo.AgeCargo();
@@ -3339,18 +3350,8 @@
static void CheckIfTrainNeedsService(Vehicle *v)
{
- if (_patches.servint_trains == 0) return;
- if (!VehicleNeedsService(v)) return;
- if (v->vehstatus & VS_STOPPED) return;
- if (_patches.gotodepot && VehicleHasDepotOrders(v)) return;
-
- /* Don't interfere with a depot visit scheduled by the user, or a
- * depot visit by the order list. */
- if (v->current_order.type == OT_GOTO_DEPOT &&
- (v->current_order.flags & (OF_HALT_IN_DEPOT | OF_PART_OF_ORDERS)) != 0)
- return;
-
- if (CheckTrainIsInsideDepot(v)) {
+ if (_patches.servint_trains == 0 || !VehicleNeedsService(v)) return;
+ if (v->IsInDepot()) {
VehicleServiceInDepot(v);
return;
}
@@ -3377,8 +3378,6 @@
return;
}
- if (v->current_order.type == OT_LOADING) v->LeaveStation();
-
v->current_order.type = OT_GOTO_DEPOT;
v->current_order.flags = OF_NON_STOP;
v->current_order.dest = depot->index;
@@ -3386,22 +3385,6 @@
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
}
-Money GetTrainRunningCost(const Vehicle *v)
-{
- Money cost = 0;
-
- do {
- const RailVehicleInfo *rvi = RailVehInfo(v->engine_type);
-
- byte cost_factor = GetVehicleProperty(v, 0x0D, rvi->running_cost_base);
- if (cost_factor == 0) continue;
-
- cost += cost_factor * _price.running_rail[rvi->running_cost_class];
- } while ((v = GetNextVehicle(v)) != NULL);
-
- return cost;
-}
-
void OnNewDay_Train(Vehicle *v)
{
if ((++v->day_counter & 7) == 0) DecreaseVehicleValue(v);
@@ -3422,7 +3405,7 @@
if ((v->vehstatus & VS_STOPPED) == 0) {
/* running costs */
- CommandCost cost(GetTrainRunningCost(v) / 364);
+ CommandCost cost(v->GetRunningCost() / 364);
v->profit_this_year -= cost.GetCost() >> 8;
@@ -3497,7 +3480,7 @@
}
Vehicle *w;
- for (w = u->next; w != NULL && (w->engine_type != u->engine_type || w->u.rail.other_multiheaded_part != NULL); w = GetNextVehicle(w));
+ for (w = u->Next(); w != NULL && (w->engine_type != u->engine_type || w->u.rail.other_multiheaded_part != NULL); w = GetNextVehicle(w));
if (w != NULL) {
/* we found a car to partner with this engine. Now we will make sure it face the right way */
if (IsTrainEngine(w)) {
--- a/src/train_gui.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/train_gui.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -56,12 +56,7 @@
_backup_orders_tile = 0;
RestoreVehicleOrders(v, _backup_orders_data);
}
- ShowTrainViewWindow(v);
-}
-
-void CcCloneTrain(bool success, TileIndex tile, uint32 p1, uint32 p2)
-{
- if (success) ShowTrainViewWindow(GetVehicle(_new_vehicle_id));
+ ShowVehicleViewWindow(v);
}
/**
@@ -105,7 +100,7 @@
}
dx += width;
- v = v->next;
+ v = v->Next();
} while (dx < count && v != NULL);
if (highlight_l != highlight_r) {
@@ -117,215 +112,6 @@
_cur_dpi = old_dpi;
}
-static const Widget _train_view_widgets[] = {
-{ WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW },
-{ WWT_CAPTION, RESIZE_RIGHT, 14, 11, 237, 0, 13, STR_882E, STR_018C_WINDOW_TITLE_DRAG_THIS },
-{ WWT_STICKYBOX, RESIZE_LR, 14, 238, 249, 0, 13, 0x0, STR_STICKY_BUTTON },
-{ WWT_PANEL, RESIZE_RB, 14, 0, 231, 14, 121, 0x0, STR_NULL },
-{ WWT_INSET, RESIZE_RB, 14, 2, 229, 16, 119, 0x0, STR_NULL },
-{ WWT_PUSHBTN, RESIZE_RTB, 14, 0, 237, 122, 133, 0x0, STR_8846_CURRENT_TRAIN_ACTION_CLICK },
-{ WWT_PUSHIMGBTN, RESIZE_LR, 14, 232, 249, 14, 31, SPR_CENTRE_VIEW_VEHICLE, STR_8848_CENTER_MAIN_VIEW_ON_TRAIN },
-{ WWT_PUSHIMGBTN, RESIZE_LR, 14, 232, 249, 32, 49, SPR_SEND_TRAIN_TODEPOT, STR_8849_SEND_TRAIN_TO_DEPOT },
-{ WWT_PUSHIMGBTN, RESIZE_LR, 14, 232, 249, 50, 67, SPR_IGNORE_SIGNALS, STR_884A_FORCE_TRAIN_TO_PROCEED },
-{ WWT_PUSHIMGBTN, RESIZE_LR, 14, 232, 249, 68, 85, SPR_FORCE_VEHICLE_TURN, STR_884B_REVERSE_DIRECTION_OF_TRAIN },
-{ WWT_PUSHIMGBTN, RESIZE_LR, 14, 232, 249, 86, 103, SPR_SHOW_ORDERS, STR_8847_SHOW_TRAIN_S_ORDERS },
-{ WWT_PUSHIMGBTN, RESIZE_LR, 14, 232, 249, 104, 121, SPR_SHOW_VEHICLE_DETAILS,STR_884C_SHOW_TRAIN_DETAILS },
-{ WWT_PUSHIMGBTN, RESIZE_LR, 14, 232, 249, 68, 85, SPR_REFIT_VEHICLE, STR_RAIL_REFIT_VEHICLE_TO_CARRY },
-{ WWT_PUSHIMGBTN, RESIZE_LR, 14, 232, 249, 32, 49, SPR_CLONE_TRAIN, STR_CLONE_TRAIN_INFO },
-{ WWT_PANEL, RESIZE_LRB, 14, 232, 249, 122, 121, 0x0, STR_NULL },
-{ WWT_RESIZEBOX, RESIZE_LRTB, 14, 238, 249, 122, 133, 0x0, STR_NULL },
-{ WIDGETS_END }
-};
-
-static void ShowTrainDetailsWindow(const Vehicle *v);
-
-static void TrainViewWndProc(Window *w, WindowEvent *e)
-{
- switch (e->event) {
- case WE_PAINT: {
- const Vehicle *v, *u;
- StringID str;
- bool is_localplayer;
-
- v = GetVehicle(w->window_number);
-
- is_localplayer = v->owner == _local_player;
- SetWindowWidgetDisabledState(w, 7, !is_localplayer);
- SetWindowWidgetDisabledState(w, 8, !is_localplayer);
- SetWindowWidgetDisabledState(w, 9, !is_localplayer);
- SetWindowWidgetDisabledState(w, 13, !is_localplayer);
-
- /* Disable cargo refit button, until we know we can enable it below. */
- DisableWindowWidget(w, 12);
-
- if (is_localplayer) {
- /* See if any vehicle can be refitted */
- for (u = v; u != NULL; u = u->next) {
- if (EngInfo(u->engine_type)->refit_mask != 0 ||
- (RailVehInfo(v->engine_type)->railveh_type != RAILVEH_WAGON && v->cargo_cap != 0)) {
- EnableWindowWidget(w, 12);
- /* We have a refittable carriage, bail out */
- break;
- }
- }
- }
-
- /* draw widgets & caption */
- SetDParam(0, v->index);
- DrawWindowWidgets(w);
-
- if (v->u.rail.crash_anim_pos != 0) {
- str = STR_8863_CRASHED;
- } else if (v->breakdown_ctr == 1) {
- str = STR_885C_BROKEN_DOWN;
- } else if (v->vehstatus & VS_STOPPED) {
- if (v->u.rail.last_speed == 0) {
- if (v->u.rail.cached_power == 0) {
- str = STR_TRAIN_NO_POWER;
- } else {
- str = STR_8861_STOPPED;
- }
- } else {
- SetDParam(0, v->u.rail.last_speed * 10 / 16);
- str = STR_TRAIN_STOPPING + _patches.vehicle_speed;
- }
- } else {
- switch (v->current_order.type) {
- case OT_GOTO_STATION: {
- str = STR_HEADING_FOR_STATION + _patches.vehicle_speed;
- SetDParam(0, v->current_order.dest);
- SetDParam(1, v->u.rail.last_speed * 10 / 16);
- } break;
-
- case OT_GOTO_DEPOT: {
- Depot *dep = GetDepot(v->current_order.dest);
- SetDParam(0, dep->town_index);
- if (HASBIT(v->current_order.flags, OFB_HALT_IN_DEPOT) && !HASBIT(v->current_order.flags, OFB_PART_OF_ORDERS)) {
- str = STR_HEADING_FOR_TRAIN_DEPOT + _patches.vehicle_speed;
- } else {
- str = STR_HEADING_FOR_TRAIN_DEPOT_SERVICE + _patches.vehicle_speed;
- }
- SetDParam(1, v->u.rail.last_speed * 10 / 16);
- } break;
-
- case OT_LOADING:
- case OT_LEAVESTATION:
- str = STR_882F_LOADING_UNLOADING;
- break;
-
- case OT_GOTO_WAYPOINT: {
- SetDParam(0, v->current_order.dest);
- str = STR_HEADING_FOR_WAYPOINT + _patches.vehicle_speed;
- SetDParam(1, v->u.rail.last_speed * 10 / 16);
- break;
- }
-
- default:
- if (v->num_orders == 0) {
- str = STR_NO_ORDERS + _patches.vehicle_speed;
- SetDParam(0, v->u.rail.last_speed * 10 / 16);
- } else {
- str = STR_EMPTY;
- }
- break;
- }
- }
-
- /* draw the flag plus orders */
- DrawSprite(v->vehstatus & VS_STOPPED ? SPR_FLAG_VEH_STOPPED : SPR_FLAG_VEH_RUNNING, PAL_NONE, 2, w->widget[5].top + 1);
- DrawStringCenteredTruncated(w->widget[5].left + 8, w->widget[5].right, w->widget[5].top + 1, str, 0);
- DrawWindowViewport(w);
- } break;
-
- case WE_CLICK: {
- int wid = e->we.click.widget;
- Vehicle *v = GetVehicle(w->window_number);
-
- switch (wid) {
- case 5: /* start/stop train */
- DoCommandP(v->tile, v->index, 0, NULL, CMD_START_STOP_TRAIN | CMD_MSG(STR_883B_CAN_T_STOP_START_TRAIN));
- break;
- case 6: /* center main view */
- ScrollMainWindowTo(v->x_pos, v->y_pos);
- break;
- case 7: /* goto depot */
- /* TrainGotoDepot has a nice randomizer in the pathfinder, which causes desyncs... */
- DoCommandP(v->tile, v->index, _ctrl_pressed ? DEPOT_SERVICE : 0, NULL, CMD_SEND_TRAIN_TO_DEPOT | CMD_NO_TEST_IF_IN_NETWORK | CMD_MSG(STR_8830_CAN_T_SEND_TRAIN_TO_DEPOT));
- break;
- case 8: /* force proceed */
- DoCommandP(v->tile, v->index, 0, NULL, CMD_FORCE_TRAIN_PROCEED | CMD_MSG(STR_8862_CAN_T_MAKE_TRAIN_PASS_SIGNAL));
- break;
- case 9: /* reverse direction */
- DoCommandP(v->tile, v->index, 0, NULL, CMD_REVERSE_TRAIN_DIRECTION | CMD_MSG(STR_8869_CAN_T_REVERSE_DIRECTION));
- break;
- case 10: /* show train orders */
- ShowOrdersWindow(v);
- break;
- case 11: /* show train details */
- ShowTrainDetailsWindow(v);
- break;
- case 12:
- ShowVehicleRefitWindow(v, INVALID_VEH_ORDER_ID);
- break;
- case 13:
- DoCommandP(v->tile, v->index, _ctrl_pressed ? 1 : 0, NULL, CMD_CLONE_VEHICLE | CMD_MSG(STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE));
- break;
- }
- } break;
-
- case WE_RESIZE:
- w->viewport->width += e->we.sizing.diff.x;
- w->viewport->height += e->we.sizing.diff.y;
- w->viewport->virtual_width += e->we.sizing.diff.x;
- w->viewport->virtual_height += e->we.sizing.diff.y;
- break;
-
- case WE_DESTROY:
- 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: {
- const Vehicle *v = GetVehicle(w->window_number);
- bool train_stopped = CheckTrainStoppedInDepot(v) >= 0;
-
- /* Widget 7 (send to depot) must be hidden if the train is already stopped in hangar.
- * Widget 13 (clone) should then be shown, since cloning is allowed only while in depot and stopped.
- * This sytem allows to have two buttons, on top of each other.
- * The same system applies to widget 9 and 12, reverse direction and refit*/
- if (train_stopped != IsWindowWidgetHidden(w, 7) || train_stopped == IsWindowWidgetHidden(w, 13)) {
- SetWindowWidgetHiddenState(w, 7, train_stopped); // send to depot
- SetWindowWidgetHiddenState(w, 9, train_stopped); // reverse direction
- SetWindowWidgetHiddenState(w, 12, !train_stopped); // refit
- SetWindowWidgetHiddenState(w, 13, !train_stopped); // clone
- SetWindowDirty(w);
- }
- break;
- }
-
- }
-}
-
-static const WindowDesc _train_view_desc = {
- WDP_AUTO, WDP_AUTO, 250, 134, 250, 134,
- WC_VEHICLE_VIEW, WC_NONE,
- WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE,
- _train_view_widgets,
- TrainViewWndProc
-};
-
-void ShowTrainViewWindow(const Vehicle *v)
-{
- Window *w = AllocateWindowDescFront(&_train_view_desc,v->index);
-
- if (w != NULL) {
- w->caption_color = v->owner;
- AssignWindowViewport(w, 3, 17, 0xE2, 0x66, w->window_number | (1 << 31), ZOOM_LVL_TRAIN);
- }
-}
-
static void TrainDetailsCargoTab(const Vehicle *v, int x, int y)
{
if (v->cargo_cap != 0) {
@@ -390,7 +176,7 @@
do {
act_cargo[u->cargo_type] += u->cargo.Count();
max_cargo[u->cargo_type] += u->cargo_cap;
- } while ((u = u->next) != NULL);
+ } while ((u = u->Next()) != NULL);
/* Set scroll-amount seperately from counting, as to not compute num double
* for more carriages of the same type
@@ -402,7 +188,7 @@
} else {
do {
if (!IsArticulatedPart(u) || u->cargo_cap != 0) num++;
- } while ((u = u->next) != NULL);
+ } while ((u = u->Next()) != NULL);
}
SetVScrollCount(w, num);
@@ -423,10 +209,10 @@
SetDParam(0, (v->age + 365 < v->max_age) ? STR_AGE : STR_AGE_RED);
SetDParam(2, v->max_age / 366);
- SetDParam(3, GetTrainRunningCost(v) >> 8);
+ SetDParam(3, v->GetDisplayRunningCost());
DrawString(x, 15, STR_885D_AGE_RUNNING_COST_YR, 0);
- SetDParam(2, v->u.rail.cached_max_speed * 10 / 16);
+ SetDParam(2, v->GetDisplayMaxSpeed());
SetDParam(1, v->u.rail.cached_power);
SetDParam(0, v->u.rail.cached_weight);
SetDParam(3, v->u.rail.cached_max_te / 1000);
@@ -463,7 +249,7 @@
SpriteID pal = (v->vehstatus & VS_CRASHED) ? PALETTE_CRASH : GetVehiclePalette(v);
DrawSprite(u->GetImage(DIR_W), pal, x + WagonLengthToPixels(4 + dx), y + 6 + (is_custom_sprite(RailVehInfo(u->engine_type)->image_index) ? _traininfo_vehicle_pitch : 0));
dx += u->u.rail.cached_veh_length;
- u = u->next;
+ u = u->Next();
} while (u != NULL && IsArticulatedPart(u) && u->cargo_cap == 0);
px = x + WagonLengthToPixels(dx) + 2;
@@ -485,7 +271,7 @@
} else {
/* Move to the next line */
do {
- v = v->next;
+ v = v->Next();
} while (v != NULL && IsArticulatedPart(v) && v->cargo_cap == 0);
}
if (v == NULL) return;
@@ -600,7 +386,7 @@
};
-static void ShowTrainDetailsWindow(const Vehicle *v)
+void ShowTrainDetailsWindow(const Vehicle *v)
{
Window *w;
VehicleID veh = v->index;
--- a/src/tree_cmd.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/tree_cmd.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -255,6 +255,11 @@
cost.AddCost(_price.build_trees * 2);
break;
+ case MP_WATER:
+ msg = STR_3807_CAN_T_BUILD_ON_WATER;
+ continue;
+ break;
+
case MP_CLEAR:
if (!IsTileOwner(tile, OWNER_NONE) ||
IsBridgeAbove(tile)) {
@@ -656,6 +661,11 @@
_trees_tick_ctr = 0;
}
+static CommandCost TerraformTile_Trees(TileIndex tile, uint32 flags, uint z_new, Slope tileh_new)
+{
+ return DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
+}
+
extern const TileTypeProcs _tile_type_trees_procs = {
DrawTile_Trees, /* draw_tile_proc */
@@ -671,4 +681,5 @@
NULL, /* get_produced_cargo_proc */
NULL, /* vehicle_enter_tile_proc */
GetFoundation_Trees, /* get_foundation_proc */
+ TerraformTile_Trees, /* terraform_tile_proc */
};
--- a/src/tunnelbridge_cmd.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/tunnelbridge_cmd.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -250,16 +250,10 @@
tileh_end = GetTileSlope(tile_end, &z_end);
if (IsSteepSlope(tileh_start)) z_start += TILE_HEIGHT;
- if (HASBIT(BRIDGE_FULL_LEVELED_FOUNDATION, tileh_start)) {
- z_start += TILE_HEIGHT;
- tileh_start = SLOPE_FLAT;
- }
+ if (HASBIT(BRIDGE_FULL_LEVELED_FOUNDATION, tileh_start)) z_start += TILE_HEIGHT;
if (IsSteepSlope(tileh_end)) z_end += TILE_HEIGHT;
- if (HASBIT(BRIDGE_FULL_LEVELED_FOUNDATION, tileh_end)) {
- z_end += TILE_HEIGHT;
- tileh_end = SLOPE_FLAT;
- }
+ if (HASBIT(BRIDGE_FULL_LEVELED_FOUNDATION, tileh_end)) z_end += TILE_HEIGHT;
if (z_start != z_end) return_cmd_error(STR_5009_LEVEL_LAND_OR_WATER_REQUIRED);
@@ -929,7 +923,7 @@
static const SpriteID tunnel_sprites[2][4] = { { 28, 78, 79, 27 }, { 5, 76, 77, 4 } };
DrawGroundSprite(SPR_TRAMWAY_BASE + tunnel_sprites[rts - ROADTYPES_TRAM][dir], PAL_NONE);
- AddSortableSpriteToDraw(SPR_TRAMWAY_TUNNEL_WIRES + dir, PAL_NONE, ti->x, ti->y, 16, 16, 16, (byte)ti->z);
+ AddSortableSpriteToDraw(SPR_TRAMWAY_TUNNEL_WIRES + dir, PAL_NONE, ti->x, ti->y, 16, 16, 16, (byte)ti->z, HASBIT(_transparent_opt, TO_BUILDINGS));
}
} else if (GetRailType(ti->tile) == RAILTYPE_ELECTRIC) {
DrawCatenary(ti);
@@ -1420,6 +1414,11 @@
return VETSB_CONTINUE;
}
+static CommandCost TerraformTile_TunnelBridge(TileIndex tile, uint32 flags, uint z_new, Slope tileh_new)
+{
+ return DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
+}
+
extern const TileTypeProcs _tile_type_tunnelbridge_procs = {
DrawTile_TunnelBridge, /* draw_tile_proc */
GetSlopeZ_TunnelBridge, /* get_slope_z_proc */
@@ -1434,4 +1433,5 @@
NULL, /* get_produced_cargo_proc */
VehicleEnter_TunnelBridge, /* vehicle_enter_tile_proc */
GetFoundation_TunnelBridge, /* get_foundation_proc */
+ TerraformTile_TunnelBridge, /* terraform_tile_proc */
};
--- a/src/unmovable_cmd.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/unmovable_cmd.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -398,6 +398,14 @@
}
}
+static CommandCost TerraformTile_Unmovable(TileIndex tile, uint32 flags, uint z_new, Slope tileh_new)
+{
+ /* Owned land remains unsold */
+ if (IsOwnedLand(tile) && CheckTileOwnership(tile)) return CommandCost();
+
+ return DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
+}
+
extern const TileTypeProcs _tile_type_unmovable_procs = {
DrawTile_Unmovable, /* draw_tile_proc */
GetSlopeZ_Unmovable, /* get_slope_z_proc */
@@ -412,4 +420,5 @@
NULL, /* get_produced_cargo_proc */
NULL, /* vehicle_enter_tile_proc */
GetFoundation_Unmovable, /* get_foundation_proc */
+ TerraformTile_Unmovable, /* terraform_tile_proc */
};
--- a/src/variables.h Sun Aug 19 14:04:13 2007 +0000
+++ b/src/variables.h Sun Sep 02 11:17:33 2007 +0000
@@ -224,6 +224,8 @@
/** YAPF settings */
YapfSettings yapf;
+ uint8 right_mouse_btn_emulation;
+
uint8 scrollwheel_scrolling;
uint8 scrollwheel_multiplier;
--- a/src/vehicle.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/vehicle.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -91,8 +91,10 @@
bool VehicleNeedsService(const Vehicle *v)
{
- if (v->vehstatus & VS_CRASHED)
- return false; // Crashed vehicles don't need service anymore
+ if (v->vehstatus & (VS_STOPPED | VS_CRASHED)) return false;
+ if (_patches.gotodepot && VehicleHasDepotOrders(v)) return false;
+ if (v->current_order.type == OT_LOADING) return false;
+ if (v->current_order.type == OT_GOTO_DEPOT && v->current_order.flags & OF_HALT_IN_DEPOT) return false;
if (_patches.no_servicing_if_no_breakdowns && _opt.diff.vehicle_breakdowns == 0) {
return EngineHasReplacementForPlayer(GetPlayer(v->owner), v->engine_type, v->group_id); /* Vehicles set for autoreplacing needs to go to a depot even if breakdowns are turned off */
@@ -209,6 +211,9 @@
Vehicle *v;
FOR_ALL_VEHICLES(v) {
+ /* Reinstate the previous pointer */
+ if (v->Next() != NULL) v->Next()->previous = v;
+
v->UpdateDeltaXY(v->direction);
v->fill_percent_te_id = INVALID_TE_ID;
@@ -220,6 +225,17 @@
}
FOR_ALL_VEHICLES(v) {
+ /* Fill the first pointers */
+ if (v->Previous() == NULL) {
+ for (Vehicle *u = v; u != NULL; u = u->Next()) {
+ u->first = v;
+ }
+ }
+ }
+
+ FOR_ALL_VEHICLES(v) {
+ assert(v->first != NULL);
+
if (v->type == VEH_TRAIN && (IsFrontEngine(v) || IsFreeWagon(v))) {
TrainConsistChanged(v);
} else if (v->type == VEH_ROAD && IsRoadVehFront(v)) {
@@ -243,12 +259,12 @@
v->cur_image = v->GetImage(v->direction);
/* The plane's shadow will have the same image as the plane */
- Vehicle *shadow = v->next;
+ Vehicle *shadow = v->Next();
shadow->cur_image = v->cur_image;
/* In the case of a helicopter we will update the rotor sprites */
if (v->subtype == AIR_HELICOPTER) {
- Vehicle *rotor = shadow->next;
+ Vehicle *rotor = shadow->Next();
rotor->cur_image = GetRotorImage(v);
}
@@ -269,6 +285,7 @@
this->left_coord = INVALID_COORD;
this->group_id = DEFAULT_GROUP;
this->fill_percent_te_id = INVALID_TE_ID;
+ this->first = this;
}
/**
@@ -462,86 +479,14 @@
Vehicle *GetLastVehicleInChain(Vehicle *v)
{
- while (v->next != NULL) v = v->next;
+ while (v->Next() != NULL) v = v->Next();
return v;
}
-/** Finds the previous vehicle in a chain, by a brute force search.
- * This old function is REALLY slow because it searches through all vehicles to
- * find the previous vehicle, but if v->first has not been set, then this function
- * will need to be used to find the previous one. This function should never be
- * called by anything but GetFirstVehicleInChain
- */
-static Vehicle *GetPrevVehicleInChain_bruteforce(const Vehicle *v)
-{
- Vehicle *u;
-
- FOR_ALL_VEHICLES(u) if (u->type == v->type && u->next == v) return u;
-
- return NULL;
-}
-
-/** Find the previous vehicle in a chain, by using the v->first cache.
- * While this function is fast, it cannot be used in the GetFirstVehicleInChain
- * function, otherwise you'll end up in an infinite loop call
- */
-Vehicle *GetPrevVehicleInChain(const Vehicle *v)
-{
- Vehicle *u;
- assert(v != NULL);
-
- u = GetFirstVehicleInChain(v);
-
- /* Check to see if this is the first */
- if (v == u) return NULL;
-
- for (; u->next != v; u = u->next) assert(u->next != NULL);
-
- return u;
-}
-
-/** Finds the first vehicle in a chain.
- * This function reads out the v->first cache. Should the cache be dirty,
- * it determines the first vehicle in a chain, and updates the cache.
- */
-Vehicle *GetFirstVehicleInChain(const Vehicle *v)
-{
- Vehicle* u;
-
- assert(v != NULL);
- assert(v->type == VEH_TRAIN || v->type == VEH_ROAD);
-
- if (v->first != NULL) {
- if (v->type == VEH_TRAIN) {
- if (IsFrontEngine(v->first) || IsFreeWagon(v->first)) return v->first;
- } else {
- if (IsRoadVehFront(v->first)) return v->first;
- }
-
- DEBUG(misc, 0, "v->first cache faulty. We shouldn't be here, rebuilding cache!");
- }
-
- /* It is the fact (currently) that newly built vehicles do not have
- * their ->first pointer set. When this is the case, go up to the
- * first engine and set the pointers correctly. Also the first pointer
- * is not saved in a savegame, so this has to be fixed up after loading */
-
- /* Find the 'locomotive' or the first wagon in a chain */
- while ((u = GetPrevVehicleInChain_bruteforce(v)) != NULL) v = u;
-
- /* Set the first pointer of all vehicles in that chain to the first wagon */
- if ((v->type == VEH_TRAIN && (IsFrontEngine(v) || IsFreeWagon(v))) ||
- (v->type == VEH_ROAD && IsRoadVehFront(v))) {
- for (u = (Vehicle *)v; u != NULL; u = u->next) u->first = (Vehicle *)v;
- }
-
- return (Vehicle*)v;
-}
-
uint CountVehiclesInChain(const Vehicle* v)
{
uint count = 0;
- do count++; while ((v = v->next) != NULL);
+ do count++; while ((v = v->Next()) != NULL);
return count;
}
@@ -562,8 +507,10 @@
}
}
-Vehicle::~Vehicle()
+void Vehicle::PreDestructor()
{
+ if (CleaningPool()) return;
+
if (IsValidStationID(this->last_station_visited)) {
GetStation(this->last_station_visited)->loading_vehicles.remove(this);
@@ -579,9 +526,6 @@
if (this->IsPrimaryVehicle()) DecreaseGroupNumVehicle(this->group_id);
}
- DeleteVehicleNews(this->index, INVALID_STRING_ID);
-
- this->QuickFree();
if (this->type == VEH_ROAD) ClearSlot(this);
if (this->type != VEH_TRAIN || (this->type == VEH_TRAIN && (IsFrontEngine(this) || IsFreeWagon(this)))) {
@@ -589,26 +533,32 @@
}
this->cargo.Truncate(0);
- UpdateVehiclePosHash(this, INVALID_COORD, 0);
- this->next_hash = NULL;
- this->next_new_hash = NULL;
- if (IsPlayerBuildableVehicleType(this)) DeleteVehicleOrders(this);
+ DeleteVehicleOrders(this);
/* Now remove any artic part. This will trigger an other
* destroy vehicle, which on his turn can remove any
* other artic parts. */
if ((this->type == VEH_TRAIN && EngineHasArticPart(this)) || (this->type == VEH_ROAD && RoadVehHasArticPart(this))) {
- delete this->next;
+ delete this->Next();
}
+}
+
+Vehicle::~Vehicle()
+{
+ DeleteName(this->string_id);
+
+ if (CleaningPool()) return;
+
+ this->SetNext(NULL);
+ UpdateVehiclePosHash(this, INVALID_COORD, 0);
+ this->next_hash = NULL;
+ this->next_new_hash = NULL;
+
+ DeleteVehicleNews(this->index, INVALID_STRING_ID);
new (this) InvalidVehicle();
}
-void Vehicle::QuickFree()
-{
- DeleteName(this->string_id);
-}
-
/**
* Deletes all vehicles in a chain.
* @param v The first vehicle in the chain.
@@ -622,7 +572,7 @@
do {
Vehicle *u = v;
- v = v->next;
+ v = v->Next();
delete u;
} while (v != NULL);
}
@@ -1330,7 +1280,7 @@
SndPlayVehicleFx(SND_31_EXTRACT, v);
tile = TileVirtXY(v->x_pos, v->y_pos);
- if (IsTileType(tile, MP_INDUSTRY) && GetIndustryGfx(tile) == 0xA2) AddAnimatedTile(tile);
+ if (IsTileType(tile, MP_INDUSTRY) && GetIndustryGfx(tile) == GFX_BUBBLE_CATCHER) AddAnimatedTile(tile);
}
v->engine_type = et;
@@ -1684,7 +1634,7 @@
CommandCost cost;
VehicleType vehicle_type = (VehicleType)GB(p1, 0, 8);
- if (!IsTileOwner(tile, _current_player)) return CMD_ERROR;
+ if (!IsDepotTile(tile) || !IsTileOwner(tile, _current_player)) return CMD_ERROR;
/* Get the list of vehicles in the depot */
BuildDepotVehicleList(vehicle_type, tile, &vl, &engine_list_length, &engine_count, NULL, NULL, NULL);
@@ -1696,7 +1646,7 @@
CommandCost ret;
/* Ensure that the vehicle completely in the depot */
- if (!IsVehicleInDepot(v)) continue;
+ if (!v->IsInDepot()) continue;
x = v->x_pos;
y = v->y_pos;
@@ -1773,7 +1723,7 @@
int veh_counter = 0;
do {
veh_counter++;
- } while ((v = v->next) != NULL);
+ } while ((v = v->Next()) != NULL);
if (!Vehicle::AllocateList(NULL, veh_counter)) {
return_cmd_error(STR_00E1_TOO_MANY_VEHICLES_IN_GAME);
@@ -1857,7 +1807,7 @@
if (w->type == VEH_TRAIN && EngineHasArticPart(w)) {
w = GetNextArticPart(w);
} else if (w->type == VEH_ROAD && RoadVehHasArticPart(w)) {
- w = w->next;
+ w = w->Next();
} else {
break;
}
@@ -1872,7 +1822,7 @@
if (v->type == VEH_TRAIN && EngineHasArticPart(v)) {
v = GetNextArticPart(v);
} else if (v->type == VEH_ROAD && RoadVehHasArticPart(v)) {
- v = v->next;
+ v = v->Next();
} else {
break;
}
@@ -1954,7 +1904,7 @@
case VEH_ROAD:
FOR_ALL_VEHICLES(v) {
- if (v->tile == tile && v->type == VEH_ROAD && IsRoadVehInDepot(v) && IsRoadVehFront(v)) {
+ if (v->tile == tile && v->type == VEH_ROAD && v->IsInDepot() && IsRoadVehFront(v)) {
if (*engine_count == *engine_list_length) ExtendVehicleListSize((const Vehicle***)engine_list, engine_list_length, 25);
(*engine_list)[(*engine_count)++] = v;
}
@@ -1963,7 +1913,7 @@
case VEH_SHIP:
FOR_ALL_VEHICLES(v) {
- if (v->tile == tile && v->type == VEH_SHIP && IsShipInDepot(v)) {
+ if (v->tile == tile && v->type == VEH_SHIP && v->IsInDepot()) {
if (*engine_count == *engine_list_length) ExtendVehicleListSize((const Vehicle***)engine_list, engine_list_length, 25);
(*engine_list)[(*engine_count)++] = v;
}
@@ -1974,7 +1924,7 @@
FOR_ALL_VEHICLES(v) {
if (v->tile == tile &&
v->type == VEH_AIRCRAFT && IsNormalAircraft(v) &&
- v->vehstatus & VS_HIDDEN) {
+ v->IsInDepot()) {
if (*engine_count == *engine_list_length) ExtendVehicleListSize((const Vehicle***)engine_list, engine_list_length, 25);
(*engine_list)[(*engine_count)++] = v;
}
@@ -2129,18 +2079,6 @@
return (flags & DC_EXEC) ? CommandCost() : CMD_ERROR;
}
-bool IsVehicleInDepot(const Vehicle *v)
-{
- switch (v->type) {
- case VEH_TRAIN: return CheckTrainInDepot(v, false) != -1;
- case VEH_ROAD: return IsRoadVehInDepot(v);
- case VEH_SHIP: return IsShipInDepot(v);
- case VEH_AIRCRAFT: return IsAircraftInHangar(v);
- default: NOT_REACHED();
- }
- return false;
-}
-
/**
* Calculates how full a vehicle is.
* @param v The Vehicle to check. For trains, use the first engine.
@@ -2161,7 +2099,7 @@
const Station *st = GetStation(v->last_station_visited);
/* Count up max and used */
- for (; v != NULL; v = v->next) {
+ for (; v != NULL; v = v->Next()) {
count += v->cargo.Count();
max += v->cargo_cap;
if (v->cargo_cap != 0) {
@@ -2187,14 +2125,14 @@
switch (v->type) {
case VEH_TRAIN:
InvalidateWindowClasses(WC_TRAINS_LIST);
- if (!IsFrontEngine(v)) v = GetFirstVehicleInChain(v);
+ if (!IsFrontEngine(v)) v = v->First();
UpdateSignalsOnSegment(v->tile, GetRailDepotDirection(v->tile));
v->load_unload_time_rem = 0;
break;
case VEH_ROAD:
InvalidateWindowClasses(WC_ROADVEH_LIST);
- if (!IsRoadVehFront(v)) v = GetFirstVehicleInChain(v);
+ if (!IsRoadVehFront(v)) v = v->First();
break;
case VEH_SHIP:
@@ -2456,14 +2394,14 @@
return TrackDirectionToTrackdir(FindFirstTrack(v->u.rail.track), v->direction);
case VEH_SHIP:
- if (IsShipInDepot(v))
+ if (v->IsInDepot())
// We'll assume the ship is facing outwards
return DiagdirToDiagTrackdir(GetShipDepotDirection(v->tile));
return TrackDirectionToTrackdir(FindFirstTrack(v->u.ship.state), v->direction);
case VEH_ROAD:
- if (IsRoadVehInDepot(v)) // We'll assume the road vehicle is facing outwards
+ if (v->IsInDepot()) // We'll assume the road vehicle is facing outwards
return DiagdirToDiagTrackdir(GetRoadDepotDirection(v->tile));
if (IsStandardRoadStopTile(v->tile)) // We'll assume the road vehicle is facing outwards
@@ -2550,6 +2488,7 @@
{
assert(IsPlayerBuildableVehicleType(type));
+ if (!IsValidPlayer(_current_player)) return false;
if (_patches.always_build_infrastructure) return true;
UnitID max;
@@ -2731,8 +2670,15 @@
static Money _cargo_feeder_share;
static uint32 _cargo_loaded_at_xy;
+/**
+ * Make it possible to make the saveload tables "friends" of other classes.
+ * @param vt the vehicle type. Can be VEH_END for the common vehicle description data
+ * @return the saveload description
+ */
+const SaveLoad *GetVehicleDescription(VehicleType vt)
+{
/** Save and load of vehicles */
-extern const SaveLoad _common_veh_desc[] = {
+static const SaveLoad _common_veh_desc[] = {
SLE_VAR(Vehicle, subtype, SLE_UINT8),
SLE_REF(Vehicle, next, REF_VEHICLE_OLD),
@@ -2855,7 +2801,7 @@
static const SaveLoad _train_desc[] = {
SLE_WRITEBYTE(Vehicle, type, VEH_TRAIN),
- SLE_INCLUDEX(0, INC_VEHICLE_COMMON),
+ SLE_VEH_INCLUDEX(),
SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleRail, crash_anim_pos), SLE_UINT16),
SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleRail, force_proceed), SLE_UINT8),
SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleRail, railtype), SLE_UINT8),
@@ -2873,7 +2819,7 @@
static const SaveLoad _roadveh_desc[] = {
SLE_WRITEBYTE(Vehicle, type, VEH_ROAD),
- SLE_INCLUDEX(0, INC_VEHICLE_COMMON),
+ SLE_VEH_INCLUDEX(),
SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleRoad, state), SLE_UINT8),
SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleRoad, frame), SLE_UINT8),
SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleRoad, blocked_ctr), SLE_UINT16),
@@ -2893,7 +2839,7 @@
static const SaveLoad _ship_desc[] = {
SLE_WRITEBYTE(Vehicle, type, VEH_SHIP),
- SLE_INCLUDEX(0, INC_VEHICLE_COMMON),
+ SLE_VEH_INCLUDEX(),
SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleShip, state), SLE_UINT8),
/* reserve extra space in savegame here. (currently 16 bytes) */
@@ -2904,7 +2850,7 @@
static const SaveLoad _aircraft_desc[] = {
SLE_WRITEBYTE(Vehicle, type, VEH_AIRCRAFT),
- SLE_INCLUDEX(0, INC_VEHICLE_COMMON),
+ SLE_VEH_INCLUDEX(),
SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleAir, crashed_counter), SLE_UINT16),
SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleAir, pos), SLE_UINT8),
@@ -2995,8 +2941,12 @@
_aircraft_desc,
_special_desc,
_disaster_desc,
+ _common_veh_desc,
};
+ return _veh_descs[vt];
+}
+
/** Will be called when the vehicles need to be saved. */
static void Save_VEHS()
{
@@ -3004,7 +2954,7 @@
/* Write the vehicles */
FOR_ALL_VEHICLES(v) {
SlSetArrayIndex(v->index);
- SlObject(v, _veh_descs[v->type]);
+ SlObject(v, GetVehicleDescription(v->type));
}
}
@@ -3031,7 +2981,7 @@
default: NOT_REACHED();
}
- SlObject(v, _veh_descs[vtype]);
+ SlObject(v, GetVehicleDescription(vtype));
if (_cargo_count != 0 && IsPlayerBuildableVehicleType(v)) {
/* Don't construct the packet with station here, because that'll fail with old savegames */
@@ -3164,6 +3114,27 @@
InvalidateVehicleOrder(this);
}
+void Vehicle::SetNext(Vehicle *next)
+{
+ if (this->next != NULL) {
+ /* We had an old next vehicle. Update the first and previous pointers */
+ for (Vehicle *v = this->next; v != NULL; v = v->Next()) {
+ v->first = this->next;
+ }
+ this->next->previous = NULL;
+ }
+
+ this->next = next;
+
+ if (this->next != NULL) {
+ /* A new next vehicle. Update the first and previous pointers */
+ if (this->next->previous != NULL) this->next->previous->next = NULL;
+ this->next->previous = this;
+ for (Vehicle *v = this->next; v != NULL; v = v->Next()) {
+ v->first = this->first;
+ }
+ }
+}
void SpecialVehicle::UpdateDeltaXY(Direction direction)
{
--- a/src/vehicle.h Sun Aug 19 14:04:13 2007 +0000
+++ b/src/vehicle.h Sun Sep 02 11:17:33 2007 +0000
@@ -218,13 +218,23 @@
struct Vehicle;
DECLARE_OLD_POOL(Vehicle, Vehicle, 9, 125)
+struct SaveLoad;
+const SaveLoad *GetVehicleDescription(VehicleType vt);
+void AfterLoadVehicles();
+
struct Vehicle : PoolItem<Vehicle, VehicleID, &_Vehicle_pool> {
VehicleTypeByte type; ///< Type of vehicle
byte subtype; // subtype (Filled with values from EffectVehicles/TrainSubTypes/AircraftSubTypes)
- Vehicle *next; // next
+private:
+ Vehicle *next; // pointer to the next vehicle in the chain
+ Vehicle *previous; // NOSAVE: pointer to the previous vehicle in the chain
Vehicle *first; // NOSAVE: pointer to the first vehicle in the chain
- Vehicle *depot_list; //NOSAVE: linked list to tell what vehicles entered a depot during the last tick. Used by autoreplace
+public:
+ friend const SaveLoad *GetVehicleDescription(VehicleType vt); // So we can use private/protected variables in the saveload code
+ friend void AfterLoadVehicles();
+
+ Vehicle *depot_list; // NOSAVE: linked list to tell what vehicles entered a depot during the last tick. Used by autoreplace
StringID string_id; // Displayed string
@@ -347,11 +357,11 @@
/** Create a new vehicle */
Vehicle();
+ /** Destroy all stuff that (still) needs the virtual functions to work properly */
+ void PreDestructor();
/** We want to 'destruct' the right class. */
virtual ~Vehicle();
- void QuickFree();
-
void BeginLoading();
void LeaveStation();
@@ -415,11 +425,77 @@
virtual int GetImage(Direction direction) const { return 0; }
/**
+ * Gets the speed in mph that can be sent into SetDParam for string processing.
+ * @return the vehicle's speed
+ */
+ virtual int GetDisplaySpeed() const { return 0; }
+
+ /**
+ * Gets the maximum speed in mph that can be sent into SetDParam for string processing.
+ * @return the vehicle's maximum speed
+ */
+ virtual int GetDisplayMaxSpeed() const { return 0; }
+
+ /**
+ * Gets the running cost of a vehicle
+ * @return the vehicle's running cost
+ */
+ virtual Money GetRunningCost() const { return 0; }
+
+ /**
+ * Check whether the vehicle is in the depot.
+ * @return true if and only if the vehicle is in the depot.
+ */
+ virtual bool IsInDepot() const { return false; }
+
+ /**
+ * Check whether the vehicle is in the depot *and* stopped.
+ * @return true if and only if the vehicle is in the depot and stopped.
+ */
+ virtual bool IsStoppedInDepot() const { return this->IsInDepot() && (this->vehstatus & VS_STOPPED) != 0; }
+
+ /**
* Calls the tick handler of the vehicle
*/
virtual void Tick() {};
- bool IsValid() const { return this->type != VEH_INVALID; }
+ /**
+ * Gets the running cost of a vehicle that can be sent into SetDParam for string processing.
+ * @return the vehicle's running cost
+ */
+ Money GetDisplayRunningCost() const { return (this->GetRunningCost() >> 8); }
+
+ /**
+ * Is this vehicle a valid vehicle?
+ * @return true if and only if the vehicle is valid.
+ */
+ inline bool IsValid() const { return this->type != VEH_INVALID; }
+
+ /**
+ * Set the next vehicle of this vehicle.
+ * @param next the next vehicle. NULL removes the next vehicle.
+ */
+ void SetNext(Vehicle *next);
+
+ /**
+ * Get the next vehicle of this vehicle.
+ * @note articulated parts are also counted as vehicles.
+ * @return the next vehicle or NULL when there isn't a next vehicle.
+ */
+ inline Vehicle *Next() const { return this->next; }
+
+ /**
+ * Get the previous vehicle of this vehicle.
+ * @note articulated parts are also counted as vehicles.
+ * @return the previous vehicle or NULL when there isn't a previous vehicle.
+ */
+ inline Vehicle *Previous() const { return this->previous; }
+
+ /**
+ * Get the first vehicle of this vehicle chain.
+ * @return the first vehicle of the chain.
+ */
+ inline Vehicle *First() const { return this->first; }
};
/**
@@ -496,10 +572,7 @@
void VehicleServiceInDepot(Vehicle *v);
void VehiclePositionChanged(Vehicle *v);
-void AfterLoadVehicles();
Vehicle *GetLastVehicleInChain(Vehicle *v);
-Vehicle *GetPrevVehicleInChain(const Vehicle *v);
-Vehicle *GetFirstVehicleInChain(const Vehicle *v);
uint CountVehiclesInChain(const Vehicle *v);
bool IsEngineCountable(const Vehicle *v);
void DeleteVehicleChain(Vehicle *v);
@@ -543,22 +616,17 @@
void BeginVehicleMove(Vehicle *v);
void EndVehicleMove(Vehicle *v);
-void ShowAircraftViewWindow(const Vehicle* v);
-
UnitID GetFreeUnitNumber(VehicleType type);
void TrainConsistChanged(Vehicle *v);
void TrainPowerChanged(Vehicle *v);
Money GetTrainRunningCost(const Vehicle *v);
-int CheckTrainStoppedInDepot(const Vehicle *v);
-
bool VehicleNeedsService(const Vehicle *v);
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);
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, GroupID id_g);
@@ -566,6 +634,8 @@
CommandCost MaybeReplaceVehicle(Vehicle *v, bool check, bool display_costs);
bool CanBuildVehicleInfrastructure(VehicleType type);
+void CcCloneVehicle(bool success, TileIndex tile, uint32 p1, uint32 p2);
+
/* Flags to add to p2 for goto depot commands */
/* Note: bits 8-10 are used for VLW flags */
enum {
@@ -599,7 +669,7 @@
Direction GetDirectionTowards(const Vehicle *v, int x, int y);
#define BEGIN_ENUM_WAGONS(v) do {
-#define END_ENUM_WAGONS(v) } while ((v = v->next) != NULL);
+#define END_ENUM_WAGONS(v) } while ((v = v->Next()) != NULL);
static inline VehicleID GetMaxVehicleIndex()
{
--- a/src/vehicle_gui.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/vehicle_gui.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -261,7 +261,7 @@
}
}
}
- } while (v->type == VEH_TRAIN && (u = u->next) != NULL && num_lines < max_lines);
+ } while (v->type == VEH_TRAIN && (u = u->Next()) != NULL && num_lines < max_lines);
list->num_lines = num_lines;
list->items = refit;
@@ -475,14 +475,6 @@
return DrawStringMultiLine(x, y, STR_02BD, w);
}
-/** Count the number of bits that are set in a mask */
-static uint CountBits(uint32 mask)
-{
- uint c = 0;
- for (; mask != 0; mask >>= 1) if (HASBIT(mask, 0)) c++;
- return c;
-}
-
/** Display list of cargo types of the engine, for the purchase information window */
uint ShowRefitOptionsList(int x, int y, uint w, EngineID engine)
{
@@ -493,7 +485,7 @@
char *b = _userstring;
/* Draw nothing if the engine is not refittable */
- if (CountBits(cmask) <= 1) return 0;
+ if (COUNTBITS(cmask) <= 1) return 0;
b = InlineString(b, STR_PURCHASE_INFO_REFITTABLE_TO);
@@ -503,7 +495,7 @@
} else {
/* Check if we are able to refit to more cargo types and unable to. If
* so, invert the cargo types to list those that we can't refit to. */
- if (CountBits(cmask ^ lmask) < CountBits(cmask)) {
+ if (COUNTBITS(cmask ^ lmask) < COUNTBITS(cmask)) {
cmask ^= lmask;
b = InlineString(b, STR_PURCHASE_INFO_ALL_BUT);
}
@@ -617,8 +609,8 @@
memset(cargoa, 0, sizeof(cargoa));
memset(cargob, 0, sizeof(cargob));
- for (v = va; v != NULL; v = v->next) cargoa[v->cargo_type] += v->cargo_cap;
- for (v = vb; v != NULL; v = v->next) cargob[v->cargo_type] += v->cargo_cap;
+ for (v = va; v != NULL; v = v->Next()) cargoa[v->cargo_type] += v->cargo_cap;
+ for (v = vb; v != NULL; v = v->Next()) cargob[v->cargo_type] += v->cargo_cap;
for (CargoID i = 0; i < NUM_CARGO; i++) {
r = cargoa[i] - cargob[i];
@@ -653,12 +645,12 @@
do {
if (RailVehInfo(ua->engine_type)->max_speed != 0)
max_speed_a = min(max_speed_a, RailVehInfo(ua->engine_type)->max_speed);
- } while ((ua = ua->next) != NULL);
+ } while ((ua = ua->Next()) != NULL);
do {
if (RailVehInfo(ub->engine_type)->max_speed != 0)
max_speed_b = min(max_speed_b, RailVehInfo(ub->engine_type)->max_speed);
- } while ((ub = ub->next) != NULL);
+ } while ((ub = ub->Next()) != NULL);
r = max_speed_a - max_speed_b;
} else {
@@ -688,8 +680,8 @@
const Vehicle *u;
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;
+ for (u = va; u != NULL; u = u->Next()) valuea += u->value;
+ for (u = vb; u != NULL; u = u->Next()) valueb += u->value;
int r = ClampToI32(valuea - valueb);
@@ -1021,7 +1013,7 @@
if (w->resize.step_height == PLY_WND_PRC__SIZE_OF_ROW_BIG) DrawSmallOrderList(v, x + 138, y);
- if (IsVehicleInDepot(v)) {
+ if (v->IsInDepot()) {
str = STR_021F;
} else {
str = (v->age > v->max_age - 366) ? STR_00E3 : STR_00E2;
@@ -1080,13 +1072,7 @@
v = vl->sort_list[id_v];
- switch (vl->vehicle_type) {
- case VEH_TRAIN: ShowTrainViewWindow(v); break;
- case VEH_ROAD: ShowRoadVehViewWindow(v); break;
- case VEH_SHIP: ShowShipViewWindow(v); break;
- case VEH_AIRCRAFT: ShowAircraftViewWindow(v); break;
- default: NOT_REACHED(); break;
- }
+ ShowVehicleViewWindow(v);
} break;
case VLW_WIDGET_AVAILABLE_VEHICLES:
@@ -1285,3 +1271,534 @@
}
ShowVehicleListWindowLocal(player, VLW_DEPOT_LIST, vehicle_type, depot_airport_index);
}
+
+
+/* Unified vehicle GUI - Vehicle View Window */
+
+/** Constants of vehicle view widget indices */
+enum VehicleViewWindowWidgets {
+ VVW_WIDGET_CLOSEBOX = 0,
+ VVW_WIDGET_CAPTION,
+ VVW_WIDGET_STICKY,
+ VVW_WIDGET_PANEL,
+ VVW_WIDGET_VIEWPORT,
+ VVW_WIDGET_START_STOP_VEH,
+ VVW_WIDGET_CENTER_MAIN_VIEH,
+ VVW_WIDGET_GOTO_DEPOT,
+ VVW_WIDGET_REFIT_VEH,
+ VVW_WIDGET_SHOW_ORDERS,
+ VVW_WIDGET_SHOW_DETAILS,
+ VVW_WIDGET_CLONE_VEH,
+ VVW_WIDGET_EMPTY_BOTTOM_RIGHT,
+ VVW_WIDGET_RESIZE,
+ VVW_WIDGET_TURN_AROUND,
+ VVW_WIDGET_FORCE_PROCEED,
+};
+
+/** Vehicle view widgets. */
+static const Widget _vehicle_view_widgets[] = {
+ { WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW }, // VVW_WIDGET_CLOSEBOX
+ { WWT_CAPTION, RESIZE_RIGHT, 14, 11, 237, 0, 13, 0x0 /* filled later */, STR_018C_WINDOW_TITLE_DRAG_THIS }, // VVW_WIDGET_CAPTION
+ { WWT_STICKYBOX, RESIZE_LR, 14, 238, 249, 0, 13, 0x0, STR_STICKY_BUTTON }, // VVW_WIDGET_STICKY
+ { WWT_PANEL, RESIZE_RB, 14, 0, 231, 14, 103, 0x0, STR_NULL }, // VVW_WIDGET_PANEL
+ { WWT_INSET, RESIZE_RB, 14, 2, 229, 16, 101, 0x0, STR_NULL }, // VVW_WIDGET_VIEWPORT
+ { WWT_PUSHBTN, RESIZE_RTB, 14, 0, 237, 104, 115, 0x0, 0x0 /* filled later */ }, // VVW_WIDGET_START_STOP_VEH
+ { WWT_PUSHIMGBTN, RESIZE_LR, 14, 232, 249, 14, 31, SPR_CENTRE_VIEW_VEHICLE, 0x0 /* filled later */ }, // VVW_WIDGET_CENTER_MAIN_VIEH
+ { WWT_PUSHIMGBTN, RESIZE_LR, 14, 232, 249, 32, 49, 0x0 /* filled later */, 0x0 /* filled later */ }, // VVW_WIDGET_GOTO_DEPOT
+ { WWT_PUSHIMGBTN, RESIZE_LR, 14, 232, 249, 50, 67, SPR_REFIT_VEHICLE, 0x0 /* filled later */ }, // VVW_WIDGET_REFIT_VEH
+ { WWT_PUSHIMGBTN, RESIZE_LR, 14, 232, 249, 68, 85, SPR_SHOW_ORDERS, 0x0 /* filled later */ }, // VVW_WIDGET_SHOW_ORDERS
+ { WWT_PUSHIMGBTN, RESIZE_LR, 14, 232, 249, 86, 103, SPR_SHOW_VEHICLE_DETAILS, 0x0 /* filled later */ }, // VVW_WIDGET_SHOW_DETAILS
+ { WWT_PUSHIMGBTN, RESIZE_LR, 14, 232, 249, 32, 49, 0x0 /* filled later */, 0x0 /* filled later */ }, // VVW_WIDGET_CLONE_VEH
+ { WWT_PANEL, RESIZE_LRB, 14, 232, 249, 104, 103, 0x0, STR_NULL }, // VVW_WIDGET_EMPTY_BOTTOM_RIGHT
+ { WWT_RESIZEBOX, RESIZE_LRTB, 14, 238, 249, 104, 115, 0x0, STR_NULL }, // VVW_WIDGET_RESIZE
+ { WWT_PUSHIMGBTN, RESIZE_LR, 14, 232, 249, 50, 67, SPR_FORCE_VEHICLE_TURN, STR_9020_FORCE_VEHICLE_TO_TURN_AROUND }, // VVW_WIDGET_TURN_AROUND
+ { WWT_PUSHIMGBTN, RESIZE_LR, 14, 232, 249, 50, 67, SPR_IGNORE_SIGNALS, STR_884A_FORCE_TRAIN_TO_PROCEED }, // VVW_WIDGET_FORCE_PROCEED
+{ WIDGETS_END},
+};
+
+
+static void VehicleViewWndProc(Window *w, WindowEvent *e);
+
+/** Vehicle view window descriptor for all vehicles but trains. */
+static const WindowDesc _vehicle_view_desc = {
+ WDP_AUTO, WDP_AUTO, 250, 116, 250, 116,
+ WC_VEHICLE_VIEW, WC_NONE,
+ WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE,
+ _vehicle_view_widgets,
+ VehicleViewWndProc
+};
+
+/** Vehicle view window descriptor for trains. Only minimum_height and
+ * default_height are different for train view.
+ */
+static const WindowDesc _train_view_desc = {
+ WDP_AUTO, WDP_AUTO, 250, 134, 250, 134,
+ WC_VEHICLE_VIEW, WC_NONE,
+ WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE,
+ _vehicle_view_widgets,
+ VehicleViewWndProc
+};
+
+
+/* Just to make sure, nobody has changed the vehicle type constants, as we are
+ using them for array indexing in a number of places here. */
+assert_compile(VEH_TRAIN == 0);
+assert_compile(VEH_ROAD == 1);
+assert_compile(VEH_SHIP == 2);
+assert_compile(VEH_AIRCRAFT == 3);
+
+/** Zoom levels for vehicle views indexed by vehicle type. */
+static const ZoomLevel _vehicle_view_zoom_levels[] = {
+ ZOOM_LVL_TRAIN,
+ ZOOM_LVL_ROADVEH,
+ ZOOM_LVL_SHIP,
+ ZOOM_LVL_AIRCRAFT,
+};
+
+/* Constants for geometry of vehicle view viewport */
+static const int VV_VIEWPORT_X = 3;
+static const int VV_VIEWPORT_Y = 17;
+static const int VV_INITIAL_VIEWPORT_WIDTH = 226;
+static const int VV_INITIAL_VIEWPORT_HEIGHT = 84;
+static const int VV_INITIAL_VIEWPORT_HEIGHT_TRAIN = 102;
+
+/** Shows the vehicle view window of the given vehicle. */
+void ShowVehicleViewWindow(const Vehicle *v)
+{
+ Window *w = AllocateWindowDescFront((v->type == VEH_TRAIN) ? &_train_view_desc : &_vehicle_view_desc, v->index);
+
+ if (w != NULL) {
+ w->caption_color = v->owner;
+ AssignWindowViewport(w, VV_VIEWPORT_X, VV_VIEWPORT_Y, VV_INITIAL_VIEWPORT_WIDTH,
+ (v->type == VEH_TRAIN) ? VV_INITIAL_VIEWPORT_HEIGHT_TRAIN : VV_INITIAL_VIEWPORT_HEIGHT,
+ w->window_number | (1 << 31), _vehicle_view_zoom_levels[v->type]);
+ }
+}
+
+/** Initialize a newly created vehicle view window */
+static void CreateVehicleViewWindow(Window *w)
+{
+ const Vehicle *v = GetVehicle(w->window_number);
+
+ /*
+ * fill in data and tooltip codes for the widgets and
+ * move some of the buttons for trains
+ */
+ switch (v->type) {
+ case VEH_TRAIN:
+ w->widget[VVW_WIDGET_CAPTION].data = STR_882E;
+
+ w->widget[VVW_WIDGET_START_STOP_VEH].tooltips = STR_8846_CURRENT_TRAIN_ACTION_CLICK;
+
+ w->widget[VVW_WIDGET_CENTER_MAIN_VIEH].tooltips = STR_8848_CENTER_MAIN_VIEW_ON_TRAIN;
+
+ w->widget[VVW_WIDGET_GOTO_DEPOT].data = SPR_SEND_TRAIN_TODEPOT;
+ w->widget[VVW_WIDGET_GOTO_DEPOT].tooltips = STR_8849_SEND_TRAIN_TO_DEPOT;
+
+ w->widget[VVW_WIDGET_REFIT_VEH].tooltips = STR_RAIL_REFIT_VEHICLE_TO_CARRY;
+
+ w->widget[VVW_WIDGET_SHOW_ORDERS].tooltips = STR_8847_SHOW_TRAIN_S_ORDERS;
+
+ w->widget[VVW_WIDGET_SHOW_DETAILS].tooltips = STR_884C_SHOW_TRAIN_DETAILS;
+
+ w->widget[VVW_WIDGET_CLONE_VEH].data = SPR_CLONE_TRAIN;
+ w->widget[VVW_WIDGET_CLONE_VEH].tooltips = STR_CLONE_TRAIN_INFO;
+
+ w->widget[VVW_WIDGET_TURN_AROUND].tooltips = STR_884B_REVERSE_DIRECTION_OF_TRAIN;
+
+
+ /* due to more buttons we must modify the layout a bit for trains */
+ w->widget[VVW_WIDGET_PANEL].bottom = 121;
+ w->widget[VVW_WIDGET_VIEWPORT].bottom = 119;
+
+ w->widget[VVW_WIDGET_START_STOP_VEH].top = 122;
+ w->widget[VVW_WIDGET_START_STOP_VEH].bottom = 133;
+
+ w->widget[VVW_WIDGET_REFIT_VEH].top = 68;
+ w->widget[VVW_WIDGET_REFIT_VEH].bottom = 85;
+
+ w->widget[VVW_WIDGET_SHOW_ORDERS].top = 86;
+ w->widget[VVW_WIDGET_SHOW_ORDERS].bottom = 103;
+
+ w->widget[VVW_WIDGET_SHOW_DETAILS].top = 104;
+ w->widget[VVW_WIDGET_SHOW_DETAILS].bottom = 121;
+
+ w->widget[VVW_WIDGET_EMPTY_BOTTOM_RIGHT].top = 122;
+ w->widget[VVW_WIDGET_EMPTY_BOTTOM_RIGHT].bottom = 121;
+
+ w->widget[VVW_WIDGET_RESIZE].top = 122;
+ w->widget[VVW_WIDGET_RESIZE].bottom = 133;
+
+ w->widget[VVW_WIDGET_TURN_AROUND].top = 68;
+ w->widget[VVW_WIDGET_TURN_AROUND].bottom = 85;
+ break;
+
+ case VEH_ROAD:
+ w->widget[VVW_WIDGET_CAPTION].data = STR_9002;
+
+ w->widget[VVW_WIDGET_START_STOP_VEH].tooltips = STR_901C_CURRENT_VEHICLE_ACTION;
+
+ w->widget[VVW_WIDGET_CENTER_MAIN_VIEH].tooltips = STR_901E_CENTER_MAIN_VIEW_ON_VEHICLE;
+
+ w->widget[VVW_WIDGET_GOTO_DEPOT].data = SPR_SEND_ROADVEH_TODEPOT;
+ w->widget[VVW_WIDGET_GOTO_DEPOT].tooltips = STR_901F_SEND_VEHICLE_TO_DEPOT;
+
+ w->widget[VVW_WIDGET_REFIT_VEH].tooltips = STR_REFIT_ROAD_VEHICLE_TO_CARRY;
+
+ w->widget[VVW_WIDGET_SHOW_ORDERS].tooltips = STR_901D_SHOW_VEHICLE_S_ORDERS;
+
+ w->widget[VVW_WIDGET_SHOW_DETAILS].tooltips = STR_9021_SHOW_ROAD_VEHICLE_DETAILS;
+
+ w->widget[VVW_WIDGET_CLONE_VEH].data = SPR_CLONE_ROADVEH;
+ w->widget[VVW_WIDGET_CLONE_VEH].tooltips = STR_CLONE_ROAD_VEHICLE_INFO;
+
+ SetWindowWidgetHiddenState(w, VVW_WIDGET_FORCE_PROCEED, true);
+ break;
+
+ case VEH_SHIP:
+ w->widget[VVW_WIDGET_CAPTION].data = STR_980F;
+
+ w->widget[VVW_WIDGET_START_STOP_VEH].tooltips = STR_9827_CURRENT_SHIP_ACTION_CLICK;
+
+ w->widget[VVW_WIDGET_CENTER_MAIN_VIEH].tooltips = STR_9829_CENTER_MAIN_VIEW_ON_SHIP;
+
+ w->widget[VVW_WIDGET_GOTO_DEPOT].data = SPR_SEND_SHIP_TODEPOT;
+ w->widget[VVW_WIDGET_GOTO_DEPOT].tooltips = STR_982A_SEND_SHIP_TO_DEPOT;
+
+ w->widget[VVW_WIDGET_REFIT_VEH].tooltips = STR_983A_REFIT_CARGO_SHIP_TO_CARRY;
+
+ w->widget[VVW_WIDGET_SHOW_ORDERS].tooltips = STR_9828_SHOW_SHIP_S_ORDERS;
+
+ w->widget[VVW_WIDGET_SHOW_DETAILS].tooltips = STR_982B_SHOW_SHIP_DETAILS;
+
+ w->widget[VVW_WIDGET_CLONE_VEH].data = SPR_CLONE_SHIP;
+ w->widget[VVW_WIDGET_CLONE_VEH].tooltips = STR_CLONE_SHIP_INFO;
+
+ SetWindowWidgetsHiddenState(w, true,
+ VVW_WIDGET_TURN_AROUND,
+ VVW_WIDGET_FORCE_PROCEED,
+ WIDGET_LIST_END);
+ break;
+
+ case VEH_AIRCRAFT:
+ w->widget[VVW_WIDGET_CAPTION].data = STR_A00A;
+
+ w->widget[VVW_WIDGET_START_STOP_VEH].tooltips = STR_A027_CURRENT_AIRCRAFT_ACTION;
+
+ w->widget[VVW_WIDGET_CENTER_MAIN_VIEH].tooltips = STR_A029_CENTER_MAIN_VIEW_ON_AIRCRAFT;
+
+ w->widget[VVW_WIDGET_GOTO_DEPOT].data = SPR_SEND_AIRCRAFT_TODEPOT;
+ w->widget[VVW_WIDGET_GOTO_DEPOT].tooltips = STR_A02A_SEND_AIRCRAFT_TO_HANGAR;
+
+ w->widget[VVW_WIDGET_REFIT_VEH].tooltips = STR_A03B_REFIT_AIRCRAFT_TO_CARRY;
+
+ w->widget[VVW_WIDGET_SHOW_ORDERS].tooltips = STR_A028_SHOW_AIRCRAFT_S_ORDERS;
+
+ w->widget[VVW_WIDGET_SHOW_DETAILS].tooltips = STR_A02B_SHOW_AIRCRAFT_DETAILS;
+
+ w->widget[VVW_WIDGET_CLONE_VEH].data = SPR_CLONE_AIRCRAFT;
+ w->widget[VVW_WIDGET_CLONE_VEH].tooltips = STR_CLONE_AIRCRAFT_INFO;
+
+ SetWindowWidgetsHiddenState(w, true,
+ VVW_WIDGET_TURN_AROUND,
+ VVW_WIDGET_FORCE_PROCEED,
+ WIDGET_LIST_END);
+ break;
+
+ default: NOT_REACHED();
+ }
+}
+
+
+/* When unified GUI is complete these functions will also be unified to one
+ * function in this module */
+void ShowAircraftDetailsWindow(const Vehicle *v);
+void ShowShipDetailsWindow(const Vehicle *v);
+void ShowRoadVehDetailsWindow(const Vehicle *v);
+void ShowTrainDetailsWindow(const Vehicle *v);
+
+
+/** Provisional dispatch to vehicle-specific detail window functions. */
+static void ShowVehicleDetailsWindow(const Vehicle *v)
+{
+ switch (v->type) {
+ case VEH_TRAIN: ShowTrainDetailsWindow(v); break;
+ case VEH_ROAD: ShowRoadVehDetailsWindow(v); break;
+ case VEH_SHIP: ShowShipDetailsWindow(v); break;
+ case VEH_AIRCRAFT: ShowAircraftDetailsWindow(v); break;
+ default: NOT_REACHED();
+ }
+}
+
+/** Checks whether the vehicle may be refitted at the moment.*/
+static bool IsVehicleRefitable(const Vehicle *v)
+{
+ /* Why is this so different for different vehicles?
+ * Does maybe work one solution for all?
+ */
+ switch (v->type) {
+ case VEH_TRAIN: return false;
+ case VEH_ROAD: return EngInfo(v->engine_type)->refit_mask != 0 && v->IsStoppedInDepot();
+ case VEH_SHIP: return ShipVehInfo(v->engine_type)->refittable && v->IsStoppedInDepot();
+ case VEH_AIRCRAFT: return v->IsStoppedInDepot();
+ default: NOT_REACHED();
+ }
+}
+
+/** Message strings for heading to depot indexed by vehicle type. */
+static const StringID _heading_for_depot_strings[] = {
+ STR_HEADING_FOR_TRAIN_DEPOT,
+ STR_HEADING_FOR_ROAD_DEPOT,
+ STR_HEADING_FOR_SHIP_DEPOT,
+ STR_HEADING_FOR_HANGAR,
+};
+
+/** Message strings for heading to depot and servicing indexed by vehicle type. */
+static const StringID _heading_for_depot_service_strings[] = {
+ STR_HEADING_FOR_TRAIN_DEPOT_SERVICE,
+ STR_HEADING_FOR_ROAD_DEPOT_SERVICE,
+ STR_HEADING_FOR_SHIP_DEPOT_SERVICE,
+ STR_HEADING_FOR_HANGAR_SERVICE,
+};
+
+/** Repaint vehicle view window. */
+static void DrawVehicleViewWindow(Window *w)
+{
+ const Vehicle *v = GetVehicle(w->window_number);
+ StringID str;
+ bool is_localplayer = v->owner == _local_player;
+ bool refitable_and_stopped_in_depot = IsVehicleRefitable(v);
+
+ SetWindowWidgetDisabledState(w, VVW_WIDGET_GOTO_DEPOT, !is_localplayer);
+ SetWindowWidgetDisabledState(w, VVW_WIDGET_REFIT_VEH,
+ !refitable_and_stopped_in_depot || !is_localplayer);
+ SetWindowWidgetDisabledState(w, VVW_WIDGET_CLONE_VEH, !is_localplayer);
+
+ if (v->type == VEH_TRAIN) {
+ SetWindowWidgetDisabledState(w, VVW_WIDGET_FORCE_PROCEED, !is_localplayer);
+ SetWindowWidgetDisabledState(w, VVW_WIDGET_TURN_AROUND, !is_localplayer);
+
+ /* Cargo refit button is disabled, until we know we can enable it below. */
+
+ if (is_localplayer) {
+ /* See if any vehicle can be refitted */
+ for (const Vehicle *u = v; u != NULL; u = u->Next()) {
+ if (EngInfo(u->engine_type)->refit_mask != 0 ||
+ (RailVehInfo(v->engine_type)->railveh_type != RAILVEH_WAGON && v->cargo_cap != 0)) {
+ EnableWindowWidget(w, VVW_WIDGET_REFIT_VEH);
+ /* We have a refittable carriage, bail out */
+ break;
+ }
+ }
+ }
+ }
+
+ /* draw widgets & caption */
+ SetDParam(0, v->index);
+ DrawWindowWidgets(w);
+
+ if (v->vehstatus & VS_CRASHED) {
+ str = STR_8863_CRASHED;
+ } else if (v->type != VEH_AIRCRAFT && v->breakdown_ctr == 1) { // check for aircraft necessary?
+ str = STR_885C_BROKEN_DOWN;
+ } else if (v->vehstatus & VS_STOPPED) {
+ if (v->type == VEH_TRAIN) {
+ if (v->cur_speed == 0) {
+ if (v->u.rail.cached_power == 0) {
+ str = STR_TRAIN_NO_POWER;
+ } else {
+ str = STR_8861_STOPPED;
+ }
+ } else {
+ SetDParam(0, v->GetDisplaySpeed());
+ str = STR_TRAIN_STOPPING + _patches.vehicle_speed;
+ }
+ } else { // no train
+ str = STR_8861_STOPPED;
+ }
+ } else { // vehicle is in a "normal" state, show current order
+ switch (v->current_order.type) {
+ case OT_GOTO_STATION: {
+ SetDParam(0, v->current_order.dest);
+ SetDParam(1, v->GetDisplaySpeed());
+ str = STR_HEADING_FOR_STATION + _patches.vehicle_speed;
+ } break;
+
+ case OT_GOTO_DEPOT: {
+ if (v->type == VEH_AIRCRAFT) {
+ /* Aircrafts always go to a station, even if you say depot */
+ SetDParam(0, v->current_order.dest);
+ SetDParam(1, v->GetDisplaySpeed());
+ } else {
+ Depot *depot = GetDepot(v->current_order.dest);
+ SetDParam(0, depot->town_index);
+ SetDParam(1, v->GetDisplaySpeed());
+ }
+ if (HASBIT(v->current_order.flags, OFB_HALT_IN_DEPOT) && !HASBIT(v->current_order.flags, OFB_PART_OF_ORDERS)) {
+ str = _heading_for_depot_strings[v->type] + _patches.vehicle_speed;
+ } else {
+ str = _heading_for_depot_service_strings[v->type] + _patches.vehicle_speed;
+ }
+ } break;
+
+ case OT_LOADING:
+ str = STR_882F_LOADING_UNLOADING;
+ break;
+
+ case OT_GOTO_WAYPOINT: {
+ assert(v->type == VEH_TRAIN);
+ SetDParam(0, v->current_order.dest);
+ str = STR_HEADING_FOR_WAYPOINT + _patches.vehicle_speed;
+ SetDParam(1, v->GetDisplaySpeed());
+ break;
+ }
+
+ case OT_LEAVESTATION:
+ if (v->type != VEH_AIRCRAFT) {
+ str = STR_882F_LOADING_UNLOADING;
+ break;
+ }
+ /* fall-through if aircraft. Does this even happen? */
+
+ default:
+ if (v->num_orders == 0) {
+ str = STR_NO_ORDERS + _patches.vehicle_speed;
+ SetDParam(0, v->GetDisplaySpeed());
+ } else {
+ str = STR_EMPTY;
+ }
+ break;
+ }
+ }
+
+ /* draw the flag plus orders */
+ DrawSprite(v->vehstatus & VS_STOPPED ? SPR_FLAG_VEH_STOPPED : SPR_FLAG_VEH_RUNNING, PAL_NONE, 2, w->widget[VVW_WIDGET_START_STOP_VEH].top + 1);
+ DrawStringCenteredTruncated(w->widget[VVW_WIDGET_START_STOP_VEH].left + 8, w->widget[VVW_WIDGET_START_STOP_VEH].right, w->widget[VVW_WIDGET_START_STOP_VEH].top + 1, str, 0);
+ DrawWindowViewport(w);
+}
+
+/** Command indices for the _vehicle_command_translation_table. */
+enum VehicleCommandTranslation {
+ VCT_CMD_START_STOP = 0,
+ VCT_CMD_GOTO_DEPOT,
+ VCT_CMD_CLONE_VEH,
+ VCT_CMD_TURN_AROUND,
+};
+
+/** Command codes for the shared buttons indexed by VehicleCommandTranslation and vehicle type. */
+static const uint32 _vehicle_command_translation_table[][4] = {
+ { // VCT_CMD_START_STOP
+ CMD_START_STOP_TRAIN | CMD_MSG(STR_883B_CAN_T_STOP_START_TRAIN),
+ CMD_START_STOP_ROADVEH | CMD_MSG(STR_9015_CAN_T_STOP_START_ROAD_VEHICLE),
+ CMD_START_STOP_SHIP | CMD_MSG(STR_9818_CAN_T_STOP_START_SHIP),
+ CMD_START_STOP_AIRCRAFT | CMD_MSG(STR_A016_CAN_T_STOP_START_AIRCRAFT)
+ },
+ { // VCT_CMD_GOTO_DEPOT
+ /* TrainGotoDepot has a nice randomizer in the pathfinder, which causes desyncs... */
+ CMD_SEND_TRAIN_TO_DEPOT | CMD_NO_TEST_IF_IN_NETWORK | CMD_MSG(STR_8830_CAN_T_SEND_TRAIN_TO_DEPOT),
+ CMD_SEND_ROADVEH_TO_DEPOT | CMD_MSG(STR_9018_CAN_T_SEND_VEHICLE_TO_DEPOT),
+ CMD_SEND_SHIP_TO_DEPOT | CMD_MSG(STR_9819_CAN_T_SEND_SHIP_TO_DEPOT),
+ CMD_SEND_AIRCRAFT_TO_HANGAR | CMD_MSG(STR_A012_CAN_T_SEND_AIRCRAFT_TO)
+ },
+ { // VCT_CMD_CLONE_VEH
+ CMD_CLONE_VEHICLE | CMD_MSG(STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE),
+ CMD_CLONE_VEHICLE | CMD_MSG(STR_9009_CAN_T_BUILD_ROAD_VEHICLE),
+ CMD_CLONE_VEHICLE | CMD_MSG(STR_980D_CAN_T_BUILD_SHIP),
+ CMD_CLONE_VEHICLE | CMD_MSG(STR_A008_CAN_T_BUILD_AIRCRAFT)
+ },
+ { // VCT_CMD_TURN_AROUND
+ CMD_REVERSE_TRAIN_DIRECTION | CMD_MSG(STR_8869_CAN_T_REVERSE_DIRECTION),
+ CMD_TURN_ROADVEH | CMD_MSG(STR_9033_CAN_T_MAKE_VEHICLE_TURN),
+ 0xffffffff, // invalid for ships
+ 0xffffffff // invalid for aircrafts
+ },
+};
+
+/** Window event hook for vehicle view. */
+static void VehicleViewWndProc(Window *w, WindowEvent *e)
+{
+ switch (e->event) {
+ case WE_CREATE:
+ CreateVehicleViewWindow(w);
+ break;
+
+ case WE_PAINT:
+ DrawVehicleViewWindow(w);
+ break;
+
+ case WE_CLICK: {
+ const Vehicle *v = GetVehicle(w->window_number);
+
+ switch (e->we.click.widget) {
+ case VVW_WIDGET_START_STOP_VEH: /* start stop */
+ DoCommandP(v->tile, v->index, 0, NULL,
+ _vehicle_command_translation_table[VCT_CMD_START_STOP][v->type]);
+ break;
+ case VVW_WIDGET_CENTER_MAIN_VIEH: /* center main view */
+ ScrollMainWindowTo(v->x_pos, v->y_pos);
+ break;
+ case VVW_WIDGET_GOTO_DEPOT: /* goto hangar */
+ DoCommandP(v->tile, v->index, _ctrl_pressed ? DEPOT_SERVICE : 0, NULL,
+ _vehicle_command_translation_table[VCT_CMD_GOTO_DEPOT][v->type]);
+ break;
+ case VVW_WIDGET_REFIT_VEH: /* refit */
+ ShowVehicleRefitWindow(v, INVALID_VEH_ORDER_ID);
+ break;
+ case VVW_WIDGET_SHOW_ORDERS: /* show orders */
+ ShowOrdersWindow(v);
+ break;
+ case VVW_WIDGET_SHOW_DETAILS: /* show details */
+ ShowVehicleDetailsWindow(v);
+ break;
+ case VVW_WIDGET_CLONE_VEH: /* clone vehicle */
+ DoCommandP(v->tile, v->index, _ctrl_pressed ? 1 : 0, CcCloneVehicle,
+ _vehicle_command_translation_table[VCT_CMD_CLONE_VEH][v->type]);
+ break;
+ case VVW_WIDGET_TURN_AROUND: /* turn around */
+ assert(v->type == VEH_TRAIN || v->type == VEH_ROAD);
+ DoCommandP(v->tile, v->index, 0, NULL,
+ _vehicle_command_translation_table[VCT_CMD_TURN_AROUND][v->type]);
+ break;
+ case VVW_WIDGET_FORCE_PROCEED: /* force proceed */
+ assert(v->type == VEH_TRAIN);
+ DoCommandP(v->tile, v->index, 0, NULL, CMD_FORCE_TRAIN_PROCEED | CMD_MSG(STR_8862_CAN_T_MAKE_TRAIN_PASS_SIGNAL));
+ break;
+ }
+ } break;
+
+ case WE_RESIZE:
+ w->viewport->width += e->we.sizing.diff.x;
+ w->viewport->height += e->we.sizing.diff.y;
+ w->viewport->virtual_width += e->we.sizing.diff.x;
+ w->viewport->virtual_height += e->we.sizing.diff.y;
+ break;
+
+ case WE_DESTROY:
+ 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: {
+ const Vehicle *v = GetVehicle(w->window_number);
+ bool veh_stopped = v->IsStoppedInDepot();
+
+ /* Widget VVW_WIDGET_GOTO_DEPOT must be hidden if the vehicle is already
+ * stopped in depot.
+ * Widget VVW_WIDGET_CLONE_VEH should then be shown, since cloning is
+ * allowed only while in depot and stopped.
+ * This sytem allows to have two buttons, on top of each other.
+ * The same system applies to widget VVW_WIDGET_REFIT_VEH and VVW_WIDGET_TURN_AROUND.*/
+ if (veh_stopped != IsWindowWidgetHidden(w, VVW_WIDGET_GOTO_DEPOT) || veh_stopped == IsWindowWidgetHidden(w, VVW_WIDGET_CLONE_VEH)) {
+ SetWindowWidgetHiddenState(w, VVW_WIDGET_GOTO_DEPOT, veh_stopped); // send to depot
+ SetWindowWidgetHiddenState(w, VVW_WIDGET_CLONE_VEH, !veh_stopped); // clone
+ if (v->type == VEH_ROAD || v->type == VEH_TRAIN) {
+ SetWindowWidgetHiddenState(w, VVW_WIDGET_REFIT_VEH, !veh_stopped); // refit
+ SetWindowWidgetHiddenState(w, VVW_WIDGET_TURN_AROUND, veh_stopped); // force turn around
+ }
+ SetWindowDirty(w);
+ }
+ } break;
+ }
+}
--- a/src/vehicle_gui.h Sun Aug 19 14:04:13 2007 +0000
+++ b/src/vehicle_gui.h Sun Sep 02 11:17:33 2007 +0000
@@ -87,4 +87,7 @@
return (type == VEH_TRAIN || type == VEH_ROAD) ? 14 : 24;
}
+/* Unified window procedure */
+void ShowVehicleViewWindow(const Vehicle *v);
+
#endif /* VEHICLE_GUI_H */
--- a/src/video/cocoa_v.mm Sun Aug 19 14:04:13 2007 +0000
+++ b/src/video/cocoa_v.mm Sun Sep 02 11:17:33 2007 +0000
@@ -79,6 +79,14 @@
#undef Point
#undef Rect
+/* Right Mouse Button Emulation enum */
+enum {
+ RMBE_COMMAND,
+ RMBE_CONTROL,
+ RMBE_OFF,
+};
+
+
/* Subclass of NSWindow to fix genie effect and support resize events */
@interface OTTD_QuartzWindow : NSWindow
- (void)miniaturize:(id)sender;
@@ -359,9 +367,9 @@
}
if (_cocoa_video_data.current_mods & NSShiftKeyMask) key |= WKC_SHIFT;
- if (_cocoa_video_data.current_mods & NSControlKeyMask) key |= WKC_CTRL;
+ if (_cocoa_video_data.current_mods & NSControlKeyMask) key |= (_patches.right_mouse_btn_emulation != RMBE_CONTROL ? WKC_CTRL : WKC_META);
if (_cocoa_video_data.current_mods & NSAlternateKeyMask) key |= WKC_ALT;
- if (_cocoa_video_data.current_mods & NSCommandKeyMask) key |= WKC_META;
+ if (_cocoa_video_data.current_mods & NSCommandKeyMask) key |= (_patches.right_mouse_btn_emulation != RMBE_CONTROL ? WKC_META : WKC_CTRL);
return key << 16;
}
@@ -544,8 +552,14 @@
break;
case NSLeftMouseDown:
+ {
+ uint32 keymask = 0;
+ if (_patches.right_mouse_btn_emulation == RMBE_COMMAND) keymask |= NSCommandKeyMask;
+ if (_patches.right_mouse_btn_emulation == RMBE_CONTROL) keymask |= NSControlKeyMask;
+
pt = QZ_GetMouseLocation(event);
- if (!([ event modifierFlags ] & NSCommandKeyMask) ||
+
+ if (!([ event modifierFlags ] & keymask) ||
!QZ_MouseIsInsideView(&pt)) {
[NSApp sendEvent:event];
}
@@ -559,14 +573,14 @@
QZ_MouseMovedEvent((int)pt.x, (int)pt.y);
/* Right mouse button emulation */
- if ([ event modifierFlags ] & NSCommandKeyMask) {
+ if ([ event modifierFlags ] & keymask) {
_cocoa_video_data.emulating_right_button = true;
QZ_MouseButtonEvent(1, YES);
} else {
QZ_MouseButtonEvent(0, YES);
}
break;
-
+ }
case NSLeftMouseUp:
[NSApp sendEvent:event];
@@ -750,7 +764,7 @@
last_cur_ticks = cur_ticks;
next_tick = cur_ticks + 30;
- _ctrl_pressed = !!(_cocoa_video_data.current_mods & NSControlKeyMask);
+ _ctrl_pressed = !!(_cocoa_video_data.current_mods & ( _patches.right_mouse_btn_emulation != RMBE_CONTROL ? NSControlKeyMask : NSCommandKeyMask));
_shift_pressed = !!(_cocoa_video_data.current_mods & NSShiftKeyMask);
GameLoop();
@@ -771,7 +785,7 @@
st += GetTick() - st0;
#endif
_screen.dst_ptr = _cocoa_video_data.pixels;
- DrawTextMessage();
+ DrawChatMessage();
DrawMouseCursor();
QZ_Draw();
}
@@ -2064,14 +2078,16 @@
_cocoa_video_dialog = true;
wasstarted = _cocoa_video_started;
- if (!_cocoa_video_started && _video_driver->Start(NULL) != NULL) {
+ if (_video_driver == NULL) {
+ setupApplication(); // Setup application before showing dialog
+ } else if (!_cocoa_video_started && _video_driver->Start(NULL) != NULL) {
fprintf(stderr, "%s: %s\n", title, message);
return;
}
NSRunAlertPanel([NSString stringWithCString: title], [NSString stringWithCString: message], [NSString stringWithCString: buttonLabel], nil, nil);
- if (!wasstarted) _video_driver->Stop();
+ if (!wasstarted && _video_driver != NULL) _video_driver->Stop();
_cocoa_video_dialog = false;
}
--- a/src/video/dedicated_v.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/video/dedicated_v.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -66,11 +66,13 @@
}
#endif
-#ifdef WIN32
-#include <windows.h> /* GetTickCount */
-#include <conio.h>
-#include <time.h>
-#include <tchar.h>
+#if defined(WIN32)
+# include <windows.h> /* GetTickCount */
+# if !defined(WINCE)
+# include <conio.h>
+# endif
+# include <time.h>
+# include <tchar.h>
static HANDLE _hInputReady, _hWaitForInputHandling;
static HANDLE _hThread; // Thread to close
static char _win_console_thread_buffer[200];
@@ -78,6 +80,10 @@
/* Windows Console thread. Just loop and signal when input has been received */
static void WINAPI CheckForConsoleInput()
{
+#if defined(WINCE)
+ /* WinCE doesn't support console stuff */
+ return;
+#else
DWORD nb;
HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
while (true) {
@@ -87,6 +93,7 @@
SetEvent(_hInputReady);
WaitForSingleObject(_hWaitForInputHandling, INFINITE);
}
+#endif
}
static void CreateWindowsConsoleThread()
@@ -133,7 +140,9 @@
SetDebugString("net=6");
-#ifdef WIN32
+#if defined(WINCE)
+ /* WinCE doesn't support console stuff */
+#elif defined(WIN32)
// For win32 we need to allocate a console (debug mode does the same)
CreateConsole();
CreateWindowsConsoleThread();
--- a/src/video/sdl_v.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/video/sdl_v.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -512,7 +512,7 @@
} else {
SDL_CALL SDL_Delay(1);
_screen.dst_ptr = _sdl_screen->pixels;
- DrawTextMessage();
+ DrawChatMessage();
DrawMouseCursor();
DrawSurfaceToScreen();
}
--- a/src/video/win32_v.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/video/win32_v.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -621,6 +621,9 @@
#if !defined(WINCE)
case WM_ACTIVATE: {
+ /* Don't do anything if we are closing openttd */
+ if (_exit_game) break;
+
bool active = (LOWORD(wParam) != WA_INACTIVE);
bool minimized = (HIWORD(wParam) != 0);
if (_wnd.fullscreen) {
@@ -634,10 +637,9 @@
ChangeDisplaySettings(NULL, 0);
}
}
- break;
- }
+ } break;
+#endif
}
-#endif
return DefWindowProc(hwnd, msg, wParam, lParam);
}
@@ -775,6 +777,8 @@
FindResolutions();
+ DEBUG(driver, 2, "Resolution for display: %dx%d", _cur_resolution[0], _cur_resolution[1]);
+
// fullscreen uses those
_wnd.width_org = _cur_resolution[0];
_wnd.height_org = _cur_resolution[1];
@@ -880,7 +884,7 @@
GdiFlush();
#endif
_screen.dst_ptr = _wnd.buffer_bits;
- DrawTextMessage();
+ DrawChatMessage();
DrawMouseCursor();
}
}
--- a/src/viewport.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/viewport.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -24,6 +24,7 @@
#include "variables.h"
#include "train.h"
#include "roadveh.h"
+#include "vehicle_gui.h"
#include "blitter/factory.hpp"
#define VIEWPORT_DRAW_MEM (65536 * 2)
@@ -1785,14 +1786,14 @@
static void SafeShowTrainViewWindow(const Vehicle* v)
{
- if (!IsFrontEngine(v)) v = GetFirstVehicleInChain(v);
- ShowTrainViewWindow(v);
+ if (!IsFrontEngine(v)) v = v->First();
+ ShowVehicleViewWindow(v);
}
static void SafeShowRoadVehViewWindow(const Vehicle *v)
{
- if (!IsRoadVehFront(v)) v = GetFirstVehicleInChain(v);
- ShowRoadVehViewWindow(v);
+ if (!IsRoadVehFront(v)) v = v->First();
+ ShowVehicleViewWindow(v);
}
static void Nop(const Vehicle *v) {}
@@ -1801,8 +1802,8 @@
static OnVehicleClickProc* const _on_vehicle_click_proc[] = {
SafeShowTrainViewWindow,
SafeShowRoadVehViewWindow,
- ShowShipViewWindow,
- ShowAircraftViewWindow,
+ ShowVehicleViewWindow,
+ ShowVehicleViewWindow,
Nop, // Special vehicles
Nop // Disaster vehicles
};
--- a/src/water_cmd.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/water_cmd.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -26,6 +26,7 @@
#include "train.h"
#include "roadveh.h"
#include "water_map.h"
+#include "industry_map.h"
#include "newgrf.h"
#include "newgrf_canal.h"
#include "misc/autoptr.hpp"
@@ -66,12 +67,9 @@
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
- if (!EnsureNoVehicle(tile)) return CMD_ERROR;
-
Axis axis = Extract<Axis, 0>(p1);
tile2 = tile + (axis == AXIS_X ? TileDiffXY(1, 0) : TileDiffXY(0, 1));
- if (!EnsureNoVehicle(tile2)) return CMD_ERROR;
if (!IsClearWaterTile(tile) || !IsClearWaterTile(tile2))
return_cmd_error(STR_3801_MUST_BE_BUILT_ON_WATER);
@@ -288,15 +286,15 @@
case WATER_TILE_CLEAR:
if (flags & DC_NO_WATER) return_cmd_error(STR_3807_CAN_T_BUILD_ON_WATER);
- /* Make sure no vehicle is on the tile */
- if (!EnsureNoVehicle(tile)) return CMD_ERROR;
-
/* Make sure it's not an edge tile. */
if (!IS_INT_INSIDE(TileX(tile), 1, MapMaxX() - 1) ||
!IS_INT_INSIDE(TileY(tile), 1, MapMaxY() - 1)) {
return_cmd_error(STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP);
}
+ /* Make sure no vehicle is on the tile */
+ if (!EnsureNoVehicle(tile)) return CMD_ERROR;
+
if (GetTileOwner(tile) != OWNER_WATER && GetTileOwner(tile) != OWNER_NONE && !CheckTileOwnership(tile)) return CMD_ERROR;
if (flags & DC_EXEC) DoClearSquare(tile);
@@ -308,12 +306,6 @@
/* Make sure no vehicle is on the tile */
if (!EnsureNoVehicle(tile)) return CMD_ERROR;
- /* Make sure it's not an edge tile. */
- if (!IS_INT_INSIDE(TileX(tile), 1, MapMaxX() - 1) ||
- !IS_INT_INSIDE(TileY(tile), 1, MapMaxY() - 1)) {
- return_cmd_error(STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP);
- }
-
if (flags & DC_EXEC) DoClearSquare(tile);
if (slope == SLOPE_N || slope == SLOPE_E || slope == SLOPE_S || slope == SLOPE_W) {
return CommandCost(_price.clear_water);
@@ -362,8 +354,9 @@
return false;
}
- case MP_STATION: return IsOilRig(tile) || IsDock(tile) || IsBuoy(tile);
- default: return false;
+ case MP_STATION: return IsOilRig(tile) || IsDock(tile) || IsBuoy(tile);
+ case MP_INDUSTRY: return (GetIndustrySpec(GetIndustryType(tile))->behaviour & INDUSTRYBEH_BUILT_ONWATER) != 0;
+ default: return false;
}
}
@@ -377,10 +370,10 @@
if (dikes_base == 0) dikes_base = SPR_CANALS_BASE + 57;
/* determine the edges around with water. */
- wa = IsWateredTile(TILE_ADDXY(tile, -1, 0)) << 0;
- wa += IsWateredTile(TILE_ADDXY(tile, 0, 1)) << 1;
- wa += IsWateredTile(TILE_ADDXY(tile, 1, 0)) << 2;
- wa += IsWateredTile(TILE_ADDXY(tile, 0, -1)) << 3;
+ wa = IsWateredTile(TILE_ADDXY(tile, -1, 0)) << 0;
+ wa += IsWateredTile(TILE_ADDXY(tile, 0, 1)) << 1;
+ wa += IsWateredTile(TILE_ADDXY(tile, 1, 0)) << 2;
+ wa += IsWateredTile(TILE_ADDXY(tile, 0, -1)) << 3;
if (!(wa & 1)) DrawGroundSprite(dikes_base, PAL_NONE);
if (!(wa & 2)) DrawGroundSprite(dikes_base + 1, PAL_NONE);
@@ -567,6 +560,9 @@
)) {
break;
}
+
+ Vehicle *v = FindFloodableVehicleOnTile(target);
+ if (v != NULL) FloodVehicle(v);
}
/* FALLTHROUGH */
@@ -655,7 +651,7 @@
}
Vehicle *u;
- if (v->type != VEH_AIRCRAFT) v = GetFirstVehicleInChain(v);
+ if (v->type != VEH_AIRCRAFT) v = v->First();
u = v;
/* crash all wagons, and count passengers */
@@ -799,6 +795,14 @@
return VETSB_CONTINUE;
}
+static CommandCost TerraformTile_Water(TileIndex tile, uint32 flags, uint z_new, Slope tileh_new)
+{
+ /* Canals can't be terraformed */
+ if (IsClearWaterTile(tile) && IsCanal(tile)) return_cmd_error(STR_MUST_DEMOLISH_CANAL_FIRST);
+
+ return DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
+}
+
extern const TileTypeProcs _tile_type_water_procs = {
DrawTile_Water, /* draw_tile_proc */
@@ -814,4 +818,5 @@
NULL, /* get_produced_cargo_proc */
VehicleEnter_Water, /* vehicle_enter_tile_proc */
GetFoundation_Water, /* get_foundation_proc */
+ TerraformTile_Water, /* terraform_tile_proc */
};
--- a/src/waypoint.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/waypoint.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -196,6 +196,10 @@
wp->town_index = 0;
wp->string = STR_NULL;
wp->town_cn = 0;
+ } else if (flags & DC_EXEC) {
+ /* move existing (recently deleted) waypoint to the new location */
+ RedrawWaypointSign(wp);
+ wp->xy = tile;
}
if (flags & DC_EXEC) {
@@ -404,25 +408,16 @@
Waypoint::~Waypoint()
{
+ if (this->string != STR_NULL) DeleteName(this->string);
+
+ if (CleaningPool()) return;
+
RemoveOrderFromAllVehicles(OT_GOTO_WAYPOINT, this->index);
RedrawWaypointSign(this);
this->xy = 0;
-
- this->QuickFree();
}
-void Waypoint::QuickFree()
-{
- if (this->string != STR_NULL) DeleteName(this->string);
-}
-
-bool Waypoint::IsValid() const
-{
- return this->xy != 0;
-}
-
-
/**
* Fix savegames which stored waypoints in their old format
*/
--- a/src/waypoint.h Sun Aug 19 14:04:13 2007 +0000
+++ b/src/waypoint.h Sun Sep 02 11:17:33 2007 +0000
@@ -30,9 +30,7 @@
Waypoint(TileIndex tile = 0);
~Waypoint();
- void QuickFree();
-
- bool IsValid() const;
+ inline bool IsValid() const { return this->xy != 0; }
};
static inline bool IsValidWaypointID(WaypointID index)
--- a/src/win32.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/win32.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -29,6 +29,9 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <shlobj.h>
+#if defined(_MSC_VER) && !defined(WINCE)
+ #include <dbghelp.h>
+#endif
static bool _has_console;
@@ -94,7 +97,7 @@
#endif
}
-#ifdef _MSC_VER
+#if defined(_MSC_VER) && !defined(WINCE)
static void *_safe_esp;
static char *_crash_msg;
@@ -592,6 +595,41 @@
}
}
+#if !defined(_DEBUG)
+ HMODULE dbghelp = LoadLibrary(_T("dbghelp.dll"));
+ if (dbghelp != NULL) {
+ typedef BOOL (WINAPI *MiniDumpWriteDump_t)(HANDLE, DWORD, HANDLE,
+ MINIDUMP_TYPE,
+ CONST PMINIDUMP_EXCEPTION_INFORMATION,
+ CONST PMINIDUMP_USER_STREAM_INFORMATION,
+ CONST PMINIDUMP_CALLBACK_INFORMATION);
+ MiniDumpWriteDump_t funcMiniDumpWriteDump = (MiniDumpWriteDump_t)GetProcAddress(dbghelp, "MiniDumpWriteDump");
+ if (funcMiniDumpWriteDump != NULL) {
+ HANDLE file = CreateFile(_T("crash.dmp"), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0);
+ HANDLE proc = GetCurrentProcess();
+ DWORD procid = GetCurrentProcessId();
+ MINIDUMP_EXCEPTION_INFORMATION mdei;
+ MINIDUMP_USER_STREAM userstream;
+ MINIDUMP_USER_STREAM_INFORMATION musi;
+ char msg[] = "****** Built on " __DATE__ " " __TIME__ ". ******";
+
+ userstream.Type = LastReservedStream + 1;
+ userstream.Buffer = msg;
+ userstream.BufferSize = sizeof(msg);
+
+ musi.UserStreamCount = 1;
+ musi.UserStreamArray = &userstream;
+
+ mdei.ThreadId = GetCurrentThreadId();
+ mdei.ExceptionPointers = ep;
+ mdei.ClientPointers = false;
+
+ funcMiniDumpWriteDump(proc, procid, file, MiniDumpWithDataSegs, &mdei, &musi, NULL);
+ }
+ FreeLibrary(dbghelp);
+ }
+#endif
+
/* Close any possible log files */
CloseConsoleLogIfActive();
@@ -734,6 +772,14 @@
void FiosGetDrives()
{
+#if defined(WINCE)
+ /* WinCE only knows one drive: / */
+ FiosItem *fios = FiosAlloc();
+ fios->type = FIOS_TYPE_DRIVE;
+ fios->mtime = 0;
+ snprintf(fios->name, lengthof(fios->name), PATHSEP "");
+ ttd_strlcpy(fios->title, fios->name, lengthof(fios->title));
+#else
TCHAR drives[256];
const TCHAR *s;
@@ -746,6 +792,7 @@
ttd_strlcpy(fios->title, fios->name, lengthof(fios->title));
while (*s++ != '\0');
}
+#endif
}
bool FiosIsValidFile(const char *path, const struct dirent *ent, struct stat *sb)
@@ -821,6 +868,9 @@
void CreateConsole()
{
+#if defined(WINCE)
+ /* WinCE doesn't support console stuff */
+#else
HANDLE hand;
CONSOLE_SCREEN_BUFFER_INFO coninfo;
@@ -849,6 +899,7 @@
setvbuf(stdin, NULL, _IONBF, 0);
setvbuf(stdout, NULL, _IONBF, 0);
setvbuf(stderr, NULL, _IONBF, 0);
+#endif
}
void ShowInfo(const char *str)
@@ -882,7 +933,11 @@
int _set_error_mode(int);
#endif
+#if defined(WINCE)
+int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
+#else
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
+#endif
{
int argc;
char *argv[64]; // max 64 command line arguments
@@ -893,8 +948,11 @@
#endif /* UNICODE */
#if defined(UNICODE)
+
+#if !defined(WINCE)
/* Check if a win9x user started the win32 version */
if (HASBIT(GetVersion(), 31)) error("This version of OpenTTD doesn't run on windows 95/98/ME.\nPlease download the win9x binary and try again.");
+#endif
/* For UNICODE we need to convert the commandline to char* _AND_
* save it because argv[] points into this buffer and thus needs to
@@ -908,7 +966,9 @@
CreateConsole();
#endif
+#if !defined(WINCE)
_set_error_mode(_OUT_TO_MSGBOX); // force assertion output to messagebox
+#endif
/* setup random seed to something quite random */
_random_seeds[1][0] = _random_seeds[0][0] = GetTickCount();
@@ -951,7 +1011,14 @@
char *getcwd(char *buf, size_t size)
{
-#if defined(UNICODE)
+#if defined(WINCE)
+ TCHAR path[MAX_PATH];
+ GetModuleFileName(NULL, path, MAX_PATH);
+ convert_from_fs(path, buf, size);
+ /* GetModuleFileName returns dir with file, so remove everything behind latest '\\' */
+ char *p = strrchr(buf, '\\');
+ if (p != NULL) *p = '\0';
+#elif defined(UNICODE)
TCHAR path[MAX_PATH];
GetCurrentDirectory(MAX_PATH - 1, path);
convert_from_fs(path, buf, size);
--- a/src/window.cpp Sun Aug 19 14:04:13 2007 +0000
+++ b/src/window.cpp Sun Sep 02 11:17:33 2007 +0000
@@ -693,11 +693,21 @@
w->wndproc(w, &e);
}
- if (w->left + w->width > _screen.width) w->left -= (w->left + w->width - _screen.width);
+ int nx = w->left;
+ int ny = w->top;
+
+ if (nx + w->width > _screen.width) nx -= (nx + w->width - _screen.width);
const Window *wt = FindWindowById(WC_MAIN_TOOLBAR, 0);
- w->top = max(w->top, (wt == NULL || w == wt || y == 0) ? 0 : wt->height);
- w->left = max(w->left, 0);
+ ny = max(ny, (wt == NULL || w == wt || y == 0) ? 0 : wt->height);
+ nx = max(nx, 0);
+
+ if (w->viewport != NULL) {
+ w->viewport->left += nx - w->left;
+ w->viewport->top += ny - w->top;
+ }
+ w->left = nx;
+ w->top = ny;
SetWindowDirty(w);
@@ -1867,7 +1877,7 @@
FOR_ALL_WINDOWS(wz) {
if ((*wz)->viewport != NULL) UpdateViewportPosition(*wz);
}
- DrawTextMessage();
+ DrawChatMessage();
/* Redraw mouse cursor in case it was hidden */
DrawMouseCursor();
}