From 746129986abba7ca47a6540d672cf7b05db55429 Mon Sep 17 00:00:00 2001 From: glx22 Date: Wed, 20 Sep 2023 23:43:45 +0200 Subject: [PATCH] Change: always assume non-track station ground tile For track station ground tile explicitly use `GROUNDSPRITE_RAIL_X` and `GROUNDSPRITE_RAIL_Y` --- examples/station/example_station.nml | 10 +++++----- nml/actions/action2layout.py | 10 +++++++++- regression/expected/example_station.grf | Bin 3965 -> 3893 bytes regression/expected/example_station.nfo | 24 ++++++------------------ 4 files changed, 20 insertions(+), 24 deletions(-) diff --git a/examples/station/example_station.nml b/examples/station/example_station.nml index 0f95843e..ded97f6a 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 @@ -115,7 +115,7 @@ item(FEAT_STATIONS, cow_pen) { ]; } graphics { - sprite_layouts: [cow_pen_X(0), cow_pen_Y(0)]; + sprite_layouts: [cow_pen_X, cow_pen_Y]; select_tile_type: 0; purchase: cow_pen_half; LVST: random_cow_pen; diff --git a/nml/actions/action2layout.py b/nml/actions/action2layout.py index 91518397..e324b6c0 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 @@ -296,6 +296,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 3ab4b1a422c888c6d54bdd65629997a32d1c23e5..a9fa6e039684b73c311565b5bdf85c6f1d2611a8 100644 GIT binary patch delta 100 zcmew>w^fdtfx$hE=c e@~2Zu0i=#kN}&Nr@k=Q%f_V&$o8K}`-~j*w7!x1> delta 173 zcmdlg_g9Xafx$h*l3Q6L