Merge branch 'signal_tunnels_bridges' into jgrpp

# Conflicts:
#	src/saveload/extended_ver_sl.cpp
#	src/train.h
pull/59/head
Jonathan G Rennison 7 years ago
commit 09ca051ff8

@ -3348,6 +3348,17 @@ bool AfterLoadGame()
}
}
}
if (SlXvIsFeaturePresent(XSLFI_SIG_TUNNEL_BRIDGE, 1, 4)) {
/* load_unload_ticks --> tunnel_bridge_signal_num */
Train *t;
FOR_ALL_TRAINS(t) {
TileIndex tile = t->tile;
if (IsTileType(tile, MP_TUNNELBRIDGE) && GetTunnelBridgeTransportType(tile) == TRANSPORT_RAIL && IsTunnelBridgeWithSignalSimulation(tile)) {
t->tunnel_bridge_signal_num = t->load_unload_ticks;
t->load_unload_ticks = 0;
}
}
}
if (SlXvIsFeatureMissing(XSLFI_CUSTOM_BRIDGE_HEADS)) {
/* ensure that previously unused custom bridge-head bits are cleared */

@ -55,7 +55,7 @@ const SlxiSubChunkInfo _sl_xv_sub_chunk_infos[] = {
{ XSLFI_DEPARTURE_BOARDS, XSCF_IGNORABLE_UNKNOWN, 1, 1, "departure_boards", NULL, NULL, NULL },
{ XSLFI_TIMETABLES_START_TICKS, XSCF_NULL, 2, 2, "timetable_start_ticks", NULL, NULL, NULL },
{ XSLFI_TOWN_CARGO_ADJ, XSCF_IGNORABLE_UNKNOWN, 2, 2, "town_cargo_adj", NULL, NULL, NULL },
{ XSLFI_SIG_TUNNEL_BRIDGE, XSCF_NULL, 4, 4, "signal_tunnel_bridge", NULL, NULL, "XBSS" },
{ XSLFI_SIG_TUNNEL_BRIDGE, XSCF_NULL, 5, 5, "signal_tunnel_bridge", NULL, NULL, "XBSS" },
{ XSLFI_IMPROVED_BREAKDOWNS, XSCF_NULL, 6, 6, "improved_breakdowns", NULL, NULL, NULL },
{ XSLFI_TT_WAIT_IN_DEPOT, XSCF_NULL, 1, 1, "tt_wait_in_depot", NULL, NULL, NULL },
{ XSLFI_AUTO_TIMETABLE, XSCF_NULL, 4, 4, "auto_timetables", NULL, NULL, NULL },

@ -749,6 +749,7 @@ const SaveLoad *GetVehicleDescription(VehicleType vt)
SLE_CONDNULL(2, 2, 59),
SLE_CONDVAR(Train, wait_counter, SLE_UINT16, 136, SL_MAX_VERSION),
SLE_CONDVAR_X(Train, tunnel_bridge_signal_num, SLE_UINT16, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SIG_TUNNEL_BRIDGE, 5)),
SLE_CONDNULL(2, 2, 19),
SLE_CONDVAR(Train, gv_flags, SLE_UINT16, 139, SL_MAX_VERSION),

@ -117,6 +117,7 @@ struct Train FINAL : public GroundVehicle<Train, VEH_TRAIN> {
uint16 wait_counter;
uint16 reverse_distance;
uint16 tunnel_bridge_signal_num;
/** We don't want GCC to zero our struct! It already is zeroed and has an index! */
Train() : GroundVehicleBase() {}

@ -2065,7 +2065,7 @@ void ReverseTrainDirection(Train *v)
MarkTileDirtyByTile(v->tile);
/* Clear counters. */
v->wait_counter = 0;
v->load_unload_ticks = 0;
v->tunnel_bridge_signal_num = 0;
return;
}
@ -3927,7 +3927,7 @@ bool TrainController(Train *v, Vehicle *nomove, bool reverse)
if (v->IsFrontEngine() && v->force_proceed == 0 && IsTunnelBridgeSignalSimulationExit(v->tile)) goto invalid_rail;
/* Entered wormhole set counters. */
v->wait_counter = (TILE_SIZE * _settings_game.construction.simulated_wormhole_signals) - TILE_SIZE;
v->load_unload_ticks = 0;
v->tunnel_bridge_signal_num = 0;
}
uint distance = v->wait_counter;
@ -3952,13 +3952,13 @@ bool TrainController(Train *v, Vehicle *nomove, bool reverse)
}
/* flip signal in front to red on bridges*/
if (distance == 0 && IsBridge(v->tile)) {
SetBridgeEntranceSimulatedSignalState(v->tile, v->load_unload_ticks, SIGNAL_STATE_RED);
SetBridgeEntranceSimulatedSignalState(v->tile, v->tunnel_bridge_signal_num, SIGNAL_STATE_RED);
MarkTileDirtyByTile(gp.new_tile);
}
}
}
if (v->Next() == NULL) {
if (v->load_unload_ticks > 0 && distance == (TILE_SIZE * _settings_game.construction.simulated_wormhole_signals) - TILE_SIZE) HandleSignalBehindTrain(v, v->load_unload_ticks - 2);
if (v->tunnel_bridge_signal_num > 0 && distance == (TILE_SIZE * _settings_game.construction.simulated_wormhole_signals) - TILE_SIZE) HandleSignalBehindTrain(v, v->tunnel_bridge_signal_num - 2);
if (old_tile == v->tile) {
/* We left ramp into wormhole. */
v->x_pos = gp.x;
@ -3967,13 +3967,13 @@ bool TrainController(Train *v, Vehicle *nomove, bool reverse)
UnreserveBridgeTunnelTile(old_tile);
}
}
if (distance == 0) v->load_unload_ticks++;
if (distance == 0) v->tunnel_bridge_signal_num++;
v->wait_counter -= TILE_SIZE;
if (leaving) { // Reset counters.
v->force_proceed = 0;
v->wait_counter = 0;
v->load_unload_ticks = 0;
v->tunnel_bridge_signal_num = 0;
v->x_pos = gp.x;
v->y_pos = gp.y;
v->UpdatePosition();

Loading…
Cancel
Save