1
0
Fork 0

(svn r16324) [0.7] -Backport from trunk:

- Fix: Desyncs due to the fact that depot searching with a maximum search depth simply does not work with YAPF's caches [FS#2900] (r16323)
- Fix: Trains could get stuck in a depot when they wanted to go to the same depot again [FS#2873] (r16322)
- Fix: In the scenario editor change the (starting) game year of the scenario, not the (starting) game year for new games/scenarios (r16321)
- Fix: Loading of savegames created in revision between 0.3.5 and 0.3.6 caused crash (r16320)
- Fix: [NoAI] Set the autorenew settings for new AI companies to the default values, not to 0 or the local settings (r16316)
- Fix: [NewGRF] Allow accessing the house age when the house is not yet built (r16314)
- Fix: (Get|Set)TrackBits() is only valid for RAIL_TILE_NORMAL and _SIGNALS (r16311)
release/0.7
rubidium 2009-05-16 20:29:53 +00:00
parent 085b498c28
commit ab7b117c50
23 changed files with 173 additions and 131 deletions

View File

@ -93,7 +93,7 @@ ifeq ($(shell if test -f config.cache; then echo 1; fi), 1)
@echo " Going to reconfigure with last known settings..." @echo " Going to reconfigure with last known settings..."
@echo "----------------" @echo "----------------"
# Make sure we don't lock config.cache # Make sure we don't lock config.cache
@$(shell cat config.cache | sed 's~\\ ~\\\\ ~g') || exit 1 @$(shell cat config.cache | sed 's@\\ @\\\\ @g') || exit 1
@echo "----------------" @echo "----------------"
@echo "Reconfig done. Please re-execute make." @echo "Reconfig done. Please re-execute make."
@echo "----------------" @echo "----------------"

View File

@ -20,7 +20,7 @@ SRC_DIR = "$(ROOT_DIR)/src"
BUNDLE_DIR = "$(ROOT_DIR)/bundle" BUNDLE_DIR = "$(ROOT_DIR)/bundle"
BUNDLES_DIR = "$(ROOT_DIR)/bundles" BUNDLES_DIR = "$(ROOT_DIR)/bundles"
TTD = "openttd.exe" TTD = "openttd.exe"
TARGET := $(shell echo $(PLATFORM) | sed "s~win64~x64~;s~win32~Win32~") TARGET := $(shell echo $(PLATFORM) | sed "s@win64@x64@;s@win32@Win32@")
all: all:
$(Q)cp objs/$(TARGET)/Release/$(TTD) $(BIN_DIR)/$(TTD) $(Q)cp objs/$(TARGET)/Release/$(TTD) $(BIN_DIR)/$(TTD)

View File

@ -57,7 +57,7 @@ ENDIAN_TARGETS := endian_target.h $(ENDIAN_CHECK)
# For more information, please check: # For more information, please check:
# http://maillist.openttd.org/pipermail/devs/2007-April/000284.html # http://maillist.openttd.org/pipermail/devs/2007-April/000284.html
# http://maillist.openttd.org/pipermail/devs/2007-February/000248.html # http://maillist.openttd.org/pipermail/devs/2007-February/000248.html
GCC295_FIX=sed -r 's~^(\t*)(.*)( const )([A-Za-z0-9_ ]+(\[.*\]){2,})(( = \{)|(;))(.*)$$~\1\2 \4\6\8\9~g' GCC295_FIX=sed -r 's@^(\t*)(.*)( const )([A-Za-z0-9_ ]+(\[.*\]){2,})(( = \{)|(;))(.*)$$@\1\2 \4\6\8\9@g'
# This 'sed' removes the 3rd '4' in the # lines of the -E output of # This 'sed' removes the 3rd '4' in the # lines of the -E output of
# gcc 2.95.3 and lower, as it should indicate that it is a C-linkage, but the # gcc 2.95.3 and lower, as it should indicate that it is a C-linkage, but the
# compiler can't handle that information (just don't ask). So we remove it # compiler can't handle that information (just don't ask). So we remove it
@ -65,7 +65,7 @@ GCC295_FIX=sed -r 's~^(\t*)(.*)( const )([A-Za-z0-9_ ]+(\[.*\]){2,})(( = \{)|(;)
# Furthermore gcc 2.95 has some trouble with protected and private when # Furthermore gcc 2.95 has some trouble with protected and private when
# accessing the protected/private stuff of the enclosing class (or the # accessing the protected/private stuff of the enclosing class (or the
# super class of the enclosing class). # super class of the enclosing class).
GCC295_FIX_2=sed -e 's~\(^\# [0-9][0-9]* "[^"]*"[ 0-9]*\) 4$$~\1~g;s~private:~public:~g;s~protected:~public:~g' GCC295_FIX_2=sed -e 's@\(^\# [0-9][0-9]* "[^"]*"[ 0-9]*\) 4$$@\1@g;s@private:@public:@g;s@protected:@public:@g'
# Check if we want to show what we are doing # Check if we want to show what we are doing
ifdef VERBOSE ifdef VERBOSE
@ -98,7 +98,7 @@ MODIFIED := $(shell echo "$(VERSIONS)" | cut -f 3 -d' ')
ifdef REVISION ifdef REVISION
# Use specified revision (which should be of the form "r000"). # Use specified revision (which should be of the form "r000").
REV := $(REVISION) REV := $(REVISION)
REV_NR := $(shell echo $(REVISION) | sed "s~[^0-9]~~g") REV_NR := $(shell echo $(REVISION) | sed "s@[^0-9]@@g")
else else
# Use autodetected revisions # Use autodetected revisions
REV := $(shell echo "$(VERSIONS)" | cut -f 1 -d' ') REV := $(shell echo "$(VERSIONS)" | cut -f 1 -d' ')
@ -143,15 +143,15 @@ endif
$(OBJS_C:%.o=%.d): %.d: $(SRC_DIR)/%.c $(FILE_DEP) $(OBJS_C:%.o=%.d): %.d: $(SRC_DIR)/%.c $(FILE_DEP)
$(E) '$(STAGE) DEP $(<:$(SRC_DIR)/%.c=%.c)' $(E) '$(STAGE) DEP $(<:$(SRC_DIR)/%.c=%.c)'
$(Q)$(CC_HOST) $(CC_CFLAGS) $(CFLAGS) -MM $< | sed 's~^$(@F:%.d=%.o):~$@ $(@:%.d=%.o):~' > $@ $(Q)$(CC_HOST) $(CC_CFLAGS) $(CFLAGS) -MM $< | sed 's@^$(@F:%.d=%.o):@$@ $(@:%.d=%.o):@' > $@
$(OBJS_CPP:%.o=%.d): %.d: $(SRC_DIR)/%.cpp $(FILE_DEP) $(OBJS_CPP:%.o=%.d): %.d: $(SRC_DIR)/%.cpp $(FILE_DEP)
$(E) '$(STAGE) DEP $(<:$(SRC_DIR)/%.cpp=%.cpp)' $(E) '$(STAGE) DEP $(<:$(SRC_DIR)/%.cpp=%.cpp)'
$(Q)$(CXX_HOST) $(CFLAGS) -MM $< | sed 's~^$(@F:%.d=%.o):~$@ $(@:%.d=%.o):~' > $@ $(Q)$(CXX_HOST) $(CFLAGS) -MM $< | sed 's@^$(@F:%.d=%.o):@$@ $(@:%.d=%.o):@' > $@
$(OBJS_MM:%.o=%.d): %.d: $(SRC_DIR)/%.mm $(FILE_DEP) $(OBJS_MM:%.o=%.d): %.d: $(SRC_DIR)/%.mm $(FILE_DEP)
$(E) '$(STAGE) DEP $(<:$(SRC_DIR)/%.mm=%.mm)' $(E) '$(STAGE) DEP $(<:$(SRC_DIR)/%.mm=%.mm)'
$(Q)$(CC_HOST) $(CFLAGS) -MM $< | sed 's~^$(@F:%.d=%.o):~$@ $(@:%.d=%.o):~' > $@ $(Q)$(CC_HOST) $(CFLAGS) -MM $< | sed 's@^$(@F:%.d=%.o):@$@ $(@:%.d=%.o):@' > $@
$(OBJS_RC:%.o=%.d): %.d: $(SRC_DIR)/%.rc $(FILE_DEP) $(OBJS_RC:%.o=%.d): %.d: $(SRC_DIR)/%.rc $(FILE_DEP)
$(E) '$(STAGE) DEP $(<:$(SRC_DIR)/%.mm=%.mm)' $(E) '$(STAGE) DEP $(<:$(SRC_DIR)/%.mm=%.mm)'
@ -182,7 +182,7 @@ endif
# Convert x:/... paths to /x/... for mingw # Convert x:/... paths to /x/... for mingw
ifeq ($(OS), MINGW) ifeq ($(OS), MINGW)
@cat Makefile.dep.tmp | sed 's~\([a-zA-Z]\):\/~\/\1\/~g' > Makefile.dep.tmp.mingw @cat Makefile.dep.tmp | sed 's@\([a-zA-Z]\):\/@\/\1\/@g' > Makefile.dep.tmp.mingw
@cp Makefile.dep.tmp.mingw Makefile.dep.tmp @cp Makefile.dep.tmp.mingw Makefile.dep.tmp
@rm -f Makefile.dep.tmp.mingw @rm -f Makefile.dep.tmp.mingw
endif endif
@ -211,7 +211,7 @@ endif
{ \ { \
print $$0 \ print $$0 \
} \ } \
' < Makefile.dep.tmp | sed 's~ *~ ~g;s~ $$~~' | $(SORT) > Makefile.dep ' < Makefile.dep.tmp | sed 's@ *@ @g;s@ $$@@' | $(SORT) > Makefile.dep
$(Q)rm -f Makefile.dep.tmp Makefile.dep.tmp.bak $(Q)rm -f Makefile.dep.tmp Makefile.dep.tmp.bak
@ -280,10 +280,10 @@ $(ENDIAN_CHECK): $(SRC_DIR)/endian_check.cpp
# Revision files # Revision files
$(SRC_DIR)/rev.cpp: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/rev.cpp.in $(SRC_DIR)/rev.cpp: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/rev.cpp.in
$(Q)cat $(SRC_DIR)/rev.cpp.in | sed "s~@@REVISION@@~$(REV_NR)~g;s~@@VERSION@@~$(REV)~g;s~@@MODIFIED@@~$(MODIFIED)~g;s~@@DATE@@~`date +%d.%m.%y`~g" > $(SRC_DIR)/rev.cpp $(Q)cat $(SRC_DIR)/rev.cpp.in | sed "s@\!\!REVISION\!\!@$(REV_NR)@g;s@!!VERSION!!@$(REV)@g;s@!!MODIFIED!!@$(MODIFIED)@g;s@!!DATE!!@`date +%d.%m.%y`@g" > $(SRC_DIR)/rev.cpp
$(SRC_DIR)/ottdres.rc: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/ottdres.rc.in $(SRC_DIR)/ottdres.rc: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/ottdres.rc.in
$(Q)cat $(SRC_DIR)/ottdres.rc.in | sed "s~@@REVISION@@~$(REV_NR)~g;s~@@VERSION@@~$(REV)~g;s~@@DATE@@~`date +%d.%m.%y`~g" > $(SRC_DIR)/ottdres.rc $(Q)cat $(SRC_DIR)/ottdres.rc.in | sed "s@\!\!REVISION\!\!@$(REV_NR)@g;s@!!VERSION!!@$(REV)@g;s@!!DATE!!@`date +%d.%m.%y`@g" > $(SRC_DIR)/ottdres.rc
FORCE: FORCE:

View File

@ -1072,7 +1072,7 @@
GetAutoRenewStatus(); true GetAutoRenewStatus(); true
SetAutoRenewStatus(true); false SetAutoRenewStatus(true); false
SetAutoRenewStatus(false); true SetAutoRenewStatus(false); true
GetAutoRenewMonths(); -6 GetAutoRenewMonths(); 6
SetAutoRenewMonths(-12); true SetAutoRenewMonths(-12); true
GetAutoRenewMonths(); -12 GetAutoRenewMonths(); -12
SetAutoRenewMonths(-12); false SetAutoRenewMonths(-12); false

View File

@ -415,7 +415,7 @@ save_params() {
configure="$CONFIGURE_EXECUTABLE --ignore-extra-parameters" configure="$CONFIGURE_EXECUTABLE --ignore-extra-parameters"
for p in $save_params_array; do for p in $save_params_array; do
eval "v=\"\$$p\"" eval "v=\"\$$p\""
p=`echo "$p" | sed 's~_~-~g;s~\n~~g;s~ ~\\ ~g'` p=`echo "$p" | sed 's@_@-@g;s@\n@@g;s@ @\\ @g'`
# Only save those params that aren't empty # Only save those params that aren't empty
configure="$configure --$p=\"$v\"" configure="$configure --$p=\"$v\""
done done
@ -904,7 +904,7 @@ check_params() {
doc_dir="$data_dir/docs" doc_dir="$data_dir/docs"
fi fi
else else
doc_dir="`echo $doc_dir | sed 's~\([^\]\)\\\\ ~\1\\\\\\\\ ~g;s~\([^\]\) ~\1\\\\\\\\ ~g'`" doc_dir="`echo $doc_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`"
fi fi
if [ "$icon_theme_dir" = "1" ]; then if [ "$icon_theme_dir" = "1" ]; then
@ -914,7 +914,7 @@ check_params() {
icon_theme_dir="" icon_theme_dir=""
fi fi
else else
icon_theme_dir="`echo $icon_theme_dir | sed 's~\([^\]\)\\\\ ~\1\\\\\\\\ ~g;s~\([^\]\) ~\1\\\\\\\\ ~g'`" icon_theme_dir="`echo $icon_theme_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`"
fi fi
if [ "$personal_dir" = "1" ]; then if [ "$personal_dir" = "1" ]; then
@ -926,7 +926,7 @@ check_params() {
personal_dir=".openttd" personal_dir=".openttd"
fi fi
else else
personal_dir="`echo $personal_dir | sed 's~\([^\]\)\\\\ ~\1\\\\\\\\ ~g;s~\([^\]\) ~\1\\\\\\\\ ~g'`" personal_dir="`echo $personal_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`"
fi fi
if [ "$shared_dir" = "1" ]; then if [ "$shared_dir" = "1" ]; then
@ -937,7 +937,7 @@ check_params() {
shared_dir="" shared_dir=""
fi fi
else else
shared_dir="`echo $shared_dir | sed 's~\([^\]\)\\\\ ~\1\\\\\\\\ ~g;s~\([^\]\) ~\1\\\\\\\\ ~g'`" shared_dir="`echo $shared_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`"
fi fi
if [ "$man_dir" = "1" ]; then if [ "$man_dir" = "1" ]; then
@ -948,7 +948,7 @@ check_params() {
man_dir="" man_dir=""
fi fi
else else
man_dir="`echo $man_dir | sed 's~\([^\]\)\\\\ ~\1\\\\\\\\ ~g;s~\([^\]\) ~\1\\\\\\\\ ~g'`" man_dir="`echo $man_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`"
fi fi
if [ "$menu_dir" = "1" ]; then if [ "$menu_dir" = "1" ]; then
@ -959,7 +959,7 @@ check_params() {
menu_dir="" menu_dir=""
fi fi
else else
menu_dir="`echo $menu_dir | sed 's~\([^\]\)\\\\ ~\1\\\\\\\\ ~g;s~\([^\]\) ~\1\\\\\\\\ ~g'`" menu_dir="`echo $menu_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`"
fi fi
# "set_universal_binary_flags" needs to be before "detect_iconv" # "set_universal_binary_flags" needs to be before "detect_iconv"
@ -1207,7 +1207,7 @@ make_cflags_and_ldflags() {
if [ -n "$sdl_config" ]; then if [ -n "$sdl_config" ]; then
CFLAGS="$CFLAGS -DWITH_SDL" CFLAGS="$CFLAGS -DWITH_SDL"
# SDL must not add _GNU_SOURCE as it breaks many platforms # SDL must not add _GNU_SOURCE as it breaks many platforms
CFLAGS="$CFLAGS `$sdl_config --cflags | sed 's~-D_GNU_SOURCE[^ ]*~~'`" CFLAGS="$CFLAGS `$sdl_config --cflags | sed 's@-D_GNU_SOURCE[^ ]*@@'`"
if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ] && [ "$os" != "WINCE" ]; then if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ] && [ "$os" != "WINCE" ]; then
if [ "$enable_static" != "0" ]; then if [ "$enable_static" != "0" ]; then
LIBS="$LIBS `$sdl_config --static-libs`" LIBS="$LIBS `$sdl_config --static-libs`"
@ -1269,7 +1269,7 @@ make_cflags_and_ldflags() {
if [ "$os" = "OSX" ]; then if [ "$os" = "OSX" ]; then
# fontconfig_config goes via pkg-config on all systems, which doesn't know --prefix # fontconfig_config goes via pkg-config on all systems, which doesn't know --prefix
# Also, despite the reason we link to the .a file ourself (because we can't use -static), we do need to ask pkg-config about possible other deps # Also, despite the reason we link to the .a file ourself (because we can't use -static), we do need to ask pkg-config about possible other deps
LIBS="$LIBS `$fontconfig_config --variable=prefix`/lib/libfontconfig.a `$fontconfig_config --libs --static | sed s~-lfontconfig~~`" LIBS="$LIBS `$fontconfig_config --variable=prefix`/lib/libfontconfig.a `$fontconfig_config --libs --static | sed s@-lfontconfig@@`"
else else
LIBS="$LIBS `$fontconfig_config --libs --static | tr '\n\r' ' '`" LIBS="$LIBS `$fontconfig_config --libs --static | tr '\n\r' ' '`"
fi fi
@ -1401,8 +1401,10 @@ make_cflags_and_ldflags() {
# Lovely hackish, not? # Lovely hackish, not?
# Btw, this almost always comes from outside the configure, so it is # Btw, this almost always comes from outside the configure, so it is
# not something we can control. # not something we can control.
# Also make makedepend aware of compiler's built-in defines.
if [ "$with_makedepend" != "0" ]; then if [ "$with_makedepend" != "0" ]; then
cflags_makedep="` echo "$CFLAGS" | sed 's~ /~ -~g;s~-I[ ]*[^ ]*~~g'`" cflags_makedep="`echo | $cxx_host -E -x c++ -dM - | sed 's@.define @-D@g;s@ .*@ @g;s@(.*)@@g' | tr -d '\r\n'`"
cflags_makedep="$cflags_makedep `echo "$CFLAGS" | sed 's@ /@ -@g;s@-I[ ]*[^ ]*@@g'`"
else else
makedepend="" makedepend=""
fi fi
@ -2562,104 +2564,104 @@ make_sed() {
# use multiple OBJS_DIR, because all in-between # use multiple OBJS_DIR, because all in-between
# binaries are stored in there, and nowhere else. # binaries are stored in there, and nowhere else.
SRC_REPLACE=" SRC_REPLACE="
s~!!CC_HOST!!~$cc_host~g; s@!!CC_HOST!!@$cc_host@g;
s~!!CXX_HOST!!~$cxx_host~g; s@!!CXX_HOST!!@$cxx_host@g;
s~!!CC_BUILD!!~$cc_build~g; s@!!CC_BUILD!!@$cc_build@g;
s~!!CXX_BUILD!!~$cxx_build~g; s@!!CXX_BUILD!!@$cxx_build@g;
s~!!WINDRES!!~$windres~g; s@!!WINDRES!!@$windres@g;
s~!!STRIP!!~$strip $strip_arg~g; s@!!STRIP!!@$strip $strip_arg@g;
s~!!LIPO!!~$lipo~g; s@!!LIPO!!@$lipo@g;
s~!!CC_CFLAGS!!~$CC_CFLAGS~g; s@!!CC_CFLAGS!!@$CC_CFLAGS@g;
s~!!CFLAGS!!~$T_CFLAGS~g; s@!!CFLAGS!!@$T_CFLAGS@g;
s~!!CFLAGS_BUILD!!~$CFLAGS_BUILD~g; s@!!CFLAGS_BUILD!!@$CFLAGS_BUILD@g;
s~!!STRGEN_FLAGS!!~$strgen_flags~g; s@!!STRGEN_FLAGS!!@$strgen_flags@g;
s~!!LIBS!!~$LIBS~g; s@!!LIBS!!@$LIBS@g;
s~!!LDFLAGS!!~$T_LDFLAGS~g; s@!!LDFLAGS!!@$T_LDFLAGS@g;
s~!!BIN_DIR!!~$BIN_DIR~g; s@!!BIN_DIR!!@$BIN_DIR@g;
s~!!ROOT_DIR!!~$ROOT_DIR~g; s@!!ROOT_DIR!!@$ROOT_DIR@g;
s~!!MEDIA_DIR!!~$MEDIA_DIR~g; s@!!MEDIA_DIR!!@$MEDIA_DIR@g;
s~!!SOURCE_LIST!!~$SOURCE_LIST~g; s@!!SOURCE_LIST!!@$SOURCE_LIST@g;
s~!!SRC_OBJS_DIR!!~$SRC_OBJS_DIR~g; s@!!SRC_OBJS_DIR!!@$SRC_OBJS_DIR@g;
s~!!LANG_OBJS_DIR!!~$LANG_OBJS_DIR~g; s@!!LANG_OBJS_DIR!!@$LANG_OBJS_DIR@g;
s~!!SRC_DIR!!~$SRC_DIR~g; s@!!SRC_DIR!!@$SRC_DIR@g;
s~!!SCRIPT_SRC_DIR!!~$SCRIPT_SRC_DIR~g; s@!!SCRIPT_SRC_DIR!!@$SCRIPT_SRC_DIR@g;
s~!!OSXAPP!!~$OSXAPP~g; s@!!OSXAPP!!@$OSXAPP@g;
s~!!LANG_DIR!!~$LANG_DIR~g; s@!!LANG_DIR!!@$LANG_DIR@g;
s~!!TTD!!~$TTD~g; s@!!TTD!!@$TTD@g;
s~!!BINARY_DIR!!~$prefix_dir/$binary_dir~g; s@!!BINARY_DIR!!@$prefix_dir/$binary_dir@g;
s~!!DATA_DIR!!~$prefix_dir/$data_dir~g; s@!!DATA_DIR!!@$prefix_dir/$data_dir@g;
s~!!DOC_DIR!!~$prefix_dir/$doc_dir~g; s@!!DOC_DIR!!@$prefix_dir/$doc_dir@g;
s~!!MAN_DIR!!~$prefix_dir/$man_dir~g; s@!!MAN_DIR!!@$prefix_dir/$man_dir@g;
s~!!ICON_DIR!!~$prefix_dir/$icon_dir~g; s@!!ICON_DIR!!@$prefix_dir/$icon_dir@g;
s~!!ICON_THEME_DIR!!~$prefix_dir/$icon_theme_dir~g; s@!!ICON_THEME_DIR!!@$prefix_dir/$icon_theme_dir@g;
s~!!PERSONAL_DIR!!~$personal_dir~g; s@!!PERSONAL_DIR!!@$personal_dir@g;
s~!!SHARED_DIR!!~$shared_dir~g; s@!!SHARED_DIR!!@$shared_dir@g;
s~!!INSTALL_DIR!!~$install_dir~g; s@!!INSTALL_DIR!!@$install_dir@g;
s~!!BINARY_NAME!!~$binary_name~g; s@!!BINARY_NAME!!@$binary_name@g;
s~!!STRGEN!!~$STRGEN~g; s@!!STRGEN!!@$STRGEN@g;
s~!!ENDIAN_CHECK!!~$ENDIAN_CHECK~g; s@!!ENDIAN_CHECK!!@$ENDIAN_CHECK@g;
s~!!ENDIAN_FORCE!!~$endian~g; s@!!ENDIAN_FORCE!!@$endian@g;
s~!!STAGE!!~$STAGE~g; s@!!STAGE!!@$STAGE@g;
s~!!MAKEDEPEND!!~$makedepend~g; s@!!MAKEDEPEND!!@$makedepend@g;
s~!!CFLAGS_MAKEDEP!!~$cflags_makedep~g; s@!!CFLAGS_MAKEDEP!!@$cflags_makedep@g;
s~!!SORT!!~$sort~g; s@!!SORT!!@$sort@g;
s~!!CONFIG_CACHE_COMPILER!!~config.cache.compiler~g; s@!!CONFIG_CACHE_COMPILER!!@config.cache.compiler@g;
s~!!CONFIG_CACHE_LINKER!!~config.cache.linker~g; s@!!CONFIG_CACHE_LINKER!!@config.cache.linker@g;
s~!!CONFIG_CACHE_ENDIAN!!~config.cache.endian~g; s@!!CONFIG_CACHE_ENDIAN!!@config.cache.endian@g;
s~!!CONFIG_CACHE_SOURCE!!~config.cache.source~g; s@!!CONFIG_CACHE_SOURCE!!@config.cache.source@g;
s~!!CONFIG_CACHE_VERSION!!~config.cache.version~g; s@!!CONFIG_CACHE_VERSION!!@config.cache.version@g;
s~!!CONFIG_CACHE_SOURCE_LIST!!~config.cache.source.list~g; s@!!CONFIG_CACHE_SOURCE_LIST!!@config.cache.source.list@g;
s~!!CONFIG_CACHE_PWD!!~config.cache.pwd~g; s@!!CONFIG_CACHE_PWD!!@config.cache.pwd@g;
s~!!LANG_SUPPRESS!!~$lang_suppress~g; s@!!LANG_SUPPRESS!!@$lang_suppress@g;
s~!!OBJS_C!!~$OBJS_C~g; s@!!OBJS_C!!@$OBJS_C@g;
s~!!OBJS_CPP!!~$OBJS_CPP~g; s@!!OBJS_CPP!!@$OBJS_CPP@g;
s~!!OBJS_MM!!~$OBJS_MM~g; s@!!OBJS_MM!!@$OBJS_MM@g;
s~!!OBJS_RC!!~$OBJS_RC~g; s@!!OBJS_RC!!@$OBJS_RC@g;
s~!!SRCS!!~$SRCS~g; s@!!SRCS!!@$SRCS@g;
s~!!OS!!~$os~g; s@!!OS!!@$os@g;
s~!!CONFIGURE_FILES!!~$CONFIGURE_FILES~g; s@!!CONFIGURE_FILES!!@$CONFIGURE_FILES@g;
s~!!REVISION!!~$revision~g; s@!!REVISION!!@$revision@g;
s~!!AWK!!~$awk~g; s@!!AWK!!@$awk@g;
s~!!GCC295!!~$gcc295~g; s@!!GCC295!!@$gcc295@g;
s~!!DISTCC!!~$distcc~g; s@!!DISTCC!!@$distcc@g;
" "
if [ "$icon_theme_dir" != "" ]; then if [ "$icon_theme_dir" != "" ]; then
SRC_REPLACE="$SRC_REPLACE SRC_REPLACE="$SRC_REPLACE
s~!!ICON_THEME_DIR!!~$prefix_dir/$icon_theme_dir~g; s@!!ICON_THEME_DIR!!@$prefix_dir/$icon_theme_dir@g;
" "
else else
SRC_REPLACE="$SRC_REPLACE SRC_REPLACE="$SRC_REPLACE
s~!!ICON_THEME_DIR!!~~g; s@!!ICON_THEME_DIR!!@@g;
" "
fi fi
if [ "$man_dir" != "" ]; then if [ "$man_dir" != "" ]; then
SRC_REPLACE="$SRC_REPLACE SRC_REPLACE="$SRC_REPLACE
s~!!MAN_DIR!!~$prefix_dir/$man_dir~g; s@!!MAN_DIR!!@$prefix_dir/$man_dir@g;
" "
else else
SRC_REPLACE="$SRC_REPLACE SRC_REPLACE="$SRC_REPLACE
s~!!MAN_DIR!!~~g; s@!!MAN_DIR!!@@g;
" "
fi fi
if [ "$menu_dir" != "" ]; then if [ "$menu_dir" != "" ]; then
SRC_REPLACE="$SRC_REPLACE SRC_REPLACE="$SRC_REPLACE
s~!!MENU_DIR!!~$prefix_dir/$menu_dir~g; s@!!MENU_DIR!!@$prefix_dir/$menu_dir@g;
" "
else else
SRC_REPLACE="$SRC_REPLACE SRC_REPLACE="$SRC_REPLACE
s~!!MENU_DIR!!~~g; s@!!MENU_DIR!!@@g;
" "
fi fi
} }
generate_menu_item() { generate_menu_item() {
MENU_REPLACE=" MENU_REPLACE="
s~!!TTD!!~$TTD~g; s@!!TTD!!@$TTD@g;
s~!!MENU_GROUP!!~$menu_group~g; s@!!MENU_GROUP!!@$menu_group@g;
s~!!MENU_NAME!!~$menu_name~g s@!!MENU_NAME!!@$menu_name@g
" "
log 1 "Generating menu item..." log 1 "Generating menu item..."
mkdir -p media mkdir -p media

6
configure vendored
View File

@ -37,7 +37,7 @@ if [ "$1" = "--reconfig" ] || [ "$1" = "--reconfigure" ]; then
exit 1 exit 1
fi fi
# Make sure we don't lock config.cache # Make sure we don't lock config.cache
cat config.cache | sed 's~\\ ~\\\\ ~g' > cache.tmp cat config.cache | sed 's@\\ @\\\\ @g' > cache.tmp
sh cache.tmp sh cache.tmp
rm -f cache.tmp rm -f cache.tmp
exit $? exit $?
@ -59,7 +59,7 @@ STRGEN="strgen$EXE"
ENDIAN_CHECK="endian_check$EXE" ENDIAN_CHECK="endian_check$EXE"
if [ -z "$sort" ]; then if [ -z "$sort" ]; then
PIPE_SORT="sed s~a~a~" PIPE_SORT="sed s@a@a@"
else else
PIPE_SORT="$sort" PIPE_SORT="$sort"
fi fi
@ -125,7 +125,7 @@ SRCS="` echo \"$SRCS\" | $awk ' { ORS = " " } { print $0; }'`"
# In makefiles, we always use -u for sort # In makefiles, we always use -u for sort
if [ -z "$sort" ]; then if [ -z "$sort" ]; then
sort="sed s~a~a~" sort="sed s@a@a@"
else else
sort="$sort -u" sort="$sort -u"
fi fi

View File

@ -86,8 +86,8 @@ elif [ -d "$ROOT_DIR/.git" ]; then
fi fi
HASH=`LC_ALL=C git rev-parse --verify HEAD 2>/dev/null` HASH=`LC_ALL=C git rev-parse --verify HEAD 2>/dev/null`
REV="g`echo $HASH | cut -c1-8`" REV="g`echo $HASH | cut -c1-8`"
BRANCH=`git branch|grep '[*]' | sed 's~\* ~~;s~^master$~~'` BRANCH=`git branch|grep '[*]' | sed 's@\* @@;s@^master$@@'`
REV_NR=`LC_ALL=C git log --pretty=format:%s "$SRC_DIR" | grep "^(svn r[0-9]*)" | head -n 1 | sed "s~.*(svn r\([0-9]*\)).*~\1~"` REV_NR=`LC_ALL=C git log --pretty=format:%s "$SRC_DIR" | grep "^(svn r[0-9]*)" | head -n 1 | sed "s@.*(svn r\([0-9]*\)).*@\1@"`
elif [ -d "$ROOT_DIR/.hg" ]; then elif [ -d "$ROOT_DIR/.hg" ]; then
# We are a hg checkout # We are a hg checkout
if [ -n "`hg status \"$SRC_DIR\" | grep -v '^?'`" ]; then if [ -n "`hg status \"$SRC_DIR\" | grep -v '^?'`" ]; then
@ -95,8 +95,8 @@ elif [ -d "$ROOT_DIR/.hg" ]; then
fi fi
HASH=`LC_ALL=C hg parents 2>/dev/null | head -n 1 | cut -d: -f3` HASH=`LC_ALL=C hg parents 2>/dev/null | head -n 1 | cut -d: -f3`
REV="h`echo $HASH | cut -c1-8`" REV="h`echo $HASH | cut -c1-8`"
BRANCH=`hg branch | sed 's~^default$~~'` BRANCH=`hg branch | sed 's@^default$@@'`
REV_NR=`LC_ALL=C hg log -r $HASH:0 -k "svn" -l 1 --template "{desc}\n" "$SRC_DIR" | grep "^(svn r[0-9]*)" | head -n 1 | sed "s~.*(svn r\([0-9]*\)).*~\1~"` REV_NR=`LC_ALL=C hg log -r $HASH:0 -k "svn" -l 1 --template "{desc}\n" "$SRC_DIR" | grep "^(svn r[0-9]*)" | head -n 1 | sed "s@.*(svn r\([0-9]*\)).*@\1@"`
else else
# We don't know # We don't know
MODIFIED="1" MODIFIED="1"

View File

@ -16,10 +16,10 @@ End Sub
Sub UpdateFile(modified, revision, version, cur_date, filename) Sub UpdateFile(modified, revision, version, cur_date, filename)
FSO.CopyFile filename & ".in", filename FSO.CopyFile filename & ".in", filename
FindReplaceInFile filename, "@@MODIFIED@@", modified FindReplaceInFile filename, "!!MODIFIED!!", modified
FindReplaceInFile filename, "@@REVISION@@", revision FindReplaceInFile filename, "!!REVISION!!", revision
FindReplaceInFile filename, "@@VERSION@@", version FindReplaceInFile filename, "!!VERSION!!", version
FindReplaceInFile filename, "@@DATE@@", cur_date FindReplaceInFile filename, "!!DATE!!", cur_date
End Sub End Sub
Sub UpdateFiles(version) Sub UpdateFiles(version)

View File

@ -203,6 +203,7 @@
if (IsRailWaypointTile(tile)) return ::GetRailWaypointBits(tile); if (IsRailWaypointTile(tile)) return ::GetRailWaypointBits(tile);
if (IsRailStationTile(tile)) return ::TrackToTrackBits(::GetRailStationTrack(tile)); if (IsRailStationTile(tile)) return ::TrackToTrackBits(::GetRailStationTrack(tile));
if (IsLevelCrossingTile(tile)) return ::GetCrossingRailBits(tile); if (IsLevelCrossingTile(tile)) return ::GetCrossingRailBits(tile);
if (IsRailDepotTile(tile)) return ::TRACK_BIT_NONE;
return ::GetTrackBits(tile); return ::GetTrackBits(tile);
} }

View File

@ -293,6 +293,7 @@ public:
/** /**
* Get all RailTracks on the given tile. * Get all RailTracks on the given tile.
* @note A depot has no railtracks.
* @param tile The tile to check. * @param tile The tile to check.
* @pre IsRailTile(tile). * @pre IsRailTile(tile).
* @return A bitmask of RailTrack with all RailTracks on the tile. * @return A bitmask of RailTrack with all RailTracks on the tile.

View File

@ -445,6 +445,12 @@ Company *DoStartupNewCompany(bool is_ai)
c->inaugurated_year = _cur_year; c->inaugurated_year = _cur_year;
RandomCompanyManagerFaceBits(c->face, (GenderEthnicity)Random(), false); // create a random company manager face RandomCompanyManagerFaceBits(c->face, (GenderEthnicity)Random(), false); // create a random company manager face
/* Settings for non-ai companies are copied from the client settings later. */
if (is_ai) {
c->engine_renew_money = 100000;
c->engine_renew_months = 6;
}
GeneratePresidentName(c); GeneratePresidentName(c);
InvalidateWindow(WC_GRAPH_LEGEND, 0); InvalidateWindow(WC_GRAPH_LEGEND, 0);

View File

@ -255,7 +255,7 @@ static uint32 HouseGetVariable(const ResolverObject *object, byte variable, byte
case 0x40: return (IsTileType(tile, MP_HOUSE) ? GetHouseBuildingStage(tile) : 0) | TileHash2Bit(TileX(tile), TileY(tile)) << 2; case 0x40: return (IsTileType(tile, MP_HOUSE) ? GetHouseBuildingStage(tile) : 0) | TileHash2Bit(TileX(tile), TileY(tile)) << 2;
/* Building age. */ /* Building age. */
case 0x41: return GetHouseAge(tile); case 0x41: return IsTileType(tile, MP_HOUSE) ? GetHouseAge(tile) : 0;
/* Town zone */ /* Town zone */
case 0x42: return GetTownRadiusGroup(town, tile); case 0x42: return GetTownRadiusGroup(town, tile);

View File

@ -64,8 +64,8 @@ END
// //
VS_VERSION_INFO VERSIONINFO VS_VERSION_INFO VERSIONINFO
FILEVERSION 0,7,0,@@REVISION@@ FILEVERSION 0,7,0,!!REVISION!!
PRODUCTVERSION 0,7,0,@@REVISION@@ PRODUCTVERSION 0,7,0,!!REVISION!!
FILEFLAGSMASK 0x3fL FILEFLAGSMASK 0x3fL
#ifdef _DEBUG #ifdef _DEBUG
FILEFLAGS 0x1L FILEFLAGS 0x1L
@ -83,14 +83,14 @@ BEGIN
VALUE "Comments", "This program is licensed under the GNU General Public License.\0" VALUE "Comments", "This program is licensed under the GNU General Public License.\0"
VALUE "CompanyName", "OpenTTD Development Team\0" VALUE "CompanyName", "OpenTTD Development Team\0"
VALUE "FileDescription", "OpenTTD\0" VALUE "FileDescription", "OpenTTD\0"
VALUE "FileVersion", "Development @@VERSION@@\0" VALUE "FileVersion", "Development !!VERSION!!\0"
VALUE "InternalName", "openttd\0" VALUE "InternalName", "openttd\0"
VALUE "LegalCopyright", "Copyright \xA9 OpenTTD Developers 2002-2009. All Rights Reserved.\0" VALUE "LegalCopyright", "Copyright \xA9 OpenTTD Developers 2002-2009. All Rights Reserved.\0"
VALUE "LegalTrademarks", "\0" VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "openttd.exe\0" VALUE "OriginalFilename", "openttd.exe\0"
VALUE "PrivateBuild", "\0" VALUE "PrivateBuild", "\0"
VALUE "ProductName", "OpenTTD\0" VALUE "ProductName", "OpenTTD\0"
VALUE "ProductVersion", "Development @@VERSION@@\0" VALUE "ProductVersion", "Development !!VERSION!!\0"
VALUE "SpecialBuild", "-\0" VALUE "SpecialBuild", "-\0"
END END
END END

View File

@ -321,6 +321,8 @@ CommandCost CmdBuildSingleRail(TileIndex tile, DoCommandFlag flags, uint32 p1, u
case MP_RAILWAY: case MP_RAILWAY:
if (!CheckTileOwnership(tile)) return CMD_ERROR; if (!CheckTileOwnership(tile)) return CMD_ERROR;
if (!IsPlainRailTile(tile)) return CMD_ERROR;
if (!IsCompatibleRail(GetRailType(tile), railtype)) return_cmd_error(STR_1001_IMPOSSIBLE_TRACK_COMBINATION); if (!IsCompatibleRail(GetRailType(tile), railtype)) return_cmd_error(STR_1001_IMPOSSIBLE_TRACK_COMBINATION);
if (!CheckTrackCombination(tile, trackbit, flags) || if (!CheckTrackCombination(tile, trackbit, flags) ||
@ -554,6 +556,8 @@ CommandCost CmdRemoveSingleRail(TileIndex tile, DoCommandFlag flags, uint32 p1,
*/ */
bool FloodHalftile(TileIndex t) bool FloodHalftile(TileIndex t)
{ {
assert(IsPlainRailTile(t));
bool flooded = false; bool flooded = false;
if (GetRailGroundType(t) == RAIL_GROUND_WATER) return flooded; if (GetRailGroundType(t) == RAIL_GROUND_WATER) return flooded;
@ -1043,7 +1047,7 @@ static CommandCost CmdSignalTrackHelper(TileIndex tile, DoCommandFlag flags, uin
end_tile = p1; end_tile = p1;
if (signal_density == 0 || signal_density > 20) return CMD_ERROR; if (signal_density == 0 || signal_density > 20) return CMD_ERROR;
if (!IsTileType(tile, MP_RAILWAY)) return CMD_ERROR; if (!IsTileType(tile, MP_RAILWAY) || !IsPlainRailTile(tile)) return CMD_ERROR;
/* for vertical/horizontal tracks, double the given signals density /* for vertical/horizontal tracks, double the given signals density
* since the original amount will be too dense (shorter tracks) */ * since the original amount will be too dense (shorter tracks) */
@ -1169,6 +1173,7 @@ CommandCost CmdRemoveSingleSignal(TileIndex tile, DoCommandFlag flags, uint32 p1
if (!ValParamTrackOrientation(track) || if (!ValParamTrackOrientation(track) ||
!IsTileType(tile, MP_RAILWAY) || !IsTileType(tile, MP_RAILWAY) ||
!IsPlainRailTile(tile) ||
!HasTrack(tile, track) || !HasTrack(tile, track) ||
!EnsureNoTrainOnTrack(tile, track) || !EnsureNoTrainOnTrack(tile, track) ||
!HasSignalOnTrack(tile, track)) { !HasSignalOnTrack(tile, track)) {
@ -2175,7 +2180,7 @@ static void TileLoop_Track(TileIndex tile)
(rail & TRACK_BIT_X) (rail & TRACK_BIT_X)
)) { )) {
TileIndex n = tile + TileDiffXY(0, -1); TileIndex n = tile + TileDiffXY(0, -1);
TrackBits nrail = GetTrackBits(n); TrackBits nrail = (IsTileType(n, MP_RAILWAY) && IsPlainRailTile(n) ? GetTrackBits(n) : TRACK_BIT_NONE);
if (!IsTileType(n, MP_RAILWAY) || if (!IsTileType(n, MP_RAILWAY) ||
!IsTileOwner(n, owner) || !IsTileOwner(n, owner) ||
@ -2190,7 +2195,7 @@ static void TileLoop_Track(TileIndex tile)
(rail & TRACK_BIT_X) (rail & TRACK_BIT_X)
)) { )) {
TileIndex n = tile + TileDiffXY(0, 1); TileIndex n = tile + TileDiffXY(0, 1);
TrackBits nrail = GetTrackBits(n); TrackBits nrail = (IsTileType(n, MP_RAILWAY) && IsPlainRailTile(n) ? GetTrackBits(n) : TRACK_BIT_NONE);
if (!IsTileType(n, MP_RAILWAY) || if (!IsTileType(n, MP_RAILWAY) ||
!IsTileOwner(n, owner) || !IsTileOwner(n, owner) ||
@ -2206,7 +2211,7 @@ static void TileLoop_Track(TileIndex tile)
(rail & TRACK_BIT_Y) (rail & TRACK_BIT_Y)
)) { )) {
TileIndex n = tile + TileDiffXY(-1, 0); TileIndex n = tile + TileDiffXY(-1, 0);
TrackBits nrail = GetTrackBits(n); TrackBits nrail = (IsTileType(n, MP_RAILWAY) && IsPlainRailTile(n) ? GetTrackBits(n) : TRACK_BIT_NONE);
if (!IsTileType(n, MP_RAILWAY) || if (!IsTileType(n, MP_RAILWAY) ||
!IsTileOwner(n, owner) || !IsTileOwner(n, owner) ||
@ -2221,7 +2226,7 @@ static void TileLoop_Track(TileIndex tile)
(rail & TRACK_BIT_Y) (rail & TRACK_BIT_Y)
)) { )) {
TileIndex n = tile + TileDiffXY(1, 0); TileIndex n = tile + TileDiffXY(1, 0);
TrackBits nrail = GetTrackBits(n); TrackBits nrail = (IsTileType(n, MP_RAILWAY) && IsPlainRailTile(n) ? GetTrackBits(n) : TRACK_BIT_NONE);
if (!IsTileType(n, MP_RAILWAY) || if (!IsTileType(n, MP_RAILWAY) ||
!IsTileOwner(n, owner) || !IsTileOwner(n, owner) ||

View File

@ -141,6 +141,7 @@ static inline void SetRailType(TileIndex t, RailType r)
*/ */
static inline TrackBits GetTrackBits(TileIndex tile) static inline TrackBits GetTrackBits(TileIndex tile)
{ {
assert(IsPlainRailTile(tile));
return (TrackBits)GB(_m[tile].m5, 0, 6); return (TrackBits)GB(_m[tile].m5, 0, 6);
} }
@ -151,6 +152,7 @@ static inline TrackBits GetTrackBits(TileIndex tile)
*/ */
static inline void SetTrackBits(TileIndex t, TrackBits b) static inline void SetTrackBits(TileIndex t, TrackBits b)
{ {
assert(IsPlainRailTile(t));
SB(_m[t].m5, 0, 6, b); SB(_m[t].m5, 0, 6, b);
} }

View File

@ -20,7 +20,7 @@
* norev000 is for non-releases that are made on systems without * norev000 is for non-releases that are made on systems without
* subversion or sources that are not a checkout of subversion. * subversion or sources that are not a checkout of subversion.
*/ */
const char _openttd_revision[] = "@@VERSION@@"; const char _openttd_revision[] = "!!VERSION!!";
/** /**
* Let us know if current build was modified. This detection * Let us know if current build was modified. This detection
@ -30,7 +30,7 @@ const char _openttd_revision[] = "@@VERSION@@";
* (compiling from sources without any version control software) * (compiling from sources without any version control software)
* and 2 is for modified revision. * and 2 is for modified revision.
*/ */
const byte _openttd_revision_modified = @@MODIFIED@@; const byte _openttd_revision_modified = !!MODIFIED!!;
/** /**
* The NewGRF revision of OTTD: * The NewGRF revision of OTTD:
@ -45,11 +45,11 @@ const byte _openttd_revision_modified = @@MODIFIED@@;
* final release will always have a lower version number than the released * final release will always have a lower version number than the released
* version, thus making comparisions on specific revisions easy. * version, thus making comparisions on specific revisions easy.
*/ */
const uint32 _openttd_newgrf_version = 0 << 28 | 7 << 24 | 0 << 20 | 0 << 19 | (@@REVISION@@ & ((1 << 19) - 1)); const uint32 _openttd_newgrf_version = 0 << 28 | 7 << 24 | 0 << 20 | 0 << 19 | (!!REVISION!! & ((1 << 19) - 1));
#ifdef __MORPHOS__ #ifdef __MORPHOS__
/** /**
* Variable used by MorphOS to show the version. * Variable used by MorphOS to show the version.
*/ */
extern const char morphos_versions_tag[] = "$VER: OpenTTD @@VERSION@@ (@@DATE@@) OpenTTD Team [MorphOS, PowerPC]"; extern const char morphos_versions_tag[] = "$VER: OpenTTD !!VERSION!! (!!DATE!!) OpenTTD Team [MorphOS, PowerPC]";
#endif #endif

View File

@ -18,7 +18,7 @@
bool IsPossibleCrossing(const TileIndex tile, Axis ax) bool IsPossibleCrossing(const TileIndex tile, Axis ax)
{ {
return (IsTileType(tile, MP_RAILWAY) && return (IsTileType(tile, MP_RAILWAY) &&
!HasSignals(tile) && GetRailTileType(tile) == RAIL_TILE_NORMAL &&
GetTrackBits(tile) == (ax == AXIS_X ? TRACK_BIT_Y : TRACK_BIT_X) && GetTrackBits(tile) == (ax == AXIS_X ? TRACK_BIT_Y : TRACK_BIT_X) &&
GetFoundationSlope(tile, NULL) == SLOPE_FLAT); GetFoundationSlope(tile, NULL) == SLOPE_FLAT);
} }

View File

@ -321,6 +321,7 @@ static CommandCost RemoveRoad(TileIndex tile, DoCommandFlag flags, RoadBits piec
if (rt == ROADTYPE_ROAD && HasTileRoadType(tile, ROADTYPE_TRAM) && (flags & DC_EXEC || crossing_check)) return CMD_ERROR; if (rt == ROADTYPE_ROAD && HasTileRoadType(tile, ROADTYPE_TRAM) && (flags & DC_EXEC || crossing_check)) return CMD_ERROR;
if (flags & DC_EXEC) { if (flags & DC_EXEC) {
Track railtrack = GetCrossingRailTrack(tile);
RoadTypes rts = GetRoadTypes(tile) & ComplementRoadTypes(RoadTypeToRoadTypes(rt)); RoadTypes rts = GetRoadTypes(tile) & ComplementRoadTypes(RoadTypeToRoadTypes(rt));
if (rts == ROADTYPES_NONE) { if (rts == ROADTYPES_NONE) {
TrackBits tracks = GetCrossingRailBits(tile); TrackBits tracks = GetCrossingRailBits(tile);
@ -332,7 +333,7 @@ static CommandCost RemoveRoad(TileIndex tile, DoCommandFlag flags, RoadBits piec
/* If we ever get HWAY and it is possible without road then we will need to promote ownership and invalidate town index here, too */ /* If we ever get HWAY and it is possible without road then we will need to promote ownership and invalidate town index here, too */
} }
MarkTileDirtyByTile(tile); MarkTileDirtyByTile(tile);
YapfNotifyTrackLayoutChange(tile, FindFirstTrack(GetTrackBits(tile))); YapfNotifyTrackLayoutChange(tile, railtrack);
} }
return CommandCost(EXPENSES_CONSTRUCTION, _price.remove_road * 2); return CommandCost(EXPENSES_CONSTRUCTION, _price.remove_road * 2);
} }
@ -549,9 +550,10 @@ CommandCost CmdBuildRoad(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR; if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR;
if (flags & DC_EXEC) { if (flags & DC_EXEC) {
YapfNotifyTrackLayoutChange(tile, FindFirstTrack(GetTrackBits(tile))); Track railtrack = AxisToTrack(OtherAxis(roaddir));
YapfNotifyTrackLayoutChange(tile, railtrack);
/* Always add road to the roadtypes (can't draw without it) */ /* Always add road to the roadtypes (can't draw without it) */
bool reserved = HasBit(GetTrackReservation(tile), AxisToTrack(OtherAxis(roaddir))); bool reserved = HasBit(GetTrackReservation(tile), railtrack);
MakeRoadCrossing(tile, _current_company, _current_company, GetTileOwner(tile), roaddir, GetRailType(tile), RoadTypeToRoadTypes(rt) | ROADTYPES_ROAD, p2); MakeRoadCrossing(tile, _current_company, _current_company, GetTileOwner(tile), roaddir, GetRailType(tile), RoadTypeToRoadTypes(rt) | ROADTYPES_ROAD, p2);
SetCrossingReservation(tile, reserved); SetCrossingReservation(tile, reserved);
UpdateLevelCrossing(tile, false); UpdateLevelCrossing(tile, false);

View File

@ -138,8 +138,8 @@ static void Load_ORDR()
free(orders); free(orders);
} else if (CheckSavegameVersionOldStyle(5, 2)) { } else if (CheckSavegameVersionOldStyle(5, 2)) {
len /= sizeof(uint16); len /= sizeof(uint32);
uint16 *orders = MallocT<uint16>(len + 1); uint32 *orders = MallocT<uint32>(len + 1);
SlArray(orders, len, SLE_UINT32); SlArray(orders, len, SLE_UINT32);

View File

@ -784,8 +784,8 @@ static void ToolbarScenDateBackward(Window *w)
w->HandleButtonClick(TBSE_DATEBACKWARD); w->HandleButtonClick(TBSE_DATEBACKWARD);
w->SetDirty(); w->SetDirty();
_settings_newgame.game_creation.starting_year = Clamp(_settings_newgame.game_creation.starting_year - 1, MIN_YEAR, MAX_YEAR); _settings_game.game_creation.starting_year = Clamp(_settings_game.game_creation.starting_year - 1, MIN_YEAR, MAX_YEAR);
SetDate(ConvertYMDToDate(_settings_newgame.game_creation.starting_year, 0, 1)); SetDate(ConvertYMDToDate(_settings_game.game_creation.starting_year, 0, 1));
} }
_left_button_clicked = false; _left_button_clicked = false;
} }
@ -797,8 +797,8 @@ static void ToolbarScenDateForward(Window *w)
w->HandleButtonClick(TBSE_DATEFORWARD); w->HandleButtonClick(TBSE_DATEFORWARD);
w->SetDirty(); w->SetDirty();
_settings_newgame.game_creation.starting_year = Clamp(_settings_newgame.game_creation.starting_year + 1, MIN_YEAR, MAX_YEAR); _settings_game.game_creation.starting_year = Clamp(_settings_game.game_creation.starting_year + 1, MIN_YEAR, MAX_YEAR);
SetDate(ConvertYMDToDate(_settings_newgame.game_creation.starting_year, 0, 1)); SetDate(ConvertYMDToDate(_settings_game.game_creation.starting_year, 0, 1));
} }
_left_button_clicked = false; _left_button_clicked = false;
} }
@ -1233,8 +1233,8 @@ public:
virtual void OnPaint() virtual void OnPaint()
{ {
this->SetWidgetDisabledState(TBSE_DATEBACKWARD, _settings_newgame.game_creation.starting_year <= MIN_YEAR); this->SetWidgetDisabledState(TBSE_DATEBACKWARD, _settings_game.game_creation.starting_year <= MIN_YEAR);
this->SetWidgetDisabledState(TBSE_DATEFORWARD, _settings_newgame.game_creation.starting_year >= MAX_YEAR); this->SetWidgetDisabledState(TBSE_DATEFORWARD, _settings_game.game_creation.starting_year >= MAX_YEAR);
/* Draw brown-red toolbar bg. */ /* Draw brown-red toolbar bg. */
GfxFillRect(0, 0, this->width - 1, this->height - 1, 0xB2); GfxFillRect(0, 0, this->width - 1, this->height - 1, 0xB2);
@ -1242,7 +1242,7 @@ public:
this->DrawWidgets(); this->DrawWidgets();
SetDParam(0, ConvertYMDToDate(_settings_newgame.game_creation.starting_year, 0, 1)); SetDParam(0, ConvertYMDToDate(_settings_game.game_creation.starting_year, 0, 1));
DrawStringCenteredTruncated(this->widget[TBSE_DATEBACKWARD].right, this->widget[TBSE_DATEFORWARD].left, 6, STR_00AF, TC_FROMSTRING); DrawStringCenteredTruncated(this->widget[TBSE_DATEBACKWARD].right, this->widget[TBSE_DATEFORWARD].left, 6, STR_00AF, TC_FROMSTRING);
/* We hide this panel when the toolbar space gets too small */ /* We hide this panel when the toolbar space gets too small */

View File

@ -2383,6 +2383,15 @@ static bool CheckTrainStayInDepot(Vehicle *v)
seg_state = _settings_game.pf.reserve_paths ? SIGSEG_PBS : UpdateSignalsOnSegment(v->tile, INVALID_DIAGDIR, v->owner); seg_state = _settings_game.pf.reserve_paths ? SIGSEG_PBS : UpdateSignalsOnSegment(v->tile, INVALID_DIAGDIR, v->owner);
} }
/* We are leaving a depot, but have to go to the exact same one; re-enter */
if (v->tile == v->dest_tile) {
/* We need to have a reservation for this to work. */
if (GetDepotWaypointReservation(v->tile)) return true;
SetDepotWaypointReservation(v->tile, true);
VehicleEnterDepot(v);
return true;
}
/* Only leave when we can reserve a path to our destination. */ /* Only leave when we can reserve a path to our destination. */
if (seg_state == SIGSEG_PBS && !TryPathReserve(v) && v->u.rail.force_proceed == 0) { if (seg_state == SIGSEG_PBS && !TryPathReserve(v) && v->u.rail.force_proceed == 0) {
/* No path and no force proceed. */ /* No path and no force proceed. */

View File

@ -54,6 +54,10 @@ protected:
}; };
protected: protected:
/**
* @note maximum cost doesn't work with caching enabled
* @todo fix maximum cost failing with caching (e.g. FS#2900)
*/
int m_max_cost; int m_max_cost;
CBlobT<int> m_sig_look_ahead_costs; CBlobT<int> m_sig_look_ahead_costs;
bool m_disable_cache; bool m_disable_cache;
@ -111,7 +115,7 @@ public:
FORCEINLINE int SwitchCost(TileIndex tile1, TileIndex tile2, DiagDirection exitdir) FORCEINLINE int SwitchCost(TileIndex tile1, TileIndex tile2, DiagDirection exitdir)
{ {
if (IsTileType(tile1, MP_RAILWAY) && IsTileType(tile2, MP_RAILWAY)) { if (IsTileType(tile1, MP_RAILWAY) && IsTileType(tile2, MP_RAILWAY) && IsPlainRailTile(tile1) && IsPlainRailTile(tile2)) {
bool t1 = KillFirstBit(GetTrackBits(tile1) & DiagdirReachesTracks(ReverseDiagDir(exitdir))) != TRACK_BIT_NONE; bool t1 = KillFirstBit(GetTrackBits(tile1) & DiagdirReachesTracks(ReverseDiagDir(exitdir))) != TRACK_BIT_NONE;
bool t2 = KillFirstBit(GetTrackBits(tile2) & DiagdirReachesTracks(exitdir)) != TRACK_BIT_NONE; bool t2 = KillFirstBit(GetTrackBits(tile2) & DiagdirReachesTracks(exitdir)) != TRACK_BIT_NONE;
if (t1 && t2) return Yapf().PfGetSettings().rail_doubleslip_penalty; if (t1 && t2) return Yapf().PfGetSettings().rail_doubleslip_penalty;

View File

@ -198,6 +198,16 @@ public:
static bool stFindNearestDepotTwoWay(const Vehicle *v, TileIndex t1, Trackdir td1, TileIndex t2, Trackdir td2, int max_distance, int reverse_penalty, TileIndex *depot_tile, bool *reversed) static bool stFindNearestDepotTwoWay(const Vehicle *v, TileIndex t1, Trackdir td1, TileIndex t2, Trackdir td2, int max_distance, int reverse_penalty, TileIndex *depot_tile, bool *reversed)
{ {
Tpf pf1; Tpf pf1;
/*
* With caching enabled it simply cannot get a reliable result when you
* have limited the distance a train may travel. This means that the
* cached result does not match uncached result in all cases and that
* causes desyncs. So disable caching when finding for a depot that is
* nearby. This only happens with automatic servicing of vehicles,
* so it will only impact performance when you do not manually set
* depot orders and you do not disable automatic servicing.
*/
if (max_distance != 0) pf1.DisableCache(true);
bool result1 = pf1.FindNearestDepotTwoWay(v, t1, td1, t2, td2, max_distance, reverse_penalty, depot_tile, reversed); bool result1 = pf1.FindNearestDepotTwoWay(v, t1, td1, t2, td2, max_distance, reverse_penalty, depot_tile, reversed);
#if DEBUG_YAPF_CACHE #if DEBUG_YAPF_CACHE