From 980461a3ad920af74ec4ab45ddf7004e65aca227 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 | 11 ++++++++++- regression/expected/example_station.grf | Bin 3933 -> 3889 bytes regression/expected/example_station.nfo | 22 +++++++--------------- 4 files changed, 22 insertions(+), 21 deletions(-) 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..805d27c4 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,15 @@ 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, value) + return 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 77ffb496588f82cf408d3de80df0dd66285a6e55..c125361e264a320c9b31608321176c366879e483 100644 GIT binary patch delta 106 zcmcaBw^5Fpfx$hgKi5$0}}%f2neV&PEKGFwY39s{xh-s>6B7< m#?HXNC#BE;6ycXr0FoeHBZLQ)Yl83?!Ey}En?EyU@c;mDWD|A( delta 167 zcmdlecUO*^fx$h`cMMZ~lWq$`0}}%f2neV&JAxQY3@ylltyw^^|4b}@ zI;9jq(tJ`14M2*&wn5=P5HLt7JYxroHi1OpYMN1ajbI&(XgXRLc)?m2fwFv346U1w IGiC7r08SAh{r~^~ diff --git a/regression/expected/example_station.nfo b/regression/expected/example_station.nfo index f1a9a462..e5dcd793 100644 --- a/regression/expected/example_station.nfo +++ b/regression/expected/example_station.nfo @@ -83,29 +83,21 @@ 24 * 51 00 04 \b1 01 FF \wx0000 1A \b2 +\b65 \dx00000000 \wx0002 80 +\dx8000842D \wx0002 \b0 \b0 \b0 \b16 \b16 \b36 81 \b65 \dx00000000 \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 -1A 20 \dx00000000 +25 * 62 02 04 FC 89 +1A 20 \dx000007E6 \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 \dx000007E6 +\2sto 1A 20 \dx00000082 \2r 1A 20 \dx00000001 -\2sto 1A 00 \dx00000085 +\2sto 1A 00 \dx00000083 \b0 \wx8000 // Return computed value