Index: docs/landscape.html
===================================================================
--- docs/landscape.html (revision 17607)
+++ docs/landscape.html (working copy)
@@ -450,7 +450,12 @@
m2 bit 11: opposite track is reserved, too
-
+ m2 bit 15 set = with extended signals
+
+ - m7 bits 7..0 and m6 bits 2..6 and m2 bits 12..14: the 15-bit SignalExID
+
+
+
m5 bit 7 set, bit 6 set: railway depot
Index: docs/landscape_grid.html
===================================================================
--- docs/landscape_grid.html (revision 17607)
+++ docs/landscape_grid.html (working copy)
@@ -101,12 +101,12 @@
rail with signals |
-inherit- |
-inherit- |
- OOOO XXXX XXXX XXXX |
+ XXXX XXXX XXXX XXXX |
XXXX ~~XX |
XXXX XXXX |
-inherit- |
- XXOO OOXX |
- OOOO OOOO |
+ XXXX XXXX |
+ XXXX XXXX |
depot |
Index: source.list
===================================================================
--- source.list (revision 17607)
+++ source.list (working copy)
@@ -61,6 +61,7 @@
#end
settings.cpp
signal.cpp
+signalex.cpp
signs.cpp
sound.cpp
spritecache.cpp
@@ -250,6 +251,9 @@
ship.h
signal_func.h
signal_type.h
+signalex_base.h
+signalex_map.h
+signalex_type.h
signs_base.h
signs_func.h
signs_type.h
@@ -464,6 +468,7 @@
saveload/saveload.cpp
saveload/saveload.h
saveload/saveload_internal.h
+saveload/signalex_sl.cpp
saveload/signs_sl.cpp
saveload/station_sl.cpp
saveload/strings_sl.cpp
Index: src/misc.cpp
===================================================================
--- src/misc.cpp (revision 17607)
+++ src/misc.cpp (working copy)
@@ -59,6 +59,7 @@
void InitializeCheats();
void InitializeNPF();
void InitializeOldNames();
+void InitializeSignalEx();
void InitializeGame(uint size_x, uint size_y, bool reset_date, bool reset_settings)
{
@@ -108,6 +109,7 @@
InitializeCargoPackets();
InitializeIndustries();
InitializeBuildingCounts();
+ InitializeSignalEx();
InitializeNPF();
Index: src/openttd.cpp
===================================================================
--- src/openttd.cpp (revision 17607)
+++ src/openttd.cpp (working copy)
@@ -63,6 +63,7 @@
#include "thread/thread.h"
#include "station_base.h"
#include "crashlog.h"
+#include "signalex_base.h"
#include "newgrf_commons.h"
@@ -345,6 +346,7 @@
_cargopacket_pool.CleanPool();
_engine_pool.CleanPool();
_company_pool.CleanPool();
+ _signalex_pool.CleanPool();
free(_config_file);
Index: src/rail_cmd.cpp
===================================================================
--- src/rail_cmd.cpp (revision 17607)
+++ src/rail_cmd.cpp (working copy)
@@ -35,6 +35,7 @@
#include "functions.h"
#include "elrail_func.h"
#include "town.h"
+#include "signalex_base.h"
#include "table/strings.h"
#include "table/railtypes.h"
@@ -971,6 +972,13 @@
uint mask = GetPresentSignals(tile) & SignalOnTrack(track);
SetSignalStates(tile, (GetSignalStates(tile) & ~mask) | ((HasBit(GetRailReservationTrackBits(tile), track) ? UINT_MAX : 0) & mask));
}
+
+ /* at this point the tile has a signal. If it's an extended signal, update it */
+ if(SignalExMap::IsEnabled(tile)) { SignalEx::UpdateFromTile(tile); }
+#ifdef _ALL_SIGNALS_EXTENDED
+ else { SignalEx::Update(SignalEx::Create(tile)); }
+#endif
+
MarkTileDirtyByTile(tile);
AddTrackToSignalBuffer(tile, track, _current_company);
YapfNotifyTrackLayoutChange(tile, track);
@@ -1220,9 +1228,15 @@
/* removed last signal from tile? */
if (GetPresentSignals(tile) == 0) {
+ /* destroy the extended signal if the tile has one */
+ if(SignalExMap::IsEnabled(tile)) {
+ SignalEx::Destroy(tile); // perform before the tile type is changed from RAIL_TILE_SIGNALS
+ }
SetSignalStates(tile, 0);
SetHasSignals(tile, false);
SetSignalVariant(tile, INVALID_TRACK, SIG_ELECTRIC); // remove any possible semaphores
+ } else {
+ SignalEx::UpdateFromTile(tile); // inform SignalEx object its tile signals have been updated
}
AddTrackToSignalBuffer(tile, track, GetTileOwner(tile));
Index: src/rail_map.h
===================================================================
--- src/rail_map.h (revision 17607)
+++ src/rail_map.h (working copy)
@@ -19,6 +19,7 @@
#include "track_func.h"
#include "tile_map.h"
#include "signal_type.h"
+#include "signalex_type.h"
/** Different types of Rail-related tiles */
Index: src/saveload/afterload.cpp
===================================================================
--- src/saveload/afterload.cpp (revision 17607)
+++ src/saveload/afterload.cpp (working copy)
@@ -42,6 +42,7 @@
#include "../animated_tile_func.h"
#include "../subsidy_base.h"
#include "../subsidy_func.h"
+#include "../signalex_base.h"
#include "table/strings.h"
@@ -1959,6 +1960,18 @@
}
}
+ /**
+ *Clear flag bit used by signalex from the RAIL_TILE_SIGNALS signals on older save game versions
+ *@todo actually needed?
+ */
+ if (CheckSavegameVersion(128)) {
+ for (TileIndex t = 0; t < map_size; t++) {
+ if(IsTileType(t, MP_RAILWAY))
+ if(GetRailTileType(t) == RAIL_TILE_SIGNALS)
+ SignalExMap::SetBitsFlag(t,0);
+ }
+ }
+
AfterLoadLabelMaps();
GamelogPrintDebug(1);
Index: src/saveload/saveload.cpp
===================================================================
--- src/saveload/saveload.cpp (revision 17607)
+++ src/saveload/saveload.cpp (working copy)
@@ -48,7 +48,7 @@
#include "saveload_internal.h"
-extern const uint16 SAVEGAME_VERSION = 127;
+extern const uint16 SAVEGAME_VERSION = 128;
SavegameType _savegame_type; ///< type of savegame we are loading
@@ -1446,6 +1446,7 @@
extern const ChunkHandler _cargopacket_chunk_handlers[];
extern const ChunkHandler _autoreplace_chunk_handlers[];
extern const ChunkHandler _labelmaps_chunk_handlers[];
+extern const ChunkHandler _signalex_chunk_handlers[];
static const ChunkHandler * const _chunk_handlers[] = {
_gamelog_chunk_handlers,
@@ -1473,6 +1474,7 @@
_cargopacket_chunk_handlers,
_autoreplace_chunk_handlers,
_labelmaps_chunk_handlers,
+ _signalex_chunk_handlers,
NULL,
};
Index: src/saveload/signalex_sl.cpp
===================================================================
--- src/saveload/signalex_sl.cpp (revision 0)
+++ src/saveload/signalex_sl.cpp (revision 0)
@@ -0,0 +1,36 @@
+/** @file signalex_sl.cpp Code handling saving and loading of extended signals */
+
+#include "../stdafx.h"
+#include "saveload_internal.h"
+#include "../signalex_base.h"
+#include