Merge branch 'reverse_at_waypoint' into jgrpp

Conflicts:
	src/order_gui.cpp
	src/saveload/extended_ver_sl.cpp
	src/saveload/extended_ver_sl.h
	src/train_cmd.cpp
This commit is contained in:
Jonathan G Rennison
2015-10-29 00:59:42 +00:00
17 changed files with 147 additions and 36 deletions

View File

@@ -4221,6 +4221,9 @@ STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Select w
STR_ORDER_DROP_REFIT_AUTO :Fixed cargo STR_ORDER_DROP_REFIT_AUTO :Fixed cargo
STR_ORDER_DROP_REFIT_AUTO_ANY :Available cargo STR_ORDER_DROP_REFIT_AUTO_ANY :Available cargo
STR_ORDER_REVERSE :{BLACK}Reverse
STR_ORDER_REVERSE_TOOLTIP :{BLACK}Change the reversing behaviour of the highlighted order.
STR_ORDER_SERVICE :{BLACK}Service STR_ORDER_SERVICE :{BLACK}Service
STR_ORDER_DROP_GO_ALWAYS_DEPOT :Always go STR_ORDER_DROP_GO_ALWAYS_DEPOT :Always go
STR_ORDER_DROP_SERVICE_DEPOT :Service if needed STR_ORDER_DROP_SERVICE_DEPOT :Service if needed
@@ -4299,6 +4302,8 @@ STR_ORDERS_OCCUPANCY_PERCENT :{NUM}%
# String parts to build the order string # String parts to build the order string
STR_ORDER_GO_TO_WAYPOINT :Go via {WAYPOINT} STR_ORDER_GO_TO_WAYPOINT :Go via {WAYPOINT}
STR_ORDER_GO_NON_STOP_TO_WAYPOINT :Go non-stop via {WAYPOINT} STR_ORDER_GO_NON_STOP_TO_WAYPOINT :Go non-stop via {WAYPOINT}
STR_ORDER_GO_TO_WAYPOINT_REVERSE :Go via and reverse at {WAYPOINT}
STR_ORDER_GO_NON_STOP_TO_WAYPOINT_REVERSE :Go non-stop via and reverse at {WAYPOINT}
STR_ORDER_SERVICE_AT :Service at STR_ORDER_SERVICE_AT :Service at
STR_ORDER_SERVICE_NON_STOP_AT :Service non-stop at STR_ORDER_SERVICE_NON_STOP_AT :Service non-stop at

View File

@@ -2174,7 +2174,7 @@ STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :게임이 아
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :게임이 아직 일시 정지된 상태입니다. ({STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :게임이 아직 일시 정지된 상태입니다. ({STRING}, {STRING}, {STRING})
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :게임이 아직 일시 정지된 상태입니다. ({STRING}, {STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :게임이 아직 일시 정지된 상태입니다. ({STRING}, {STRING}, {STRING}, {STRING})
STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :게임이 재개되었습니다. ({STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :게임이 재개되었습니다. ({STRING})
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :충분한 플레이어가 없습니다 STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :플레이하는 사람 수
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :접속자와 연결중 STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :접속자와 연결중
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :수동 STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :수동
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :게임 스크립트 STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :게임 스크립트

View File

@@ -434,7 +434,7 @@ STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Fundar nueva in
############ range for railway construction menu starts ############ range for railway construction menu starts
STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Construcción de ferrocarril STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Construcción de ferrocarril
STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Construcción ferrocarril eléctrico STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Construcción de ferrocarril eléctrico
STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Construcción de monorraíl STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Construcción de monorraíl
STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Construcción de maglev STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Construcción de maglev
############ range ends here ############ range ends here
@@ -625,7 +625,7 @@ STR_PERFORMANCE_DETAIL_LOAN :{BLACK}Préstam
STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Total: STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Total:
############ End of order list ############ End of order list
STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP :{BLACK}Cantidad de vehículos que obtuvieron beneficios el año pasado. Incluye vehículos de carretera, trenes, barcos y aeronaves STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP :{BLACK}Cantidad de vehículos que obtuvieron beneficios el año pasado. Incluye vehículos de carretera, trenes, barcos y aeronaves
STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Cantidad de partes de estación que han tenido servicio. Las estaciones de tren, paradas de autobus, aeropuertos y demás son contabilizadas por separado incluso si pertenecen a la misma estación STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Cantidad de partes de estación que han tenido servicio. Las estaciones de tren, paradas de autobús, aeropuertos y demás son contabilizadas por separado incluso si pertenecen a la misma estación
STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP :{BLACK}Beneficio del vehículo con menores ingresos (de entre todos los vehículos con más de 2 años) STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP :{BLACK}Beneficio del vehículo con menores ingresos (de entre todos los vehículos con más de 2 años)
STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}Cantidad de dinero ganado en el trimestre con el beneficio más bajo de los pasados 12 trimestres STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}Cantidad de dinero ganado en el trimestre con el beneficio más bajo de los pasados 12 trimestres
STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}Cantidad de dinero ganado en el trimestre con el beneficio más alto de los pasados 12 trimestres STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}Cantidad de dinero ganado en el trimestre con el beneficio más alto de los pasados 12 trimestres
@@ -656,15 +656,15 @@ STR_MUSIC_TRACK :{TINY_FONT}{BLA
STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Título STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Título
STR_MUSIC_SHUFFLE :{TINY_FONT}{BLACK}Mezclar STR_MUSIC_SHUFFLE :{TINY_FONT}{BLACK}Mezclar
STR_MUSIC_PROGRAM :{TINY_FONT}{BLACK}Programa STR_MUSIC_PROGRAM :{TINY_FONT}{BLACK}Programa
STR_MUSIC_TOOLTIP_SKIP_TO_PREVIOUS_TRACK :{BLACK}Pasar a pista anterior de la selección STR_MUSIC_TOOLTIP_SKIP_TO_PREVIOUS_TRACK :{BLACK}Saltar a la pista anterior de la selección
STR_MUSIC_TOOLTIP_SKIP_TO_NEXT_TRACK_IN_SELECTION :{BLACK}Pasar a siguiente pista de la selección STR_MUSIC_TOOLTIP_SKIP_TO_NEXT_TRACK_IN_SELECTION :{BLACK}Saltar a la siguiente pista de la selección
STR_MUSIC_TOOLTIP_STOP_PLAYING_MUSIC :{BLACK}Detener música STR_MUSIC_TOOLTIP_STOP_PLAYING_MUSIC :{BLACK}Detener música
STR_MUSIC_TOOLTIP_START_PLAYING_MUSIC :{BLACK}Comenzar música STR_MUSIC_TOOLTIP_START_PLAYING_MUSIC :{BLACK}Comenzar música
STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC :{BLACK}Mueva los cursores para fijar volumen de música y efectos STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC :{BLACK}Mueva los cursores para fijar volumen de música y efectos
STR_MUSIC_TOOLTIP_SELECT_ALL_TRACKS_PROGRAM :{BLACK}Seleccionar programa 'todas las pistas' STR_MUSIC_TOOLTIP_SELECT_ALL_TRACKS_PROGRAM :{BLACK}Seleccionar programa 'todas las pistas'
STR_MUSIC_TOOLTIP_SELECT_OLD_STYLE_MUSIC :{BLACK}Seleccionar programa 'estilo antiguo' STR_MUSIC_TOOLTIP_SELECT_OLD_STYLE_MUSIC :{BLACK}Seleccionar programa 'estilo antiguo'
STR_MUSIC_TOOLTIP_SELECT_NEW_STYLE_MUSIC :{BLACK}Seleccionar programa 'estilo moderno' STR_MUSIC_TOOLTIP_SELECT_NEW_STYLE_MUSIC :{BLACK}Seleccionar programa 'estilo moderno'
STR_MUSIC_TOOLTIP_SELECT_EZY_STREET_STYLE :{BLACK}Elegir el programa musical de estilo 'Ezy Street' STR_MUSIC_TOOLTIP_SELECT_EZY_STREET_STYLE :{BLACK}Seleccionar programa 'estilo Ezy Street'
STR_MUSIC_TOOLTIP_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Seleccionar programa 'Personal 1' (definido por el usuario) STR_MUSIC_TOOLTIP_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Seleccionar programa 'Personal 1' (definido por el usuario)
STR_MUSIC_TOOLTIP_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Seleccionar programa 'Personal 2' (definido por el usuario) STR_MUSIC_TOOLTIP_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Seleccionar programa 'Personal 2' (definido por el usuario)
STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Encender/apagar mezclador STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Encender/apagar mezclador
@@ -717,7 +717,7 @@ STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Mostrar
STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Mostrar propietarios de terrenos en el mapa STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Mostrar propietarios de terrenos en el mapa
STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Click en un tipo de industria para mostrarlo/ocultarlo. Ctrl+Click oculta todos los tipos excepto el seleccionado. Ctrl+Click de nuevo en el mismo tipo muestra todos los tipos de industrias STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Click en un tipo de industria para mostrarlo/ocultarlo. Ctrl+Click oculta todos los tipos excepto el seleccionado. Ctrl+Click de nuevo en el mismo tipo muestra todos los tipos de industrias
STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Click en una empresa para mostrar/ocultar sus propiedades. Ctrl+Click oculta todas las empresas excepto la seleccionada. Ctrl+Click de nuevo en la misma empresa muestra todas las empresas STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Click en una empresa para mostrar/ocultar sus propiedades. Ctrl+Click oculta todas las empresas excepto la seleccionada. Ctrl+Click de nuevo en la misma empresa muestra todas las empresas
STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Un Click en una carga permite activar o desactivar su visualización. Ctrl+Click deshabilita todas las cargas excepto la seleccionada. Un segundo Ctrl+Click habilita la visualización de todos los tipos de carga STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Click en una carga permite activar o desactivar su visualización. Ctrl+Click deshabilita todas las cargas excepto la seleccionada. Un segundo Ctrl+Click habilita la visualización de todos los tipos de carga
STR_SMALLMAP_LEGENDA_ROADS :{TINY_FONT}{BLACK}Carreteras STR_SMALLMAP_LEGENDA_ROADS :{TINY_FONT}{BLACK}Carreteras
STR_SMALLMAP_LEGENDA_RAILROADS :{TINY_FONT}{BLACK}Ferrocarriles STR_SMALLMAP_LEGENDA_RAILROADS :{TINY_FONT}{BLACK}Ferrocarriles
@@ -942,7 +942,7 @@ STR_GAME_OPTIONS_TOWN_NAME_FRENCH :Francés
STR_GAME_OPTIONS_TOWN_NAME_GERMAN :Alemán STR_GAME_OPTIONS_TOWN_NAME_GERMAN :Alemán
STR_GAME_OPTIONS_TOWN_NAME_ADDITIONAL_ENGLISH :Inglés (Adicional) STR_GAME_OPTIONS_TOWN_NAME_ADDITIONAL_ENGLISH :Inglés (Adicional)
STR_GAME_OPTIONS_TOWN_NAME_LATIN_AMERICAN :Latinoamericano STR_GAME_OPTIONS_TOWN_NAME_LATIN_AMERICAN :Latinoamericano
STR_GAME_OPTIONS_TOWN_NAME_SILLY :Tontos STR_GAME_OPTIONS_TOWN_NAME_SILLY :Absurdos
STR_GAME_OPTIONS_TOWN_NAME_SWEDISH :Sueco STR_GAME_OPTIONS_TOWN_NAME_SWEDISH :Sueco
STR_GAME_OPTIONS_TOWN_NAME_DUTCH :Holandés STR_GAME_OPTIONS_TOWN_NAME_DUTCH :Holandés
STR_GAME_OPTIONS_TOWN_NAME_FINNISH :Finlandés STR_GAME_OPTIONS_TOWN_NAME_FINNISH :Finlandés
@@ -991,7 +991,7 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Tamaño cuádru
STR_GAME_OPTIONS_BASE_GRF :{BLACK}Conjunto de gráficos base STR_GAME_OPTIONS_BASE_GRF :{BLACK}Conjunto de gráficos base
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selecciona el conjunto de gráficos base a usar STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selecciona el conjunto de gráficos base a usar
STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} fichero{P "" s} perdido{P "" s} o corrupto{P "" s} STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} fichero{P "" s} perdido{P "" s} o corrupto{P "" s}
STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Información adicional acerca de este fichero de gráficos STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Información adicional sobre el set de gráficos base
STR_GAME_OPTIONS_BASE_SFX :{BLACK}Conjunto de sonidos base STR_GAME_OPTIONS_BASE_SFX :{BLACK}Conjunto de sonidos base
STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Seleccionar conjunto de sonidos base a emplear STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Seleccionar conjunto de sonidos base a emplear
@@ -1820,14 +1820,14 @@ STR_LIVERY_PANEL_TOOLTIP :{BLACK}Seleccio
STR_LIVERY_DEFAULT :Estación normal STR_LIVERY_DEFAULT :Estación normal
STR_LIVERY_STEAM :Locomotora a Vapor STR_LIVERY_STEAM :Locomotora a Vapor
STR_LIVERY_DIESEL :Locomotora Diesel STR_LIVERY_DIESEL :Locomotora Diésel
STR_LIVERY_ELECTRIC :Locomotora Eléctrica STR_LIVERY_ELECTRIC :Locomotora Eléctrica
STR_LIVERY_MONORAIL :Locomotora Monorraíl STR_LIVERY_MONORAIL :Locomotora Monorraíl
STR_LIVERY_MAGLEV :Locomotora Maglev STR_LIVERY_MAGLEV :Locomotora Maglev
STR_LIVERY_DMU :DMU STR_LIVERY_DMU :DMU
STR_LIVERY_EMU :EMU STR_LIVERY_EMU :EMU
STR_LIVERY_PASSENGER_WAGON_STEAM :Vagón Pasajeros (Vapor) STR_LIVERY_PASSENGER_WAGON_STEAM :Vagón Pasajeros (Vapor)
STR_LIVERY_PASSENGER_WAGON_DIESEL :Vagón Pasajeros (Diesel) STR_LIVERY_PASSENGER_WAGON_DIESEL :Vagón Pasajeros (Diésel)
STR_LIVERY_PASSENGER_WAGON_ELECTRIC :Vagón Pasajeros (Eléctrico) STR_LIVERY_PASSENGER_WAGON_ELECTRIC :Vagón Pasajeros (Eléctrico)
STR_LIVERY_PASSENGER_WAGON_MONORAIL :Vagón Pasajeros (Monorraíl) STR_LIVERY_PASSENGER_WAGON_MONORAIL :Vagón Pasajeros (Monorraíl)
STR_LIVERY_PASSENGER_WAGON_MAGLEV :Vagón Pasajeros (Maglev) STR_LIVERY_PASSENGER_WAGON_MAGLEV :Vagón Pasajeros (Maglev)
@@ -2248,7 +2248,7 @@ STR_CONTENT_TYPE_GS_LIBRARY :Librería SJ
# Content downloading progress window # Content downloading progress window
STR_CONTENT_DOWNLOAD_TITLE :{WHITE}Descargando contenido... STR_CONTENT_DOWNLOAD_TITLE :{WHITE}Descargando contenido...
STR_CONTENT_DOWNLOAD_INITIALISE :{WHITE}Solicitando ficheros... STR_CONTENT_DOWNLOAD_INITIALISE :{WHITE}Solicitando archivos...
STR_CONTENT_DOWNLOAD_FILE :{WHITE}Descargando {STRING} ({NUM} de {NUM}) STR_CONTENT_DOWNLOAD_FILE :{WHITE}Descargando {STRING} ({NUM} de {NUM})
STR_CONTENT_DOWNLOAD_COMPLETE :{WHITE}Descarga completada STR_CONTENT_DOWNLOAD_COMPLETE :{WHITE}Descarga completada
STR_CONTENT_DOWNLOAD_PROGRESS_SIZE :{WHITE}{BYTES} de {BYTES} descargadas ({NUM} %) STR_CONTENT_DOWNLOAD_PROGRESS_SIZE :{WHITE}{BYTES} de {BYTES} descargadas ({NUM} %)
@@ -2257,8 +2257,8 @@ STR_CONTENT_DOWNLOAD_PROGRESS_SIZE :{WHITE}{BYTES}
STR_CONTENT_ERROR_COULD_NOT_CONNECT :{WHITE}No es posible conectarse al servidor de contenidos... STR_CONTENT_ERROR_COULD_NOT_CONNECT :{WHITE}No es posible conectarse al servidor de contenidos...
STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD :{WHITE}Descarga errónea... STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD :{WHITE}Descarga errónea...
STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD_CONNECTION_LOST :{WHITE}... conexión perdida STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD_CONNECTION_LOST :{WHITE}... conexión perdida
STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD_FILE_NOT_WRITABLE :{WHITE}... no se puede escribir en el fichero STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD_FILE_NOT_WRITABLE :{WHITE}... no se puede escribir en el archivo
STR_CONTENT_ERROR_COULD_NOT_EXTRACT :{WHITE}No ha sido posible descomprimir el fichero descargado STR_CONTENT_ERROR_COULD_NOT_EXTRACT :{WHITE}No ha sido posible descomprimir el archivo descargado
STR_MISSING_GRAPHICS_SET_CAPTION :{WHITE}Gráficos no encontrados STR_MISSING_GRAPHICS_SET_CAPTION :{WHITE}Gráficos no encontrados
STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD necesita gráficos para funcionar pero no se pudo encontrar ninguno. ¿Desea permitir que OpenTTD descargue e instale dichos gráficos? STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD necesita gráficos para funcionar pero no se pudo encontrar ninguno. ¿Desea permitir que OpenTTD descargue e instale dichos gráficos?
@@ -2802,8 +2802,8 @@ STR_NEWGRF_SETTINGS_PRESET_DELETE :{BLACK}Borrar
STR_NEWGRF_SETTINGS_PRESET_DELETE_TOOLTIP :{BLACK}Borrar la programación seleccionada STR_NEWGRF_SETTINGS_PRESET_DELETE_TOOLTIP :{BLACK}Borrar la programación seleccionada
STR_NEWGRF_SETTINGS_ADD :{BLACK}Añadir STR_NEWGRF_SETTINGS_ADD :{BLACK}Añadir
STR_NEWGRF_SETTINGS_ADD_FILE_TOOLTIP :{BLACK}Añade el NewGRF seleccionado a tu configuración STR_NEWGRF_SETTINGS_ADD_FILE_TOOLTIP :{BLACK}Añade el NewGRF seleccionado a tu configuración
STR_NEWGRF_SETTINGS_RESCAN_FILES :{BLACK}Actualizar ficheros STR_NEWGRF_SETTINGS_RESCAN_FILES :{BLACK}Actualizar archivos
STR_NEWGRF_SETTINGS_RESCAN_FILES_TOOLTIP :{BLACK}Actualiza la lista de ficheros NewGRF disponibles STR_NEWGRF_SETTINGS_RESCAN_FILES_TOOLTIP :{BLACK}Actualiza la lista de archivos NewGRF disponibles
STR_NEWGRF_SETTINGS_REMOVE :{BLACK}Retirar STR_NEWGRF_SETTINGS_REMOVE :{BLACK}Retirar
STR_NEWGRF_SETTINGS_REMOVE_TOOLTIP :{BLACK}Retirar el NewGRF seleccionado de la lista STR_NEWGRF_SETTINGS_REMOVE_TOOLTIP :{BLACK}Retirar el NewGRF seleccionado de la lista
STR_NEWGRF_SETTINGS_MOVEUP :{BLACK}Mover Arriba STR_NEWGRF_SETTINGS_MOVEUP :{BLACK}Mover Arriba
@@ -2812,7 +2812,7 @@ STR_NEWGRF_SETTINGS_MOVEDOWN :{BLACK}Mover Ab
STR_NEWGRF_SETTINGS_MOVEDOWN_TOOLTIP :{BLACK}Mueve el NewGRF seleccionado abajo en la lista STR_NEWGRF_SETTINGS_MOVEDOWN_TOOLTIP :{BLACK}Mueve el NewGRF seleccionado abajo en la lista
STR_NEWGRF_SETTINGS_UPGRADE :{BLACK}Actualiza STR_NEWGRF_SETTINGS_UPGRADE :{BLACK}Actualiza
STR_NEWGRF_SETTINGS_UPGRADE_TOOLTIP :{BLACK}Utiliza las versiones más nuevas de los archivos NewGRF que dispongan de diversas versiones instaladas STR_NEWGRF_SETTINGS_UPGRADE_TOOLTIP :{BLACK}Utiliza las versiones más nuevas de los archivos NewGRF que dispongan de diversas versiones instaladas
STR_NEWGRF_SETTINGS_FILE_TOOLTIP :{BLACK}Una lista de los ficheros NewGRF instalados STR_NEWGRF_SETTINGS_FILE_TOOLTIP :{BLACK}Una lista de los archivos NewGRF instalados
STR_NEWGRF_SETTINGS_SET_PARAMETERS :{BLACK}Establecer parámetros STR_NEWGRF_SETTINGS_SET_PARAMETERS :{BLACK}Establecer parámetros
STR_NEWGRF_SETTINGS_SHOW_PARAMETERS :{BLACK}Mostrar parámetros STR_NEWGRF_SETTINGS_SHOW_PARAMETERS :{BLACK}Mostrar parámetros
@@ -2823,7 +2823,7 @@ STR_NEWGRF_SETTINGS_APPLY_CHANGES :{BLACK}Aplicar
STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_BUTTON :{BLACK}Encontrar contenido que falta en línea STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_BUTTON :{BLACK}Encontrar contenido que falta en línea
STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_TOOLTIP :{BLACK}Comprobar si el contenido que falta puede ser encontrado en línea STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_TOOLTIP :{BLACK}Comprobar si el contenido que falta puede ser encontrado en línea
STR_NEWGRF_SETTINGS_FILENAME :{BLACK}Fichero: {SILVER}{STRING} STR_NEWGRF_SETTINGS_FILENAME :{BLACK}Archivo: {SILVER}{STRING}
STR_NEWGRF_SETTINGS_GRF_ID :{BLACK}GRF ID: {SILVER}{STRING} STR_NEWGRF_SETTINGS_GRF_ID :{BLACK}GRF ID: {SILVER}{STRING}
STR_NEWGRF_SETTINGS_VERSION :{BLACK}Versión: {SILVER}{NUM} STR_NEWGRF_SETTINGS_VERSION :{BLACK}Versión: {SILVER}{NUM}
STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Mín. versión compatible: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Mín. versión compatible: {SILVER}{NUM}
@@ -2832,7 +2832,7 @@ STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Paleta:
STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parámetros: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parámetros: {SILVER}{STRING}
STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}No tiene información disponible STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}No tiene información disponible
STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Fichero no encontrado STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Archivo no encontrado
STR_NEWGRF_SETTINGS_DISABLED :{RED}Desactivado STR_NEWGRF_SETTINGS_DISABLED :{RED}Desactivado
STR_NEWGRF_SETTINGS_INCOMPATIBLE :{RED}Incompatible con esta versión de OpenTTD STR_NEWGRF_SETTINGS_INCOMPATIBLE :{RED}Incompatible con esta versión de OpenTTD
@@ -2918,18 +2918,18 @@ STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}¡Precau
STR_NEWGRF_CONFIRMATION_TEXT :{YELLOW}Se van a modificar los NewGRF de una partida ya comenzada. Esto puede provocar un error fatal en OpenTTD o romper la partida.{}No se deben crear reportes de bugs por problemas causados por esta acción.{}¿Está completamente seguro de esto? STR_NEWGRF_CONFIRMATION_TEXT :{YELLOW}Se van a modificar los NewGRF de una partida ya comenzada. Esto puede provocar un error fatal en OpenTTD o romper la partida.{}No se deben crear reportes de bugs por problemas causados por esta acción.{}¿Está completamente seguro de esto?
STR_NEWGRF_DUPLICATE_GRFID :{WHITE}No se puede añadir: GRF ID duplicado STR_NEWGRF_DUPLICATE_GRFID :{WHITE}No se puede añadir: GRF ID duplicado
STR_NEWGRF_COMPATIBLE_LOADED :{ORANGE}Fichero no encontrado (GRF compatible cargado) STR_NEWGRF_COMPATIBLE_LOADED :{ORANGE}Archivo no encontrado (GRF compatible cargado)
STR_NEWGRF_TOO_MANY_NEWGRFS :{WHITE}No se puede añadir fichero: Límite de ficheros NewGRF alcanzado STR_NEWGRF_TOO_MANY_NEWGRFS :{WHITE}No se puede añadir fichero: Límite de ficheros NewGRF alcanzado
STR_NEWGRF_COMPATIBLE_LOAD_WARNING :{WHITE}GRF(s) compatibles cargados para ficheros que faltan STR_NEWGRF_COMPATIBLE_LOAD_WARNING :{WHITE}GRF(s) compatibles cargados para archivos que faltan
STR_NEWGRF_DISABLED_WARNING :{WHITE}Fichero(s) GRF no encontrados han sido desactivados STR_NEWGRF_DISABLED_WARNING :{WHITE}Archivo(s) GRF no encontrados han sido desactivados
STR_NEWGRF_UNPAUSE_WARNING_TITLE :{YELLOW}Fichero(s) GRF no encontrados STR_NEWGRF_UNPAUSE_WARNING_TITLE :{YELLOW}Archivo(s) GRF no encontrados
STR_NEWGRF_UNPAUSE_WARNING :{WHITE}Quitar la pausa puede hacer que se cierre OpenTTD. No notifique este error.{}¿Desea realmente quitar la pausa? STR_NEWGRF_UNPAUSE_WARNING :{WHITE}Quitar la pausa puede hacer que se cierre OpenTTD. No notifique este error.{}¿Desea realmente quitar la pausa?
# NewGRF status # NewGRF status
STR_NEWGRF_LIST_NONE :Ninguno STR_NEWGRF_LIST_NONE :Ninguno
STR_NEWGRF_LIST_ALL_FOUND :Todos los ficheros presentes STR_NEWGRF_LIST_ALL_FOUND :Todos los ficheros presentes
STR_NEWGRF_LIST_COMPATIBLE :{YELLOW}Ficheros compatibles encontrados STR_NEWGRF_LIST_COMPATIBLE :{YELLOW}Archivos compatibles encontrados
STR_NEWGRF_LIST_MISSING :{RED}Ficheros que faltan STR_NEWGRF_LIST_MISSING :{RED}Ficheros que faltan
# NewGRF 'it's broken' warnings # NewGRF 'it's broken' warnings
@@ -3921,7 +3921,7 @@ STR_TIMETABLE_STARTING_DATE :{BLACK}Fecha de
STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Selecciona una fecha como punto de partida de este horario. Ctrl+Click permite fijar el punto de partida de este horario y distribuye todos los vehículos que lo compartan siempre y cuando el horario esté completo STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Selecciona una fecha como punto de partida de este horario. Ctrl+Click permite fijar el punto de partida de este horario y distribuye todos los vehículos que lo compartan siempre y cuando el horario esté completo
STR_TIMETABLE_CHANGE_TIME :{BLACK}Cambiar Horario STR_TIMETABLE_CHANGE_TIME :{BLACK}Cambiar Horario
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Cambia la cantidad de tiempo que debe tomar una orden marcada STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Cambia la cantidad de tiempo que debe tardar una orden marcada
STR_TIMETABLE_CLEAR_TIME :{BLACK}Limpiar Horario STR_TIMETABLE_CLEAR_TIME :{BLACK}Limpiar Horario
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Limpiar la cantidad de tiempo para la orden seleccionada STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Limpiar la cantidad de tiempo para la orden seleccionada
@@ -4068,13 +4068,13 @@ STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}El guard
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Error en Autoguardado STR_ERROR_AUTOSAVE_FAILED :{WHITE}Error en Autoguardado
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}No es posible leer la unidad STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}No es posible leer la unidad
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Error guardando juego{}{STRING} STR_ERROR_GAME_SAVE_FAILED :{WHITE}Error guardando juego{}{STRING}
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}No es posible borrar el fichero STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}No es posible borrar el archivo
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Carga de Juego Errónea{}{STRING} STR_ERROR_GAME_LOAD_FAILED :{WHITE}Carga de Juego Errónea{}{STRING}
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Error interno: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Error interno: {STRING}
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Partida guardada corrupta - {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Partida guardada corrupta - {STRING}
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :La partida guardada ha sido realizada con una versión más nueva STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :La partida guardada ha sido realizada con una versión más nueva
STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :No se puede leer fichero STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Archivo no legible
STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :No se puede escribir en el fichero STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :No se puede escribir en el archivo
STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED :Comprobación de integridad de los datos fallida STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED :Comprobación de integridad de los datos fallida
STR_GAME_SAVELOAD_NOT_AVAILABLE :<no disponible> STR_GAME_SAVELOAD_NOT_AVAILABLE :<no disponible>
STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}El juego ha sido guardado en una versión sin soporte para tranvías. Todos los tranvías serán eliminados STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}El juego ha sido guardado en una versión sin soporte para tranvías. Todos los tranvías serán eliminados
@@ -4084,7 +4084,7 @@ STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Generaci
STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... no hay municipios en el escenario STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... no hay municipios en el escenario
STR_ERROR_PNGMAP :{WHITE}No se pudo cargar mapa de alturas PNG... STR_ERROR_PNGMAP :{WHITE}No se pudo cargar mapa de alturas PNG...
STR_ERROR_PNGMAP_FILE_NOT_FOUND :{WHITE}... fichero no encontrado STR_ERROR_PNGMAP_FILE_NOT_FOUND :{WHITE}... archivo no encontrado
STR_ERROR_PNGMAP_IMAGE_TYPE :{WHITE}... no se pudo convertir tipo de imagen. Se requieren imágenes PNG de 8 o 24-bits STR_ERROR_PNGMAP_IMAGE_TYPE :{WHITE}... no se pudo convertir tipo de imagen. Se requieren imágenes PNG de 8 o 24-bits
STR_ERROR_PNGMAP_MISC :{WHITE}... algo ha salido mal (es probable que el fichero esté corrupto) STR_ERROR_PNGMAP_MISC :{WHITE}... algo ha salido mal (es probable que el fichero esté corrupto)
@@ -4604,7 +4604,7 @@ STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CHANEY_JUBILEE_STEAM :Chaney 'Jubilee
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_GINZU_A4_STEAM :Ginzu 'A4' (Vapor) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_GINZU_A4_STEAM :Ginzu 'A4' (Vapor)
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_8P_STEAM :SH '8P' (Vapor) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_8P_STEAM :SH '8P' (Vapor)
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MANLEY_MOREL_DMU_DIESEL :Manley-Morel DMU (Diesel) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MANLEY_MOREL_DMU_DIESEL :Manley-Morel DMU (Diesel)
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_DASH_DIESEL :'Dash' (Diesel) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_DASH_DIESEL :'Dash' (Diésel)
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_HENDRY_25_DIESEL :SH/Hendry '25' (Diesel) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_HENDRY_25_DIESEL :SH/Hendry '25' (Diesel)
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_UU_37_DIESEL :UU '37' (Diesel) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_UU_37_DIESEL :UU '37' (Diesel)
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_FLOSS_47_DIESEL :Floss '47' (Diesel) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_FLOSS_47_DIESEL :Floss '47' (Diesel)

View File

@@ -844,6 +844,7 @@ STR_NEWS_VEHICLE_HAS_TOO_FEW_ORDERS :{WHITE}{VEHICLE
STR_NEWS_VEHICLE_HAS_VOID_ORDER :{WHITE}{VEHICLE} chưa có lệnh STR_NEWS_VEHICLE_HAS_VOID_ORDER :{WHITE}{VEHICLE} chưa có lệnh
STR_NEWS_VEHICLE_HAS_DUPLICATE_ENTRY :{WHITE}{VEHICLE} có các lệnh trùng lặp STR_NEWS_VEHICLE_HAS_DUPLICATE_ENTRY :{WHITE}{VEHICLE} có các lệnh trùng lặp
STR_NEWS_VEHICLE_HAS_INVALID_ENTRY :{WHITE}{VEHICLE} có trạm bất hợp lệ trong lệnh STR_NEWS_VEHICLE_HAS_INVALID_ENTRY :{WHITE}{VEHICLE} có trạm bất hợp lệ trong lệnh
STR_NEWS_PLANE_USES_TOO_SHORT_RUNWAY :{WHITE}{VEHICLE} có trong lộ trình một sân bay có đường băng quá ngắn
STR_NEWS_VEHICLE_IS_GETTING_OLD :{WHITE}{VEHICLE} đang cũ đi STR_NEWS_VEHICLE_IS_GETTING_OLD :{WHITE}{VEHICLE} đang cũ đi
STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD :{WHITE}{VEHICLE} đang xuống cấp STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD :{WHITE}{VEHICLE} đang xuống cấp
@@ -1287,17 +1288,28 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Hiển thị d
STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Độ đậm của đường kẻ trong đồ thị: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Độ đậm của đường kẻ trong đồ thị: {STRING}
STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Độ đậm của đường vẽ trên đồ thị. Một đường mảnh sẽ chính xác hơn, trong khi đó đường đậm sẽ dễ nhìn hơn và màu sắc dễ phân biệt hơn STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Độ đậm của đường vẽ trên đồ thị. Một đường mảnh sẽ chính xác hơn, trong khi đó đường đậm sẽ dễ nhìn hơn và màu sắc dễ phân biệt hơn
STR_CONFIG_SETTING_LANDSCAPE :Nền đất: {STRING}
STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Nền đất là định nghĩa cơ bản của các màn chơi với các kiểu hàng hóa và yêu cầu cho sự phát triển đô thị khác nhau. NewGRF và kịch bản chơi cho phép các điều chỉnh nhỏ hơn.
STR_CONFIG_SETTING_LAND_GENERATOR :Tạo nền đất: {STRING} STR_CONFIG_SETTING_LAND_GENERATOR :Tạo nền đất: {STRING}
STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :Bộ khởi tạo nguyên bản chỉ dựa vào tập hợp đồ họa đối tượng cơ bản, rồi sinh ra các dạng địa hình cố đinh. Với TerraGenesis thì dựa trên có chế nhiễu loạn (noise) kiểu Perlin và cho phép các điều chỉnh nhỏ hơn.
STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Nguyên Bản STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Nguyên Bản
STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis
STR_CONFIG_SETTING_TERRAIN_TYPE :Kiểu nền đất: {STRING}
STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(Chỉ cho TerraGenesis) Địa hình nhiều đồi núi
STR_CONFIG_SETTING_INDUSTRY_DENSITY :Mật độ nhà máy: {STRING}
STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Thiết lập số nhà máy sẽ được tạo ra và mức độ dùy trì trong ván chơi
STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Khoảng cách tối đa từ lề bản đồ tới nhà máy lọc dầu: {STRING} STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Khoảng cách tối đa từ lề bản đồ tới nhà máy lọc dầu: {STRING}
STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Nhà máy hóa dầu chỉ có thể xây gần rìa bản đồ, tương ứng là ven biển với những bản đồ dạng đảo STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Nhà máy hóa dầu chỉ có thể xây gần rìa bản đồ, tương ứng là ven biển với những bản đồ dạng đảo
STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Độ cao tuyết phủ: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Độ cao tuyết phủ: {STRING}
STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Điều chỉnh độ cao của tuyết phủ đối với địa hình xứ lanh. Tuyết phủ có thể ảnh hưởng tới việc tạo ra nhà máy và các yêu cầu cho sự tăng trưởng đô thị
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Độ gồ ghề của địa chất: {STRING} STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Độ gồ ghề của địa chất: {STRING}
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(Chỉ cho TerraGenesis) Chọn mức độ trùng điệp của núi: địa hình bằng phẳng thì ít hơn, địa hình đồi núi thì nhiều hơn. Địa hình gồ ghề có nhiều núi và trông có vẻ lặp lại
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Rất Phẳng STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Rất Phẳng
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Phẳng STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Phẳng
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Gồ Ghề STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Gồ Ghề
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Rất Gồ Ghề STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Rất Gồ Ghề
STR_CONFIG_SETTING_VARIETY :Phân bổ sự đa dạng: {STRING}
STR_CONFIG_SETTING_VARIETY_HELPTEXT :(Chỉ cho TerraGenesis) Điều chỉnh liệu rằng bản đồ gồm cả vùng núi cao và vùng đồng bằng. Đây chỉ là điều chỉnh cho sự bằng phẳng hơn, các thiết lập khác sẽ điều chỉnh cho vùng núi.
STR_CONFIG_SETTING_RIVER_AMOUNT :Số lượng sông ngòi: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT :Số lượng sông ngòi: {STRING}
STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Chọn số lượng sông ngòi được khởi tạo STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Chọn số lượng sông ngòi được khởi tạo
STR_CONFIG_SETTING_TREE_PLACER :Thuật toán đặt cây: {STRING} STR_CONFIG_SETTING_TREE_PLACER :Thuật toán đặt cây: {STRING}
@@ -2863,6 +2875,10 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Sprite t
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Xử lý sprite bình thường ở trước, bỏ qua các loại pseudo/recolour/font sprite căn theo điểm bắt đầu STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Xử lý sprite bình thường ở trước, bỏ qua các loại pseudo/recolour/font sprite căn theo điểm bắt đầu
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Theo những thông tin của sprite đã chọn. Thì việc căn chỉnh khi vẽ đối với sprite này sẽ bị bỏ qua STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Theo những thông tin của sprite đã chọn. Thì việc căn chỉnh khi vẽ đối với sprite này sẽ bị bỏ qua
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Di chuyển sprite xung quanh, thay đổi X và Y offsets STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Di chuyển sprite xung quanh, thay đổi X và Y offsets
STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Đặt lại tương đối
STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Đặt lại các dịch chuyển tương đối hiện tại
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK} dịch X: {NUM}, dịch Y: {NUM} (tuyệt đối)
STR_SPRITE_ALIGNER_OFFSETS_REL :{BLACK}toạ độ X: {NUM}, toạ độ Y: {NUM} (tương đối)
STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}Chọn sprite STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}Chọn sprite
STR_SPRITE_ALIGNER_PICKER_TOOLTIP :{BLACK}Chọn sprite ở bất cứ đâu trên màn hình STR_SPRITE_ALIGNER_PICKER_TOOLTIP :{BLACK}Chọn sprite ở bất cứ đâu trên màn hình

View File

@@ -149,6 +149,8 @@ public:
inline OrderDepotTypeFlags GetDepotOrderType() const { return (OrderDepotTypeFlags)GB(this->flags, 0, 3); } inline OrderDepotTypeFlags GetDepotOrderType() const { return (OrderDepotTypeFlags)GB(this->flags, 0, 3); }
/** What are we going to do when in the depot. */ /** What are we going to do when in the depot. */
inline OrderDepotActionFlags GetDepotActionType() const { return (OrderDepotActionFlags)GB(this->flags, 4, 3); } inline OrderDepotActionFlags GetDepotActionType() const { return (OrderDepotActionFlags)GB(this->flags, 4, 3); }
/** What waypoint flags? */
inline OrderWaypointFlags GetWaypointFlags() const { return (OrderWaypointFlags)GB(this->flags, 0, 8); }
/** What variable do we have to compare? */ /** What variable do we have to compare? */
inline OrderConditionVariable GetConditionVariable() const { return (OrderConditionVariable)GB(this->dest, 11, 5); } inline OrderConditionVariable GetConditionVariable() const { return (OrderConditionVariable)GB(this->dest, 11, 5); }
/** What is the comparator to use? */ /** What is the comparator to use? */
@@ -170,6 +172,8 @@ public:
inline void SetDepotOrderType(OrderDepotTypeFlags depot_order_type) { SB(this->flags, 0, 3, depot_order_type); } inline void SetDepotOrderType(OrderDepotTypeFlags depot_order_type) { SB(this->flags, 0, 3, depot_order_type); }
/** Set what we are going to do in the depot. */ /** Set what we are going to do in the depot. */
inline void SetDepotActionType(OrderDepotActionFlags depot_service_type) { SB(this->flags, 4, 3, depot_service_type); } inline void SetDepotActionType(OrderDepotActionFlags depot_service_type) { SB(this->flags, 4, 3, depot_service_type); }
/** Set waypoint flags. */
inline void SetWaypointFlags(OrderWaypointFlags waypoint_flags) { SB(this->flags, 0, 8, waypoint_flags); }
/** Set variable we have to compare. */ /** Set variable we have to compare. */
inline void SetConditionVariable(OrderConditionVariable condition_variable) { SB(this->dest, 11, 5, condition_variable); } inline void SetConditionVariable(OrderConditionVariable condition_variable) { SB(this->dest, 11, 5, condition_variable); }
/** Set the comparator to use. */ /** Set the comparator to use. */

View File

@@ -1377,7 +1377,7 @@ CommandCost CmdModifyOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
break; break;
case OT_GOTO_WAYPOINT: case OT_GOTO_WAYPOINT:
if (mof != MOF_NON_STOP) return CMD_ERROR; if (mof != MOF_NON_STOP && mof != MOF_WAYPOINT_FLAGS) return CMD_ERROR;
break; break;
case OT_CONDITIONAL: case OT_CONDITIONAL:
@@ -1470,6 +1470,10 @@ CommandCost CmdModifyOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
case MOF_COND_DESTINATION: case MOF_COND_DESTINATION:
if (data >= v->GetNumOrders()) return CMD_ERROR; if (data >= v->GetNumOrders()) return CMD_ERROR;
break; break;
case MOF_WAYPOINT_FLAGS:
if (data != (data & OWF_REVERSE)) return CMD_ERROR;
break;
} }
if (flags & DC_EXEC) { if (flags & DC_EXEC) {
@@ -1571,6 +1575,10 @@ CommandCost CmdModifyOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
order->SetConditionSkipToOrder(data); order->SetConditionSkipToOrder(data);
break; break;
case MOF_WAYPOINT_FLAGS:
order->SetWaypointFlags((OrderWaypointFlags)data);
break;
default: NOT_REACHED(); default: NOT_REACHED();
} }

View File

@@ -350,10 +350,13 @@ void DrawOrderString(const Vehicle *v, const Order *order, int order_index, int
} }
break; break;
case OT_GOTO_WAYPOINT: case OT_GOTO_WAYPOINT: {
SetDParam(0, (order->GetNonStopType() & ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS) ? STR_ORDER_GO_NON_STOP_TO_WAYPOINT : STR_ORDER_GO_TO_WAYPOINT); StringID str = (order->GetNonStopType() & ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS) ? STR_ORDER_GO_NON_STOP_TO_WAYPOINT : STR_ORDER_GO_TO_WAYPOINT;
if (order->GetWaypointFlags() & OWF_REVERSE) str += STR_ORDER_GO_TO_WAYPOINT_REVERSE - STR_ORDER_GO_TO_WAYPOINT;
SetDParam(0, str);
SetDParam(1, order->GetDestination()); SetDParam(1, order->GetDestination());
break; break;
}
case OT_CONDITIONAL: { case OT_CONDITIONAL: {
SetDParam(1, order->GetConditionSkipToOrder() + 1); SetDParam(1, order->GetConditionSkipToOrder() + 1);
@@ -554,6 +557,7 @@ private:
/* WID_O_SEL_TOP_LEFT */ /* WID_O_SEL_TOP_LEFT */
DP_LEFT_LOAD = 0, ///< Display 'load' in the left button of the top row of the train/rv order window. DP_LEFT_LOAD = 0, ///< Display 'load' in the left button of the top row of the train/rv order window.
DP_LEFT_REFIT = 1, ///< Display 'refit' in the left button of the top row of the train/rv order window. DP_LEFT_REFIT = 1, ///< Display 'refit' in the left button of the top row of the train/rv order window.
DP_LEFT_REVERSE = 2, ///< Display 'reverse' in the left button of the top row of the train/rv order window.
/* WID_O_SEL_TOP_MIDDLE */ /* WID_O_SEL_TOP_MIDDLE */
DP_MIDDLE_UNLOAD = 0, ///< Display 'unload' in the middle button of the top row of the train/rv order window. DP_MIDDLE_UNLOAD = 0, ///< Display 'unload' in the middle button of the top row of the train/rv order window.
@@ -1125,13 +1129,14 @@ public:
row_sel->SetDisplayedPlane(DP_ROW_LOAD); row_sel->SetDisplayedPlane(DP_ROW_LOAD);
} else { } else {
train_row_sel->SetDisplayedPlane(DP_GROUNDVEHICLE_ROW_NORMAL); train_row_sel->SetDisplayedPlane(DP_GROUNDVEHICLE_ROW_NORMAL);
left_sel->SetDisplayedPlane(DP_LEFT_LOAD); left_sel->SetDisplayedPlane(DP_LEFT_REVERSE);
middle_sel->SetDisplayedPlane(DP_MIDDLE_UNLOAD); middle_sel->SetDisplayedPlane(DP_MIDDLE_UNLOAD);
right_sel->SetDisplayedPlane(DP_RIGHT_EMPTY); right_sel->SetDisplayedPlane(DP_RIGHT_EMPTY);
this->EnableWidget(WID_O_NON_STOP); this->EnableWidget(WID_O_NON_STOP);
this->SetWidgetLoweredState(WID_O_NON_STOP, order->GetNonStopType() & ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS); this->SetWidgetLoweredState(WID_O_NON_STOP, order->GetNonStopType() & ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS);
this->EnableWidget(WID_O_REVERSE);
this->SetWidgetLoweredState(WID_O_REVERSE, order->GetWaypointFlags() & OWF_REVERSE);
} }
this->DisableWidget(WID_O_FULL_LOAD);
this->DisableWidget(WID_O_UNLOAD); this->DisableWidget(WID_O_UNLOAD);
this->DisableWidget(WID_O_REFIT_DROPDOWN); this->DisableWidget(WID_O_REFIT_DROPDOWN);
break; break;
@@ -1461,6 +1466,17 @@ public:
} }
break; break;
case WID_O_REVERSE: {
VehicleOrderID sel_ord = this->OrderGetSel();
const Order *order = this->vehicle->GetOrder(sel_ord);
if (order == NULL) break;
DoCommandP(this->vehicle->tile, this->vehicle->index + (sel_ord << 20), MOF_WAYPOINT_FLAGS | (order->GetWaypointFlags() ^ OWF_REVERSE) << 4,
CMD_MODIFY_ORDER | CMD_MSG(STR_ERROR_CAN_T_MODIFY_THIS_ORDER));
break;
}
case WID_O_COND_CARGO: { case WID_O_COND_CARGO: {
uint value = this->vehicle->GetOrder(this->OrderGetSel())->GetConditionValue(); uint value = this->vehicle->GetOrder(this->OrderGetSel())->GetConditionValue();
ShowDropDownMenu(this, cargo_names_list, value, WID_O_COND_CARGO, 0, cargo_bitmask); ShowDropDownMenu(this, cargo_names_list, value, WID_O_COND_CARGO, 0, cargo_bitmask);
@@ -1775,6 +1791,8 @@ static const NWidgetPart _nested_orders_train_widgets[] = {
SetDataTip(STR_ORDER_TOGGLE_FULL_LOAD, STR_ORDER_TOOLTIP_FULL_LOAD), SetResize(1, 0), SetDataTip(STR_ORDER_TOGGLE_FULL_LOAD, STR_ORDER_TOOLTIP_FULL_LOAD), SetResize(1, 0),
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_O_REFIT), SetMinimalSize(93, 12), SetFill(1, 0), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_O_REFIT), SetMinimalSize(93, 12), SetFill(1, 0),
SetDataTip(STR_ORDER_REFIT, STR_ORDER_REFIT_TOOLTIP), SetResize(1, 0), SetDataTip(STR_ORDER_REFIT, STR_ORDER_REFIT_TOOLTIP), SetResize(1, 0),
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_O_REVERSE), SetMinimalSize(93, 12), SetFill(1, 0),
SetDataTip(STR_ORDER_REVERSE, STR_ORDER_REVERSE_TOOLTIP), SetResize(1, 0),
EndContainer(), EndContainer(),
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_O_SEL_TOP_MIDDLE), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_O_SEL_TOP_MIDDLE),
NWidget(NWID_BUTTON_DROPDOWN, COLOUR_GREY, WID_O_UNLOAD), SetMinimalSize(93, 12), SetFill(1, 0), NWidget(NWID_BUTTON_DROPDOWN, COLOUR_GREY, WID_O_UNLOAD), SetMinimalSize(93, 12), SetFill(1, 0),

View File

@@ -114,6 +114,15 @@ enum OrderDepotActionFlags {
}; };
DECLARE_ENUM_AS_BIT_SET(OrderDepotActionFlags) DECLARE_ENUM_AS_BIT_SET(OrderDepotActionFlags)
/**
* Flags for go to waypoint orders
*/
enum OrderWaypointFlags {
OWF_DEFAULT = 0, ///< Default waypoint behaviour
OWF_REVERSE = 1 << 0, ///< Reverse train at the waypoint
};
DECLARE_ENUM_AS_BIT_SET(OrderWaypointFlags)
/** /**
* Variables (of a vehicle) to 'cause' skipping on. * Variables (of a vehicle) to 'cause' skipping on.
*/ */
@@ -161,6 +170,7 @@ enum ModifyOrderFlags {
MOF_COND_COMPARATOR, ///< A comparator changes. MOF_COND_COMPARATOR, ///< A comparator changes.
MOF_COND_VALUE, ///< The value to set the condition to. MOF_COND_VALUE, ///< The value to set the condition to.
MOF_COND_DESTINATION,///< Change the destination of a conditional order. MOF_COND_DESTINATION,///< Change the destination of a conditional order.
MOF_WAYPOINT_FLAGS, ///< Change the waypoint flags
MOF_END MOF_END
}; };
template <> struct EnumPropsT<ModifyOrderFlags> : MakeEnumPropsT<ModifyOrderFlags, byte, MOF_NON_STOP, MOF_END, MOF_END, 4> {}; template <> struct EnumPropsT<ModifyOrderFlags> : MakeEnumPropsT<ModifyOrderFlags, byte, MOF_NON_STOP, MOF_END, MOF_END, 4> {};

View File

@@ -3074,6 +3074,13 @@ bool AfterLoadGame()
} }
} }
if (SlXvIsFeatureMissing(XSLFI_REVERSE_AT_WAYPOINT)) {
Train *t;
FOR_ALL_TRAINS(t) {
t->reverse_distance = 0;
}
}
/* /*
* Only keep order-backups for network clients (and when replaying). * Only keep order-backups for network clients (and when replaying).
* If we are a network server or not networking, then we just loaded a previously * If we are a network server or not networking, then we just loaded a previously

View File

@@ -64,6 +64,7 @@ const SlxiSubChunkInfo _sl_xv_sub_chunk_infos[] = {
{ XSLFI_ORDER_OCCUPANCY, XSCF_NULL, 2, 2, "order_occupancy", NULL, NULL, NULL }, { XSLFI_ORDER_OCCUPANCY, XSCF_NULL, 2, 2, "order_occupancy", NULL, NULL, NULL },
{ XSLFI_MORE_COND_ORDERS, XSCF_NULL, 1, 1, "more_cond_orders", NULL, NULL, NULL }, { XSLFI_MORE_COND_ORDERS, XSCF_NULL, 1, 1, "more_cond_orders", NULL, NULL, NULL },
{ XSLFI_EXTRA_LARGE_MAP, XSCF_NULL, 0, 1, "extra_large_map", NULL, NULL, NULL }, { XSLFI_EXTRA_LARGE_MAP, XSCF_NULL, 0, 1, "extra_large_map", NULL, NULL, NULL },
{ XSLFI_REVERSE_AT_WAYPOINT, XSCF_NULL, 1, 1, "reverse_at_waypoint", NULL, NULL, NULL },
{ XSLFI_NULL, XSCF_NULL, 0, 0, NULL, NULL, NULL, NULL },// This is the end marker { XSLFI_NULL, XSCF_NULL, 0, 0, NULL, NULL, NULL, NULL },// This is the end marker
}; };

View File

@@ -45,6 +45,7 @@ enum SlXvFeatureIndex {
XSLFI_RAIL_AGEING, ///< This save game uses the rail aging patch XSLFI_RAIL_AGEING, ///< This save game uses the rail aging patch
XSLFI_SPRINGPP, ///< This is a SpringPP game, use this for loading some settings XSLFI_SPRINGPP, ///< This is a SpringPP game, use this for loading some settings
XSLFI_EXTRA_LARGE_MAP, ///< Extra large map XSLFI_EXTRA_LARGE_MAP, ///< Extra large map
XSLFI_REVERSE_AT_WAYPOINT, ///< Reverse at waypoint orders
XSLFI_SIZE, ///< Total count of features, including null feature XSLFI_SIZE, ///< Total count of features, including null feature
}; };

View File

@@ -759,6 +759,7 @@ const SaveLoad *GetVehicleDescription(VehicleType vt)
SLE_CONDNULL(2, 2, 19), SLE_CONDNULL(2, 2, 19),
SLE_CONDVAR(Train, gv_flags, SLE_UINT16, 139, SL_MAX_VERSION), SLE_CONDVAR(Train, gv_flags, SLE_UINT16, 139, SL_MAX_VERSION),
SLE_CONDNULL(11, 2, 143), // old reserved space SLE_CONDNULL(11, 2, 143), // old reserved space
SLE_CONDVAR_X(Train, reverse_distance, SLE_UINT16, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_REVERSE_AT_WAYPOINT)),
SLE_END() SLE_END()
}; };

View File

@@ -3244,6 +3244,11 @@ static VehicleEnterTileStatus VehicleEnter_Station(Vehicle *v, TileIndex tile, i
{ {
if (v->type == VEH_TRAIN) { if (v->type == VEH_TRAIN) {
StationID station_id = GetStationIndex(tile); StationID station_id = GetStationIndex(tile);
if (v->current_order.IsType(OT_GOTO_WAYPOINT) && v->current_order.GetDestination() == station_id && v->current_order.GetWaypointFlags() & OWF_REVERSE) {
Train *t = Train::From(v);
// reverse at waypoint
if (t->reverse_distance == 0) t->reverse_distance = t->gcache.cached_total_length;
}
if (!v->current_order.ShouldStopAtStation(v, station_id)) return VETSB_CONTINUE; if (!v->current_order.ShouldStopAtStation(v, station_id)) return VETSB_CONTINUE;
if (!IsRailStation(tile) || !v->IsFrontEngine()) return VETSB_CONTINUE; if (!IsRailStation(tile) || !v->IsFrontEngine()) return VETSB_CONTINUE;

View File

@@ -113,6 +113,8 @@ struct Train FINAL : public GroundVehicle<Train, VEH_TRAIN> {
/** Ticks waiting in front of a signal, ticks being stuck or a counter for forced proceeding through signals. */ /** Ticks waiting in front of a signal, ticks being stuck or a counter for forced proceeding through signals. */
uint16 wait_counter; uint16 wait_counter;
uint16 reverse_distance;
/** We don't want GCC to zero our struct! It already is zeroed and has an index! */ /** We don't want GCC to zero our struct! It already is zeroed and has an index! */
Train() : GroundVehicleBase() {} Train() : GroundVehicleBase() {}
/** We want to 'destruct' the right class. */ /** We want to 'destruct' the right class. */

View File

@@ -671,6 +671,7 @@ static CommandCost CmdBuildRailWagon(TileIndex tile, DoCommandFlag flags, const
v->owner = _current_company; v->owner = _current_company;
v->track = TRACK_BIT_DEPOT; v->track = TRACK_BIT_DEPOT;
v->vehstatus = VS_HIDDEN | VS_DEFPAL; v->vehstatus = VS_HIDDEN | VS_DEFPAL;
v->reverse_distance = 0;
v->SetWagon(); v->SetWagon();
@@ -805,6 +806,7 @@ CommandCost CmdBuildRailVehicle(TileIndex tile, DoCommandFlag flags, const Engin
v->refit_cap = 0; v->refit_cap = 0;
v->last_station_visited = INVALID_STATION; v->last_station_visited = INVALID_STATION;
v->last_loading_station = INVALID_STATION; v->last_loading_station = INVALID_STATION;
v->reverse_distance = 0;
v->engine_type = e->index; v->engine_type = e->index;
v->gcache.first_engine = INVALID_ENGINE; // needs to be set before first callback v->gcache.first_engine = INVALID_ENGINE; // needs to be set before first callback
@@ -1902,6 +1904,8 @@ void ReverseTrainDirection(Train *v)
InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile); InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile);
} }
v->reverse_distance = 0;
/* Clear path reservation in front if train is not stuck. */ /* Clear path reservation in front if train is not stuck. */
if (!HasBit(v->flags, VRF_TRAIN_STUCK)) FreeTrainTrackReservation(v); if (!HasBit(v->flags, VRF_TRAIN_STUCK)) FreeTrainTrackReservation(v);
@@ -3348,6 +3352,16 @@ static void HandleSignalBehindTrain(Train *v, uint signal_number)
ClrBit(_m[v->tile].m2, signal_number); ClrBit(_m[v->tile].m2, signal_number);
MarkTileDirtyByTile(tile); MarkTileDirtyByTile(tile);
} }
uint16 ReversingDistanceTargetSpeed(const Train *v)
{
int target_speed;
if (_settings_game.vehicle.train_acceleration_model == AM_REALISTIC) {
target_speed = ((v->reverse_distance - 1) * 5) / 2;
} else {
target_speed = (v->reverse_distance - 1) * 10 - 5;
}
return max(0, target_speed);
} }
/** /**
@@ -3363,6 +3377,15 @@ bool TrainController(Train *v, Vehicle *nomove, bool reverse)
Train *prev; Train *prev;
bool direction_changed = false; // has direction of any part changed? bool direction_changed = false; // has direction of any part changed?
if (reverse && v->reverse_distance == 1) {
goto reverse_train_direction;
}
if (v->reverse_distance > 1) {
uint16 spd = ReversingDistanceTargetSpeed(v);
if (spd < v->cur_speed) v->cur_speed = spd;
}
/* For every vehicle after and including the given vehicle */ /* For every vehicle after and including the given vehicle */
for (prev = v->Previous(); v != nomove; prev = v, v = v->Next()) { for (prev = v->Previous(); v != nomove; prev = v, v = v->Next()) {
DiagDirection enterdir = DIAGDIR_BEGIN; DiagDirection enterdir = DIAGDIR_BEGIN;
@@ -3377,6 +3400,7 @@ bool TrainController(Train *v, Vehicle *nomove, bool reverse)
/* Inside depot */ /* Inside depot */
gp.x = v->x_pos; gp.x = v->x_pos;
gp.y = v->y_pos; gp.y = v->y_pos;
v->reverse_distance = 0;
} else { } else {
/* Not inside depot */ /* Not inside depot */
@@ -3688,6 +3712,9 @@ bool TrainController(Train *v, Vehicle *nomove, bool reverse)
v->x_pos = gp.x; v->x_pos = gp.x;
v->y_pos = gp.y; v->y_pos = gp.y;
v->UpdatePosition(); v->UpdatePosition();
if (v->reverse_distance > 1) {
v->reverse_distance--;
}
/* update the Z position of the vehicle */ /* update the Z position of the vehicle */
int old_z = v->UpdateInclination(gp.new_tile != gp.old_tile, false); int old_z = v->UpdateInclination(gp.new_tile != gp.old_tile, false);

View File

@@ -1683,6 +1683,7 @@ void VehicleEnterDepot(Vehicle *v)
t->force_proceed = TFP_NONE; t->force_proceed = TFP_NONE;
ClrBit(t->flags, VRF_TOGGLE_REVERSE); ClrBit(t->flags, VRF_TOGGLE_REVERSE);
t->ConsistChanged(CCF_ARRANGE); t->ConsistChanged(CCF_ARRANGE);
t->reverse_distance = 0;
break; break;
} }
@@ -2801,6 +2802,8 @@ static void SpawnAdvancedVisualEffect(const Vehicle *v)
} }
} }
uint16 ReversingDistanceTargetSpeed(const Train *v);
/** /**
* Draw visual effects (smoke and/or sparks) for a vehicle chain. * Draw visual effects (smoke and/or sparks) for a vehicle chain.
* @pre this->IsPrimaryVehicle() * @pre this->IsPrimaryVehicle()
@@ -2829,10 +2832,12 @@ void Vehicle::ShowVisualEffect() const
/* For trains, do not show any smoke when: /* For trains, do not show any smoke when:
* - the train is reversing * - the train is reversing
* - is entering a station with an order to stop there and its speed is equal to maximum station entering speed * - is entering a station with an order to stop there and its speed is equal to maximum station entering speed
* - is approaching a reversing point and its speed is equal to maximum approach speed
*/ */
if (HasBit(t->flags, VRF_REVERSING) || if (HasBit(t->flags, VRF_REVERSING) ||
(IsRailStationTile(t->tile) && t->IsFrontEngine() && t->current_order.ShouldStopAtStation(t, GetStationIndex(t->tile)) && (IsRailStationTile(t->tile) && t->IsFrontEngine() && t->current_order.ShouldStopAtStation(t, GetStationIndex(t->tile)) &&
t->cur_speed >= max_speed)) { t->cur_speed >= max_speed) ||
(t->reverse_distance >= 1 && t->cur_speed >= ReversingDistanceTargetSpeed(t))) {
return; return;
} }
} }

View File

@@ -29,6 +29,7 @@ enum OrderWidgets {
WID_O_SERVICE, ///< Select service (at depot). WID_O_SERVICE, ///< Select service (at depot).
WID_O_EMPTY, ///< Placeholder for refit dropdown when not owner. WID_O_EMPTY, ///< Placeholder for refit dropdown when not owner.
WID_O_REFIT_DROPDOWN, ///< Open refit options. WID_O_REFIT_DROPDOWN, ///< Open refit options.
WID_O_REVERSE, ///< Select waypoint reverse type
WID_O_COND_VARIABLE, ///< Choose condition variable. WID_O_COND_VARIABLE, ///< Choose condition variable.
WID_O_COND_COMPARATOR, ///< Choose condition type. WID_O_COND_COMPARATOR, ///< Choose condition type.
WID_O_COND_VALUE, ///< Choose condition value. WID_O_COND_VALUE, ///< Choose condition value.