diff --git a/examples/station/example_station.nml b/examples/station/example_station.nml index 05bf3e6f..20c547c7 100644 --- a/examples/station/example_station.nml +++ b/examples/station/example_station.nml @@ -60,9 +60,9 @@ spriteset (cow_pen_full, "cows_cargo.png") { [ 360, 10, 64, 65, -31, -34 ] } -spritelayout cow_pen_X(a) { +spritelayout cow_pen_X { ground { - sprite: 2022 + a; // prevent railtype offset + sprite: 2022; } building { sprite: DEFAULT(0); // first sprite in active spriteset @@ -72,9 +72,9 @@ spritelayout cow_pen_X(a) { } } -spritelayout cow_pen_Y(a) { +spritelayout cow_pen_Y { ground { - sprite: 2022 + a; // prevent railtype offset + sprite: 2022; } building { sprite: DEFAULT(1); // second sprite in active spriteset @@ -114,7 +114,7 @@ item(FEAT_STATIONS, cow_pen) { non_traversable_tiles: 0xFF; } graphics { - sprite_layouts: [cow_pen_X(0), cow_pen_Y(0)]; + sprite_layouts: [cow_pen_X, cow_pen_Y]; purchase: cow_pen_half; LVST: random_cow_pen; cow_pen_empty; diff --git a/nml/actions/action2layout.py b/nml/actions/action2layout.py index 288222f8..aa995e50 100644 --- a/nml/actions/action2layout.py +++ b/nml/actions/action2layout.py @@ -13,7 +13,7 @@ with NML; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.""" -from nml import expression, generic, nmlop +from nml import expression, generic, global_constants, nmlop from nml.actions import action0, action1, action2, action2real, action2var, action6, actionD, real_sprite from nml.ast import general, spriteblock @@ -292,6 +292,14 @@ def _validate_sprite(self, name, value): else: self.sprite_from_action1 = False if isinstance(value, expression.ConstantNumeric): + # For stations always assume a non-track tile ground, unless explicit rail ground sprite. + if ( + self.feature == 0x04 + and self.type == Action2LayoutSpriteType.GROUND + and value.value != global_constants.constant_numbers["GROUNDSPRITE_RAIL_X"] + and value.value != global_constants.constant_numbers["GROUNDSPRITE_RAIL_Y"] + ): + self.create_register(name, expression.ConstantNumeric(0)) generic.check_range(value.value, 0, (1 << 14) - 1, "sprite", value.pos) return value if value.supported_by_actionD(raise_error=False): diff --git a/regression/expected/example_station.grf b/regression/expected/example_station.grf index ba767de2..7f72cf2c 100644 Binary files a/regression/expected/example_station.grf and b/regression/expected/example_station.grf differ diff --git a/regression/expected/example_station.nfo b/regression/expected/example_station.nfo index 0e8c930a..ffc7e822 100644 --- a/regression/expected/example_station.nfo +++ b/regression/expected/example_station.nfo @@ -81,29 +81,21 @@ 24 * 51 00 04 \b1 01 FF \wx0000 1A \b2 -\b65 \dx00000000 \wx0002 82 +\b65 \dx000007E6 \wx0002 80 +\dx8000842D \wx0002 \b0 \b0 \b0 \b16 \b16 \b36 81 +\b65 \dx000007E6 \wx0002 82 \dx8000842D \wx0002 \b0 \b0 \b0 \b16 \b16 \b36 83 -\b65 \dx00000000 \wx0002 84 -\dx8000842D \wx0002 \b0 \b0 \b0 \b16 \b16 \b36 85 // Name: Station Layout@registers - Id 00 -// a : register 80 -// a : register 81 -25 * 106 02 04 FC 89 +25 * 62 02 04 FC 89 1A 20 \dx00000000 \2sto 1A 20 \dx00000080 -\2r 7D 80 20 \dxFFFFFFFF // a -\2+ 1A 20 \dx000007E6 -\2sto 1A 20 \dx00000082 -\2r 1A 20 \dx00000000 -\2sto 1A 20 \dx00000083 \2r 1A 20 \dx00000000 \2sto 1A 20 \dx00000081 -\2r 7D 81 20 \dxFFFFFFFF // a -\2+ 1A 20 \dx000007E6 -\2sto 1A 20 \dx00000084 +\2r 1A 20 \dx00000000 +\2sto 1A 20 \dx00000082 \2r 1A 20 \dx00000001 -\2sto 1A 00 \dx00000085 +\2sto 1A 00 \dx00000083 \b0 \wx8000 // Return computed value