Initial implementation of NewGRF custom signal styles
This commit is contained in:
@@ -4064,6 +4064,19 @@ bool AfterLoadGame()
|
||||
ApplyIndustryTileAnimMasking();
|
||||
}
|
||||
|
||||
if (SlXvIsFeatureMissing(XSLFI_NEW_SIGNAL_STYLES)) {
|
||||
for (TileIndex t = 0; t < map_size; t++) {
|
||||
if (IsTileType(t, MP_RAILWAY) && HasSignals(t)) {
|
||||
/* clear signal style field */
|
||||
_me[t].m6 = 0;
|
||||
}
|
||||
if (IsRailTunnelBridgeTile(t)) {
|
||||
/* Clear signal style is non-zero flag */
|
||||
ClrBit(_m[t].m3, 7);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
InitializeRoadGUI();
|
||||
|
||||
/* This needs to be done after conversion. */
|
||||
@@ -4198,4 +4211,6 @@ void ReloadNewGRFData()
|
||||
AfterLoadTemplateVehiclesUpdateImages();
|
||||
AfterLoadTemplateVehiclesUpdateProperties();
|
||||
UpdateAllAnimatedTileSpeeds();
|
||||
|
||||
InvalidateWindowData(WC_BUILD_SIGNAL, 0);
|
||||
}
|
||||
|
||||
@@ -50,8 +50,25 @@ static void Save_XBSS()
|
||||
}
|
||||
}
|
||||
|
||||
static void Load_XBST()
|
||||
{
|
||||
size_t count = SlGetFieldLength() / sizeof(uint32);
|
||||
for (size_t i = 0; i < count; i++) {
|
||||
_bridge_signal_style_map.insert(SlReadUint32());
|
||||
}
|
||||
}
|
||||
|
||||
static void Save_XBST()
|
||||
{
|
||||
SlSetLength(_bridge_signal_style_map.size() * sizeof(uint32));
|
||||
for (uint32 val : _bridge_signal_style_map) {
|
||||
SlWriteUint32(val);
|
||||
}
|
||||
}
|
||||
|
||||
extern const ChunkHandler bridge_signal_chunk_handlers[] = {
|
||||
{ 'XBSS', Save_XBSS, Load_XBSS, nullptr, nullptr, CH_SPARSE_ARRAY },
|
||||
{ 'XBST', Save_XBST, Load_XBST, nullptr, nullptr, CH_RIFF },
|
||||
};
|
||||
|
||||
extern const ChunkHandlerTable _bridge_signal_chunk_handlers(bridge_signal_chunk_handlers);
|
||||
|
||||
@@ -173,6 +173,7 @@ const SlxiSubChunkInfo _sl_xv_sub_chunk_infos[] = {
|
||||
{ XSLFI_RV_ORDER_EXTRA_FLAGS, XSCF_IGNORABLE_UNKNOWN, 1, 1, "rv_order_extra_flags", nullptr, nullptr, nullptr },
|
||||
{ XSLFI_GRF_ROADSTOPS, XSCF_NULL, 1, 1, "grf_road_stops", nullptr, nullptr, nullptr },
|
||||
{ XSLFI_INDUSTRY_ANIM_MASK, XSCF_IGNORABLE_ALL, 1, 1, "industry_anim_mask", nullptr, nullptr, nullptr },
|
||||
{ XSLFI_NEW_SIGNAL_STYLES, XSCF_NULL, 1, 1, "new_signal_styles", nullptr, nullptr, "XBST" },
|
||||
{ XSLFI_SCRIPT_INT64, XSCF_NULL, 1, 1, "script_int64", nullptr, nullptr, nullptr },
|
||||
{ XSLFI_NULL, XSCF_NULL, 0, 0, nullptr, nullptr, nullptr, nullptr },// This is the end marker
|
||||
};
|
||||
|
||||
@@ -126,6 +126,7 @@ enum SlXvFeatureIndex {
|
||||
XSLFI_RV_ORDER_EXTRA_FLAGS, ///< Road vehicle order extra flags
|
||||
XSLFI_GRF_ROADSTOPS, ///< NewGRF road stops
|
||||
XSLFI_INDUSTRY_ANIM_MASK, ///< Industry tile animation masking
|
||||
XSLFI_NEW_SIGNAL_STYLES, ///< New signal styles
|
||||
|
||||
XSLFI_SCRIPT_INT64, ///< See: SLV_SCRIPT_INT64
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@ static const SaveLoad _tunnel_desc[] = {
|
||||
SLE_CONDVAR(Tunnel, tile_s, SLE_UINT32, SL_MIN_VERSION, SL_MAX_VERSION),
|
||||
SLE_CONDVAR(Tunnel, height, SLE_UINT8, SL_MIN_VERSION, SL_MAX_VERSION),
|
||||
SLE_CONDVAR(Tunnel, is_chunnel, SLE_BOOL, SL_MIN_VERSION, SL_MAX_VERSION),
|
||||
SLE_CONDVAR_X(Tunnel, style, SLE_UINT8, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_NEW_SIGNAL_STYLES)),
|
||||
};
|
||||
|
||||
static void Save_TUNN()
|
||||
|
||||
Reference in New Issue
Block a user