mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-08-18 20:19:11 +00:00
Compare commits
1 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
133be0b744 |
48
.gitignore
vendored
48
.gitignore
vendored
@@ -1,46 +1,12 @@
|
||||
Makefile*
|
||||
bin/*
|
||||
!bin/ai
|
||||
bin/ai/*
|
||||
!bin/ai/compat*.nut
|
||||
!bin/ai/regression
|
||||
!bin/data
|
||||
bin/data/*
|
||||
bundle/*
|
||||
!bin/data/chars.grf
|
||||
!bin/data/openttdd.grf
|
||||
!bin/data/openttdw.grf
|
||||
!bin/data/opntitle.dat
|
||||
!bin/data/orig_*.obg
|
||||
!bin/data/orig_*.obs
|
||||
!bin/data/no_sound.obs
|
||||
!bin/gm
|
||||
bin/gm/*
|
||||
!bin/gm/no_music.obm
|
||||
!bin/gm/orig_*.obm
|
||||
!bin/scripts
|
||||
bin/scripts/*
|
||||
!bin/scripts/*.example
|
||||
!bin/scripts/readme.txt
|
||||
|
||||
bundle/*
|
||||
bundles/*
|
||||
docs/aidocs/*
|
||||
docs/source/*
|
||||
media/openttd.desktop
|
||||
media/openttd.desktop.install
|
||||
!bin/data/opntitle.grf
|
||||
!bin/scenario/README
|
||||
!bin/scripts*
|
||||
config.*
|
||||
objs/*
|
||||
projects/Debug
|
||||
projects/Release
|
||||
projects/*.ncb
|
||||
projects/*.suo
|
||||
projects/*.sdf
|
||||
projects/*.opensdf
|
||||
projects/*.vcproj.*.user
|
||||
projects/*.vcxproj.user
|
||||
src/rev.cpp
|
||||
src/os/windows/ottdres.rc
|
||||
|
||||
/Makefile*
|
||||
!/Makefile.msvc
|
||||
/config.*
|
||||
!/config.lib
|
||||
!*.in
|
||||
*.tmp
|
||||
|
21
.hgignore
21
.hgignore
@@ -1,26 +1,11 @@
|
||||
syntax: glob
|
||||
|
||||
bin/lang/*
|
||||
bin/openttd*
|
||||
bin/*.cfg
|
||||
bin/opentd*
|
||||
bundle/*
|
||||
bundles/*
|
||||
config.cache*
|
||||
config.cache.*
|
||||
config.log
|
||||
config.pwd
|
||||
docs/aidocs/*
|
||||
docs/source/*
|
||||
Makefile
|
||||
Makefile.am
|
||||
Makefile.bundle
|
||||
media/openttd.desktop
|
||||
media/openttd.desktop.install
|
||||
media/openttd.desktop*
|
||||
objs/*
|
||||
projects/*.ncb
|
||||
projects/*.suo
|
||||
projects/*.sdf
|
||||
projects/*.opensdf
|
||||
projects/*.vcproj.*.user
|
||||
projects/*.vcxproj.user
|
||||
src/rev.cpp
|
||||
src/os/windows/ottdres.rc
|
||||
|
@@ -88,8 +88,7 @@ endif
|
||||
$(Q)cp "$(BIN_DIR)/scripts/"* "$(BUNDLE_DIR)/scripts/"
|
||||
ifdef MENU_DIR
|
||||
$(Q)cp "$(ROOT_DIR)/media/openttd.desktop" "$(BUNDLE_DIR)/media/"
|
||||
$(Q)$(AWK) -f "$(ROOT_DIR)/media/openttd.desktop.translation.awk" "$(SRC_DIR)/lang/"*.txt | $(SORT) >> "$(BUNDLE_DIR)/media/openttd.desktop"
|
||||
$(Q)sed s/=openttd/=$(BINARY_NAME)/g "$(BUNDLE_DIR)/media/openttd.desktop" > "$(ROOT_DIR)/media/openttd.desktop.install"
|
||||
$(Q)cat "$(ROOT_DIR)/media/openttd.desktop" | sed s/=openttd/=$(BINARY_NAME)/g > "$(ROOT_DIR)/media/openttd.desktop.install"
|
||||
endif
|
||||
ifeq ($(TTD), openttd.exe)
|
||||
$(Q)unix2dos "$(BUNDLE_DIR)/docs/"* "$(BUNDLE_DIR)/readme.txt" "$(BUNDLE_DIR)/COPYING" "$(BUNDLE_DIR)/changelog.txt" "$(BUNDLE_DIR)/known-bugs.txt"
|
||||
|
@@ -43,7 +43,6 @@ OSXAPP = !!OSXAPP!!
|
||||
LIPO = !!LIPO!!
|
||||
REVISION = !!REVISION!!
|
||||
AWK = !!AWK!!
|
||||
SORT = !!SORT!!
|
||||
DISTCC = !!DISTCC!!
|
||||
|
||||
RES := $(shell if [ ! -f $(CONFIG_CACHE_PWD) ] || [ "`pwd`" != "`cat $(CONFIG_CACHE_PWD)`" ]; then echo "`pwd`" > $(CONFIG_CACHE_PWD); fi )
|
||||
|
@@ -192,9 +192,9 @@ function Regression::Base()
|
||||
print(" RandRange(2): " + AIBase.RandRange(2));
|
||||
print(" RandRange(2): " + AIBase.RandRange(2));
|
||||
print(" RandRange(2): " + AIBase.RandRange(2));
|
||||
print(" RandRange(1000000): " + AIBase.RandRange(1000000)); // 32 bit tests
|
||||
print(" RandRange(1000000): " + AIBase.RandRange(1000000));
|
||||
print(" RandRange(1000000): " + AIBase.RandRange(1000000));
|
||||
print(" RandRange(9): " + AIBase.RandRange(9));
|
||||
print(" RandRange(9): " + AIBase.RandRange(9));
|
||||
print(" RandRange(9): " + AIBase.RandRange(9));
|
||||
print(" Chance(1, 2): " + AIBase.Chance(1, 2));
|
||||
print(" Chance(1, 2): " + AIBase.Chance(1, 2));
|
||||
print(" Chance(1, 2): " + AIBase.Chance(1, 2));
|
||||
@@ -1027,7 +1027,6 @@ function Regression::RailTypeList()
|
||||
for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
|
||||
print(" RailType: " + i);
|
||||
print(" IsRailTypeAvailable(): " + AIRail.IsRailTypeAvailable(i));
|
||||
print(" GetMaxSpeed(): " + AIRail.GetMaxSpeed(i));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1755,48 +1754,6 @@ function Regression::PrintSubsidy(subsidy_id)
|
||||
print(" GetCargoType(): " + AISubsidy.GetCargoType(subsidy_id));
|
||||
}
|
||||
|
||||
function Regression::Math()
|
||||
{
|
||||
print("");
|
||||
print("--Math--");
|
||||
print(" -2147483648 < -2147483647: " + (-2147483648 < -2147483647));
|
||||
print(" -2147483648 < -1 : " + (-2147483648 < -1 ));
|
||||
print(" -2147483648 < 0 : " + (-2147483648 < 0 ));
|
||||
print(" -2147483648 < 1 : " + (-2147483648 < 1 ));
|
||||
print(" -2147483648 < 2147483647: " + (-2147483648 < 2147483647));
|
||||
|
||||
print(" -2147483647 < -2147483648: " + (-2147483647 < -2147483648));
|
||||
print(" -1 < -2147483648: " + (-1 < -2147483648));
|
||||
print(" 0 < -2147483648: " + ( 0 < -2147483648));
|
||||
print(" 1 < -2147483648: " + ( 1 < -2147483648));
|
||||
print(" 2147483647 < -2147483648: " + ( 2147483647 < -2147483648));
|
||||
|
||||
print(" -1 > 2147483647: " + (-1 > 2147483647));
|
||||
print(" -1 > 1 : " + (-1 > 1 ));
|
||||
print(" -1 > 0 : " + (-1 > 0 ));
|
||||
print(" -1 > -1 : " + (-1 > -1 ));
|
||||
print(" -1 > -2147483648: " + (-1 > -2147483648));
|
||||
|
||||
print(" 1 > 2147483647: " + ( 1 > 2147483647));
|
||||
print(" 1 > 1 : " + ( 1 > 1 ));
|
||||
print(" 1 > 0 : " + ( 1 > 0 ));
|
||||
print(" 1 > -1 : " + ( 1 > -1 ));
|
||||
print(" 1 > -2147483648: " + ( 1 > -2147483648));
|
||||
|
||||
print(" 2147483647 > 2147483646: " + ( 2147483647 > 2147483646));
|
||||
print(" 2147483647 > 1 : " + ( 2147483647 > 1 ));
|
||||
print(" 2147483647 > 0 : " + ( 2147483647 > 0 ));
|
||||
print(" 2147483647 > -1 : " + ( 2147483647 > -1 ));
|
||||
print(" 2147483647 > -2147483648: " + ( 2147483647 > -2147483648));
|
||||
|
||||
print(" 2147483646 > 2147483647: " + ( 2147483646 > 2147483647));
|
||||
print(" 1 > 2147483647: " + ( 1 > 2147483647));
|
||||
print(" 0 > 2147483647: " + ( 0 > 2147483647));
|
||||
print(" -1 > 2147483647: " + (-1 > 2147483647));
|
||||
print(" -2147483648 > 2147483647: " + (-2147483648 > 2147483647));
|
||||
|
||||
print(" 13725 > -2147483648: " + ( 13725 > -2147483648));
|
||||
}
|
||||
|
||||
function Regression::Start()
|
||||
{
|
||||
@@ -1862,7 +1819,5 @@ function Regression::Start()
|
||||
}
|
||||
}
|
||||
print(" IsEventWaiting: false");
|
||||
|
||||
this.Math();
|
||||
}
|
||||
|
||||
|
@@ -96,10 +96,10 @@
|
||||
RandRange(1): 0
|
||||
RandRange(2): 0
|
||||
RandRange(2): 0
|
||||
RandRange(2): 0
|
||||
RandRange(1000000): 987346
|
||||
RandRange(1000000): 781750
|
||||
RandRange(1000000): 191841
|
||||
RandRange(2): 1
|
||||
RandRange(9): 6
|
||||
RandRange(9): 7
|
||||
RandRange(9): 4
|
||||
Chance(1, 2): true
|
||||
Chance(1, 2): false
|
||||
Chance(1, 2): false
|
||||
@@ -2148,201 +2148,201 @@ ERROR: HasNext() is invalid as Begin() is never called
|
||||
GetRoadType(): -1
|
||||
GetPlaneType(): -1
|
||||
Engine 57
|
||||
IsValidEngine(): false
|
||||
GetName(): (null : 0x00000000)
|
||||
GetCargoType(): 255
|
||||
IsValidEngine(): true
|
||||
GetName(): Passenger Carriage
|
||||
GetCargoType(): 0
|
||||
CanRefitCargo(): false
|
||||
GetCapacity(): -1
|
||||
GetCapacity(): 45
|
||||
GetReliability(): -1
|
||||
GetMaxSpeed(): -1
|
||||
GetPrice(): -1
|
||||
GetMaxSpeed(): 0
|
||||
GetPrice(): 1447
|
||||
GetMaxAge(): -1
|
||||
GetRunningCost(): -1
|
||||
GetRunningCost(): 0
|
||||
GetPower(): -1
|
||||
GetWeight(): -1
|
||||
GetWeight(): 25
|
||||
GetMaxTractiveEffort(): -1
|
||||
GetVehicleType(): 255
|
||||
GetRailType(): 255
|
||||
GetVehicleType(): 0
|
||||
GetRailType(): 2
|
||||
GetRoadType(): -1
|
||||
GetPlaneType(): -1
|
||||
Engine 58
|
||||
IsValidEngine(): false
|
||||
GetName(): (null : 0x00000000)
|
||||
GetCargoType(): 255
|
||||
IsValidEngine(): true
|
||||
GetName(): Mail Van
|
||||
GetCargoType(): 2
|
||||
CanRefitCargo(): false
|
||||
GetCapacity(): -1
|
||||
GetCapacity(): 35
|
||||
GetReliability(): -1
|
||||
GetMaxSpeed(): -1
|
||||
GetPrice(): -1
|
||||
GetMaxSpeed(): 0
|
||||
GetPrice(): 1335
|
||||
GetMaxAge(): -1
|
||||
GetRunningCost(): -1
|
||||
GetRunningCost(): 0
|
||||
GetPower(): -1
|
||||
GetWeight(): -1
|
||||
GetWeight(): 21
|
||||
GetMaxTractiveEffort(): -1
|
||||
GetVehicleType(): 255
|
||||
GetRailType(): 255
|
||||
GetVehicleType(): 0
|
||||
GetRailType(): 2
|
||||
GetRoadType(): -1
|
||||
GetPlaneType(): -1
|
||||
Engine 59
|
||||
IsValidEngine(): false
|
||||
GetName(): (null : 0x00000000)
|
||||
GetCargoType(): 255
|
||||
CanRefitCargo(): false
|
||||
GetCapacity(): -1
|
||||
IsValidEngine(): true
|
||||
GetName(): Coal Truck
|
||||
GetCargoType(): 1
|
||||
CanRefitCargo(): true
|
||||
GetCapacity(): 35
|
||||
GetReliability(): -1
|
||||
GetMaxSpeed(): -1
|
||||
GetPrice(): -1
|
||||
GetMaxSpeed(): 0
|
||||
GetPrice(): 1031
|
||||
GetMaxAge(): -1
|
||||
GetRunningCost(): -1
|
||||
GetRunningCost(): 0
|
||||
GetPower(): -1
|
||||
GetWeight(): -1
|
||||
GetWeight(): 18
|
||||
GetMaxTractiveEffort(): -1
|
||||
GetVehicleType(): 255
|
||||
GetRailType(): 255
|
||||
GetVehicleType(): 0
|
||||
GetRailType(): 2
|
||||
GetRoadType(): -1
|
||||
GetPlaneType(): -1
|
||||
Engine 60
|
||||
IsValidEngine(): false
|
||||
GetName(): (null : 0x00000000)
|
||||
GetCargoType(): 255
|
||||
IsValidEngine(): true
|
||||
GetName(): Oil Tanker
|
||||
GetCargoType(): 3
|
||||
CanRefitCargo(): false
|
||||
GetCapacity(): -1
|
||||
GetCapacity(): 35
|
||||
GetReliability(): -1
|
||||
GetMaxSpeed(): -1
|
||||
GetPrice(): -1
|
||||
GetMaxSpeed(): 0
|
||||
GetPrice(): 1171
|
||||
GetMaxAge(): -1
|
||||
GetRunningCost(): -1
|
||||
GetRunningCost(): 0
|
||||
GetPower(): -1
|
||||
GetWeight(): -1
|
||||
GetWeight(): 24
|
||||
GetMaxTractiveEffort(): -1
|
||||
GetVehicleType(): 255
|
||||
GetRailType(): 255
|
||||
GetVehicleType(): 0
|
||||
GetRailType(): 2
|
||||
GetRoadType(): -1
|
||||
GetPlaneType(): -1
|
||||
Engine 61
|
||||
IsValidEngine(): false
|
||||
GetName(): (null : 0x00000000)
|
||||
GetCargoType(): 255
|
||||
IsValidEngine(): true
|
||||
GetName(): Livestock Van
|
||||
GetCargoType(): 4
|
||||
CanRefitCargo(): false
|
||||
GetCapacity(): -1
|
||||
GetCapacity(): 30
|
||||
GetReliability(): -1
|
||||
GetMaxSpeed(): -1
|
||||
GetPrice(): -1
|
||||
GetMaxSpeed(): 0
|
||||
GetPrice(): 1125
|
||||
GetMaxAge(): -1
|
||||
GetRunningCost(): -1
|
||||
GetRunningCost(): 0
|
||||
GetPower(): -1
|
||||
GetWeight(): -1
|
||||
GetWeight(): 20
|
||||
GetMaxTractiveEffort(): -1
|
||||
GetVehicleType(): 255
|
||||
GetRailType(): 255
|
||||
GetVehicleType(): 0
|
||||
GetRailType(): 2
|
||||
GetRoadType(): -1
|
||||
GetPlaneType(): -1
|
||||
Engine 62
|
||||
IsValidEngine(): false
|
||||
GetName(): (null : 0x00000000)
|
||||
GetCargoType(): 255
|
||||
IsValidEngine(): true
|
||||
GetName(): Goods Van
|
||||
GetCargoType(): 5
|
||||
CanRefitCargo(): false
|
||||
GetCapacity(): -1
|
||||
GetCapacity(): 30
|
||||
GetReliability(): -1
|
||||
GetMaxSpeed(): -1
|
||||
GetPrice(): -1
|
||||
GetMaxSpeed(): 0
|
||||
GetPrice(): 1113
|
||||
GetMaxAge(): -1
|
||||
GetRunningCost(): -1
|
||||
GetRunningCost(): 0
|
||||
GetPower(): -1
|
||||
GetWeight(): -1
|
||||
GetWeight(): 21
|
||||
GetMaxTractiveEffort(): -1
|
||||
GetVehicleType(): 255
|
||||
GetRailType(): 255
|
||||
GetVehicleType(): 0
|
||||
GetRailType(): 2
|
||||
GetRoadType(): -1
|
||||
GetPlaneType(): -1
|
||||
Engine 63
|
||||
IsValidEngine(): false
|
||||
GetName(): (null : 0x00000000)
|
||||
GetCargoType(): 255
|
||||
IsValidEngine(): true
|
||||
GetName(): Grain Hopper
|
||||
GetCargoType(): 6
|
||||
CanRefitCargo(): false
|
||||
GetCapacity(): -1
|
||||
GetCapacity(): 35
|
||||
GetReliability(): -1
|
||||
GetMaxSpeed(): -1
|
||||
GetPrice(): -1
|
||||
GetMaxSpeed(): 0
|
||||
GetPrice(): 1066
|
||||
GetMaxAge(): -1
|
||||
GetRunningCost(): -1
|
||||
GetRunningCost(): 0
|
||||
GetPower(): -1
|
||||
GetWeight(): -1
|
||||
GetWeight(): 19
|
||||
GetMaxTractiveEffort(): -1
|
||||
GetVehicleType(): 255
|
||||
GetRailType(): 255
|
||||
GetVehicleType(): 0
|
||||
GetRailType(): 2
|
||||
GetRoadType(): -1
|
||||
GetPlaneType(): -1
|
||||
Engine 64
|
||||
IsValidEngine(): false
|
||||
GetName(): (null : 0x00000000)
|
||||
GetCargoType(): 255
|
||||
IsValidEngine(): true
|
||||
GetName(): Wood Truck
|
||||
GetCargoType(): 7
|
||||
CanRefitCargo(): false
|
||||
GetCapacity(): -1
|
||||
GetCapacity(): 35
|
||||
GetReliability(): -1
|
||||
GetMaxSpeed(): -1
|
||||
GetPrice(): -1
|
||||
GetMaxSpeed(): 0
|
||||
GetPrice(): 1060
|
||||
GetMaxAge(): -1
|
||||
GetRunningCost(): -1
|
||||
GetRunningCost(): 0
|
||||
GetPower(): -1
|
||||
GetWeight(): -1
|
||||
GetWeight(): 16
|
||||
GetMaxTractiveEffort(): -1
|
||||
GetVehicleType(): 255
|
||||
GetRailType(): 255
|
||||
GetVehicleType(): 0
|
||||
GetRailType(): 2
|
||||
GetRoadType(): -1
|
||||
GetPlaneType(): -1
|
||||
Engine 65
|
||||
IsValidEngine(): false
|
||||
GetName(): (null : 0x00000000)
|
||||
GetCargoType(): 255
|
||||
IsValidEngine(): true
|
||||
GetName(): Iron Ore Hopper
|
||||
GetCargoType(): 8
|
||||
CanRefitCargo(): false
|
||||
GetCapacity(): -1
|
||||
GetCapacity(): 35
|
||||
GetReliability(): -1
|
||||
GetMaxSpeed(): -1
|
||||
GetPrice(): -1
|
||||
GetMaxSpeed(): 0
|
||||
GetPrice(): 1048
|
||||
GetMaxAge(): -1
|
||||
GetRunningCost(): -1
|
||||
GetRunningCost(): 0
|
||||
GetPower(): -1
|
||||
GetWeight(): -1
|
||||
GetWeight(): 19
|
||||
GetMaxTractiveEffort(): -1
|
||||
GetVehicleType(): 255
|
||||
GetRailType(): 255
|
||||
GetVehicleType(): 0
|
||||
GetRailType(): 2
|
||||
GetRoadType(): -1
|
||||
GetPlaneType(): -1
|
||||
Engine 66
|
||||
IsValidEngine(): false
|
||||
GetName(): (null : 0x00000000)
|
||||
GetCargoType(): 255
|
||||
IsValidEngine(): true
|
||||
GetName(): Steel Truck
|
||||
GetCargoType(): 9
|
||||
CanRefitCargo(): false
|
||||
GetCapacity(): -1
|
||||
GetCapacity(): 25
|
||||
GetReliability(): -1
|
||||
GetMaxSpeed(): -1
|
||||
GetPrice(): -1
|
||||
GetMaxSpeed(): 0
|
||||
GetPrice(): 1148
|
||||
GetMaxAge(): -1
|
||||
GetRunningCost(): -1
|
||||
GetRunningCost(): 0
|
||||
GetPower(): -1
|
||||
GetWeight(): -1
|
||||
GetWeight(): 18
|
||||
GetMaxTractiveEffort(): -1
|
||||
GetVehicleType(): 255
|
||||
GetRailType(): 255
|
||||
GetVehicleType(): 0
|
||||
GetRailType(): 2
|
||||
GetRoadType(): -1
|
||||
GetPlaneType(): -1
|
||||
Engine 67
|
||||
IsValidEngine(): false
|
||||
GetName(): (null : 0x00000000)
|
||||
GetCargoType(): 255
|
||||
IsValidEngine(): true
|
||||
GetName(): Armoured Van
|
||||
GetCargoType(): 10
|
||||
CanRefitCargo(): false
|
||||
GetCapacity(): -1
|
||||
GetCapacity(): 25
|
||||
GetReliability(): -1
|
||||
GetMaxSpeed(): -1
|
||||
GetPrice(): -1
|
||||
GetMaxSpeed(): 0
|
||||
GetPrice(): 1494
|
||||
GetMaxAge(): -1
|
||||
GetRunningCost(): -1
|
||||
GetRunningCost(): 0
|
||||
GetPower(): -1
|
||||
GetWeight(): -1
|
||||
GetWeight(): 30
|
||||
GetMaxTractiveEffort(): -1
|
||||
GetVehicleType(): 255
|
||||
GetRailType(): 255
|
||||
GetVehicleType(): 0
|
||||
GetRailType(): 2
|
||||
GetRoadType(): -1
|
||||
GetPlaneType(): -1
|
||||
Engine 68
|
||||
@@ -2724,201 +2724,201 @@ ERROR: HasNext() is invalid as Begin() is never called
|
||||
GetRoadType(): -1
|
||||
GetPlaneType(): -1
|
||||
Engine 89
|
||||
IsValidEngine(): false
|
||||
GetName(): (null : 0x00000000)
|
||||
GetCargoType(): 255
|
||||
IsValidEngine(): true
|
||||
GetName(): Passenger Carriage
|
||||
GetCargoType(): 0
|
||||
CanRefitCargo(): false
|
||||
GetCapacity(): -1
|
||||
GetCapacity(): 47
|
||||
GetReliability(): -1
|
||||
GetMaxSpeed(): -1
|
||||
GetPrice(): -1
|
||||
GetMaxSpeed(): 0
|
||||
GetPrice(): 1447
|
||||
GetMaxAge(): -1
|
||||
GetRunningCost(): -1
|
||||
GetRunningCost(): 0
|
||||
GetPower(): -1
|
||||
GetWeight(): -1
|
||||
GetWeight(): 25
|
||||
GetMaxTractiveEffort(): -1
|
||||
GetVehicleType(): 255
|
||||
GetRailType(): 255
|
||||
GetVehicleType(): 0
|
||||
GetRailType(): 3
|
||||
GetRoadType(): -1
|
||||
GetPlaneType(): -1
|
||||
Engine 90
|
||||
IsValidEngine(): false
|
||||
GetName(): (null : 0x00000000)
|
||||
GetCargoType(): 255
|
||||
IsValidEngine(): true
|
||||
GetName(): Mail Van
|
||||
GetCargoType(): 2
|
||||
CanRefitCargo(): false
|
||||
GetCapacity(): -1
|
||||
GetCapacity(): 37
|
||||
GetReliability(): -1
|
||||
GetMaxSpeed(): -1
|
||||
GetPrice(): -1
|
||||
GetMaxSpeed(): 0
|
||||
GetPrice(): 1335
|
||||
GetMaxAge(): -1
|
||||
GetRunningCost(): -1
|
||||
GetRunningCost(): 0
|
||||
GetPower(): -1
|
||||
GetWeight(): -1
|
||||
GetWeight(): 21
|
||||
GetMaxTractiveEffort(): -1
|
||||
GetVehicleType(): 255
|
||||
GetRailType(): 255
|
||||
GetVehicleType(): 0
|
||||
GetRailType(): 3
|
||||
GetRoadType(): -1
|
||||
GetPlaneType(): -1
|
||||
Engine 91
|
||||
IsValidEngine(): false
|
||||
GetName(): (null : 0x00000000)
|
||||
GetCargoType(): 255
|
||||
CanRefitCargo(): false
|
||||
GetCapacity(): -1
|
||||
IsValidEngine(): true
|
||||
GetName(): Coal Truck
|
||||
GetCargoType(): 1
|
||||
CanRefitCargo(): true
|
||||
GetCapacity(): 37
|
||||
GetReliability(): -1
|
||||
GetMaxSpeed(): -1
|
||||
GetPrice(): -1
|
||||
GetMaxSpeed(): 0
|
||||
GetPrice(): 1031
|
||||
GetMaxAge(): -1
|
||||
GetRunningCost(): -1
|
||||
GetRunningCost(): 0
|
||||
GetPower(): -1
|
||||
GetWeight(): -1
|
||||
GetWeight(): 18
|
||||
GetMaxTractiveEffort(): -1
|
||||
GetVehicleType(): 255
|
||||
GetRailType(): 255
|
||||
GetVehicleType(): 0
|
||||
GetRailType(): 3
|
||||
GetRoadType(): -1
|
||||
GetPlaneType(): -1
|
||||
Engine 92
|
||||
IsValidEngine(): false
|
||||
GetName(): (null : 0x00000000)
|
||||
GetCargoType(): 255
|
||||
IsValidEngine(): true
|
||||
GetName(): Oil Tanker
|
||||
GetCargoType(): 3
|
||||
CanRefitCargo(): false
|
||||
GetCapacity(): -1
|
||||
GetCapacity(): 37
|
||||
GetReliability(): -1
|
||||
GetMaxSpeed(): -1
|
||||
GetPrice(): -1
|
||||
GetMaxSpeed(): 0
|
||||
GetPrice(): 1171
|
||||
GetMaxAge(): -1
|
||||
GetRunningCost(): -1
|
||||
GetRunningCost(): 0
|
||||
GetPower(): -1
|
||||
GetWeight(): -1
|
||||
GetWeight(): 24
|
||||
GetMaxTractiveEffort(): -1
|
||||
GetVehicleType(): 255
|
||||
GetRailType(): 255
|
||||
GetVehicleType(): 0
|
||||
GetRailType(): 3
|
||||
GetRoadType(): -1
|
||||
GetPlaneType(): -1
|
||||
Engine 93
|
||||
IsValidEngine(): false
|
||||
GetName(): (null : 0x00000000)
|
||||
GetCargoType(): 255
|
||||
IsValidEngine(): true
|
||||
GetName(): Livestock Van
|
||||
GetCargoType(): 4
|
||||
CanRefitCargo(): false
|
||||
GetCapacity(): -1
|
||||
GetCapacity(): 32
|
||||
GetReliability(): -1
|
||||
GetMaxSpeed(): -1
|
||||
GetPrice(): -1
|
||||
GetMaxSpeed(): 0
|
||||
GetPrice(): 1125
|
||||
GetMaxAge(): -1
|
||||
GetRunningCost(): -1
|
||||
GetRunningCost(): 0
|
||||
GetPower(): -1
|
||||
GetWeight(): -1
|
||||
GetWeight(): 20
|
||||
GetMaxTractiveEffort(): -1
|
||||
GetVehicleType(): 255
|
||||
GetRailType(): 255
|
||||
GetVehicleType(): 0
|
||||
GetRailType(): 3
|
||||
GetRoadType(): -1
|
||||
GetPlaneType(): -1
|
||||
Engine 94
|
||||
IsValidEngine(): false
|
||||
GetName(): (null : 0x00000000)
|
||||
GetCargoType(): 255
|
||||
IsValidEngine(): true
|
||||
GetName(): Goods Van
|
||||
GetCargoType(): 5
|
||||
CanRefitCargo(): false
|
||||
GetCapacity(): -1
|
||||
GetCapacity(): 32
|
||||
GetReliability(): -1
|
||||
GetMaxSpeed(): -1
|
||||
GetPrice(): -1
|
||||
GetMaxSpeed(): 0
|
||||
GetPrice(): 1113
|
||||
GetMaxAge(): -1
|
||||
GetRunningCost(): -1
|
||||
GetRunningCost(): 0
|
||||
GetPower(): -1
|
||||
GetWeight(): -1
|
||||
GetWeight(): 21
|
||||
GetMaxTractiveEffort(): -1
|
||||
GetVehicleType(): 255
|
||||
GetRailType(): 255
|
||||
GetVehicleType(): 0
|
||||
GetRailType(): 3
|
||||
GetRoadType(): -1
|
||||
GetPlaneType(): -1
|
||||
Engine 95
|
||||
IsValidEngine(): false
|
||||
GetName(): (null : 0x00000000)
|
||||
GetCargoType(): 255
|
||||
IsValidEngine(): true
|
||||
GetName(): Grain Hopper
|
||||
GetCargoType(): 6
|
||||
CanRefitCargo(): false
|
||||
GetCapacity(): -1
|
||||
GetCapacity(): 37
|
||||
GetReliability(): -1
|
||||
GetMaxSpeed(): -1
|
||||
GetPrice(): -1
|
||||
GetMaxSpeed(): 0
|
||||
GetPrice(): 1066
|
||||
GetMaxAge(): -1
|
||||
GetRunningCost(): -1
|
||||
GetRunningCost(): 0
|
||||
GetPower(): -1
|
||||
GetWeight(): -1
|
||||
GetWeight(): 19
|
||||
GetMaxTractiveEffort(): -1
|
||||
GetVehicleType(): 255
|
||||
GetRailType(): 255
|
||||
GetVehicleType(): 0
|
||||
GetRailType(): 3
|
||||
GetRoadType(): -1
|
||||
GetPlaneType(): -1
|
||||
Engine 96
|
||||
IsValidEngine(): false
|
||||
GetName(): (null : 0x00000000)
|
||||
GetCargoType(): 255
|
||||
IsValidEngine(): true
|
||||
GetName(): Wood Truck
|
||||
GetCargoType(): 7
|
||||
CanRefitCargo(): false
|
||||
GetCapacity(): -1
|
||||
GetCapacity(): 37
|
||||
GetReliability(): -1
|
||||
GetMaxSpeed(): -1
|
||||
GetPrice(): -1
|
||||
GetMaxSpeed(): 0
|
||||
GetPrice(): 1060
|
||||
GetMaxAge(): -1
|
||||
GetRunningCost(): -1
|
||||
GetRunningCost(): 0
|
||||
GetPower(): -1
|
||||
GetWeight(): -1
|
||||
GetWeight(): 16
|
||||
GetMaxTractiveEffort(): -1
|
||||
GetVehicleType(): 255
|
||||
GetRailType(): 255
|
||||
GetVehicleType(): 0
|
||||
GetRailType(): 3
|
||||
GetRoadType(): -1
|
||||
GetPlaneType(): -1
|
||||
Engine 97
|
||||
IsValidEngine(): false
|
||||
GetName(): (null : 0x00000000)
|
||||
GetCargoType(): 255
|
||||
IsValidEngine(): true
|
||||
GetName(): Iron Ore Hopper
|
||||
GetCargoType(): 8
|
||||
CanRefitCargo(): false
|
||||
GetCapacity(): -1
|
||||
GetCapacity(): 37
|
||||
GetReliability(): -1
|
||||
GetMaxSpeed(): -1
|
||||
GetPrice(): -1
|
||||
GetMaxSpeed(): 0
|
||||
GetPrice(): 1048
|
||||
GetMaxAge(): -1
|
||||
GetRunningCost(): -1
|
||||
GetRunningCost(): 0
|
||||
GetPower(): -1
|
||||
GetWeight(): -1
|
||||
GetWeight(): 19
|
||||
GetMaxTractiveEffort(): -1
|
||||
GetVehicleType(): 255
|
||||
GetRailType(): 255
|
||||
GetVehicleType(): 0
|
||||
GetRailType(): 3
|
||||
GetRoadType(): -1
|
||||
GetPlaneType(): -1
|
||||
Engine 98
|
||||
IsValidEngine(): false
|
||||
GetName(): (null : 0x00000000)
|
||||
GetCargoType(): 255
|
||||
IsValidEngine(): true
|
||||
GetName(): Steel Truck
|
||||
GetCargoType(): 9
|
||||
CanRefitCargo(): false
|
||||
GetCapacity(): -1
|
||||
GetCapacity(): 27
|
||||
GetReliability(): -1
|
||||
GetMaxSpeed(): -1
|
||||
GetPrice(): -1
|
||||
GetMaxSpeed(): 0
|
||||
GetPrice(): 1148
|
||||
GetMaxAge(): -1
|
||||
GetRunningCost(): -1
|
||||
GetRunningCost(): 0
|
||||
GetPower(): -1
|
||||
GetWeight(): -1
|
||||
GetWeight(): 18
|
||||
GetMaxTractiveEffort(): -1
|
||||
GetVehicleType(): 255
|
||||
GetRailType(): 255
|
||||
GetVehicleType(): 0
|
||||
GetRailType(): 3
|
||||
GetRoadType(): -1
|
||||
GetPlaneType(): -1
|
||||
Engine 99
|
||||
IsValidEngine(): false
|
||||
GetName(): (null : 0x00000000)
|
||||
GetCargoType(): 255
|
||||
IsValidEngine(): true
|
||||
GetName(): Armoured Van
|
||||
GetCargoType(): 10
|
||||
CanRefitCargo(): false
|
||||
GetCapacity(): -1
|
||||
GetCapacity(): 27
|
||||
GetReliability(): -1
|
||||
GetMaxSpeed(): -1
|
||||
GetPrice(): -1
|
||||
GetMaxSpeed(): 0
|
||||
GetPrice(): 1494
|
||||
GetMaxAge(): -1
|
||||
GetRunningCost(): -1
|
||||
GetRunningCost(): 0
|
||||
GetPower(): -1
|
||||
GetWeight(): -1
|
||||
GetWeight(): 30
|
||||
GetMaxTractiveEffort(): -1
|
||||
GetVehicleType(): 255
|
||||
GetRailType(): 255
|
||||
GetVehicleType(): 0
|
||||
GetRailType(): 3
|
||||
GetRoadType(): -1
|
||||
GetPlaneType(): -1
|
||||
Engine 100
|
||||
@@ -5747,7 +5747,7 @@ ERROR: HasNext() is invalid as Begin() is never called
|
||||
GetRailType(): 255
|
||||
GetRoadType(): -1
|
||||
GetPlaneType(): -1
|
||||
Valid Engines: 31
|
||||
Valid Engines: 53
|
||||
|
||||
--EngineList--
|
||||
Count(): 11
|
||||
@@ -7093,7 +7093,7 @@ ERROR: HasNext() is invalid as Begin() is never called
|
||||
IsBuoyTile(): false
|
||||
IsLockTile(): false
|
||||
IsCanalTile(): false
|
||||
GetBankBalance(): 479851
|
||||
GetBankBalance(): 480703
|
||||
BuildWaterDepot(): true
|
||||
BuildDock(): true
|
||||
BuildBuoy(): true
|
||||
@@ -7106,7 +7106,7 @@ ERROR: HasNext() is invalid as Begin() is never called
|
||||
IsBuoyTile(): true
|
||||
IsLockTile(): true
|
||||
IsCanalTile(): true
|
||||
GetBankBalance(): 450302
|
||||
GetBankBalance(): 451154
|
||||
|
||||
--AIWaypointList(BUOY)--
|
||||
Count(): 1
|
||||
@@ -7125,7 +7125,7 @@ ERROR: HasNext() is invalid as Begin() is never called
|
||||
IsBuoyTile(): false
|
||||
IsLockTile(): false
|
||||
IsCanalTile(): false
|
||||
GetBankBalance(): 427657
|
||||
GetBankBalance(): 428509
|
||||
BuildWaterDepot(): true
|
||||
BuildDock(): true
|
||||
|
||||
@@ -7208,7 +7208,6 @@ ERROR: HasNext() is invalid as Begin() is never called
|
||||
ListDump:
|
||||
RailType: 0
|
||||
IsRailTypeAvailable(): true
|
||||
GetMaxSpeed(): 0
|
||||
|
||||
--Road--
|
||||
Road
|
||||
@@ -8047,7 +8046,7 @@ ERROR: HasNext() is invalid as Begin() is never called
|
||||
GetPopulation(): 737
|
||||
GetLocation(): 6446
|
||||
GetHouseCount(): 26
|
||||
GetRating(): 6
|
||||
GetRating(): 5
|
||||
Town 11
|
||||
IsValidTown(): true
|
||||
GetName(): Fort Frindston
|
||||
@@ -8082,7 +8081,7 @@ ERROR: HasNext() is invalid as Begin() is never called
|
||||
GetPopulation(): 807
|
||||
GetLocation(): 42338
|
||||
GetHouseCount(): 33
|
||||
GetRating(): 6
|
||||
GetRating(): 5
|
||||
Town 16
|
||||
IsValidTown(): true
|
||||
GetName(): Kennville
|
||||
@@ -8117,7 +8116,7 @@ ERROR: HasNext() is invalid as Begin() is never called
|
||||
GetPopulation(): 437
|
||||
GetLocation(): 22585
|
||||
GetHouseCount(): 15
|
||||
GetRating(): 6
|
||||
GetRating(): 5
|
||||
Town 21
|
||||
IsValidTown(): true
|
||||
GetName(): Franinghead
|
||||
@@ -8630,37 +8629,4 @@ ERROR: HasNext() is invalid as Begin() is never called
|
||||
GetEventType: 6
|
||||
Unknown Event
|
||||
IsEventWaiting: false
|
||||
|
||||
--Math--
|
||||
-2147483648 < -2147483647: true
|
||||
-2147483648 < -1 : true
|
||||
-2147483648 < 0 : true
|
||||
-2147483648 < 1 : true
|
||||
-2147483648 < 2147483647: true
|
||||
-2147483647 < -2147483648: false
|
||||
-1 < -2147483648: false
|
||||
0 < -2147483648: false
|
||||
1 < -2147483648: false
|
||||
2147483647 < -2147483648: false
|
||||
-1 > 2147483647: false
|
||||
-1 > 1 : false
|
||||
-1 > 0 : false
|
||||
-1 > -1 : false
|
||||
-1 > -2147483648: true
|
||||
1 > 2147483647: false
|
||||
1 > 1 : false
|
||||
1 > 0 : true
|
||||
1 > -1 : true
|
||||
1 > -2147483648: true
|
||||
2147483647 > 2147483646: true
|
||||
2147483647 > 1 : true
|
||||
2147483647 > 0 : true
|
||||
2147483647 > -1 : true
|
||||
2147483647 > -2147483648: true
|
||||
2147483646 > 2147483647: false
|
||||
1 > 2147483647: false
|
||||
0 > 2147483647: false
|
||||
-1 > 2147483647: false
|
||||
-2147483648 > 2147483647: false
|
||||
13725 > -2147483648: true
|
||||
ERROR: The AI died unexpectedly.
|
||||
|
@@ -8,18 +8,14 @@ shortname = NULL
|
||||
version = 2
|
||||
fallback = true
|
||||
description = A sound pack without any sounds.
|
||||
description.af_ZA = 'n Klank stel sonder enige klanke.
|
||||
description.ar_EG = مجموعة صوت بدوت اصوات مضافة
|
||||
description.bg_BG = Празен звуков пакет.
|
||||
description.ca_ES = Un joc de sons sense cap so.
|
||||
description.cs_CZ = Prázdná sada zvuků.
|
||||
description.da_DA = En lydpakke uden lyde.
|
||||
description.de_DE = Basissounds ohne Sound.
|
||||
description.el_GR = Ένα πάκετο ήχων χώρις ήχους.
|
||||
description.en_GB = A sound pack without any sounds.
|
||||
description.en_US = A sound pack without any sounds.
|
||||
description.es_ES = Un conjunto de sonidos vacío.
|
||||
description.et_ET = Ilma häälteta helipakk.
|
||||
description.fi_FI = Äänipaketti ilman ääniä.
|
||||
description.fr_FR = Un pack de sons sans sons.
|
||||
description.hr_HR = Zvučni paket bez ikakvih zvukova.
|
||||
@@ -29,15 +25,10 @@ description.it_IT = Un pacchetto sonoro non contenente alcun suono.
|
||||
description.nb_NO = En lydpakke uten noen lyder.
|
||||
description.nl_NL = Een geluidset zonder geluid.
|
||||
description.nn_NO = Ei lydpakke utan nokon lydar.
|
||||
description.pl_PL = Zestaw dźwięków nie zawierający żadnych dźwięków.
|
||||
description.pt_PT = Um conjunto de sons vazio.
|
||||
description.ro_RO = Un set de sunete fără nici un sunet inclus.
|
||||
description.ru_RU = "Пустой" набор звукового оформления, не содержащий никаких звуков.
|
||||
description.sk_SK = Zvuková sada neobsahujúca zvuky.
|
||||
description.sl_SL = Zvočni paket brez zvoka.
|
||||
description.sr_RS = Prazan skup zvukova.
|
||||
description.sv_SE = Ett ljudpaket utan några ljud.
|
||||
description.tr_TR = Ses içermeyen boş bir ses kümesi.
|
||||
description.zh_TW = 不含任何音效的音效集。
|
||||
|
||||
[files]
|
||||
|
@@ -9,18 +9,14 @@ shortname = TTDD
|
||||
version = 1
|
||||
palette = DOS
|
||||
description = Original Transport Tycoon Deluxe DOS edition graphics.
|
||||
description.af_ZA = Oorspronklike Transport Tycoon Deluxe DOS uitgawe grafieke.
|
||||
description.ar_EG = النسخة الاصلية من ترانسبورت تايكون ديلوكس الرسومية نسخة الدوس
|
||||
description.bg_BG = Оригинални графики на Transport Tycoon Deluxe за DOS.
|
||||
description.ca_ES = Gràfics originals de Transport Tycoon Deluxe per a DOS.
|
||||
description.cs_CZ = Původní sada grafik Transport Tycoon Deluxe (verze pro DOS).
|
||||
description.da_DA = Originalgrafik fra Transport Tycoon Deluxe DOS-version.
|
||||
description.de_DE = Original Transport Tycoon Deluxe DOS Basisgrafiken.
|
||||
description.el_GR = Αρχικά γραφικά από το Transport Tycoon Deluxe έκδοση DOS.
|
||||
description.en_GB = Original Transport Tycoon Deluxe DOS edition graphics.
|
||||
description.en_US = Original Transport Tycoon Deluxe DOS edition graphics.
|
||||
description.es_ES = Gráficos originales de Transport Tycoon Deluxe versión DOS.
|
||||
description.et_ET = Algse Transport Tycoon Deluxe DOSi versiooni graafika.
|
||||
description.fi_FI = Alkuperäiset Transport Tycoon Deluxe DOS grafiikat.
|
||||
description.fr_FR = Graphiques originaux de Transport Tycoon Deluxe (version DOS).
|
||||
description.hr_HR = Originalna grafika za Transport Tycoon Deluxe DOS izdanje.
|
||||
@@ -30,15 +26,10 @@ description.it_IT = Grafica originale di Transport Tycoon Deluxe, edizione DOS.
|
||||
description.nb_NO = Original grafikk fra Transport Tycoon Deluxe for DOS.
|
||||
description.nl_NL = Originele graphics van de Transport Tycoon Deluxe DOS-versie.
|
||||
description.nn_NO = Original grafikk frå Transport Tycoon Deluxe for DOS.
|
||||
description.pl_PL = Oryginalna edycja grafik dla Transport Tycoon Deluxe DOS.
|
||||
description.pt_PT = Gráficos originais da edição DOS de Transport Tycoon Deluxe.
|
||||
description.ro_RO = Setul grafic original al Transport Tycoon Deluxe pentru DOS.
|
||||
description.ru_RU = Оригинальная графика из Transport Tycoon Deluxe для DOS.
|
||||
description.sk_SK = Pôvodná grafika Transport Tycoon Deluxe (DOS).
|
||||
description.sl_SL = Originalna grafika Transport Tycoon Deluxe za različico DOS.
|
||||
description.sr_RS = Originalni skup grafika Transport Tycoon Deluxe DOS izdanja.
|
||||
description.sv_SE = Originalgrafiken från Transport Tycoon Deluxe, DOS-utgåvan.
|
||||
description.tr_TR = Orijinal Transport Tycoon Deluxe DOS sürümü grafikleri.
|
||||
description.zh_TW = 原版 Transport Tycoon Deluxe DOS 版的圖形。
|
||||
|
||||
[files]
|
||||
|
@@ -8,18 +8,14 @@ name = original_dos
|
||||
shortname = TTDO
|
||||
version = 0
|
||||
description = Original Transport Tycoon Deluxe DOS edition sounds.
|
||||
description.af_ZA = Oorspronklike Transport Tycoon Deluxe DOS uitgawe klanke.
|
||||
description.ar_EG = النسخة الاصلية من ترانسبورت تايكون ديلوكس الصوتية نسخة الدوس
|
||||
description.bg_BG = Оригинални звуци на Transport Tycoon Deluxe за DOS.
|
||||
description.ca_ES = Sons originals de Transport Tycoon Deluxe per a DOS.
|
||||
description.cs_CZ = Původní sada zvuků Transport Tycoon Deluxe (verze pro DOS).
|
||||
description.da_DA = Originallyd fra Transport Tycoon Deluxe DOS-version.
|
||||
description.de_DE = Original Transport Tycoon Deluxe DOS Basissounds.
|
||||
description.el_GR = Αρχικοί ήχοι από το Transport Tycoon Deluxe έκδοση DOS.
|
||||
description.en_GB = Original Transport Tycoon Deluxe DOS edition sounds.
|
||||
description.en_US = Original Transport Tycoon Deluxe DOS edition sounds.
|
||||
description.es_ES = Sonidos originales de Transport Tycoon Deluxe versión DOS.
|
||||
description.et_ET = Algse Transport Tycoon Deluxe DOSi versiooni helid.
|
||||
description.fi_FI = Alkuperäiset Transport Tycoon Deluxe DOS äänet.
|
||||
description.hr_HR = Originalni zvukovi za Transport Tycoon Deluxe DOS izdanje.
|
||||
description.hu_HU = Az eredeti Transport Tycoon Deluxe DOS verziójának hangjai.
|
||||
@@ -29,15 +25,10 @@ description.it_IT = Suoni originali di Transport Tycoon Deluxe, edizione DOS.
|
||||
description.nb_NO = Originale lyder fra Transport Tycoon Deluxe for DOS.
|
||||
description.nl_NL = Originele geluiden van de Transport Tycoon Deluxe DOS-versie.
|
||||
description.nn_NO = Originale lydar frå Transport Tycoon Deluxe for DOS.
|
||||
description.pl_PL = Oryginalna edycja dźwięków dla Transport Tycoon Deluxe DOS.
|
||||
description.pt_PT = Sons originais da edição DOS de Transport Tycoon Deluxe.
|
||||
description.ro_RO = Setul de sunete original al Transport Tycoon Deluxe pentru DOS.
|
||||
description.ru_RU = Оригинальный набор звукового оформления из игры Transport Tycoon Deluxe для DOS.
|
||||
description.sk_SK = Pôvodné zvuky Transport Tycoon Deluxe (DOS).
|
||||
description.sl_SL = Originalni zvoki Transport Tycoon Deluxe različice DOS.
|
||||
description.sr_RS = Originalni skup zvukova Transport Tycoon Deluxe DOS izdanja.
|
||||
description.sv_SE = Originalljuden från Transport Tycoon Deluxe, DOS-utgåvan.
|
||||
description.tr_TR = Orijinal Transport Tycoon Deluxe DOS sürümü sesleri.
|
||||
description.zh_TW = 原版 Transport Tycoon Deluxe DOS 版的音效。
|
||||
|
||||
[files]
|
||||
|
@@ -9,18 +9,14 @@ shortname = TTDD
|
||||
version = 0
|
||||
palette = DOS
|
||||
description = Original Transport Tycoon Deluxe DOS (German) edition graphics.
|
||||
description.af_ZA = Oorspronklike Transport Tycoon Deluxe DOS (German) uitgawe grafieke.
|
||||
description.ar_EG = النسخة الاصلية من ترانسبورت تايكون ديلوكس الالمانية نسخة الدوس
|
||||
description.bg_BG = Оригинални графики на Transport Tycoon Deluxe за DOS (немски) .
|
||||
description.ca_ES = Gràfics originals de Transport Tycoon Deluxe per a DOS (Alemany).
|
||||
description.cs_CZ = Původní sada grafik Transport Tycoon Deluxe (německá verze pro DOS).
|
||||
description.da_DA = Originalgrafik fra Transport Tycoon Deluxe DOS (Tysk) version.
|
||||
description.de_DE = Original Transport Tycoon Deluxe DOS (Deutsch) Basisgrafiken.
|
||||
description.el_GR = Αρχικά γραφικά από το Transport Tycoon Deluxe έκδοση DOS (Γερμανικό).
|
||||
description.en_GB = Original Transport Tycoon Deluxe DOS (German) edition graphics.
|
||||
description.en_US = Original Transport Tycoon Deluxe DOS (German) edition graphics.
|
||||
description.es_ES = Gráficos originales de Transport Tycoon Deluxe versión DOS (Alemán).
|
||||
description.et_ET = Algse Transport Tycoon Deluxe DOSi (Saksa) versiooni graafika.
|
||||
description.fi_FI = Alkuperäiset Transport Tycoon Deluxe DOS (Saksalainen) grafiikat.
|
||||
description.fr_FR = Graphiques originaux de Transport Tycoon Deluxe (version DOS allemande).
|
||||
description.hr_HR = Originalna grafika za Transport Tycoon Deluxe DOS (Njemački) izdanje.
|
||||
@@ -30,15 +26,10 @@ description.it_IT = Grafica originale di Transport Tycoon Deluxe (tedesco), ediz
|
||||
description.nb_NO = Original grafikk fra Transport Tycoon Deluxe for DOS (tysk).
|
||||
description.nl_NL = Originele graphics van de Duitse Transport Tycoon Deluxe DOS-versie.
|
||||
description.nn_NO = Original grafikk frå Transport Tycoon Deluxe for DOS (tysk).
|
||||
description.pl_PL = Oryginalna edycja grafik dla Transport Tycoon Deluxe DOS (German).
|
||||
description.pt_PT = Gráficos originais da edição DOS (Alemã) de Transport Tycoon Deluxe.
|
||||
description.ro_RO = Setul grafic original al Transport Tycoon Deluxe pentru DOS (ediţia germană).
|
||||
description.ru_RU = Оригинальная графика из немецкой версии Transport Tycoon Deluxe для DOS.
|
||||
description.sk_SK = Pôvodná grafika Transport Tycoon Deluxe (DOS) (v jazyku nemčina).
|
||||
description.sl_SL = Originalna grafika Transport Tycoon Deluxe za nemško različico DOS.
|
||||
description.sr_RS = Originalni skup grafika nemačkog Transport Tycoon Deluxe DOS izdanja.
|
||||
description.sv_SE = Originalgrafiken från Transport Tycoon Deluxe, DOS-utgåvan (tyska).
|
||||
description.tr_TR = Orijinal Transport Tycoon Deluxe DOS (Almanca) sürümü grafikleri.
|
||||
description.zh_TW = 原版 Transport Tycoon Deluxe DOS 版 (德國版) 的圖形。
|
||||
|
||||
[files]
|
||||
|
@@ -9,18 +9,14 @@ shortname = TTDW
|
||||
version = 0
|
||||
palette = Windows
|
||||
description = Original Transport Tycoon Deluxe Windows edition graphics.
|
||||
description.af_ZA = Oorspronklike Transport Tycoon Deluxe Windows uitgawe grafieke.
|
||||
description.ar_EG = النسخة الاصلية من ترانسبورت تايكون ديلوكس الرسومية نسخة وندوز
|
||||
description.bg_BG = Оригинални графики на Transport Tycoon Deluxe за Windows.
|
||||
description.ca_ES = Gràfics originals de Transport Tycoon Deluxe per a Windows.
|
||||
description.cs_CZ = Původní sada grafik Transport Tycoon Deluxe (verze pro Windows).
|
||||
description.da_DA = Originalgrafik fra Transport Tycoon Deluxe Windows-version.
|
||||
description.de_DE = Original Transport Tycoon Deluxe Windows Basisgrafiken.
|
||||
description.el_GR = Αρχικά γραφικά από το Transport Tycoon Deluxe έκδοση Windows.
|
||||
description.en_GB = Original Transport Tycoon Deluxe Windows edition graphics.
|
||||
description.en_US = Original Transport Tycoon Deluxe Windows edition graphics.
|
||||
description.es_ES = Gráficos originales de Transport Tycoon Deluxe versión Windows.
|
||||
description.et_ET = Algse Transport Tycoon Deluxe Windowsi versiooni graafika.
|
||||
description.fi_FI = Alkuperäiset Transport Tycoon Deluxe Windows grafiikat.
|
||||
description.fr_FR = Graphiques originaux de Transport Tycoon Deluxe (version Windows).
|
||||
description.hr_HR = Originalna grafika za Transport Tycoon Deluxe Windows izdanje.
|
||||
@@ -30,15 +26,10 @@ description.it_IT = Grafica originale di Transport Tycoon Deluxe, edizione Windo
|
||||
description.nb_NO = Original grafikk fra Transport Tycoon Deluxe for Windows.
|
||||
description.nl_NL = Originele graphics van de Transport Tycoon Deluxe Windows-versie.
|
||||
description.nn_NO = Original grafikk frå Transport Tycoon Deluxe for Windows.
|
||||
description.pl_PL = Oryginalna edycja grafik dla Transport Tycoon Deluxe Windows.
|
||||
description.pt_PT = Gráficos originais da edição Windows de Transport Tycoon Deluxe.
|
||||
description.ro_RO = Setul grafic original al Transport Tycoon Deluxe pentru Windows.
|
||||
description.ru_RU = Оригинальная графика из Transport Tycoon Deluxe для Windows.
|
||||
description.sk_SK = Pôvodná grafika Transport Tycoon Deluxe (Windows).
|
||||
description.sl_SL = Originalna grafika Transport Tycoon Deluxe za različico oken(windows).
|
||||
description.sr_RS = Originalni skup grafika Transport Tycoon Deluxe Windows izdanja.
|
||||
description.sv_SE = Originalgrafiken från Transport Tycoon Deluxe, Windows-utgåvan.
|
||||
description.tr_TR = Orijinal Transport Tycoon Deluxe Windows sürümü grafikleri.
|
||||
description.zh_TW = 原版 Transport Tycoon Deluxe Windows 版的圖形。
|
||||
|
||||
[files]
|
||||
|
@@ -8,18 +8,14 @@ name = original_windows
|
||||
shortname = TTDO
|
||||
version = 0
|
||||
description = Original Transport Tycoon Deluxe Windows edition sounds.
|
||||
description.af_ZA = Oorspronklike Transport Tycoon Deluxe Windows uitgawe klanke.
|
||||
description.ar_EG = النسخة الاصلية من ترانسبورت تايكون ديلوكس الصوتية نسخة وندوز
|
||||
description.bg_BG = Оригинални звуци на Transport Tycoon Deluxe за Windows.
|
||||
description.ca_ES = Sons originals de Transport Tycoon Deluxe per a Windows.
|
||||
description.cs_CZ = Původní sada zvuků Transport Tycoon Deluxe (verze pro Windows).
|
||||
description.da_DA = Originallyd fra Transport Tycoon Deluxe Windows-version.
|
||||
description.de_DE = Original Transport Tycoon Deluxe Windows Basissounds.
|
||||
description.el_GR = Αρχικοί ήχοι από το Transport Tycoon Deluxe έκδοση Windows.
|
||||
description.en_GB = Original Transport Tycoon Deluxe Windows edition sounds.
|
||||
description.en_US = Original Transport Tycoon Deluxe Windows edition sounds.
|
||||
description.es_ES = Sonidos originales de Transport Tycoon Deluxe versión Windows.
|
||||
description.et_ET = Algse Transport Tycoon Deluxe Windowsi versiooni helid.
|
||||
description.fi_FI = Alkuperäiset Transport Tycoon Deluxe Windows äänet.
|
||||
description.hr_HR = Originalni zvukovi za Transport Tycoon Deluxe Windows izdanje.
|
||||
description.hu_HU = Az eredeti Transport Tycoon Deluxe Windows verziójának hangjai.
|
||||
@@ -29,15 +25,10 @@ description.it_IT = Suoni originali di Transport Tycoon Deluxe, edizione Windows
|
||||
description.nb_NO = Originale lyder fra Transport Tycoon Deluxe for Windows.
|
||||
description.nl_NL = Originele geluiden van de Transport Tycoon Deluxe Windows-versie.
|
||||
description.nn_NO = Originale lydar frå Transport Tycoon Deluxe for Windows.
|
||||
description.pl_PL = Oryginalna edycja dźwięków dla Transport Tycoon Deluxe Windows.
|
||||
description.pt_PT = Sons originais da edição Windows de Transport Tycoon Deluxe.
|
||||
description.ro_RO = Setul de sunete original al Transport Tycoon Deluxe pentru Windows.
|
||||
description.ru_RU = Оригинальный набор звукового оформления из игры Transport Tycoon Deluxe для Windows.
|
||||
description.sk_SK = Pôvodné zvuky Transport Tycoon Deluxe (Windows).
|
||||
description.sl_SL = Originalni zvoki Transport Tycoon Deluxe različice oken(windows).
|
||||
description.sr_RS = Originalni skup zvukova Transport Tycoon Deluxe Windows izdanja.
|
||||
description.sv_SE = Originalljuden från Transport Tycoon Deluxe, Windows-utgåvan.
|
||||
description.tr_TR = Orijinal Transport Tycoon Deluxe Windows sürümü sesleri.
|
||||
description.zh_TW = 原版 Transport Tycoon Deluxe Windows 版的音效。
|
||||
|
||||
[files]
|
||||
|
@@ -8,18 +8,14 @@ shortname = NULL
|
||||
version = 0
|
||||
fallback = true
|
||||
description = A music pack without actual music.
|
||||
description.af_ZA = 'n Musiek stel sonder enige musiek.
|
||||
description.ar_EG = مجموعة موسيقى بدون موسيقى
|
||||
description.bg_BG = Празен музикален пакет.
|
||||
description.ca_ES = Un joc de música sense cap música.
|
||||
description.cs_CZ = Prázná hudební sada.
|
||||
description.da_DA = En musikpakke uden musik.
|
||||
description.de_DE = Ein Musikset ohne Musik.
|
||||
description.el_GR = Ένα πάκετο μουσικής χωρίς πραγματική μουσική.
|
||||
description.en_GB = A music pack without actual music.
|
||||
description.en_US = A music pack without actual music.
|
||||
description.es_ES = Un conjunto de música vacío.
|
||||
description.et_ET = Muusikakomplekt ilma igasuguse muusikata.
|
||||
description.fi_FI = Musiikkipaketti, jossa ei ole musiikkia.
|
||||
description.fr_FR = Un pack de musiques sans musiques.
|
||||
description.hr_HR = Muzički paket bez ikakve muzike.
|
||||
@@ -29,15 +25,10 @@ description.it_IT = Un pacchetto musicale non contenente alcuna musica.
|
||||
description.nb_NO = En musikkpakke uten noe musikk.
|
||||
description.nl_NL = Een muziekset zonder muziek.
|
||||
description.nn_NO = Ei musikkpakke utan noko musikk.
|
||||
description.pl_PL = Zestaw utworów muzycznych nie zawierający żadnej muzyki.
|
||||
description.pt_PT = Um conjunto de música vazio.
|
||||
description.ro_RO = Un set de muzică fără muzică inclusă.
|
||||
description.ru_RU = "Пустой" набор музыкального оформления, не содержащий никакой музыки.
|
||||
description.sk_SK = Sada hudby neobsahujúca hudbu.
|
||||
description.sl_SL = Glasbeni paket z vključeno glasbo.
|
||||
description.sr_RS = Prazan skup muzičkih numera.
|
||||
description.sv_SE = Ett musikpaket utan någon musik.
|
||||
description.tr_TR = Müzik içermeyen boş bir müzik paketi.
|
||||
description.zh_TW = 不含任何音樂的音樂集。
|
||||
|
||||
[files]
|
||||
|
@@ -8,18 +8,14 @@ name = original_windows
|
||||
shortname = TTDW
|
||||
version = 1
|
||||
description = Original Transport Tycoon Deluxe Windows edition music.
|
||||
description.af_ZA = Oorspronklike Transport Tycoon Deluxe Windows uitgawe musiek.
|
||||
description.ar_EG = النسخة الاصلية من ترانسبورت تايكون ديلوكس الموسيقية نسخة وندوز
|
||||
description.bg_BG = Оригинална музика на Transport Tycoon Deluxe за Windows.
|
||||
description.ca_ES = Música Original de Transport Tycoon Deluxe per a Windows.
|
||||
description.cs_CZ = Původní hudba Transport Tycoon Deluxe (verze pro Windows).
|
||||
description.da_DA = Originalmusik fra Transport Tycoon Deluxe Windows-version.
|
||||
description.de_DE = Original Transport Tycoon Deluxe Windows Musikset.
|
||||
description.el_GR = Αρχική μουσική από το Transport Tycoon Deluxe έκδοση Windows.
|
||||
description.en_GB = Original Transport Tycoon Deluxe Windows edition music.
|
||||
description.en_US = Original Transport Tycoon Deluxe Windows edition music.
|
||||
description.es_ES = Música original de Transport Tycoon Deluxe versión Windows.
|
||||
description.et_ET = Algse Transport Tycoon Deluxe Windowsi versiooni muusika.
|
||||
description.fi_FI = Alkuperäinen Transport Tycoon Deluxe Windows musiikki.
|
||||
description.fr_FR = Musiques originales de Transport Tycoon Deluxe (version Windows).
|
||||
description.hr_HR = Originalna muzika za Transport Tycoon Deluxe Windows izdanje.
|
||||
@@ -29,15 +25,10 @@ description.it_IT = Musica originale di Transport Tycoon Deluxe, edizione Window
|
||||
description.nb_NO = Original musikk fra Transport Tycoon Deluxe for Windows.
|
||||
description.nl_NL = Originele muziek van de Transport Tycoon Deluxe Windows-versie.
|
||||
description.nn_NO = Original musikk frå Transport Tycoon Deluxe for Windows.
|
||||
description.pl_PL = Oryginalna edycja utworów muzycznych w Transport Tycoon Deluxe Windows.
|
||||
description.pt_PT = Música original da edição Windows de Transport Tycoon Deluxe.
|
||||
description.ro_RO = Setul de muzică original al Transport Tycoon Deluxe pentru Windows.
|
||||
description.ru_RU = Оригинальный набор музыкального оформления из игры Transport Tycoon Deluxe.
|
||||
description.sk_SK = Pôvodná hudba z Transport Tycoon Deluxe (Windows).
|
||||
description.sl_SL = Originalna glasba Transport Tycoon Deluxe različice oken(windows).
|
||||
description.sr_RS = Originalni skup muzičkih numera Transport Tycoon Deluxe Windows izdanja.
|
||||
description.sv_SE = Originalmusiken från Transport Tycoon Deluxe, Windows-utgåvan.
|
||||
description.tr_TR = Orijinal Transport Tycoon Deluxe Windows sürümü müzikleri.
|
||||
description.zh_TW = 原版 Transport Tycoon Deluxe Windows 版的音樂。
|
||||
|
||||
[files]
|
||||
|
196
changelog.txt
196
changelog.txt
@@ -1,189 +1,3 @@
|
||||
1.0.3-RC1 (2010-07-17)
|
||||
------------------------------------------------------------------------
|
||||
- Feature: [NewGRF] Textstack support for CB 38 (r20086)
|
||||
- Feature: [NewGRF] Add a railtype flag to disallow level crossings per railtype (r20049)
|
||||
- Change: Improve desync debugging, crash log data and the Debian packaging (by making a debug symbols package) (r20138, r20136, r20129)
|
||||
- Fix: Do not scan /data and ~/data (if they happen to be your working directory). If it is the directory where your binary is located it will still scan them [FS#3949] (r20166)
|
||||
- Fix: Integer comparison failed in case the difference was more than 'MAX_UINT'/2 [FS#3954] (r20162)
|
||||
- Fix: [YAPP] Converting a one-way block to a path signal with trains on both sides could lead to a train crash [FS#3937] (r20156)
|
||||
- Fix: [NewGRF] Improve handling of snowing of railtypes and (infra)structures on foundations [FS#3883] (r20153, r20132, r20126, r20125)
|
||||
- Fix: Ships were not marked as dirty when stopping inside a depot [FS#3880] (r20142)
|
||||
- Fix: Some windows ignored all hotkeys [FS#3902] (r20141, r20140, r20139)
|
||||
- Fix: Do not allow building a rail track to the water using a tree-tile [FS#3695] (r20110)
|
||||
- Fix: [NoAI] AITown::GetRating() returned wrong values [FS#3934] (r20103)
|
||||
- Fix: Reading deleted memory when selecting a NewGRF in the content download window of which the data has not been acquired from the content server. The crash would occur after the content server's reply was processed and the ContentInfo object was replaced with another [FS#3899] (r20089, r20082)
|
||||
- Fix: If after loading a savegame (including intro game) one tried to save a game (including autosave) and that failed (very) early on because it could not open the file for writing all pointers would be converted to NULLs which then causes corrupted game states [FS#3876, FS#3887, FS#3920, FS#3923] (r20087)
|
||||
- Fix: gitignore and hgignore had more missing/wrong entries (r20078, r20033, r20031)
|
||||
- Fix: Remove the space between 'open' and 'ttd' in the title screen (r20077)
|
||||
- Fix: Road vehicles could get crashed twice in a tick [FS#3896] (r20053, r20034)
|
||||
- Fix: Coloured_news_year was stored in savegames while it should be a client setting [FS#3916] (r20051)
|
||||
- Fix: Crash when spectator tried to open a vehicle list without selecting any company [FS#3892] (r20041)
|
||||
- Fix: Instead of loading the intro game when loading a savegame fails on the dedicated server, generate a new game [FS#3907] (r20039)
|
||||
- Fix: Tram tracks did not show at level crossing with the new railtypes [FS#3911] (r20036)
|
||||
- Fix: Under some circumstances you could get into an infinite loop [FS#3909] (r20035)
|
||||
- Fix: The 64 bits TortoiseSVN was not always properly detected (r20029)
|
||||
- Fix: Do not close the sort dropdown in the (original) vehicle list when there are no vehicles. That code is meant for the 'actions' dropdown [FS#3881] (r20014)
|
||||
- Fix: When joining a company with a password you could only enter 20 characters of the password (r20012)
|
||||
- Fix: Sign sorting was unstable [FS#3893] (r20009)
|
||||
- Fix: Trains should also have running cost while slowing down for stop (r20006)
|
||||
- Fix: [NewGRF] Stringcodes 82, 83 and 84 were not properly converted to openttd codes so they did not work (r20004)
|
||||
- Fix: Clear force_proceed when entering depots and when loading, resetting of force_proceed on manual stopping did not work [FS#3878] (r19992)
|
||||
- Fix: Do not show an error message when trying to start/stop a crashed plane [FS#3874] (r19953)
|
||||
- Fix: Allow turning of roadvehicles while waiting in a queue (r19945)
|
||||
- Fix: Disallow moving of vehicle news window [FS#3865] (r19943)
|
||||
- Fix: Under some (unlucky) circumstances the wrong company would be 'current company' when changing company colour or orders [FS#3903]
|
||||
|
||||
|
||||
1.0.2 (2010-06-19)
|
||||
------------------------------------------------------------------------
|
||||
- Fix: Owner of the Waypoint View window was not properly set (r19990)
|
||||
- Fix: Close list of vehicles with given oil rig in orders when the oil rig is deleted (r19956)
|
||||
- Fix: Close list of vehicles with given buoy/oil rig in orders when switching company (r19955)
|
||||
- Fix: Do not close list of waypoint's trains when the waypoint view is closed when it is sticky (r19952)
|
||||
- Fix: Close buoy's vehicle list when the buoy is deleted [FS#3869] (r19951)
|
||||
|
||||
|
||||
1.0.2-RC1 (2010-06-05)
|
||||
------------------------------------------------------------------------
|
||||
- Feature: Translated desktop shortcut comments (r19884)
|
||||
- Fix: When 'pause on new game' is set, pause the game before CleanupGeneration() to avoid conflicts with concurrent GUI code [FS#3857] (r19934)
|
||||
- Fix: Pay for the rail/road when constructing tunnels, bridges, depots and stations [FS#3859, FS#3827] (r19925, r19887, r19881)
|
||||
- Fix: Closing chatbox could cause glitches when news message was shown [FS#3865] (r19921)
|
||||
- Fix: [YAPP] Inform the pathfinder as well about the fact that the backside of an one-way path signal can be a safe waiting point [FS#3803] (r19896)
|
||||
- Fix: Allow loading savegames from the console without specifying the '.sav' extension, i.e. make it consistent with saving savegames from the console [FS#3761] (r19885)
|
||||
- Fix: Dropdowns did affect positioning of new windows because they were not yet removed when the new windows were positioned [FS#3812] (r19883)
|
||||
- Fix: [NoAI] AIEngine::IsValidEngine() and AIEngine::IsBuildable() returned false positives. Especially wagons of unavailable railtypes were reported available (r19880)
|
||||
- Fix: Default vehicle group texts were drawn one pixel too low [FS#3851] (r19878)
|
||||
- Fix: It was not possible to send all trains with common waypoint order to depot (r19876)
|
||||
- Fix: Compilation for NetBSD [FS#3809, FS#3840, FS#3845] (r19874, r19859, r19853, r19781)
|
||||
- Fix: If the (guessed initial) destination tile of a road vehicle was not a road stop but was a T-junction or turn, the road vehicles would jump around in circles [FS#3817] (r19873)
|
||||
- Fix: When a network connection gets lost and a game with AIs was loaded the client might crash due to the AIs not being loaded while the game loop is executed [FS#3819] (r19869)
|
||||
- Fix: Use non-breaking spaces for currency pre-/postfixes (r19867)
|
||||
- Fix: Crash when changing/viewing locale settings in the console [FS#3830] (r19865, r19864, r19863, r19862)
|
||||
- Fix: Drawing fallback sprites for unavailable NewGRF waypoints failed (r19852)
|
||||
- Fix: Ensure that both texts of the NewGRF gui download button fit (r19823)
|
||||
- Fix: Kicking clients by IP did not work [FS#3784] (r19818)
|
||||
- Fix: Compilation with MinGW GCC 4.5.0 and UNICODE (r19787)
|
||||
- Fix: If a waypoint is immediately followed by a path signal a reservation would be made from that path signal before the waypoint is marked passed. As a result the order to go to the waypoint is used to reserve the path after the waypoint and as such trains get lost [FS#3770] (r19784)
|
||||
- Fix: NULL pointer deference when testing relative scope *action2 on an unbuilt engine [FS#3828] (r19782)
|
||||
- Fix: Crash on too long paths [FS#3807] (r19780, r19779, r19778, r19777, r19776)
|
||||
- Fix: MP_VOID tiles shall have no tropic zone [FS#3820] (r19769)
|
||||
- Fix: Half-desert tiles would never revert back to clear tiles (r19768)
|
||||
- Fix: Height in smallmap was different from measured heights [FS#3808] (r19767)
|
||||
- Fix: [NewGRF] Vehicle var 43 missed AI information in purchase list (r19761)
|
||||
- Fix: Blocked roadvehicles should first check whether they are still blocked before accelerating again, instead of continuous starting/stopping (r19755)
|
||||
- Fix: Try harder to find a suitable font that can be loaded, i.e. while searching for a suitable font test whether you can open it [FS#3740] (r19753)
|
||||
- Fix: Make sure the chat area fits in the default window size; if you want it larger, you can always change/override it in the config file [FS#3798] (r19751)
|
||||
- Fix: [NewGRF] Industry var 0x43 is not 'safe' during callbacks 22 and 38 either (r19750)
|
||||
- Fix: [NewGRF] Possible divide-by-zero if a NewGRF checked industry var 42 while the production level was 0 (r19749)
|
||||
- Fix: Do not recenter usually centered windows when resizing main window or changing language, if they have been moved/resized before [FS#3675] (r19746)
|
||||
- Fix: The GUI is controlled by _local_company, not _current_company (r19745)
|
||||
- Fix: NewGRFs could access map bits of not yet constructed industries and houses during construction callbacks (r19748, r19743)
|
||||
- Fix: [NewGRF] Passing some invalid data to industry variable 67/68 could cause a crash (r19713)
|
||||
- Fix: Check for industry availability more thoroughly and cancel object placement when selecting not available industries [FS#3787] (r19701)
|
||||
- Fix: Avoid showing building toolbars behind the main toolbar when the 'Link landscape toolbar' setting is active [FS#3781] (r19696)
|
||||
- Fix: Under some circumstances the player's name could be empty (r19693)
|
||||
- Fix: Do not show an error message when trying to give another client an amount of 0 money [FS#3779] (r19684)
|
||||
- Fix: Do not display an error message when double clicking on a vehicle in the 'available vehicles'-window (r19669)
|
||||
- Change: Name invalid engines, cargos and industries 'invalid', if the player removed the supplying NewGRFs, hide invalid engines from the purchase list (r19879, r19877)
|
||||
|
||||
|
||||
1.0.1 (2010-05-01)
|
||||
------------------------------------------------------------------------
|
||||
- Fix: Crash when using restart via rcon (r19722)
|
||||
- Fix: Leaking a file descriptor [CVE-2010-0406] [FS#3785] (r19695)
|
||||
- Fix: Crash when the music/graphics metadata files were unreadable [FS#3774] (r19674)
|
||||
|
||||
|
||||
1.0.1-RC2 (2010-04-22)
|
||||
------------------------------------------------------------------------
|
||||
- Fix: Desync when joining the game because of using the wrong variable (r19687)
|
||||
- Fix: Truncated archives were not detected when using zlib 1.2.3. This also fixes zlib 1.2.4 compatibility, zlib 1.2.5 is bugfree (r19686)
|
||||
- Fix: Towns with 3x3 and 2x2 road layouts could not expand (r19683)
|
||||
- Fix: When joining a MP game all clients with company ID > 0 would be shown as if they were a spectator [FS#3775] (r19680)
|
||||
- Fix: Client status was shown incorrect in the console (r19678)
|
||||
|
||||
|
||||
1.0.1-RC1 (2010-04-17)
|
||||
------------------------------------------------------------------------
|
||||
- Feature: [NewGRF] Support for extended text code 0x9A 11, print qword (r19570)
|
||||
- Feature: Give more detailed error message when trying to build a too long bridge (r19561)
|
||||
- Feature: Add rail speed limit to land area information window (r19556, r19434)
|
||||
- Add: [NoAI] AIRail::GetMaxSpeed(RailType) to get the speed limit of railtypes (r19591)
|
||||
- Change: Sync Debian packaging updates from Debian, but keep building a single package (r19572)
|
||||
- Fix: Crash of a dedicated server if the null blitter is overridden and (after a while) there is no company 0 on new year anymore [FS#3749] (r19664)
|
||||
- Fix: In rare cases, update of signals could be missed (r19663)
|
||||
- Fix: Various improvements of command handling, missing error messages, improper validation causing crashes [CVE-2010-0402] [FS#3748] (r19658, r19657, r19656, r19655, r19654, r19637, r19633, r19621, r19616, r19605, r19604)
|
||||
- Fix: Industry generation failed for large maps and lots of industry types (r19652, r19643)
|
||||
- Fix: When a company is sold, move connected clients to spectators [FS#3745] (r19651)
|
||||
- Fix: A client would not be properly moved when moved while joining, e.g. when entering a company's password. This caused the client to be in the wrong company (according to the rest of the clients) and the client being kicked on the first command [FS#3760] (r19648)
|
||||
- Fix: Trains loaded above the original IDs did not have a default railtypelabel assigned to them, causing them to be unavailable. Could cause desyncs if the multiplayer game was not started from a savegame [FS#3768] (r19647)
|
||||
- Fix: Do not allow building cacti outside of the desert or rain forest trees outside of the rain forest area. This to prevent people from thinking planting rain forest trees makes the rain forest bigger and thus adds more place to build a lumber mill [FS#3728] (r19644, r19635, r19634)
|
||||
- Fix: Desync when taking over companies (r19636)
|
||||
- Fix: Chat message caused glitch when rejoining a network game [FS#3757] (r19629)
|
||||
- Fix: Desync when a command is received and in the queue while a client starts joining, i.e. save the game state. This can happen in two ways: with frame_freq > 1 a command received in a previous frame might not be executed yet or when a command is received in the same frame as the join but before the savegame is made. In both cases the joining client would not get all commands to get in-sync with the server (and the other clients) (r19620)
|
||||
- Fix: Company related graphs were not updated correctly after changing the company colour [FS#3763] (r19615)
|
||||
- Fix: Possible invalid read when server moves client to spectators before he finishes joining [FS#3755] (r19613)
|
||||
- Fix: Crash when opening a savegame with a waypoint from around 0.4.0 [FS#3756] (r19612)
|
||||
- Fix: Improve joining behaviour; kicking clients when entering passwords that was just cleared, 'connection lost' for people failing the password, access restriction circumvention [CVE-2010-0401] [FS#3754] (r19610, r19609, r19608, r19607, r19606)
|
||||
- Fix: Desync debugging; false positives in the cache validity checks and saving/loading the command stream (r19619, r19617, r19602, r19601, r19600, r19596, r19593, r19592, r19589, r19587, r19586)
|
||||
- Fix: Presence of online content was not properly updated after download due to duplicate slashes in the path (r19600)
|
||||
- Fix: [NewGRF] Setting industry prop 0x24 to 0 caused empty station names (r19590)
|
||||
- Fix: Crash when pressing 'h' (non-stop) in the order window of a ship or aircraft [FS#3744] (r19584)
|
||||
- Fix: Graphs were not properly updated when going toggling keys (i.e. companies) (r19574)
|
||||
- Fix: The timetable button was not automatically raised [FS#3739] (r19571)
|
||||
- Fix: [NewGRF] Possible buffer underflow in NewGRF string code (r19569)
|
||||
- Fix: [NewGRF] Do not return a random colour for unowned industries in var 45; TTDPatch does not seem to set the colour data in that case either and it could lead to desyncs (r19566)
|
||||
- Fix: Window::OnResize() was not always called while resizing a window causing incorrect windows [FS#3730] (r19563, r19558)
|
||||
- Fix: Bridge build error message should not show the same message twice (r19560, r19559)
|
||||
- Fix: [NewGRF] During NewGRF loading, store rail type labels in temporary data and process after loading has finished. This avoids deactivated rail vehicles being reactivated if the climate property is set after the rail type property (r19557, r19502)
|
||||
- Fix: Improperly scaled cargo payment graph when having lots of cargo (r19550, 19543)
|
||||
- Fix: [NewGRF] Properties set before property 08 (house, industry, industry tiles) should be ignored, not trigger the NewGRF to be disabled [FS#3725] (r19547)
|
||||
- Fix: Sorting industries by production was broken for NewGRF industries (r19538)
|
||||
- Fix: Vehicle details window did not resize correctly after refitting a road vehicle to a longer variant [FS#3720] (r19533)
|
||||
- Fix: Prevent drawing industries disabled at the smallmap as land tiles when they are built on water (r19523)
|
||||
- Fix: Tunnels, bridges and roadstops are build with only one roadtype (r19506)
|
||||
- Fix: Remove same_industry_close setting did not do what it said and caused NewGRF trouble (r19499)
|
||||
- Fix: Keep number padding intact when cloning vehicle names [FS#3710] (r19498)
|
||||
- Fix: [NewGRF] Bytes and words get sign-extended for temporary/persistent storage (r19497)
|
||||
- Fix: Stop reducing the size of the vehicle list after selecting a vehicle with a long description (r19480)
|
||||
- Fix: Implement custom sound effect for helicopter take-off [FS#3668] (r19364)
|
||||
- Update: Plural type of Slovak (r19452)
|
||||
|
||||
|
||||
1.0.0 (2010-04-01)
|
||||
------------------------------------------------------------------------
|
||||
- Fix: Network clients would crash while connecting to a server with AIs (r19526)
|
||||
- Fix: [NPF] Crash when finding a waypoint before finding the closest depot [FS#3703] (r19460)
|
||||
|
||||
|
||||
1.0.0-RC3 (2010-03-18)
|
||||
------------------------------------------------------------------------
|
||||
- Feature: Append rail type speed limit (if set) to rail type selection list, and toolbar title (r19431)
|
||||
- Feature: [NewGRF] Smallmap colours for railtypes (r19307)
|
||||
- Change: Make the drive through and cargo list consistency checks only run when 'desync' debugging is enabled (r19403, r19398)
|
||||
- Change: Update documentation for console command connect to use ip:port#company parameter format, in line with command line help (r19374)
|
||||
- Change: [NewGRF] Increase railtype cost range (r19306)
|
||||
- Fix: Mark industry windows dirty more often [FS#3701] (r19443)
|
||||
- Fix: Custom group names are misaligned with default ones when using rtl languages [FS#3700] (r19438)
|
||||
- Fix: With certain game settings one could clear tiles for free when building long roads (r19436)
|
||||
- Fix: When loading a savegame created with a house NewGRF without that NewGRF available all houses became tall office blocks (r19435)
|
||||
- Fix: Limit rail clearance earnings to 3/4s of rail build cost, to avoid money making loophole when rail build cost is less than rail removal earnings (r19433)
|
||||
- Fix: Crash when the error message 'owned by <town>' was shown [FS#3696] (r19432)
|
||||
- Fix: [NoAI] When the title game contains an AIPL block the AI settings where overwritten by those from the title game (r19429)
|
||||
- Fix: Gracefully handle the case where we cannot open a .tar file (r19427)
|
||||
- Fix: [YAPP] A train on a bridge/tunnel was not always found when checking for trains on a reserved path (r19425)
|
||||
- Fix: [NoAI] The AI Debug window did not open if an AI or library fails to compile when loading a savegame [FS#3669] (r19395)
|
||||
- Fix: One could not level the whole map anymore at once (r19392)
|
||||
- Fix: Only show the 'No AIs available' error message when explicitly changing the number of AI opponents [FS3676] (r19389)
|
||||
- Fix: [NoAI] When reloading a savegame, an AI failing to compile could trigger (trying) to read the not yet loaded information of another AI via the AI Debug window and its 'open with the most recently used AI' feature [FS#3666] (r19388)
|
||||
- Fix: Close all orders windows when switching companies [FS#3671] (r19387)
|
||||
- Fix: [IPv6] Netmask calculations were wrong if cidr >= 32 [FS#3684] (r19385)
|
||||
- Fix: Overbuilding bridges, rail stations did not properly update PBS reservation [FS#3680] (r19384, r19383)
|
||||
- Fix: [NoAI] List valuator could cause invalid iterators [FS#3665] (r19367)
|
||||
- Fix: Close error messages about missing ownership when the company closes or is taken over [FS#3663] (r19358, r19357)
|
||||
|
||||
|
||||
1.0.0-RC2 (2010-03-04)
|
||||
------------------------------------------------------------------------
|
||||
- Feature: [YAPF] Consider the railtype imposed speed limit for pathfinding (r19301)
|
||||
@@ -245,7 +59,7 @@
|
||||
- Fix: Crash when a baseset has an empty metadata field (r19095)
|
||||
- Fix: Possible read/write after free when the client triggered the server to close the connection [FS#3599] (r19072)
|
||||
- Fix: Remove Bidi control characters from the reordered text so they are not drawn [FS#3604] (r19067)
|
||||
- Fix: [NewGRF] Settings that are part of the 'TTDPatch flags' can cause desyncs if they are changed in network games (r19066)
|
||||
- Fix: [NewGRF] Settings that are part of the "TTPatch flags" can cause desyncs if they are changed in network games (r19066)
|
||||
- Fix: When banning yourself via rcon do not send the 'command response' to the client as the connection has already been terminated [FS#3598] (r19054)
|
||||
- Fix: Mass stopping/starting/autoreplacing gave empty errors when there were no vehicles [FS#3577] (r19024)
|
||||
- Fix: City airport introduction date had become 5 years later (r19023)
|
||||
@@ -502,7 +316,7 @@
|
||||
- Fix: Some inconsistencies with the difficulty settings in the scenario editor. Also re-enable changing some difficulty settings (e.g. max loan) in the scenario editor [FS#3219] (r17644)
|
||||
- Fix: Do not accept cargo produced in the same industry; generalise and improve the check used only for valuables (r17437)
|
||||
- Fix: Pay only for cargo actually delivered, not for all cargo unloaded at station; can differ with 'stockpiling' industries (r17436)
|
||||
- Fix: Improve movement of aircraft; do not make turns bigger than 45 degrees while in flight, do not move while turning on the ground (r17415, r17405)
|
||||
- Fix: Improve movement of aircraft; do not make turns bigger then 45 degrees while in flight, do not move while turning on the ground (r17415, r17405)
|
||||
- Fix: Crash in order GUI when changing some orders with both the mouse and keyboard at the exact same time [FS#2859] (r17384)
|
||||
- Fix: Trains would not show smoke if the load/unload counter was not 0, though there does not seem to be a reason to check that variable anyhow anymore [FS#3162] (r17352)
|
||||
- Fix: One was not offered to take over bankrupt companies anymore; caused by the introduction NoAI, although NewAI had the same problem too [FS#2769] (r17345)
|
||||
@@ -1692,7 +1506,7 @@
|
||||
- Codechange: Add new vehicle hash table for collision detection and finding vehicles on a tile. The hash area scanned is far smaller than the old hash table, which is now used for viewport updates only. This should give a significant performance improvement for games with many vehicles (r10111)
|
||||
- Codechange: Do not redraw all station tiles when cargo is added or removed if the station has no custom graphics (r10062)
|
||||
- Codechange: Add some support for NewGRF var 7D, temporary storage array (r9707)
|
||||
- Codechange: Add support for returning 'TTDPatch variables' (Action D) (r9701)
|
||||
- Codechange: Add support for returning 'ttdpatch variables' (Action D) (r9701)
|
||||
- Codechange: Implement NewGRF callback 36, which allows changing of various properties which were previously static (r9671 and several others)
|
||||
- Codechange: Add support for multiple 'base' directories for NewGRF searching (r9560)
|
||||
- Codechange: Implement actions 1/2/3 for cargoes, callback handler and custom icon sprites (rmany)
|
||||
@@ -2462,7 +2276,7 @@
|
||||
- Fix: Incorrect validating of tree-planting command which can allow a buffer-overflow (r3446)
|
||||
- Fix: [NewGRF] When changing the sprite ID of a vehicle, if it is not FD (custom graphics), the value needs to changed from a 16bit array offset to an array index. (fixes tropicstw.grf) (r3449)
|
||||
- Fix: You could not remove an item from a list-type of config ingame from the configuration file (r3475)
|
||||
- Fix: [NewGRF] Always reinitialize the TTDPatch flags as patch settings may have changed (r3486)
|
||||
- Fix: [NewGRF] Always reinitialize the ttdpatch flags as patch settings may have changed (r3486)
|
||||
- Fix: Price for demolishing a bridge was dependent on orientation and map size (r3487)
|
||||
|
||||
|
||||
@@ -2655,7 +2469,7 @@
|
||||
- Fix: [Network] 'kick 1' did crash dedicated servers
|
||||
- Fix: [Network] A server no longer crashes when a client sends an invalid DoCommand, but drops the client instead
|
||||
- Fix: [Network] Added packet protection. No longer a client or server
|
||||
- Fix: [Network] Bug in bind system. Advertising failed on systems with more than 1 ip, and server_bind active to one of them
|
||||
- Fix: [Network] Bug in bind system. Advertising failed on systems with more then 1 ip, and server_bind active to one of them
|
||||
- Fix: [Network] Disabled 'money-cheat' (read: bug which could give people a lot of money)
|
||||
- Fix: [SDL] Now the binary never links to SDL if DEDICATED is set
|
||||
- Fix: [Windows] Somehow mousewheel was disabled on windows using SDL; reenabled again
|
||||
|
10
config.lib
10
config.lib
@@ -11,7 +11,7 @@ log() {
|
||||
}
|
||||
|
||||
set_default() {
|
||||
released_version="1.0.3-RC1"
|
||||
released_version="1.0.0-RC2"
|
||||
|
||||
ignore_extra_parameters="0"
|
||||
# We set all kinds of defaults for params. Later on the user can override
|
||||
@@ -2304,13 +2304,6 @@ detect_library() {
|
||||
if [ -z "$res" ]; then
|
||||
log 2 " trying /usr/local/include/$4$5... no"
|
||||
fi
|
||||
if [ -z "$res" ] && [ "$os" = "NETBSD" ]; then
|
||||
eval "$2=`ls -1 /usr/pkg/include/$4*.h 2>/dev/null | egrep \"\/$5\$\"`"
|
||||
eval "res=\$$2"
|
||||
if [ -z "$res" ]; then
|
||||
log 2 " trying /usr/pkg/include/$4$5... no"
|
||||
fi
|
||||
fi
|
||||
|
||||
eval "res=\$$2"
|
||||
if [ -n "$res" ] && ( [ -n "$force_static" ] || ( [ "$enable_static" != "0" ] && [ "$os" != "OSX" ] ) ); then
|
||||
@@ -3161,7 +3154,6 @@ showhelp() {
|
||||
echo " --with-midi=midi define which midi-player to use"
|
||||
echo " --with-midi-arg=arg define which args to use for the"
|
||||
echo " midi-player"
|
||||
echo " --with-libtimidity enables libtimidity support"
|
||||
echo " --with-allegrol[=allegro-config]"
|
||||
echo " enables Allegro video driver support"
|
||||
echo " --with-cocoa enables COCOA video driver (OSX ONLY)"
|
||||
|
@@ -23,7 +23,7 @@ Multiplayer Manual for OpenTTD (0.3.5)
|
||||
- If you want to see which servers all online on the Internet, click on 'Internet'
|
||||
and 'Find Server'
|
||||
|
||||
- If there were more than one server
|
||||
- If there were more then one server
|
||||
- select one in the list below the buttons
|
||||
- click on 'join game'
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
.\" Hey, EMACS: -*- nroff -*-
|
||||
.\" Please adjust this date whenever revising the manpage.
|
||||
.Dd Apr 01, 2010
|
||||
.Dd Jan 18, 2010
|
||||
.Dt OPENTTD 6
|
||||
.Sh NAME
|
||||
.Nm openttd
|
||||
|
@@ -1,6 +1,6 @@
|
||||
OpenTTD's known bugs
|
||||
Last updated: 2010-07-17
|
||||
Release version: 1.0.3-RC1
|
||||
Last updated: 2010-03-04
|
||||
Release version: 1.0.0-RC2
|
||||
------------------------------------------------------------------------
|
||||
|
||||
|
||||
@@ -34,11 +34,6 @@ that you can find at: http://bugs.openttd.org
|
||||
If the bugs are closed but still listed here it means that the bug is fixed
|
||||
and that the nightlies and next major release will not have that bug.
|
||||
|
||||
- 3938 DirectMusic not properly resetting state causing music to sound wrong
|
||||
- 3935 Under some circumstances two road vehicles can leave road stop simultaniously
|
||||
- 3816 Console text does not always fit at 640x480
|
||||
- 3746 Console output with right-to-left texts in left-to-right texts is not correct
|
||||
- 3714 Some corrupted savegames can cause crashes
|
||||
- 3651 [OSX] Crash when selecting full screen
|
||||
- 3648 [OSX] Crash when selecting music
|
||||
- 3637 Second highest competing station gets penalised twice
|
||||
@@ -140,7 +135,6 @@ Duplicate (station) names after renaming [FS#3204]
|
||||
to the automatically generated names.
|
||||
|
||||
Extreme CPU usage/hangs when using SDL and PulseAudio [FS#3294]
|
||||
OpenTTD hangs/freezes when closing, OpenTTD is slow, OpenTTD uses a lot of CPU
|
||||
OpenTTD can be extremely slow/use a lot of CPU when the sound is
|
||||
played via SDL and then through PulseAudio's ALSA wrapper. Under the
|
||||
same configuration OpenTTD, or rather SDL, might hang when exiting
|
||||
@@ -178,11 +172,3 @@ OpenTTD not properly resizing with SDL on X [FS#3305]
|
||||
Window managers that are known to exhibit this behaviour are KDE's
|
||||
and GNOME's. With the XFCE's and LXDE's window managers the resize
|
||||
event is sent when the user releases the mouse.
|
||||
|
||||
Content files not properly extracted with zlib 1.2.3.5-1.2.4 [FS#3753]
|
||||
With zlib 1.2.3.5 up to and including 1.2.4 the function "gzeof",
|
||||
which tells when we read the whole file, is broken in such a way
|
||||
that OpenTTD thinks it has extracted and written the whole file
|
||||
while the last few hundred/thousand bytes are not extracted yet.
|
||||
This causes problems for everything that is downloaded from the
|
||||
online content system when using one of those versions of zlib.
|
||||
|
@@ -4,8 +4,8 @@
|
||||
Type=Application
|
||||
Version=1.1
|
||||
Name=!!MENU_NAME!!
|
||||
Comment=A clone of Transport Tycoon Deluxe
|
||||
Icon=openttd
|
||||
Exec=!!TTD!!
|
||||
Terminal=false
|
||||
Categories=!!MENU_GROUP!!
|
||||
Comment=A clone of Transport Tycoon Deluxe
|
||||
|
@@ -1,15 +0,0 @@
|
||||
# $Id$
|
||||
|
||||
# This file is part of OpenTTD.
|
||||
# OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
|
||||
# OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
# See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#
|
||||
# Awk script to automatically generate a single comment line
|
||||
# for a translated desktop shortcut. If it does not exist there
|
||||
# is no output.
|
||||
#
|
||||
|
||||
/##isocode/ { lang = $2; next }
|
||||
/STR_DESKTOP_SHORTCUT_COMMENT/ { sub("^[^:]*:", "", $0); print "Comment[" lang "]=" $0; next}
|
@@ -1,25 +0,0 @@
|
||||
openttd (1.0.0~rc3-2) unstable; urgency=low
|
||||
|
||||
The openttd package has been moved from contrib into main. Since the
|
||||
OpenGFX free graphics set has been packaged for Debian, one can now run
|
||||
OpenTTD without needing any of the resources from the original game
|
||||
(though the original resources are still supported).
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Thu, 18 Mar 2010 13:09:35 +0100
|
||||
|
||||
openttd (0.7.0-1) unstable; urgency=low
|
||||
|
||||
Handling of AI players has changed in 0.7.0. This package no longer
|
||||
contains any AI players, so playing against the computer is not possible
|
||||
out of the box any longer. However, you can easily download AI players
|
||||
through the new "Content Downloading Service", after which playing with
|
||||
computer players is possible.
|
||||
|
||||
Loading old savegames with computer players is supported (AI players will
|
||||
be converted according to the current AI settings), but at this moment
|
||||
there are no AIs that completely handle any existing infrastructure built
|
||||
by the old AI, so starting a new game might be more fun (especially since
|
||||
most of the new AIs are a lot less erratic).
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Mon, 13 Apr 2009 15:11:20 +0200
|
||||
|
@@ -2,38 +2,28 @@ OpenTTD for Debian
|
||||
------------------
|
||||
|
||||
To properly play this game, you need a base graphics and sound set.
|
||||
Currently, the graphics, sound and music files from the original
|
||||
Transport Tycoon Deluxe game (Windows and DOS versions) are supported,
|
||||
as well as the free graphics replacement set "OpenGFX", sound
|
||||
replacement set "OpenSFX" (which is in non-free due to a restrictive
|
||||
license) and the free music replacement set "OpenMSX".
|
||||
Currently, the graphics files from the original Transport Tycoon Deluxe
|
||||
game (Windows and DOS versions) are supported, as well as the free
|
||||
graphics replacement set "OpenGFX".
|
||||
|
||||
Normally, installing the openttd package should automatically install
|
||||
openttd-opengfx as well, allowing OpenTTD to run out of the box. If you
|
||||
want sound, you'll have to enable non-free sources and install the
|
||||
openttd-opensfx package manually (or install the original Transport
|
||||
Tyccon Deluxe sound files).
|
||||
See readme.txt, section 4.1 for instructions on how to install these
|
||||
files.
|
||||
|
||||
The easiest way to install the OpenMSX music files is to use the in-game
|
||||
content download system, which should offer the latest version of the
|
||||
music files.
|
||||
-Music
|
||||
For in game music (optional), you should copy all files in the gm/
|
||||
subdir of your ttd installation to /usr/share/games/openttd/gm. You
|
||||
should also install timidity and a soundfont (freepats is packaged in
|
||||
Debian and works out of the box).
|
||||
|
||||
To find out how to install the original Transport Tycoon Deluxe graphics
|
||||
sound files and music files, see readme.txt, section 4.1.
|
||||
|
||||
-Playing Music
|
||||
In addition to installing a music set (see above), you'll also need
|
||||
to install the timidity midi player, available in the timidity
|
||||
package.
|
||||
|
||||
Remember that not all audio devices support multiple audiostreams
|
||||
(music and sound), so you might have to use alsa software mixing or
|
||||
pulseaudio.
|
||||
Don't forget to use -m extmidi if you want music, and if you have
|
||||
problems, remember that not all audio devices support multiple
|
||||
audiostreams (music and sound), so you might have to use alsa
|
||||
software mixing or pulseaudio.
|
||||
|
||||
-Scenarios
|
||||
There are no scenarios included in this release. Scenarios can be
|
||||
downloaded using OpenTTD's content service, which is available from
|
||||
OpenTTD's main menu. If you have obtained a scenario through other
|
||||
downloaded using openttd's content service, which is available from
|
||||
openttd's main menu. If you have obtained a scenario through other
|
||||
means, you can place it either in your ~/.openttd/scenario directory
|
||||
or in the system-wide /usr/share/games/openttd/scenario directory.
|
||||
|
||||
|
@@ -1,196 +1,152 @@
|
||||
openttd (1.0.3~rc1-0) unstable; urgency=low
|
||||
openttd (1.0.0~RC2) unstable; urgency=low
|
||||
|
||||
* New upstream release 1.0.3-RC1
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Sat, 05 Jun 2010 17:37:21 +0000
|
||||
|
||||
openttd (1.0.2-0) unstable; urgency=low
|
||||
|
||||
* New upstream release 1.0.2
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Sat, 19 Jun 2010 18:36:21 +0000
|
||||
|
||||
openttd (1.0.2~rc1-0) unstable; urgency=low
|
||||
|
||||
* New upstream release 1.0.2-RC1
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Sat, 05 Jun 2010 23:36:21 +0000
|
||||
|
||||
openttd (1.0.1-0) unstable; urgency=low
|
||||
|
||||
* New upstream release 1.0.1
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Sat, 01 May 2010 00:00:00 +0200
|
||||
|
||||
openttd (1.0.1~rc2-0) unstable; urgency=low
|
||||
|
||||
* New upstream release 1.0.1-RC2
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Wed, 21 Apr 2010 21:36:21 +0200
|
||||
|
||||
openttd (1.0.1~rc1-0) unstable; urgency=low
|
||||
|
||||
* New upstream release 1.0.1-RC1
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Sat, 17 Apr 2010 23:36:21 +0000
|
||||
|
||||
openttd (1.0.0-1) unstable; urgency=low
|
||||
|
||||
* [30a2162] New upstream release 1.0.0. (Closes: #570104)
|
||||
* [102698a] Make openttd-wrapper work with older mktemp versions.
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Fri, 02 Apr 2010 23:36:21 +0200
|
||||
|
||||
openttd (1.0.0~rc3-2) unstable; urgency=low
|
||||
|
||||
* [279c5ef] Recommend openttd-opengfx and suggest openttd-opensfx.
|
||||
* [9330ad7] Update README.Debian concerning music files.
|
||||
* [07bde24] Move openttd from contrib to main. (Closes: #560810)
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Thu, 18 Mar 2010 13:16:32 +0100
|
||||
|
||||
openttd (1.0.0~rc3-1) unstable; urgency=low
|
||||
|
||||
* [412d153] New upstream release 1.0.0~rc3.
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Thu, 18 Mar 2010 10:09:33 +0100
|
||||
|
||||
openttd (1.0.0~rc2-1) unstable; urgency=low
|
||||
|
||||
* [9c99af4] New upstream release 1.0.0~rc2.
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Thu, 04 Mar 2010 12:22:28 +0100
|
||||
|
||||
openttd (1.0.0~rc1-1) unstable; urgency=low
|
||||
|
||||
* [fe4eb51] New upstream release 1.0.0~rc1.
|
||||
* [6aa2be0] Note that the embedded md5 implementation has a different
|
||||
license.
|
||||
* [39eb336] Remove lintian override for empty gm directory.
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Fri, 19 Feb 2010 13:00:53 +0100
|
||||
|
||||
openttd (1.0.0~beta4-1) unstable; urgency=low
|
||||
|
||||
* [6718224] New upstream release 1.0.0~beta4.
|
||||
* [7b0fa8d] Remove some more docs that we don't want in the package.
|
||||
* [bb9d744] Use liblzo2 instead of an embedded minilzo version.
|
||||
* [949c06b] Explicitly disable iconv support.
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Fri, 19 Feb 2010 12:59:27 +0100
|
||||
|
||||
openttd (0.7.5-4) unstable; urgency=low
|
||||
|
||||
* [174d0b1] Don't use deprecated < in Replaces.
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Mon, 15 Feb 2010 00:35:33 +0100
|
||||
|
||||
openttd (0.7.5-3) unstable; urgency=low
|
||||
|
||||
* [d12fc5a] Make openttd-data replace openttd (< 0.7.5-2).
|
||||
(Closes: #569679)
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Sun, 14 Feb 2010 16:56:31 +0100
|
||||
|
||||
openttd (0.7.5-2) unstable; urgency=low
|
||||
|
||||
[ Matthijs Kooijman ]
|
||||
* [fbab21d] Switch to source format 3.0 (quilt).
|
||||
* [85c0c7d] No longer check for (and complain about missing) datafiles
|
||||
on installation and upgrades. (Closes: #524651, 562574)
|
||||
* [827eb61] Split the architecture independent data into openttd-data.
|
||||
(Closes: #492462)
|
||||
* [6fbd9c7] Update README.Debian.
|
||||
* [76a5148] Support cross compilation. (Closes: #550951)
|
||||
* [2005bf8] Simplify the rules file, make debhelper do more stuff.
|
||||
* [fc0500e] Remove some configure arguments.
|
||||
* [8ca38bb] Explicitly enable or disable all of the dependencies.
|
||||
* [e38fb3e] Let the upstream Makefile install documentation.
|
||||
* [5954fcf] Update the watch file to the new upstream url scheme.
|
||||
* [7249594] Fix typo in copyright file.
|
||||
* [660fb61] Bump the Standards-Version to 3.8.4, with no changes
|
||||
required.
|
||||
* [f94ab89] Move the packaging git repository to git.debian.org.
|
||||
|
||||
-- Jordi Mallach <jordi@debian.org> Tue, 09 Feb 2010 21:40:24 +0100
|
||||
|
||||
openttd (0.7.5-1) unstable; urgency=high
|
||||
|
||||
* [cdcb73a] Imported Upstream version 0.7.5. This release fixes
|
||||
CVE-2009-4007.
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Thu, 24 Dec 2009 00:55:45 +0100
|
||||
|
||||
openttd (0.7.4-1) unstable; urgency=low
|
||||
|
||||
* [a2c297b0] Imported Upstream version 0.7.4
|
||||
* [0232a645] Make Debian-specific patches executable.
|
||||
* [76be04b] Switch the Debian packaging to git.
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Tue, 15 Dec 2009 22:11:52 +0100
|
||||
|
||||
openttd (0.7.3-1) unstable; urgency=low
|
||||
|
||||
[ Matthijs Kooijman ]
|
||||
* New upstream release
|
||||
* Use printf instead of echo -en in openttd-wrapper to make it POSIX
|
||||
compatible (Closes: #547758).
|
||||
* Remove three patches that are now included in upstream.
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Thu, 01 Oct 2009 22:52:59 +0200
|
||||
|
||||
openttd (0.7.2-1) unstable; urgency=low
|
||||
|
||||
[ Matthijs Kooijman ]
|
||||
* New upstream release
|
||||
* Bump Standards-Version to 3.8.3, with no changes required.
|
||||
* Clean up the rules file a bit and add some lintian overrides.
|
||||
* Explain why openttd is in contrib (Closes: #539381).
|
||||
* Add the DM-Upload-Allowed control field.
|
||||
* Re-add dpatch infrastructure.
|
||||
* Fix the copyright file, since upstream only allows GPLv2, not later
|
||||
versions.
|
||||
* Add a section to the copyright file on the different license used by the
|
||||
"Squirrel" programming language, which is shipped with OpenTTD since
|
||||
0.7.0.
|
||||
* Backport upstream r17226, which removes the deprecated Encoding entry from
|
||||
the .desktop file.
|
||||
* Add a wrapper script for openttd, which captures any stderr output and
|
||||
displays it when openttd returns an error code (Closes: #533557).
|
||||
* Recommend x11-utils, since we use xmessage for displaying errors. Don't
|
||||
depend on it, since openttd will still run fine without it, you just won't
|
||||
see any errors.
|
||||
* Backport upstream r17227 and r17229, which prevents terminal escape codes
|
||||
from ending up in the captured error output.
|
||||
* Backport upstream r17240, which improves stderr output when files are
|
||||
missing or corrupt.
|
||||
|
||||
-- Jordi Mallach <jordi@debian.org> Fri, 21 Aug 2009 15:27:26 +0200
|
||||
|
||||
openttd (0.7.1-1) unstable; urgency=low
|
||||
|
||||
[ Matthijs Kooijman ]
|
||||
* New upstream release.
|
||||
* Link against libicu to enable right-to-left language support.
|
||||
|
||||
-- Jordi Mallach <jordi@debian.org> Tue, 09 Jun 2009 21:46:28 +0200
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Thu, 04 Mar 2010 00:01:02 +0100
|
||||
|
||||
openttd (0.7.0-1) unstable; urgency=low
|
||||
openttd (1.0.0~RC1) unstable; urgency=low
|
||||
|
||||
[ Matthijs Kooijman ]
|
||||
* New upstream release.
|
||||
* Remove Debian specific desktop file, upstream provides one now.
|
||||
* Add debian/watch file.
|
||||
|
||||
[ Jordi Mallach ]
|
||||
* Bump Standards-Version to 3.8.1, with no changes required.
|
||||
* Move to debhelper compat 7. Bump Build-Depends accordingly.
|
||||
* Use dh_prep.
|
||||
* Add "set -e" to config script.
|
||||
* Remove a few extra doc files that get installed by upstream Makefile.
|
||||
* Add more complete copyright information.
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Thu, 18 Feb 2010 00:01:02 +0100
|
||||
|
||||
-- Jordi Mallach <jordi@debian.org> Wed, 15 Apr 2009 18:22:10 +0200
|
||||
openttd (1.0.0~beta4) unstable; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Thu, 04 Feb 2010 18:36:02 +0100
|
||||
|
||||
openttd (1.0.0~beta3) unstable; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Thu, 21 Jan 2010 00:01:02 +0100
|
||||
|
||||
openttd (1.0.0~beta2) unstable; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Tue, 05 Jan 2010 21:36:51 +0100
|
||||
|
||||
openttd (1.0.0~beta1) unstable; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Thu, 24 Dec 2009 01:01:01 +0100
|
||||
|
||||
openttd (0.7.5) unstable; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Wed, 23 Dec 2009 20:52:34 +0100
|
||||
|
||||
openttd (0.7.5~RC1) unstable; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Mon, 14 Dec 2009 19:28:37 +0100
|
||||
|
||||
openttd (0.7.4) unstable; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Tue, 01 Dec 2009 01:23:45 +0100
|
||||
|
||||
openttd (0.7.4~RC1) unstable; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Sun, 15 Nov 2009 16:30:07 +0100
|
||||
|
||||
openttd (0.7.3) unstable; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Thu, 01 Oct 2009 12:35:47 +0200
|
||||
|
||||
openttd (0.7.3~RC2) unstable; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Thu, 24 Sep 2009 21:30:43 +0200
|
||||
|
||||
openttd (0.7.3~RC1) unstable; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Sun, 13 Sep 2009 10:25:56 +0200
|
||||
|
||||
openttd (0.7.2) unstable; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Sat, 01 Aug 2009 00:19:43 +0200
|
||||
|
||||
openttd (0.7.2~RC2) unstable; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Tue, 21 Jul 2009 20:25:56 +0200
|
||||
|
||||
openttd (0.7.2~RC1) unstable; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Wed, 15 Jul 2009 22:25:56 +0200
|
||||
|
||||
openttd (0.7.1) unstable; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Tue, 09 Jun 2009 01:34:56 +0200
|
||||
|
||||
openttd (0.7.1~RC3) unstable; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Wed, 03 Jun 2009 15:34:56 +0200
|
||||
|
||||
openttd (0.7.1~RC2) unstable; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Thu, 21 Mar 2009 14:34:56 +0200
|
||||
|
||||
openttd (0.7.1~RC1) unstable; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Mon, 11 Mar 2009 17:34:56 +0200
|
||||
|
||||
openttd (0.7.0) unstable; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Wed, 01 Apr 2009 13:37:42 +0000
|
||||
|
||||
openttd (0.7.0~RC2) unstable; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Mon, 23 Mar 2009 00:42:00 +0200
|
||||
|
||||
openttd (0.7.0~RC1) unstable; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Mon, 16 Mar 2009 00:07:00 +0200
|
||||
|
||||
openttd (0.7.0~beta2) unstable; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Tue, 10 Mar 2009 00:33:05 +0100
|
||||
|
||||
openttd (0.7.0~beta1) unstable; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Matthijs Kooijman <matthijs@stdin.nl> Mon, 16 Feb 2009 23:07:05 +0100
|
||||
|
||||
openttd (0.6.3-1) unstable; urgency=low
|
||||
|
||||
@@ -199,7 +155,7 @@ openttd (0.6.3-1) unstable; urgency=low
|
||||
|
||||
[ Jordi Mallach ]
|
||||
* Add Spanish Debconf template translation, after fixing its corrupted
|
||||
encoding (thanks, Germana Oliveira, closes: #499214).
|
||||
encoding.
|
||||
|
||||
-- Jordi Mallach <jordi@debian.org> Thu, 02 Oct 2008 16:59:03 +0200
|
||||
|
||||
|
@@ -1,10 +1,9 @@
|
||||
Source: openttd
|
||||
Section: games
|
||||
Section: contrib/games
|
||||
Priority: optional
|
||||
Maintainer: Matthijs Kooijman <matthijs@stdin.nl>
|
||||
Uploaders: Jordi Mallach <jordi@debian.org>
|
||||
DM-Upload-Allowed: yes
|
||||
Build-Depends: debhelper (>= 7.0.50), libsdl-dev, zlib1g-dev, libpng-dev, libfreetype6-dev, libfontconfig-dev, libicu-dev, liblzo2-dev
|
||||
Build-Depends: debhelper (>= 7.0.50), libsdl-dev, zlib1g-dev, libpng-dev, libfreetype6-dev, libfontconfig-dev, liblzo2-dev, libicu-dev
|
||||
Standards-Version: 3.8.4
|
||||
Vcs-Browser: http://git.debian.org/?p=collab-maint/openttd.git
|
||||
Vcs-Git: git://git.debian.org/collab-maint/openttd.git
|
||||
@@ -13,25 +12,12 @@ Homepage: http://www.openttd.org/
|
||||
Package: openttd
|
||||
Architecture: any
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}
|
||||
Recommends: openttd-opengfx, x11-utils
|
||||
Replaces: openttd-data
|
||||
Conflicts: openttd-data
|
||||
Suggests: openttd-opensfx, timidity, freepats
|
||||
Suggests: timidity, freepats
|
||||
Description: reimplementation of Transport Tycoon Deluxe with enhancements
|
||||
OpenTTD is a reimplementation of the Microprose game "Transport
|
||||
Tycoon Deluxe" with lots of new features and enhancements.
|
||||
.
|
||||
OpenTTD is playable with the free graphics files from the openttd-opengfx
|
||||
package and optional sound files from the openttd-opensfx package (which is in
|
||||
non-free). Alternatively, OpenTTD can use the graphics files from the original
|
||||
Transport Tycoon Deluxe game (See README.Debian on how to set this up).
|
||||
|
||||
Package: openttd-dbg
|
||||
Architecture: any
|
||||
Section: debug
|
||||
Priority: extra
|
||||
Depends: openttd (= ${binary:Version}), ${misc:Depends}
|
||||
Description: debugging symbols for openttd
|
||||
This package contains the debugging symbols for OpenTTD, the reimplementation
|
||||
of the Micropose game "Transport Tycoon Deluxe" with lots of new features and
|
||||
enhancements.
|
||||
Tycoon Deluxe" with lots of new features and enhancements. The data
|
||||
files of the original Transport Tycoon Deluxe for Windows are
|
||||
mandatory to play the game. They must be manually copied to the game
|
||||
data directory (see README.Debian for details).
|
||||
|
@@ -1,6 +1,11 @@
|
||||
This package was debianized by Matthijs Kooijman <matthijs@stdin.nl>
|
||||
on Wed, 15 Sep 2004 00:24:01 +0200.
|
||||
|
||||
This package is not part of the main Debian GNU/Linux distribution, but
|
||||
uploaded to the contrib section. This is because the openttd program is
|
||||
non-functional by itself, it needs (non-free) graphical and sound
|
||||
resources from the Transport Tycoon Deluxe game to work.
|
||||
|
||||
Upstream author: Ludvig Strigeus (ludde) and many others.
|
||||
Upstream homepage: http://www.openttd.org
|
||||
|
||||
@@ -54,24 +59,3 @@ language, which is shipped under the following license:
|
||||
|
||||
3. This notice may not be removed or
|
||||
altered from any source distribution.
|
||||
|
||||
This package contains an implementation of the md5 hash algorithm, which
|
||||
is shipped under the following license:
|
||||
|
||||
Copyright (C) 1999, 2000, 2002 Aladdin Enterprises. All rights reserved.
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
|
@@ -1,13 +0,0 @@
|
||||
[DEFAULT]
|
||||
# Use pristine-tar
|
||||
pristine-tar = True
|
||||
|
||||
[git-dch]
|
||||
# We use metaheaders in commit messages.
|
||||
meta = True
|
||||
# Put git commit ids in the debian changelog.
|
||||
id-length = 7
|
||||
|
||||
[git-import-orig]
|
||||
# Use a custom commit message for upstream imports.
|
||||
import-msg = New upstream release %(version)s.
|
@@ -2,10 +2,8 @@
|
||||
# This is a wrapper script that checks openttd's exit status and
|
||||
# displays its stderr output
|
||||
|
||||
# Get a file to capture stderr to. Use the deprecated -t option, so this
|
||||
# works on the old mktemp from the mktemp package (which has been
|
||||
# replaced by the version from the coreutils package).
|
||||
TMPFILE=`mktemp -t openttd.errout.XXXXXXXXX`
|
||||
# Get a file to capture stderr to
|
||||
TMPFILE=`mktemp --tmpdir openttd.errout.XXXXXXXXX`
|
||||
|
||||
if [ ! -w "$TMPFILE" ]; then
|
||||
xmessage "Could not create temporary file for error messages. Not starting OpenTTD."
|
||||
|
@@ -1,20 +0,0 @@
|
||||
From: Matthijs Kooijman <matthijs@stdin.nl>
|
||||
Subject: Use a wrapper script for running openttd
|
||||
|
||||
The wrapper script captures stderr from openttd and displays this in
|
||||
case of an error. This patch makes the the .desktop file call the
|
||||
wrapper instead of the openttd binary directly.
|
||||
|
||||
Index: media/openttd.desktop.in
|
||||
===================================================================
|
||||
--- a/media/openttd.desktop.in (revision 20124)
|
||||
+++ b/media/openttd.desktop.in (working copy)
|
||||
@@ -5,7 +5,7 @@
|
||||
Version=1.1
|
||||
Name=!!MENU_NAME!!
|
||||
Icon=openttd
|
||||
-Exec=!!TTD!!
|
||||
+Exec=/usr/share/games/openttd/openttd-wrapper
|
||||
Terminal=false
|
||||
Categories=!!MENU_GROUP!!
|
||||
Comment=A clone of Transport Tycoon Deluxe
|
@@ -1 +0,0 @@
|
||||
run-openttd-wrapper.patch
|
@@ -17,7 +17,7 @@ endif
|
||||
# to be explicit about the dependencies, in case we're not running in a
|
||||
# clean build root.
|
||||
override_dh_auto_configure:
|
||||
./configure $(CROSS) --prefix-dir=/usr --install-dir=debian/openttd --without-allegro --with-zlib --with-sdl --with-png --with-freetype --with-fontconfig --with-icu --with-liblzo2 --without-iconv --disable-strip CFLAGS="$(CFLAGS) -g"
|
||||
./configure $(CROSS) --prefix-dir=/usr --install-dir=debian/openttd --without-allegro --with-zlib --with-lzo2 --with-sdl --with-png --with-freetype --with-fontconfig --with-icu
|
||||
|
||||
# Do some extra installation
|
||||
override_dh_auto_install:
|
||||
@@ -41,7 +41,3 @@ override_dh_auto_test:
|
||||
# target, while there isn't.
|
||||
override_dh_auto_clean:
|
||||
[ ! -f Makefile ] || $(MAKE) mrproper
|
||||
|
||||
# We want to strip the debug informatiton into the -dbg package.
|
||||
override_dh_strip:
|
||||
dh_strip --dbg-package=openttd-dbg
|
||||
|
@@ -1 +0,0 @@
|
||||
3.0 (quilt)
|
@@ -1,5 +0,0 @@
|
||||
version=3
|
||||
|
||||
options=downloadurlmangle=s/(.*)\/index.html$/\1\/openttd-\1-source.tar.gz/ \
|
||||
http://master.binaries.openttd.org/releases/ \
|
||||
(\d+(?:\.\d+)*)/index.html
|
@@ -1,6 +1,6 @@
|
||||
@echo off
|
||||
|
||||
set OPENTTD_VERSION=1.0.3
|
||||
set OPENTTD_VERSION=1.0.0-RC2
|
||||
set OPENSFX_VERSION=0.8.0
|
||||
set NOSOUND_VERSION=0.8.0
|
||||
set OPENGFX_VERSION=0.7.0
|
||||
|
@@ -13,7 +13,7 @@
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
Name: openttd
|
||||
Version: 1.0.3
|
||||
Version: 1.0.0
|
||||
Release: 1%{?dist}
|
||||
|
||||
Group: Amusements/Games
|
||||
|
@@ -1,9 +1,9 @@
|
||||
# Version numbers to update
|
||||
!define APPV_MAJOR 1
|
||||
!define APPV_MINOR 0
|
||||
!define APPV_MAINT 3
|
||||
!define APPV_BUILD 0
|
||||
!define APPV_EXTRA "-RC1"
|
||||
!define APPV_MAINT 0
|
||||
!define APPV_BUILD 5
|
||||
!define APPV_EXTRA "-RC2"
|
||||
|
||||
!define APPNAME "OpenTTD" ; Define application name
|
||||
!define APPVERSION "${APPV_MAJOR}.${APPV_MINOR}.${APPV_MAINT}${APPV_EXTRA}" ; Define application version
|
||||
|
@@ -39,7 +39,7 @@ Sub UpdateFiles(version)
|
||||
modified = Mid(version, InStrRev(version, Chr(9)) + 1)
|
||||
version = Mid(version, 1, InStr(version, Chr(9)) - 1)
|
||||
Else
|
||||
version = "1.0.3-RC1"
|
||||
version = "1.0.0-RC2"
|
||||
revision = 0
|
||||
modified = 1
|
||||
End If
|
||||
@@ -97,7 +97,7 @@ Function DetermineSVNVersion()
|
||||
Dim sTortoise
|
||||
' First, try with 32-bit architecture
|
||||
sTortoise = ReadRegistryKey("HKLM", "SOFTWARE\TortoiseSVN", "Directory", 32)
|
||||
If sTortoise = "" Or IsNull(sTortoise) Then
|
||||
If sTortoise = "" Then
|
||||
' No 32-bit version of TortoiseSVN installed, try 64-bit version (doesn't hurt on 32-bit machines, it returns nothing or is ignored)
|
||||
sTortoise = ReadRegistryKey("HKLM", "SOFTWARE\TortoiseSVN", "Directory", 64)
|
||||
End If
|
||||
|
@@ -376,21 +376,6 @@
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\lang\irish.txt"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
Description="Generating irish language file"
|
||||
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "$(InputPath)"
exit 0
"
|
||||
AdditionalDependencies="..\src\lang\english.txt;..\objs\strgen\strgen.exe"
|
||||
Outputs="..\bin\lang\irish.lng"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\lang\italian.txt"
|
||||
>
|
||||
|
@@ -377,21 +377,6 @@
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\lang\irish.txt"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
Description="Generating irish language file"
|
||||
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "$(InputPath)"
exit 0
"
|
||||
AdditionalDependencies="..\src\lang\english.txt;..\objs\strgen\strgen.exe"
|
||||
Outputs="..\bin\lang\irish.lng"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\lang\italian.txt"
|
||||
>
|
||||
|
43
readme.txt
43
readme.txt
@@ -1,6 +1,6 @@
|
||||
OpenTTD README
|
||||
Last updated: 2010-07-17
|
||||
Release version: 1.0.3-RC1
|
||||
Last updated: 2010-03-04
|
||||
Release version: 1.0.0-RC2
|
||||
------------------------------------------------------------------------
|
||||
|
||||
|
||||
@@ -202,11 +202,10 @@ when using other versions of the game.
|
||||
|
||||
4.1.1) Free graphics and sound files
|
||||
------ -----------------------------
|
||||
The free data files, split into OpenGFX for graphics, OpenSFX for sounds and
|
||||
OpenMSX for music can be found at:
|
||||
The free data files, split into OpenGFX for graphics and OpenSFX for sounds
|
||||
can be found at:
|
||||
- http://bundles.openttdcoop.org/opengfx/releases/ for OpenGFX
|
||||
- http://bundles.openttdcoop.org/opensfx/releases/ for OpenSFX
|
||||
- http://bundles.openttdcoop.org/openmsx/releases/ for OpenMSX
|
||||
Please follow the readme of these packages about the installation procedure.
|
||||
The Windows installer can optionally download and install these packages.
|
||||
|
||||
@@ -226,10 +225,9 @@ You need to copy the following files:
|
||||
|
||||
4.1.3) Original Transport Tycoon Deluxe music
|
||||
------ --------------------------------------
|
||||
If you want the Transport Tycoon Deluxe music, copy the gm/ folder from the
|
||||
Windows version of Transport Tycoon Deluxe to your OpenTTD folder (not your
|
||||
data folder - also explained in the following sections). The music from the
|
||||
DOS version as well as the original Transport Tycoon does not work.
|
||||
If you want the TTD music, copy the gm/ folder from the Windows version
|
||||
of TTD to your OpenTTD folder (not your data folder - also explained in
|
||||
the following sections). The music from the DOS version does not work.
|
||||
|
||||
4.1.4) AIs
|
||||
------ ---
|
||||
@@ -249,13 +247,9 @@ wait for an error message to pop up. The error message will tell you
|
||||
4.2) OpenTTD directories
|
||||
---- -------------------------------
|
||||
|
||||
The required 3rd party files listed in the section 4.1 "(Required) 3rd party files"
|
||||
as well as other non-compulsory extensions (NewGRFs, AI, heightmaps, scenarios) can be
|
||||
placed in a few different locations:
|
||||
The TTD artwork files listed in the section 4.1 "(Required) 3rd party files"
|
||||
can be placed in a few different locations:
|
||||
1. The current working directory (from where you started OpenTTD)
|
||||
For non-Windows operating systems OpenTTD will not scan for files in this
|
||||
directory if it is your personal directory, i.e. "~/", or when it is the
|
||||
root directory, i.e. "/".
|
||||
2. Your personal directory
|
||||
Windows: C:\My Documents (95, 98, ME)
|
||||
C:\Documents and Settings\<username>\My Documents\OpenTTD (2000, XP)
|
||||
@@ -307,9 +301,9 @@ again, see section 4.1).
|
||||
5.0) OpenTTD features:
|
||||
---- -----------------
|
||||
|
||||
OpenTTD has a lot of features going beyond the original Transport Tycoon Deluxe
|
||||
emulation. Unfortunately, there is currently no comprehensive list of features,
|
||||
but there is a basic features list on the web, and some optional features can be
|
||||
OpenTTD has a lot of features going beyond the original TTD emulation.
|
||||
Unfortunately, there is currently no comprehensive list of features, but there
|
||||
is a basic features list on the web, and some optional features can be
|
||||
controlled through the Advanced Settings dialog. We also implement some
|
||||
features known from TTDPatch (http://www.ttdpatch.net/).
|
||||
|
||||
@@ -340,8 +334,7 @@ Information logged:
|
||||
* Adding / removing / changing order of NewGRFs
|
||||
* Changing NewGRF parameters, loading compatible NewGRF
|
||||
* Changing game mode (scenario editor <-> normal game)
|
||||
* Loading game saved in a different OpenTTD / TTDPatch / Transport Tycoon Deluxe /
|
||||
original Transport Tycoon version
|
||||
* Loading game saved in a different OpenTTD / TTDPatch / TTD version
|
||||
* Running a modified OpenTTD build
|
||||
* Changing settings affecting NewGRF behaviour (non-network-safe settings)
|
||||
* Changing landscape (by cheat)
|
||||
@@ -515,12 +508,8 @@ debugging messages. This is mostly undocumented so best is to look in the
|
||||
source code file debug.c for the various debugging types. For more information
|
||||
look at http://wiki.openttd.org/index.php/Command_line.
|
||||
|
||||
The most frequent problem is missing data files. Please install OpenGFX and
|
||||
possibly OpenSFX and OpenMSX. See section 4.1.1 for more information.
|
||||
|
||||
Under, especially, Ubuntu OpenTTD can be extremely slow and freeze/hand under
|
||||
certain circumstance. See known-bugs.txt for more information and how to
|
||||
solve this problem on your computer.
|
||||
The most frequent problem is missing data files. Don't forget to put all GRF
|
||||
files from TTD into your data/ folder including sample.cat!
|
||||
|
||||
Under Windows 98 and lower it is impossible to use a dedicated server; it will
|
||||
fail to start. Perhaps this is for the better because those OSes are not known
|
||||
@@ -571,7 +560,7 @@ Retired Developers:
|
||||
|
||||
Thanks to:
|
||||
Josef Drexler - For his great work on TTDPatch.
|
||||
Marcin Grzegorczyk - For his TTDPatch work and documentation of Transport Tycoon Deluxe internals and graphics (signals and track foundations)
|
||||
Marcin Grzegorczyk - For his TTDPatch work and documentation of TTD internals and graphics (signals and track foundations)
|
||||
Petr Baudiš (pasky) - Many patches, newgrf support, etc.
|
||||
Simon Sasburg (HackyKid) - For the many bugfixes he has blessed us with
|
||||
Stefan Meißner (sign_de) - For his work on the console
|
||||
|
3
src/3rdparty/squirrel/squirrel/sqvm.cpp
vendored
3
src/3rdparty/squirrel/squirrel/sqvm.cpp
vendored
@@ -186,8 +186,7 @@ bool SQVM::ObjCmp(const SQObjectPtr &o1,const SQObjectPtr &o2,SQInteger &result)
|
||||
case OT_STRING:
|
||||
_RET_SUCCEED(scstrcmp(_stringval(o1),_stringval(o2)));
|
||||
case OT_INTEGER:
|
||||
/* FS#3954: wrong integer comparison */
|
||||
_RET_SUCCEED((_integer(o1)<_integer(o2))?-1:(_integer(o1)==_integer(o2))?0:1);
|
||||
_RET_SUCCEED(_integer(o1)-_integer(o2));
|
||||
case OT_FLOAT:
|
||||
_RET_SUCCEED((_float(o1)<_float(o2))?-1:1);
|
||||
case OT_TABLE:
|
||||
|
@@ -93,13 +93,13 @@ const AIConfigItemList *AIConfig::GetConfigList()
|
||||
return this->config_list;
|
||||
}
|
||||
|
||||
AIConfig *AIConfig::GetConfig(CompanyID company, AISettingSource source)
|
||||
AIConfig *AIConfig::GetConfig(CompanyID company, bool forceNewgameSetting)
|
||||
{
|
||||
AIConfig **config;
|
||||
if (source == AISS_FORCE_NEWGAME || (source == AISS_DEFAULT && _game_mode == GM_MENU)) {
|
||||
config = &_settings_newgame.ai_config[company];
|
||||
if (!forceNewgameSetting) {
|
||||
config = (_game_mode == GM_MENU) ? &_settings_newgame.ai_config[company] : &_settings_game.ai_config[company];
|
||||
} else {
|
||||
config = &_settings_game.ai_config[company];
|
||||
config = &_settings_newgame.ai_config[company];
|
||||
}
|
||||
if (*config == NULL) *config = new AIConfig();
|
||||
return *config;
|
||||
|
@@ -61,18 +61,10 @@ public:
|
||||
*/
|
||||
const AIConfigItemList *GetConfigList();
|
||||
|
||||
/* Where to get the config from, either default (depends on current game
|
||||
* mode) or force either newgame or normal */
|
||||
enum AISettingSource {
|
||||
AISS_DEFAULT, ///< Get the AI config from the current game mode
|
||||
AISS_FORCE_NEWGAME, ///< Get the newgame AI config
|
||||
AISS_FORCE_GAME, ///< Get the AI config from the current game
|
||||
};
|
||||
|
||||
/**
|
||||
* Get the config of a company.
|
||||
*/
|
||||
static AIConfig *GetConfig(CompanyID company, AISettingSource source = AISS_DEFAULT);
|
||||
static AIConfig *GetConfig(CompanyID company, bool forceNewgameSetting = false);
|
||||
|
||||
/**
|
||||
* Get the value of a setting for this config. It might fallback to his
|
||||
|
@@ -1016,26 +1016,3 @@ void ShowAIDebugWindow(CompanyID show_company)
|
||||
ShowErrorMessage(STR_ERROR_AI_DEBUG_SERVER_ONLY, INVALID_STRING_ID, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset the AI windows to their initial state.
|
||||
*/
|
||||
void InitializeAIGui()
|
||||
{
|
||||
AIDebugWindow::ai_debug_company = INVALID_COMPANY;
|
||||
}
|
||||
|
||||
/** Open the AI debug window if one of the AI scripts has crashed. */
|
||||
void ShowAIDebugWindowIfAIError()
|
||||
{
|
||||
/* Network clients can't debug AIs. */
|
||||
if (_networking && !_network_server) return;
|
||||
|
||||
Company *c;
|
||||
FOR_ALL_COMPANIES(c) {
|
||||
if (c->is_ai && c->ai_instance->IsDead()) {
|
||||
ShowAIDebugWindow(c->index);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -17,10 +17,7 @@
|
||||
#ifdef ENABLE_AI
|
||||
void ShowAIDebugWindow(CompanyID show_company = INVALID_COMPANY);
|
||||
void ShowAIConfigWindow();
|
||||
void ShowAIDebugWindowIfAIError();
|
||||
void InitializeAIGui();
|
||||
#else
|
||||
#include "../gui.h"
|
||||
#include "table/strings.h"
|
||||
|
||||
static inline void ShowAIConfigWindow()
|
||||
@@ -28,8 +25,6 @@ static inline void ShowAIConfigWindow()
|
||||
ShowErrorMessage(STR_ERROR_NO_AI, STR_ERROR_NO_AI_SUB, 0, 0);
|
||||
}
|
||||
static inline void ShowAIDebugWindow(CompanyID show_company = INVALID_COMPANY) {ShowAIConfigWindow();}
|
||||
static inline void ShowAIDebugWindowIfAIError() {}
|
||||
static inline void InitializeAIGui() {}
|
||||
#endif /* ENABLE_AI */
|
||||
|
||||
#endif /* AI_GUI_HPP */
|
||||
|
@@ -784,10 +784,13 @@ SQInteger AIAbstractList::Valuate(HSQUIRRELVM vm)
|
||||
/* Push the function to call */
|
||||
sq_push(vm, 2);
|
||||
|
||||
for (AIAbstractListMap::iterator iter = this->items.begin(); iter != this->items.end(); iter++) {
|
||||
/* Check for changing of items. */
|
||||
int previous_modification_count = this->modifications;
|
||||
/* Walk all items, and query the result */
|
||||
this->buckets.clear();
|
||||
|
||||
/* Check for changing of items. */
|
||||
int begin_modification_count = this->modifications;
|
||||
|
||||
for (AIAbstractListMap::iterator iter = this->items.begin(); iter != this->items.end(); iter++) {
|
||||
/* Push the root table as instance object, this is what squirrel does for meta-functions. */
|
||||
sq_pushroottable(vm);
|
||||
/* Push all arguments for the valuator function. */
|
||||
@@ -825,7 +828,7 @@ SQInteger AIAbstractList::Valuate(HSQUIRRELVM vm)
|
||||
}
|
||||
|
||||
/* Was something changed? */
|
||||
if (previous_modification_count != this->modifications) {
|
||||
if (begin_modification_count != this->modifications) {
|
||||
/* See below for explanation. The extra pop is the return value. */
|
||||
sq_pop(vm, nparam + 4);
|
||||
|
||||
@@ -833,7 +836,8 @@ SQInteger AIAbstractList::Valuate(HSQUIRRELVM vm)
|
||||
return sq_throwerror(vm, _SC("modifying valuated list outside of valuator function"));
|
||||
}
|
||||
|
||||
this->SetValue((*iter).first, value);
|
||||
(*iter).second = (int32)value;
|
||||
this->buckets[(int32)value].insert((*iter).first);
|
||||
|
||||
/* Pop the return value. */
|
||||
sq_poptop(vm);
|
||||
|
@@ -86,7 +86,7 @@ public:
|
||||
static int32 GetMaxSpeed(BridgeID bridge_id);
|
||||
|
||||
/**
|
||||
* Get the new cost of a bridge, excluding the road and/or rail.
|
||||
* Get the new cost of a bridge.
|
||||
* @param bridge_id The bridge to get the new cost of.
|
||||
* @param length The length of the bridge.
|
||||
* @pre IsValidBridge(bridge_id).
|
||||
|
@@ -14,23 +14,10 @@
|
||||
* functions may still be available if you return an older API version
|
||||
* in GetAPIVersion() in info.nut.
|
||||
*
|
||||
* \b 1.0.3
|
||||
*
|
||||
* API additions:
|
||||
* \li AIRail::ERR_RAILTYPE_DISALLOWS_CROSSING
|
||||
*
|
||||
* \b 1.0.2
|
||||
*
|
||||
* Other changes:
|
||||
* \li AIBridge::GetPrice now returns the price of the bridge without the cost for the rail or road.
|
||||
*
|
||||
* \b 1.0.1
|
||||
*
|
||||
* API additions:
|
||||
* \li AIRail::GetMaxSpeed
|
||||
*
|
||||
* \b 1.0.0
|
||||
*
|
||||
* 1.0.0 is not yet released. The following changes are not set in stone yet.
|
||||
*
|
||||
* API additions:
|
||||
* \li AIBaseStation
|
||||
* \li AIEngine::IsBuildable
|
||||
|
@@ -16,21 +16,20 @@
|
||||
#include "../../strings_func.h"
|
||||
#include "../../rail.h"
|
||||
#include "../../engine_base.h"
|
||||
#include "../../engine_func.h"
|
||||
#include "../../articulated_vehicles.h"
|
||||
#include "table/strings.h"
|
||||
|
||||
/* static */ bool AIEngine::IsValidEngine(EngineID engine_id)
|
||||
{
|
||||
const Engine *e = ::Engine::GetIfValid(engine_id);
|
||||
return e != NULL && (::IsEngineBuildable(engine_id, e->type, _current_company) || ::Company::Get(_current_company)->num_engines[engine_id] > 0);
|
||||
return e != NULL && (HasBit(e->company_avail, _current_company) || ::Company::Get(_current_company)->num_engines[engine_id] > 0);
|
||||
|
||||
}
|
||||
|
||||
/* static */ bool AIEngine::IsBuildable(EngineID engine_id)
|
||||
{
|
||||
const Engine *e = ::Engine::GetIfValid(engine_id);
|
||||
return e != NULL && ::IsEngineBuildable(engine_id, e->type, _current_company);
|
||||
return e != NULL && HasBit(e->company_avail, _current_company);
|
||||
}
|
||||
|
||||
/* static */ char *AIEngine::GetName(EngineID engine_id)
|
||||
|
@@ -14,7 +14,6 @@
|
||||
#include "../../command_type.h"
|
||||
#include "../../strings_func.h"
|
||||
#include "../../industry.h"
|
||||
#include "../../newgrf_industries.h"
|
||||
#include "../../core/random_func.hpp"
|
||||
|
||||
/* static */ bool AIIndustryType::IsValidIndustryType(IndustryType industry_type)
|
||||
@@ -89,8 +88,6 @@
|
||||
/* static */ bool AIIndustryType::CanBuildIndustry(IndustryType industry_type)
|
||||
{
|
||||
if (!IsValidIndustryType(industry_type)) return false;
|
||||
|
||||
if (!::CheckIfCallBackAllowsAvailability(industry_type, IACT_USERCREATION)) return false;
|
||||
if (!::GetIndustrySpec(industry_type)->IsRawIndustry()) return true;
|
||||
|
||||
/* raw_industry_construction == 1 means "Build as other industries" */
|
||||
@@ -100,9 +97,7 @@
|
||||
/* static */ bool AIIndustryType::CanProspectIndustry(IndustryType industry_type)
|
||||
{
|
||||
if (!IsValidIndustryType(industry_type)) return false;
|
||||
|
||||
if (!::GetIndustrySpec(industry_type)->IsRawIndustry()) return false;
|
||||
if (!::CheckIfCallBackAllowsAvailability(industry_type, IACT_USERCREATION)) return false;
|
||||
|
||||
/* raw_industry_construction == 2 means "prospect" */
|
||||
return _settings_game.construction.raw_industry_construction == 2;
|
||||
|
@@ -469,10 +469,3 @@ static bool IsValidSignalType(int signal_type)
|
||||
default: return -1;
|
||||
}
|
||||
}
|
||||
|
||||
/* static */ int32 AIRail::GetMaxSpeed(RailType railtype)
|
||||
{
|
||||
if (!AIRail::IsRailTypeAvailable(railtype)) return -1;
|
||||
|
||||
return ::GetRailTypeInfo((::RailType)railtype)->max_speed;
|
||||
}
|
||||
|
@@ -38,9 +38,6 @@ public:
|
||||
|
||||
/** Non-uniform stations is diabled */
|
||||
ERR_NONUNIFORM_STATIONS_DISABLED, // [STR_ERROR_NONUNIFORM_STATIONS_DISALLOWED]
|
||||
|
||||
/** This railtype cannot have crossings */
|
||||
ERR_RAILTYPE_DISALLOWS_CROSSING, // [STR_ERROR_CROSSING_DISALLOWED]
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -443,18 +440,6 @@ public:
|
||||
* @return The baseprice of building the given object.
|
||||
*/
|
||||
static Money GetBuildCost(RailType railtype, BuildType build_type);
|
||||
|
||||
/**
|
||||
* Get the maximum speed of trains running on this railtype.
|
||||
* @param railtype The railtype to get the maximum speed of.
|
||||
* @pre IsRailTypeAvailable(railtype)
|
||||
* @return The maximum speed trains can run on this railtype
|
||||
* or 0 if there is no limit.
|
||||
* @note The speed is in OpenTTD's internal speed unit.
|
||||
* This is mph / 1.6, which is roughly km/h.
|
||||
* To get km/h multiply this number by 1.00584.
|
||||
*/
|
||||
static int32 GetMaxSpeed(RailType railtype);
|
||||
};
|
||||
|
||||
#endif /* AI_RAIL_HPP */
|
||||
|
@@ -42,7 +42,6 @@ void SQAIRail_Register(Squirrel *engine)
|
||||
SQAIRail.DefSQConst(engine, AIRail::ERR_CROSSING_ON_ONEWAY_ROAD, "ERR_CROSSING_ON_ONEWAY_ROAD");
|
||||
SQAIRail.DefSQConst(engine, AIRail::ERR_UNSUITABLE_TRACK, "ERR_UNSUITABLE_TRACK");
|
||||
SQAIRail.DefSQConst(engine, AIRail::ERR_NONUNIFORM_STATIONS_DISABLED, "ERR_NONUNIFORM_STATIONS_DISABLED");
|
||||
SQAIRail.DefSQConst(engine, AIRail::ERR_RAILTYPE_DISALLOWS_CROSSING, "ERR_RAILTYPE_DISALLOWS_CROSSING");
|
||||
SQAIRail.DefSQConst(engine, AIRail::RAILTYPE_INVALID, "RAILTYPE_INVALID");
|
||||
SQAIRail.DefSQConst(engine, AIRail::RAILTRACK_NE_SW, "RAILTRACK_NE_SW");
|
||||
SQAIRail.DefSQConst(engine, AIRail::RAILTRACK_NW_SE, "RAILTRACK_NW_SE");
|
||||
@@ -72,12 +71,10 @@ void SQAIRail_Register(Squirrel *engine)
|
||||
AIError::RegisterErrorMap(STR_ERROR_CROSSING_ON_ONEWAY_ROAD, AIRail::ERR_CROSSING_ON_ONEWAY_ROAD);
|
||||
AIError::RegisterErrorMap(STR_ERROR_NO_SUITABLE_RAILROAD_TRACK, AIRail::ERR_UNSUITABLE_TRACK);
|
||||
AIError::RegisterErrorMap(STR_ERROR_NONUNIFORM_STATIONS_DISALLOWED, AIRail::ERR_NONUNIFORM_STATIONS_DISABLED);
|
||||
AIError::RegisterErrorMap(STR_ERROR_CROSSING_DISALLOWED, AIRail::ERR_RAILTYPE_DISALLOWS_CROSSING);
|
||||
|
||||
AIError::RegisterErrorMapString(AIRail::ERR_CROSSING_ON_ONEWAY_ROAD, "ERR_CROSSING_ON_ONEWAY_ROAD");
|
||||
AIError::RegisterErrorMapString(AIRail::ERR_UNSUITABLE_TRACK, "ERR_UNSUITABLE_TRACK");
|
||||
AIError::RegisterErrorMapString(AIRail::ERR_NONUNIFORM_STATIONS_DISABLED, "ERR_NONUNIFORM_STATIONS_DISABLED");
|
||||
AIError::RegisterErrorMapString(AIRail::ERR_RAILTYPE_DISALLOWS_CROSSING, "ERR_RAILTYPE_DISALLOWS_CROSSING");
|
||||
|
||||
SQAIRail.DefSQStaticMethod(engine, &AIRail::IsRailTile, "IsRailTile", 2, ".i");
|
||||
SQAIRail.DefSQStaticMethod(engine, &AIRail::IsLevelCrossingTile, "IsLevelCrossingTile", 2, ".i");
|
||||
@@ -109,7 +106,6 @@ void SQAIRail_Register(Squirrel *engine)
|
||||
SQAIRail.DefSQStaticMethod(engine, &AIRail::BuildSignal, "BuildSignal", 4, ".iii");
|
||||
SQAIRail.DefSQStaticMethod(engine, &AIRail::RemoveSignal, "RemoveSignal", 3, ".ii");
|
||||
SQAIRail.DefSQStaticMethod(engine, &AIRail::GetBuildCost, "GetBuildCost", 3, ".ii");
|
||||
SQAIRail.DefSQStaticMethod(engine, &AIRail::GetMaxSpeed, "GetMaxSpeed", 2, ".i");
|
||||
|
||||
SQAIRail.PostRegister(engine);
|
||||
}
|
||||
|
@@ -248,7 +248,7 @@
|
||||
{
|
||||
EnforcePrecondition(false, ::IsValidTile(tile));
|
||||
|
||||
return AIObject::DoCommand(tile, TREE_INVALID, tile, CMD_PLANT_TREE);
|
||||
return AIObject::DoCommand(tile, UINT_MAX, tile, CMD_PLANT_TREE);
|
||||
}
|
||||
|
||||
/* static */ bool AITile::PlantTreeRectangle(TileIndex tile, uint width, uint height)
|
||||
@@ -258,7 +258,7 @@
|
||||
EnforcePrecondition(false, height >= 1 && height <= 20);
|
||||
TileIndex end_tile = tile + ::TileDiffXY(width - 1, height - 1);
|
||||
|
||||
return AIObject::DoCommand(tile, TREE_INVALID, end_tile, CMD_PLANT_TREE);
|
||||
return AIObject::DoCommand(tile, UINT_MAX, end_tile, CMD_PLANT_TREE);
|
||||
}
|
||||
|
||||
/* static */ bool AITile::IsWithinTownInfluence(TileIndex tile, TownID town_id)
|
||||
|
@@ -14,7 +14,6 @@
|
||||
#include "ai_cargo.hpp"
|
||||
#include "ai_error.hpp"
|
||||
#include "../../town.h"
|
||||
#include "../../town_type.h"
|
||||
#include "../../strings_func.h"
|
||||
#include "../../company_func.h"
|
||||
#include "../../station_base.h"
|
||||
@@ -173,25 +172,8 @@
|
||||
if (company == AICompany::COMPANY_INVALID) return TOWN_RATING_INVALID;
|
||||
|
||||
const Town *t = ::Town::Get(town_id);
|
||||
if (!HasBit(t->have_ratings, company)) {
|
||||
return TOWN_RATING_NONE;
|
||||
} else if (t->ratings[company] <= RATING_APPALLING) {
|
||||
return TOWN_RATING_APPALLING;
|
||||
} else if (t->ratings[company] <= RATING_VERYPOOR) {
|
||||
return TOWN_RATING_VERY_POOR;
|
||||
} else if (t->ratings[company] <= RATING_POOR) {
|
||||
return TOWN_RATING_POOR;
|
||||
} else if (t->ratings[company] <= RATING_MEDIOCRE) {
|
||||
return TOWN_RATING_MEDIOCRE;
|
||||
} else if (t->ratings[company] <= RATING_GOOD) {
|
||||
return TOWN_RATING_GOOD;
|
||||
} else if (t->ratings[company] <= RATING_VERYGOOD) {
|
||||
return TOWN_RATING_VERY_GOOD;
|
||||
} else if (t->ratings[company] <= RATING_EXCELLENT) {
|
||||
return TOWN_RATING_EXCELLENT;
|
||||
} else {
|
||||
return TOWN_RATING_OUTSTANDING;
|
||||
}
|
||||
if (!HasBit(t->have_ratings, company)) return TOWN_RATING_NONE;
|
||||
return max(TOWN_RATING_APPALLING, (TownRating)((t->ratings[company] / 200) + 3));
|
||||
}
|
||||
|
||||
/* static */ int AITown::GetAllowedNoise(TownID town_id)
|
||||
|
@@ -77,10 +77,10 @@ static void _DoCommandReturnBuildTunnel1(class AIInstance *instance)
|
||||
|
||||
uint type = 0;
|
||||
if (vehicle_type == AIVehicle::VT_ROAD) {
|
||||
type |= (TRANSPORT_ROAD << 8);
|
||||
type |= (TRANSPORT_ROAD << 9);
|
||||
type |= ::RoadTypeToRoadTypes((::RoadType)AIObject::GetRoadType());
|
||||
} else {
|
||||
type |= (TRANSPORT_RAIL << 8);
|
||||
type |= (TRANSPORT_RAIL << 9);
|
||||
type |= AIRail::GetCurrentRailType();
|
||||
}
|
||||
|
||||
|
@@ -237,10 +237,9 @@ void GetAircraftSpriteSize(EngineID engine, uint &width, uint &height)
|
||||
*/
|
||||
CommandCost CmdBuildAircraft(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||
{
|
||||
EngineID eid = GB(p1, 0, 16);
|
||||
if (!IsEngineBuildable(eid, VEH_AIRCRAFT, _current_company)) return_cmd_error(STR_ERROR_AIRCRAFT_NOT_AVAILABLE);
|
||||
if (!IsEngineBuildable(p1, VEH_AIRCRAFT, _current_company)) return_cmd_error(STR_ERROR_AIRCRAFT_NOT_AVAILABLE);
|
||||
|
||||
const Engine *e = Engine::Get(eid);
|
||||
const Engine *e = Engine::Get(p1);
|
||||
const AircraftVehicleInfo *avi = &e->u.air;
|
||||
CommandCost value(EXPENSES_NEW_VEHICLES, e->GetCost());
|
||||
|
||||
@@ -253,7 +252,7 @@ CommandCost CmdBuildAircraft(TileIndex tile, DoCommandFlag flags, uint32 p1, uin
|
||||
if (!IsHangarTile(tile) || !IsTileOwner(tile, _current_company)) return CMD_ERROR;
|
||||
|
||||
/* Prevent building aircraft types at places which can't handle them */
|
||||
if (!CanVehicleUseStation(eid, Station::GetByTile(tile))) return CMD_ERROR;
|
||||
if (!CanVehicleUseStation(p1, Station::GetByTile(tile))) return CMD_ERROR;
|
||||
|
||||
/* We will need to allocate 2 or 3 vehicle structs, depending on type */
|
||||
if (!Vehicle::CanAllocateItem(avi->subtype & AIR_CTOL ? 2 : 3)) {
|
||||
@@ -300,8 +299,8 @@ CommandCost CmdBuildAircraft(TileIndex tile, DoCommandFlag flags, uint32 p1, uin
|
||||
|
||||
v->max_speed = avi->max_speed;
|
||||
v->acceleration = avi->acceleration;
|
||||
v->engine_type = eid;
|
||||
u->engine_type = eid;
|
||||
v->engine_type = p1;
|
||||
u->engine_type = p1;
|
||||
|
||||
v->subtype = (avi->subtype & AIR_CTOL ? AIR_AIRCRAFT : AIR_HELICOPTER);
|
||||
v->UpdateDeltaXY(INVALID_DIR);
|
||||
@@ -363,7 +362,7 @@ CommandCost CmdBuildAircraft(TileIndex tile, DoCommandFlag flags, uint32 p1, uin
|
||||
/* Aircraft with 3 vehicles (chopper)? */
|
||||
if (v->subtype == AIR_HELICOPTER) {
|
||||
Aircraft *w = new Aircraft();
|
||||
w->engine_type = eid;
|
||||
w->engine_type = p1;
|
||||
w->direction = DIR_N;
|
||||
w->owner = _current_company;
|
||||
w->x_pos = v->x_pos;
|
||||
@@ -388,7 +387,7 @@ CommandCost CmdBuildAircraft(TileIndex tile, DoCommandFlag flags, uint32 p1, uin
|
||||
if (IsLocalCompany())
|
||||
InvalidateAutoreplaceWindow(v->engine_type, v->group_id); // updates the replace Aircraft window
|
||||
|
||||
Company::Get(_current_company)->num_engines[eid]++;
|
||||
Company::Get(_current_company)->num_engines[p1]++;
|
||||
}
|
||||
|
||||
return value;
|
||||
@@ -877,11 +876,7 @@ static bool AircraftController(Aircraft *v)
|
||||
/* Make sure the rotors don't rotate too fast */
|
||||
if (u->cur_speed > 32) {
|
||||
v->cur_speed = 0;
|
||||
if (--u->cur_speed == 32) {
|
||||
if (!PlayVehicleSound(v, VSE_START)) {
|
||||
SndPlayVehicleFx(SND_18_HELICOPTER, v);
|
||||
}
|
||||
}
|
||||
if (--u->cur_speed == 32) SndPlayVehicleFx(SND_18_HELICOPTER, v);
|
||||
} else {
|
||||
u->cur_speed = 32;
|
||||
count = UpdateAircraftSpeed(v);
|
||||
|
@@ -108,11 +108,10 @@ struct BaseSet {
|
||||
* Read the set information from a loaded ini.
|
||||
* @param ini the ini to read from
|
||||
* @param path the path to this ini file (for filenames)
|
||||
* @param full_filename the full filename of the loaded file (for error reporting purposes)
|
||||
* @param allow_empty_filename empty filenames are valid
|
||||
* @return true if loading was successful.
|
||||
*/
|
||||
bool FillSetDetails(IniFile *ini, const char *path, const char *full_filename, bool allow_empty_filename = true);
|
||||
bool FillSetDetails(IniFile *ini, const char *path, bool allow_empty_filename = true);
|
||||
|
||||
/**
|
||||
* Get the description for the given ISO code.
|
||||
@@ -239,7 +238,7 @@ enum GraphicsFileType {
|
||||
struct GraphicsSet : BaseSet<GraphicsSet, MAX_GFT, DATA_DIR> {
|
||||
PaletteType palette; ///< Palette of this graphics set
|
||||
|
||||
bool FillSetDetails(struct IniFile *ini, const char *path, const char *full_filename);
|
||||
bool FillSetDetails(struct IniFile *ini, const char *path);
|
||||
};
|
||||
|
||||
/** All data/functions related with replacing the base graphics. */
|
||||
@@ -277,7 +276,7 @@ struct MusicSet : BaseSet<MusicSet, NUM_SONGS_AVAILABLE, GM_DIR> {
|
||||
byte track_nr[NUM_SONGS_AVAILABLE];
|
||||
byte num_available;
|
||||
|
||||
bool FillSetDetails(struct IniFile *ini, const char *path, const char *full_filename);
|
||||
bool FillSetDetails(struct IniFile *ini, const char *path);
|
||||
};
|
||||
|
||||
/** All data/functions related with replacing the base music */
|
||||
|
@@ -25,13 +25,12 @@ template <class Tbase_set> /* static */ Tbase_set *BaseMedia<Tbase_set>::availab
|
||||
#define fetch_metadata(name) \
|
||||
item = metadata->GetItem(name, false); \
|
||||
if (item == NULL || StrEmpty(item->value)) { \
|
||||
DEBUG(grf, 0, "Base " SET_TYPE "set detail loading: %s field missing.", name); \
|
||||
DEBUG(grf, 0, " Is %s readable for the user running OpenTTD?", full_filename); \
|
||||
DEBUG(grf, 0, "Base " SET_TYPE "set detail loading: %s field missing", name); \
|
||||
return false; \
|
||||
}
|
||||
|
||||
template <class T, size_t Tnum_files, Subdirectory Tsubdir>
|
||||
bool BaseSet<T, Tnum_files, Tsubdir>::FillSetDetails(IniFile *ini, const char *path, const char *full_filename, bool allow_empty_filename)
|
||||
bool BaseSet<T, Tnum_files, Tsubdir>::FillSetDetails(IniFile *ini, const char *path, bool allow_empty_filename)
|
||||
{
|
||||
memset(this, 0, sizeof(*this));
|
||||
|
||||
@@ -71,7 +70,7 @@ bool BaseSet<T, Tnum_files, Tsubdir>::FillSetDetails(IniFile *ini, const char *p
|
||||
/* Find the filename first. */
|
||||
item = files->GetItem(BaseSet<T, Tnum_files, Tsubdir>::file_names[i], false);
|
||||
if (item == NULL || (item->value == NULL && !allow_empty_filename)) {
|
||||
DEBUG(grf, 0, "No " SET_TYPE " file for: %s (in %s)", BaseSet<T, Tnum_files, Tsubdir>::file_names[i], full_filename);
|
||||
DEBUG(grf, 0, "No " SET_TYPE " file for: %s", BaseSet<T, Tnum_files, Tsubdir>::file_names[i]);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -89,7 +88,7 @@ bool BaseSet<T, Tnum_files, Tsubdir>::FillSetDetails(IniFile *ini, const char *p
|
||||
/* Then find the MD5 checksum */
|
||||
item = md5s->GetItem(filename, false);
|
||||
if (item == NULL) {
|
||||
DEBUG(grf, 0, "No MD5 checksum specified for: %s (in %s)", filename, full_filename);
|
||||
DEBUG(grf, 0, "No MD5 checksum specified for: %s", filename);
|
||||
return false;
|
||||
}
|
||||
char *c = item->value;
|
||||
@@ -102,7 +101,7 @@ bool BaseSet<T, Tnum_files, Tsubdir>::FillSetDetails(IniFile *ini, const char *p
|
||||
} else if ('A' <= *c && *c <= 'F') {
|
||||
j = *c - 'A' + 10;
|
||||
} else {
|
||||
DEBUG(grf, 0, "Malformed MD5 checksum specified for: %s (in %s)", filename, full_filename);
|
||||
DEBUG(grf, 0, "Malformed MD5 checksum specified for: %s", filename);
|
||||
return false;
|
||||
}
|
||||
if (i % 2 == 0) {
|
||||
@@ -156,7 +155,7 @@ bool BaseMedia<Tbase_set>::AddFile(const char *filename, size_t basepath_length)
|
||||
*path = '\0';
|
||||
}
|
||||
|
||||
if (set->FillSetDetails(ini, path, filename)) {
|
||||
if (set->FillSetDetails(ini, path)) {
|
||||
Tbase_set *duplicate = NULL;
|
||||
for (Tbase_set *c = BaseMedia<Tbase_set>::available_sets; c != NULL; c = c->next) {
|
||||
if (strcmp(c->name, set->name) == 0 || c->shortname == set->shortname) {
|
||||
|
@@ -67,7 +67,7 @@ static inline const BridgeSpec *GetBridgeSpec(BridgeType i)
|
||||
|
||||
void DrawBridgeMiddle(const TileInfo *ti);
|
||||
|
||||
CommandCost CheckBridgeAvailability(BridgeType bridge_type, uint bridge_len, DoCommandFlag flags = DC_NONE);
|
||||
bool CheckBridge_Stuff(BridgeType bridge_type, uint bridge_len, DoCommandFlag flags = DC_NONE);
|
||||
int CalcBridgeLenCostFactor(int x);
|
||||
|
||||
void ResetBridges();
|
||||
|
@@ -14,7 +14,6 @@
|
||||
#include "command_func.h"
|
||||
#include "economy_func.h"
|
||||
#include "bridge.h"
|
||||
#include "rail.h"
|
||||
#include "strings_func.h"
|
||||
#include "window_func.h"
|
||||
#include "sound_func.h"
|
||||
@@ -376,7 +375,7 @@ void ShowBuildBridgeWindow(TileIndex start, TileIndex end, TransportType transpo
|
||||
case TRANSPORT_RAIL: last_bridge_type = _last_railbridge_type; break;
|
||||
default: break; // water ways and air routes don't have bridge types
|
||||
}
|
||||
if (_ctrl_pressed && CheckBridgeAvailability(last_bridge_type, bridge_len).Succeeded()) {
|
||||
if (_ctrl_pressed && CheckBridge_Stuff(last_bridge_type, bridge_len)) {
|
||||
DoCommandP(end, start, type | last_bridge_type, CMD_BUILD_BRIDGE | CMD_MSG(STR_ERROR_CAN_T_BUILD_BRIDGE_HERE), CcBuildBridge);
|
||||
return;
|
||||
}
|
||||
@@ -395,23 +394,16 @@ void ShowBuildBridgeWindow(TileIndex start, TileIndex end, TransportType transpo
|
||||
|
||||
bl = new GUIBridgeList();
|
||||
|
||||
Money infra_cost = 0;
|
||||
switch (transport_type) {
|
||||
case TRANSPORT_ROAD: infra_cost = (bridge_len + 2) * _price[PR_BUILD_ROAD] * 2; break;
|
||||
case TRANSPORT_RAIL: infra_cost = (bridge_len + 2) * RailBuildCost((RailType)road_rail_type); break;
|
||||
default: break;
|
||||
}
|
||||
|
||||
/* loop for all bridgetypes */
|
||||
for (BridgeType brd_type = 0; brd_type != MAX_BRIDGES; brd_type++) {
|
||||
if (CheckBridgeAvailability(brd_type, bridge_len).Succeeded()) {
|
||||
if (CheckBridge_Stuff(brd_type, bridge_len)) {
|
||||
/* bridge is accepted, add to list */
|
||||
BuildBridgeData *item = bl->Append();
|
||||
item->index = brd_type;
|
||||
item->spec = GetBridgeSpec(brd_type);
|
||||
/* Add to terraforming & bulldozing costs the cost of the
|
||||
* bridge itself (not computed with DC_QUERY_COST) */
|
||||
item->cost = ret.GetCost() + (((int64)tot_bridgedata_len * _price[PR_BUILD_BRIDGE] * item->spec->price) >> 8) + infra_cost;
|
||||
item->cost = ret.GetCost() + (((int64)tot_bridgedata_len * _price[PR_BUILD_BRIDGE] * item->spec->price) >> 8);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1017,7 +1017,7 @@ struct BuildVehicleWindow : Window {
|
||||
size_t num_items = this->eng_list.Length();
|
||||
this->sel_engine = (i < num_items) ? this->eng_list[i] : INVALID_ENGINE;
|
||||
this->SetDirty();
|
||||
if (click_count > 1 && !this->listview_mode) this->OnClick(pt, BUILD_VEHICLE_WIDGET_BUILD, 1);
|
||||
if (click_count > 1) this->OnClick(pt, BUILD_VEHICLE_WIDGET_BUILD, 1);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1122,9 +1122,8 @@ struct BuildVehicleWindow : Window {
|
||||
}
|
||||
}
|
||||
if (needed_height != this->details_height) { // Details window are not high enough, enlarge them.
|
||||
int resize = needed_height - this->details_height;
|
||||
this->details_height = needed_height;
|
||||
this->ReInit(0, resize);
|
||||
this->ReInit();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@@ -189,40 +189,19 @@ static void TileLoopClearAlps(TileIndex tile)
|
||||
MarkTileDirtyByTile(tile);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests if at least one surrounding tile is desert
|
||||
* @param tile tile to check
|
||||
* @return does this tile have at least one desert tile around?
|
||||
*/
|
||||
static inline bool NeighbourIsDesert(TileIndex tile)
|
||||
{
|
||||
return GetTropicZone(tile + TileDiffXY( 1, 0)) == TROPICZONE_DESERT ||
|
||||
GetTropicZone(tile + TileDiffXY( -1, 0)) == TROPICZONE_DESERT ||
|
||||
GetTropicZone(tile + TileDiffXY( 0, 1)) == TROPICZONE_DESERT ||
|
||||
GetTropicZone(tile + TileDiffXY( 0, -1)) == TROPICZONE_DESERT;
|
||||
}
|
||||
|
||||
static void TileLoopClearDesert(TileIndex tile)
|
||||
{
|
||||
/* Current desert level - 0 if it is not desert */
|
||||
uint current = 0;
|
||||
if (IsClearGround(tile, CLEAR_DESERT)) current = GetClearDensity(tile);
|
||||
if (IsClearGround(tile, CLEAR_DESERT)) return;
|
||||
|
||||
/* Expected desert level - 0 if it shouldn't be desert */
|
||||
uint expected = 0;
|
||||
if (GetTropicZone(tile) == TROPICZONE_DESERT) {
|
||||
expected = 3;
|
||||
} else if (NeighbourIsDesert(tile)) {
|
||||
expected = 1;
|
||||
}
|
||||
|
||||
if (current == expected) return;
|
||||
|
||||
if (expected == 0) {
|
||||
SetClearGroundDensity(tile, CLEAR_GRASS, 3);
|
||||
SetClearGroundDensity(tile, CLEAR_DESERT, 3);
|
||||
} else {
|
||||
/* Transition from clear to desert is not smooth (after clearing desert tile) */
|
||||
SetClearGroundDensity(tile, CLEAR_DESERT, expected);
|
||||
if (GetTropicZone(tile + TileDiffXY( 1, 0)) != TROPICZONE_DESERT &&
|
||||
GetTropicZone(tile + TileDiffXY(-1, 0)) != TROPICZONE_DESERT &&
|
||||
GetTropicZone(tile + TileDiffXY( 0, 1)) != TROPICZONE_DESERT &&
|
||||
GetTropicZone(tile + TileDiffXY( 0, -1)) != TROPICZONE_DESERT)
|
||||
return;
|
||||
SetClearGroundDensity(tile, CLEAR_DESERT, 1);
|
||||
}
|
||||
|
||||
MarkTileDirtyByTile(tile);
|
||||
|
@@ -12,16 +12,25 @@
|
||||
#ifndef CMD_HELPER_H
|
||||
#define CMD_HELPER_H
|
||||
|
||||
#include "core/enum_type.hpp"
|
||||
#include "direction_type.h"
|
||||
#include "road_type.h"
|
||||
|
||||
template<typename T, uint S, uint N, typename U> static inline T Extract(U v)
|
||||
|
||||
template<uint N> static inline void ExtractValid();
|
||||
template<> inline void ExtractValid<1>() {}
|
||||
|
||||
|
||||
template<typename T> struct ExtractBits;
|
||||
template<> struct ExtractBits<Axis> { static const uint Count = 1; };
|
||||
template<> struct ExtractBits<DiagDirection> { static const uint Count = 2; };
|
||||
template<> struct ExtractBits<RoadBits> { static const uint Count = 4; };
|
||||
|
||||
|
||||
template<typename T, uint N, typename U> static inline T Extract(U v)
|
||||
{
|
||||
/* Check if there are enough bits in v */
|
||||
assert_tcompile(N == EnumPropsT<T>::num_bits);
|
||||
assert_tcompile(S + N <= sizeof(U) * 8);
|
||||
assert_tcompile(EnumPropsT<T>::end <= (1 << N));
|
||||
U masked = GB(v, S, N);
|
||||
return IsInsideMM(masked, EnumPropsT<T>::begin, EnumPropsT<T>::end) ? (T)masked : EnumPropsT<T>::invalid;
|
||||
ExtractValid<N + ExtractBits<T>::Count <= sizeof(U) * 8>();
|
||||
return (T)GB(v, N, ExtractBits<T>::Count);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
239
src/command.cpp
239
src/command.cpp
@@ -188,8 +188,6 @@ CommandProc CmdSetVehicleOnTime;
|
||||
CommandProc CmdAutofillTimetable;
|
||||
CommandProc CmdSetTimetableStart;
|
||||
|
||||
#define DEF_CMD(proc, flags) {proc, #proc, flags}
|
||||
|
||||
/**
|
||||
* The master command table
|
||||
*
|
||||
@@ -198,141 +196,141 @@ CommandProc CmdSetTimetableStart;
|
||||
* as the value from the CMD_* enums.
|
||||
*/
|
||||
static const Command _command_proc_table[] = {
|
||||
DEF_CMD(CmdBuildRailroadTrack, CMD_NO_WATER | CMD_AUTO), // CMD_BUILD_RAILROAD_TRACK
|
||||
DEF_CMD(CmdRemoveRailroadTrack, CMD_AUTO), // CMD_REMOVE_RAILROAD_TRACK
|
||||
DEF_CMD(CmdBuildSingleRail, CMD_NO_WATER | CMD_AUTO), // CMD_BUILD_SINGLE_RAIL
|
||||
DEF_CMD(CmdRemoveSingleRail, CMD_AUTO), // CMD_REMOVE_SINGLE_RAIL
|
||||
DEF_CMD(CmdLandscapeClear, 0), // CMD_LANDSCAPE_CLEAR
|
||||
DEF_CMD(CmdBuildBridge, CMD_AUTO), // CMD_BUILD_BRIDGE
|
||||
DEF_CMD(CmdBuildRailStation, CMD_NO_WATER | CMD_AUTO), // CMD_BUILD_RAIL_STATION
|
||||
DEF_CMD(CmdBuildTrainDepot, CMD_NO_WATER | CMD_AUTO), // CMD_BUILD_TRAIN_DEPOT
|
||||
DEF_CMD(CmdBuildSingleSignal, CMD_AUTO), // CMD_BUILD_SIGNALS
|
||||
DEF_CMD(CmdRemoveSingleSignal, CMD_AUTO), // CMD_REMOVE_SIGNALS
|
||||
DEF_CMD(CmdTerraformLand, CMD_ALL_TILES | CMD_AUTO), // CMD_TERRAFORM_LAND
|
||||
DEF_CMD(CmdPurchaseLandArea, CMD_NO_WATER | CMD_AUTO), // CMD_PURCHASE_LAND_AREA
|
||||
DEF_CMD(CmdSellLandArea, 0), // CMD_SELL_LAND_AREA
|
||||
DEF_CMD(CmdBuildTunnel, CMD_AUTO), // CMD_BUILD_TUNNEL
|
||||
DEF_CMD(CmdRemoveFromRailStation, 0), // CMD_REMOVE_FROM_RAIL_STATION
|
||||
DEF_CMD(CmdConvertRail, 0), // CMD_CONVERT_RAILD
|
||||
DEF_CMD(CmdBuildRailWaypoint, 0), // CMD_BUILD_RAIL_WAYPOINT
|
||||
DEF_CMD(CmdRenameWaypoint, 0), // CMD_RENAME_WAYPOINT
|
||||
DEF_CMD(CmdRemoveFromRailWaypoint, 0), // CMD_REMOVE_FROM_RAIL_WAYPOINT
|
||||
{CmdBuildRailroadTrack, CMD_NO_WATER | CMD_AUTO}, // CMD_BUILD_RAILROAD_TRACK
|
||||
{CmdRemoveRailroadTrack, CMD_AUTO}, // CMD_REMOVE_RAILROAD_TRACK
|
||||
{CmdBuildSingleRail, CMD_NO_WATER | CMD_AUTO}, // CMD_BUILD_SINGLE_RAIL
|
||||
{CmdRemoveSingleRail, CMD_AUTO}, // CMD_REMOVE_SINGLE_RAIL
|
||||
{CmdLandscapeClear, 0}, // CMD_LANDSCAPE_CLEAR
|
||||
{CmdBuildBridge, CMD_AUTO}, // CMD_BUILD_BRIDGE
|
||||
{CmdBuildRailStation, CMD_NO_WATER | CMD_AUTO}, // CMD_BUILD_RAIL_STATION
|
||||
{CmdBuildTrainDepot, CMD_NO_WATER | CMD_AUTO}, // CMD_BUILD_TRAIN_DEPOT
|
||||
{CmdBuildSingleSignal, CMD_AUTO}, // CMD_BUILD_SIGNALS
|
||||
{CmdRemoveSingleSignal, CMD_AUTO}, // CMD_REMOVE_SIGNALS
|
||||
{CmdTerraformLand, CMD_ALL_TILES | CMD_AUTO}, // CMD_TERRAFORM_LAND
|
||||
{CmdPurchaseLandArea, CMD_NO_WATER | CMD_AUTO}, // CMD_PURCHASE_LAND_AREA
|
||||
{CmdSellLandArea, 0}, // CMD_SELL_LAND_AREA
|
||||
{CmdBuildTunnel, CMD_AUTO}, // CMD_BUILD_TUNNEL
|
||||
{CmdRemoveFromRailStation, 0}, // CMD_REMOVE_FROM_RAIL_STATION
|
||||
{CmdConvertRail, 0}, // CMD_CONVERT_RAILD
|
||||
{CmdBuildRailWaypoint, 0}, // CMD_BUILD_RAIL_WAYPOINT
|
||||
{CmdRenameWaypoint, 0}, // CMD_RENAME_WAYPOINT
|
||||
{CmdRemoveFromRailWaypoint, 0}, // CMD_REMOVE_FROM_RAIL_WAYPOINT
|
||||
|
||||
DEF_CMD(CmdBuildRoadStop, CMD_NO_WATER | CMD_AUTO), // CMD_BUILD_ROAD_STOP
|
||||
DEF_CMD(CmdRemoveRoadStop, 0), // CMD_REMOVE_ROAD_STOP
|
||||
DEF_CMD(CmdBuildLongRoad, CMD_NO_WATER | CMD_AUTO), // CMD_BUILD_LONG_ROAD
|
||||
DEF_CMD(CmdRemoveLongRoad, CMD_NO_TEST | CMD_AUTO), // CMD_REMOVE_LONG_ROAD; towns may disallow removing road bits (as they are connected) in test, but in exec they're removed and thus removing is allowed.
|
||||
DEF_CMD(CmdBuildRoad, CMD_NO_WATER | CMD_AUTO), // CMD_BUILD_ROAD
|
||||
DEF_CMD(CmdBuildRoadDepot, CMD_NO_WATER | CMD_AUTO), // CMD_BUILD_ROAD_DEPOT
|
||||
{CmdBuildRoadStop, CMD_NO_WATER | CMD_AUTO}, // CMD_BUILD_ROAD_STOP
|
||||
{CmdRemoveRoadStop, 0}, // CMD_REMOVE_ROAD_STOP
|
||||
{CmdBuildLongRoad, CMD_NO_WATER | CMD_AUTO}, // CMD_BUILD_LONG_ROAD
|
||||
{CmdRemoveLongRoad, CMD_NO_TEST | CMD_AUTO}, // CMD_REMOVE_LONG_ROAD; towns may disallow removing road bits (as they are connected) in test, but in exec they're removed and thus removing is allowed.
|
||||
{CmdBuildRoad, CMD_NO_WATER | CMD_AUTO}, // CMD_BUILD_ROAD
|
||||
{CmdBuildRoadDepot, CMD_NO_WATER | CMD_AUTO}, // CMD_BUILD_ROAD_DEPOT
|
||||
|
||||
DEF_CMD(CmdBuildAirport, CMD_NO_WATER | CMD_AUTO), // CMD_BUILD_AIRPORT
|
||||
DEF_CMD(CmdBuildDock, CMD_AUTO), // CMD_BUILD_DOCK
|
||||
DEF_CMD(CmdBuildShipDepot, CMD_AUTO), // CMD_BUILD_SHIP_DEPOT
|
||||
DEF_CMD(CmdBuildBuoy, CMD_AUTO), // CMD_BUILD_BUOY
|
||||
DEF_CMD(CmdPlantTree, CMD_AUTO), // CMD_PLANT_TREE
|
||||
DEF_CMD(CmdBuildRailVehicle, 0), // CMD_BUILD_RAIL_VEHICLE
|
||||
DEF_CMD(CmdMoveRailVehicle, 0), // CMD_MOVE_RAIL_VEHICLE
|
||||
{CmdBuildAirport, CMD_NO_WATER | CMD_AUTO}, // CMD_BUILD_AIRPORT
|
||||
{CmdBuildDock, CMD_AUTO}, // CMD_BUILD_DOCK
|
||||
{CmdBuildShipDepot, CMD_AUTO}, // CMD_BUILD_SHIP_DEPOT
|
||||
{CmdBuildBuoy, CMD_AUTO}, // CMD_BUILD_BUOY
|
||||
{CmdPlantTree, CMD_AUTO}, // CMD_PLANT_TREE
|
||||
{CmdBuildRailVehicle, 0}, // CMD_BUILD_RAIL_VEHICLE
|
||||
{CmdMoveRailVehicle, 0}, // CMD_MOVE_RAIL_VEHICLE
|
||||
|
||||
DEF_CMD(CmdSellRailWagon, 0), // CMD_SELL_RAIL_WAGON
|
||||
DEF_CMD(CmdSendTrainToDepot, 0), // CMD_SEND_TRAIN_TO_DEPOT
|
||||
DEF_CMD(CmdForceTrainProceed, 0), // CMD_FORCE_TRAIN_PROCEED
|
||||
DEF_CMD(CmdReverseTrainDirection, 0), // CMD_REVERSE_TRAIN_DIRECTION
|
||||
{CmdSellRailWagon, 0}, // CMD_SELL_RAIL_WAGON
|
||||
{CmdSendTrainToDepot, 0}, // CMD_SEND_TRAIN_TO_DEPOT
|
||||
{CmdForceTrainProceed, 0}, // CMD_FORCE_TRAIN_PROCEED
|
||||
{CmdReverseTrainDirection, 0}, // CMD_REVERSE_TRAIN_DIRECTION
|
||||
|
||||
DEF_CMD(CmdModifyOrder, 0), // CMD_MODIFY_ORDER
|
||||
DEF_CMD(CmdSkipToOrder, 0), // CMD_SKIP_TO_ORDER
|
||||
DEF_CMD(CmdDeleteOrder, 0), // CMD_DELETE_ORDER
|
||||
DEF_CMD(CmdInsertOrder, 0), // CMD_INSERT_ORDER
|
||||
{CmdModifyOrder, 0}, // CMD_MODIFY_ORDER
|
||||
{CmdSkipToOrder, 0}, // CMD_SKIP_TO_ORDER
|
||||
{CmdDeleteOrder, 0}, // CMD_DELETE_ORDER
|
||||
{CmdInsertOrder, 0}, // CMD_INSERT_ORDER
|
||||
|
||||
DEF_CMD(CmdChangeServiceInt, 0), // CMD_CHANGE_SERVICE_INT
|
||||
{CmdChangeServiceInt, 0}, // CMD_CHANGE_SERVICE_INT
|
||||
|
||||
DEF_CMD(CmdBuildIndustry, 0), // CMD_BUILD_INDUSTRY
|
||||
DEF_CMD(CmdBuildCompanyHQ, CMD_NO_WATER | CMD_AUTO), // CMD_BUILD_COMPANY_HQ
|
||||
DEF_CMD(CmdSetCompanyManagerFace, 0), // CMD_SET_COMPANY_MANAGER_FACE
|
||||
DEF_CMD(CmdSetCompanyColour, 0), // CMD_SET_COMPANY_COLOUR
|
||||
{CmdBuildIndustry, 0}, // CMD_BUILD_INDUSTRY
|
||||
{CmdBuildCompanyHQ, CMD_NO_WATER | CMD_AUTO}, // CMD_BUILD_COMPANY_HQ
|
||||
{CmdSetCompanyManagerFace, 0}, // CMD_SET_COMPANY_MANAGER_FACE
|
||||
{CmdSetCompanyColour, 0}, // CMD_SET_COMPANY_COLOUR
|
||||
|
||||
DEF_CMD(CmdIncreaseLoan, 0), // CMD_INCREASE_LOAN
|
||||
DEF_CMD(CmdDecreaseLoan, 0), // CMD_DECREASE_LOAN
|
||||
{CmdIncreaseLoan, 0}, // CMD_INCREASE_LOAN
|
||||
{CmdDecreaseLoan, 0}, // CMD_DECREASE_LOAN
|
||||
|
||||
DEF_CMD(CmdWantEnginePreview, 0), // CMD_WANT_ENGINE_PREVIEW
|
||||
{CmdWantEnginePreview, 0}, // CMD_WANT_ENGINE_PREVIEW
|
||||
|
||||
DEF_CMD(CmdRenameVehicle, 0), // CMD_RENAME_VEHICLE
|
||||
DEF_CMD(CmdRenameEngine, 0), // CMD_RENAME_ENGINE
|
||||
{CmdRenameVehicle, 0}, // CMD_RENAME_VEHICLE
|
||||
{CmdRenameEngine, 0}, // CMD_RENAME_ENGINE
|
||||
|
||||
DEF_CMD(CmdRenameCompany, 0), // CMD_RENAME_COMPANY
|
||||
DEF_CMD(CmdRenamePresident, 0), // CMD_RENAME_PRESIDENT
|
||||
{CmdRenameCompany, 0}, // CMD_RENAME_COMPANY
|
||||
{CmdRenamePresident, 0}, // CMD_RENAME_PRESIDENT
|
||||
|
||||
DEF_CMD(CmdRenameStation, 0), // CMD_RENAME_STATION
|
||||
{CmdRenameStation, 0}, // CMD_RENAME_STATION
|
||||
|
||||
DEF_CMD(CmdSellAircraft, 0), // CMD_SELL_AIRCRAFT
|
||||
{CmdSellAircraft, 0}, // CMD_SELL_AIRCRAFT
|
||||
|
||||
DEF_CMD(CmdBuildAircraft, 0), // CMD_BUILD_AIRCRAFT
|
||||
DEF_CMD(CmdSendAircraftToHangar, 0), // CMD_SEND_AIRCRAFT_TO_HANGAR
|
||||
DEF_CMD(CmdRefitAircraft, 0), // CMD_REFIT_AIRCRAFT
|
||||
{CmdBuildAircraft, 0}, // CMD_BUILD_AIRCRAFT
|
||||
{CmdSendAircraftToHangar, 0}, // CMD_SEND_AIRCRAFT_TO_HANGAR
|
||||
{CmdRefitAircraft, 0}, // CMD_REFIT_AIRCRAFT
|
||||
|
||||
DEF_CMD(CmdPlaceSign, 0), // CMD_PLACE_SIGN
|
||||
DEF_CMD(CmdRenameSign, 0), // CMD_RENAME_SIGN
|
||||
{CmdPlaceSign, 0}, // CMD_PLACE_SIGN
|
||||
{CmdRenameSign, 0}, // CMD_RENAME_SIGN
|
||||
|
||||
DEF_CMD(CmdBuildRoadVeh, 0), // CMD_BUILD_ROAD_VEH
|
||||
DEF_CMD(CmdSellRoadVeh, 0), // CMD_SELL_ROAD_VEH
|
||||
DEF_CMD(CmdSendRoadVehToDepot, 0), // CMD_SEND_ROADVEH_TO_DEPOT
|
||||
DEF_CMD(CmdTurnRoadVeh, 0), // CMD_TURN_ROADVEH
|
||||
DEF_CMD(CmdRefitRoadVeh, 0), // CMD_REFIT_ROAD_VEH
|
||||
{CmdBuildRoadVeh, 0}, // CMD_BUILD_ROAD_VEH
|
||||
{CmdSellRoadVeh, 0}, // CMD_SELL_ROAD_VEH
|
||||
{CmdSendRoadVehToDepot, 0}, // CMD_SEND_ROADVEH_TO_DEPOT
|
||||
{CmdTurnRoadVeh, 0}, // CMD_TURN_ROADVEH
|
||||
{CmdRefitRoadVeh, 0}, // CMD_REFIT_ROAD_VEH
|
||||
|
||||
DEF_CMD(CmdPause, CMD_SERVER), // CMD_PAUSE
|
||||
{CmdPause, CMD_SERVER}, // CMD_PAUSE
|
||||
|
||||
DEF_CMD(CmdBuyShareInCompany, 0), // CMD_BUY_SHARE_IN_COMPANY
|
||||
DEF_CMD(CmdSellShareInCompany, 0), // CMD_SELL_SHARE_IN_COMPANY
|
||||
DEF_CMD(CmdBuyCompany, 0), // CMD_BUY_COMANY
|
||||
{CmdBuyShareInCompany, 0}, // CMD_BUY_SHARE_IN_COMPANY
|
||||
{CmdSellShareInCompany, 0}, // CMD_SELL_SHARE_IN_COMPANY
|
||||
{CmdBuyCompany, 0}, // CMD_BUY_COMANY
|
||||
|
||||
DEF_CMD(CmdFoundTown, CMD_NO_TEST), // CMD_FOUND_TOWN; founding random town can fail only in exec run
|
||||
DEF_CMD(CmdRenameTown, CMD_SERVER), // CMD_RENAME_TOWN
|
||||
DEF_CMD(CmdDoTownAction, 0), // CMD_DO_TOWN_ACTION
|
||||
{CmdFoundTown, CMD_NO_TEST}, // CMD_FOUND_TOWN; founding random town can fail only in exec run
|
||||
{CmdRenameTown, CMD_SERVER}, // CMD_RENAME_TOWN
|
||||
{CmdDoTownAction, 0}, // CMD_DO_TOWN_ACTION
|
||||
|
||||
DEF_CMD(CmdSellShip, 0), // CMD_SELL_SHIP
|
||||
DEF_CMD(CmdBuildShip, 0), // CMD_BUILD_SHIP
|
||||
DEF_CMD(CmdSendShipToDepot, 0), // CMD_SEND_SHIP_TO_DEPOT
|
||||
DEF_CMD(CmdRefitShip, 0), // CMD_REFIT_SHIP
|
||||
{CmdSellShip, 0}, // CMD_SELL_SHIP
|
||||
{CmdBuildShip, 0}, // CMD_BUILD_SHIP
|
||||
{CmdSendShipToDepot, 0}, // CMD_SEND_SHIP_TO_DEPOT
|
||||
{CmdRefitShip, 0}, // CMD_REFIT_SHIP
|
||||
|
||||
DEF_CMD(CmdOrderRefit, 0), // CMD_ORDER_REFIT
|
||||
DEF_CMD(CmdCloneOrder, 0), // CMD_CLONE_ORDER
|
||||
{CmdOrderRefit, 0}, // CMD_ORDER_REFIT
|
||||
{CmdCloneOrder, 0}, // CMD_CLONE_ORDER
|
||||
|
||||
DEF_CMD(CmdClearArea, CMD_NO_TEST), // CMD_CLEAR_AREA; destroying multi-tile houses makes town rating differ between test and execution
|
||||
{CmdClearArea, CMD_NO_TEST}, // CMD_CLEAR_AREA; destroying multi-tile houses makes town rating differ between test and execution
|
||||
|
||||
DEF_CMD(CmdMoneyCheat, CMD_OFFLINE), // CMD_MONEY_CHEAT
|
||||
DEF_CMD(CmdBuildCanal, CMD_AUTO), // CMD_BUILD_CANAL
|
||||
DEF_CMD(CmdCompanyCtrl, CMD_SPECTATOR), // CMD_COMPANY_CTRL
|
||||
{CmdMoneyCheat, CMD_OFFLINE}, // CMD_MONEY_CHEAT
|
||||
{CmdBuildCanal, CMD_AUTO}, // CMD_BUILD_CANAL
|
||||
{CmdCompanyCtrl, CMD_SPECTATOR}, // CMD_COMPANY_CTRL
|
||||
|
||||
DEF_CMD(CmdLevelLand, CMD_ALL_TILES | CMD_NO_TEST | CMD_AUTO), // CMD_LEVEL_LAND; test run might clear tiles multiple times, in execution that only happens once
|
||||
{CmdLevelLand, CMD_ALL_TILES | CMD_NO_TEST | CMD_AUTO}, // CMD_LEVEL_LAND; test run might clear tiles multiple times, in execution that only happens once
|
||||
|
||||
DEF_CMD(CmdRefitRailVehicle, 0), // CMD_REFIT_RAIL_VEHICLE
|
||||
DEF_CMD(CmdRestoreOrderIndex, 0), // CMD_RESTORE_ORDER_INDEX
|
||||
DEF_CMD(CmdBuildLock, CMD_AUTO), // CMD_BUILD_LOCK
|
||||
{CmdRefitRailVehicle, 0}, // CMD_REFIT_RAIL_VEHICLE
|
||||
{CmdRestoreOrderIndex, 0}, // CMD_RESTORE_ORDER_INDEX
|
||||
{CmdBuildLock, CMD_AUTO}, // CMD_BUILD_LOCK
|
||||
|
||||
DEF_CMD(CmdBuildSignalTrack, CMD_AUTO), // CMD_BUILD_SIGNAL_TRACK
|
||||
DEF_CMD(CmdRemoveSignalTrack, CMD_AUTO), // CMD_REMOVE_SIGNAL_TRACK
|
||||
{CmdBuildSignalTrack, CMD_AUTO}, // CMD_BUILD_SIGNAL_TRACK
|
||||
{CmdRemoveSignalTrack, CMD_AUTO}, // CMD_REMOVE_SIGNAL_TRACK
|
||||
|
||||
DEF_CMD(CmdGiveMoney, 0), // CMD_GIVE_MONEY
|
||||
DEF_CMD(CmdChangeSetting, CMD_SERVER), // CMD_CHANGE_SETTING
|
||||
DEF_CMD(CmdChangeCompanySetting, 0), // CMD_CHANGE_COMPANY_SETTING
|
||||
DEF_CMD(CmdSetAutoReplace, 0), // CMD_SET_AUTOREPLACE
|
||||
DEF_CMD(CmdCloneVehicle, CMD_NO_TEST), // CMD_CLONE_VEHICLE; NewGRF callbacks influence building and refitting making it impossible to correctly estimate the cost
|
||||
DEF_CMD(CmdStartStopVehicle, 0), // CMD_START_STOP_VEHICLE
|
||||
DEF_CMD(CmdMassStartStopVehicle, 0), // CMD_MASS_START_STOP
|
||||
DEF_CMD(CmdAutoreplaceVehicle, 0), // CMD_AUTOREPLACE_VEHICLE
|
||||
DEF_CMD(CmdDepotSellAllVehicles, 0), // CMD_DEPOT_SELL_ALL_VEHICLES
|
||||
DEF_CMD(CmdDepotMassAutoReplace, 0), // CMD_DEPOT_MASS_AUTOREPLACE
|
||||
DEF_CMD(CmdCreateGroup, 0), // CMD_CREATE_GROUP
|
||||
DEF_CMD(CmdDeleteGroup, 0), // CMD_DELETE_GROUP
|
||||
DEF_CMD(CmdRenameGroup, 0), // CMD_RENAME_GROUP
|
||||
DEF_CMD(CmdAddVehicleGroup, 0), // CMD_ADD_VEHICLE_GROUP
|
||||
DEF_CMD(CmdAddSharedVehicleGroup, 0), // CMD_ADD_SHARE_VEHICLE_GROUP
|
||||
DEF_CMD(CmdRemoveAllVehiclesGroup, 0), // CMD_REMOVE_ALL_VEHICLES_GROUP
|
||||
DEF_CMD(CmdSetGroupReplaceProtection, 0), // CMD_SET_GROUP_REPLACE_PROTECTION
|
||||
DEF_CMD(CmdMoveOrder, 0), // CMD_MOVE_ORDER
|
||||
DEF_CMD(CmdChangeTimetable, 0), // CMD_CHANGE_TIMETABLE
|
||||
DEF_CMD(CmdSetVehicleOnTime, 0), // CMD_SET_VEHICLE_ON_TIME
|
||||
DEF_CMD(CmdAutofillTimetable, 0), // CMD_AUTOFILL_TIMETABLE
|
||||
DEF_CMD(CmdSetTimetableStart, 0), // CMD_SET_TIMETABLE_START
|
||||
{CmdGiveMoney, 0}, // CMD_GIVE_MONEY
|
||||
{CmdChangeSetting, CMD_SERVER}, // CMD_CHANGE_SETTING
|
||||
{CmdChangeCompanySetting, 0}, // CMD_CHANGE_COMPANY_SETTING
|
||||
{CmdSetAutoReplace, 0}, // CMD_SET_AUTOREPLACE
|
||||
{CmdCloneVehicle, CMD_NO_TEST}, // CMD_CLONE_VEHICLE; NewGRF callbacks influence building and refitting making it impossible to correctly estimate the cost
|
||||
{CmdStartStopVehicle, 0}, // CMD_START_STOP_VEHICLE
|
||||
{CmdMassStartStopVehicle, 0}, // CMD_MASS_START_STOP
|
||||
{CmdAutoreplaceVehicle, 0}, // CMD_AUTOREPLACE_VEHICLE
|
||||
{CmdDepotSellAllVehicles, 0}, // CMD_DEPOT_SELL_ALL_VEHICLES
|
||||
{CmdDepotMassAutoReplace, 0}, // CMD_DEPOT_MASS_AUTOREPLACE
|
||||
{CmdCreateGroup, 0}, // CMD_CREATE_GROUP
|
||||
{CmdDeleteGroup, 0}, // CMD_DELETE_GROUP
|
||||
{CmdRenameGroup, 0}, // CMD_RENAME_GROUP
|
||||
{CmdAddVehicleGroup, 0}, // CMD_ADD_VEHICLE_GROUP
|
||||
{CmdAddSharedVehicleGroup, 0}, // CMD_ADD_SHARE_VEHICLE_GROUP
|
||||
{CmdRemoveAllVehiclesGroup, 0}, // CMD_REMOVE_ALL_VEHICLES_GROUP
|
||||
{CmdSetGroupReplaceProtection, 0}, // CMD_SET_GROUP_REPLACE_PROTECTION
|
||||
{CmdMoveOrder, 0}, // CMD_MOVE_ORDER
|
||||
{CmdChangeTimetable, 0}, // CMD_CHANGE_TIMETABLE
|
||||
{CmdSetVehicleOnTime, 0}, // CMD_SET_VEHICLE_ON_TIME
|
||||
{CmdAutofillTimetable, 0}, // CMD_AUTOFILL_TIMETABLE
|
||||
{CmdSetTimetableStart, 0}, // CMD_SET_TIMETABLE_START
|
||||
};
|
||||
|
||||
/*!
|
||||
@@ -364,20 +362,6 @@ byte GetCommandFlags(uint32 cmd)
|
||||
return _command_proc_table[cmd & CMD_ID_MASK].flags;
|
||||
}
|
||||
|
||||
/*!
|
||||
* This function mask the parameter with CMD_ID_MASK and returns
|
||||
* the name which belongs to the given command.
|
||||
*
|
||||
* @param cmd The integer value of the command
|
||||
* @return The name for this command
|
||||
*/
|
||||
const char *GetCommandName(uint32 cmd)
|
||||
{
|
||||
assert(IsValidCommand(cmd));
|
||||
|
||||
return _command_proc_table[cmd & CMD_ID_MASK].name;
|
||||
}
|
||||
|
||||
static int _docommand_recursive = 0;
|
||||
|
||||
/**
|
||||
@@ -656,7 +640,7 @@ CommandCost DoCommandPInternal(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd,
|
||||
return_dcpi(CommandCost(), false);
|
||||
}
|
||||
#endif /* ENABLE_NETWORK */
|
||||
DEBUG(desync, 1, "cmd: %08x; %02x; %02x; %06x; %08x; %08x; %08x; \"%s\" (%s)", _date, _date_fract, (int)_current_company, tile, p1, p2, cmd & ~CMD_NETWORK_COMMAND, text, GetCommandName(cmd));
|
||||
DEBUG(desync, 1, "cmd: %08x; %08x; %1x; %06x; %08x; %08x; %04x; %s\n", _date, _date_fract, (int)_current_company, tile, p1, p2, cmd & ~CMD_NETWORK_COMMAND, text);
|
||||
|
||||
/* Actually try and execute the command. If no cost-type is given
|
||||
* use the construction one */
|
||||
@@ -678,9 +662,6 @@ CommandCost DoCommandPInternal(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd,
|
||||
/* If we're needing more money and we haven't done
|
||||
* anything yet, ask for the money! */
|
||||
if (_additional_cash_required != 0 && res2.GetCost() == 0) {
|
||||
/* It could happen we removed rail, thus gained money, and deleted something else.
|
||||
* So make sure the signal buffer is empty even in this case */
|
||||
UpdateSignalsInBuffer();
|
||||
SetDParam(0, _additional_cash_required);
|
||||
return_dcpi(CommandCost(STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY), false);
|
||||
}
|
||||
|
@@ -67,10 +67,6 @@ bool IsValidCommand(uint32 cmd);
|
||||
* Returns the flags from a given command.
|
||||
*/
|
||||
byte GetCommandFlags(uint32 cmd);
|
||||
/**
|
||||
* Returns the name of a given command.
|
||||
*/
|
||||
const char *GetCommandName(uint32 cmd);
|
||||
/**
|
||||
* Returns the current money available which can be used for a command.
|
||||
*/
|
||||
|
@@ -382,9 +382,8 @@ typedef CommandCost CommandProc(TileIndex tile, DoCommandFlag flags, uint32 p1,
|
||||
* the #CMD_AUTO, #CMD_OFFLINE and #CMD_SERVER values.
|
||||
*/
|
||||
struct Command {
|
||||
CommandProc *proc; ///< The procedure to actually executing
|
||||
const char *name; ///< A human readable name for the procedure
|
||||
byte flags; ///< The (command) flags to that apply to this command
|
||||
CommandProc *proc;
|
||||
byte flags;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@@ -15,7 +15,6 @@
|
||||
#include "company_gui.h"
|
||||
#include "town.h"
|
||||
#include "news_func.h"
|
||||
#include "cmd_helper.h"
|
||||
#include "command_func.h"
|
||||
#include "network/network.h"
|
||||
#include "network/network_func.h"
|
||||
@@ -79,8 +78,6 @@ void Company::PostDestructor(size_t index)
|
||||
InvalidateWindowData(WC_GRAPH_LEGEND, 0, (int)index);
|
||||
InvalidateWindowData(WC_PERFORMANCE_DETAIL, 0, (int)index);
|
||||
InvalidateWindowData(WC_COMPANY_LEAGUE, 0, 0);
|
||||
/* If the currently shown error message has this company in it, the close it. */
|
||||
InvalidateWindowData(WC_ERRMSG, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -592,11 +589,14 @@ static void HandleBankruptcyTakeover(Company *c)
|
||||
|
||||
SetBit(c->bankrupt_asked, best->index);
|
||||
|
||||
c->bankrupt_timeout = TAKE_OVER_TIMEOUT;
|
||||
if (IsInteractiveCompany(best->index)) {
|
||||
c->bankrupt_timeout = TAKE_OVER_TIMEOUT;
|
||||
ShowBuyCompanyDialog(c->index);
|
||||
return;
|
||||
}
|
||||
|
||||
if (best->is_ai) {
|
||||
AI::NewEvent(best->index, new AIEventCompanyAskMerger(c->index, ClampToI32(c->bankrupt_value)));
|
||||
} else if (IsInteractiveCompany(best->index)) {
|
||||
ShowBuyCompanyDialog(c->index);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -895,11 +895,14 @@ CommandCost CmdSetCompanyManagerFace(TileIndex tile, DoCommandFlag flags, uint32
|
||||
*/
|
||||
CommandCost CmdSetCompanyColour(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||
{
|
||||
Colours colour = Extract<Colours, 0, 4>(p2);
|
||||
LiveryScheme scheme = Extract<LiveryScheme, 0, 8>(p1);
|
||||
if (p2 >= 16) return CMD_ERROR; // max 16 colours
|
||||
|
||||
Colours colour = (Colours)p2;
|
||||
|
||||
LiveryScheme scheme = (LiveryScheme)GB(p1, 0, 8);
|
||||
byte state = GB(p1, 8, 2);
|
||||
|
||||
if (scheme >= LS_END || state >= 3 || colour == INVALID_COLOUR) return CMD_ERROR;
|
||||
if (scheme >= LS_END || state >= 3) return CMD_ERROR;
|
||||
|
||||
Company *c = Company::Get(_current_company);
|
||||
|
||||
@@ -960,13 +963,6 @@ CommandCost CmdSetCompanyColour(TileIndex tile, DoCommandFlag flags, uint32 p1,
|
||||
ResetVehicleColourMap();
|
||||
MarkWholeScreenDirty();
|
||||
|
||||
/* All graph related to companies use the company colour. */
|
||||
InvalidateWindowData(WC_INCOME_GRAPH, 0);
|
||||
InvalidateWindowData(WC_OPERATING_PROFIT, 0);
|
||||
InvalidateWindowData(WC_DELIVERED_CARGO, 0);
|
||||
InvalidateWindowData(WC_PERFORMANCE_HISTORY, 0);
|
||||
InvalidateWindowData(WC_COMPANY_VALUE, 0);
|
||||
|
||||
/* Company colour data is indirectly cached. */
|
||||
Vehicle *v;
|
||||
FOR_ALL_VEHICLES(v) {
|
||||
|
@@ -1984,7 +1984,7 @@ struct CompanyWindow : Window
|
||||
MarkWholeScreenDirty();
|
||||
} else if (NetworkCompanyIsPassworded(company)) {
|
||||
/* ask for the password */
|
||||
ShowQueryString(STR_EMPTY, STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION, NETWORK_PASSWORD_LENGTH, 180, this, CS_ALPHANUMERAL, QSF_NONE);
|
||||
ShowQueryString(STR_EMPTY, STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION, 20, 180, this, CS_ALPHANUMERAL, QSF_NONE);
|
||||
} else {
|
||||
/* just send the join command */
|
||||
NetworkClientRequestMove(company);
|
||||
|
@@ -437,10 +437,6 @@ void IConsoleCmdExec(const char *cmdstr)
|
||||
break;
|
||||
case '"': // Tokens enclosed in "" are one token
|
||||
longtoken = !longtoken;
|
||||
if (!foundtoken) {
|
||||
tokens[t_index++] = &tokenstream[tstream_i];
|
||||
foundtoken = true;
|
||||
}
|
||||
break;
|
||||
case '\\': // Escape character for ""
|
||||
if (cmdptr[1] == '"' && tstream_i + 1 < lengthof(tokenstream)) {
|
||||
|
@@ -252,18 +252,7 @@ static const FiosItem *GetFiosItem(const char *file)
|
||||
int i = strtol(file, &endptr, 10);
|
||||
if (file == endptr || *endptr != '\0') i = -1;
|
||||
|
||||
if (IsInsideMM(i, 0, _fios_items.Length())) return _fios_items.Get(i);
|
||||
|
||||
/* As a last effort assume it is an OpenTTD savegame and
|
||||
* that the ".sav" part was not given. */
|
||||
char long_file[MAX_PATH];
|
||||
seprintf(long_file, lastof(long_file), "%s.sav", file);
|
||||
for (const FiosItem *item = _fios_items.Begin(); item != _fios_items.End(); item++) {
|
||||
if (strcmp(long_file, item->name) == 0) return item;
|
||||
if (strcmp(long_file, item->title) == 0) return item;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
return IsInsideMM(i, 0, _fios_items.Length()) ? _fios_items.Get(i) : NULL;
|
||||
}
|
||||
|
||||
|
||||
@@ -402,59 +391,12 @@ DEF_CONSOLE_CMD(ConClearBuffer)
|
||||
**********************************/
|
||||
#ifdef ENABLE_NETWORK
|
||||
|
||||
static bool ConKickOrBan(const char *argv, bool ban)
|
||||
{
|
||||
const char *ip = argv;
|
||||
|
||||
if (strchr(argv, '.') == NULL && strchr(argv, ':') == NULL) { // banning with ID
|
||||
ClientID client_id = (ClientID)atoi(argv);
|
||||
|
||||
if (client_id == CLIENT_ID_SERVER) {
|
||||
IConsolePrintF(CC_ERROR, "ERROR: Silly boy, you can not %s yourself!", ban ? "ban" : "kick");
|
||||
return true;
|
||||
}
|
||||
|
||||
NetworkClientInfo *ci = NetworkFindClientInfoFromClientID(client_id);
|
||||
if (ci == NULL) {
|
||||
IConsoleError("Invalid client");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!ban) {
|
||||
/* Kick only this client, not all clients with that IP */
|
||||
NetworkServerKickClient(client_id);
|
||||
return true;
|
||||
}
|
||||
|
||||
/* When banning, kick+ban all clients with that IP */
|
||||
ip = GetClientIP(ci);
|
||||
}
|
||||
|
||||
uint n = NetworkServerKickOrBanIP(ip, ban);
|
||||
if (n == 0) {
|
||||
IConsolePrint(CC_DEFAULT, ban ? "Client not online, address added to banlist" : "Client not found");
|
||||
} else {
|
||||
IConsolePrintF(CC_DEFAULT, "%sed %u client(s)", ban ? "Bann" : "Kick", n);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
DEF_CONSOLE_CMD(ConKick)
|
||||
{
|
||||
if (argc == 0) {
|
||||
IConsoleHelp("Kick a client from a network game. Usage: 'kick <ip | client-id>'");
|
||||
IConsoleHelp("For client-id's, see the command 'clients'");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (argc != 2) return false;
|
||||
|
||||
return ConKickOrBan(argv[1], false);
|
||||
}
|
||||
|
||||
DEF_CONSOLE_CMD(ConBan)
|
||||
{
|
||||
NetworkClientInfo *ci;
|
||||
const char *banip = NULL;
|
||||
ClientID client_id;
|
||||
|
||||
if (argc == 0) {
|
||||
IConsoleHelp("Ban a client from a network game. Usage: 'ban <ip | client-id>'");
|
||||
IConsoleHelp("For client-id's, see the command 'clients'");
|
||||
@@ -464,7 +406,39 @@ DEF_CONSOLE_CMD(ConBan)
|
||||
|
||||
if (argc != 2) return false;
|
||||
|
||||
return ConKickOrBan(argv[1], true);
|
||||
if (strchr(argv[1], '.') == NULL && strchr(argv[1], ':') == NULL) { // banning with ID
|
||||
client_id = (ClientID)atoi(argv[1]);
|
||||
ci = NetworkFindClientInfoFromClientID(client_id);
|
||||
} else { // banning IP
|
||||
ci = NetworkFindClientInfoFromIP(argv[1]);
|
||||
if (ci == NULL) {
|
||||
banip = argv[1];
|
||||
client_id = (ClientID)-1;
|
||||
} else {
|
||||
client_id = ci->client_id;
|
||||
}
|
||||
}
|
||||
|
||||
if (client_id == CLIENT_ID_SERVER) {
|
||||
IConsoleError("Silly boy, you can not ban yourself!");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (client_id == INVALID_CLIENT_ID || (ci == NULL && client_id != (ClientID)-1)) {
|
||||
IConsoleError("Invalid client");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (ci != NULL) {
|
||||
IConsolePrint(CC_DEFAULT, "Client banned");
|
||||
banip = GetClientIP(ci);
|
||||
} else {
|
||||
IConsolePrint(CC_DEFAULT, "Client not online, banned IP");
|
||||
}
|
||||
|
||||
NetworkServerBanIP(banip);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
DEF_CONSOLE_CMD(ConUnBan)
|
||||
@@ -621,6 +595,46 @@ DEF_CONSOLE_CMD(ConClientNickChange)
|
||||
return true;
|
||||
}
|
||||
|
||||
DEF_CONSOLE_CMD(ConKick)
|
||||
{
|
||||
NetworkClientInfo *ci;
|
||||
ClientID client_id;
|
||||
|
||||
if (argc == 0) {
|
||||
IConsoleHelp("Kick a client from a network game. Usage: 'kick <ip | client-id>'");
|
||||
IConsoleHelp("For client-id's, see the command 'clients'");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (argc != 2) return false;
|
||||
|
||||
if (strchr(argv[1], '.') == NULL) {
|
||||
client_id = (ClientID)atoi(argv[1]);
|
||||
ci = NetworkFindClientInfoFromClientID(client_id);
|
||||
} else {
|
||||
ci = NetworkFindClientInfoFromIP(argv[1]);
|
||||
client_id = (ci == NULL) ? INVALID_CLIENT_ID : ci->client_id;
|
||||
}
|
||||
|
||||
if (client_id == CLIENT_ID_SERVER) {
|
||||
IConsoleError("Silly boy, you can not kick yourself!");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (client_id == INVALID_CLIENT_ID) {
|
||||
IConsoleError("Invalid client");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (ci != NULL) {
|
||||
NetworkServerKickClient(client_id);
|
||||
} else {
|
||||
IConsoleError("Client not found");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
DEF_CONSOLE_CMD(ConJoinCompany)
|
||||
{
|
||||
if (argc < 2) {
|
||||
@@ -800,7 +814,7 @@ DEF_CONSOLE_CMD(ConNetworkConnect)
|
||||
{
|
||||
if (argc == 0) {
|
||||
IConsoleHelp("Connect to a remote OTTD server and join the game. Usage: 'connect <ip>'");
|
||||
IConsoleHelp("IP can contain port and company: 'IP[:Port][#Company]', eg: 'server.ottd.org:443#2'");
|
||||
IConsoleHelp("IP can contain port and company: 'IP[[#Company]:Port]', eg: 'server.ottd.org#2:443'");
|
||||
IConsoleHelp("Company #255 is spectator all others are a certain company with Company 1 being #1");
|
||||
return true;
|
||||
}
|
||||
@@ -975,7 +989,7 @@ DEF_CONSOLE_CMD(ConRestart)
|
||||
/* Don't copy the _newgame pointers to the real pointers, so call SwitchToMode directly */
|
||||
_settings_game.game_creation.map_x = MapLogX();
|
||||
_settings_game.game_creation.map_y = FindFirstBit(MapSizeY());
|
||||
_switch_mode = SM_RESTARTGAME;
|
||||
SwitchToMode(SM_RESTARTGAME);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@@ -58,16 +58,14 @@ template <typename Tenum_t> struct EnumPropsT;
|
||||
* @param Tbegin first valid value from the contiguous range (i.e. TRACK_BEGIN)
|
||||
* @param Tend one past the last valid value from the contiguous range (i.e. TRACK_END)
|
||||
* @param Tinvalid value used as invalid value marker (i.e. INVALID_TRACK)
|
||||
* @param Tnum_bits Number of bits for storing the enum in command parameters
|
||||
*/
|
||||
template <typename Tenum_t, typename Tstorage_t, Tenum_t Tbegin, Tenum_t Tend, Tenum_t Tinvalid, uint Tnum_bits = 8 * sizeof(Tstorage_t)>
|
||||
template <typename Tenum_t, typename Tstorage_t, Tenum_t Tbegin, Tenum_t Tend, Tenum_t Tinvalid>
|
||||
struct MakeEnumPropsT {
|
||||
typedef Tenum_t type; ///< enum type (i.e. Trackdir)
|
||||
typedef Tstorage_t storage; ///< storage type (i.e. byte)
|
||||
static const Tenum_t begin = Tbegin; ///< lowest valid value (i.e. TRACKDIR_BEGIN)
|
||||
static const Tenum_t end = Tend; ///< one after the last valid value (i.e. TRACKDIR_END)
|
||||
static const Tenum_t invalid = Tinvalid; ///< what value is used as invalid value (i.e. INVALID_TRACKDIR)
|
||||
static const uint num_bits = Tnum_bits; ///< Number of bits for storing the enum in command parameters
|
||||
};
|
||||
|
||||
|
||||
|
@@ -24,9 +24,9 @@ uint32 Randomizer::Next()
|
||||
return this->state[1] = ROR(s, 3) - 1;
|
||||
}
|
||||
|
||||
uint32 Randomizer::Next(uint32 max)
|
||||
uint32 Randomizer::Next(uint16 max)
|
||||
{
|
||||
return ((uint64)this->Next() * (uint64)max) >> 32;
|
||||
return GB(this->Next(), 0, 16) * max >> 16;
|
||||
}
|
||||
|
||||
void Randomizer::SetSeed(uint32 seed)
|
||||
@@ -55,8 +55,8 @@ uint32 DoRandom(int line, const char *file)
|
||||
return _random.Next();
|
||||
}
|
||||
|
||||
uint32 DoRandomRange(uint32 max, int line, const char *file)
|
||||
uint DoRandomRange(uint max, int line, const char *file)
|
||||
{
|
||||
return ((uint64)DoRandom(line, file) * (uint64)max) >> 32;
|
||||
return GB(DoRandom(line, file), 0, 16) * max >> 16;
|
||||
}
|
||||
#endif /* RANDOM_DEBUG */
|
||||
|
@@ -48,7 +48,7 @@ struct Randomizer {
|
||||
* @param max the maximum value of the returned random number
|
||||
* @return the random number
|
||||
*/
|
||||
uint32 Next(uint32 max);
|
||||
uint32 Next(uint16 max);
|
||||
|
||||
/**
|
||||
* (Re)set the state of the random number generator.
|
||||
@@ -92,14 +92,14 @@ void SetRandomSeed(uint32 seed);
|
||||
#endif
|
||||
uint32 DoRandom(int line, const char *file);
|
||||
#define RandomRange(max) DoRandomRange(max, __LINE__, __FILE__)
|
||||
uint32 DoRandomRange(uint32 max, int line, const char *file);
|
||||
uint DoRandomRange(uint max, int line, const char *file);
|
||||
#else
|
||||
static FORCEINLINE uint32 Random()
|
||||
{
|
||||
return _random.Next();
|
||||
}
|
||||
|
||||
static FORCEINLINE uint32 RandomRange(uint32 max)
|
||||
static FORCEINLINE uint32 RandomRange(uint16 max)
|
||||
{
|
||||
return _random.Next(max);
|
||||
}
|
||||
@@ -110,7 +110,7 @@ static FORCEINLINE uint32 InteractiveRandom()
|
||||
return _interactive_random.Next();
|
||||
}
|
||||
|
||||
static FORCEINLINE uint32 InteractiveRandomRange(uint32 max)
|
||||
static FORCEINLINE uint32 InteractiveRandomRange(uint16 max)
|
||||
{
|
||||
return _interactive_random.Next(max);
|
||||
}
|
||||
|
@@ -109,25 +109,22 @@ char *CrashLog::LogConfiguration(char *buffer, const char *last) const
|
||||
buffer += seprintf(buffer, last,
|
||||
"Configuration:\n"
|
||||
" Blitter: %s\n"
|
||||
" Graphics set: %s (%d)\n"
|
||||
" Graphics set: %s\n"
|
||||
" Language: %s\n"
|
||||
" Music driver: %s\n"
|
||||
" Music set: %s (%d)\n"
|
||||
" Music set: %s\n"
|
||||
" Network: %s\n"
|
||||
" Sound driver: %s\n"
|
||||
" Sound set: %s (%d)\n"
|
||||
" Sound set: %s\n"
|
||||
" Video driver: %s\n\n",
|
||||
BlitterFactoryBase::GetCurrentBlitter() == NULL ? "none" : BlitterFactoryBase::GetCurrentBlitter()->GetName(),
|
||||
BaseGraphics::GetUsedSet() == NULL ? "none" : BaseGraphics::GetUsedSet()->name,
|
||||
BaseGraphics::GetUsedSet() == NULL ? -1 : BaseGraphics::GetUsedSet()->version,
|
||||
StrEmpty(_dynlang.curr_file) ? "none" : _dynlang.curr_file,
|
||||
_music_driver == NULL ? "none" : _music_driver->GetName(),
|
||||
BaseMusic::GetUsedSet() == NULL ? "none" : BaseMusic::GetUsedSet()->name,
|
||||
BaseMusic::GetUsedSet() == NULL ? -1 : BaseMusic::GetUsedSet()->version,
|
||||
_networking ? (_network_server ? "server" : "client") : "no",
|
||||
_sound_driver == NULL ? "none" : _sound_driver->GetName(),
|
||||
BaseSounds::GetUsedSet() == NULL ? "none" : BaseSounds::GetUsedSet()->name,
|
||||
BaseSounds::GetUsedSet() == NULL ? -1 : BaseSounds::GetUsedSet()->version,
|
||||
_video_driver == NULL ? "none" : _video_driver->GetName()
|
||||
);
|
||||
|
||||
|
@@ -14,44 +14,43 @@
|
||||
#include "news_func.h"
|
||||
#include "settings_type.h"
|
||||
#include "date_func.h"
|
||||
#include "string_type.h"
|
||||
|
||||
#include "table/strings.h"
|
||||
|
||||
/* exchange rate prefix symbol_pos
|
||||
* | separator | postfix |
|
||||
* | | Euro year | | | name
|
||||
* | | | | | | | */
|
||||
/* exchange rate prefix symbol_pos
|
||||
* | separator | postfix |
|
||||
* | | Euro year | | | name
|
||||
* | | | | | | | */
|
||||
static const CurrencySpec origin_currency_specs[NUM_CURRENCY] = {
|
||||
{ 1, "", CF_NOEURO, "\xC2\xA3", "", 0, STR_GAME_OPTIONS_CURRENCY_GBP }, ///< british pounds
|
||||
{ 2, "", CF_NOEURO, "$", "", 0, STR_GAME_OPTIONS_CURRENCY_USD }, ///< us dollars
|
||||
{ 2, "", CF_ISEURO, "\xE2\x82\xAC", "", 0, STR_GAME_OPTIONS_CURRENCY_EUR }, ///< Euro
|
||||
{ 220, "", CF_NOEURO, "\xC2\xA5", "", 0, STR_GAME_OPTIONS_CURRENCY_YEN }, ///< yen
|
||||
{ 20, "", 2002, "", NBSP"S.", 1, STR_GAME_OPTIONS_CURRENCY_ATS }, ///< austrian schilling
|
||||
{ 59, "", 2002, "BEF"NBSP, "", 0, STR_GAME_OPTIONS_CURRENCY_BEF }, ///< belgian franc
|
||||
{ 2, "", CF_NOEURO, "CHF"NBSP, "", 0, STR_GAME_OPTIONS_CURRENCY_CHF }, ///< swiss franc
|
||||
{ 41, "", CF_NOEURO, "", NBSP"K\xC4\x8D", 1, STR_GAME_OPTIONS_CURRENCY_CZK }, ///< czech koruna
|
||||
{ 3, "", 2002, "DM"NBSP, "", 0, STR_GAME_OPTIONS_CURRENCY_DEM }, ///< deutsche mark
|
||||
{ 11, "", CF_NOEURO, "", NBSP"kr", 1, STR_GAME_OPTIONS_CURRENCY_DKK }, ///< danish krone
|
||||
{ 245, "", 2002, "Pts"NBSP, "", 0, STR_GAME_OPTIONS_CURRENCY_ESP }, ///< spanish pesetas
|
||||
{ 9, "", 2002, "", NBSP"mk", 1, STR_GAME_OPTIONS_CURRENCY_FIM }, ///< finnish markka
|
||||
{ 10, "", 2002, "FF"NBSP, "", 0, STR_GAME_OPTIONS_CURRENCY_FRF }, ///< french francs
|
||||
{ 500, "", 2002, "", "Dr.", 1, STR_GAME_OPTIONS_CURRENCY_GRD }, ///< greek drachma
|
||||
{ 378, "", CF_NOEURO, "", NBSP"Ft", 1, STR_GAME_OPTIONS_CURRENCY_HUF }, ///< hungarian forint
|
||||
{ 130, "", CF_NOEURO, "", NBSP"Kr", 1, STR_GAME_OPTIONS_CURRENCY_ISK }, ///< icelandic krona
|
||||
{ 2850, "", 2002, "", NBSP"L.", 1, STR_GAME_OPTIONS_CURRENCY_ITL }, ///< italian lira
|
||||
{ 3, "", 2002, "NLG"NBSP, "", 0, STR_GAME_OPTIONS_CURRENCY_NLG }, ///< dutch gulden
|
||||
{ 12, "", CF_NOEURO, "", NBSP"Kr", 1, STR_GAME_OPTIONS_CURRENCY_NOK }, ///< norwegian krone
|
||||
{ 6, "", CF_NOEURO, "", NBSP"z\xC5\x82", 1, STR_GAME_OPTIONS_CURRENCY_PLN }, ///< polish zloty
|
||||
{ 5, "", CF_NOEURO, "", NBSP"Lei", 1, STR_GAME_OPTIONS_CURRENCY_RON }, ///< romanian Lei
|
||||
{ 50, "", CF_NOEURO, "", NBSP"p", 1, STR_GAME_OPTIONS_CURRENCY_RUR }, ///< russian rouble
|
||||
{ 352, "", 2007, "", NBSP"SIT", 1, STR_GAME_OPTIONS_CURRENCY_SIT }, ///< slovenian tolar
|
||||
{ 13, "", CF_NOEURO, "", NBSP"Kr", 1, STR_GAME_OPTIONS_CURRENCY_SEK }, ///< swedish krona
|
||||
{ 3, "", CF_NOEURO, "", NBSP"TL", 1, STR_GAME_OPTIONS_CURRENCY_TRY }, ///< turkish lira
|
||||
{ 52, "", 2009, "", NBSP"Sk", 1, STR_GAME_OPTIONS_CURRENCY_SKK }, ///< slovak koruna
|
||||
{ 4, "", CF_NOEURO, "R$"NBSP, "", 0, STR_GAME_OPTIONS_CURRENCY_BRL }, ///< brazil real
|
||||
{ 20, "", CF_NOEURO, "", NBSP"EEK", 1, STR_GAME_OPTIONS_CURRENCY_EEK }, ///< estonian krooni
|
||||
{ 1, "", CF_NOEURO, "", "", 2, STR_GAME_OPTIONS_CURRENCY_CUSTOM }, ///< custom currency
|
||||
{ 1, "", CF_NOEURO, "\xC2\xA3", "", 0, STR_GAME_OPTIONS_CURRENCY_GBP }, ///< british pounds
|
||||
{ 2, "", CF_NOEURO, "$", "", 0, STR_GAME_OPTIONS_CURRENCY_USD }, ///< us dollars
|
||||
{ 2, "", CF_ISEURO, "\xE2\x82\xAC", "", 0, STR_GAME_OPTIONS_CURRENCY_EUR }, ///< Euro
|
||||
{ 220, "", CF_NOEURO, "\xC2\xA5", "", 0, STR_GAME_OPTIONS_CURRENCY_YEN }, ///< yen
|
||||
{ 20, "", 2002, "", " S.", 1, STR_GAME_OPTIONS_CURRENCY_ATS }, ///< austrian schilling
|
||||
{ 59, "", 2002, "BEF ", "", 0, STR_GAME_OPTIONS_CURRENCY_BEF }, ///< belgian franc
|
||||
{ 2, "", CF_NOEURO, "CHF ", "", 0, STR_GAME_OPTIONS_CURRENCY_CHF }, ///< swiss franc
|
||||
{ 41, "", CF_NOEURO, "", " K\xC4\x8D", 1, STR_GAME_OPTIONS_CURRENCY_CZK }, ///< czech koruna
|
||||
{ 3, "", 2002, "DM ", "", 0, STR_GAME_OPTIONS_CURRENCY_DEM }, ///< deutsche mark
|
||||
{ 11, "", CF_NOEURO, "", " kr", 1, STR_GAME_OPTIONS_CURRENCY_DKK }, ///< danish krone
|
||||
{ 245, "", 2002, "Pts ", "", 0, STR_GAME_OPTIONS_CURRENCY_ESP }, ///< spanish pesetas
|
||||
{ 9, "", 2002, "", " mk", 1, STR_GAME_OPTIONS_CURRENCY_FIM }, ///< finnish markka
|
||||
{ 10, "", 2002, "FF ", "", 0, STR_GAME_OPTIONS_CURRENCY_FRF }, ///< french francs
|
||||
{ 500, "", 2002, "", "Dr.", 1, STR_GAME_OPTIONS_CURRENCY_GRD }, ///< greek drachma
|
||||
{ 378, "", CF_NOEURO, "", " Ft", 1, STR_GAME_OPTIONS_CURRENCY_HUF }, ///< hungarian forint
|
||||
{ 130, "", CF_NOEURO, "", " Kr", 1, STR_GAME_OPTIONS_CURRENCY_ISK }, ///< icelandic krona
|
||||
{ 2850, "", 2002, "", " L.", 1, STR_GAME_OPTIONS_CURRENCY_ITL }, ///< italian lira
|
||||
{ 3, "", 2002, "NLG ", "", 0, STR_GAME_OPTIONS_CURRENCY_NLG }, ///< dutch gulden
|
||||
{ 12, "", CF_NOEURO, "", " Kr", 1, STR_GAME_OPTIONS_CURRENCY_NOK }, ///< norwegian krone
|
||||
{ 6, "", CF_NOEURO, "", " z\xC5\x82", 1, STR_GAME_OPTIONS_CURRENCY_PLN }, ///< polish zloty
|
||||
{ 5, "", CF_NOEURO, "", " Lei", 1, STR_GAME_OPTIONS_CURRENCY_RON }, ///< romanian Lei
|
||||
{ 50, "", CF_NOEURO, "", " p", 1, STR_GAME_OPTIONS_CURRENCY_RUR }, ///< russian rouble
|
||||
{ 352, "", 2007, "", " SIT", 1, STR_GAME_OPTIONS_CURRENCY_SIT }, ///< slovenian tolar
|
||||
{ 13, "", CF_NOEURO, "", " Kr", 1, STR_GAME_OPTIONS_CURRENCY_SEK }, ///< swedish krona
|
||||
{ 3, "", CF_NOEURO, "", " TL", 1, STR_GAME_OPTIONS_CURRENCY_TRY }, ///< turkish lira
|
||||
{ 52, "", 2009, "", " Sk", 1, STR_GAME_OPTIONS_CURRENCY_SKK }, ///< slovak koruna
|
||||
{ 4, "", CF_NOEURO, "R$ ", "", 0, STR_GAME_OPTIONS_CURRENCY_BRL }, ///< brazil real
|
||||
{ 20, "", CF_NOEURO, "", " EEK", 1, STR_GAME_OPTIONS_CURRENCY_EEK }, ///< estonian krooni
|
||||
{ 1, "", CF_NOEURO, "", "", 2, STR_GAME_OPTIONS_CURRENCY_CUSTOM }, ///< custom currency
|
||||
};
|
||||
|
||||
/* Array of currencies used by the system */
|
||||
|
@@ -218,6 +218,12 @@ static void OnNewYear()
|
||||
*/
|
||||
static void OnNewMonth()
|
||||
{
|
||||
if (_debug_desync_level > 2) {
|
||||
char name[MAX_PATH];
|
||||
snprintf(name, lengthof(name), "dmp_cmds_%08x_%08x.sav", _settings_game.game_creation.generation_seed, _date);
|
||||
SaveOrLoad(name, SL_SAVE, AUTOSAVE_DIR);
|
||||
}
|
||||
|
||||
if (_settings_client.gui.autosave != 0 && (_cur_month % _autosave_months[_settings_client.gui.autosave]) == 0) {
|
||||
_do_autosave = true;
|
||||
RedrawAutosave();
|
||||
|
@@ -93,7 +93,7 @@ static void debug_print(const char *dbg, const char *buf)
|
||||
static FILE *f = FioFOpenFile("commands-out.log", "wb", AUTOSAVE_DIR);
|
||||
if (f == NULL) return;
|
||||
|
||||
fprintf(f, "%s%s\n", GetLogPrefix(), buf);
|
||||
fprintf(f, "%s%s", GetLogPrefix(), buf);
|
||||
fflush(f);
|
||||
}
|
||||
}
|
||||
|
@@ -41,7 +41,7 @@ enum Direction {
|
||||
DECLARE_POSTFIX_INCREMENT(Direction);
|
||||
|
||||
/** Define basic enum properties */
|
||||
template <> struct EnumPropsT<Direction> : MakeEnumPropsT<Direction, byte, DIR_BEGIN, DIR_END, INVALID_DIR, 3> {};
|
||||
template <> struct EnumPropsT<Direction> : MakeEnumPropsT<Direction, byte, DIR_BEGIN, DIR_END, INVALID_DIR> {};
|
||||
typedef TinyEnumT<Direction> DirectionByte; // typedefing-enumification of Direction
|
||||
|
||||
|
||||
@@ -91,7 +91,7 @@ enum DiagDirection {
|
||||
DECLARE_POSTFIX_INCREMENT(DiagDirection);
|
||||
|
||||
/** Define basic enum properties */
|
||||
template <> struct EnumPropsT<DiagDirection> : MakeEnumPropsT<DiagDirection, byte, DIAGDIR_BEGIN, DIAGDIR_END, INVALID_DIAGDIR, 2> {};
|
||||
template <> struct EnumPropsT<DiagDirection> : MakeEnumPropsT<DiagDirection, byte, DIAGDIR_BEGIN, DIAGDIR_END, INVALID_DIAGDIR> {};
|
||||
typedef TinyEnumT<DiagDirection> DiagDirectionByte; // typedefing-enumification of DiagDirection
|
||||
|
||||
|
||||
@@ -130,6 +130,5 @@ enum Axis {
|
||||
AXIS_END, ///< Used for iterations
|
||||
INVALID_AXIS = 0xFF, ///< Flag for an invalid Axis
|
||||
};
|
||||
template <> struct EnumPropsT<Axis> : MakeEnumPropsT<Axis, byte, AXIS_X, AXIS_END, INVALID_AXIS, 1> {};
|
||||
|
||||
#endif /* DIRECTION_TYPE_H */
|
||||
|
@@ -297,11 +297,6 @@ int UpdateCompanyRatingAndValue(Company *c, bool update)
|
||||
/* use INVALID_OWNER as new_owner to delete the company. */
|
||||
void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner)
|
||||
{
|
||||
#ifdef ENABLE_NETWORK
|
||||
/* In all cases, make spectators of clients connected to that company */
|
||||
if (_networking) NetworkClientsToSpectators(old_owner);
|
||||
#endif /* ENABLE_NETWORK */
|
||||
|
||||
Town *t;
|
||||
CompanyID old = _current_company;
|
||||
|
||||
@@ -476,6 +471,21 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner)
|
||||
MarkWholeScreenDirty();
|
||||
}
|
||||
|
||||
static void ChangeNetworkOwner(Owner current_owner, Owner new_owner)
|
||||
{
|
||||
#ifdef ENABLE_NETWORK
|
||||
if (!_networking) return;
|
||||
|
||||
if (current_owner == _local_company) {
|
||||
SetLocalCompany(new_owner);
|
||||
}
|
||||
|
||||
if (!_network_server) return;
|
||||
|
||||
NetworkServerChangeOwner(current_owner, new_owner);
|
||||
#endif /* ENABLE_NETWORK */
|
||||
}
|
||||
|
||||
static void CompanyCheckBankrupt(Company *c)
|
||||
{
|
||||
/* If the company has money again, it does not go bankrupt */
|
||||
@@ -537,6 +547,8 @@ static void CompanyCheckBankrupt(Company *c)
|
||||
SetDParamStr(2, cni->company_name);
|
||||
AddCompanyNewsItem(STR_MESSAGE_NEWS_FORMAT, NS_COMPANY_BANKRUPT, cni);
|
||||
|
||||
/* Remove the company */
|
||||
ChangeNetworkOwner(c->index, COMPANY_SPECTATOR);
|
||||
ChangeOwnershipOfCompanyItems(c->index, INVALID_OWNER);
|
||||
|
||||
if (c->is_ai) AI::Stop(c->index);
|
||||
@@ -1447,6 +1459,8 @@ static void DoAcquireCompany(Company *c)
|
||||
AddCompanyNewsItem(STR_MESSAGE_NEWS_FORMAT, NS_COMPANY_MERGER, cni);
|
||||
AI::BroadcastNewEvent(new AIEventCompanyMerger(ci, _current_company));
|
||||
|
||||
/* original code does this a little bit differently */
|
||||
ChangeNetworkOwner(ci, _current_company);
|
||||
ChangeOwnershipOfCompanyItems(ci, _current_company);
|
||||
|
||||
if (c->bankrupt_value == 0) {
|
||||
@@ -1488,12 +1502,12 @@ extern int GetAmountOwnedBy(const Company *c, Owner owner);
|
||||
CommandCost CmdBuyShareInCompany(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||
{
|
||||
CommandCost cost(EXPENSES_OTHER);
|
||||
CompanyID target_company = (CompanyID)p1;
|
||||
Company *c = Company::GetIfValid(target_company);
|
||||
|
||||
Company *c = Company::GetIfValid(p1);
|
||||
|
||||
/* Check if buying shares is allowed (protection against modified clients)
|
||||
* Cannot buy own shares */
|
||||
if (c == NULL || !_settings_game.economy.allow_shares || _current_company == target_company) return CMD_ERROR;
|
||||
if (c == NULL || !_settings_game.economy.allow_shares || _current_company == (CompanyID)p1) return CMD_ERROR;
|
||||
|
||||
/* Protect new companies from hostile takeovers */
|
||||
if (_cur_year - c->inaugurated_year < 6) return_cmd_error(STR_ERROR_PROTECTED);
|
||||
@@ -1519,7 +1533,7 @@ CommandCost CmdBuyShareInCompany(TileIndex tile, DoCommandFlag flags, uint32 p1,
|
||||
break;
|
||||
}
|
||||
}
|
||||
SetWindowDirty(WC_COMPANY, target_company);
|
||||
SetWindowDirty(WC_COMPANY, p1);
|
||||
}
|
||||
return cost;
|
||||
}
|
||||
@@ -1534,12 +1548,11 @@ CommandCost CmdBuyShareInCompany(TileIndex tile, DoCommandFlag flags, uint32 p1,
|
||||
*/
|
||||
CommandCost CmdSellShareInCompany(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||
{
|
||||
CompanyID target_company = (CompanyID)p1;
|
||||
Company *c = Company::GetIfValid(target_company);
|
||||
Company *c = Company::GetIfValid(p1);
|
||||
|
||||
/* Check if selling shares is allowed (protection against modified clients)
|
||||
* Cannot sell own shares */
|
||||
if (c == NULL || !_settings_game.economy.allow_shares || _current_company == target_company) return CMD_ERROR;
|
||||
if (c == NULL || !_settings_game.economy.allow_shares || _current_company == (CompanyID)p1) return CMD_ERROR;
|
||||
|
||||
/* Those lines are here for network-protection (clients can be slow) */
|
||||
if (GetAmountOwnedBy(c, _current_company) == 0) return CommandCost();
|
||||
@@ -1552,7 +1565,7 @@ CommandCost CmdSellShareInCompany(TileIndex tile, DoCommandFlag flags, uint32 p1
|
||||
OwnerByte *b = c->share_owners;
|
||||
while (*b != _current_company) b++; // share owners is guaranteed to contain company
|
||||
*b = COMPANY_SPECTATOR;
|
||||
SetWindowDirty(WC_COMPANY, target_company);
|
||||
SetWindowDirty(WC_COMPANY, p1);
|
||||
}
|
||||
return CommandCost(EXPENSES_OTHER, cost);
|
||||
}
|
||||
@@ -1570,8 +1583,7 @@ CommandCost CmdSellShareInCompany(TileIndex tile, DoCommandFlag flags, uint32 p1
|
||||
*/
|
||||
CommandCost CmdBuyCompany(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||
{
|
||||
CompanyID target_company = (CompanyID)p1;
|
||||
Company *c = Company::GetIfValid(target_company);
|
||||
Company *c = Company::GetIfValid(p1);
|
||||
if (c == NULL) return CMD_ERROR;
|
||||
|
||||
/* Disable takeovers when not asked */
|
||||
@@ -1581,7 +1593,7 @@ CommandCost CmdBuyCompany(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
|
||||
if (!_networking && _local_company == c->index) return CMD_ERROR;
|
||||
|
||||
/* Do not allow companies to take over themselves */
|
||||
if (target_company == _current_company) return CMD_ERROR;
|
||||
if ((CompanyID)p1 == _current_company) return CMD_ERROR;
|
||||
|
||||
/* Get the cost here as the company is deleted in DoAcquireCompany. */
|
||||
CommandCost cost(EXPENSES_OTHER, c->bankrupt_value);
|
||||
|
@@ -165,20 +165,20 @@ static TrackBits MaskWireBits(TileIndex t, TrackBits tracks)
|
||||
/**
|
||||
* Get the base wire sprite to use.
|
||||
*/
|
||||
static inline SpriteID GetWireBase(TileIndex tile, bool upper_halftile = false)
|
||||
static inline SpriteID GetWireBase(TileIndex tile)
|
||||
{
|
||||
const RailtypeInfo *rti = GetRailTypeInfo(GetRailType(tile));
|
||||
SpriteID wires = GetCustomRailSprite(rti, tile, RTSG_WIRES, upper_halftile);
|
||||
SpriteID wires = GetCustomRailSprite(rti, tile, RTSG_WIRES);
|
||||
return wires == 0 ? SPR_WIRE_BASE : wires;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the base pylon sprite to use.
|
||||
*/
|
||||
static inline SpriteID GetPylonBase(TileIndex tile, bool upper_halftile = false)
|
||||
static inline SpriteID GetPylonBase(TileIndex tile)
|
||||
{
|
||||
const RailtypeInfo *rti = GetRailTypeInfo(GetRailType(tile));
|
||||
SpriteID pylons = GetCustomRailSprite(rti, tile, RTSG_PYLONS, upper_halftile);
|
||||
SpriteID pylons = GetCustomRailSprite(rti, tile, RTSG_PYLONS);
|
||||
return pylons == 0 ? SPR_PYLON_BASE : pylons;
|
||||
}
|
||||
|
||||
@@ -274,11 +274,7 @@ static void DrawCatenaryRailway(const TileInfo *ti)
|
||||
|
||||
/* Half tile slopes coincide only with horizontal/vertical track.
|
||||
* Faking a flat slope results in the correct sprites on positions. */
|
||||
Corner halftile_corner = CORNER_INVALID;
|
||||
if (IsHalftileSlope(tileh[TS_HOME])) {
|
||||
halftile_corner = GetHalftileSlopeCorner(tileh[TS_HOME]);
|
||||
tileh[TS_HOME] = SLOPE_FLAT;
|
||||
}
|
||||
if (IsHalftileSlope(tileh[TS_HOME])) tileh[TS_HOME] = SLOPE_FLAT;
|
||||
|
||||
TLG tlg = GetTLG(ti->tile);
|
||||
byte PCPstatus = 0;
|
||||
@@ -299,17 +295,9 @@ static void DrawCatenaryRailway(const TileInfo *ti)
|
||||
|
||||
AdjustTileh(ti->tile, &tileh[TS_HOME]);
|
||||
|
||||
SpriteID pylon_normal = GetPylonBase(ti->tile);
|
||||
SpriteID pylon_halftile = (halftile_corner != CORNER_INVALID) ? GetPylonBase(ti->tile, true) : pylon_normal;
|
||||
SpriteID pylon_base = GetPylonBase(ti->tile);
|
||||
|
||||
for (DiagDirection i = DIAGDIR_BEGIN; i < DIAGDIR_END; i++) {
|
||||
static const uint edge_corners[] = {
|
||||
1 << CORNER_N | 1 << CORNER_E, // DIAGDIR_NE
|
||||
1 << CORNER_S | 1 << CORNER_E, // DIAGDIR_SE
|
||||
1 << CORNER_S | 1 << CORNER_W, // DIAGDIR_SW
|
||||
1 << CORNER_N | 1 << CORNER_W, // DIAGDIR_NW
|
||||
};
|
||||
SpriteID pylon_base = (halftile_corner != CORNER_INVALID && HasBit(edge_corners[i], halftile_corner)) ? pylon_halftile : pylon_normal;
|
||||
TileIndex neighbour = ti->tile + TileOffsByDiagDir(i);
|
||||
Foundation foundation = FOUNDATION_NONE;
|
||||
byte elevation = GetPCPElevation(ti->tile, i);
|
||||
@@ -438,21 +426,11 @@ static void DrawCatenaryRailway(const TileInfo *ti)
|
||||
if (height <= GetTileMaxZ(ti->tile) + TILE_HEIGHT) return;
|
||||
}
|
||||
|
||||
SpriteID wire_normal = GetWireBase(ti->tile);
|
||||
SpriteID wire_halftile = (halftile_corner != CORNER_INVALID) ? GetWireBase(ti->tile, true) : wire_normal;
|
||||
Track halftile_track;
|
||||
switch (halftile_corner) {
|
||||
case CORNER_W: halftile_track = TRACK_LEFT; break;
|
||||
case CORNER_S: halftile_track = TRACK_LOWER; break;
|
||||
case CORNER_E: halftile_track = TRACK_RIGHT; break;
|
||||
case CORNER_N: halftile_track = TRACK_UPPER; break;
|
||||
default: halftile_track = INVALID_TRACK; break;
|
||||
}
|
||||
SpriteID wire_base = GetWireBase(ti->tile);
|
||||
|
||||
/* Drawing of pylons is finished, now draw the wires */
|
||||
for (Track t = TRACK_BEGIN; t < TRACK_END; t++) {
|
||||
if (HasBit(wireconfig[TS_HOME], t)) {
|
||||
SpriteID wire_base = (t == halftile_track) ? wire_halftile : wire_normal;
|
||||
byte PCPconfig = HasBit(PCPstatus, PCPpositions[t][0]) +
|
||||
(HasBit(PCPstatus, PCPpositions[t][1]) << 1);
|
||||
|
||||
|
@@ -808,8 +808,6 @@ bool IsEngineBuildable(EngineID engine, VehicleType type, CompanyID company)
|
||||
/* check if it's available */
|
||||
if (!HasBit(e->company_avail, company)) return false;
|
||||
|
||||
if (e->info.string_id == STR_NEWGRF_INVALID_ENGINE) return false;
|
||||
|
||||
if (type == VEH_TRAIN) {
|
||||
/* Check if the rail type is available to this company */
|
||||
const Company *c = Company::Get(company);
|
||||
|
136
src/fileio.cpp
136
src/fileio.cpp
@@ -44,7 +44,7 @@ struct Fio {
|
||||
FILE *handles[MAX_FILE_SLOTS]; ///< array of file handles we can have open
|
||||
byte buffer_start[FIO_BUFFER_SIZE]; ///< local buffer when read from file
|
||||
const char *filenames[MAX_FILE_SLOTS]; ///< array of filenames we (should) have open
|
||||
char *shortnames[MAX_FILE_SLOTS]; ///< array of short names for spriteloader's use
|
||||
char *shortnames[MAX_FILE_SLOTS];///< array of short names for spriteloader's use
|
||||
#if defined(LIMITED_FDS)
|
||||
uint open_handles; ///< current amount of open handles
|
||||
uint usage_count[MAX_FILE_SLOTS]; ///< count how many times this file has been opened
|
||||
@@ -53,9 +53,6 @@ struct Fio {
|
||||
|
||||
static Fio _fio;
|
||||
|
||||
/** Whether the working directory should be scanned. */
|
||||
static bool _do_scan_working_directory = true;
|
||||
|
||||
/* Get current position in file */
|
||||
size_t FioGetPos()
|
||||
{
|
||||
@@ -451,21 +448,16 @@ void FioCreateDirectory(const char *name)
|
||||
* It does not add the path separator to zero-sized strings.
|
||||
* @param buf string to append the separator to
|
||||
* @param buflen the length of the buf
|
||||
* @return true iff the operation succeeded
|
||||
*/
|
||||
bool AppendPathSeparator(char *buf, size_t buflen)
|
||||
void AppendPathSeparator(char *buf, size_t buflen)
|
||||
{
|
||||
size_t s = strlen(buf);
|
||||
|
||||
/* Length of string + path separator + '\0' */
|
||||
if (s != 0 && buf[s - 1] != PATHSEPCHAR) {
|
||||
if (s + 2 >= buflen) return false;
|
||||
|
||||
if (s != 0 && buf[s - 1] != PATHSEPCHAR && s + 2 < buflen) {
|
||||
buf[s] = PATHSEPCHAR;
|
||||
buf[s + 1] = '\0';
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -542,18 +534,7 @@ static void SimplifyFileName(char *name)
|
||||
#endif
|
||||
}
|
||||
|
||||
/* static */ uint TarScanner::DoScan() {
|
||||
DEBUG(misc, 1, "Scanning for tars");
|
||||
TarScanner fs;
|
||||
uint num = fs.Scan(".tar", DATA_DIR, false);
|
||||
num += fs.Scan(".tar", AI_DIR, false);
|
||||
num += fs.Scan(".tar", AI_LIBRARY_DIR, false);
|
||||
num += fs.Scan(".tar", SCENARIO_DIR, false);
|
||||
DEBUG(misc, 1, "Scan complete, found %d files", num);
|
||||
return num;
|
||||
}
|
||||
|
||||
bool TarScanner::AddFile(const char *filename, size_t basepath_length)
|
||||
bool TarListAddFile(const char *filename)
|
||||
{
|
||||
/* The TAR-header, repeated for every file */
|
||||
typedef struct TarHeader {
|
||||
@@ -582,11 +563,7 @@ bool TarScanner::AddFile(const char *filename, size_t basepath_length)
|
||||
if (it != _tar_list.end()) return false;
|
||||
|
||||
FILE *f = fopen(filename, "rb");
|
||||
/* Although the file has been found there can be
|
||||
* a number of reasons we cannot open the file.
|
||||
* Most common case is when we simply have not
|
||||
* been given read access. */
|
||||
if (f == NULL) return false;
|
||||
assert(f != NULL);
|
||||
|
||||
const char *dupped_filename = strdup(filename);
|
||||
_tar_list[filename].filename = dupped_filename;
|
||||
@@ -839,6 +816,66 @@ bool ExtractTar(const char *tar_filename)
|
||||
return true;
|
||||
}
|
||||
|
||||
static int ScanPathForTarFiles(const char *path, size_t basepath_length)
|
||||
{
|
||||
extern bool FiosIsValidFile(const char *path, const struct dirent *ent, struct stat *sb);
|
||||
|
||||
uint num = 0;
|
||||
struct stat sb;
|
||||
struct dirent *dirent;
|
||||
DIR *dir;
|
||||
|
||||
if (path == NULL || (dir = ttd_opendir(path)) == NULL) return 0;
|
||||
|
||||
while ((dirent = readdir(dir)) != NULL) {
|
||||
const char *d_name = FS2OTTD(dirent->d_name);
|
||||
char filename[MAX_PATH];
|
||||
|
||||
if (!FiosIsValidFile(path, dirent, &sb)) continue;
|
||||
|
||||
snprintf(filename, lengthof(filename), "%s%s", path, d_name);
|
||||
|
||||
if (S_ISDIR(sb.st_mode)) {
|
||||
/* Directory */
|
||||
if (strcmp(d_name, ".") == 0 || strcmp(d_name, "..") == 0) continue;
|
||||
AppendPathSeparator(filename, lengthof(filename));
|
||||
num += ScanPathForTarFiles(filename, basepath_length);
|
||||
} else if (S_ISREG(sb.st_mode)) {
|
||||
/* File */
|
||||
char *ext = strrchr(filename, '.');
|
||||
|
||||
/* If no extension or extension isn't .tar, skip the file */
|
||||
if (ext == NULL) continue;
|
||||
if (strcasecmp(ext, ".tar") != 0) continue;
|
||||
|
||||
if (TarListAddFile(filename)) num++;
|
||||
}
|
||||
}
|
||||
|
||||
closedir(dir);
|
||||
return num;
|
||||
}
|
||||
|
||||
void ScanForTarFiles()
|
||||
{
|
||||
Searchpath sp;
|
||||
char path[MAX_PATH];
|
||||
uint num = 0;
|
||||
|
||||
DEBUG(misc, 1, "Scanning for tars");
|
||||
FOR_ALL_SEARCHPATHS(sp) {
|
||||
FioAppendDirectory(path, MAX_PATH, sp, DATA_DIR);
|
||||
num += ScanPathForTarFiles(path, strlen(path));
|
||||
FioAppendDirectory(path, MAX_PATH, sp, AI_DIR);
|
||||
num += ScanPathForTarFiles(path, strlen(path));
|
||||
FioAppendDirectory(path, MAX_PATH, sp, AI_LIBRARY_DIR);
|
||||
num += ScanPathForTarFiles(path, strlen(path));
|
||||
FioAppendDirectory(path, MAX_PATH, sp, SCENARIO_DIR);
|
||||
num += ScanPathForTarFiles(path, strlen(path));
|
||||
}
|
||||
DEBUG(misc, 1, "Scan complete, found %d files", num);
|
||||
}
|
||||
|
||||
#if defined(WIN32) || defined(WINCE)
|
||||
/**
|
||||
* Determine the base (personal dir and game data dir) paths
|
||||
@@ -878,33 +915,6 @@ void ChangeWorkingDirectory(const char *exe)
|
||||
#endif /* WITH_COCOA */
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether we should scan the working directory.
|
||||
* It should not be scanned if it's the root or
|
||||
* the home directory as in both cases a big data
|
||||
* directory can cause huge amounts of unrelated
|
||||
* files scanned. Furthermore there are nearly no
|
||||
* use cases for the home/root directory to have
|
||||
* OpenTTD directories.
|
||||
* @return true if it should be scanned.
|
||||
*/
|
||||
bool DoScanWorkingDirectory()
|
||||
{
|
||||
/* No working directory, so nothing to do. */
|
||||
if (_searchpaths[SP_WORKING_DIR] == NULL) return false;
|
||||
|
||||
/* Working directory is root, so do nothing. */
|
||||
if (strcmp(_searchpaths[SP_WORKING_DIR], PATHSEP) == 0) return false;
|
||||
|
||||
/* No personal/home directory, so the working directory won't be that. */
|
||||
if (_searchpaths[SP_PERSONAL_DIR] == NULL) return true;
|
||||
|
||||
char tmp[MAX_PATH];
|
||||
snprintf(tmp, lengthof(tmp), "%s%s", _searchpaths[SP_WORKING_DIR], PERSONAL_DIR);
|
||||
AppendPathSeparator(tmp, MAX_PATH);
|
||||
return strcmp(tmp, _searchpaths[SP_PERSONAL_DIR]) != 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine the base (personal dir and game data dir) paths
|
||||
* @param exe the path to the executable
|
||||
@@ -950,8 +960,6 @@ void DetermineBasePaths(const char *exe)
|
||||
_searchpaths[SP_WORKING_DIR] = strdup(tmp);
|
||||
#endif
|
||||
|
||||
_do_scan_working_directory = DoScanWorkingDirectory();
|
||||
|
||||
/* Change the working directory to that one of the executable */
|
||||
ChangeWorkingDirectory(exe);
|
||||
if (getcwd(tmp, MAX_PATH) == NULL) *tmp = '\0';
|
||||
@@ -992,10 +1000,7 @@ void DeterminePaths(const char *exe)
|
||||
DetermineBasePaths(exe);
|
||||
|
||||
Searchpath sp;
|
||||
FOR_ALL_SEARCHPATHS(sp) {
|
||||
if (sp == SP_WORKING_DIR && !_do_scan_working_directory) continue;
|
||||
DEBUG(misc, 4, "%s added as search path", _searchpaths[sp]);
|
||||
}
|
||||
FOR_ALL_SEARCHPATHS(sp) DEBUG(misc, 4, "%s added as search path", _searchpaths[sp]);
|
||||
|
||||
if (_config_file != NULL) {
|
||||
_personal_dir = strdup(_config_file);
|
||||
@@ -1070,7 +1075,7 @@ void DeterminePaths(const char *exe)
|
||||
}
|
||||
#endif /* ENABLE_NETWORK */
|
||||
|
||||
TarScanner::DoScan();
|
||||
ScanForTarFiles();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1149,7 +1154,7 @@ static uint ScanPath(FileScanner *fs, const char *extension, const char *path, s
|
||||
/* Directory */
|
||||
if (!recursive) continue;
|
||||
if (strcmp(d_name, ".") == 0 || strcmp(d_name, "..") == 0) continue;
|
||||
if (!AppendPathSeparator(filename, lengthof(filename))) continue;
|
||||
AppendPathSeparator(filename, lengthof(filename));
|
||||
num += ScanPath(fs, extension, filename, basepath_length, recursive);
|
||||
} else if (S_ISREG(sb.st_mode)) {
|
||||
/* File */
|
||||
@@ -1211,9 +1216,6 @@ uint FileScanner::Scan(const char *extension, Subdirectory sd, bool tars, bool r
|
||||
uint num = 0;
|
||||
|
||||
FOR_ALL_SEARCHPATHS(sp) {
|
||||
/* Don't search in the working directory */
|
||||
if (sp == SP_WORKING_DIR && !_do_scan_working_directory) continue;
|
||||
|
||||
FioAppendDirectory(path, MAX_PATH, sp, sd);
|
||||
num += ScanPath(this, extension, path, strlen(path), recursive);
|
||||
}
|
||||
@@ -1239,6 +1241,6 @@ uint FileScanner::Scan(const char *extension, const char *directory, bool recurs
|
||||
{
|
||||
char path[MAX_PATH];
|
||||
strecpy(path, directory, lastof(path));
|
||||
if (!AppendPathSeparator(path, lengthof(path))) return 0;
|
||||
AppendPathSeparator(path, lengthof(path));
|
||||
return ScanPath(this, extension, path, strlen(path), recursive);
|
||||
}
|
||||
|
@@ -57,7 +57,7 @@ char *FioAppendDirectory(char *buf, size_t buflen, Searchpath sp, Subdirectory s
|
||||
char *FioGetDirectory(char *buf, size_t buflen, Subdirectory subdir);
|
||||
|
||||
void SanitizeFilename(char *filename);
|
||||
bool AppendPathSeparator(char *buf, size_t buflen);
|
||||
void AppendPathSeparator(char *buf, size_t buflen);
|
||||
void DeterminePaths(const char *exe);
|
||||
void *ReadFileToMem(const char *filename, size_t *lenp, size_t maxsize);
|
||||
bool FileExists(const char *filename);
|
||||
@@ -87,14 +87,6 @@ public:
|
||||
virtual bool AddFile(const char *filename, size_t basepath_length) = 0;
|
||||
};
|
||||
|
||||
/** Helper for scanning for files with tar as extension */
|
||||
class TarScanner : FileScanner {
|
||||
public:
|
||||
/* virtual */ bool AddFile(const char *filename, size_t basepath_length);
|
||||
|
||||
/** Do the scan for Tars. */
|
||||
static uint DoScan();
|
||||
};
|
||||
|
||||
/* Implementation of opendir/readdir/closedir for Windows */
|
||||
#if defined(WIN32)
|
||||
|
@@ -313,44 +313,23 @@ static int CALLBACK EnumFontCallback(const ENUMLOGFONTEX *logfont, const NEWTEXT
|
||||
if ((fs.fsCsb[0] & info->locale.lsCsbSupported[0]) == 0 && (fs.fsCsb[1] & info->locale.lsCsbSupported[1]) == 0) return 1;
|
||||
}
|
||||
|
||||
char font_name[MAX_PATH];
|
||||
#if defined(UNICODE)
|
||||
WIDE_TO_MB_BUFFER((const TCHAR*)logfont->elfFullName, font_name, lengthof(font_name));
|
||||
#else
|
||||
strecpy(font_name, (const TCHAR*)logfont->elfFullName, lastof(font_name));
|
||||
#endif
|
||||
|
||||
/* Add english name after font name */
|
||||
const char *english_name = GetEnglishFontName(logfont);
|
||||
strecpy(font_name + strlen(font_name) + 1, english_name, lastof(font_name));
|
||||
|
||||
/* Check whether we can actually load the font. */
|
||||
bool ft_init = _library != NULL;
|
||||
bool found = false;
|
||||
FT_Face face;
|
||||
/* Init FreeType if needed. */
|
||||
if ((ft_init || FT_Init_FreeType(&_library) == FT_Err_Ok) && GetFontByFaceName(font_name, &face) == FT_Err_Ok) {
|
||||
FT_Done_Face(face);
|
||||
found = true;
|
||||
}
|
||||
if (!ft_init) {
|
||||
/* Uninit FreeType if we did the init. */
|
||||
FT_Done_FreeType(_library);
|
||||
_library = NULL;
|
||||
}
|
||||
|
||||
if (!found) return 1;
|
||||
|
||||
const char *font_name = WIDE_TO_MB((const TCHAR*)logfont->elfFullName);
|
||||
DEBUG(freetype, 1, "Fallback font: %s (%s)", font_name, english_name);
|
||||
|
||||
strecpy(info->settings->small_font, font_name, lastof(info->settings->small_font));
|
||||
strecpy(info->settings->medium_font, font_name, lastof(info->settings->medium_font));
|
||||
strecpy(info->settings->large_font, font_name, lastof(info->settings->large_font));
|
||||
|
||||
/* Add english name after font name */
|
||||
strecpy(info->settings->small_font + strlen(info->settings->small_font) + 1, english_name, lastof(info->settings->small_font));
|
||||
strecpy(info->settings->medium_font + strlen(info->settings->medium_font) + 1, english_name, lastof(info->settings->medium_font));
|
||||
strecpy(info->settings->large_font + strlen(info->settings->large_font) + 1, english_name, lastof(info->settings->large_font));
|
||||
return 0; // stop enumerating
|
||||
}
|
||||
|
||||
bool SetFallbackFont(FreeTypeSettings *settings, const char *language_isocode, int winlangid, const char *str)
|
||||
{
|
||||
DEBUG(freetype, 1, "Trying fallback fonts");
|
||||
EFCParam langInfo;
|
||||
if (GetLocaleInfo(MAKELCID(winlangid, SORT_DEFAULT), LOCALE_FONTSIGNATURE, (LPTSTR)&langInfo.locale, sizeof(langInfo.locale) / sizeof(TCHAR)) == 0) {
|
||||
/* Invalid langid or some other mysterious error, can't determine fallback font. */
|
||||
|
@@ -176,8 +176,9 @@ static void _GenerateWorld(void *)
|
||||
ShowNewGRFError();
|
||||
|
||||
if (_network_dedicated) DEBUG(net, 0, "Map generated, starting game");
|
||||
DEBUG(desync, 1, "new_map: %08x", _settings_game.game_creation.generation_seed);
|
||||
DEBUG(desync, 1, "new_map: %i\n", _settings_game.game_creation.generation_seed);
|
||||
|
||||
if (_settings_client.gui.pause_on_newgame && _game_mode == GM_NORMAL) DoCommandP(0, PM_PAUSED_NORMAL, 1, CMD_PAUSE);
|
||||
if (_debug_desync_level > 0) {
|
||||
char name[MAX_PATH];
|
||||
snprintf(name, lengthof(name), "dmp_cmds_%08x_%08x.sav", _settings_game.game_creation.generation_seed, _date);
|
||||
|
@@ -677,7 +677,7 @@ struct GenerateLandscapeWindow : public QueryStringBaseWindow {
|
||||
|
||||
virtual EventState OnKeyPress(uint16 key, uint16 keycode)
|
||||
{
|
||||
EventState state = ES_NOT_HANDLED;
|
||||
EventState state;
|
||||
this->HandleEditBoxKey(GLAND_RANDOM_EDITBOX, key, keycode, state);
|
||||
/* the seed is unsigned, therefore atoi cannot be used.
|
||||
* As UINT32_MAX is a 'magic' value (use random seed) it
|
||||
|
@@ -196,7 +196,6 @@ enum Colours {
|
||||
COLOUR_END,
|
||||
INVALID_COLOUR = 0xFF,
|
||||
};
|
||||
template <> struct EnumPropsT<Colours> : MakeEnumPropsT<Colours, byte, COLOUR_DARK_BLUE, COLOUR_END, INVALID_COLOUR, 4> {};
|
||||
|
||||
/** Colour of the strings, see _string_colourmap in table/palettes.h or docs/ottd-colourtext-palette.png */
|
||||
enum TextColour {
|
||||
|
@@ -203,9 +203,9 @@ void GfxLoadSprites()
|
||||
GfxInitPalettes();
|
||||
}
|
||||
|
||||
bool GraphicsSet::FillSetDetails(IniFile *ini, const char *path, const char *full_filename)
|
||||
bool GraphicsSet::FillSetDetails(IniFile *ini, const char *path)
|
||||
{
|
||||
bool ret = this->BaseSet<GraphicsSet, MAX_GFT, DATA_DIR>::FillSetDetails(ini, path, full_filename, false);
|
||||
bool ret = this->BaseSet<GraphicsSet, MAX_GFT, DATA_DIR>::FillSetDetails(ini, path, false);
|
||||
if (ret) {
|
||||
IniGroup *metadata = ini->GetGroup("metadata");
|
||||
IniItem *item;
|
||||
@@ -213,7 +213,7 @@ bool GraphicsSet::FillSetDetails(IniFile *ini, const char *path, const char *ful
|
||||
fetch_metadata("palette");
|
||||
this->palette = (*item->value == 'D' || *item->value == 'd') ? PAL_DOS : PAL_WINDOWS;
|
||||
}
|
||||
return ret;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
@@ -88,11 +88,11 @@ struct GraphLegendWindow : Window {
|
||||
ToggleBit(_legend_excluded_companies, widget - GLW_FIRST_COMPANY);
|
||||
this->ToggleWidgetLoweredState(widget);
|
||||
this->SetDirty();
|
||||
InvalidateWindowData(WC_INCOME_GRAPH, 0);
|
||||
InvalidateWindowData(WC_OPERATING_PROFIT, 0);
|
||||
InvalidateWindowData(WC_DELIVERED_CARGO, 0);
|
||||
InvalidateWindowData(WC_PERFORMANCE_HISTORY, 0);
|
||||
InvalidateWindowData(WC_COMPANY_VALUE, 0);
|
||||
SetWindowDirty(WC_INCOME_GRAPH, 0);
|
||||
SetWindowDirty(WC_OPERATING_PROFIT, 0);
|
||||
SetWindowDirty(WC_DELIVERED_CARGO, 0);
|
||||
SetWindowDirty(WC_PERFORMANCE_HISTORY, 0);
|
||||
SetWindowDirty(WC_COMPANY_VALUE, 0);
|
||||
}
|
||||
|
||||
virtual void OnInvalidateData(int data)
|
||||
@@ -199,33 +199,25 @@ protected:
|
||||
byte colours[GRAPH_MAX_DATASETS];
|
||||
OverflowSafeInt64 cost[GRAPH_MAX_DATASETS][GRAPH_NUM_MONTHS]; ///< Stored costs for the last #GRAPH_NUM_MONTHS months
|
||||
|
||||
/**
|
||||
* Get the highest value of the graph's data. Excluded data is ignored to allow showing smaller values in
|
||||
* better detail when disabling higher ones.
|
||||
* @return Highest value of the graph (ignoring disabled data).
|
||||
*/
|
||||
int64 GetHighestValue() const
|
||||
int64 GetHighestValue(int initial_highest_value) const
|
||||
{
|
||||
OverflowSafeInt64 highest_value = 0;
|
||||
OverflowSafeInt64 highest_value = initial_highest_value;
|
||||
|
||||
for (int i = 0; i < this->num_dataset; i++) {
|
||||
if (HasBit(this->excluded_data, i)) continue;
|
||||
for (int j = 0; j < this->num_on_x_axis; j++) {
|
||||
OverflowSafeInt64 datapoint = this->cost[i][j];
|
||||
if (!HasBit(this->excluded_data, i)) {
|
||||
for (int j = 0; j < this->num_on_x_axis; j++) {
|
||||
OverflowSafeInt64 datapoint = this->cost[i][j];
|
||||
|
||||
if (datapoint != INVALID_DATAPOINT) {
|
||||
/* For now, if the graph has negative values the scaling is
|
||||
* symmetrical about the x axis, so take the absolute value
|
||||
* of each data point. */
|
||||
highest_value = max(highest_value, abs(datapoint));
|
||||
if (datapoint != INVALID_DATAPOINT) {
|
||||
/* For now, if the graph has negative values the scaling is
|
||||
* symmetrical about the x axis, so take the absolute value
|
||||
* of each data point. */
|
||||
highest_value = max(highest_value, abs(datapoint));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Prevent showing the highest value too close to the graph upper limit. */
|
||||
highest_value = (11 * highest_value) / 10;
|
||||
/* Avoid using zero as the highest value. */
|
||||
if (highest_value == 0) highest_value = GRAPH_NUM_LINES_Y - 1;
|
||||
/* Round up highest_value so that it will divide cleanly into the number of
|
||||
* axis labels used. */
|
||||
int round_val = highest_value % (GRAPH_NUM_LINES_Y - 1);
|
||||
@@ -282,7 +274,13 @@ protected:
|
||||
r.left += 9;
|
||||
r.right -= 5;
|
||||
|
||||
highest_value = GetHighestValue();
|
||||
/* Start of with a highest_value of twice the height of the graph in pixels.
|
||||
* It's a bit arbitrary, but it makes the cargo payment graph look a little
|
||||
* nicer, and prevents division by zero when calculating where the datapoint
|
||||
* should be drawn. */
|
||||
highest_value = r.bottom - r.top + 1;
|
||||
if (!this->has_negative_values) highest_value *= 2;
|
||||
highest_value = GetHighestValue(highest_value);
|
||||
|
||||
/* Get width for Y labels */
|
||||
int label_width = GetYLabelWidth(highest_value);
|
||||
@@ -526,11 +524,6 @@ public:
|
||||
this->UpdateStatistics(false);
|
||||
}
|
||||
|
||||
virtual void OnInvalidateData(int data)
|
||||
{
|
||||
this->UpdateStatistics(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the statistics.
|
||||
* @param initialize Initialize the data structure.
|
||||
@@ -903,11 +896,6 @@ struct PaymentRatesGraphWindow : BaseGraphWindow {
|
||||
/* Override default OnTick */
|
||||
}
|
||||
|
||||
virtual void OnInvalidateData(int data)
|
||||
{
|
||||
this->OnHundredthTick();
|
||||
}
|
||||
|
||||
virtual void OnHundredthTick()
|
||||
{
|
||||
this->excluded_data = _legend_excluded_cargo;
|
||||
|
@@ -10,7 +10,6 @@
|
||||
/** @file group_cmd.cpp Handling of the engine groups */
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "cmd_helper.h"
|
||||
#include "command_func.h"
|
||||
#include "group.h"
|
||||
#include "train.h"
|
||||
@@ -83,7 +82,7 @@ void InitializeGroup()
|
||||
*/
|
||||
CommandCost CmdCreateGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||
{
|
||||
VehicleType vt = Extract<VehicleType, 0, 3>(p1);
|
||||
VehicleType vt = (VehicleType)p1;
|
||||
if (!IsCompanyBuildableVehicleType(vt)) return CMD_ERROR;
|
||||
|
||||
if (!Group::CanAllocateItem()) return CMD_ERROR;
|
||||
@@ -259,12 +258,13 @@ CommandCost CmdAddVehicleGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, u
|
||||
*/
|
||||
CommandCost CmdAddSharedVehicleGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||
{
|
||||
VehicleType type = Extract<VehicleType, 0, 3>(p2);
|
||||
GroupID id_g = p1;
|
||||
if (!Group::IsValidID(id_g) || !IsCompanyBuildableVehicleType(type)) return CMD_ERROR;
|
||||
VehicleType type = (VehicleType)p2;
|
||||
if (!Group::IsValidID(p1) || !IsCompanyBuildableVehicleType(type)) return CMD_ERROR;
|
||||
|
||||
if (flags & DC_EXEC) {
|
||||
Vehicle *v;
|
||||
VehicleType type = (VehicleType)p2;
|
||||
GroupID id_g = p1;
|
||||
|
||||
/* Find the first front engine which belong to the group id_g
|
||||
* then add all shared vehicles of this front engine to the group id_g */
|
||||
@@ -298,13 +298,13 @@ CommandCost CmdAddSharedVehicleGroup(TileIndex tile, DoCommandFlag flags, uint32
|
||||
*/
|
||||
CommandCost CmdRemoveAllVehiclesGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||
{
|
||||
GroupID old_g = p1;
|
||||
Group *g = Group::GetIfValid(old_g);
|
||||
VehicleType type = Extract<VehicleType, 0, 3>(p2);
|
||||
Group *g = Group::GetIfValid(p1);
|
||||
VehicleType type = (VehicleType)p2;
|
||||
|
||||
if (g == NULL || g->owner != _current_company || !IsCompanyBuildableVehicleType(type)) return CMD_ERROR;
|
||||
|
||||
if (flags & DC_EXEC) {
|
||||
GroupID old_g = p1;
|
||||
Vehicle *v;
|
||||
|
||||
/* Find each Vehicle that belongs to the group old_g and add it to the default group */
|
||||
|
@@ -381,12 +381,12 @@ public:
|
||||
{
|
||||
switch (widget) {
|
||||
case GRP_WIDGET_ALL_VEHICLES:
|
||||
DrawString(r.left + WD_FRAMERECT_LEFT + 8, r.right - WD_FRAMERECT_RIGHT - 8, r.top + WD_FRAMERECT_TOP + 1,
|
||||
DrawString(r.left + WD_FRAMERECT_LEFT + 8, r.right - WD_FRAMERECT_RIGHT - 8, r.top + WD_MATRIX_TOP,
|
||||
STR_GROUP_ALL_TRAINS + this->vehicle_type, IsAllGroupID(this->group_sel) ? TC_WHITE : TC_BLACK);
|
||||
break;
|
||||
|
||||
case GRP_WIDGET_DEFAULT_VEHICLES:
|
||||
DrawString(r.left + WD_FRAMERECT_LEFT + 8, r.right - WD_FRAMERECT_RIGHT - 8, r.top + WD_FRAMERECT_TOP + 1,
|
||||
DrawString(r.left + WD_FRAMERECT_LEFT + 8, r.right - WD_FRAMERECT_RIGHT - 8, r.top + WD_MATRIX_TOP,
|
||||
STR_GROUP_DEFAULT_TRAINS + this->vehicle_type, IsDefaultGroupID(this->group_sel) ? TC_WHITE : TC_BLACK);
|
||||
break;
|
||||
|
||||
@@ -400,7 +400,7 @@ public:
|
||||
|
||||
/* draw the selected group in white, else we draw it in black */
|
||||
SetDParam(0, g->index);
|
||||
DrawString(r.left + WD_FRAMERECT_LEFT + 8, r.right - WD_FRAMERECT_RIGHT - 8, y1, STR_GROUP_NAME, (this->group_sel == g->index) ? TC_WHITE : TC_BLACK);
|
||||
DrawString(r.left + WD_FRAMERECT_LEFT + 8, r.right - WD_FRAMERECT_RIGHT, y1, STR_GROUP_NAME, (this->group_sel == g->index) ? TC_WHITE : TC_BLACK);
|
||||
|
||||
/* draw the number of vehicles of the group */
|
||||
SetDParam(0, g->num_vehicle);
|
||||
|
@@ -26,7 +26,7 @@ extern IndustryPool _industry_pool;
|
||||
* Defines the internal data of a functionnal industry
|
||||
*/
|
||||
struct Industry : IndustryPool::PoolItem<&_industry_pool> {
|
||||
typedef PersistentStorageArray<int32, 16> PersistentStorage;
|
||||
typedef PersistentStorageArray<uint32, 16> PersistentStorage;
|
||||
|
||||
TileArea location; ///< Location of the industry
|
||||
const Town *town; ///< Nearest town
|
||||
|
@@ -1512,14 +1512,31 @@ static bool CheckIfCanLevelIndustryPlatform(TileIndex tile, DoCommandFlag flags,
|
||||
}
|
||||
|
||||
|
||||
static bool CheckIfFarEnoughFromConflictingIndustry(TileIndex tile, int type)
|
||||
static bool CheckIfFarEnoughFromIndustry(TileIndex tile, int type)
|
||||
{
|
||||
const IndustrySpec *indspec = GetIndustrySpec(type);
|
||||
const Industry *i;
|
||||
|
||||
if (_settings_game.economy.same_industry_close && indspec->IsRawIndustry())
|
||||
/* Allow primary industries to be placed close to any other industry */
|
||||
return true;
|
||||
|
||||
FOR_ALL_INDUSTRIES(i) {
|
||||
/* Within 14 tiles from another industry is considered close */
|
||||
bool in_low_distance = DistanceMax(tile, i->location.tile) <= 14;
|
||||
|
||||
/* check if an industry that accepts the same goods is nearby */
|
||||
if (in_low_distance &&
|
||||
!indspec->IsRawIndustry() && // not a primary industry?
|
||||
indspec->accepts_cargo[0] == i->accepts_cargo[0] && (
|
||||
/* at least one of those options must be true */
|
||||
_game_mode != GM_EDITOR || // editor must not be stopped
|
||||
!_settings_game.economy.same_industry_close ||
|
||||
!_settings_game.economy.multiple_industry_per_town)) {
|
||||
_error_message = STR_ERROR_INDUSTRY_TOO_CLOSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* check if there are any conflicting industry types around */
|
||||
if ((i->type == indspec->conflicting[0] ||
|
||||
i->type == indspec->conflicting[1] ||
|
||||
@@ -1688,7 +1705,7 @@ static Industry *CreateNewIndustryHelper(TileIndex tile, IndustryType type, DoCo
|
||||
}
|
||||
|
||||
if (!custom_shape_check && _settings_game.game_creation.land_generator == LG_TERRAGENESIS && _generating_world && !_ignore_restrictions && !CheckIfCanLevelIndustryPlatform(tile, DC_NO_WATER, it, type)) return NULL;
|
||||
if (!CheckIfFarEnoughFromConflictingIndustry(tile, type)) return NULL;
|
||||
if (!CheckIfFarEnoughFromIndustry(tile, type)) return NULL;
|
||||
|
||||
const Town *t = FindTownForIndustry(tile, type);
|
||||
if (t == NULL) return NULL;
|
||||
@@ -1736,10 +1753,6 @@ CommandCost CmdBuildIndustry(TileIndex tile, DoCommandFlag flags, uint32 p1, uin
|
||||
return CMD_ERROR;
|
||||
}
|
||||
|
||||
if (_game_mode != GM_EDITOR && !CheckIfCallBackAllowsAvailability(it, IACT_USERCREATION)) {
|
||||
return CMD_ERROR;
|
||||
}
|
||||
|
||||
const Industry *ind = NULL;
|
||||
if (_game_mode != GM_EDITOR && _settings_game.construction.raw_industry_construction == 2 && indspec->IsRawIndustry()) {
|
||||
if (flags & DC_EXEC) {
|
||||
@@ -1909,9 +1922,12 @@ void GenerateIndustries()
|
||||
|
||||
static void UpdateIndustryStatistics(Industry *i)
|
||||
{
|
||||
byte pct;
|
||||
bool refresh = false;
|
||||
|
||||
for (byte j = 0; j < lengthof(i->produced_cargo); j++) {
|
||||
if (i->produced_cargo[j] != CT_INVALID) {
|
||||
byte pct = 0;
|
||||
pct = 0;
|
||||
if (i->this_month_production[j] != 0) {
|
||||
i->last_prod_year = _cur_year;
|
||||
pct = min(i->this_month_transported[j] * 256 / i->this_month_production[j], 255);
|
||||
@@ -1923,8 +1939,11 @@ static void UpdateIndustryStatistics(Industry *i)
|
||||
|
||||
i->last_month_transported[j] = i->this_month_transported[j];
|
||||
i->this_month_transported[j] = 0;
|
||||
refresh = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (refresh) SetWindowDirty(WC_INDUSTRY_VIEW, i->index);
|
||||
}
|
||||
|
||||
/** Simple helper that will collect data for the generation of industries */
|
||||
@@ -2380,10 +2399,7 @@ void IndustryDailyLoop()
|
||||
MaybeNewIndustry();
|
||||
} else {
|
||||
Industry *i = Industry::GetRandom();
|
||||
if (i != NULL) {
|
||||
ChangeIndustryProduction(i, false);
|
||||
SetWindowDirty(WC_INDUSTRY_VIEW, i->index);
|
||||
}
|
||||
if (i != NULL) ChangeIndustryProduction(i, false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2405,7 +2421,6 @@ void IndustryMonthlyLoop()
|
||||
delete i;
|
||||
} else {
|
||||
ChangeIndustryProduction(i, true);
|
||||
SetWindowDirty(WC_INDUSTRY_VIEW, i->index);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -374,13 +374,15 @@ public:
|
||||
uint16 callback_res = GetIndustryCallback(CBID_INDUSTRY_FUND_MORE_TEXT, 0, 0, NULL, this->selected_type, INVALID_TILE);
|
||||
if (callback_res != CALLBACK_FAILED) { // Did it fail?
|
||||
str = GetGRFStringID(indsp->grf_prop.grffile->grfid, 0xD000 + callback_res); // No. here's the new string
|
||||
if (str != STR_UNDEFINED) {
|
||||
PrepareTextRefStackUsage(6);
|
||||
DrawStringMultiLine(left, right, y, bottom, str);
|
||||
StopTextRefStackUsage();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Draw the Additional purchase text, provided by newgrf callback, if any.
|
||||
* Otherwhise, will print Nothing */
|
||||
if (str != STR_NULL && str != STR_UNDEFINED) {
|
||||
SetDParam(0, str);
|
||||
DrawStringMultiLine(left, right, y, bottom, STR_JUST_STRING);
|
||||
}
|
||||
} break;
|
||||
}
|
||||
}
|
||||
@@ -404,10 +406,8 @@ public:
|
||||
|
||||
this->SetDirty();
|
||||
|
||||
if (GetCallbackWnd() == this &&
|
||||
((_game_mode != GM_EDITOR && _settings_game.construction.raw_industry_construction == 2 && indsp != NULL && indsp->IsRawIndustry()) ||
|
||||
this->selected_type == INVALID_INDUSTRYTYPE ||
|
||||
!this->enabled[this->selected_index])) {
|
||||
if ((_game_mode != GM_EDITOR && _settings_game.construction.raw_industry_construction == 2 && indsp != NULL && indsp->IsRawIndustry()) ||
|
||||
this->selected_type == INVALID_INDUSTRYTYPE) {
|
||||
/* Reset the button state if going to prospecting or "build many industries" */
|
||||
this->RaiseButtons();
|
||||
ResetObjectToPlace();
|
||||
@@ -955,14 +955,18 @@ protected:
|
||||
/** Sort industries by production and name */
|
||||
static int CDECL IndustryProductionSorter(const Industry * const *a, const Industry * const *b)
|
||||
{
|
||||
uint prod_a = 0, prod_b = 0;
|
||||
for (uint i = 0; i < lengthof((*a)->produced_cargo); i++) {
|
||||
if ((*a)->produced_cargo[i] != CT_INVALID) prod_a += (*a)->last_month_production[i];
|
||||
if ((*b)->produced_cargo[i] != CT_INVALID) prod_b += (*b)->last_month_production[i];
|
||||
}
|
||||
int r = prod_a - prod_b;
|
||||
int r = 0;
|
||||
|
||||
return (r == 0) ? IndustryTypeSorter(a, b) : r;
|
||||
if ((*a)->produced_cargo[0] == CT_INVALID) {
|
||||
if ((*b)->produced_cargo[0] != CT_INVALID) return -1;
|
||||
} else {
|
||||
if ((*b)->produced_cargo[0] == CT_INVALID) return 1;
|
||||
|
||||
r = ((*a)->last_month_production[0] + (*a)->last_month_production[1]) -
|
||||
((*b)->last_month_production[0] + (*b)->last_month_production[1]);
|
||||
}
|
||||
|
||||
return (r == 0) ? IndustryNameSorter(a, b) : r;
|
||||
}
|
||||
|
||||
/** Sort industries by transported cargo and name */
|
||||
|
@@ -604,8 +604,8 @@ CommandCost CmdLandscapeClear(TileIndex tile, DoCommandFlag flags, uint32 p1, ui
|
||||
|
||||
/** Clear a big piece of landscape
|
||||
* @param tile end tile of area dragging
|
||||
* @param flags of operation to conduct
|
||||
* @param p1 start tile of area dragging
|
||||
* @param flags of operation to conduct
|
||||
* @param p2 unused
|
||||
* @param text unused
|
||||
* @return the cost of this operation or an error
|
||||
@@ -827,8 +827,6 @@ static void CreateDesertOrRainForest()
|
||||
for (TileIndex tile = 0; tile != MapSize(); ++tile) {
|
||||
if ((tile % update_freq) == 0) IncreaseGeneratingWorldProgress(GWP_LANDSCAPE);
|
||||
|
||||
if (!IsValidTile(tile)) continue;
|
||||
|
||||
for (data = _make_desert_or_rainforest_data;
|
||||
data != endof(_make_desert_or_rainforest_data); ++data) {
|
||||
TileIndex t = AddTileIndexDiffCWrap(tile, *data);
|
||||
@@ -847,8 +845,6 @@ static void CreateDesertOrRainForest()
|
||||
for (TileIndex tile = 0; tile != MapSize(); ++tile) {
|
||||
if ((tile % update_freq) == 0) IncreaseGeneratingWorldProgress(GWP_LANDSCAPE);
|
||||
|
||||
if (!IsValidTile(tile)) continue;
|
||||
|
||||
for (data = _make_desert_or_rainforest_data;
|
||||
data != endof(_make_desert_or_rainforest_data); ++data) {
|
||||
TileIndex t = AddTileIndexDiffCWrap(tile, *data);
|
||||
|
@@ -1076,7 +1076,7 @@ STR_CONFIG_SETTING_OFF :Af
|
||||
STR_CONFIG_SETTING_ON :Aan
|
||||
STR_CONFIG_SETTING_DISABLED :gestrem
|
||||
STR_CONFIG_SETTING_VEHICLESPEED :{LTBLUE}Wys voertuig spoed in die standbaan: {ORANGE}{STRING}
|
||||
STR_CONFIG_SETTING_BUILDONSLOPES :{LTBLUE}Laat bou op skuinstes en kusse toe: {ORANGE}{STRING}
|
||||
STR_CONFIG_SETTING_BUILDONSLOPES :{LTBLUE}Laat gebou op skuinstes en kusse toe: {ORANGE}{STRING}
|
||||
STR_CONFIG_SETTING_AUTOSLOPE :{LTBLUE}Laat terraforming toe onder geboue, spoore, ens. (autoslope): {ORANGE}{STRING}
|
||||
STR_CONFIG_SETTING_CATCHMENT :{LTBLUE}Laat meer realisties grootte opvangsgebied toe: {ORANGE}{STRING}
|
||||
STR_CONFIG_SETTING_EXTRADYNAMITE :{LTBLUE}Laat verwydering van meer stad-besite paaie, bruge, ens toe: {ORANGE}{STRING}
|
||||
@@ -1099,6 +1099,7 @@ STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE :geen
|
||||
STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL :as ander nywerhede
|
||||
STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :vooruitsigting
|
||||
STR_CONFIG_SETTING_MULTIPINDTOWN :{LTBLUE}Laat meer as een soortgelyke nywerhede per dorp toe: {ORANGE}{STRING}
|
||||
STR_CONFIG_SETTING_SAMEINDCLOSE :{LTBLUE}Nywerhede van die selfde tipe kan naby aan mekaar gebou word: {ORANGE}{STRING}
|
||||
STR_CONFIG_SETTING_LONGDATE :{LTBLUE}Toon altyd lang datum in die standbaan: {ORANGE}{STRING}
|
||||
STR_CONFIG_SETTING_SIGNALSIDE :{LTBLUE}Toon seine op die bestuur kant: {ORANGE}{STRING}
|
||||
STR_CONFIG_SETTING_SHOWFINANCES :{LTBLUE}Toon finansies venster op die einde van die jaar: {ORANGE}{STRING}
|
||||
@@ -1725,23 +1726,23 @@ STR_NETWORK_CHAT_ALL :[All] {STRING}:
|
||||
STR_NETWORK_CHAT_OSKTITLE :{BLACK}Tik woord in vir netwerk kominikasie
|
||||
|
||||
# Network messages
|
||||
STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Geen netwerk ontwerp gevind of voldoen sonder ENABLE_NETWORK
|
||||
STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE} Geen netwerk ontwerp gevind of voldoen sonder ENABLE_NETWORK
|
||||
STR_NETWORK_ERROR_NOSERVER :{WHITE}Kan nie enige netwerk speletjies vind nie
|
||||
STR_NETWORK_ERROR_NOCONNECTION :{WHITE}Die verskaffer het nie die versoek geantwoord nie
|
||||
STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE}Kan nie konnekteer te danke aan newgrf mispas nie
|
||||
STR_NETWORK_ERROR_DESYNC :{WHITE}Netwerk-Spel sinchroniseering gedop
|
||||
STR_NETWORK_ERROR_LOSTCONNECTION :{WHITE}Netwerk-Spel verbinding verloor
|
||||
STR_NETWORK_ERROR_SAVEGAMEERROR :{WHITE}Kan nie spaarspel laai nie
|
||||
STR_NETWORK_ERROR_SERVER_START :{WHITE}Verskaffer kan nie aangesit word nie
|
||||
STR_NETWORK_ERROR_CLIENT_START :{WHITE}Kan nie verbinding kry nie
|
||||
STR_NETWORK_ERROR_TIMEOUT :{WHITE}Verbinding #{NUM} het betyds uitgeloop
|
||||
STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}A protokol-fout was gemaak en die verbinding was verlore
|
||||
STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Die hersiening van die klient is nie gelyk aan die verskaffer se hersiening nie
|
||||
STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Verkeerde wagwoord
|
||||
STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Die verskaffer is vol
|
||||
STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Jy is van die verskaffer verban
|
||||
STR_NETWORK_ERROR_KICKED :{WHITE}Jy is van die spel geskop
|
||||
STR_NETWORK_ERROR_CHEATER :{WHITE}Bedrieg is nie toegelaat op hierdie verskaffer
|
||||
STR_NETWORK_ERROR_NOCONNECTION :{WHITE} Die verskaffer het nie die versoek geantwoord nie
|
||||
STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE} Kan nie konnekteer te danke aan newgrf mispas nie
|
||||
STR_NETWORK_ERROR_DESYNC :{WHITE} Netwerk-Spel sinchroniseering gedop
|
||||
STR_NETWORK_ERROR_LOSTCONNECTION :{WHITE} Netwerk-Spel verbinding verloor
|
||||
STR_NETWORK_ERROR_SAVEGAMEERROR :{WHITE} Kan nie spaarspel laai nie
|
||||
STR_NETWORK_ERROR_SERVER_START :{WHITE} Verskaffer kan nie aangesit word nie
|
||||
STR_NETWORK_ERROR_CLIENT_START :{WHITE} Kan nie verbinding kry nie
|
||||
STR_NETWORK_ERROR_TIMEOUT :{WHITE} Verbinding #{NUM} het betyds uitgeloop
|
||||
STR_NETWORK_ERROR_SERVER_ERROR :{WHITE} A protokol-fout was gemaak en die verbinding was verlore
|
||||
STR_NETWORK_ERROR_WRONG_REVISION :{WHITE} Die hersiening van die klient is nie gelyk aan die verskaffer se hersiening nie
|
||||
STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE} Verkeerde wagwoord
|
||||
STR_NETWORK_ERROR_SERVER_FULL :{WHITE} Die verskaffer is vol
|
||||
STR_NETWORK_ERROR_SERVER_BANNED :{WHITE} Jy is van die verskaffer verban
|
||||
STR_NETWORK_ERROR_KICKED :{WHITE} Jy is van die spel geskop
|
||||
STR_NETWORK_ERROR_CHEATER :{WHITE} Bedrieg is nie toegelaat op hierdie verskaffer
|
||||
|
||||
############ Leave those lines in this order!!
|
||||
STR_NETWORK_ERROR_CLIENT_GENERAL :algemeen fout
|
||||
@@ -1783,8 +1784,8 @@ STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} he
|
||||
STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} het sy/haar naam verander na {STRING}
|
||||
STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} het jou besigheid {2:CURRENCY} gegee
|
||||
STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Jy het {1:STRING} {2:CURRENCY} gegee
|
||||
STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Die verskaffer het die sessie toegemaak
|
||||
STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Die verskaffer is besig om te weerbegin...{}Wag asb...
|
||||
STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE} Die verskaffer het die sessie toegemaak
|
||||
STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE} Die verskaffer is besig om te weerbegin...{}Wag asb...
|
||||
|
||||
# Content downloading window
|
||||
STR_CONTENT_TITLE :{WHITE}Inhoud laai af
|
||||
@@ -2124,7 +2125,6 @@ STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Stasie t
|
||||
STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NuweGRF: {LTBLUE}{STRING}
|
||||
STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Vrag aangeneem: {LTBLUE}
|
||||
STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING})
|
||||
STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Spoorlyn spoed limiet: {LTBLUE}{VELOCITY}
|
||||
|
||||
# Description of land area of different tiles
|
||||
STR_LAI_CLEAR_DESCRIPTION_ROCKS :Rotse
|
||||
@@ -2346,6 +2346,8 @@ STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Gelyke lê
|
||||
STR_NEWGRF_SETTINGS_DISABLED :{RED}Gestrem
|
||||
|
||||
STR_NEWGRF_SETTINGS_PARAMETER_QUERY :{BLACK}Invoer NewGRF parameters
|
||||
|
||||
# NewGRF add window
|
||||
STR_NEWGRF_ADD_CAPTION :{WHITE}Beskikbaar NewGRF lêers
|
||||
STR_NEWGRF_ADD_FILE :{BLACK}Voeg na seleksie
|
||||
STR_NEWGRF_ADD_FILE_TOOLTIP :{BLACK}Voeg die verkiesde NewGRF lêer na u configurasie
|
||||
@@ -3293,15 +3295,15 @@ STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Speeletj
|
||||
|
||||
# Map generation messages
|
||||
STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Kaart generasie het gestaak...{}... geen geskikde plekke vir dorpe was gevind nie
|
||||
STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... daar is geen dorp in die draaiboek
|
||||
STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}...daar is geen dorp in die draaiboek
|
||||
|
||||
STR_ERROR_PNGMAP :{WHITE}Kan nie landskap van PNG laai nie...
|
||||
STR_ERROR_PNGMAP_FILE_NOT_FOUND :{WHITE}... lêer nie gevind nie.
|
||||
STR_ERROR_PNGMAP_IMAGE_TYPE :{WHITE}... kan nie prent tipe verdoel. 8 of 24-bit PNG prent vereis.
|
||||
STR_ERROR_PNGMAP_MISC :{WHITE}... iets het verkeerd gegaan. Jammer. (moontlik korrup lêer)
|
||||
STR_ERROR_PNGMAP_FILE_NOT_FOUND :{WHITE}...lêer nie gevind nie.
|
||||
STR_ERROR_PNGMAP_IMAGE_TYPE :{WHITE}...kan nie prent tipe verdoel. 8 of 24-bit PNG prent vereis.
|
||||
STR_ERROR_PNGMAP_MISC :{WHITE}...iets het verkeerd gegaan. Jammer. (moontlik korrup lêer)
|
||||
|
||||
STR_ERROR_BMPMAP :{WHITE}Kan nie landskap van BMP laai nie...
|
||||
STR_ERROR_BMPMAP_IMAGE_TYPE :{WHITE}... kan nie beeld tipe verdoel nie.
|
||||
STR_ERROR_BMPMAP_IMAGE_TYPE :{WHITE}...kan nie beeld tipe verdoel nie.
|
||||
|
||||
STR_WARNING_HEIGHTMAP_SCALE_CAPTION :{WHITE}Skaal waaskuwing
|
||||
STR_WARNING_HEIGHTMAP_SCALE_MESSAGE :{YELLOW}Om die kaart te veel te verstel is nie aanbeveel. Gaan voort met die generasie?
|
||||
@@ -3323,13 +3325,13 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Te naby
|
||||
STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY :{WHITE}Nie genoeg kontant nie - benodig {CURRENCY}
|
||||
STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}Gelyk grond benodig
|
||||
STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Land loop in verkeerde rigting
|
||||
STR_ERROR_CAN_T_DO_THIS :{WHITE}Kan dit nie doen nie...
|
||||
STR_ERROR_CAN_T_DO_THIS :{WHITE}Kan dit nie doen nie....
|
||||
STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Gebou moet eers afgebreek word
|
||||
STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Kan nie hierdie gebied skoon maak nie...
|
||||
STR_ERROR_SITE_UNSUITABLE :{WHITE}... ligging ongeskik
|
||||
STR_ERROR_ALREADY_BUILT :{WHITE}... alreeds gebou
|
||||
STR_ERROR_OWNED_BY :{WHITE}... besit deur {STRING}
|
||||
STR_ERROR_AREA_IS_OWNED_BY_ANOTHER :{WHITE}... gebied is besit deur 'n ander maatskappy
|
||||
STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Kan nie hierdie gebied skoon maak nie....
|
||||
STR_ERROR_SITE_UNSUITABLE :{WHITE}...ligging ongeskik
|
||||
STR_ERROR_ALREADY_BUILT :{WHITE}...alreeds gebou
|
||||
STR_ERROR_OWNED_BY :{WHITE}...besit deur {STRING}
|
||||
STR_ERROR_AREA_IS_OWNED_BY_ANOTHER :{WHITE}...gebied is besit deur 'n ander maatskappy
|
||||
STR_ERROR_NAME_MUST_BE_UNIQUE :{WHITE}Naam moet unike wees
|
||||
STR_ERROR_UNMOVABLE_OBJECT_IN_THE_WAY :{WHITE}{1:STRING} in die pad
|
||||
|
||||
@@ -3353,9 +3355,9 @@ STR_ERROR_ALREADY_LEVELLED :{WHITE}... klaa
|
||||
STR_ERROR_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Maatskappy naam kan nie verander word nie...
|
||||
STR_ERROR_CAN_T_CHANGE_PRESIDENT :{WHITE}Bestuurder se naam kan nie verander word nie...
|
||||
|
||||
STR_ERROR_MAXIMUM_PERMITTED_LOAN :{WHITE}... maksimum toegelaate lening groote is {CURRENCY}
|
||||
STR_ERROR_MAXIMUM_PERMITTED_LOAN :{WHITE}...maksimum toegelaate lening groote is {CURRENCY}
|
||||
STR_ERROR_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Kan nie meer geld leen nie...
|
||||
STR_ERROR_LOAN_ALREADY_REPAYED :{WHITE}... geen lening om terug te betaal
|
||||
STR_ERROR_LOAN_ALREADY_REPAYED :{WHITE}...geen lening om terug te betaal
|
||||
STR_ERROR_CURRENCY_REQUIRED :{WHITE}...{CURRENCY} vereis
|
||||
STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}Kan nie lening terugbetaal nie...
|
||||
STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}Kan nie geld wat van die bank geleen is weggee nie...
|
||||
@@ -3369,10 +3371,10 @@ STR_ERROR_PROTECTED :{WHITE}Die maat
|
||||
STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Kan nie enige stede bou nie
|
||||
STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Kan nie dorp hernoem nie...
|
||||
STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Dorp kan nie hier gebou word nie...
|
||||
STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... te naby aan rand van kaart
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... te naby aan 'n ander dorp
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... te veel dorpe
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... daar is nie meer spasie oor op die kaart nie
|
||||
STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}...te naby aan rand van kaart
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}...te naby aan 'n ander dorp
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}...te veel dorpe
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}...daar is nie meer spasie oor op die kaart nie
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Die dorp sal nie paaie bou nie. You can enable building of roads via Gevorderde Stellings->Ekonomie->Dorpe.
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Pad werke in verloop
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Kan nie die dorp verwyder nie... {}'n Stasie of depot verwys na die dorp of die blok wat deur die dorp besit word kan nie verwyder word nie.
|
||||
@@ -3381,16 +3383,16 @@ STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Kan nie
|
||||
STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Kan nie nywerhede genereer nie...
|
||||
STR_ERROR_CAN_T_BUILD_HERE :{WHITE}Kan nie {STRING} hier bou nie...
|
||||
STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Nywerheid tipe kan nie hier gebou word nie...
|
||||
STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... te naby aan 'n ander nywerheid
|
||||
STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... moet eers 'n dorp bou
|
||||
STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... slegs een toegelaat per dorp
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS_WITH_POPULATION_OF_1200 :{WHITE}... kan slegs in dorpe met te minste 1200 mense gebou word
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}... kan slegs in reënwoud gebiede gebou word
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}... kan slegs in woestyn gebiede gebou word
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}... kan slegs in dorpe gebou word
|
||||
STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}...te naby aan 'n ander nywerheid
|
||||
STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}...moet eers 'n dorp bou
|
||||
STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}...slegs een toegelaat per dorp
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS_WITH_POPULATION_OF_1200 :{WHITE}...kan slegs in dorpe met te minste 1200 mense gebou word
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}...kan slegs in reënwoud gebiede gebou word
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}...kan slegs in woestyn gebiede gebou word
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...kan slegs in dorpe gebou word
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_LOW_AREAS :{WHITE}... kan slegs gebou word in lae areas
|
||||
STR_ERROR_CAN_ONLY_BE_POSITIONED :{WHITE}... kan net naby aan kant van fkaart geplaas word
|
||||
STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... woud kan net bo sneeu-lyn beplant word
|
||||
STR_ERROR_CAN_ONLY_BE_POSITIONED :{WHITE}...kan net naby aan kant van fkaart geplaas word
|
||||
STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}...woud kan net bo sneeu-lyn beplant word
|
||||
|
||||
# Station construction related errors
|
||||
STR_ERROR_CAN_T_BUILD_RAILROAD_STATION :{WHITE}Kan nie spoorweg stasie hier bou nie...
|
||||
@@ -3402,8 +3404,8 @@ STR_ERROR_CAN_T_BUILD_DOCK_HERE :{WHITE}Kan nie
|
||||
STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Lughawe kan nie hier gebou word nie...
|
||||
|
||||
STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Grens aan meer as een bestaande stasie/laai area
|
||||
STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... Stasie te ver van mekaar af
|
||||
STR_ERROR_NONUNIFORM_STATIONS_DISALLOWED :{WHITE}... ongelyk stasies is versper
|
||||
STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}...Stasie te ver van mekaar af
|
||||
STR_ERROR_NONUNIFORM_STATIONS_DISALLOWED :{WHITE}...ongelyk stasies is versper
|
||||
STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Te veel stasies/laai areas
|
||||
STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Te veel treinstasie deele
|
||||
STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Te veel bushalte
|
||||
@@ -3413,8 +3415,8 @@ STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Te naby
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Te naby aan 'n ander werf
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Te naby aan 'n ander lughawe
|
||||
STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Stasie kan nie hernoem word nie...
|
||||
STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... hierdie is 'n dorp besit pad
|
||||
STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... pad teenoor in die verkeerde rigting
|
||||
STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}...hierdie is 'n dorp besit pad
|
||||
STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}...pad teenoor in die verkeerde rigting
|
||||
|
||||
# Station destruction related errors
|
||||
STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Kan nie deel van stasie verwyder nie...
|
||||
@@ -3442,8 +3444,8 @@ STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}Kan nie
|
||||
|
||||
STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}Kan nie trein wegpunt van hier werwyder nie...
|
||||
STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}Moet eers die spoor wegwyser verwyder
|
||||
STR_ERROR_BUOY_IN_THE_WAY :{WHITE}... baken in die pad
|
||||
STR_ERROR_BUOY_IS_IN_USE :{WHITE}... baken is in gebruik!
|
||||
STR_ERROR_BUOY_IN_THE_WAY :{WHITE}...baken in die pad
|
||||
STR_ERROR_BUOY_IS_IN_USE :{WHITE}...baken is in gebruik!
|
||||
|
||||
# Depot related errors
|
||||
STR_ERROR_CAN_T_BUILD_TRAIN_DEPOT :{WHITE}Kan nie trein depot hier bou nie...
|
||||
@@ -3452,7 +3454,7 @@ STR_ERROR_CAN_T_BUILD_TRAM_DEPOT :{WHITE}Kan nie
|
||||
STR_ERROR_CAN_T_BUILD_SHIP_DEPOT :{WHITE}Skip depot kan nie hier gebou word nie...
|
||||
|
||||
STR_TRAIN_MUST_BE_STOPPED :{WHITE}Trein moet binne in 'n depot gestop word
|
||||
STR_ERROR_ROAD_VEHICLE_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}... moet gestop binne 'n pad voertuig depot wees
|
||||
STR_ERROR_ROAD_VEHICLE_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}...moet gestop binne 'n pad voertuig depot wees
|
||||
STR_ERROR_SHIP_MUST_BE_STOPPED_IN_DEPOT :{WHITE}Skip moet in 'n depot gestop wees
|
||||
STR_ERROR_AIRCRAFT_MUST_BE_STOPPED :{WHITE}Vliegtuig moet in hangar gestop wees
|
||||
|
||||
@@ -3500,13 +3502,13 @@ STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Kan nie
|
||||
STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Kan nie kanaale hier bou nie...
|
||||
STR_ERROR_CAN_T_BUILD_LOCKS :{WHITE}Kan nie sluite hier bou nie...
|
||||
STR_ERROR_CAN_T_PLACE_RIVERS :{WHITE}Can nie riviere hier plaas nie...
|
||||
STR_ERROR_MUST_BE_BUILT_ON_WATER :{WHITE}... moet op water gebou word
|
||||
STR_ERROR_CAN_T_BUILD_ON_WATER :{WHITE}... Kan nie op water bou nie
|
||||
STR_ERROR_MUST_BE_BUILT_ON_WATER :{WHITE}...moet op water gebou word
|
||||
STR_ERROR_CAN_T_BUILD_ON_WATER :{WHITE}...Kan nie op water bou nie
|
||||
STR_ERROR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Moet eers kanaale afbreek
|
||||
STR_ERROR_CAN_T_BUILD_AQUEDUCT_HERE :{WHITE}Kan nie akwamaryn hier bou nie...
|
||||
|
||||
# Tree related errors
|
||||
STR_ERROR_TREE_ALREADY_HERE :{WHITE}... boom reeds daar
|
||||
STR_ERROR_TREE_ALREADY_HERE :{WHITE}...boom reeds daar
|
||||
STR_ERROR_CAN_T_PLANT_TREE_HERE :{WHITE}Kan nie boom hier beplant nie...
|
||||
|
||||
# Bridge related errors
|
||||
@@ -3516,7 +3518,7 @@ STR_ERROR_CAN_T_START_AND_END_ON :{WHITE}Kan nie
|
||||
STR_ERROR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}Brug hoofde is nie op die selfde vlak nie
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_TERRAIN :{WHITE}Brug is te laag vie die daal
|
||||
STR_ERROR_START_AND_END_MUST_BE_IN :{WHITE}Begin en einde moet in lyn wees
|
||||
STR_ERROR_ENDS_OF_BRIDGE_MUST_BOTH :{WHITE}... albei brug eindes moet op land wees
|
||||
STR_ERROR_ENDS_OF_BRIDGE_MUST_BOTH :{WHITE}...albei brug eindes moet op land wees
|
||||
|
||||
# Tunnel related errors
|
||||
STR_ERROR_CAN_T_BUILD_TUNNEL_HERE :{WHITE}Tonnel kan nie daar gebou word nie...
|
||||
@@ -3616,7 +3618,7 @@ STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... 'n v
|
||||
|
||||
STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}Kan nie opdraglys deel nie...
|
||||
STR_ERROR_CAN_T_COPY_ORDER_LIST :{WHITE}Kan nie opdrag lys kopie nie...
|
||||
STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION :{WHITE}... te ver van vorige destinasie
|
||||
STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION :{WHITE}...te ver van vorige destinasie
|
||||
|
||||
# Timetable related errors
|
||||
STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Kan nie voertuig 'n rooster gee nie...
|
||||
@@ -3624,7 +3626,7 @@ STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Voertuie
|
||||
STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Die voertuig stop nie by die stasie nie.
|
||||
|
||||
# Sign related errors
|
||||
STR_ERROR_TOO_MANY_SIGNS :{WHITE}... te veel tekens
|
||||
STR_ERROR_TOO_MANY_SIGNS :{WHITE}...te veel tekens
|
||||
STR_ERROR_CAN_T_PLACE_SIGN_HERE :{WHITE}Kan nie teken hier plaas nie...
|
||||
STR_ERROR_CAN_T_CHANGE_SIGN_NAME :{WHITE}Kan nie teken naam verander nie...
|
||||
STR_ERROR_CAN_T_DELETE_SIGN :{WHITE}Kan nie teken verwyder nie
|
||||
@@ -4108,5 +4110,3 @@ STR_BUS :{BLACK}{BUS}
|
||||
STR_LORRY :{BLACK}{LORRY}
|
||||
STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
@@ -737,11 +737,11 @@ STR_NEWS_MESSAGE_TYPE_SUBSIDIES :{YELLOW}الع
|
||||
STR_NEWS_MESSAGE_TYPE_GENERAL_INFORMATION :{YELLOW}معلومات عامة
|
||||
|
||||
STR_NEWS_FIRST_TRAIN_ARRIVAL :{BIGFONT}{BLACK} ... المواطنون يحتفلون{} اول قطار وصل في {STATION}!
|
||||
STR_NEWS_FIRST_BUS_ARRIVAL :{BIGFONT}{BLACK}يحتفل الأهالي ...{}بوصول اول باص للمحطة ...{STATION}!
|
||||
STR_NEWS_FIRST_TRUCK_ARRIVAL :{BIGFONT}{BLACK}الأهالي يحتفلون ... {}بوصول اول عربة الى .. {STATION}!
|
||||
STR_NEWS_FIRST_BUS_ARRIVAL :{BIGFONT}{BLACK}يحتفل الأهالي ..............{}بوصول اول باص للمحطة ...{STATION}!
|
||||
STR_NEWS_FIRST_TRUCK_ARRIVAL :{BIGFONT}{BLACK}الأهالي يحتفلون ......... {}بوصول اول عربة الى .. {STATION}!
|
||||
STR_NEWS_FIRST_PASSENGER_TRAM_ARRIVAL :{BIGFONT}{BLACK}المواطنون يحتفلون . . .{}بوصول اول عربة ركاب ترام الى {STATION}!
|
||||
STR_NEWS_FIRST_CARGO_TRAM_ARRIVAL :{BIGFONT}{BLACK}المواطنون يحتفلون . . . {}بوصول اول عربة ترام لمحطة {STATION}!
|
||||
STR_NEWS_FIRST_SHIP_ARRIVAL :{BIGFONT}{BLACK}المواطنون يحتفلون ... {}بوصول اول سفينة الى {STATION}!
|
||||
STR_NEWS_FIRST_SHIP_ARRIVAL :{BIGFONT}{BLACK}المواطنون يحتفلون ..... {}بوصول اول سفينة الى {STATION}!
|
||||
STR_NEWS_FIRST_AIRCRAFT_ARRIVAL :{BIGFONT}{BLACK}الأهالي يحتفلون . . . {}بوصول أول طائرة الى {STATION}!
|
||||
|
||||
STR_NEWS_TRAIN_CRASH :{BIGFONT}{BLACK}تحطم قطار! {}{COMMA} مات في حريق بعد الحادث
|
||||
@@ -811,8 +811,8 @@ STR_NEWS_TRAIN_IS_STUCK :{WHITE}{VEHICLE
|
||||
STR_NEWS_TRAIN_IS_LOST :{WHITE}{VEHICLE} تائه
|
||||
STR_NEWS_VEHICLE_IS_UNPROFITABLE :{WHITE}{VEHICLE} دخل العربة السنة السابقة {CURRENCY}
|
||||
|
||||
STR_NEWS_ORDER_REFIT_FAILED :{WHITE}امرالاستبدال توقف {VEHICLE}
|
||||
STR_NEWS_VEHICLE_AUTORENEW_FAILED :{WHITE}فشل تطبيق الاستبدال الذاتي ل{VEHICLE}{}{STRING}
|
||||
STR_NEWS_ORDER_REFIT_FAILED :{WHITE} امرالاستبدال توقف {VEHICLE}
|
||||
STR_NEWS_VEHICLE_AUTORENEW_FAILED :{WHITE} فشل تطبيق الاستبدال الذاتي ل{VEHICLE}{}{STRING}
|
||||
|
||||
STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIGFONT}{BLACK}جديد {STRING}الآن متاحة !
|
||||
STR_NEWS_NEW_VEHICLE_TYPE :{BIGFONT}{BLACK}{ENGINE}
|
||||
@@ -1098,6 +1098,7 @@ STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE :بدون
|
||||
STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL :ككل المصانع الأخرى
|
||||
STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :تنقيب
|
||||
STR_CONFIG_SETTING_MULTIPINDTOWN :{LTBLUE}السماح بوجود اكثر من مصنع من نفس النوع في المدينة الواحدة: {ORANGE}{STRING}
|
||||
STR_CONFIG_SETTING_SAMEINDCLOSE :{LTBLUE}من الممكن بناء مصانع من نفس النوع بجوار بعض: {ORANGE}{STRING}
|
||||
STR_CONFIG_SETTING_LONGDATE :{LTBLUE}استخدام التاريخ الطويل في لوحة العرض دائما: {ORANGE}{STRING}
|
||||
STR_CONFIG_SETTING_SIGNALSIDE :{LTBLUE}اظهار الاشارات على جهة السائق: {ORANGE}{STRING}
|
||||
STR_CONFIG_SETTING_SHOWFINANCES :{LTBLUE}أعرض نافذة المالية في آخر السنه: {ORANGE}{STRING}
|
||||
@@ -1122,7 +1123,7 @@ STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :{LTBLUE}الس
|
||||
STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :{LTBLUE} السماح بمرور العربات خلال المحطات المملوكة للمنافسين: {ORANGE}{STRING}
|
||||
STR_CONFIG_SETTING_ADJACENT_STATIONS :{LTBLUE}السماح ببناء محطات متلاصقة{ORANGE}{STRING}
|
||||
STR_CONFIG_SETTING_DYNAMIC_ENGINES :{LTBLUE}السماح بتعدد محركات NewGFR {ORANGE}{STRING}
|
||||
STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}تغير هذا الخيار غير متاح عندما يكون هناك عربات
|
||||
STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE} تغير هذا الخيار غير متاح عندما يكون هناك عربات
|
||||
|
||||
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :{LTBLUE} المطارات لا تنتهي صلاحيتها {ORANGE}{STRING}
|
||||
|
||||
@@ -1158,8 +1159,8 @@ STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :عكس عقار
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :مع عقارب الساعة
|
||||
STR_CONFIG_SETTING_SE_FLAT_WORLD_HEIGHT :{LTBLUE}الأرتفاع الأعلى في محرر الخريطة لسطح المستوي: {ORANGE}{STRING}
|
||||
STR_CONFIG_SETTING_ENABLE_FREEFORM_EDGES :{LTBLUE} السماح بالحدود الحرة للخريطة: {ORANGE} {STRING}
|
||||
STR_CONFIG_SETTING_EDGES_NOT_EMPTY :{WHITE}مربع او اكثر غير فارغ في الحدود الشمالية
|
||||
STR_CONFIG_SETTING_EDGES_NOT_WATER :{WHITE}مربع او اكثر من حدود الخريطة لا يكون بحر
|
||||
STR_CONFIG_SETTING_EDGES_NOT_EMPTY :{WHITE} مربع او اكثر غير فارغ في الحدود الشمالية
|
||||
STR_CONFIG_SETTING_EDGES_NOT_WATER :{WHITE} مربع او اكثر من حدود الخريطة لا يكون بحر
|
||||
|
||||
STR_CONFIG_SETTING_STATION_SPREAD :{LTBLUE}أكبر توسع للمحطه: {ORANGE}{STRING} {RED}تحذير: الإعدادات العاليه تبطئ اللعبه
|
||||
STR_CONFIG_SETTING_SERVICEATHELIPAD :{LTBLUE}صيانة الهيلوكبتر في مهبطها تلقائيا: {ORANGE}{STRING}
|
||||
@@ -1679,8 +1680,8 @@ STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}الشر
|
||||
|
||||
# Network company list added strings
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}قائمة العملاء
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}شاهد
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}شركة جديدة
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE} شاهد
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE} شركة جديدة
|
||||
|
||||
# Network client list
|
||||
STR_NETWORK_CLIENTLIST_KICK :اطرد
|
||||
@@ -1694,7 +1695,7 @@ STR_NETWORK_SERVER :خادم
|
||||
STR_NETWORK_CLIENT :عميل
|
||||
STR_NETWORK_SPECTATORS :المشاهدين
|
||||
|
||||
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}ادخل قدر المال الذي تود اعطائه
|
||||
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE} ادخل قدر المال الذي تود اعطائه
|
||||
|
||||
# Network set password
|
||||
STR_COMPANY_PASSWORD_CANCEL :{BLACK}لا تحفظ كلمة المرور المدخلة
|
||||
@@ -1724,23 +1725,23 @@ STR_NETWORK_CHAT_ALL :[الكل] {STR
|
||||
STR_NETWORK_CHAT_OSKTITLE :{BLACK}ادخل نص للمحادثة
|
||||
|
||||
# Network messages
|
||||
STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}لايوجد أجهزة شبكة او الشبكة معطلة
|
||||
STR_NETWORK_ERROR_NOSERVER :{WHITE}لايوجد ألعاب شبكة
|
||||
STR_NETWORK_ERROR_NOCONNECTION :{WHITE}الخادم لم يجب على الطلب
|
||||
STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE}لم يتم الربط بسبب عدم توافق NewGFR
|
||||
STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE} لايوجد أجهزة شبكة او الشبكة معطلة
|
||||
STR_NETWORK_ERROR_NOSERVER :{WHITE} لايوجد ألعاب شبكة
|
||||
STR_NETWORK_ERROR_NOCONNECTION :{WHITE} الخادم لم يجب على الطلب
|
||||
STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE} لم يتم الربط بسبب عدم توافق NewGFR
|
||||
STR_NETWORK_ERROR_DESYNC :{WHITE}فشل تحديث البيانات
|
||||
STR_NETWORK_ERROR_LOSTCONNECTION :{WHITE}انقطع الاتصال بلعبة الشبكة
|
||||
STR_NETWORK_ERROR_SAVEGAMEERROR :{WHITE}لايمكن تحميل اللعبة المخزنة
|
||||
STR_NETWORK_ERROR_SERVER_START :{WHITE}لايمكن بدء الخادم
|
||||
STR_NETWORK_ERROR_CLIENT_START :{WHITE}لايمكن الإتصال
|
||||
STR_NETWORK_ERROR_TIMEOUT :{WHITE}الاتصال رقم # {NUM}انهى الوقت المتاح للربط
|
||||
STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}حدث خطأ في البروتوكول و انقطع الاتصال
|
||||
STR_NETWORK_ERROR_LOSTCONNECTION :{WHITE} انقطع الاتصال بلعبة الشبكة
|
||||
STR_NETWORK_ERROR_SAVEGAMEERROR :{WHITE} لايمكن تحميل اللعبة المخزنة
|
||||
STR_NETWORK_ERROR_SERVER_START :{WHITE} لايمكن بدء الخادم
|
||||
STR_NETWORK_ERROR_CLIENT_START :{WHITE} لايمكن الإتصال
|
||||
STR_NETWORK_ERROR_TIMEOUT :{WHITE} الاتصال رقم # {NUM}انهى الوقت المتاح للربط
|
||||
STR_NETWORK_ERROR_SERVER_ERROR :{WHITE} حدث خطأ في البروتوكول و انقطع الاتصال
|
||||
STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}نسخة اللاعب غير مطابقة لنسخة الخادم
|
||||
STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}رقم سري خاطئ
|
||||
STR_NETWORK_ERROR_SERVER_FULL :{WHITE}الخادم ممتلئ
|
||||
STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}أنت ممنوع من هذا الخادم
|
||||
STR_NETWORK_ERROR_KICKED :{WHITE}لقد طردت من اللعبة
|
||||
STR_NETWORK_ERROR_CHEATER :{WHITE}الغش ليس مسموحا به في هذه اللعبة
|
||||
STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE} رقم سري خاطئ
|
||||
STR_NETWORK_ERROR_SERVER_FULL :{WHITE} الخادم ممتلئ
|
||||
STR_NETWORK_ERROR_SERVER_BANNED :{WHITE} أنت ممنوع من هذا الخادم
|
||||
STR_NETWORK_ERROR_KICKED :{WHITE} لقد طردت من اللعبة
|
||||
STR_NETWORK_ERROR_CHEATER :{WHITE} الغش ليس مسموحا به في هذه اللعبة
|
||||
|
||||
############ Leave those lines in this order!!
|
||||
STR_NETWORK_ERROR_CLIENT_GENERAL :خطاء عام
|
||||
@@ -1783,10 +1784,10 @@ STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} ق
|
||||
STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} اعطى شركتك : {2:CURRENCY}
|
||||
STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** انت اعطيت {1:STRING} {2:CURRENCY}
|
||||
STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}اقفل الخادم الجلسة
|
||||
STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}يتم بدأ الخادم من جديد ... {} الرجاء الأنتظار
|
||||
STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE} يتم بدأ الخادم من جديد ... {} الرجاء الأنتظار
|
||||
|
||||
# Content downloading window
|
||||
STR_CONTENT_TITLE :{WHITE}تحميل المحتوى
|
||||
STR_CONTENT_TITLE :{WHITE} تحميل المحتوى
|
||||
STR_CONTENT_TYPE_CAPTION :{BLACK} نوع
|
||||
STR_CONTENT_TYPE_CAPTION_TOOLTIP :{BLACK} نوع المحتوى
|
||||
STR_CONTENT_NAME_CAPTION :{BLACK} الاسم
|
||||
@@ -1809,17 +1810,17 @@ STR_CONTENT_DETAIL_SUBTITLE_AUTOSELECTED :{SILVER} هذا
|
||||
STR_CONTENT_DETAIL_SUBTITLE_ALREADY_HERE :{SILVER} هذا المحتوى موجود لديك مسبقا
|
||||
STR_CONTENT_DETAIL_SUBTITLE_DOES_NOT_EXIST :{SILVER} المحتوى غير معروف و لن يتم تحميلة على النسخة المفتوحة
|
||||
STR_CONTENT_DETAIL_UPDATE :{SILVER} هذا استبدال للملف الموجود {STRING}
|
||||
STR_CONTENT_DETAIL_NAME :{SILVER} الاسم: {WHITE}{STRING}
|
||||
STR_CONTENT_DETAIL_VERSION :{SILVER} النسخة: {WHITE}{STRING}
|
||||
STR_CONTENT_DETAIL_DESCRIPTION :{SILVER} الوصف : {WHITE}{STRING}
|
||||
STR_CONTENT_DETAIL_URL :{SILVER} عنوان النت: {WHITE}{STRING}
|
||||
STR_CONTENT_DETAIL_TYPE :{SILVER} النوع: {WHITE}{STRING}
|
||||
STR_CONTENT_DETAIL_FILESIZE :{SILVER} حجم التحميل: {WHITE}{BYTES}
|
||||
STR_CONTENT_DETAIL_SELECTED_BECAUSE_OF :{SILVER} اختير بسبب: {WHITE}{STRING}
|
||||
STR_CONTENT_DETAIL_DEPENDENCIES :{SILVER} الاعتمادية: {WHITE}{STRING}
|
||||
STR_CONTENT_DETAIL_TAGS :{SILVER} الاسم الرمزي: {WHITE}{STRING}
|
||||
STR_CONTENT_NO_ZLIB :{WHITE}النسخة المفتوحة بنيت بدون دعم zlib ...
|
||||
STR_CONTENT_NO_ZLIB_SUB :{WHITE}تحميل محتويات zlib غير ممكن
|
||||
STR_CONTENT_DETAIL_NAME :{SILVER} الاسم: {WHITE} {STRING}
|
||||
STR_CONTENT_DETAIL_VERSION :{SILVER} النسخة: {WHITE} {STRING}
|
||||
STR_CONTENT_DETAIL_DESCRIPTION :{SILVER} الوصف : {WHITE} {STRING}
|
||||
STR_CONTENT_DETAIL_URL :{SILVER} عنوان النت: {WHITE} {STRING}
|
||||
STR_CONTENT_DETAIL_TYPE :{SILVER} النوع: {WHITE} {STRING}
|
||||
STR_CONTENT_DETAIL_FILESIZE :{SILVER} حجم التحميل: {WHITE} {BYTES}
|
||||
STR_CONTENT_DETAIL_SELECTED_BECAUSE_OF :{SILVER} اختير بسبب: {WHITE} {STRING}
|
||||
STR_CONTENT_DETAIL_DEPENDENCIES :{SILVER} الاعتمادية: {WHITE} {STRING}
|
||||
STR_CONTENT_DETAIL_TAGS :{SILVER} الاسم الرمزي: {WHITE} {STRING}
|
||||
STR_CONTENT_NO_ZLIB :{WHITE} النسخة المفتوحة بنيت بدون دعم zlib ...
|
||||
STR_CONTENT_NO_ZLIB_SUB :{WHITE} تحميل محتويات zlib غير ممكن
|
||||
|
||||
# Order of these is important!
|
||||
STR_CONTENT_TYPE_BASE_GRAPHICS :الرسوميات الاساسية
|
||||
@@ -1832,18 +1833,18 @@ STR_CONTENT_TYPE_BASE_SOUNDS :الاصوات
|
||||
STR_CONTENT_TYPE_BASE_MUSIC :الموسيقى الاساسية
|
||||
|
||||
# Content downloading progress window
|
||||
STR_CONTENT_DOWNLOAD_TITLE :{WHITE}يتم التحميل الان ...
|
||||
STR_CONTENT_DOWNLOAD_INITIALISE :{WHITE}يتم طلب الملفات ...
|
||||
STR_CONTENT_DOWNLOAD_FILE :{WHITE}يتم تحميل {STRING} - {NUM} من {NUM}
|
||||
STR_CONTENT_DOWNLOAD_COMPLETE :{WHITE}انتهى التحميل
|
||||
STR_CONTENT_DOWNLOAD_TITLE :{WHITE} يتم التحميل الان ...
|
||||
STR_CONTENT_DOWNLOAD_INITIALISE :{WHITE} يتم طلب الملفات ...
|
||||
STR_CONTENT_DOWNLOAD_FILE :{WHITE} يتم تحميل {STRING} - {NUM} من {NUM}
|
||||
STR_CONTENT_DOWNLOAD_COMPLETE :{WHITE} انتهى التحميل
|
||||
STR_CONTENT_DOWNLOAD_PROGRESS_SIZE :{WHITE}{BYTES} من {BYTES} {NUM} %
|
||||
|
||||
# Content downloading error messages
|
||||
STR_CONTENT_ERROR_COULD_NOT_CONNECT :{WHITE}لم يتم الربط مع خادم المحتوى
|
||||
STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD :{WHITE}فشل التحميل ...
|
||||
STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD_CONNECTION_LOST :{WHITE}... فقد الربط بالخادم
|
||||
STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD_FILE_NOT_WRITABLE :{WHITE}... لا يمكن الكتابة على الملف
|
||||
STR_CONTENT_ERROR_COULD_NOT_EXTRACT :{WHITE}لم يتمكن من فك الضغط للملف المحمل
|
||||
STR_CONTENT_ERROR_COULD_NOT_CONNECT :{WHITE} لم يتم الربط مع خادم المحتوى
|
||||
STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD :{WHITE} فشل التحميل ...
|
||||
STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD_CONNECTION_LOST :{WHITE} ... فقد الربط بالخادم
|
||||
STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD_FILE_NOT_WRITABLE :{WHITE} ... لا يمكن الكتابة على الملف
|
||||
STR_CONTENT_ERROR_COULD_NOT_EXTRACT :{WHITE} لم يتمكن من فك الضغط للملف المحمل
|
||||
|
||||
# Transparency settings window
|
||||
STR_TRANSPARENCY_CAPTION :{WHITE}خيارات الشفافية
|
||||
@@ -1868,10 +1869,10 @@ STR_STATION_BUILD_ACCEPTS_CARGO :{GOLD}{STRING}{
|
||||
STR_STATION_BUILD_SUPPLIES_CARGO :{GOLD}{STRING}{BLACK}الموارد:
|
||||
|
||||
# Join station window
|
||||
STR_JOIN_STATION_CAPTION :{WHITE}اربط المحطات
|
||||
STR_JOIN_STATION_CAPTION :{WHITE} اربط المحطات
|
||||
STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW} بناء محطة مفصلة
|
||||
|
||||
STR_JOIN_WAYPOINT_CAPTION :{WHITE}اربط نقطة العبور
|
||||
STR_JOIN_WAYPOINT_CAPTION :{WHITE} اربط نقطة العبور
|
||||
STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW} ابني نقطة عبور مستقلة
|
||||
|
||||
# Rail construction toolbar
|
||||
@@ -1896,11 +1897,11 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_CAPTION :{WHITE}اتجا
|
||||
STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}اختر اتجاة ورشة صيانة القطارات
|
||||
|
||||
# Rail waypoint construction window
|
||||
STR_WAYPOINT_CAPTION :{WHITE}نقطة عبور
|
||||
STR_WAYPOINT_CAPTION :{WHITE} نقطة عبور
|
||||
STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK} اختر نوع نقطة العبور
|
||||
|
||||
# Rail station construction window
|
||||
STR_STATION_BUILD_RAIL_CAPTION :{WHITE}اختر محطة القطار
|
||||
STR_STATION_BUILD_RAIL_CAPTION :{WHITE} اختر محطة القطار
|
||||
STR_STATION_BUILD_ORIENTATION :{BLACK}الاتجاة
|
||||
STR_STATION_BUILD_RAILROAD_ORIENTATION_TOOLTIP :{BLACK}اختر اتجاة محطة القطار
|
||||
STR_STATION_BUILD_NUMBER_OF_TRACKS :{BLACK}عدد المسارات
|
||||
@@ -1978,7 +1979,7 @@ STR_BUILD_DEPOT_TRAM_ORIENTATION_CAPTION :{WHITE}اتجا
|
||||
STR_BUILD_DEPOT_TRAM_ORIENTATION_SELECT_TOOLTIP :{BLACK}اختر اتجاة مستودع الترام
|
||||
|
||||
# Road vehicle station construction window
|
||||
STR_STATION_BUILD_BUS_ORIENTATION :{WHITE}اتجاة محطة الباصات
|
||||
STR_STATION_BUILD_BUS_ORIENTATION :{WHITE} اتجاة محطة الباصات
|
||||
STR_STATION_BUILD_BUS_ORIENTATION_TOOLTIP :{BLACK}اختر اتجاة محطة الباصات
|
||||
STR_STATION_BUILD_TRUCK_ORIENTATION :{WHITE}اتجاة محطة التحميل للعربات
|
||||
STR_STATION_BUILD_TRUCK_ORIENTATION_TOOLTIP :{BLACK}اختر اتجاة محطة تحميل العربات
|
||||
@@ -2039,7 +2040,7 @@ STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}مستو
|
||||
STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}شاء ارض للأستخدام المستقبلي
|
||||
|
||||
# Tree planting window (last two for SE only)
|
||||
STR_PLANT_TREE_CAPTION :{WHITE}اشجار
|
||||
STR_PLANT_TREE_CAPTION :{WHITE} اشجار
|
||||
STR_PLANT_TREE_TOOLTIP :{BLACK} اختر نوع الشجر لزراعتة
|
||||
STR_TREES_RANDOM_TYPE :{BLACK}شجر عشوائي
|
||||
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}ضع شجر عشوائي
|
||||
@@ -2123,7 +2124,6 @@ STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}نوع
|
||||
STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING}
|
||||
STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}الشحنة المقبولة: {LTBLUE}
|
||||
STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA} /8 {STRING})
|
||||
STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}حدود سرعة سكة الحديد: {LTBLUE}{VELOCITY}
|
||||
|
||||
# Description of land area of different tiles
|
||||
STR_LAI_CLEAR_DESCRIPTION_ROCKS :صخور
|
||||
@@ -2240,7 +2240,7 @@ STR_SAVELOAD_SAVE_TOOLTIP :{BLACK}احفظ
|
||||
STR_SAVELOAD_OSKTITLE :{BLACK}ادخل اسم الحفظ للعبة
|
||||
|
||||
# World generation
|
||||
STR_MAPGEN_WORLD_GENERATION_CAPTION :{WHITE}مولد الخريطة
|
||||
STR_MAPGEN_WORLD_GENERATION_CAPTION :{WHITE} مولد الخريطة
|
||||
STR_MAPGEN_MAPSIZE :{BLACK}حجم الخريطة
|
||||
STR_MAPGEN_BY :{BLACK}*
|
||||
STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}عدد المدن:
|
||||
@@ -2279,12 +2279,12 @@ STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}الحج
|
||||
STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} * {NUM}
|
||||
|
||||
STR_MAPGEN_RANDOM_SEED_OSKTITLE :{BLACK}ادخل مرجع عشوائي
|
||||
STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}غير مستوى خط الثلج
|
||||
STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}غير سنة البداية
|
||||
STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE} غير مستوى خط الثلج
|
||||
STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE} غير سنة البداية
|
||||
|
||||
# SE Map generation
|
||||
STR_SE_MAPGEN_CAPTION :{WHITE}نوع الخريطة
|
||||
STR_SE_MAPGEN_FLAT_WORLD :{WHITE}سطح مسطح مستوي
|
||||
STR_SE_MAPGEN_CAPTION :{WHITE} نوع الخريطة
|
||||
STR_SE_MAPGEN_FLAT_WORLD :{WHITE} سطح مسطح مستوي
|
||||
STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}توليد سطح مسطح
|
||||
STR_SE_MAPGEN_RANDOM_LAND :{WHITE}ارض عشوائية
|
||||
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}ارتفاع الأرض المنبسطة
|
||||
@@ -2309,7 +2309,7 @@ STR_GENERATION_PREPARING_TILELOOP :{BLACK} تشغ
|
||||
STR_GENERATION_PREPARING_GAME :{BLACK}يتك تجهيز اللعبة
|
||||
|
||||
# NewGRF settings
|
||||
STR_NEWGRF_SETTINGS_CAPTION :{WHITE}اعدادات NewGRF
|
||||
STR_NEWGRF_SETTINGS_CAPTION :{WHITE} اعدادات NewGRF
|
||||
STR_NEWGRF_SETTINGS_PRESET_LIST_TOOLTIP :{BLACK}فتح مجموعة الاعدادات المسجلة
|
||||
STR_NEWGRF_SETTINGS_PRESET_SAVE :{BLACK}حفظ مجموعة الاعدادات
|
||||
STR_NEWGRF_SETTINGS_PRESET_SAVE_TOOLTIP :{BLACK}حفظ القائمة الحالية كمجموعة اعدادات
|
||||
@@ -2345,6 +2345,8 @@ STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}لم يت
|
||||
STR_NEWGRF_SETTINGS_DISABLED :{RED}معطل
|
||||
|
||||
STR_NEWGRF_SETTINGS_PARAMETER_QUERY :{BLACK}ادخل اعدادات NewGRF
|
||||
|
||||
# NewGRF add window
|
||||
STR_NEWGRF_ADD_CAPTION :{WHITE}ملفات NewGFR المتاحة
|
||||
STR_NEWGRF_ADD_FILE :{BLACK}اضف الى الخيارات
|
||||
STR_NEWGRF_ADD_FILE_TOOLTIP :{BLACK}اضف ملف NewGFR المختار الى اعداداتك الخاصة
|
||||
@@ -2389,10 +2391,10 @@ STR_NEWGRF_UNPAUSE_WARNING :{WHITE}عدم
|
||||
# NewGRF 'it's broken' warnings
|
||||
STR_NEWGRF_BROKEN :{WHITE}حركات NewGFR '{0:STRING}'قد تتسبب في اخطاء او توقف للعبة
|
||||
STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}يغير طول العربة من '{1:ENGINE}' عندما تكون داخل المستودع
|
||||
STR_BROKEN_VEHICLE_LENGTH :{WHITE}قطار '{VEHICLE}' المملوك ل'{COMPANY}' لدية طول غير مسرح . غالبا نتج عن مشكلة في NewGRF. اللعبة قد تتوقف او تتعطل .
|
||||
STR_BROKEN_VEHICLE_LENGTH :{WHITE} قطار '{VEHICLE}' المملوك ل'{COMPANY}' لدية طول غير مسرح . غالبا نتج عن مشكلة في NewGRF. اللعبة قد تتوقف او تتعطل .
|
||||
|
||||
STR_NEWGRF_BUGGY :{WHITE}الرسوميات الجديدة '{0:STRING}' تعطي معلومات غير صحيحة.
|
||||
STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}التكلفة \ السعة ل '{1:ENGINE}' تختلف ما بين قائمة الشراء و مابعد البناء. قد يتسبب هذا في فشل التبديل الذاتي.
|
||||
STR_NEWGRF_BUGGY :{WHITE} الرسوميات الجديدة '{0:STRING}' تعطي معلومات غير صحيحة.
|
||||
STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE} التكلفة \ السعة ل '{1:ENGINE}' تختلف ما بين قائمة الشراء و مابعد البناء. قد يتسبب هذا في فشل التبديل الذاتي.
|
||||
STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' تسبب بدورة غير منتهية في نداء الانتاج
|
||||
|
||||
# Sign list window
|
||||
@@ -2436,7 +2438,7 @@ STR_TOWN_VIEW_DELETE_TOOLTIP :{BLACK}حذف
|
||||
STR_TOWN_VIEW_RENAME_TOWN_BUTTON :اعادة تسمية
|
||||
|
||||
# Town local authority window
|
||||
STR_LOCAL_AUTHORITY_CAPTION :{WHITE}بلدية {TOWN}
|
||||
STR_LOCAL_AUTHORITY_CAPTION :{WHITE} بلدية {TOWN}
|
||||
STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}تقييم اداء الشركات
|
||||
STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANYNUM}: {ORANGE}{STRING}
|
||||
STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}الخيارات المتاحة
|
||||
@@ -2529,7 +2531,7 @@ STR_EDIT_WAYPOINT_NAME :{WHITE}عدل
|
||||
|
||||
# Finances window
|
||||
STR_FINANCES_CAPTION :{WHITE}{COMPANY} {BLACK} {COMPANYNUM} سجل المحاسبة
|
||||
STR_FINANCES_EXPENDITURE_INCOME_TITLE :{WHITE}المصروفات / الدخل
|
||||
STR_FINANCES_EXPENDITURE_INCOME_TITLE :{WHITE} المصروفات / الدخل
|
||||
STR_FINANCES_YEAR :{WHITE}{NUM}
|
||||
STR_FINANCES_SECTION_CONSTRUCTION :{GOLD}البناء
|
||||
STR_FINANCES_SECTION_NEW_VEHICLES :{GOLD}العربات الجديدة
|
||||
@@ -2569,7 +2571,7 @@ STR_COMPANY_VIEW_AIRCRAFT :{WHITE}{COMMA}
|
||||
STR_COMPANY_VIEW_SHIPS :{WHITE}{COMMA} سفينة
|
||||
STR_COMPANY_VIEW_VEHICLES_NONE :{WHITE}بدون
|
||||
STR_COMPANY_VIEW_COMPANY_VALUE :{GOLD}قيمة الشركة: {WHITE}{CURRENCY}
|
||||
STR_COMPANY_VIEW_SHARES_OWNED_BY :{WHITE}( {COMMA}% مملوكة بواسطة {COMPANY})
|
||||
STR_COMPANY_VIEW_SHARES_OWNED_BY :{WHITE} ( {COMMA}% مملوكة بواسطة {COMPANY})
|
||||
|
||||
STR_COMPANY_VIEW_BUILD_HQ_BUTTON :{BLACK}بناء مقر الشركة الرئيسي
|
||||
STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}ابني مقر الشركة
|
||||
@@ -2658,7 +2660,7 @@ STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :توجة الى
|
||||
STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP :{BLACK}اضغط لايقاف جميع العربات في القائمة
|
||||
STR_VEHICLE_LIST_MASS_START_LIST_TOOLTIP :{BLACK}اضغط لتشغيل جميع العربات في القائمة
|
||||
|
||||
STR_VEHICLE_LIST_SHARED_ORDERS_LIST_CAPTION :{WHITE}مشاركة الاوامر لـ {COMMA} عربة
|
||||
STR_VEHICLE_LIST_SHARED_ORDERS_LIST_CAPTION :{WHITE} مشاركة الاوامر لـ {COMMA} عربة
|
||||
|
||||
# Group window
|
||||
STR_GROUP_ALL_TRAINS :جميع القطارات
|
||||
@@ -2737,7 +2739,7 @@ STR_BUY_VEHICLE_SHIP_RENAME_TOOLTIP :{BLACK}اعاد
|
||||
STR_BUY_VEHICLE_AIRCRAFT_RENAME_TOOLTIP :{BLACK}اعادة تسمية نوع الطائرة
|
||||
|
||||
STR_QUERY_RENAME_TRAIN_TYPE_CAPTION :{WHITE}اعادة تسمية عربات القطار
|
||||
STR_QUERY_RENAME_ROAD_VEHICLE_TYPE_CAPTION :{WHITE}اعادة تسمية العربة
|
||||
STR_QUERY_RENAME_ROAD_VEHICLE_TYPE_CAPTION :{WHITE} اعادة تسمية العربة
|
||||
STR_QUERY_RENAME_SHIP_TYPE_CAPTION :{WHITE}اعادة تسمية نوع السفينة
|
||||
STR_QUERY_RENAME_AIRCRAFT_TYPE_CAPTION :{WHITE}اعادة تسمية نوع الطائرة
|
||||
|
||||
@@ -2832,7 +2834,7 @@ STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAPACITY_CAPACITY_RUNCOST :{BLACK} الت
|
||||
STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAPACITY_RUNCOST :{BLACK} التكلفة {CURRENCY} السرعة القصوى {VELOCITY}{} السعة {CARGO}{} كلفة التشغيل {CURRENCY} / سنة
|
||||
|
||||
# Autoreplace window
|
||||
STR_REPLACE_VEHICLES_WHITE :{WHITE}تبديل {STRING}
|
||||
STR_REPLACE_VEHICLES_WHITE :{WHITE} تبديل {STRING}
|
||||
STR_REPLACE_VEHICLE_TRAIN :قطار
|
||||
STR_REPLACE_VEHICLE_ROAD_VEHICLE :مركبات
|
||||
STR_REPLACE_VEHICLE_SHIP :سفن
|
||||
@@ -3208,7 +3210,7 @@ STR_DATE_YEAR_TOOLTIP :{BLACK}اختر
|
||||
|
||||
|
||||
# AI debug window
|
||||
STR_AI_DEBUG :{WHITE}مكتشف اخطاء الذكاء الصناعي
|
||||
STR_AI_DEBUG :{WHITE} مكتشف اخطاء الذكاء الصناعي
|
||||
STR_AI_DEBUG_NAME_AND_VERSION :{BLACK}{STRING} (v{NUM})
|
||||
STR_AI_DEBUG_NAME_TOOLTIP :{BLACK} اسم الذكاء الصناعي
|
||||
STR_AI_DEBUG_SETTINGS :{BLACK}اعدادات الذكاء الاصطناعي
|
||||
@@ -3220,11 +3222,11 @@ STR_ERROR_NO_AI :{WHITE}تم ب
|
||||
STR_ERROR_NO_AI_SUB :{WHITE}... لا يوجد ذكاء اصطناعي متاح!
|
||||
|
||||
STR_ERROR_AI_NO_AI_FOUND :لا يوجد اضافات مناسبة للتحميل {} هذه اضافة غبية ولن تفعل شيئا لك {} تستطيع تحميل اضافات من الشبكة عن طريق نظام التحميل
|
||||
STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}واحد من الذكاء الصناعي فشل. الرجاء ابلاغ المبرمج عنه مصحوبا بصورة من شاشة مصحح الاخطاء.
|
||||
STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE} واحد من الذكاء الصناعي فشل. الرجاء ابلاغ المبرمج عنه مصحوبا بصورة من شاشة مصحح الاخطاء.
|
||||
STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW} شاشة اخطاء الذكاء الصناعي متوفرة فقط في الخادم
|
||||
|
||||
# AI configuration window
|
||||
STR_AI_CONFIG_CAPTION :{WHITE}اعداد الذكاء الصناعي
|
||||
STR_AI_CONFIG_CAPTION :{WHITE} اعداد الذكاء الصناعي
|
||||
STR_AI_CONFIG_LIST_TOOLTIP :{BLACK} كل الذكاء الصناعي سوف يحمل في اللعبة التالية
|
||||
STR_AI_CONFIG_HUMAN_PLAYER :لاعب انساني
|
||||
STR_AI_CONFIG_RANDOM_AI :ذكاء صناعي عشوائي
|
||||
@@ -3240,7 +3242,7 @@ STR_AI_CONFIG_CONFIGURE :{BLACK} اعد
|
||||
STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK} اعداد خواص الذكاء الصناعي
|
||||
|
||||
# Available AIs window
|
||||
STR_AI_LIST_CAPTION :{WHITE}الذكاء الصناعي المتاح
|
||||
STR_AI_LIST_CAPTION :{WHITE} الذكاء الصناعي المتاح
|
||||
STR_AI_LIST_TOOLTIP :{BLACK} اضغط لاختيار ذكاء اصطناعي
|
||||
|
||||
STR_AI_LIST_AUTHOR :{BLACK}المؤلف: {STRING}
|
||||
@@ -3253,7 +3255,7 @@ STR_AI_LIST_CANCEL :{BLACK} الغ
|
||||
STR_AI_LIST_CANCEL_TOOLTIP :{BLACK} لا تغير الذكاء الصناعي
|
||||
|
||||
# AI Parameters
|
||||
STR_AI_SETTINGS_CAPTION :{WHITE}خصائص الذكاء الصناعي
|
||||
STR_AI_SETTINGS_CAPTION :{WHITE} خصائص الذكاء الصناعي
|
||||
STR_AI_SETTINGS_CLOSE :{BLACK} اغلاق
|
||||
STR_AI_SETTINGS_RESET :{BLACK} اعادة ضبط
|
||||
|
||||
@@ -3281,7 +3283,7 @@ STR_ERROR_AUTOSAVE_FAILED :{WHITE}فشل
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}لا يمكن قرائة القرص
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}فشل حفظ اللعبة{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}لا يمكن حذف الملف
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}فشل فتح اللعبة {}{STRING}
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE} فشل فتح اللعبة {}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :خطأ داخلي: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :لعبة محفوطة غير صالحة{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :اللعبة حفظت بنسخة احدث
|
||||
@@ -3305,9 +3307,6 @@ STR_ERROR_BMPMAP_IMAGE_TYPE :{WHITE}لايم
|
||||
STR_WARNING_HEIGHTMAP_SCALE_CAPTION :{WHITE}تحذير
|
||||
STR_WARNING_HEIGHTMAP_SCALE_MESSAGE :{YELLOW}اعادة تحجيم الخريطة المصدر كثيرا غير مستحسن. هل تريد اكمال توليد الخريطة؟
|
||||
|
||||
# Soundset messages
|
||||
STR_WARNING_FALLBACK_SOUNDSET :{WHITE}لايوجد غير مجموعة اصوات. اذا اردت اصوات, نصب مجموعة صوتية من خلال نظام التحميل.
|
||||
|
||||
# Screenshot related messages
|
||||
STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}صورة من الشاشة حفظت بنجاح باسم: '{STRING}'
|
||||
STR_ERROR_SCREENSHOT_FAILED :{WHITE}لم يتم حفظ الصورة
|
||||
@@ -3322,20 +3321,20 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}قريب
|
||||
STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY :{WHITE}الرصيد لا يكفي - يلزمك {CURRENCY}
|
||||
STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}يجب ان تكون الأرض مستوية
|
||||
STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}الأرض مائلة في الأتجاة الغير مناسب
|
||||
STR_ERROR_CAN_T_DO_THIS :{WHITE}لا يمكن تنفيذة...
|
||||
STR_ERROR_CAN_T_DO_THIS :{WHITE}لا يمكن تنفيذة....
|
||||
STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}يجب هدم المبنى اولا
|
||||
STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}لا يمكن ازالتة ...
|
||||
STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}لا يمكن ازالتة ....
|
||||
STR_ERROR_SITE_UNSUITABLE :{WHITE}... الموقع غير مناسب
|
||||
STR_ERROR_ALREADY_BUILT :{WHITE}... تم بنائة
|
||||
STR_ERROR_OWNED_BY :{WHITE}مملوكة من قبل ... {STRING}
|
||||
STR_ERROR_AREA_IS_OWNED_BY_ANOTHER :{WHITE}... المنطقة مملوكة لشركة منافسة
|
||||
STR_ERROR_ALREADY_BUILT :{WHITE}...تم بنائة
|
||||
STR_ERROR_OWNED_BY :{WHITE} مملوكة من قبل ... {STRING}
|
||||
STR_ERROR_AREA_IS_OWNED_BY_ANOTHER :{WHITE}...المنطقة مملوكة لشركة منافسة
|
||||
STR_ERROR_NAME_MUST_BE_UNIQUE :{WHITE}السم يجب ان يكون فريدا - غير مستخدم
|
||||
STR_ERROR_UNMOVABLE_OBJECT_IN_THE_WAY :{WHITE}{1:STRING} على الطريق
|
||||
|
||||
# Local authority errors
|
||||
STR_ERROR_LOCAL_AUTHORITY_REFUSES_TO_ALLOW_THIS :{WHITE}{TOWN}بلدية المدينة ترفض السماح بهذا
|
||||
STR_ERROR_LOCAL_AUTHORITY_REFUSES_AIRPORT :{WHITE}{TOWN}البلدية ترفض بناء مطار آخر في هذه المدينة
|
||||
STR_ERROR_LOCAL_AUTHORITY_REFUSES_NOISE :{WHITE}بلدية {TOWN}{} ترفض السماح بمطار هنا بسبب تتعلق بالضوضاء العالية منه .
|
||||
STR_ERROR_LOCAL_AUTHORITY_REFUSES_NOISE :{WHITE} بلدية {TOWN}{} ترفض السماح بمطار هنا بسبب تتعلق بالضوضاء العالية منه .
|
||||
STR_ERROR_BRIBE_FAILED :{WHITE}محاولتك لرشوة السلطات المحلية فشلت
|
||||
STR_ERROR_BRIBE_FAILED_2 :{WHITE}أكتشفت من مقبل اللمحققين المحلين
|
||||
|
||||
@@ -3352,7 +3351,7 @@ STR_ERROR_ALREADY_LEVELLED :{WHITE}مسطح
|
||||
STR_ERROR_CAN_T_CHANGE_COMPANY_NAME :{WHITE}لا يمكن تغيير اسم الشركة
|
||||
STR_ERROR_CAN_T_CHANGE_PRESIDENT :{WHITE}لا يمكن تغيير اسم صاحب الشركة
|
||||
|
||||
STR_ERROR_MAXIMUM_PERMITTED_LOAN :{WHITE}... اعلى دين مسموح به : {CURRENCY}
|
||||
STR_ERROR_MAXIMUM_PERMITTED_LOAN :{WHITE}...اعلى دين مسموح به : {CURRENCY}
|
||||
STR_ERROR_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}بلغت الحد الاقصى للقرض
|
||||
STR_ERROR_LOAN_ALREADY_REPAYED :{WHITE}... لا يوجد دين للسداد
|
||||
STR_ERROR_CURRENCY_REQUIRED :{WHITE}...{CURRENCY} مطلوب
|
||||
@@ -3368,10 +3367,10 @@ STR_ERROR_PROTECTED :{WHITE}هذه
|
||||
STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}لا يمكن انشاء اي مدينة
|
||||
STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}لايمكن اعادة تسمية المدينة ...
|
||||
STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}لا يمكن انشاء مدينة هنا
|
||||
STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... قريبة جدا من حافة الخريطة
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... قريبة جدا من مدينة أخرى
|
||||
STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}...قريبة جدا من حافة الخريطة
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}...قريبة جدا من مدينة أخرى
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... المدن كثيرة جدا
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... لا يوجد فراغ في الخريطة
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}.... لا يوجد فراغ في الخريطة
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}لن تبني البلدية طرق جديدة. بامكانك تمكين البلدية من بناء الطرق الجديدة عن طريق الاعدادات المتقدمة --> الاقتصاد --> المدن
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}اعمال الطرق قيد التنفيذ
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}لا يمكن ازالة هذه المدينة {}محطة او ورشة مرتبطة بالمدينة او هناك مربع مملوك للمدينة لا يمكن لزالته
|
||||
@@ -3381,12 +3380,12 @@ STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}لا ي
|
||||
STR_ERROR_CAN_T_BUILD_HERE :{WHITE}لايمكن انشاء {STRING} هنا...
|
||||
STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}لا بمكن بناء المصنع هنا ...
|
||||
STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}قريب جدا من مصنع آخر
|
||||
STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... يجب بناء مدينة اولا
|
||||
STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... يسمح بواحد في المدينة فقط
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS_WITH_POPULATION_OF_1200 :{WHITE}... يمكن بنائة في مدن يزيد سكانها عن 1200 نسمة
|
||||
STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}...يجب بناء مدينة اولا
|
||||
STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}...يسمح بواحد في المدينة فقط
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS_WITH_POPULATION_OF_1200 :{WHITE}...يمكن بنائة في مدن يزيد سكانها عن 1200 نسمة
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}... يمكن بنائة في الغابات المطيرة فقط
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}... يمكن بنائة في المناطق الصحراوية فقط
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}... يبنى فقط في المدن
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}...يمكن بنائة في المناطق الصحراوية فقط
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...يبنى فقط في المدن
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_LOW_AREAS :{WHITE}... يمكن بنائه في المناطق المنخفضة فقط
|
||||
STR_ERROR_CAN_ONLY_BE_POSITIONED :{WHITE}... يمكن بنائة على اطراف الخريطة فقط
|
||||
STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... يمكن زراعة الغابة فوق خط الثلج فقط
|
||||
@@ -3403,11 +3402,11 @@ STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}لا ي
|
||||
STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}جاور اكثر من محطة موجودة مسبقا
|
||||
STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... المحطة واسعة جدا
|
||||
STR_ERROR_NONUNIFORM_STATIONS_DISALLOWED :{WHITE}منع المحطات الغير منتظمة ...
|
||||
STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}الكثير من المحطات واماكن التحميل
|
||||
STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}قطاعات المحطة كثيرة جدا
|
||||
STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE} الكثير من المحطات واماكن التحميل
|
||||
STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE} قطاعات المحطة كثيرة جدا
|
||||
STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}محطات توقف الباصات كثيرة جدا
|
||||
STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}محطات تحميل العربات كثيرة جدا
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_RAILROAD :{WHITE}قريبة جدا من محطة أخرى
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_RAILROAD :{WHITE} قريبة جدا من محطة أخرى
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}قريب جدا من محطة موجودة
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}قريب جدا من مرفء آخر
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}قريب جدا من مطار آخر
|
||||
@@ -3432,17 +3431,17 @@ STR_ERROR_MUST_DEMOLISH_DOCK_FIRST :{WHITE}يجب
|
||||
STR_ERROR_MUST_DEMOLISH_AIRPORT_FIRST :{WHITE}يجب هدم المطار اولا
|
||||
|
||||
# Waypoint related errors
|
||||
STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}اربط اكثر من نقاط العبور المتواجدة
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_WAYPOINT :{WHITE}قريبة جدا من نقطة عبور اخرى
|
||||
STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE} اربط اكثر من نقاط العبور المتواجدة
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_WAYPOINT :{WHITE} قريبة جدا من نقطة عبور اخرى
|
||||
|
||||
STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}لا يمكن بناء نقطة عبور هنا ...
|
||||
STR_ERROR_CAN_T_POSITION_BUOY_HERE :{WHITE}لا يمكن وضع عوامة هنا
|
||||
STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}لا يمكن تعديل نقطة العبور
|
||||
|
||||
STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}لا يمكن ازالة نقطة العبور من هنا ...
|
||||
STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}يجب ازالة سكة الحديد اولا
|
||||
STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE} يجب ازالة سكة الحديد اولا
|
||||
STR_ERROR_BUOY_IN_THE_WAY :{WHITE}... عوامة في المسار
|
||||
STR_ERROR_BUOY_IS_IN_USE :{WHITE}... العوامة مستخدمة
|
||||
STR_ERROR_BUOY_IS_IN_USE :{WHITE} ... العوامة مستخدمة
|
||||
|
||||
# Depot related errors
|
||||
STR_ERROR_CAN_T_BUILD_TRAIN_DEPOT :{WHITE}لا يمكن بناء ورشة صيانة هنا...
|
||||
@@ -3450,14 +3449,14 @@ STR_ERROR_CAN_T_BUILD_ROAD_DEPOT :{WHITE}لا ي
|
||||
STR_ERROR_CAN_T_BUILD_TRAM_DEPOT :{WHITE}لا يمكن بناء ورشة ترام هنا ...
|
||||
STR_ERROR_CAN_T_BUILD_SHIP_DEPOT :{WHITE}لا يمكن بناء حوض صيانة هنا ...
|
||||
|
||||
STR_TRAIN_MUST_BE_STOPPED :{WHITE}يجب ان يتوقف القطار بالكامل داخل مستودع الصيانة
|
||||
STR_ERROR_ROAD_VEHICLE_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}... يجب ان يوقف داخل ورشة الصيانة.
|
||||
STR_TRAIN_MUST_BE_STOPPED :{WHITE} يجب ان يتوقف القطار بالكامل داخل مستودع الصيانة
|
||||
STR_ERROR_ROAD_VEHICLE_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE} ... يجب ان يوقف داخل ورشة الصيانة.
|
||||
STR_ERROR_SHIP_MUST_BE_STOPPED_IN_DEPOT :{WHITE}يجب ان تكون السفينة متوقفة في حوض الصيانة
|
||||
STR_ERROR_AIRCRAFT_MUST_BE_STOPPED :{WHITE}يجب ان تكون الطائرة متوقفة في الحظيرة
|
||||
|
||||
STR_ERROR_TRAINS_CAN_ONLY_BE_ALTERED_INSIDE_A_DEPOT :{WHITE}يمكن تعديل القطارعندما يكون متوقف في ورشة الصيانة
|
||||
STR_ERROR_TRAIN_TOO_LONG :{WHITE}القطار طويل جدا
|
||||
STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE :{WHITE}لا يمكن تغيير اتجاة العربة ...
|
||||
STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE :{WHITE} لا يمكن تغيير اتجاة العربة ...
|
||||
STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE_MULTIPLE_UNITS :{WHITE}لا يمكن انعطاف العربات المكونة من اكثر من وحدة.
|
||||
STR_ERROR_INCOMPATIBLE_RAIL_TYPES :نوع سكة حديد متعارض
|
||||
|
||||
@@ -3475,8 +3474,7 @@ STR_ERROR_AUTOREPLACE_MONEY_LIMIT :- حدود ال
|
||||
|
||||
# Rail construction errors
|
||||
STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}تركيبة سكك غير صالحة
|
||||
STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}يجب حذف الاشارة اولا
|
||||
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}... مسار السكة الحديدية غير مناسب
|
||||
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}....مسار السكة الحديدية غير مناسب
|
||||
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}يجب ازالة السكة اولا
|
||||
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}طريق بإتجاه واحد أو مغلق
|
||||
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}لا يمكن بناء اشارة توقف هنا ...
|
||||
@@ -3500,7 +3498,7 @@ STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}لا ي
|
||||
STR_ERROR_CAN_T_BUILD_LOCKS :{WHITE}لا يمكن بناء حاجز هنا
|
||||
STR_ERROR_CAN_T_PLACE_RIVERS :{WHITE}لا يمكن وضع نهر هنا ...
|
||||
STR_ERROR_MUST_BE_BUILT_ON_WATER :{WHITE}يجب ان يبنى في الماء
|
||||
STR_ERROR_CAN_T_BUILD_ON_WATER :{WHITE}... لا يمكن بنائة على الماء
|
||||
STR_ERROR_CAN_T_BUILD_ON_WATER :{WHITE} ... لا يمكن بنائة على الماء
|
||||
STR_ERROR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}يجب هدم القتاة اولا
|
||||
STR_ERROR_CAN_T_BUILD_AQUEDUCT_HERE :{WHITE}لا يمكن بناء قناة مياة هنا ...
|
||||
|
||||
@@ -3512,17 +3510,17 @@ STR_ERROR_CAN_T_PLANT_TREE_HERE :{WHITE}... لا
|
||||
STR_ERROR_CAN_T_BUILD_BRIDGE_HERE :{WHITE}لا يمكن بناء جسر هنا ...
|
||||
STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}يجب هدم الجسر اولا
|
||||
STR_ERROR_CAN_T_START_AND_END_ON :{WHITE}لا يمكن ان يبدء وينتهي في نفس المكان
|
||||
STR_ERROR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}نهايات الجسر ليست على استقامة واحدة
|
||||
STR_ERROR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE} نهايات الجسر ليست على استقامة واحدة
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_TERRAIN :{WHITE}الجسر منخفض جدا للوادي
|
||||
STR_ERROR_START_AND_END_MUST_BE_IN :{WHITE}البداية و النهاية يجب ان تكون على استقامة واحدة
|
||||
STR_ERROR_ENDS_OF_BRIDGE_MUST_BOTH :{WHITE}... يجب ان تكون نهايات الجسر على اليابسة
|
||||
STR_ERROR_ENDS_OF_BRIDGE_MUST_BOTH :{WHITE}...يجب ان تكون نهايات الجسر على اليابسة
|
||||
|
||||
# Tunnel related errors
|
||||
STR_ERROR_CAN_T_BUILD_TUNNEL_HERE :{WHITE}لا يمكن بناء نفق هنا ...
|
||||
STR_ERROR_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}الموقع غير صالح لمدخل النفق
|
||||
STR_ERROR_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}يجب هدم النفق اولا
|
||||
STR_ERROR_ANOTHER_TUNNEL_IN_THE_WAY :{WHITE}نفق آخر في مسار هذا النفق
|
||||
STR_ERROR_TUNNEL_THROUGH_MAP_BORDER :{WHITE}الانفاق تنتهي خارج حدود الخريطة
|
||||
STR_ERROR_TUNNEL_THROUGH_MAP_BORDER :{WHITE} الانفاق تنتهي خارج حدود الخريطة
|
||||
STR_ERROR_UNABLE_TO_EXCAVATE_LAND :{WHITE}لا يمكن تعديل الأرض في نهاية النفق
|
||||
|
||||
# Unmovable related errors
|
||||
@@ -3546,8 +3544,8 @@ STR_ERROR_SHIP_IN_THE_WAY :{WHITE}سفين
|
||||
STR_ERROR_AIRCRAFT_IN_THE_WAY :{WHITE}طائرة في الطريق
|
||||
|
||||
STR_ERROR_CAN_T_REFIT_TRAIN :{WHITE}لايمكن اعادة تهيئة القطار
|
||||
STR_ERROR_CAN_T_REFIT_ROAD_VEHICLE :{WHITE}لا يمكن اعادة تهيئة العربة ...
|
||||
STR_ERROR_CAN_T_REFIT_SHIP :{WHITE}لا يمكن التغيير ...
|
||||
STR_ERROR_CAN_T_REFIT_ROAD_VEHICLE :{WHITE} لا يمكن اعادة تهيئة العربة ...
|
||||
STR_ERROR_CAN_T_REFIT_SHIP :{WHITE}لا يمكن التغيير ....
|
||||
STR_ERROR_CAN_T_REFIT_AIRCRAFT :{WHITE}لا يمكن تغيير الحمولة ...
|
||||
|
||||
STR_ERROR_CAN_T_RENAME_TRAIN :{WHITE}لا يمكن تسمية القطار ...
|
||||
@@ -3571,24 +3569,24 @@ STR_ERROR_CAN_T_BUY_SHIP :{WHITE}لا ي
|
||||
STR_ERROR_CAN_T_BUY_AIRCRAFT :{WHITE}لا يمكن شراء الطائرة
|
||||
|
||||
STR_ERROR_CAN_T_RENAME_TRAIN_TYPE :{WHITE}لا يمكن اعادة تسمية عربات القطار ...
|
||||
STR_ERROR_CAN_T_RENAME_ROAD_VEHICLE_TYPE :{WHITE}لايمكن اعادة تسمية العربات
|
||||
STR_ERROR_CAN_T_RENAME_ROAD_VEHICLE_TYPE :{WHITE} لايمكن اعادة تسمية العربات
|
||||
STR_ERROR_CAN_T_RENAME_SHIP_TYPE :{WHITE}لا يمكن اعادة تسمية نوع السفينة
|
||||
STR_ERROR_CAN_T_RENAME_AIRCRAFT_TYPE :{WHITE}لا يمكن اعادة تسمية نوع الطائرة ...
|
||||
STR_ERROR_CAN_T_RENAME_AIRCRAFT_TYPE :{WHITE}لا يمكن اعادة تسمية نوع الطائرة ....
|
||||
|
||||
STR_ERROR_CAN_T_SELL_TRAIN :{WHITE}لا يمكن بيع العربات
|
||||
STR_ERROR_CAN_T_SELL_ROAD_VEHICLE :{WHITE}لا يمكن بيع العربة...
|
||||
STR_ERROR_CAN_T_SELL_SHIP :{WHITE}لا يمكن بيع السفينة ...
|
||||
STR_ERROR_CAN_T_SELL_SHIP :{WHITE}لا يمكن بيع السفينة ......
|
||||
STR_ERROR_CAN_T_SELL_AIRCRAFT :{WHITE}لا يمكن بيع الطائرة
|
||||
|
||||
STR_ERROR_RAIL_VEHICLE_NOT_AVAILABLE :{WHITE}العربة غير متاحة
|
||||
STR_ERROR_ROAD_VEHICLE_NOT_AVAILABLE :{WHITE}العربات غير متاحة
|
||||
STR_ERROR_SHIP_NOT_AVAILABLE :{WHITE}السفن غير متاحة
|
||||
STR_ERROR_ROAD_VEHICLE_NOT_AVAILABLE :{WHITE} العربات غير متاحة
|
||||
STR_ERROR_SHIP_NOT_AVAILABLE :{WHITE} السفن غير متاحة
|
||||
STR_ERROR_AIRCRAFT_NOT_AVAILABLE :{WHITE}الطائرة غير متاحة
|
||||
|
||||
STR_ERROR_TOO_MANY_VEHICLES_IN_GAME :{WHITE}العربات كثيرة جدا في اللعبة
|
||||
STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}لا يمكن تغيير فترات الصيانة
|
||||
|
||||
STR_ERROR_CAN_T_SELL_DESTROYED_VEHICLE :{WHITE}لا يمكن بيع العربة المحطمة ...
|
||||
STR_ERROR_CAN_T_SELL_DESTROYED_VEHICLE :{WHITE} لا يمكن بيع العربة المحطمة ...
|
||||
STR_ERROR_CAN_T_REFIT_DESTROYED_VEHICLE :{WHITE}لا يمكن اعادة العربة المحطمة ...
|
||||
|
||||
# Specific vehicle errors
|
||||
@@ -3596,7 +3594,7 @@ STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}لا ي
|
||||
STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}لا يمكن عكس اتجاة القطار...
|
||||
STR_ERROR_TRAIN_START_NO_CATENARY :هذة السكة تفتقد السلسال لذا لا يستطيع القطار ان يتحرك
|
||||
|
||||
STR_ERROR_CAN_T_MAKE_ROAD_VEHICLE_TURN :{WHITE}لا يمكن تغيير اتجاة المركبة الان
|
||||
STR_ERROR_CAN_T_MAKE_ROAD_VEHICLE_TURN :{WHITE} لا يمكن تغيير اتجاة المركبة الان
|
||||
|
||||
STR_ERROR_AIRCRAFT_IS_IN_FLIGHT :{WHITE}الطائرة تقوم بالطيران الآن
|
||||
|
||||
@@ -3609,9 +3607,9 @@ STR_ERROR_CAN_T_MODIFY_THIS_ORDER :{WHITE}لا ي
|
||||
STR_ERROR_CAN_T_MOVE_THIS_ORDER :{WHITE}لا يمكن حذف هذا الامر ...
|
||||
STR_ERROR_CAN_T_SKIP_ORDER :{WHITE}لا يمكن تخطي الأمر الحالي ...
|
||||
STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}لا يمكن تخطي الأمر المختار ...
|
||||
STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}العربة لا تستطيع الوصول الى كل المحطات
|
||||
STR_ERROR_CAN_T_ADD_ORDER :{WHITE}العربة لا تستطيع الوصول للمحطة
|
||||
STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}العربة المشتركة لا تستطيع الوصول للمحطة
|
||||
STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE} العربة لا تستطيع الوصول الى كل المحطات
|
||||
STR_ERROR_CAN_T_ADD_ORDER :{WHITE} العربة لا تستطيع الوصول للمحطة
|
||||
STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE} العربة المشتركة لا تستطيع الوصول للمحطة
|
||||
|
||||
STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}لا يمكن مشاركة قائمة الأوامر
|
||||
STR_ERROR_CAN_T_COPY_ORDER_LIST :{WHITE}لا يمكن نسخ قائمة الأوامر
|
||||
@@ -3624,7 +3622,7 @@ STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}هذه
|
||||
|
||||
# Sign related errors
|
||||
STR_ERROR_TOO_MANY_SIGNS :{WHITE}... العلامات كثيرة جدا
|
||||
STR_ERROR_CAN_T_PLACE_SIGN_HERE :{WHITE}لايمكن وضع علامة هنا...
|
||||
STR_ERROR_CAN_T_PLACE_SIGN_HERE :{WHITE} لايمكن وضع علامة هنا...
|
||||
STR_ERROR_CAN_T_CHANGE_SIGN_NAME :{WHITE}لا يمكن تعديل اسم العلامة ...
|
||||
STR_ERROR_CAN_T_DELETE_SIGN :{WHITE}لا يمكن حذف العلامة ...
|
||||
|
||||
@@ -4107,5 +4105,3 @@ STR_BUS :{BLACK}{BUS}
|
||||
STR_LORRY :{BLACK}{LORRY}
|
||||
STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
@@ -216,7 +216,6 @@ STR_UNITS_VOLUME_LONG_SI :{COMMA} m³
|
||||
|
||||
STR_UNITS_FORCE_SI :{COMMA} kN
|
||||
|
||||
|
||||
# Common window strings
|
||||
STR_LIST_FILTER_OSKTITLE :{BLACK}Entre com o filtro desejado
|
||||
STR_LIST_FILTER_TOOLTIP :{BLACK}Entre uma palavra a ser filtrada
|
||||
@@ -372,7 +371,7 @@ STR_MAP_MENU_SIGN_LIST :Lista de placas
|
||||
############ range for town menu starts, yet the town directory is shown in the map menu in the scenario editor
|
||||
STR_TOWN_MENU_TOWN_DIRECTORY :Lista de cidades
|
||||
############ end of the 'Display map' dropdown
|
||||
STR_TOWN_MENU_FOUND_TOWN :Fundar cidade
|
||||
STR_TOWN_MENU_FOUND_TOWN :Cidade encontrada
|
||||
############ end of the 'Town' dropdown
|
||||
|
||||
############ range for subsidies menu starts
|
||||
@@ -1086,7 +1085,7 @@ STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL :{LTBLUE}Sistema
|
||||
STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_ORIGINAL :Original
|
||||
STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_REALISTIC :Realista
|
||||
STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS :{LTBLUE}Inclinação do terreno para trens{ORANGE}{STRING}%
|
||||
STR_CONFIG_SETTING_FORBID_90_DEG :{LTBLUE}Proibir trens e embarcações girar em angulos de 90° graus: {ORANGE}{STRING} {LTBLUE} (indisp. com OPF)
|
||||
STR_CONFIG_SETTING_FORBID_90_DEG :{LTBLUE}Proibir trens e embarcações girar em angulos de 90 graus: {ORANGE}{STRING} {LTBLUE} (indisp. com OPF)
|
||||
STR_CONFIG_SETTING_JOINSTATIONS :{LTBLUE}Unir estações ferroviárias construídas juntas: {ORANGE}{STRING}
|
||||
STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :{LTBLUE}Permitie unir estações não adjacentes: {ORANGE}{STRING}
|
||||
STR_CONFIG_SETTING_IMPROVEDLOAD :{LTBLUE}Usar algoritmo de carregamento melhorado: {ORANGE}{STRING}
|
||||
@@ -1100,6 +1099,7 @@ STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE :nenhum
|
||||
STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL :como as outras indústrias
|
||||
STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :em prospecção
|
||||
STR_CONFIG_SETTING_MULTIPINDTOWN :{LTBLUE}Permitir várias indústrias semelhantes por cidade: {ORANGE}{STRING}
|
||||
STR_CONFIG_SETTING_SAMEINDCLOSE :{LTBLUE}Indústrias do mesmo tipo podem ser construídas próximas: {ORANGE}{STRING}
|
||||
STR_CONFIG_SETTING_LONGDATE :{LTBLUE}Sempre exibir a data completa na barra de estado: {ORANGE}{STRING}
|
||||
STR_CONFIG_SETTING_SIGNALSIDE :{LTBLUE}Exibir sinais no lado da circulação: {ORANGE}{STRING}
|
||||
STR_CONFIG_SETTING_SHOWFINANCES :{LTBLUE}Exibir janela das finanças no fim do ano: {ORANGE}{STRING}
|
||||
@@ -1726,8 +1726,8 @@ STR_NETWORK_CHAT_ALL :[Todos] {STRING
|
||||
STR_NETWORK_CHAT_OSKTITLE :{BLACK}Coloque o texto para o jogo em rede
|
||||
|
||||
# Network messages
|
||||
STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Não foram encontradas interfaces de rede ou o jogo foi compilado sem ENABLE_NETWORK
|
||||
STR_NETWORK_ERROR_NOSERVER :{WHITE}Não foram encontrados jogos em rede
|
||||
STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE} Não foram encontradas interfaces de rede ou o jogo foi compilado sem ENABLE_NETWORK
|
||||
STR_NETWORK_ERROR_NOSERVER :{WHITE} Não foram encontrados jogos em rede
|
||||
STR_NETWORK_ERROR_NOCONNECTION :{WHITE}O servidor não respondeu ao pedido
|
||||
STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE}Não pode conectar devido ao NewGRF errado
|
||||
STR_NETWORK_ERROR_DESYNC :{WHITE}A sincronização do jogo falhou.
|
||||
@@ -1752,7 +1752,7 @@ STR_NETWORK_ERROR_CLIENT_CONNECTION_LOST :conexão perdid
|
||||
STR_NETWORK_ERROR_CLIENT_PROTOCOL_ERROR :erro de protocolo
|
||||
STR_NETWORK_ERROR_CLIENT_NEWGRF_MISMATCH :NewGRF errado
|
||||
STR_NETWORK_ERROR_CLIENT_NOT_AUTHORIZED :não autorizado
|
||||
STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :um pacote inválido ou inesperado foi recebido
|
||||
STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :recebido um pacote estranho
|
||||
STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :versão incorreta
|
||||
STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :nome já está em uso
|
||||
STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :senha incorreta
|
||||
@@ -1770,7 +1770,7 @@ STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 :Jogo ainda paus
|
||||
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :Jogo ainda pausado ({STRING}, {STRING})
|
||||
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :Jogo ainda pausado ({STRING}, {STRING}, {STRING})
|
||||
STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :Jogo despausado ({STRING})
|
||||
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :número de jogadores
|
||||
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :jogadores insuficientes
|
||||
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :clientes conectando-se
|
||||
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :manual
|
||||
############ End of leave-in-this-order
|
||||
@@ -1784,8 +1784,8 @@ STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} sa
|
||||
STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} mudou seu nome para {STRING}
|
||||
STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} deu à sua companhia{2:CURRENCY}
|
||||
STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Você deu a {1:STRING} {2:CURRENCY}
|
||||
STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}O servidor fechou a sessão
|
||||
STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}O servidor está reiniciando...{}Aguarde...
|
||||
STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE} O servidor fechou a sessão
|
||||
STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE} O servidor está reiniciando...{}Aguarde...
|
||||
|
||||
# Content downloading window
|
||||
STR_CONTENT_TITLE :{WHITE}Baixando conteúdo
|
||||
@@ -2115,7 +2115,7 @@ STR_LAND_AREA_INFORMATION_OWNER_N_A :N/D
|
||||
STR_LAND_AREA_INFORMATION_OWNER :{BLACK}Proprietário: {LTBLUE}{STRING}
|
||||
STR_LAND_AREA_INFORMATION_ROAD_OWNER :{BLACK}Dono da estrada: {LTBLUE}{STRING}
|
||||
STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Dono da linha de bonde: {LTBLUE}{STRING}
|
||||
STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Dono da linha ferroviária: {LTBLUE}{STRING}
|
||||
STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Dono da linha de trem: {LTBLUE}{STRING}
|
||||
STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Autoridade local: {LTBLUE}{STRING}
|
||||
STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Nenhum
|
||||
STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Coordenadas: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
|
||||
@@ -2125,7 +2125,6 @@ STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Tipo de
|
||||
STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING}
|
||||
STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Carga aceita: {LTBLUE}
|
||||
STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING})
|
||||
STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Velocidade limite do trilho: {LTBLUE}{VELOCITY}
|
||||
|
||||
# Description of land area of different tiles
|
||||
STR_LAI_CLEAR_DESCRIPTION_ROCKS :Rochas
|
||||
@@ -2348,12 +2347,7 @@ STR_NEWGRF_SETTINGS_DISABLED :{RED}Desativado
|
||||
|
||||
STR_NEWGRF_SETTINGS_PARAMETER_QUERY :{BLACK}Insira novos parâmetros de NewGRF
|
||||
|
||||
# NewGRF inspect window
|
||||
|
||||
|
||||
|
||||
# Sprite aligner window
|
||||
|
||||
# NewGRF add window
|
||||
STR_NEWGRF_ADD_CAPTION :{WHITE}NewGRF disponíveis
|
||||
STR_NEWGRF_ADD_FILE :{BLACK}Adicionar à seleção
|
||||
STR_NEWGRF_ADD_FILE_TOOLTIP :{BLACK}Adiciona o NewGRF selecionado à sua configuração
|
||||
@@ -2395,10 +2389,8 @@ STR_NEWGRF_DISABLED_WARNING :{WHITE}arquivo(
|
||||
STR_NEWGRF_UNPAUSE_WARNING_TITLE :{YELLOW}Arquivo(s) GRF faltantes
|
||||
STR_NEWGRF_UNPAUSE_WARNING :{WHITE}Despausar pode travar OpenTTD. Não envie relatórios de erros sobre travas subsequentes.{}Você realmente quer despausar?
|
||||
|
||||
# NewGRF status
|
||||
|
||||
# NewGRF 'it's broken' warnings
|
||||
STR_NEWGRF_BROKEN :{WHITE}'{0:STRING}' tem altas chances de causar desincronias e/ou travamentos.
|
||||
STR_NEWGRF_BROKEN :{WHITE} '{0:STRING}' tem altas chances de causar desincronias e/ou travamentos.
|
||||
STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Muda o tamanho de um veículo para '{1:ENGINE}' apesar de não estar em um depósito.
|
||||
STR_BROKEN_VEHICLE_LENGTH :{WHITE}Trem '{VEHICLE}' de '{COMPANY}' tem um tamanho inválido. Provavelmente causado por um NewGRF. O jogo pode travar ou sair de sincronia.
|
||||
|
||||
@@ -2406,13 +2398,6 @@ STR_NEWGRF_BUGGY :{WHITE}O NewGRF
|
||||
STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}A informação de adaptação para '{1:ENGINE}' difere da lista de compras após a construção. Isso pode causar erros na autosubstituição/autoadaptação.
|
||||
STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' causou um loop infinito no callback da produção.
|
||||
|
||||
# 'User removed essential NewGRFs'-placeholders for stuff without specs.
|
||||
STR_NEWGRF_INVALID_CARGO :<carga inválida>
|
||||
STR_NEWGRF_INVALID_CARGO_ABBREV :??
|
||||
STR_NEWGRF_INVALID_CARGO_QUANTITY :{COMMA} de <carga inválida>
|
||||
STR_NEWGRF_INVALID_ENGINE :<locom. inválida>
|
||||
STR_NEWGRF_INVALID_INDUSTRYTYPE :<indústria inválida>
|
||||
|
||||
# Sign list window
|
||||
STR_SIGN_LIST_CAPTION :{WHITE}Lista de Placas - {COMMA} Placa{P "" s}
|
||||
|
||||
@@ -2765,7 +2750,6 @@ STR_DEPOT_ROAD_VEHICLE_CAPTION :{WHITE}{TOWN} G
|
||||
STR_DEPOT_SHIP_CAPTION :{WHITE}Depósito Naval de {TOWN}
|
||||
STR_DEPOT_AIRCRAFT_CAPTION :{WHITE}{STATION} Hangar
|
||||
|
||||
|
||||
STR_DEPOT_NO_ENGINE :{BLACK}-
|
||||
STR_DEPOT_VEHICLE_TOOLTIP :{BLACK}{ENGINE}{STRING}
|
||||
STR_DEPOT_VEHICLE_TOOLTIP_CHAIN :{BLACK}{NUM} veículo{P "" s}{STRING}
|
||||
@@ -2962,8 +2946,6 @@ STR_VEHICLE_STATUS_HEADING_FOR_SHIP_DEPOT_SERVICE_VEL :{LTBLUE}Manuten
|
||||
STR_VEHICLE_STATUS_HEADING_FOR_HANGAR_SERVICE :{LTBLUE}Manutenção no Hangar de {STATION}
|
||||
STR_VEHICLE_STATUS_HEADING_FOR_HANGAR_SERVICE_VEL :{LTBLUE}Manutenção no Hangar de {STATION}, {VELOCITY}
|
||||
|
||||
# Vehicle stopped/started animations
|
||||
|
||||
# Vehicle details
|
||||
STR_VEHICLE_DETAILS_CAPTION :{WHITE}{VEHICLE} (Detalhes)
|
||||
STR_VEHICLE_NAME_BUTTON :{BLACK}Nome
|
||||
@@ -3134,7 +3116,7 @@ STR_ORDER_SERVICE_NON_STOP_AT :Manutenção se
|
||||
|
||||
STR_ORDER_NEAREST_DEPOT :mais próximo
|
||||
STR_ORDER_NEAREST_HANGAR :hangar mais próximo
|
||||
STR_ORDER_TRAIN_DEPOT :Depósito Ferroviário
|
||||
STR_ORDER_TRAIN_DEPOT :Depósito de Trem
|
||||
STR_ORDER_ROAD_VEHICLE_DEPOT :Depósito de Veículos
|
||||
STR_ORDER_SHIP_DEPOT :Depósito de Navios
|
||||
STR_ORDER_GO_TO_DEPOT_FORMAT :{STRING} {TOWN} {STRING}
|
||||
@@ -3313,15 +3295,15 @@ STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Jogo foi
|
||||
|
||||
# Map generation messages
|
||||
STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Geração do mapa abortada... {}... não há locais para criação de cidades
|
||||
STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... não existe cidade neste cenário
|
||||
STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}...não existe cidade neste cenário
|
||||
|
||||
STR_ERROR_PNGMAP :{WHITE}Impossível carregar terreno a partir de PNG...
|
||||
STR_ERROR_PNGMAP_FILE_NOT_FOUND :{WHITE}... arquivo não encontrado.
|
||||
STR_ERROR_PNGMAP_IMAGE_TYPE :{WHITE}... impossível converter tipo de imagem. Precisa imagem PNG de 8 ou 24-bit.
|
||||
STR_ERROR_PNGMAP_MISC :{WHITE}... alguma coisa deu errado. Desculpe. (provavel arquivo corrupto)
|
||||
STR_ERROR_PNGMAP_FILE_NOT_FOUND :{WHITE}...arquivo não encontrado.
|
||||
STR_ERROR_PNGMAP_IMAGE_TYPE :{WHITE}...impossível converter tipo de imagem. Precisa imagem PNG de 8 ou 24-bit.
|
||||
STR_ERROR_PNGMAP_MISC :{WHITE}...alguma coisa deu errado. Desculpe. (provavel arquivo corrupto)
|
||||
|
||||
STR_ERROR_BMPMAP :{WHITE}Impossível carregar terreno a partir de BMP...
|
||||
STR_ERROR_BMPMAP_IMAGE_TYPE :{WHITE}... não foi possível converter o tipo de imagem
|
||||
STR_ERROR_BMPMAP_IMAGE_TYPE :{WHITE}...não foi possível converter o tipo de imagem
|
||||
|
||||
STR_WARNING_HEIGHTMAP_SCALE_CAPTION :{WHITE}Aviso de Escala
|
||||
STR_WARNING_HEIGHTMAP_SCALE_MESSAGE :{YELLOW}Alterar muito o tamanho do mapa original não é recomendado. Continuar com a geração?
|
||||
@@ -3343,13 +3325,13 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Muito pr
|
||||
STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY :{WHITE}Não há dinheiro - requer {CURRENCY}
|
||||
STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}Requer terreno plano
|
||||
STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Terreno inclinado na direção incorreta
|
||||
STR_ERROR_CAN_T_DO_THIS :{WHITE}Impossível fazer isto...
|
||||
STR_ERROR_CAN_T_DO_THIS :{WHITE}Impossível fazer isto....
|
||||
STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}O edifício deve ser demolido antes
|
||||
STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Impossível limpar esta área...
|
||||
STR_ERROR_SITE_UNSUITABLE :{WHITE}... local inadequado
|
||||
STR_ERROR_ALREADY_BUILT :{WHITE}... já construído
|
||||
STR_ERROR_OWNED_BY :{WHITE}... propriedade de {STRING}
|
||||
STR_ERROR_AREA_IS_OWNED_BY_ANOTHER :{WHITE}... a área é propriedade de outra empresa
|
||||
STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Impossível limpar esta área....
|
||||
STR_ERROR_SITE_UNSUITABLE :{WHITE}...local inadequado
|
||||
STR_ERROR_ALREADY_BUILT :{WHITE}...já construído
|
||||
STR_ERROR_OWNED_BY :{WHITE}...propriedade de {STRING}
|
||||
STR_ERROR_AREA_IS_OWNED_BY_ANOTHER :{WHITE}...a área é propriedade de outra empresa
|
||||
STR_ERROR_NAME_MUST_BE_UNIQUE :{WHITE}Nome deve ser único
|
||||
STR_ERROR_UNMOVABLE_OBJECT_IN_THE_WAY :{WHITE}{1:STRING} no caminho
|
||||
|
||||
@@ -3373,10 +3355,10 @@ STR_ERROR_ALREADY_LEVELLED :{WHITE}... já
|
||||
STR_ERROR_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Impossível alterar o nome da empresa...
|
||||
STR_ERROR_CAN_T_CHANGE_PRESIDENT :{WHITE}Impossível alterar o nome do presidente...
|
||||
|
||||
STR_ERROR_MAXIMUM_PERMITTED_LOAN :{WHITE}... o empréstimo máximo permitido é de {CURRENCY}
|
||||
STR_ERROR_MAXIMUM_PERMITTED_LOAN :{WHITE}...o empréstimo máximo permitido é de {CURRENCY}
|
||||
STR_ERROR_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Impossível pedir mais dinheiro emprestado...
|
||||
STR_ERROR_LOAN_ALREADY_REPAYED :{WHITE}... não há empréstimo para pagar
|
||||
STR_ERROR_CURRENCY_REQUIRED :{WHITE}... precisa de {CURRENCY}
|
||||
STR_ERROR_LOAN_ALREADY_REPAYED :{WHITE}...não há empréstimo para pagar
|
||||
STR_ERROR_CURRENCY_REQUIRED :{WHITE}...precisa de {CURRENCY}
|
||||
STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}Impossível pagar empréstimo...
|
||||
STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}Impossível dar o dinheiro emprestado do banco
|
||||
STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Impossível comprar empresa...
|
||||
@@ -3389,10 +3371,10 @@ STR_ERROR_PROTECTED :{WHITE}Esta emp
|
||||
STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Impossível construir qualquer cidade
|
||||
STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Impossível renomear cidade...
|
||||
STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Impossível construir cidade aqui...
|
||||
STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... muito perto da borda do mapa
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... muito perto de outra cidade
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... existem cidades demais
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... não há mais espaço no mapa
|
||||
STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}...muito perto da borda do mapa
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}...muito perto de outra cidade
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... cidades demais
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}...não há mais espaço no mapa
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}A cidade não irá construir estradas. Você pode ativar essa opção através de Config. Avançadas>Economia>Cidades.
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Recapeamento rodoviário em progresso
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Impossível remover cidade... {}Uma estação ou depósito referente à essa cidade não pode ser removido
|
||||
@@ -3401,16 +3383,16 @@ STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Impossí
|
||||
STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Impossível gerar indústrias...
|
||||
STR_ERROR_CAN_T_BUILD_HERE :{WHITE}Impossível construir {STRING} aqui...
|
||||
STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Impossível construir este tipo de indústria aqui...
|
||||
STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... muito perto de outra indústria
|
||||
STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... deve construir uma cidade antes
|
||||
STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... só é permitido uma por cidade
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS_WITH_POPULATION_OF_1200 :{WHITE}... só pode ser construído em cidades com pelo menos 1200 habitantes
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}... só pode ser construído em zonas florestais
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}... só pode ser construído em áreas desérticas
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}... só se pode ser construído em cidades
|
||||
STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}...muito perto de outra indústria
|
||||
STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}...deve construir uma cidade antes
|
||||
STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}...só é permitido uma por cidade
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS_WITH_POPULATION_OF_1200 :{WHITE}...só pode ser construído em cidades com pelo menos 1200 habitantes
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}...só pode ser construído em zonas florestais
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}...só pode ser construído em áreas desérticas
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...só se pode ser construído em cidades
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_LOW_AREAS :{WHITE}... só pode ser construído em áreas baixas
|
||||
STR_ERROR_CAN_ONLY_BE_POSITIONED :{WHITE}... só pode ser colocado perto das bordas do mapa
|
||||
STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... a floresta só pode ser plantada acima do nível de neve
|
||||
STR_ERROR_CAN_ONLY_BE_POSITIONED :{WHITE}...só pode ser colocado perto das bordas do mapa
|
||||
STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}...a floresta só pode ser plantada acima do nível de neve
|
||||
|
||||
# Station construction related errors
|
||||
STR_ERROR_CAN_T_BUILD_RAILROAD_STATION :{WHITE}Impossível construir estação ferroviária aqui...
|
||||
@@ -3422,8 +3404,8 @@ STR_ERROR_CAN_T_BUILD_DOCK_HERE :{WHITE}Impossí
|
||||
STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Impossível construir aeroporto aqui...
|
||||
|
||||
STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Muito perto de uma estação/local de carga já existente
|
||||
STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... estação muito extensa
|
||||
STR_ERROR_NONUNIFORM_STATIONS_DISALLOWED :{WHITE}... Estações não-uniformes desativadas
|
||||
STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}...estação muito extensa
|
||||
STR_ERROR_NONUNIFORM_STATIONS_DISALLOWED :{WHITE}...Estações não-uniformes desativadas
|
||||
STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Estações/áreas de carga demais
|
||||
STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}A estação já tem muitas partes
|
||||
STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Estações de ônibus demais
|
||||
@@ -3433,8 +3415,8 @@ STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Muito pe
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Muito perto de outra doca
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Muito perto de outro aeroporto
|
||||
STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Impossível renomear a estação...
|
||||
STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... é uma rua local
|
||||
STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... rua na direção errada
|
||||
STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}...é uma rua local
|
||||
STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}...rua na direção errada
|
||||
|
||||
# Station destruction related errors
|
||||
STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Impossível remover parte da estação...
|
||||
@@ -3462,8 +3444,8 @@ STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}Impossí
|
||||
|
||||
STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}Impossível remover ponto de controle de trem aqui...
|
||||
STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}Remova o ponto de controle antes
|
||||
STR_ERROR_BUOY_IN_THE_WAY :{WHITE}... bóia no caminho
|
||||
STR_ERROR_BUOY_IS_IN_USE :{WHITE}... bóia está em uso!
|
||||
STR_ERROR_BUOY_IN_THE_WAY :{WHITE}...bóia no caminho
|
||||
STR_ERROR_BUOY_IS_IN_USE :{WHITE}...bóia está em uso!
|
||||
|
||||
# Depot related errors
|
||||
STR_ERROR_CAN_T_BUILD_TRAIN_DEPOT :{WHITE}Impossível construir depósito aqui...
|
||||
@@ -3471,9 +3453,8 @@ STR_ERROR_CAN_T_BUILD_ROAD_DEPOT :{WHITE}Impossí
|
||||
STR_ERROR_CAN_T_BUILD_TRAM_DEPOT :{WHITE}Impossível construir depósito aqui...
|
||||
STR_ERROR_CAN_T_BUILD_SHIP_DEPOT :{WHITE}Impossível construir depósito naval aqui...
|
||||
|
||||
|
||||
STR_TRAIN_MUST_BE_STOPPED :{WHITE}O trem deve estar parado dentro do depósito
|
||||
STR_ERROR_ROAD_VEHICLE_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}... deve estar parado dentro de uma garagem
|
||||
STR_ERROR_ROAD_VEHICLE_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}...deve estar parado dentro de uma garagem
|
||||
STR_ERROR_SHIP_MUST_BE_STOPPED_IN_DEPOT :{WHITE}A embarcação deve estar parado no depósito naval
|
||||
STR_ERROR_AIRCRAFT_MUST_BE_STOPPED :{WHITE}A aeronave deve estar parada no hangar
|
||||
|
||||
@@ -3501,7 +3482,6 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Remova o
|
||||
STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Tipo de linha não apropriado
|
||||
STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Remova a ferrovia antes
|
||||
STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Rua é mão única ou está bloqueado
|
||||
STR_ERROR_CROSSING_DISALLOWED :{WHITE}Cruzamentos de nível não são permitidos para esse tipo de trilho
|
||||
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Impossível construir sinais aqui...
|
||||
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Impossível construir ferrovia aqui...
|
||||
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Impossível remover a ferrovia daqui...
|
||||
@@ -3522,14 +3502,13 @@ STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Impossí
|
||||
STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Impossível construir canais aqui...
|
||||
STR_ERROR_CAN_T_BUILD_LOCKS :{WHITE}Impossível construir eclusas aqui...
|
||||
STR_ERROR_CAN_T_PLACE_RIVERS :{WHITE}Impossível fazer rios aqui...
|
||||
STR_ERROR_MUST_BE_BUILT_ON_WATER :{WHITE}... deve ser construído na água
|
||||
STR_ERROR_CAN_T_BUILD_ON_WATER :{WHITE}... Impossível construir na água
|
||||
STR_ERROR_MUST_BE_BUILT_ON_WATER :{WHITE}...deve ser construído na água
|
||||
STR_ERROR_CAN_T_BUILD_ON_WATER :{WHITE}...Impossível construir na água
|
||||
STR_ERROR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Remova o canal antes
|
||||
STR_ERROR_CAN_T_BUILD_AQUEDUCT_HERE :{WHITE}Impossível construir aqueduto aqui
|
||||
|
||||
# Tree related errors
|
||||
STR_ERROR_TREE_ALREADY_HERE :{WHITE}... árvore já plantada aqui
|
||||
STR_ERROR_TREE_WRONG_TERRAIN_FOR_TREE_TYPE :{WHITE}... terreno errado para esse tipo de árvore
|
||||
STR_ERROR_TREE_ALREADY_HERE :{WHITE}...árvore já plantada aqui
|
||||
STR_ERROR_CAN_T_PLANT_TREE_HERE :{WHITE}Impossível plantar árvore aqui...
|
||||
|
||||
# Bridge related errors
|
||||
@@ -3539,8 +3518,7 @@ STR_ERROR_CAN_T_START_AND_END_ON :{WHITE}Impossí
|
||||
STR_ERROR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}Extremidades da ponte não estão no mesmo nível
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_TERRAIN :{WHITE}Ponte é muito baixa para o terreno
|
||||
STR_ERROR_START_AND_END_MUST_BE_IN :{WHITE}Inicio e fim devem estar alinhados
|
||||
STR_ERROR_ENDS_OF_BRIDGE_MUST_BOTH :{WHITE}... os extremos da ponte devem estar sobre a terra
|
||||
STR_ERROR_BRIDGE_TOO_LONG :{WHITE}... ponte muito longa
|
||||
STR_ERROR_ENDS_OF_BRIDGE_MUST_BOTH :{WHITE}...os extremos da ponte devem estar sobre a terra
|
||||
|
||||
# Tunnel related errors
|
||||
STR_ERROR_CAN_T_BUILD_TUNNEL_HERE :{WHITE}Impossível construir túnel aqui...
|
||||
@@ -3552,9 +3530,9 @@ STR_ERROR_UNABLE_TO_EXCAVATE_LAND :{WHITE}Incapaz
|
||||
|
||||
# Unmovable related errors
|
||||
STR_ERROR_OBJECT_IN_THE_WAY :{WHITE}Objeto no caminho
|
||||
STR_ERROR_COMPANY_HEADQUARTERS_IN :{WHITE}... sede de empresa no caminho
|
||||
STR_ERROR_COMPANY_HEADQUARTERS_IN :{WHITE}...sede de empresa no caminho
|
||||
STR_ERROR_CAN_T_PURCHASE_THIS_LAND :{WHITE}Impossível comprar esta área...
|
||||
STR_ERROR_YOU_ALREADY_OWN_IT :{WHITE}... já a possui!
|
||||
STR_ERROR_YOU_ALREADY_OWN_IT :{WHITE}...já a possui!
|
||||
|
||||
# Group related errors
|
||||
STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Impossível criar grupo...
|
||||
@@ -3634,13 +3612,13 @@ STR_ERROR_CAN_T_MODIFY_THIS_ORDER :{WHITE}Impossí
|
||||
STR_ERROR_CAN_T_MOVE_THIS_ORDER :{WHITE}Impossível mudar essa ordem
|
||||
STR_ERROR_CAN_T_SKIP_ORDER :{WHITE}Impossível pular a ordem atual...
|
||||
STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Impossível pular à ordem selecionada...
|
||||
STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}... o veículo não pode chegar a todas as estações
|
||||
STR_ERROR_CAN_T_ADD_ORDER :{WHITE}... o veículo não chega àquela estação
|
||||
STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... um veículo com essa mesma ordem não chega àquela estação
|
||||
STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}...o veículo não pode chegar a todas as estações
|
||||
STR_ERROR_CAN_T_ADD_ORDER :{WHITE}...o veículo não chega àquela estação
|
||||
STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}...um veículo com essa mesma ordem não chega àquela estação
|
||||
|
||||
STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}Impossível compartilhar a lista de ordens...
|
||||
STR_ERROR_CAN_T_COPY_ORDER_LIST :{WHITE}Impossível copiar a lista de ordens...
|
||||
STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION :{WHITE}... muito distante do destino anterior
|
||||
STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION :{WHITE}...muito distante do destino anterior
|
||||
|
||||
# Timetable related errors
|
||||
STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Impossível programar veículo...
|
||||
@@ -3648,14 +3626,11 @@ STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Veículo
|
||||
STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Esse veículo não pára nesta estação
|
||||
|
||||
# Sign related errors
|
||||
STR_ERROR_TOO_MANY_SIGNS :{WHITE}... existem placas demais
|
||||
STR_ERROR_TOO_MANY_SIGNS :{WHITE}... placas demais
|
||||
STR_ERROR_CAN_T_PLACE_SIGN_HERE :{WHITE}Impossível colocar placa aqui...
|
||||
STR_ERROR_CAN_T_CHANGE_SIGN_NAME :{WHITE}Impossível alterar nome da placa...
|
||||
STR_ERROR_CAN_T_DELETE_SIGN :{WHITE}Impossível remover placa
|
||||
|
||||
# Translatable comment for OpenTTD's desktop shortcut
|
||||
STR_DESKTOP_SHORTCUT_COMMENT :Um clone de Transport Tycoon Deluxe
|
||||
|
||||
##id 0x2000
|
||||
# Town building names
|
||||
STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1 :Edifício alto de escritórios
|
||||
@@ -4046,7 +4021,6 @@ STR_FORMAT_INDUSTRY_NAME :{1:STRING} de {
|
||||
STR_FORMAT_WAYPOINT_NAME :Ponto de controle {TOWN}
|
||||
STR_FORMAT_WAYPOINT_NAME_SERIAL :Ponto de controle {TOWN} #{COMMA}
|
||||
|
||||
|
||||
STR_UNKNOWN_STATION :estação desconhecida
|
||||
STR_DEFAULT_SIGN_NAME :Placa
|
||||
STR_COMPANY_SOMEONE :alguém
|
||||
@@ -4136,5 +4110,3 @@ STR_BUS :{BLACK}{BUS}
|
||||
STR_LORRY :{BLACK}{LORRY}
|
||||
STR_PLANE :{BLACK}{PLANE}
|
||||
STR_SHIP :{BLACK}{SHIP}
|
||||
|
||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||
|
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user