From 5a877b49b464763765842e05133d58cb558fe771 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sun, 19 Feb 2023 20:22:40 +0000 Subject: [PATCH] Add railtype/signal variable to get signal side --- docs/newgrf-additions-nml.html | 20 ++++++++++++++++++++ docs/newgrf-additions.html | 28 ++++++++++++++++++++++++++++ src/newgrf_extension.cpp | 4 ++++ src/newgrf_extension.h | 2 ++ src/newgrf_newsignals.cpp | 13 +++++++++++++ src/newgrf_newsignals.h | 2 ++ src/newgrf_railtype.cpp | 3 +++ src/table/newgrf_debug_data.h | 1 + 8 files changed, 73 insertions(+) diff --git a/docs/newgrf-additions-nml.html b/docs/newgrf-additions-nml.html index 0e9b5184eb..a4f3f58b56 100644 --- a/docs/newgrf-additions-nml.html +++ b/docs/newgrf-additions-nml.html @@ -164,6 +164,16 @@ Above signal context variables in one variable (all of the railtype_signal_context variable) + signal_sideSIGNAL_SIDE_XXX + +
+
LEFT
+
Signals are on the left
+
RIGHT
+
Signals are on the right
+
+ +

Roadtype properties

@@ -650,6 +660,16 @@ item (FEAT_GLOBALVARS) { Above signal context variables in one variable (all of the signals_signal_context variable) + + +
signal_sideSIGNAL_SIDE_XXX +
+
LEFT
+
Signals are on the left
+
RIGHT
+
Signals are on the right
+
+
signal_style0 - 255 The style ID defined using define_style for signals using a custom style, or 0 for signals using the default style diff --git a/docs/newgrf-additions.html b/docs/newgrf-additions.html index 20b4328648..b186d79a41 100644 --- a/docs/newgrf-additions.html +++ b/docs/newgrf-additions.html @@ -753,6 +753,20 @@

This is indicated by the feature name: varaction2_railtype_signal_context, version 1

+

Signal side (mappable variable: railtype_signal_side)

+

This applies to Action 2/3 - Railtype custom signal sprites.
+ + + +
BitMeaning
0 + + + + +
ValueMeaning
0Signals are on the left
1Signals are on the right
+
+

+

This is indicated by the feature name: varaction2_railtype_signal_side, version 1


Variational Action 2 - Objects

Tile slope after foundation applied (mappable variable: object_foundation_tile_slope)

@@ -795,6 +809,20 @@

This is indicated by the feature name: varaction2_signals_signal_context, version 1

+

Signal side (mappable variable: signals_signal_side)

+

This applies to Action 2/3 Signals (Feature 0E) custom signal sprites.
+ + + +
BitMeaning
0 + + + + +
ValueMeaning
0Signals are on the left
1Signals are on the right
+
+

+

This is indicated by the feature name: varaction2_signals_signal_side, version 1

Signal style (mappable variable: signals_signal_style)

This applies to Action 2/3 Signals (Feature 0E) custom signal sprites.
If the signal being drawn uses a custom signal style, the value is the signal style ID as set in the signals_define_style property.
diff --git a/src/newgrf_extension.cpp b/src/newgrf_extension.cpp index 477c9da188..e84998c83f 100644 --- a/src/newgrf_extension.cpp +++ b/src/newgrf_extension.cpp @@ -41,6 +41,7 @@ extern const GRFFeatureInfo _grf_feature_list[] = { GRFFeatureInfo("action0_roadtype_extra_flags", 2), GRFFeatureInfo("action0_roadtype_collision_mode", 1), GRFFeatureInfo("varaction2_railtype_signal_context", 1), + GRFFeatureInfo("varaction2_railtype_signal_side", 1), GRFFeatureInfo("action0_global_extra_station_names", 2), GRFFeatureInfo("action0_global_default_object_generate_amount", 1), GRFFeatureInfo("action0_global_allow_rocks_in_desert", 1), @@ -51,6 +52,7 @@ extern const GRFFeatureInfo _grf_feature_list[] = { GRFFeatureInfo("action0_signals_extra_aspects", 1), GRFFeatureInfo("action0_signals_style", 1), GRFFeatureInfo("varaction2_signals_signal_context", 1), + GRFFeatureInfo("varaction2_signals_signal_side", 1), GRFFeatureInfo("action3_signals_custom_signal_sprites", 1), GRFFeatureInfo("action0_object_use_land_ground", 1), GRFFeatureInfo("action0_object_edge_foundation_mode", 2), @@ -156,9 +158,11 @@ extern const GRFVariableMapDefinition _grf_action2_remappable_variables[] = { GRFVariableMapDefinition(GSF_ROADSTOPS, A2VRI_ROADSTOP_INFO_NEARBY_TILES_V2, "roadstop_road_stop_info_nearby_tiles_v2"), GRFVariableMapDefinition(GSF_RAILTYPES, A2VRI_RAILTYPE_SIGNAL_RESTRICTION_INFO, "railtype_signal_restriction_info"), GRFVariableMapDefinition(GSF_RAILTYPES, A2VRI_RAILTYPE_SIGNAL_CONTEXT, "railtype_signal_context"), + GRFVariableMapDefinition(GSF_RAILTYPES, A2VRI_RAILTYPE_SIGNAL_SIDE, "railtype_signal_side"), GRFVariableMapDefinition(GSF_SIGNALS, A2VRI_SIGNALS_SIGNAL_RESTRICTION_INFO, "signals_signal_restriction_info"), GRFVariableMapDefinition(GSF_SIGNALS, A2VRI_SIGNALS_SIGNAL_CONTEXT, "signals_signal_context"), GRFVariableMapDefinition(GSF_SIGNALS, A2VRI_SIGNALS_SIGNAL_STYLE, "signals_signal_style"), + GRFVariableMapDefinition(GSF_SIGNALS, A2VRI_SIGNALS_SIGNAL_SIDE, "signals_signal_side"), GRFVariableMapDefinition(GSF_NEWLANDSCAPE, 0x40, "newlandscape_terrain_type"), GRFVariableMapDefinition(GSF_NEWLANDSCAPE, 0x41, "newlandscape_tile_slope"), GRFVariableMapDefinition(GSF_NEWLANDSCAPE, 0x42, "newlandscape_tile_height"), diff --git a/src/newgrf_extension.h b/src/newgrf_extension.h index bb89fdcf79..c014f07c57 100644 --- a/src/newgrf_extension.h +++ b/src/newgrf_extension.h @@ -81,9 +81,11 @@ enum Action2VariableRemapIds { A2VRI_ROADSTOP_INFO_NEARBY_TILES_V2, A2VRI_RAILTYPE_SIGNAL_RESTRICTION_INFO, A2VRI_RAILTYPE_SIGNAL_CONTEXT, + A2VRI_RAILTYPE_SIGNAL_SIDE, A2VRI_SIGNALS_SIGNAL_RESTRICTION_INFO, A2VRI_SIGNALS_SIGNAL_CONTEXT, A2VRI_SIGNALS_SIGNAL_STYLE, + A2VRI_SIGNALS_SIGNAL_SIDE, }; enum GRFFeatureTestObservationFlag : uint8 { diff --git a/src/newgrf_newsignals.cpp b/src/newgrf_newsignals.cpp index 882e0cd4a5..1f0fb0a942 100644 --- a/src/newgrf_newsignals.cpp +++ b/src/newgrf_newsignals.cpp @@ -34,6 +34,17 @@ static uint8 MapSignalStyle(uint8 style) return style != 0 ? _new_signal_styles[style - 1].grf_local_id : 0; } +uint32 GetNewSignalsSideVariable() +{ + bool side; + switch (_settings_game.construction.train_signal_side) { + case 0: side = false; break; // left + case 2: side = true; break; // right + default: side = _settings_game.vehicle.road_side != 0; break; // driving side + } + return side ? 1 : 0; +} + /* virtual */ uint32 NewSignalsScopeResolver::GetVariable(uint16 variable, uint32 parameter, GetVariableExtra *extra) const { if (this->tile == INVALID_TILE) { @@ -42,6 +53,7 @@ static uint8 MapSignalStyle(uint8 style) case A2VRI_SIGNALS_SIGNAL_RESTRICTION_INFO: return 0; case A2VRI_SIGNALS_SIGNAL_CONTEXT: return this->signal_context; case A2VRI_SIGNALS_SIGNAL_STYLE: return MapSignalStyle(this->signal_style); + case A2VRI_SIGNALS_SIGNAL_SIDE: return GetNewSignalsSideVariable(); } } @@ -52,6 +64,7 @@ static uint8 MapSignalStyle(uint8 style) case A2VRI_SIGNALS_SIGNAL_CONTEXT: return GetNewSignalsSignalContext(this->signal_context, this->tile); case A2VRI_SIGNALS_SIGNAL_STYLE: return MapSignalStyle(this->signal_style); + case A2VRI_SIGNALS_SIGNAL_SIDE: return GetNewSignalsSideVariable(); } DEBUG(grf, 1, "Unhandled new signals tile variable 0x%X", variable); diff --git a/src/newgrf_newsignals.h b/src/newgrf_newsignals.h index efcd6dfd61..d32e5850e4 100644 --- a/src/newgrf_newsignals.h +++ b/src/newgrf_newsignals.h @@ -111,4 +111,6 @@ inline uint GetNewSignalsSignalContext(CustomSignalSpriteContext signal_context, return result; } +uint32 GetNewSignalsSideVariable(); + #endif /* NEWGRF_NEWSIGNALS_H */ diff --git a/src/newgrf_railtype.cpp b/src/newgrf_railtype.cpp index cbd5d4aff6..0e0e04a085 100644 --- a/src/newgrf_railtype.cpp +++ b/src/newgrf_railtype.cpp @@ -36,6 +36,7 @@ case 0x44: return HZB_TOWN_EDGE; case A2VRI_RAILTYPE_SIGNAL_RESTRICTION_INFO: return 0; case A2VRI_RAILTYPE_SIGNAL_CONTEXT: return this->signal_context; + case A2VRI_RAILTYPE_SIGNAL_SIDE: return GetNewSignalsSideVariable(); } } @@ -59,6 +60,8 @@ return GetNewSignalsRestrictedSignalsInfo(this->prog, this->tile, 0); case A2VRI_RAILTYPE_SIGNAL_CONTEXT: return GetNewSignalsSignalContext(this->signal_context, this->tile); + case A2VRI_RAILTYPE_SIGNAL_SIDE: + return GetNewSignalsSideVariable(); } DEBUG(grf, 1, "Unhandled rail type tile variable 0x%X", variable); diff --git a/src/table/newgrf_debug_data.h b/src/table/newgrf_debug_data.h index 4defcfef55..6027118af2 100644 --- a/src/table/newgrf_debug_data.h +++ b/src/table/newgrf_debug_data.h @@ -1193,6 +1193,7 @@ static const NIVariable _niv_signals[] = { NIV(A2VRI_SIGNALS_SIGNAL_RESTRICTION_INFO, "restriction info"), NIV(A2VRI_SIGNALS_SIGNAL_CONTEXT, "context"), NIV(A2VRI_SIGNALS_SIGNAL_STYLE, "style"), + NIV(A2VRI_SIGNALS_SIGNAL_SIDE, "side"), NIV_END() };