From 6c7c05e84148bf335cadc25e9749df5d736e055a Mon Sep 17 00:00:00 2001 From: glx22 Date: Sun, 4 Feb 2024 19:14:23 +0100 Subject: [PATCH] Add: Support for station variable 6B --- nml/actions/action2var_variables.py | 20 ++++++++++++++++++-- regression/040_station.nml | 2 +- regression/expected/040_station.grf | Bin 1264 -> 1361 bytes regression/expected/040_station.nfo | 19 ++++++++++++++++--- 4 files changed, 35 insertions(+), 6 deletions(-) diff --git a/nml/actions/action2var_variables.py b/nml/actions/action2var_variables.py index c25708fc..b08175e1 100644 --- a/nml/actions/action2var_variables.py +++ b/nml/actions/action2var_variables.py @@ -342,6 +342,22 @@ def platform_info_fix_var(var, info): var.param = None return var +def value_station_id(var, info): + # 'nearby_tile_station_id' is accessible via 2 different variables + # - var68 bits 0-7 (8 bits only) + # - var6B bits 0-15 (16 bits but OpenTTD 14+) + openttd14 = nmlop.CMP_GE( + expression.Variable(expression.ConstantNumeric(0x21)), # openttd version + expression.ConstantNumeric(0x1E000000) # version_openttd(14, 0) + ) + var68 = expression.Variable( + expression.ConstantNumeric(0x68), + expression.ConstantNumeric(0), + expression.ConstantNumeric(0xFF), + var.param + ) + return expression.TernaryOp(openttd14, var, var68, var.pos) + varact2vars60x_stations = { **varact2vars60x_base_stations, 'nearby_tile_animation_frame' : {'var': 0x66, 'start': 0, 'size': 32, 'param_function': signed_tile_offset}, @@ -352,7 +368,6 @@ def platform_info_fix_var(var, info): 'nearby_tile_height' : {'var': 0x67, 'start': 16, 'size': 8, 'param_function': signed_tile_offset}, 'nearby_tile_class' : {'var': 0x67, 'start': 24, 'size': 4, 'param_function': signed_tile_offset}, 'nearby_tile_is_station' : {'var': 0x68, 'start': 0, 'size': 32, 'param_function': signed_tile_offset, 'value_function': lambda var, info: nmlop.CMP_NEQ(var, 0xFFFFFFFF)}, - 'nearby_tile_station_id' : {'var': 0x68, 'start': 0, 'size': 8, 'param_function': signed_tile_offset}, 'nearby_tile_same_grf' : {'var': 0x68, 'start': 8, 'size': 2, 'param_function': signed_tile_offset, 'value_function': value_equals(0)}, 'nearby_tile_other_grf' : {'var': 0x68, 'start': 8, 'size': 2, 'param_function': signed_tile_offset, 'value_function': value_equals(1)}, 'nearby_tile_original_gfx' : {'var': 0x68, 'start': 8, 'size': 2, 'param_function': signed_tile_offset, 'value_function': value_equals(2)}, @@ -360,6 +375,7 @@ def platform_info_fix_var(var, info): 'nearby_tile_perpendicular' : {'var': 0x68, 'start': 11, 'size': 1, 'param_function': signed_tile_offset}, 'nearby_tile_tile_type' : {'var': 0x68, 'start': 11, 'size': 3, 'param_function': signed_tile_offset}, 'nearby_tile_grfid' : {'var': 0x6A, 'start': 0, 'size': 32, 'param_function': signed_tile_offset}, + 'nearby_tile_station_id' : {'var': 0x6B, 'start': 0, 'size': 16, 'param_function': signed_tile_offset, 'value_function': value_station_id}, # 'var' will be set in the value_function, depending on parameter 'platform_length' : {'var': 0x00, 'start': 16, 'size': 4, 'param_function': platform_info_param, 'value_function': platform_info_fix_var}, 'platform_count' : {'var': 0x00, 'start': 20, 'size': 4, 'param_function': platform_info_param, 'value_function': platform_info_fix_var}, @@ -824,7 +840,6 @@ def industry_cargotype(name, args, pos, info): 'nearby_tile_class' : {'var': 0x67, 'start': 24, 'size': 4, 'param_function': signed_tile_offset}, 'nearby_tile_road_stop_info' : {'var': 0x68, 'start': 0, 'size': 32, 'param_function': signed_tile_offset}, 'nearby_tile_is_road_stop' : {'var': 0x68, 'start': 0, 'size': 32, 'param_function': signed_tile_offset, 'value_function': lambda var, info: nmlop.CMP_NEQ(var, 0xFFFFFFFF)}, - 'nearby_tile_road_stop_id' : {'var': 0x68, 'start': 0, 'size': 8, 'param_function': signed_tile_offset}, 'nearby_tile_same_grf' : {'var': 0x68, 'start': 8, 'size': 2, 'param_function': signed_tile_offset, 'value_function': value_equals(0)}, 'nearby_tile_other_grf' : {'var': 0x68, 'start': 8, 'size': 2, 'param_function': signed_tile_offset, 'value_function': value_equals(1)}, 'nearby_tile_original_gfx' : {'var': 0x68, 'start': 8, 'size': 2, 'param_function': signed_tile_offset, 'value_function': value_equals(2)}, @@ -835,6 +850,7 @@ def industry_cargotype(name, args, pos, info): 'nearby_tile_stop_type' : {'var': 0x68, 'start': 16, 'size': 4, 'param_function': signed_tile_offset}, 'nearby_tile_same_stop_type' : {'var': 0x68, 'start': 20, 'size': 1, 'param_function': signed_tile_offset}, 'nearby_tile_grfid' : {'var': 0x6A, 'start': 0, 'size': 32, 'param_function': signed_tile_offset}, + 'nearby_tile_road_stop_id' : {'var': 0x6B, 'start': 0, 'size': 16, 'param_function': signed_tile_offset}, } class VarAct2Scope: diff --git a/regression/040_station.nml b/regression/040_station.nml index 7458d5b2..65c3b2e9 100644 --- a/regression/040_station.nml +++ b/regression/040_station.nml @@ -115,7 +115,7 @@ item (FEAT_STATIONS, basic_station, 255) { } graphics { foundations: 0; - prepare_layout: [STORE_TEMP(0,0), STORE_TEMP(1,1)]; + prepare_layout: [STORE_TEMP(0,nearby_tile_station_id(-1,2)), STORE_TEMP(1,1)]; purchase_prepare_layout: STORE_TEMP(3,3); sprite_layouts: [ station_sprite_layout_0, diff --git a/regression/expected/040_station.grf b/regression/expected/040_station.grf index c04740a6ec5e54012ee0cf8e876171f6f6aeaec3..8244397377fdde1a5a399e538fd6723317498c0b 100644 GIT binary patch delta 153 zcmeysd6A2ofx$hYMa5LKrYyV J%|=Z7m;ke0EK&df delta 48 ycmcb}^?{R{fx$h