diff --git a/data/json/furniture_and_terrain/furniture-flora.json b/data/json/furniture_and_terrain/furniture-flora.json index 4425462930a52..84d30ce3ebe85 100644 --- a/data/json/furniture_and_terrain/furniture-flora.json +++ b/data/json/furniture_and_terrain/furniture-flora.json @@ -420,6 +420,7 @@ "move_cost_mod": 3, "coverage": 50, "required_str": -1, + "connect_groups": "WOODFENCE", "connects_to": "WOODFENCE", "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", "SHRUB", "PERMEABLE" ], "bash": { @@ -445,6 +446,7 @@ "move_cost_mod": -1, "coverage": 90, "required_str": 14, + "connect_groups": "WOODFENCE", "connects_to": "WOODFENCE", "flags": [ "FLAMMABLE_ASH", "SHRUB", "PERMEABLE", "BLOCK_WIND", "NOITEM" ], "bash": { diff --git a/data/json/furniture_and_terrain/furniture-plumbing.json b/data/json/furniture_and_terrain/furniture-plumbing.json index 8f67e52364b4b..a8ac5d8ff7a1e 100644 --- a/data/json/furniture_and_terrain/furniture-plumbing.json +++ b/data/json/furniture_and_terrain/furniture-plumbing.json @@ -64,6 +64,7 @@ "coverage": 60, "required_str": -1, "flags": [ "TRANSPARENT", "FLAMMABLE_HARD", "CONTAINER", "PLACE_ITEM", "MOUNTABLE" ], + "connect_groups": "COUNTER", "connects_to": "COUNTER", "rotates_to": "INDOORFLOOR", "bash": { diff --git a/data/json/furniture_and_terrain/furniture-surfaces.json b/data/json/furniture_and_terrain/furniture-surfaces.json index 2855260ae2346..a39fb34a63320 100644 --- a/data/json/furniture_and_terrain/furniture-surfaces.json +++ b/data/json/furniture_and_terrain/furniture-surfaces.json @@ -10,6 +10,7 @@ "coverage": 60, "required_str": 10, "flags": [ "TRANSPARENT", "FLAMMABLE", "ORGANIC", "MOUNTABLE", "SHORT", "FLAT_SURF" ], + "connect_groups": "COUNTER", "connects_to": "COUNTER", "deconstruct": { "items": [ { "item": "2x4", "count": 4 }, { "item": "wood_panel", "count": 1 }, { "item": "nail", "charges": [ 6, 10 ] } ] @@ -36,6 +37,7 @@ "coverage": 55, "required_str": -1, "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", "CONTAINER", "PLACE_ITEM", "ORGANIC", "MOUNTABLE", "FLAT_SURF" ], + "connect_groups": "COUNTER", "connects_to": "COUNTER", "rotates_to": "INDOORFLOOR", "deconstruct": { @@ -68,6 +70,7 @@ "required_str": 4, "coverage": 60, "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", "DOOR", "ORGANIC" ], + "connect_groups": "COUNTER", "connects_to": "COUNTER", "open": "f_counter_gate_o", "crafting_pseudo_item": "medium_surface_pseudo", @@ -89,8 +92,9 @@ "color": "blue", "move_cost_mod": 2, "required_str": 4, - "connects_to": "COUNTER", "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", "FLAT", "ROAD", "ORGANIC" ], + "connect_groups": "COUNTER", + "connects_to": "COUNTER", "close": "f_counter_gate_c", "deconstruct": { "items": [ { "item": "2x4", "count": 4 }, { "item": "wood_panel", "count": 1 }, { "item": "nail", "charges": 10 } ] }, "bash": { diff --git a/data/json/furniture_and_terrain/furniture-terrains.json b/data/json/furniture_and_terrain/furniture-terrains.json index 77238d3839a68..db3784b3278e7 100644 --- a/data/json/furniture_and_terrain/furniture-terrains.json +++ b/data/json/furniture_and_terrain/furniture-terrains.json @@ -353,6 +353,7 @@ "coverage": 95, "required_str": -1, "flags": [ "FLAMMABLE_HARD", "NOITEM", "BLOCK_WIND", "SUN_ROOF_ABOVE" ], + "connect_groups": "CANVAS_WALL", "connects_to": "CANVAS_WALL", "bash": { "str_min": 1, @@ -374,6 +375,7 @@ "coverage": 95, "required_str": -1, "flags": [ "FLAMMABLE_HARD", "NOITEM", "BLOCK_WIND", "SUN_ROOF_ABOVE" ], + "connect_groups": "CANVAS_WALL", "connects_to": "CANVAS_WALL", "bash": { "str_min": 1, @@ -396,8 +398,9 @@ "coverage": 95, "required_str": -1, "flags": [ "FLAMMABLE_HARD", "NOITEM", "DOOR", "BLOCK_WIND", "SUN_ROOF_ABOVE" ], - "open": "f_canvas_door_o", + "connect_groups": "CANVAS_WALL", "connects_to": "CANVAS_WALL", + "open": "f_canvas_door_o", "bash": { "str_min": 1, "str_max": 8, @@ -417,8 +420,9 @@ "move_cost_mod": 0, "required_str": -1, "flags": [ "TRANSPARENT" ], - "close": "f_canvas_door", + "connect_groups": "CANVAS_WALL", "connects_to": "CANVAS_WALL", + "close": "f_canvas_door", "bash": { "str_min": 1, "str_max": 8, @@ -439,8 +443,9 @@ "coverage": 95, "required_str": -1, "flags": [ "FLAMMABLE_HARD", "NOITEM", "DOOR", "BLOCK_WIND", "SUN_ROOF_ABOVE" ], - "open": "f_large_canvas_door_o", + "connect_groups": "CANVAS_WALL", "connects_to": "CANVAS_WALL", + "open": "f_large_canvas_door_o", "bash": { "str_min": 1, "str_max": 8, @@ -461,8 +466,9 @@ "move_cost_mod": 0, "required_str": -1, "flags": [ "TRANSPARENT" ], - "close": "f_large_canvas_door", + "connect_groups": "CANVAS_WALL", "connects_to": "CANVAS_WALL", + "close": "f_large_canvas_door", "bash": { "str_min": 1, "str_max": 8, @@ -568,6 +574,7 @@ "coverage": 95, "required_str": -1, "flags": [ "FLAMMABLE_HARD", "NOITEM", "BLOCK_WIND", "SUN_ROOF_ABOVE" ], + "connect_groups": "CANVAS_WALL", "connects_to": "CANVAS_WALL", "bash": { "str_min": 1, @@ -589,8 +596,9 @@ "coverage": 95, "required_str": -1, "flags": [ "FLAMMABLE_HARD", "NOITEM", "BLOCK_WIND", "SUN_ROOF_ABOVE" ], - "open": "f_skin_door_o", + "connect_groups": "CANVAS_WALL", "connects_to": "CANVAS_WALL", + "open": "f_skin_door_o", "bash": { "str_min": 1, "str_max": 8, @@ -610,8 +618,9 @@ "move_cost_mod": 0, "required_str": -1, "flags": [ "TRANSPARENT" ], - "close": "f_skin_door", + "connect_groups": "CANVAS_WALL", "connects_to": "CANVAS_WALL", + "close": "f_skin_door", "bash": { "str_min": 1, "str_max": 8, diff --git a/data/json/furniture_and_terrain/furniture-tools.json b/data/json/furniture_and_terrain/furniture-tools.json index 5c3488d6de402..b711282e45833 100644 --- a/data/json/furniture_and_terrain/furniture-tools.json +++ b/data/json/furniture_and_terrain/furniture-tools.json @@ -11,6 +11,7 @@ "coverage": 50, "required_str": -1, "flags": [ "TRANSPARENT", "NOITEM", "INDOORS", "SHORT", "PERMEABLE" ], + "connect_groups": "COUNTER", "connects_to": "COUNTER", "deconstruct": { "furn_set": "f_counter", @@ -60,6 +61,7 @@ "required_str": -1, "light_emitted": 10, "flags": [ "TRANSPARENT", "CONSOLE", "NOITEM", "INDOORS", "SHORT", "PERMEABLE" ], + "connect_groups": "COUNTER", "connects_to": "COUNTER", "deconstruct": { "furn_set": "f_counter", diff --git a/data/json/furniture_and_terrain/terrain-bridges-docks.json b/data/json/furniture_and_terrain/terrain-bridges-docks.json index 51dba14dcd7fe..1dd23542df063 100644 --- a/data/json/furniture_and_terrain/terrain-bridges-docks.json +++ b/data/json/furniture_and_terrain/terrain-bridges-docks.json @@ -164,13 +164,14 @@ "type": "terrain", "id": "t_pavement_bg_dp", "name": "bridge pavement", - "connects_to": "PAVEMENT", "description": "A bridge section made out of concrete and metal.", "looks_like": "t_pavement", "symbol": ".", "color": "dark_gray", "move_cost": 2, "flags": [ "TRANSPARENT", "FLAT", "ROAD", "MINEABLE" ], + "connect_groups": "PAVEMENT", + "connects_to": "PAVEMENT", "bash": { "str_min": 70, "str_max": 300, @@ -184,13 +185,14 @@ "type": "terrain", "id": "t_pavement_y_bg_dp", "name": "bridge yellow pavement", - "connects_to": "PAVEMENT", "description": "A bridge section made out of concrete and metal. It's painted yellow.", "looks_like": "t_pavement_y", "symbol": ".", "color": "yellow", "move_cost": 2, "flags": [ "TRANSPARENT", "FLAT", "ROAD", "MINEABLE" ], + "connect_groups": "PAVEMENT", + "connects_to": "PAVEMENT", "bash": { "str_min": 70, "str_max": 300, diff --git a/data/json/furniture_and_terrain/terrain-doors.json b/data/json/furniture_and_terrain/terrain-doors.json index ab6f9466c3beb..06a73a2d0ca90 100644 --- a/data/json/furniture_and_terrain/terrain-doors.json +++ b/data/json/furniture_and_terrain/terrain-doors.json @@ -9,7 +9,7 @@ "move_cost": 0, "looks_like": "t_reinforced_door_glass_c", "roof": "t_flat_roof", - "flags": [ "TRANSPARENT", "DOOR", "NOITEM", "CONNECT_TO_WALL", "MINEABLE", "BLOCK_WIND", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "DOOR", "NOITEM", "CONNECT_WITH_WALL", "MINEABLE", "BLOCK_WIND", "SUPPORTS_ROOF" ], "open": "t_laminated_door_glass_o", "bash": { "str_min": 100, @@ -33,7 +33,7 @@ "move_cost": 2, "looks_like": "t_reinforced_door_glass_o", "roof": "t_flat_roof", - "flags": [ "TRANSPARENT", "FLAT", "CONNECT_TO_WALL", "ROAD", "MINEABLE", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "FLAT", "CONNECT_WITH_WALL", "ROAD", "MINEABLE", "SUPPORTS_ROOF" ], "close": "t_laminated_door_glass_c", "bash": { "str_min": 100, @@ -56,7 +56,7 @@ "move_cost": 0, "looks_like": "t_reinforced_door_glass_c", "roof": "t_flat_roof", - "flags": [ "TRANSPARENT", "DOOR", "NOITEM", "CONNECT_TO_WALL", "MINEABLE", "BLOCK_WIND", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "DOOR", "NOITEM", "CONNECT_WITH_WALL", "MINEABLE", "BLOCK_WIND", "SUPPORTS_ROOF" ], "open": "t_ballistic_door_glass_o", "bash": { "str_min": 200, @@ -85,7 +85,7 @@ "move_cost": 2, "looks_like": "t_reinforced_door_glass_o", "roof": "t_flat_roof", - "flags": [ "TRANSPARENT", "FLAT", "CONNECT_TO_WALL", "ROAD", "MINEABLE", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "FLAT", "CONNECT_WITH_WALL", "ROAD", "MINEABLE", "SUPPORTS_ROOF" ], "close": "t_ballistic_door_glass_c", "bash": { "str_min": 200, @@ -108,7 +108,7 @@ "color": "light_cyan", "move_cost": 0, "roof": "t_flat_roof", - "flags": [ "TRANSPARENT", "DOOR", "NOITEM", "CONNECT_TO_WALL", "MINEABLE", "BLOCK_WIND", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "DOOR", "NOITEM", "CONNECT_WITH_WALL", "MINEABLE", "BLOCK_WIND", "SUPPORTS_ROOF" ], "open": "t_reinforced_door_glass_o", "bash": { "str_min": 40, @@ -141,7 +141,7 @@ "color": "light_cyan", "move_cost": 0, "roof": "t_flat_roof", - "flags": [ "TRANSPARENT", "DOOR", "NOITEM", "CONNECT_TO_WALL", "MINEABLE", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "DOOR", "NOITEM", "CONNECT_WITH_WALL", "MINEABLE", "SUPPORTS_ROOF" ], "open": "t_reinforced_door_glass_lab_o", "bash": { "str_min": 40, @@ -174,7 +174,7 @@ "color": "light_cyan", "move_cost": 2, "roof": "t_flat_roof", - "flags": [ "TRANSPARENT", "FLAT", "CONNECT_TO_WALL", "ROAD", "MINEABLE", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "FLAT", "CONNECT_WITH_WALL", "ROAD", "MINEABLE", "SUPPORTS_ROOF" ], "close": "t_reinforced_door_glass_c", "bash": { "str_min": 40, @@ -201,7 +201,7 @@ "color": "light_cyan", "move_cost": 2, "roof": "t_flat_roof", - "flags": [ "TRANSPARENT", "FLAT", "CONNECT_TO_WALL", "ROAD", "MINEABLE", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "FLAT", "CONNECT_WITH_WALL", "ROAD", "MINEABLE", "SUPPORTS_ROOF" ], "close": "t_reinforced_door_glass_lab_c", "bash": { "str_min": 40, @@ -228,7 +228,7 @@ "move_cost": 0, "coverage": 95, "roof": "t_wood_roof", - "flags": [ "FLAMMABLE_ASH", "DOOR", "NOITEM", "BARRICADABLE_DOOR", "CONNECT_TO_WALL", "BLOCK_WIND", "SUPPORTS_ROOF" ], + "flags": [ "FLAMMABLE_ASH", "DOOR", "NOITEM", "BARRICADABLE_DOOR", "CONNECT_WITH_WALL", "BLOCK_WIND", "SUPPORTS_ROOF" ], "open": "t_door_o", "deconstruct": { "ter_set": "t_door_frame", @@ -268,7 +268,7 @@ "move_cost": 0, "coverage": 95, "roof": "t_wood_roof", - "flags": [ "FLAMMABLE_ASH", "DOOR", "NOITEM", "BARRICADABLE_DOOR", "CONNECT_TO_WALL", "SUPPORTS_ROOF" ], + "flags": [ "FLAMMABLE_ASH", "DOOR", "NOITEM", "BARRICADABLE_DOOR", "CONNECT_WITH_WALL", "SUPPORTS_ROOF" ], "open": "t_door_lab_o", "deconstruct": { "ter_set": "t_door_lab_frame", @@ -307,7 +307,7 @@ "move_cost": 0, "coverage": 95, "roof": "t_wood_roof", - "flags": [ "FLAMMABLE_ASH", "DOOR", "NOITEM", "BARRICADABLE_DOOR", "CONNECT_TO_WALL", "SUPPORTS_ROOF" ], + "flags": [ "FLAMMABLE_ASH", "DOOR", "NOITEM", "BARRICADABLE_DOOR", "CONNECT_WITH_WALL", "SUPPORTS_ROOF" ], "open": "t_door_white_o", "deconstruct": { "ter_set": "t_door_white_frame", @@ -346,7 +346,7 @@ "move_cost": 0, "coverage": 95, "roof": "t_wood_roof", - "flags": [ "FLAMMABLE_ASH", "DOOR", "NOITEM", "BARRICADABLE_DOOR", "CONNECT_TO_WALL", "SUPPORTS_ROOF" ], + "flags": [ "FLAMMABLE_ASH", "DOOR", "NOITEM", "BARRICADABLE_DOOR", "CONNECT_WITH_WALL", "SUPPORTS_ROOF" ], "open": "t_door_gray_o", "deconstruct": { "ter_set": "t_door_gray_frame", @@ -385,7 +385,7 @@ "move_cost": 0, "coverage": 95, "roof": "t_wood_roof", - "flags": [ "FLAMMABLE_ASH", "DOOR", "NOITEM", "BARRICADABLE_DOOR", "CONNECT_TO_WALL", "SUPPORTS_ROOF" ], + "flags": [ "FLAMMABLE_ASH", "DOOR", "NOITEM", "BARRICADABLE_DOOR", "CONNECT_WITH_WALL", "SUPPORTS_ROOF" ], "open": "t_door_red_o", "deconstruct": { "ter_set": "t_door_red_frame", @@ -424,7 +424,7 @@ "move_cost": 0, "coverage": 95, "roof": "t_wood_roof", - "flags": [ "FLAMMABLE_ASH", "DOOR", "NOITEM", "BARRICADABLE_DOOR", "CONNECT_TO_WALL", "SUPPORTS_ROOF" ], + "flags": [ "FLAMMABLE_ASH", "DOOR", "NOITEM", "BARRICADABLE_DOOR", "CONNECT_WITH_WALL", "SUPPORTS_ROOF" ], "open": "t_door_green_o", "deconstruct": { "ter_set": "t_door_green_frame", @@ -462,7 +462,7 @@ "color": "brown", "move_cost": 2, "roof": "t_wood_roof", - "flags": [ "FLAMMABLE_ASH", "TRANSPARENT", "FLAT", "BARRICADABLE_DOOR", "CONNECT_TO_WALL", "ROAD", "SUPPORTS_ROOF" ], + "flags": [ "FLAMMABLE_ASH", "TRANSPARENT", "FLAT", "BARRICADABLE_DOOR", "CONNECT_WITH_WALL", "ROAD", "SUPPORTS_ROOF" ], "deconstruct": { "ter_set": "t_door_white_frame", "items": [ @@ -499,7 +499,7 @@ "color": "brown", "move_cost": 2, "roof": "t_wood_roof", - "flags": [ "FLAMMABLE_ASH", "TRANSPARENT", "FLAT", "BARRICADABLE_DOOR", "CONNECT_TO_WALL", "ROAD", "SUPPORTS_ROOF" ], + "flags": [ "FLAMMABLE_ASH", "TRANSPARENT", "FLAT", "BARRICADABLE_DOOR", "CONNECT_WITH_WALL", "ROAD", "SUPPORTS_ROOF" ], "deconstruct": { "ter_set": "t_door_gray_frame", "items": [ @@ -536,7 +536,7 @@ "color": "brown", "move_cost": 2, "roof": "t_wood_roof", - "flags": [ "FLAMMABLE_ASH", "TRANSPARENT", "FLAT", "BARRICADABLE_DOOR", "CONNECT_TO_WALL", "ROAD", "SUPPORTS_ROOF" ], + "flags": [ "FLAMMABLE_ASH", "TRANSPARENT", "FLAT", "BARRICADABLE_DOOR", "CONNECT_WITH_WALL", "ROAD", "SUPPORTS_ROOF" ], "deconstruct": { "ter_set": "t_door_red_frame", "items": [ @@ -573,7 +573,7 @@ "color": "brown", "move_cost": 2, "roof": "t_wood_roof", - "flags": [ "FLAMMABLE_ASH", "TRANSPARENT", "FLAT", "BARRICADABLE_DOOR", "CONNECT_TO_WALL", "ROAD", "SUPPORTS_ROOF" ], + "flags": [ "FLAMMABLE_ASH", "TRANSPARENT", "FLAT", "BARRICADABLE_DOOR", "CONNECT_WITH_WALL", "ROAD", "SUPPORTS_ROOF" ], "deconstruct": { "ter_set": "t_door_green_frame", "items": [ @@ -618,7 +618,7 @@ "REDUCE_SCENT", "BARRICADABLE_DOOR_DAMAGED", "PERMEABLE", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "SUPPORTS_ROOF" ], "bash": { @@ -656,7 +656,7 @@ "REDUCE_SCENT", "BARRICADABLE_DOOR_DAMAGED", "PERMEABLE", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "SUPPORTS_ROOF" ], "bash": { @@ -694,7 +694,7 @@ "REDUCE_SCENT", "BARRICADABLE_DOOR_DAMAGED", "PERMEABLE", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "SUPPORTS_ROOF" ], "bash": { @@ -732,7 +732,7 @@ "REDUCE_SCENT", "BARRICADABLE_DOOR_DAMAGED", "PERMEABLE", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "SUPPORTS_ROOF" ], "bash": { @@ -761,7 +761,7 @@ "looks_like": "t_door_frame", "color": "brown", "move_cost": 2, - "flags": [ "TRANSPARENT", "FLAT", "CONNECT_TO_WALL", "ROAD", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "FLAT", "CONNECT_WITH_WALL", "ROAD", "SUPPORTS_ROOF" ], "bash": { "str_min": 6, "str_max": 25, @@ -785,7 +785,7 @@ "looks_like": "t_door_frame", "color": "brown", "move_cost": 2, - "flags": [ "TRANSPARENT", "FLAT", "CONNECT_TO_WALL", "ROAD", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "FLAT", "CONNECT_WITH_WALL", "ROAD", "SUPPORTS_ROOF" ], "bash": { "str_min": 6, "str_max": 25, @@ -809,7 +809,7 @@ "looks_like": "t_door_frame", "color": "brown", "move_cost": 2, - "flags": [ "TRANSPARENT", "FLAT", "CONNECT_TO_WALL", "ROAD", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "FLAT", "CONNECT_WITH_WALL", "ROAD", "SUPPORTS_ROOF" ], "bash": { "str_min": 6, "str_max": 25, @@ -833,7 +833,7 @@ "looks_like": "t_door_frame", "color": "brown", "move_cost": 2, - "flags": [ "TRANSPARENT", "FLAT", "CONNECT_TO_WALL", "ROAD", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "FLAT", "CONNECT_WITH_WALL", "ROAD", "SUPPORTS_ROOF" ], "bash": { "str_min": 6, "str_max": 25, @@ -858,7 +858,7 @@ "color": "light_cyan", "move_cost": 0, "roof": "t_flat_roof", - "flags": [ "TRANSPARENT", "DOOR", "NOITEM", "CONNECT_TO_WALL", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "DOOR", "NOITEM", "CONNECT_WITH_WALL", "SUPPORTS_ROOF" ], "open": "t_door_glass_red_o", "deconstruct": { "ter_set": "t_door_red_frame", "items": [ { "item": "glass_sheet", "count": 1 } ] }, "bash": { @@ -883,7 +883,7 @@ "color": "light_cyan", "move_cost": 0, "roof": "t_flat_roof", - "flags": [ "TRANSPARENT", "DOOR", "NOITEM", "CONNECT_TO_WALL", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "DOOR", "NOITEM", "CONNECT_WITH_WALL", "SUPPORTS_ROOF" ], "open": "t_door_glass_green_o", "deconstruct": { "ter_set": "t_door_green_frame", "items": [ { "item": "glass_sheet", "count": 1 } ] }, "bash": { @@ -908,7 +908,7 @@ "color": "light_cyan", "move_cost": 0, "roof": "t_flat_roof", - "flags": [ "TRANSPARENT", "DOOR", "NOITEM", "CONNECT_TO_WALL", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "DOOR", "NOITEM", "CONNECT_WITH_WALL", "SUPPORTS_ROOF" ], "open": "t_door_glass_white_o", "deconstruct": { "ter_set": "t_door_white_frame", "items": [ { "item": "glass_sheet", "count": 1 } ] }, "bash": { @@ -933,7 +933,7 @@ "color": "light_cyan", "move_cost": 0, "roof": "t_flat_roof", - "flags": [ "TRANSPARENT", "DOOR", "NOITEM", "CONNECT_TO_WALL", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "DOOR", "NOITEM", "CONNECT_WITH_WALL", "SUPPORTS_ROOF" ], "open": "t_door_glass_gray_o", "deconstruct": { "ter_set": "t_door_gray_frame", "items": [ { "item": "glass_sheet", "count": 1 } ] }, "bash": { @@ -958,7 +958,7 @@ "color": "light_cyan", "move_cost": 2, "roof": "t_flat_roof", - "flags": [ "TRANSPARENT", "FLAT", "CONNECT_TO_WALL", "ROAD", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "FLAT", "CONNECT_WITH_WALL", "ROAD", "SUPPORTS_ROOF" ], "close": "t_door_glass_red_c", "deconstruct": { "ter_set": "t_door_red_frame", "items": [ { "item": "glass_sheet", "count": 1 } ] }, "bash": { @@ -983,7 +983,7 @@ "color": "light_cyan", "move_cost": 2, "roof": "t_flat_roof", - "flags": [ "TRANSPARENT", "FLAT", "CONNECT_TO_WALL", "ROAD", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "FLAT", "CONNECT_WITH_WALL", "ROAD", "SUPPORTS_ROOF" ], "close": "t_door_glass_green_c", "deconstruct": { "ter_set": "t_door_green_frame", "items": [ { "item": "glass_sheet", "count": 1 } ] }, "bash": { @@ -1007,7 +1007,7 @@ "color": "light_cyan", "move_cost": 2, "roof": "t_flat_roof", - "flags": [ "TRANSPARENT", "FLAT", "CONNECT_TO_WALL", "ROAD", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "FLAT", "CONNECT_WITH_WALL", "ROAD", "SUPPORTS_ROOF" ], "close": "t_door_glass_white_c", "deconstruct": { "ter_set": "t_door_white_frame", "items": [ { "item": "glass_sheet", "count": 1 } ] }, "bash": { @@ -1031,7 +1031,7 @@ "color": "light_cyan", "move_cost": 2, "roof": "t_flat_roof", - "flags": [ "TRANSPARENT", "FLAT", "CONNECT_TO_WALL", "ROAD", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "FLAT", "CONNECT_WITH_WALL", "ROAD", "SUPPORTS_ROOF" ], "close": "t_door_glass_gray_c", "deconstruct": { "ter_set": "t_door_gray_frame", "items": [ { "item": "glass_sheet", "count": 1 } ] }, "bash": { @@ -1056,7 +1056,7 @@ "move_cost": 0, "coverage": 95, "roof": "t_wood_roof", - "flags": [ "FLAMMABLE_ASH", "DOOR", "NOITEM", "BARRICADABLE_DOOR", "CONNECT_TO_WALL", "BLOCK_WIND", "SUPPORTS_ROOF" ], + "flags": [ "FLAMMABLE_ASH", "DOOR", "NOITEM", "BARRICADABLE_DOOR", "CONNECT_WITH_WALL", "BLOCK_WIND", "SUPPORTS_ROOF" ], "examine_action": "door_peephole", "open": "t_door_o_peep", "deconstruct": { @@ -1104,7 +1104,7 @@ "REDUCE_SCENT", "BARRICADABLE_DOOR_DAMAGED", "PERMEABLE", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "SUPPORTS_ROOF" ], "bash": { @@ -1142,7 +1142,7 @@ "REDUCE_SCENT", "BARRICADABLE_DOOR_DAMAGED", "PERMEABLE", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "SUPPORTS_ROOF" ], "bash": { @@ -1181,7 +1181,7 @@ "REDUCE_SCENT", "BARRICADABLE_DOOR_DAMAGED", "PERMEABLE", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "SUPPORTS_ROOF" ], "bash": { @@ -1211,7 +1211,7 @@ "color": "brown", "move_cost": 2, "roof": "t_wood_roof", - "flags": [ "FLAMMABLE_ASH", "TRANSPARENT", "FLAT", "BARRICADABLE_DOOR", "CONNECT_TO_WALL", "ROAD", "SUPPORTS_ROOF" ], + "flags": [ "FLAMMABLE_ASH", "TRANSPARENT", "FLAT", "BARRICADABLE_DOOR", "CONNECT_WITH_WALL", "ROAD", "SUPPORTS_ROOF" ], "deconstruct": { "ter_set": "t_door_frame", "items": [ @@ -1248,7 +1248,7 @@ "color": "brown", "move_cost": 2, "roof": "t_wood_roof", - "flags": [ "FLAMMABLE_ASH", "TRANSPARENT", "FLAT", "BARRICADABLE_DOOR", "CONNECT_TO_WALL", "ROAD", "SUPPORTS_ROOF" ], + "flags": [ "FLAMMABLE_ASH", "TRANSPARENT", "FLAT", "BARRICADABLE_DOOR", "CONNECT_WITH_WALL", "ROAD", "SUPPORTS_ROOF" ], "deconstruct": { "ter_set": "t_door_lab_frame", "items": [ @@ -1284,7 +1284,7 @@ "color": "brown", "move_cost": 2, "roof": "t_wood_roof", - "flags": [ "FLAMMABLE_ASH", "TRANSPARENT", "FLAT", "BARRICADABLE_DOOR", "CONNECT_TO_WALL", "ROAD", "SUPPORTS_ROOF" ], + "flags": [ "FLAMMABLE_ASH", "TRANSPARENT", "FLAT", "BARRICADABLE_DOOR", "CONNECT_WITH_WALL", "ROAD", "SUPPORTS_ROOF" ], "deconstruct": { "ter_set": "t_door_frame", "items": [ @@ -1324,7 +1324,15 @@ "move_cost": 0, "coverage": 100, "roof": "t_wood_roof", - "flags": [ "FLAMMABLE_ASH", "DOOR", "NOITEM", "BARRICADABLE_DOOR_REINFORCED", "CONNECT_TO_WALL", "BLOCK_WIND", "SUPPORTS_ROOF" ], + "flags": [ + "FLAMMABLE_ASH", + "DOOR", + "NOITEM", + "BARRICADABLE_DOOR_REINFORCED", + "CONNECT_WITH_WALL", + "BLOCK_WIND", + "SUPPORTS_ROOF" + ], "open": "t_rdoor_o", "deconstruct": { "ter_set": "t_door_c", @@ -1369,7 +1377,7 @@ "REDUCE_SCENT", "BARRICADABLE_DOOR_REINFORCED_DAMAGED", "PERMEABLE", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "SUPPORTS_ROOF" ], "bash": { @@ -1399,7 +1407,7 @@ "color": "red", "move_cost": 2, "roof": "t_wood_roof", - "flags": [ "FLAMMABLE_ASH", "TRANSPARENT", "FLAT", "BARRICADABLE_DOOR_REINFORCED", "CONNECT_TO_WALL", "ROAD", "SUPPORTS_ROOF" ], + "flags": [ "FLAMMABLE_ASH", "TRANSPARENT", "FLAT", "BARRICADABLE_DOOR_REINFORCED", "CONNECT_WITH_WALL", "ROAD", "SUPPORTS_ROOF" ], "deconstruct": { "ter_set": "t_door_c", "items": [ @@ -1443,7 +1451,7 @@ "FLAMMABLE_ASH", "NOITEM", "REDUCE_SCENT", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BARRICADABLE_DOOR", "LOCKED", "BLOCK_WIND", @@ -1491,7 +1499,7 @@ "NOITEM", "OPENCLOSE_INSIDE", "REDUCE_SCENT", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BARRICADABLE_DOOR", "LOCKED", "PICKABLE", @@ -1540,7 +1548,7 @@ "NOITEM", "OPENCLOSE_INSIDE", "REDUCE_SCENT", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BARRICADABLE_DOOR", "LOCKED", "PICKABLE", @@ -1589,7 +1597,7 @@ "ALARMED", "NOITEM", "REDUCE_SCENT", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BARRICADABLE_DOOR", "LOCKED", "BLOCK_WIND", @@ -1630,7 +1638,7 @@ "move_cost": 0, "coverage": 95, "roof": "t_wood_roof", - "flags": [ "FLAMMABLE_ASH", "DOOR", "NOITEM", "CONNECT_TO_WALL", "EASY_DECONSTRUCT", "SUPPORTS_ROOF" ], + "flags": [ "FLAMMABLE_ASH", "DOOR", "NOITEM", "CONNECT_WITH_WALL", "EASY_DECONSTRUCT", "SUPPORTS_ROOF" ], "open": "t_door_curtain_o", "deconstruct": { "ter_set": "t_dirt", @@ -1663,7 +1671,7 @@ "move_cost": 0, "coverage": 95, "roof": "t_wood_roof", - "flags": [ "FLAMMABLE_ASH", "DOOR", "NOITEM", "CONNECT_TO_WALL", "EASY_DECONSTRUCT", "BLOCK_WIND", "SUPPORTS_ROOF" ], + "flags": [ "FLAMMABLE_ASH", "DOOR", "NOITEM", "CONNECT_WITH_WALL", "EASY_DECONSTRUCT", "BLOCK_WIND", "SUPPORTS_ROOF" ], "open": "t_door_makeshift_o", "deconstruct": { "ter_set": "t_door_frame", "items": [ { "item": "2x4", "count": 6 }, { "item": "rope_makeshift_6", "count": 2 } ] }, "bash": { @@ -1692,7 +1700,7 @@ "color": "dark_gray", "move_cost": 2, "roof": "t_wood_roof", - "flags": [ "FLAMMABLE_ASH", "TRANSPARENT", "FLAT", "CONNECT_TO_WALL", "ROAD", "EASY_DECONSTRUCT", "SUPPORTS_ROOF" ], + "flags": [ "FLAMMABLE_ASH", "TRANSPARENT", "FLAT", "CONNECT_WITH_WALL", "ROAD", "EASY_DECONSTRUCT", "SUPPORTS_ROOF" ], "deconstruct": { "ter_set": "t_dirt", "items": [ { "item": "stick", "count": 1 }, { "item": "sheet", "count": 2 }, { "item": "withered", "count": 12 } ] @@ -1725,7 +1733,7 @@ "move_cost": 0, "coverage": 95, "roof": "t_wood_roof", - "flags": [ "FLAMMABLE_ASH", "DOOR", "NOITEM", "CONNECT_TO_WALL", "EASY_DECONSTRUCT", "SUPPORTS_ROOF" ], + "flags": [ "FLAMMABLE_ASH", "DOOR", "NOITEM", "CONNECT_WITH_WALL", "EASY_DECONSTRUCT", "SUPPORTS_ROOF" ], "open": "t_door_grass_curtain_o", "deconstruct": { "ter_set": "t_dirt", @@ -1757,7 +1765,7 @@ "color": "dark_gray", "move_cost": 2, "roof": "t_wood_roof", - "flags": [ "FLAMMABLE_ASH", "TRANSPARENT", "FLAT", "CONNECT_TO_WALL", "ROAD", "EASY_DECONSTRUCT", "SUPPORTS_ROOF" ], + "flags": [ "FLAMMABLE_ASH", "TRANSPARENT", "FLAT", "CONNECT_WITH_WALL", "ROAD", "EASY_DECONSTRUCT", "SUPPORTS_ROOF" ], "deconstruct": { "ter_set": "t_dirt", "items": [ { "item": "stick", "count": 1 }, { "item": "grass_sheet", "count": 2 }, { "item": "cordage_6", "count": 6 } ] @@ -1789,7 +1797,7 @@ "color": "brown", "move_cost": 2, "roof": "t_wood_roof", - "flags": [ "FLAMMABLE_ASH", "TRANSPARENT", "FLAT", "CONNECT_TO_WALL", "ROAD", "EASY_DECONSTRUCT", "SUPPORTS_ROOF" ], + "flags": [ "FLAMMABLE_ASH", "TRANSPARENT", "FLAT", "CONNECT_WITH_WALL", "ROAD", "EASY_DECONSTRUCT", "SUPPORTS_ROOF" ], "deconstruct": { "ter_set": "t_door_frame", "items": [ { "item": "2x4", "count": 6 }, { "item": "rope_makeshift_6", "count": 2 } ] }, "close": "t_door_makeshift_c", "bash": { @@ -1817,7 +1825,7 @@ "looks_like": "t_floor", "color": "brown", "move_cost": 2, - "flags": [ "TRANSPARENT", "FLAT", "CONNECT_TO_WALL", "ROAD", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "FLAT", "CONNECT_WITH_WALL", "ROAD", "SUPPORTS_ROOF" ], "bash": { "str_min": 6, "str_max": 25, @@ -1841,7 +1849,7 @@ "looks_like": "t_door_frame", "color": "brown", "move_cost": 2, - "flags": [ "TRANSPARENT", "FLAT", "CONNECT_TO_WALL", "ROAD", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "FLAT", "CONNECT_WITH_WALL", "ROAD", "SUPPORTS_ROOF" ], "bash": { "str_min": 6, "str_max": 25, @@ -1865,7 +1873,7 @@ "looks_like": "t_door_frame", "color": "dark_gray", "move_cost": 2, - "flags": [ "TRANSPARENT", "FLAT", "CONNECT_TO_WALL", "ROAD", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "FLAT", "CONNECT_WITH_WALL", "ROAD", "SUPPORTS_ROOF" ], "bash": { "str_min": 18, "str_max": 75, @@ -1884,7 +1892,7 @@ "looks_like": "t_mdoor_frame", "color": "dark_gray", "move_cost": 2, - "flags": [ "TRANSPARENT", "FLAT", "CONNECT_TO_WALL", "ROAD", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "FLAT", "CONNECT_WITH_WALL", "ROAD", "SUPPORTS_ROOF" ], "bash": { "str_min": 18, "str_max": 75, @@ -1904,7 +1912,7 @@ "color": "dark_gray", "move_cost": 2, "roof": "t_metal_roof", - "flags": [ "TRANSPARENT", "FLAT", "CONNECT_TO_WALL", "ROAD", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "FLAT", "CONNECT_WITH_WALL", "ROAD", "SUPPORTS_ROOF" ], "bash": { "str_min": 18, "str_max": 75, @@ -2143,7 +2151,7 @@ "move_cost": 0, "coverage": 95, "roof": "t_metal_roof", - "flags": [ "NOITEM", "DOOR", "CONNECT_TO_WALL", "BLOCK_WIND", "SUPPORTS_ROOF" ], + "flags": [ "NOITEM", "DOOR", "CONNECT_WITH_WALL", "BLOCK_WIND", "SUPPORTS_ROOF" ], "open": "t_door_metal_o", "oxytorch": { "result": "t_mdoor_frame", @@ -2174,7 +2182,7 @@ "move_cost": 0, "coverage": 95, "roof": "t_metal_flat_roof", - "flags": [ "NOITEM", "DOOR", "CONNECT_TO_WALL", "BLOCK_WIND", "SUPPORTS_ROOF" ], + "flags": [ "NOITEM", "DOOR", "CONNECT_WITH_WALL", "BLOCK_WIND", "SUPPORTS_ROOF" ], "open": "t_door_metal_corrugated_o", "bash": { "str_min": 30, @@ -2199,7 +2207,7 @@ "color": "cyan", "move_cost": 0, "roof": "t_metal_floor", - "flags": [ "NOITEM", "DOOR", "CONNECT_TO_WALL", "AUTO_WALL_SYMBOL", "SUPPORTS_ROOF" ], + "flags": [ "NOITEM", "DOOR", "CONNECT_WITH_WALL", "AUTO_WALL_SYMBOL", "SUPPORTS_ROOF" ], "open": "t_secretdoor_metal_o", "bash": { "str_min": 80, @@ -2220,7 +2228,7 @@ "color": "cyan", "move_cost": 2, "roof": "t_metal_floor", - "flags": [ "TRANSPARENT", "FLAT", "CONNECT_TO_WALL", "ROAD", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "FLAT", "CONNECT_WITH_WALL", "ROAD", "SUPPORTS_ROOF" ], "close": "t_secretdoor_metal_c", "bash": { "str_min": 80, @@ -2241,7 +2249,7 @@ "color": "light_gray", "move_cost": 0, "roof": "t_metal_floor", - "flags": [ "NOITEM", "DOOR", "CONNECT_TO_WALL", "AUTO_WALL_SYMBOL", "SUPPORTS_ROOF" ], + "flags": [ "NOITEM", "DOOR", "CONNECT_WITH_WALL", "AUTO_WALL_SYMBOL", "SUPPORTS_ROOF" ], "open": "t_secretdoor_concrete_o", "bash": { "str_min": 80, @@ -2268,7 +2276,7 @@ "symbol": "'", "color": "light_gray", "move_cost": 2, - "flags": [ "TRANSPARENT", "FLAT", "CONNECT_TO_WALL", "ROAD", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "FLAT", "CONNECT_WITH_WALL", "ROAD", "SUPPORTS_ROOF" ], "close": "t_secretdoor_concrete_c", "bash": { "str_min": 80, @@ -2297,7 +2305,7 @@ "move_cost": 0, "coverage": 95, "roof": "t_metal_roof", - "flags": [ "NOITEM", "DOOR", "CONNECT_TO_WALL", "SUPPORTS_ROOF" ], + "flags": [ "NOITEM", "DOOR", "CONNECT_WITH_WALL", "SUPPORTS_ROOF" ], "open": "t_door_metal_lab_o", "bash": { "str_min": 80, @@ -2322,7 +2330,7 @@ "color": "cyan", "move_cost": 2, "roof": "t_metal_roof", - "flags": [ "TRANSPARENT", "FLAT", "CONNECT_TO_WALL", "ROAD", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "FLAT", "CONNECT_WITH_WALL", "ROAD", "SUPPORTS_ROOF" ], "close": "t_door_metal_c", "bash": { "str_min": 80, @@ -2347,7 +2355,7 @@ "color": "cyan", "move_cost": 2, "roof": "t_metal_flat_roof", - "flags": [ "TRANSPARENT", "FLAT", "CONNECT_TO_WALL", "ROAD", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "FLAT", "CONNECT_WITH_WALL", "ROAD", "SUPPORTS_ROOF" ], "close": "t_door_metal_corrugated_c", "bash": { "str_min": 30, @@ -2372,7 +2380,7 @@ "color": "cyan", "move_cost": 2, "roof": "t_metal_roof", - "flags": [ "TRANSPARENT", "FLAT", "CONNECT_TO_WALL", "ROAD", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "FLAT", "CONNECT_WITH_WALL", "ROAD", "SUPPORTS_ROOF" ], "close": "t_door_metal_lab_c", "bash": { "str_min": 80, @@ -2398,7 +2406,7 @@ "move_cost": 0, "coverage": 95, "roof": "t_metal_roof", - "flags": [ "NOITEM", "DOOR", "CONNECT_TO_WALL", "BLOCK_WIND", "SUPPORTS_ROOF" ], + "flags": [ "NOITEM", "DOOR", "CONNECT_WITH_WALL", "BLOCK_WIND", "SUPPORTS_ROOF" ], "open": "t_door_metal_o_peep", "examine_action": "door_peephole", "bash": { @@ -2425,7 +2433,7 @@ "color": "cyan", "move_cost": 2, "roof": "t_metal_roof", - "flags": [ "TRANSPARENT", "FLAT", "CONNECT_TO_WALL", "ROAD", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "FLAT", "CONNECT_WITH_WALL", "ROAD", "SUPPORTS_ROOF" ], "close": "t_door_metal_c_peep", "bash": { "str_min": 80, @@ -2453,7 +2461,7 @@ "move_cost": 0, "coverage": 95, "roof": "t_metal_roof", - "flags": [ "NOITEM", "REDUCE_SCENT", "CONNECT_TO_WALL", "LOCKED", "BLOCK_WIND", "SUPPORTS_ROOF" ], + "flags": [ "NOITEM", "REDUCE_SCENT", "CONNECT_WITH_WALL", "LOCKED", "BLOCK_WIND", "SUPPORTS_ROOF" ], "oxytorch": { "result": "t_mdoor_frame", "duration": "14 seconds", @@ -2486,7 +2494,7 @@ }, "symbol": "+", "color": "cyan", - "flags": [ "NOITEM", "REDUCE_SCENT", "CONNECT_TO_WALL", "LOCKED", "BLOCK_WIND", "PICKABLE", "SUPPORTS_ROOF" ] + "flags": [ "NOITEM", "REDUCE_SCENT", "CONNECT_WITH_WALL", "LOCKED", "BLOCK_WIND", "PICKABLE", "SUPPORTS_ROOF" ] }, { "type": "terrain", @@ -2502,7 +2510,16 @@ "lockpick_result": "t_door_metal_c", "lockpick_message": "With a satisfying click, the lock on the door opens.", "roof": "t_metal_roof", - "flags": [ "NOITEM", "REDUCE_SCENT", "OPENCLOSE_INSIDE", "CONNECT_TO_WALL", "LOCKED", "BLOCK_WIND", "PICKABLE", "SUPPORTS_ROOF" ], + "flags": [ + "NOITEM", + "REDUCE_SCENT", + "OPENCLOSE_INSIDE", + "CONNECT_WITH_WALL", + "LOCKED", + "BLOCK_WIND", + "PICKABLE", + "SUPPORTS_ROOF" + ], "open": "t_door_metal_o", "prying": { "result": "t_door_metal_o", @@ -2539,7 +2556,7 @@ "color": "cyan", "move_cost": 0, "roof": "t_metal_roof", - "flags": [ "TRANSPARENT", "NOITEM", "PERMEABLE", "CONNECT_TO_WALL", "THIN_OBSTACLE", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "NOITEM", "PERMEABLE", "CONNECT_WITH_WALL", "THIN_OBSTACLE", "SUPPORTS_ROOF" ], "hacksaw": { "result": "t_mdoor_frame", "duration": "15 minutes", @@ -2577,7 +2594,7 @@ "color": "cyan", "move_cost": 2, "roof": "t_metal_roof", - "flags": [ "TRANSPARENT", "FLAT", "CONNECT_TO_WALL", "ROAD", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "FLAT", "CONNECT_WITH_WALL", "ROAD", "SUPPORTS_ROOF" ], "close": "t_door_bar_c", "bash": { "str_min": 40, @@ -2613,7 +2630,7 @@ "message": "You finish cutting the metal.", "byproducts": [ { "item": "pipe", "count": 12 } ] }, - "flags": [ "TRANSPARENT", "NOITEM", "PERMEABLE", "CONNECT_TO_WALL", "LOCKED", "THIN_OBSTACLE", "PICKABLE", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "NOITEM", "PERMEABLE", "CONNECT_WITH_WALL", "LOCKED", "THIN_OBSTACLE", "PICKABLE", "SUPPORTS_ROOF" ], "examine_action": "locked_object_pickable", "oxytorch": { "result": "t_mdoor_frame", @@ -2645,7 +2662,7 @@ "color": "light_cyan", "move_cost": 0, "roof": "t_flat_roof", - "flags": [ "TRANSPARENT", "DOOR", "NOITEM", "CONNECT_TO_WALL", "BLOCK_WIND", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "DOOR", "NOITEM", "CONNECT_WITH_WALL", "BLOCK_WIND", "SUPPORTS_ROOF" ], "open": "t_door_glass_o", "deconstruct": { "ter_set": "t_door_frame", "items": [ { "item": "glass_sheet", "count": 1 } ] }, "bash": { @@ -2669,7 +2686,7 @@ "color": "light_cyan", "move_cost": 0, "roof": "t_flat_roof", - "flags": [ "TRANSPARENT", "DOOR", "NOITEM", "CONNECT_TO_WALL", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "DOOR", "NOITEM", "CONNECT_WITH_WALL", "SUPPORTS_ROOF" ], "open": "t_door_glass_lab_o", "deconstruct": { "ter_set": "t_door_frame", "items": [ { "item": "glass_sheet", "count": 1 } ] }, "bash": { @@ -2693,7 +2710,7 @@ "color": "light_cyan", "move_cost": 2, "roof": "t_flat_roof", - "flags": [ "TRANSPARENT", "FLAT", "CONNECT_TO_WALL", "ROAD", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "FLAT", "CONNECT_WITH_WALL", "ROAD", "SUPPORTS_ROOF" ], "close": "t_door_glass_c", "deconstruct": { "ter_set": "t_door_frame", "items": [ { "item": "glass_sheet", "count": 1 } ] }, "bash": { @@ -2717,7 +2734,7 @@ "color": "light_cyan", "move_cost": 2, "roof": "t_flat_roof", - "flags": [ "TRANSPARENT", "FLAT", "CONNECT_TO_WALL", "ROAD", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "FLAT", "CONNECT_WITH_WALL", "ROAD", "SUPPORTS_ROOF" ], "close": "t_door_glass_lab_c", "deconstruct": { "ter_set": "t_door_frame", "items": [ { "item": "glass_sheet", "count": 1 } ] }, "bash": { @@ -2739,7 +2756,7 @@ "symbol": "+", "looks_like": "t_door_glass_c", "color": "white", - "flags": [ "DOOR", "NOITEM", "CONNECT_TO_WALL", "BLOCK_WIND", "SUPPORTS_ROOF" ], + "flags": [ "DOOR", "NOITEM", "CONNECT_WITH_WALL", "BLOCK_WIND", "SUPPORTS_ROOF" ], "open": "t_door_glass_frosted_o", "copy-from": "t_door_glass_c" }, @@ -2751,7 +2768,7 @@ "symbol": "+", "looks_like": "t_door_glass_frosted_c", "color": "white", - "flags": [ "DOOR", "NOITEM", "CONNECT_TO_WALL", "SUPPORTS_ROOF" ], + "flags": [ "DOOR", "NOITEM", "CONNECT_WITH_WALL", "SUPPORTS_ROOF" ], "open": "t_door_glass_frosted_lab_o", "copy-from": "t_door_glass_frosted_c" }, @@ -2763,7 +2780,7 @@ "symbol": "'", "looks_like": "t_door_glass_o", "color": "white", - "flags": [ "TRANSPARENT", "FLAT", "CONNECT_TO_WALL", "ROAD", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "FLAT", "CONNECT_WITH_WALL", "ROAD", "SUPPORTS_ROOF" ], "close": "t_door_glass_frosted_c", "copy-from": "t_door_glass_o" }, @@ -2775,7 +2792,7 @@ "symbol": "'", "looks_like": "t_door_glass_frosted_o", "color": "white", - "flags": [ "TRANSPARENT", "FLAT", "CONNECT_TO_WALL", "ROAD", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "FLAT", "CONNECT_WITH_WALL", "ROAD", "SUPPORTS_ROOF" ], "close": "t_door_glass_frosted_lab_c", "copy-from": "t_door_glass_lab_o" }, @@ -2790,7 +2807,7 @@ "move_cost": 0, "coverage": 95, "roof": "t_metal_flat_roof", - "flags": [ "NOITEM", "DOOR", "CONNECT_TO_WALL", "BLOCK_WIND", "SUPPORTS_ROOF" ], + "flags": [ "NOITEM", "DOOR", "CONNECT_WITH_WALL", "BLOCK_WIND", "SUPPORTS_ROOF" ], "open": "t_door_metal_bulkhead_o", "bash": { "str_min": 80, @@ -2812,7 +2829,7 @@ "move_cost": 1, "coverage": 95, "roof": "t_metal_flat_roof", - "flags": [ "CONNECT_TO_WALL", "FLAT", "ROAD", "SUPPORTS_ROOF" ], + "flags": [ "CONNECT_WITH_WALL", "FLAT", "ROAD", "SUPPORTS_ROOF" ], "close": "t_door_metal_bulkhead_c", "bash": { "str_min": 80, diff --git a/data/json/furniture_and_terrain/terrain-embrasures.json b/data/json/furniture_and_terrain/terrain-embrasures.json index b49863ede7ee1..ac0d7a080a196 100644 --- a/data/json/furniture_and_terrain/terrain-embrasures.json +++ b/data/json/furniture_and_terrain/terrain-embrasures.json @@ -20,7 +20,6 @@ "TRANSPARENT", "THIN_OBSTACLE" ], - "connects_to": "WALL", "bash": { "str_min": 48, "str_max": 80, @@ -52,7 +51,6 @@ "TRANSPARENT", "THIN_OBSTACLE" ], - "connects_to": "WALL", "bash": { "str_min": 32, "str_max": 60, @@ -83,7 +81,6 @@ "TRANSPARENT", "THIN_OBSTACLE" ], - "connects_to": "WALL", "bash": { "str_min": 64, "str_max": 150, @@ -114,7 +111,6 @@ "TRANSPARENT", "THIN_OBSTACLE" ], - "connects_to": "WALL", "bash": { "str_min": 10, "str_max": 75, @@ -151,7 +147,6 @@ "TRANSPARENT", "THIN_OBSTACLE" ], - "connects_to": "WALL", "bash": { "str_min": 12, "str_max": 90, @@ -187,7 +182,6 @@ "TRANSPARENT", "THIN_OBSTACLE" ], - "connects_to": "WALL", "bash": { "str_min": 48, "str_max": 90, @@ -219,7 +213,6 @@ "TRANSPARENT", "THIN_OBSTACLE" ], - "connects_to": "WALL", "bash": { "str_min": 52, "str_max": 120, @@ -243,7 +236,7 @@ "FLAMMABLE", "NOITEM", "SUPPORTS_ROOF", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "WALL", "MOUNTABLE", "PERMEABLE", @@ -280,7 +273,6 @@ "TRANSPARENT", "THIN_OBSTACLE" ], - "connects_to": "WALL", "bash": { "str_min": 72, "str_max": 175, diff --git a/data/json/furniture_and_terrain/terrain-fences-gates.json b/data/json/furniture_and_terrain/terrain-fences-gates.json index b403fe11fe463..4e4c743791409 100644 --- a/data/json/furniture_and_terrain/terrain-fences-gates.json +++ b/data/json/furniture_and_terrain/terrain-fences-gates.json @@ -8,7 +8,7 @@ "color": "light_red", "move_cost": 0, "coverage": 55, - "flags": [ "FLAMMABLE", "NOITEM", "DOOR", "CONNECT_TO_WALL", "WALL", "REDUCE_SCENT", "BLOCK_WIND", "BURROWABLE" ], + "flags": [ "FLAMMABLE", "NOITEM", "DOOR", "WALL", "REDUCE_SCENT", "BLOCK_WIND", "BURROWABLE" ], "bash": { "str_min": 24, "str_max": 150, @@ -26,7 +26,7 @@ "symbol": ".", "color": "brown", "move_cost": 2, - "flags": [ "TRANSPARENT", "FLAMMABLE", "FLAT", "CONNECT_TO_WALL", "BURROWABLE" ], + "flags": [ "TRANSPARENT", "FLAMMABLE", "FLAT", "CONNECT_WITH_WALL", "BURROWABLE" ], "bash": { "str_min": 6, "str_max": 150, @@ -44,7 +44,7 @@ "symbol": "&", "color": "cyan", "move_cost": 0, - "flags": [ "TRANSPARENT", "NOITEM", "PERMEABLE", "CONNECT_TO_WALL", "MINEABLE", "BURROWABLE" ], + "flags": [ "TRANSPARENT", "NOITEM", "PERMEABLE", "CONNECT_WITH_WALL", "MINEABLE", "BURROWABLE" ], "bash": { "str_min": 60, "str_max": 210, @@ -73,6 +73,7 @@ "byproducts": [ { "item": "scrap", "count": 3 } ] }, "flags": [ "TRANSPARENT", "PERMEABLE", "LOCKED", "PICKABLE", "THIN_OBSTACLE", "BURROWABLE" ], + "connect_groups": "CHAINFENCE", "connects_to": "CHAINFENCE", "examine_action": "locked_object_pickable", "oxytorch": { @@ -106,6 +107,7 @@ "color": "cyan", "move_cost": 0, "flags": [ "TRANSPARENT", "DOOR", "PERMEABLE", "THIN_OBSTACLE", "BURROWABLE" ], + "connect_groups": "CHAINFENCE", "connects_to": "CHAINFENCE", "oxytorch": { "result": "t_dirt", @@ -143,6 +145,7 @@ "color": "cyan", "move_cost": 2, "flags": [ "TRANSPARENT", "FLAT", "ROAD", "BURROWABLE" ], + "connect_groups": "CHAINFENCE", "connects_to": "CHAINFENCE", "close": "t_chaingate_c", "oxytorch": { @@ -184,6 +187,7 @@ "byproducts": [ { "item": "chain", "count": [ 1, 2 ] }, { "item": "wire", "count": [ 8, 22 ] } ] }, "flags": [ "TRANSPARENT", "PERMEABLE", "LOCKED", "PICKABLE", "THIN_OBSTACLE" ], + "connect_groups": "WALL", "connects_to": "WALL", "examine_action": "locked_object_pickable", "lockpick_result": "t_retractable_gate_c", @@ -217,6 +221,7 @@ "color": "cyan", "move_cost": 0, "flags": [ "TRANSPARENT", "DOOR", "PERMEABLE", "THIN_OBSTACLE" ], + "connect_groups": "WALL", "connects_to": "WALL", "hacksaw": { "result": "t_strconc_floor", @@ -254,6 +259,7 @@ "color": "cyan", "move_cost": 2, "flags": [ "TRANSPARENT", "FLAT", "ROAD" ], + "connect_groups": "WALL", "connects_to": "WALL", "close": "t_retractable_gate_c", "bash": { @@ -279,6 +285,7 @@ "move_cost": 3, "coverage": 60, "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", "DOOR", "MOUNTABLE", "BURROWABLE" ], + "connect_groups": "WOODFENCE", "connects_to": "WOODFENCE", "open": "t_fencegate_o", "deconstruct": { @@ -315,6 +322,7 @@ "color": "brown", "move_cost": 2, "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", "FLAT", "ROAD", "BURROWABLE" ], + "connect_groups": "WOODFENCE", "connects_to": "WOODFENCE", "close": "t_fencegate_c", "deconstruct": { @@ -349,7 +357,7 @@ "color": "brown", "looks_like": "t_chickenwire_gate_c", "move_cost": 0, - "flags": [ "TRANSPARENT", "DOOR", "PERMEABLE", "BURROWABLE", "CONNECT_TO_WALL" ], + "flags": [ "TRANSPARENT", "DOOR", "PERMEABLE", "BURROWABLE", "CONNECT_WITH_WALL" ], "open": "t_screen_door_o", "deconstruct": { "ter_set": "t_floor", @@ -384,7 +392,7 @@ "color": "brown", "looks_like": "t_chickenwire_gate_o", "move_cost": 2, - "flags": [ "TRANSPARENT", "PERMEABLE", "BURROWABLE", "CONNECT_TO_WALL" ], + "flags": [ "TRANSPARENT", "PERMEABLE", "BURROWABLE", "CONNECT_WITH_WALL" ], "close": "t_screen_door_c", "deconstruct": { "ter_set": "t_floor", @@ -420,6 +428,7 @@ "looks_like": "t_chaingate_c", "move_cost": 0, "flags": [ "TRANSPARENT", "DOOR", "PERMEABLE", "BURROWABLE" ], + "connect_groups": "CHAINFENCE", "connects_to": "CHAINFENCE", "open": "t_chickenwire_gate_o", "deconstruct": { @@ -452,6 +461,7 @@ "looks_like": "t_chaingate_o", "move_cost": 2, "flags": [ "TRANSPARENT", "FLAT", "ROAD", "BURROWABLE" ], + "connect_groups": "CHAINFENCE", "connects_to": "CHAINFENCE", "close": "t_chickenwire_gate_c", "deconstruct": { @@ -493,6 +503,7 @@ "AUTO_WALL_SYMBOL", "BURROWABLE" ], + "connect_groups": "WOODFENCE", "connects_to": "WOODFENCE", "deconstruct": { "ter_set": "t_fence_post", "items": [ { "item": "2x4", "count": 5 }, { "item": "nail", "charges": 8 } ] }, "bash": { @@ -535,6 +546,7 @@ "AUTO_WALL_SYMBOL", "BURROWABLE" ], + "connect_groups": "WOODFENCE", "connects_to": "WOODFENCE", "deconstruct": { "ter_set": "t_fence_post", "items": [ { "item": "splinter", "count": 20 } ] }, "bash": { @@ -581,6 +593,7 @@ "byproducts": [ { "item": "wire", "count": 20 } ] }, "flags": [ "TRANSPARENT", "NOITEM", "THIN_OBSTACLE", "PERMEABLE", "UNSTABLE", "CLIMBABLE", "AUTO_WALL_SYMBOL", "BURROWABLE" ], + "connect_groups": "CHAINFENCE", "connects_to": "CHAINFENCE", "examine_action": "chainfence", "oxytorch": { @@ -643,6 +656,7 @@ "looks_like": "t_chainfence", "move_cost": 0, "flags": [ "TRANSPARENT", "NOITEM", "PERMEABLE", "AUTO_WALL_SYMBOL", "BURROWABLE", "CLIMBABLE" ], + "connect_groups": "CHAINFENCE", "connects_to": "CHAINFENCE", "examine_action": "chainfence", "deconstruct": { @@ -818,6 +832,7 @@ "AUTO_WALL_SYMBOL", "BURROWABLE" ], + "connect_groups": "WOODFENCE", "connects_to": "WOODFENCE", "deconstruct": { "ter_set": "t_fence_post", "items": [ { "item": "2x4", "count": 2 }, { "item": "nail", "charges": 20 } ] }, "bash": { @@ -840,6 +855,7 @@ "move_cost": 0, "coverage": 60, "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", "DOOR", "BURROWABLE" ], + "connect_groups": "WOODFENCE", "connects_to": "WOODFENCE", "open": "t_splitrail_fencegate_o", "deconstruct": { @@ -877,6 +893,7 @@ "looks_like": "t_fencegate_o", "move_cost": 2, "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", "FLAT", "ROAD", "BURROWABLE" ], + "connect_groups": "WOODFENCE", "connects_to": "WOODFENCE", "close": "t_splitrail_fencegate_c", "deconstruct": { @@ -916,6 +933,7 @@ "coverage": 60, "examine_action": "chainfence", "flags": [ "TRANSPARENT", "NOITEM", "THIN_OBSTACLE", "PERMEABLE", "CLIMBABLE", "AUTO_WALL_SYMBOL", "BURROWABLE" ], + "connect_groups": "WOODFENCE", "connects_to": "WOODFENCE", "deconstruct": { "ter_set": "t_floor", @@ -950,6 +968,7 @@ "move_cost": 0, "coverage": 60, "flags": [ "TRANSPARENT", "DOOR", "BURROWABLE" ], + "connect_groups": "WOODFENCE", "connects_to": "WOODFENCE", "open": "t_gate_metal_o", "deconstruct": { @@ -989,6 +1008,7 @@ "move_cost": 2, "coverage": 60, "flags": [ "TRANSPARENT", "BURROWABLE", "FLAT", "ROAD" ], + "connect_groups": "WOODFENCE", "connects_to": "WOODFENCE", "close": "t_gate_metal_c", "deconstruct": { @@ -1029,6 +1049,7 @@ "move_cost": 0, "examine_action": "chainfence", "flags": [ "NOITEM", "CLIMBABLE", "PERMEABLE", "AUTO_WALL_SYMBOL", "FLAMMABLE_ASH", "THIN_OBSTACLE", "BURROWABLE" ], + "connect_groups": "WOODFENCE", "connects_to": "WOODFENCE", "deconstruct": { "ter_set": "t_fence_post", "items": [ { "item": "2x4", "count": 8 }, { "item": "nail", "charges": 20 } ] }, "bash": { @@ -1051,6 +1072,7 @@ "move_cost": 0, "coverage": 60, "flags": [ "FLAMMABLE_ASH", "DOOR", "BURROWABLE" ], + "connect_groups": "WOODFENCE", "connects_to": "WOODFENCE", "open": "t_privacy_fencegate_o", "deconstruct": { @@ -1088,6 +1110,7 @@ "looks_like": "t_fencegate_o", "move_cost": 2, "flags": [ "FLAMMABLE_ASH", "FLAT", "ROAD", "BURROWABLE", "TRANSPARENT" ], + "connect_groups": "WOODFENCE", "connects_to": "WOODFENCE", "close": "t_privacy_fencegate_c", "deconstruct": { @@ -1125,6 +1148,7 @@ "color": "yellow", "move_cost": 3, "flags": [ "TRANSPARENT", "NOITEM", "THIN_OBSTACLE", "MOUNTABLE", "SHORT", "AUTO_WALL_SYMBOL", "BURROWABLE" ], + "connect_groups": "RAILING", "connects_to": "RAILING", "bash": { "str_min": 20, @@ -1150,6 +1174,7 @@ "color": "cyan", "move_cost": 3, "flags": [ "TRANSPARENT", "NOITEM", "THIN_OBSTACLE", "MOUNTABLE", "SHORT", "AUTO_WALL_SYMBOL", "BURROWABLE" ], + "connect_groups": "RAILING", "connects_to": "RAILING", "deconstruct": { "ter_set": "t_rock_floor", "items": [ { "item": "glass_sheet", "count": 2 }, { "item": "pipe", "count": 4 } ] }, "bash": { @@ -1175,6 +1200,7 @@ "color": "dark_gray", "move_cost": 3, "flags": [ "TRANSPARENT", "NOITEM", "THIN_OBSTACLE", "MOUNTABLE", "SHORT", "AUTO_WALL_SYMBOL", "BURROWABLE" ], + "connect_groups": "RAILING", "connects_to": "RAILING", "deconstruct": { "ter_set": "t_rock_floor", "items": [ { "item": "sheet_metal", "count": 2 }, { "item": "pipe", "count": 4 } ] }, "bash": { @@ -1201,6 +1227,7 @@ "looks_like": "t_ponywall", "move_cost": 3, "flags": [ "TRANSPARENT", "NOITEM", "THIN_OBSTACLE", "MOUNTABLE", "SHORT", "AUTO_WALL_SYMBOL", "MINEABLE", "BURROWABLE" ], + "connect_groups": "RAILING", "connects_to": "RAILING", "bash": { "str_min": 100, diff --git a/data/json/furniture_and_terrain/terrain-floors-indoor.json b/data/json/furniture_and_terrain/terrain-floors-indoor.json index c3634cc01218e..99bd21bbae548 100644 --- a/data/json/furniture_and_terrain/terrain-floors-indoor.json +++ b/data/json/furniture_and_terrain/terrain-floors-indoor.json @@ -6,10 +6,11 @@ "description": "A bare and cold concrete floor with matching roof, could still insulate from the outdoors but roof collapse is possible if supporting walls are broken down.", "symbol": ".", "color": "cyan", - "connects_to": "CONCRETE", "move_cost": 2, "roof": "t_concrete_roof", "flags": [ "TRANSPARENT", "SUPPORTS_ROOF", "COLLAPSES", "INDOORS", "FLAT", "ROAD" ], + "connect_groups": "CONCRETE", + "connects_to": "CONCRETE", "bash": { "sound": "SMASH!", "ter_set": "t_null", @@ -31,10 +32,11 @@ "symbol": ".", "color": "yellow", "looks_like": "t_pavement_y", - "connects_to": "CONCRETE", "move_cost": 2, "roof": "t_concrete_roof", "flags": [ "TRANSPARENT", "SUPPORTS_ROOF", "COLLAPSES", "INDOORS", "FLAT", "ROAD" ], + "connect_groups": "CONCRETE", + "connects_to": "CONCRETE", "bash": { "sound": "SMASH!", "ter_set": "t_null", @@ -55,9 +57,10 @@ "description": "A bare and cold concrete floor with a streak of red paint, could still insulate from the outdoors but roof collapse is possible if supporting walls are broken down.", "symbol": ".", "color": "red", - "connects_to": "CONCRETE", "looks_like": "t_floor_red", "flags": [ "TRANSPARENT", "SUPPORTS_ROOF", "COLLAPSES", "INDOORS", "FLAT", "ROAD" ], + "connect_groups": "CONCRETE", + "connects_to": "CONCRETE", "move_cost": 2, "roof": "t_concrete_roof", "copy-from": "t_thconc_floor" @@ -71,9 +74,10 @@ "color": "yellow", "light_emitted": 120, "looks_like": "t_thconc_y", - "connects_to": "CONCRETE", "move_cost": 2, "flags": [ "TRANSPARENT", "SUPPORTS_ROOF", "INDOORS", "FLAT", "ROAD" ], + "connect_groups": "CONCRETE", + "connects_to": "CONCRETE", "roof": "t_concrete_roof", "copy-from": "t_thconc_floor", "bash": { @@ -94,11 +98,12 @@ "description": "A bare and cold concrete floor with a still-functioning light attached to the ceiling above.", "symbol": ".", "color": "white", - "connects_to": "CONCRETE", "move_cost": 2, "light_emitted": 120, "roof": "t_concrete_roof", "flags": [ "TRANSPARENT", "SUPPORTS_ROOF", "INDOORS", "FLAT", "ROAD" ], + "connect_groups": "CONCRETE", + "connects_to": "CONCRETE", "bash": { "str_min": 4, "str_max": 12, @@ -118,6 +123,7 @@ "description": "Interlocking wooden tiles that are more than likely treated against fire, with a still-functioning light attached to the ceiling above.", "symbol": ".", "color": "white", + "connect_groups": "WOODFLOOR", "connects_to": "WOODFLOOR", "move_cost": 2, "light_emitted": 120, @@ -144,6 +150,7 @@ "description": "Floor consisting of finely mixed earth that has been tamped down, with a still-functioning light attached to the ceiling above.", "symbol": ".", "color": "brown", + "connect_groups": "DIRT", "connects_to": "DIRT", "move_cost": 2, "light_emitted": 120, @@ -170,6 +177,7 @@ "description": "High-quality and tough checkered flooring to reduce risk of slips and falls, with a still-functioning light attached to the ceiling above.", "symbol": ".", "color": "light_cyan", + "connect_groups": "METALFLOOR", "connects_to": "METALFLOOR", "move_cost": 2, "light_emitted": 120, @@ -196,12 +204,13 @@ "description": "Extremely resilient floor made from carefully placed rebar and poured concrete with a still-functioning light attached to the ceiling above.", "symbol": ".", "color": "white", - "connects_to": "CONCRETE", "move_cost": 2, "light_emitted": 120, "roof": "t_concrete_roof", "looks_like": "t_thconc_floor_olight", "flags": [ "TRANSPARENT", "SUPPORTS_ROOF", "INDOORS", "FLAT", "ROAD" ], + "connect_groups": "CONCRETE", + "connects_to": "CONCRETE", "bash": { "str_min": 4, "str_max": 12, @@ -220,6 +229,7 @@ "description": "Linoleum flooring with a still-functioning light attached to the ceiling above.", "symbol": ".", "color": "white", + "connect_groups": "LINOLEUM", "connects_to": "LINOLEUM", "move_cost": 2, "light_emitted": 120, @@ -244,6 +254,7 @@ "description": "Linoleum flooring with a still-functioning light attached to the ceiling above.", "symbol": ".", "color": "white", + "connect_groups": "LINOLEUM", "connects_to": "LINOLEUM", "move_cost": 2, "light_emitted": 120, @@ -286,6 +297,7 @@ "description": "Extremely resilient floor made from carefully placed rebar and poured concrete, capable of providing protection from the elements. As for the matching roof, it still requires supporting walls, otherwise it may very well cave in.", "symbol": ".", "color": "cyan", + "connect_groups": "CONCRETE", "connects_to": "CONCRETE", "move_cost": 2, "roof": "t_concrete_roof", @@ -311,6 +323,7 @@ "looks_like": "t_strconc_floor", "symbol": ".", "color": "cyan", + "connect_groups": "CONCRETE", "connects_to": "CONCRETE", "emissions": [ "emit_plasma_continuously" ], "move_cost": 2, @@ -377,6 +390,7 @@ "description": "A relatively flat area of rock and stone. Looks stable enough to be mined with the proper mining gear.", "symbol": ".", "color": "light_gray", + "connect_groups": "ROCKFLOOR", "connects_to": "ROCKFLOOR", "move_cost": 2, "roof": "t_rock_roof", @@ -390,6 +404,7 @@ "description": "A rough stone floor. Its patterns constantly shift as if your mind can't quite understand what it's really seeing.", "symbol": ".", "color": "magenta", + "connect_groups": "ROCKFLOOR", "connects_to": "ROCKFLOOR", "move_cost": 2, "roof": "t_warped_roof", @@ -402,6 +417,7 @@ "description": "High-quality and tough checkered flooring to reduce risk of slips and falls, with a matching roof.", "symbol": ".", "color": "light_cyan", + "connect_groups": "METALFLOOR", "connects_to": "METALFLOOR", "move_cost": 2, "roof": "t_metal_roof", @@ -449,6 +465,7 @@ "description": "Interlocking wooden tiles that are more than likely treated against fire, with wooden posts and beams supporting a roof.", "symbol": ".", "color": "cyan", + "connect_groups": "WOODFLOOR", "connects_to": "WOODFLOOR", "move_cost": 2, "comfort": 1, @@ -513,6 +530,7 @@ "description": "Hardwood flooring that has been treated with chemicals to improve slip resistance and sliding, commonly for recreational sports.", "symbol": ".", "color": "light_red", + "connect_groups": "WOODFLOOR", "connects_to": "WOODFLOOR", "move_cost": 2, "comfort": 1, @@ -534,6 +552,7 @@ "description": "Floor consisting of finely mixed earth that has been tamped down, with a wooden ceiling above it.", "symbol": ".", "color": "brown", + "connect_groups": "DIRT", "connects_to": "DIRT", "move_cost": 2, "roof": "t_shingle_flat_roof", @@ -555,6 +574,7 @@ "symbol": ".", "color": "brown", "looks_like": "t_dirtfloor", + "connect_groups": "DIRT", "connects_to": "DIRT", "move_cost": 2, "roof": "t_thatch_roof", @@ -585,6 +605,7 @@ "description": "An industrial flood light set up to illuminate the surroundings. Smashing it doesn't seem like it'd produce any worthwhile salvage.", "symbol": ".", "color": "white", + "connect_groups": "WOODFLOOR", "connects_to": "WOODFLOOR", "move_cost": 2, "roof": "t_flat_roof", @@ -678,6 +699,7 @@ "name": "carpet", "symbol": ".", "color": "red", + "connect_groups": "CARPET", "connects_to": "CARPET", "move_cost": 2, "roof": "t_flat_roof", @@ -753,6 +775,7 @@ "looks_like": "t_carpet_red", "symbol": ".", "color": "red", + "connect_groups": "CARPET", "connects_to": "CARPET", "move_cost": 2, "roof": "t_flat_roof", @@ -1311,6 +1334,7 @@ "description": "A section of flooring made out of a tough, rubbery material. Colored a simple white.", "symbol": ".", "color": "white", + "connect_groups": "LINOLEUM", "connects_to": "LINOLEUM", "move_cost": 2, "roof": "t_flat_roof", @@ -1332,6 +1356,7 @@ "description": "A section of flooring made out of a tough, gray, rubbery material.", "symbol": ".", "color": "light_gray", + "connect_groups": "LINOLEUM", "connects_to": "LINOLEUM", "move_cost": 2, "flags": [ "TRANSPARENT", "SUPPORTS_ROOF", "COLLAPSES", "INDOORS", "FLAT", "ROAD" ], @@ -1351,6 +1376,7 @@ "description": "This section of wax flooring has been painted.", "symbol": ".", "color": "yellow", + "connect_groups": "WOODFLOOR", "connects_to": "WOODFLOOR", "move_cost": 2, "roof": "t_flat_roof", @@ -1425,6 +1451,7 @@ "description": "It's dirt. Looks like some fine soil for tillage. Could also be dug out for construction projects.", "symbol": ".", "color": "brown", + "connect_groups": "DIRT", "connects_to": "DIRT", "move_cost": 2, "looks_like": "t_dirt", @@ -1441,6 +1468,7 @@ "symbol": ".", "color": "yellow", "looks_like": "t_sand", + "connect_groups": "SAND", "connects_to": "SAND", "move_cost": 3, "roof": "t_rock_roof", @@ -1483,6 +1511,7 @@ "description": "A field full of malleable clay, suitable for kiln firing if it was extracted properly.", "symbol": ".", "color": "light_red", + "connect_groups": "CLAY", "connects_to": "CLAY", "move_cost": 2, "roof": "t_rock_roof", @@ -1497,6 +1526,7 @@ "//": "for caverns and other natural underground formations.", "symbol": "#", "color": "brown", + "connect_groups": "CLAY", "connects_to": "CLAY", "move_cost": 5, "roof": "t_rock_roof", diff --git a/data/json/furniture_and_terrain/terrain-floors-outdoors.json b/data/json/furniture_and_terrain/terrain-floors-outdoors.json index 25dcea1973691..1aac4168c8a60 100644 --- a/data/json/furniture_and_terrain/terrain-floors-outdoors.json +++ b/data/json/furniture_and_terrain/terrain-floors-outdoors.json @@ -6,6 +6,7 @@ "description": "It's dirt. Looks like some fine soil for tillage. Could also be dug out for construction projects.", "symbol": ".", "color": "brown", + "connect_groups": "DIRT", "connects_to": "DIRT", "move_cost": 2, "flags": [ "TRANSPARENT", "DIGGABLE", "FLAT", "PLOWABLE" ], @@ -19,6 +20,7 @@ "symbol": ".", "color": "yellow", "move_cost": 3, + "connect_groups": "SAND", "connects_to": "SAND", "flags": [ "TRANSPARENT", "DIGGABLE", "FLAT" ], "bash": { "sound": "thump", "ter_set": "t_null", "str_min": 50, "str_max": 100, "str_min_supported": 100, "bash_below": true } @@ -42,6 +44,7 @@ "description": "A field full of malleable clay, suitable for kiln firing if it was extracted properly.", "symbol": ".", "color": "light_red", + "connect_groups": "CLAY", "connects_to": "CLAY", "move_cost": 2, "flags": [ "TRANSPARENT", "DIGGABLE", "FLAT" ], @@ -55,6 +58,7 @@ "looks_like": "t_dirtmound", "symbol": "#", "color": "brown", + "connect_groups": "CLAY", "connects_to": "CLAY", "move_cost": 5, "flags": [ "TRANSPARENT", "BURROWABLE" ], @@ -75,6 +79,7 @@ "looks_like": "t_dirtmound", "symbol": "#", "color": "brown", + "connect_groups": "SAND", "connects_to": "SAND", "move_cost": 5, "flags": [ "TRANSPARENT", "BURROWABLE" ], @@ -95,6 +100,7 @@ "looks_like": "t_sand", "symbol": "~", "color": "brown", + "connect_groups": "SAND", "connects_to": "SAND", "move_cost": 3, "flags": [ "TRANSPARENT", "DIGGABLE", "FLAT" ], @@ -107,6 +113,7 @@ "description": "An area of heaped dirt, not easily traversable. If examined more closely, it's quite favorable for planting seeds and the like.", "symbol": "#", "color": "brown", + "connect_groups": "DIRT", "connects_to": "DIRT", "move_cost": 3, "flags": [ "TRANSPARENT", "DIGGABLE", "MOUNTABLE", "NOCOLLIDE", "PLANTABLE" ], @@ -121,6 +128,7 @@ "looks_like": "t_dirtmound", "symbol": "#", "color": "brown", + "connect_groups": "DIRT", "connects_to": "DIRT", "move_cost": 3, "coverage": 40, @@ -193,6 +201,7 @@ "symbol": ".", "color": "light_gray", "looks_like": "t_rock_floor", + "connect_groups": "ROCKFLOOR", "connects_to": "ROCKFLOOR", "move_cost": 2, "roof": "t_open_air", @@ -207,6 +216,7 @@ "symbol": ".", "color": "dark_gray", "move_cost": 3, + "connect_groups": "MULCHFLOOR", "connects_to": "MULCHFLOOR", "flags": [ "TRANSPARENT", "DIGGABLE", "FLAT" ], "bash": { "sound": "thump", "ter_set": "t_null", "str_min": 50, "str_max": 100, "str_min_supported": 100, "bash_below": true } @@ -215,12 +225,12 @@ "type": "terrain", "id": "t_pavement", "name": "pavement", + "connect_groups": "PAVEMENT", "connects_to": "PAVEMENT", "description": "A segment of asphalt, slowly degrading from cracks, frost heaves and lack of maintenance.", "symbol": ".", "color": "dark_gray", "move_cost": 2, - "rotates_to_member": "PAVEMENT", "flags": [ "TRANSPARENT", "FLAT", "ROAD", "MINEABLE" ], "bash": { "ter_set": "t_null", @@ -234,7 +244,8 @@ "type": "terrain", "id": "t_pavement_y", "name": "yellow pavement", - "connects_to": "PAVEMENT", + "connect_groups": [ "PAVEMENT", "PAVEMENT_MARKING" ], + "connects_to": "PAVEMENT_MARKING", "description": "Streaks of carefully aligned yellow paint mark the road to inform drivers not to cross. No one is enforcing these rules anymore.", "symbol": ".", "color": "yellow", @@ -253,6 +264,7 @@ "id": "t_zebra", "alias": [ "t_zebra_h", "t_zebra_v" ], "name": "pedestrian crossing", + "connect_groups": "PAVEMENT", "connects_to": "PAVEMENT", "description": "White polymer lines painted on the pavement which indicate places where pedestrians should cross the road.", "symbol": ".", @@ -275,9 +287,10 @@ "symbol": ".", "color": "light_gray", "looks_like": "t_concrete", - "connects_to": "CONCRETE", "move_cost": 2, "flags": [ "TRANSPARENT", "FLAT", "ROAD", "MINEABLE" ], + "connect_groups": "CONCRETE", + "connects_to": "CONCRETE", "bash": { "ter_set": "t_null", "str_min": 50, @@ -294,9 +307,10 @@ "looks_like": "t_strconc_floor", "symbol": ".", "color": "cyan", - "connects_to": "CONCRETE", "move_cost": 2, "flags": [ "TRANSPARENT", "FLAT", "ROAD" ], + "connect_groups": "CONCRETE", + "connects_to": "CONCRETE", "bash": { "sound": "SMASH!", "ter_set": "t_null", @@ -318,9 +332,10 @@ "symbol": ".", "color": "light_gray", "looks_like": "t_pavement", - "connects_to": "CONCRETE", "move_cost": 2, "flags": [ "TRANSPARENT", "FLAT", "ROAD", "MINEABLE" ], + "connect_groups": "CONCRETE", + "connects_to": "CONCRETE", "bash": { "ter_set": "t_null", "str_min": 50, @@ -337,9 +352,10 @@ "symbol": ".", "color": "yellow", "looks_like": "t_pavement_y", - "connects_to": "CONCRETE", "move_cost": 2, "flags": [ "TRANSPARENT", "FLAT", "ROAD", "MINEABLE" ], + "connect_groups": "CONCRETE", + "connects_to": "CONCRETE", "bash": { "ter_set": "t_null", "str_min": 50, @@ -402,6 +418,7 @@ "description": "High-quality and tough checkered flooring to reduce risk of slips and falls.", "symbol": ".", "color": "light_cyan", + "connect_groups": "METALFLOOR", "connects_to": "METALFLOOR", "move_cost": 2, "flags": [ "TRANSPARENT", "FLAT", "ROAD" ], @@ -426,6 +443,7 @@ "description": "Metal gangway bridging a short gap. Sturdy enough to act as a floor, but not sufficient to support additional flooring.", "symbol": ".", "color": "light_cyan", + "connect_groups": "METALFLOOR", "connects_to": "METALFLOOR", "move_cost": 2, "flags": [ "TRANSPARENT", "FLAT", "ROAD" ], @@ -450,6 +468,7 @@ "description": "A section of flooring made out of a tough, rubbery material. Colored a simple white.", "symbol": ".", "color": "white", + "connect_groups": "LINOLEUM", "connects_to": "LINOLEUM", "move_cost": 2, "flags": [ "TRANSPARENT", "FLAMMABLE_HARD", "FLAT", "ROAD" ], @@ -470,6 +489,7 @@ "description": "A section of flooring made out of a tough, gray, rubbery material.", "symbol": ".", "color": "light_gray", + "connect_groups": "LINOLEUM", "connects_to": "LINOLEUM", "move_cost": 2, "flags": [ "TRANSPARENT", "FLAMMABLE_HARD", "FLAT", "ROAD" ], @@ -489,6 +509,7 @@ "description": "Floor consisting of finely mixed earth that has been tamped down.", "symbol": ".", "color": "brown", + "connect_groups": "DIRT", "connects_to": "DIRT", "move_cost": 2, "looks_like": "t_dirtfloor", @@ -535,6 +556,7 @@ "symbol": ".", "looks_like": "t_pavement", "color": "dark_gray", + "connect_groups": "METALFLOOR", "connects_to": "METALFLOOR", "move_cost": 2, "flags": [ "FLAT", "ROAD", "TRANSPARENT" ], diff --git a/data/json/furniture_and_terrain/terrain-highways.json b/data/json/furniture_and_terrain/terrain-highways.json index 574ce764355b2..d4322b543639a 100644 --- a/data/json/furniture_and_terrain/terrain-highways.json +++ b/data/json/furniture_and_terrain/terrain-highways.json @@ -3,6 +3,7 @@ "type": "terrain", "id": "t_pavement_hw_air", "name": "bridge pavement", + "connect_groups": "PAVEMENT", "connects_to": "PAVEMENT", "description": "A bridge section made out of concrete and metal.", "looks_like": "t_pavement", @@ -23,6 +24,7 @@ "type": "terrain", "id": "t_pavement_y_hw_air", "name": "bridge yellow pavement", + "connect_groups": "PAVEMENT", "connects_to": "PAVEMENT", "description": "A bridge section made out of concrete and metal. It's painted yellow.", "looks_like": "t_pavement_y", diff --git a/data/json/furniture_and_terrain/terrain-liquids.json b/data/json/furniture_and_terrain/terrain-liquids.json index e7c0e932a5d7b..e2fd0bf776707 100644 --- a/data/json/furniture_and_terrain/terrain-liquids.json +++ b/data/json/furniture_and_terrain/terrain-liquids.json @@ -8,6 +8,7 @@ "color": "light_blue", "move_cost": 5, "flags": [ "TRANSPARENT", "LIQUID", "NO_SCENT", "SWIMMABLE", "FISHABLE", "SHALLOW_WATER" ], + "connect_groups": "WATER", "connects_to": "WATER", "examine_action": "water_source" }, @@ -23,6 +24,7 @@ "move_cost": 5, "roof": "t_rock_roof", "flags": [ "TRANSPARENT", "LIQUID", "NO_SCENT", "SWIMMABLE", "FISHABLE", "INDOORS", "SHALLOW_WATER" ], + "connect_groups": "WATER", "connects_to": "WATER", "examine_action": "water_source" }, @@ -36,6 +38,7 @@ "color": "blue", "move_cost": 8, "flags": [ "TRANSPARENT", "LIQUID", "NO_SCENT", "SWIMMABLE", "DEEP_WATER", "FISHABLE" ], + "connect_groups": "WATER", "connects_to": "WATER", "examine_action": "water_source" }, @@ -51,6 +54,7 @@ "move_cost": 8, "roof": "t_rock_roof", "flags": [ "TRANSPARENT", "LIQUID", "NO_SCENT", "SWIMMABLE", "DEEP_WATER", "FISHABLE", "INDOORS" ], + "connect_groups": "WATER", "connects_to": "WATER", "examine_action": "water_source" }, @@ -64,6 +68,7 @@ "looks_like": "t_water_sh", "move_cost": 5, "flags": [ "TRANSPARENT", "LIQUID", "NO_SCENT", "SWIMMABLE", "FISHABLE", "SHALLOW_WATER", "MURKY" ], + "connect_groups": "WATER", "connects_to": "WATER", "examine_action": "water_source" }, @@ -79,6 +84,7 @@ "move_cost": 5, "roof": "t_rock_roof", "flags": [ "TRANSPARENT", "LIQUID", "NO_SCENT", "SWIMMABLE", "FISHABLE", "INDOORS", "SHALLOW_WATER", "MURKY" ], + "connect_groups": "WATER", "connects_to": "WATER", "examine_action": "water_source" }, @@ -92,6 +98,7 @@ "color": "light_blue", "move_cost": 6, "flags": [ "TRANSPARENT", "LIQUID", "NO_SCENT", "SWIMMABLE", "FISHABLE", "CURRENT", "SHALLOW_WATER" ], + "connect_groups": "WATER", "connects_to": "WATER", "examine_action": "water_source" }, @@ -107,6 +114,7 @@ "move_cost": 6, "roof": "t_rock_roof", "flags": [ "TRANSPARENT", "LIQUID", "NO_SCENT", "SWIMMABLE", "FISHABLE", "CURRENT", "INDOORS", "SHALLOW_WATER" ], + "connect_groups": "WATER", "connects_to": "WATER", "examine_action": "water_source" }, @@ -120,6 +128,7 @@ "color": "blue", "move_cost": 10, "flags": [ "TRANSPARENT", "LIQUID", "NO_SCENT", "SWIMMABLE", "DEEP_WATER", "FISHABLE", "CURRENT" ], + "connect_groups": "WATER", "connects_to": "WATER", "examine_action": "water_source" }, @@ -135,6 +144,7 @@ "move_cost": 10, "roof": "t_rock_roof", "flags": [ "TRANSPARENT", "LIQUID", "NO_SCENT", "SWIMMABLE", "DEEP_WATER", "FISHABLE", "CURRENT", "INDOORS" ], + "connect_groups": "WATER", "connects_to": "WATER", "examine_action": "water_source" }, @@ -148,6 +158,7 @@ "color": "light_blue", "move_cost": 5, "flags": [ "TRANSPARENT", "LIQUID", "NO_SCENT", "SWIMMABLE", "SALT_WATER", "FISHABLE", "SHALLOW_WATER" ], + "connect_groups": "WATER", "connects_to": "WATER", "examine_action": "water_source" }, @@ -163,6 +174,7 @@ "move_cost": 5, "roof": "t_rock_roof", "flags": [ "TRANSPARENT", "LIQUID", "NO_SCENT", "SWIMMABLE", "SALT_WATER", "FISHABLE", "INDOORS", "SHALLOW_WATER" ], + "connect_groups": "WATER", "connects_to": "WATER", "examine_action": "water_source" }, @@ -176,6 +188,7 @@ "color": "blue", "move_cost": 8, "flags": [ "TRANSPARENT", "LIQUID", "NO_SCENT", "SWIMMABLE", "SALT_WATER", "DEEP_WATER", "FISHABLE", "SHALLOW_WATER" ], + "connect_groups": "WATER", "connects_to": "WATER", "examine_action": "water_source" }, @@ -191,6 +204,7 @@ "move_cost": 8, "roof": "t_rock_roof", "flags": [ "TRANSPARENT", "LIQUID", "NO_SCENT", "SWIMMABLE", "SALT_WATER", "DEEP_WATER", "FISHABLE", "INDOORS" ], + "connect_groups": "WATER", "connects_to": "WATER", "examine_action": "water_source" }, @@ -204,6 +218,7 @@ "color": "light_blue", "move_cost": 5, "flags": [ "TRANSPARENT", "LIQUID", "NO_SCENT", "SWIMMABLE", "INDOORS", "DEEP_WATER" ], + "connect_groups": "POOLWATER", "connects_to": "POOLWATER", "examine_action": "water_source" }, @@ -217,6 +232,7 @@ "color": "light_blue", "move_cost": 5, "flags": [ "TRANSPARENT", "LIQUID", "NO_SCENT", "SWIMMABLE", "INDOORS", "SHALLOW_WATER" ], + "connect_groups": "POOLWATER", "connects_to": "POOLWATER", "examine_action": "water_source" }, @@ -230,6 +246,7 @@ "color": "light_blue", "move_cost": 5, "flags": [ "TRANSPARENT", "LIQUID", "NO_SCENT", "SWIMMABLE", "DEEP_WATER" ], + "connect_groups": "POOLWATER", "connects_to": "POOLWATER", "examine_action": "water_source" }, @@ -243,6 +260,7 @@ "color": "light_blue", "move_cost": 5, "flags": [ "TRANSPARENT", "LIQUID", "NO_SCENT", "SWIMMABLE", "SHALLOW_WATER" ], + "connect_groups": "POOLWATER", "connects_to": "POOLWATER", "examine_action": "water_source" }, @@ -282,6 +300,7 @@ "color": "blue", "move_cost": 8, "flags": [ "TRANSPARENT", "LIQUID", "NO_SCENT", "SWIMMABLE", "DEEP_WATER", "GOES_DOWN", "GOES_UP" ], + "connect_groups": "WATER", "connects_to": "WATER", "examine_action": "water_source" }, @@ -296,6 +315,7 @@ "color": "blue", "move_cost": 8, "flags": [ "TRANSPARENT", "LIQUID", "NO_SCENT", "SWIMMABLE", "DEEP_WATER", "GOES_UP" ], + "connect_groups": "WATER", "connects_to": "WATER", "examine_action": "water_source" }, @@ -310,6 +330,7 @@ "color": "blue", "move_cost": 8, "flags": [ "TRANSPARENT", "LIQUID", "NO_SCENT", "SWIMMABLE", "DEEP_WATER", "GOES_UP" ], + "connect_groups": "WATER", "connects_to": "WATER", "examine_action": "water_source" }, @@ -324,6 +345,7 @@ "color": "light_gray", "move_cost": 8, "flags": [ "TRANSPARENT", "LIQUID", "NO_SCENT", "SWIMMABLE", "DEEP_WATER", "GOES_UP", "MINEABLE" ], + "connect_groups": "WATER", "connects_to": "WATER", "examine_action": "water_source" }, @@ -369,6 +391,7 @@ "str_min_supported": 100, "items": [ { "item": "rock", "count": [ 2, 10 ] } ] }, + "connect_groups": "WATER", "connects_to": "WATER", "examine_action": "water_source" }, @@ -390,6 +413,7 @@ "str_min_supported": 100, "items": [ { "item": "rock", "count": [ 2, 10 ] } ] }, + "connect_groups": "WATER", "connects_to": "WATER", "examine_action": "water_source" }, @@ -403,6 +427,7 @@ "move_cost": 5, "heat_radiation": 1, "flags": [ "TRANSPARENT", "LIQUID", "NO_SCENT", "SWIMMABLE", "SHALLOW_WATER" ], + "connect_groups": "WATER", "connects_to": "WATER", "examine_action": "water_source" }, diff --git a/data/json/furniture_and_terrain/terrain-mechanisms.json b/data/json/furniture_and_terrain/terrain-mechanisms.json index 24b68ace47622..50228da697625 100644 --- a/data/json/furniture_and_terrain/terrain-mechanisms.json +++ b/data/json/furniture_and_terrain/terrain-mechanisms.json @@ -255,7 +255,7 @@ "symbol": "=", "color": "light_gray", "move_cost": 0, - "flags": [ "NOITEM", "CONNECT_TO_WALL" ], + "flags": [ "NOITEM", "CONNECT_WITH_WALL" ], "//": "For the player to chat with an NPC through the intercom, the npc must have 'name_unique': 'the_intercom' and must be within 10 tiles of the intercom.", "examine_action": "intercom", "bash": { @@ -277,7 +277,7 @@ "color": "pink", "move_cost": 0, "roof": "t_metal_roof", - "flags": [ "NOITEM", "CONNECT_TO_WALL" ], + "flags": [ "NOITEM", "CONNECT_WITH_WALL" ], "examine_action": "cardreader_robofac", "bash": { "str_min": 18, @@ -298,7 +298,7 @@ "color": "pink", "move_cost": 0, "roof": "t_metal_roof", - "flags": [ "NOITEM", "CONNECT_TO_WALL" ], + "flags": [ "NOITEM", "CONNECT_WITH_WALL" ], "examine_action": { "type": "cardreader", "flags": [ "SCIENCE_CARD" ], @@ -326,7 +326,7 @@ "color": "pink", "move_cost": 0, "roof": "t_metal_roof", - "flags": [ "NOITEM", "CONNECT_TO_WALL" ], + "flags": [ "NOITEM", "CONNECT_WITH_WALL" ], "examine_action": { "type": "cardreader", "flags": [ "MILITARY_CARD" ], @@ -355,7 +355,7 @@ "symbol": "6", "color": "pink", "move_cost": 0, - "flags": [ "NOITEM", "CONNECT_TO_WALL" ], + "flags": [ "NOITEM", "CONNECT_WITH_WALL" ], "examine_action": { "type": "cardreader", "flags": [ "INDUSTRIAL_CARD" ], @@ -384,7 +384,7 @@ "symbol": "6", "color": "pink", "move_cost": 0, - "flags": [ "NOITEM", "CONNECT_TO_WALL" ], + "flags": [ "NOITEM", "CONNECT_WITH_WALL" ], "examine_action": "cardreader_fp", "bash": { "str_min": 18, @@ -429,7 +429,7 @@ "color": "pink", "move_cost": 0, "roof": "t_metal_roof", - "flags": [ "NOITEM", "CONNECT_TO_WALL" ], + "flags": [ "NOITEM", "CONNECT_WITH_WALL" ], "examine_action": { "type": "cardreader", "flags": [ "COOP_CARD" ], @@ -720,7 +720,7 @@ "color": "light_gray", "move_cost": 0, "roof": "t_metal_roof", - "flags": [ "NOITEM", "CONNECT_TO_WALL", "MINEABLE" ], + "flags": [ "NOITEM", "CONNECT_WITH_WALL", "MINEABLE" ], "bash": { "str_min": 200, "str_max": 600, diff --git a/data/json/furniture_and_terrain/terrain-migo.json b/data/json/furniture_and_terrain/terrain-migo.json index 17a9f04ac41f4..c6f019ce78500 100644 --- a/data/json/furniture_and_terrain/terrain-migo.json +++ b/data/json/furniture_and_terrain/terrain-migo.json @@ -106,7 +106,7 @@ "move_cost": 0, "coverage": 95, "roof": "t_resin_roof", - "flags": [ "DOOR", "NOITEM", "CONNECT_TO_WALL", "BLOCK_WIND", "SUPPORTS_ROOF" ], + "flags": [ "DOOR", "NOITEM", "CONNECT_WITH_WALL", "BLOCK_WIND", "SUPPORTS_ROOF" ], "open": "t_resin_hole_o", "deconstruct": { "ter_set": "t_resin_hole", "items": [ { "item": "resin_chunk", "count": [ 2, 5 ] } ] }, "bash": { @@ -127,7 +127,7 @@ "color": "light_gray", "move_cost": 2, "roof": "t_resin_roof", - "flags": [ "TRANSPARENT", "FLAT", "CONNECT_TO_WALL", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "FLAT", "CONNECT_WITH_WALL", "SUPPORTS_ROOF" ], "deconstruct": { "ter_set": "t_resin_hole", "items": [ { "item": "resin_chunk", "count": [ 2, 5 ] } ] }, "close": "t_resin_hole_c", "bash": { @@ -148,7 +148,7 @@ "color": "light_gray", "move_cost": 4, "roof": "t_resin_roof", - "flags": [ "TRANSPARENT", "FLAT", "CONNECT_TO_WALL", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "FLAT", "CONNECT_WITH_WALL", "SUPPORTS_ROOF" ], "bash": { "str_min": 100, "str_max": 500, diff --git a/data/json/furniture_and_terrain/terrain-railroads.json b/data/json/furniture_and_terrain/terrain-railroads.json index 44ccd7e9dfa05..43d9503d0ef1e 100644 --- a/data/json/furniture_and_terrain/terrain-railroads.json +++ b/data/json/furniture_and_terrain/terrain-railroads.json @@ -54,6 +54,7 @@ { "item": "scrap", "count": [ 3, 12 ] } ] }, + "connect_groups": "RAIL", "connects_to": "RAIL", "flags": [ "RAIL", "TRANSPARENT" ] }, @@ -85,6 +86,7 @@ { "item": "scrap", "count": [ 3, 12 ] } ] }, + "connect_groups": "RAIL", "connects_to": "RAIL", "flags": [ "RAIL", "TRANSPARENT" ] }, @@ -116,6 +118,7 @@ { "item": "scrap", "count": [ 3, 12 ] } ] }, + "connect_groups": "RAIL", "connects_to": "RAIL", "flags": [ "RAIL", "TRANSPARENT" ] }, @@ -147,6 +150,7 @@ { "item": "scrap", "count": [ 3, 12 ] } ] }, + "connect_groups": "RAIL", "connects_to": "RAIL", "flags": [ "RAIL", "TRANSPARENT" ] }, @@ -178,6 +182,7 @@ { "item": "scrap", "count": [ 3, 12 ] } ] }, + "connect_groups": "RAIL", "connects_to": "RAIL", "flags": [ "RAIL", "TRANSPARENT" ] }, @@ -209,6 +214,7 @@ { "item": "scrap", "count": [ 3, 12 ] } ] }, + "connect_groups": "RAIL", "connects_to": "RAIL", "flags": [ "RAIL", "TRANSPARENT" ] }, @@ -232,6 +238,7 @@ "ter_set": "t_rock_floor", "items": [ { "item": "log", "count": [ 0, 1 ] }, { "item": "splinter", "count": [ 10, 20 ] } ] }, + "connect_groups": "RAIL", "connects_to": "RAIL", "flags": [ "TRANSPARENT" ] }, @@ -255,6 +262,7 @@ "ter_set": "t_rock_floor", "items": [ { "item": "log", "count": [ 0, 1 ] }, { "item": "splinter", "count": [ 10, 20 ] } ] }, + "connect_groups": "RAIL", "connects_to": "RAIL", "flags": [ "TRANSPARENT" ] }, @@ -278,6 +286,7 @@ "ter_set": "t_rock_floor", "items": [ { "item": "log", "count": [ 0, 1 ] }, { "item": "splinter", "count": [ 10, 20 ] } ] }, + "connect_groups": "RAIL", "connects_to": "RAIL", "flags": [ "TRANSPARENT" ] }, @@ -301,6 +310,7 @@ "ter_set": "t_rock_floor", "items": [ { "item": "log", "count": [ 0, 1 ] }, { "item": "splinter", "count": [ 10, 20 ] } ] }, + "connect_groups": "RAIL", "connects_to": "RAIL", "flags": [ "TRANSPARENT" ] }, @@ -335,6 +345,7 @@ { "item": "splinter", "count": [ 10, 20 ] } ] }, + "connect_groups": "RAIL", "connects_to": "RAIL", "flags": [ "RAIL", "TRANSPARENT" ] }, @@ -369,6 +380,7 @@ { "item": "splinter", "count": [ 10, 20 ] } ] }, + "connect_groups": "RAIL", "connects_to": "RAIL", "flags": [ "RAIL", "TRANSPARENT" ] }, @@ -403,6 +415,7 @@ { "item": "splinter", "count": [ 10, 20 ] } ] }, + "connect_groups": "RAIL", "connects_to": "RAIL", "flags": [ "RAIL", "TRANSPARENT" ] }, @@ -437,6 +450,7 @@ { "item": "splinter", "count": [ 10, 20 ] } ] }, + "connect_groups": "RAIL", "connects_to": "RAIL", "flags": [ "RAIL", "TRANSPARENT" ] }, @@ -478,6 +492,7 @@ "ter_set": "t_rock_floor", "items": [ { "item": "log", "count": [ 0, 1 ] }, { "item": "splinter", "count": [ 10, 20 ] } ] }, + "connect_groups": "RAIL", "connects_to": "RAIL", "flags": [ "TRANSPARENT" ] }, @@ -501,6 +516,7 @@ "ter_set": "t_rock_floor", "items": [ { "item": "log", "count": [ 0, 1 ] }, { "item": "splinter", "count": [ 10, 20 ] } ] }, + "connect_groups": "RAIL", "connects_to": "RAIL", "flags": [ "TRANSPARENT" ] }, @@ -599,6 +615,7 @@ { "item": "splinter", "count": [ 6, 12 ] } ] }, + "connect_groups": "RAIL", "connects_to": "RAIL", "flags": [ "RAIL", "TRANSPARENT" ] }, @@ -633,6 +650,7 @@ { "item": "splinter", "count": [ 6, 12 ] } ] }, + "connect_groups": "RAIL", "connects_to": "RAIL", "flags": [ "RAIL", "TRANSPARENT" ] } diff --git a/data/json/furniture_and_terrain/terrain-roofs.json b/data/json/furniture_and_terrain/terrain-roofs.json index 25f5b8bd7f649..d5b209f65809f 100644 --- a/data/json/furniture_and_terrain/terrain-roofs.json +++ b/data/json/furniture_and_terrain/terrain-roofs.json @@ -47,6 +47,7 @@ "color": "white", "move_cost": 3, "flags": [ "TRANSPARENT", "NOITEM", "THIN_OBSTACLE", "MOUNTABLE", "TINY", "AUTO_WALL_SYMBOL", "UNSTABLE" ], + "connect_groups": "RAILING", "connects_to": "RAILING", "deconstruct": { "ter_set": "t_flat_roof", @@ -71,6 +72,7 @@ "color": "white", "move_cost": 3, "flags": [ "TRANSPARENT", "NOITEM", "THIN_OBSTACLE", "MOUNTABLE", "TINY", "AUTO_WALL_SYMBOL", "UNSTABLE" ], + "connect_groups": "RAILING", "connects_to": "RAILING", "deconstruct": { "ter_set": "t_flat_roof", @@ -95,6 +97,7 @@ "color": "white", "move_cost": 3, "flags": [ "TRANSPARENT", "NOITEM", "THIN_OBSTACLE", "MOUNTABLE", "TINY", "AUTO_WALL_SYMBOL", "UNSTABLE" ], + "connect_groups": "RAILING", "connects_to": "RAILING", "deconstruct": { "ter_set": "t_flat_roof", @@ -119,6 +122,7 @@ "color": "white", "move_cost": 3, "flags": [ "TRANSPARENT", "NOITEM", "THIN_OBSTACLE", "MOUNTABLE", "TINY", "AUTO_WALL_SYMBOL", "UNSTABLE" ], + "connect_groups": "RAILING", "connects_to": "RAILING", "deconstruct": { "ter_set": "t_flat_roof", @@ -143,6 +147,7 @@ "color": "white", "move_cost": 3, "flags": [ "TRANSPARENT", "NOITEM", "THIN_OBSTACLE", "MOUNTABLE", "TINY", "AUTO_WALL_SYMBOL", "UNSTABLE", "CLIMBABLE" ], + "connect_groups": "RAILING", "connects_to": "RAILING", "deconstruct": { "ter_set": "t_flat_roof", diff --git a/data/json/furniture_and_terrain/terrain-traps.json b/data/json/furniture_and_terrain/terrain-traps.json index 8fc255026fa5b..2f8e991f1c771 100644 --- a/data/json/furniture_and_terrain/terrain-traps.json +++ b/data/json/furniture_and_terrain/terrain-traps.json @@ -28,6 +28,7 @@ "description": "A steep hole that could seriously injure something if it fell in, potentially fatal if it was filled with sharp and dangerous things. Deep enough for more advanced construction projects, and possibly to reach groundwater if constructed properly.", "symbol": "0", "color": "brown", + "connect_groups": "PIT_DEEP", "connects_to": "PIT_DEEP", "move_cost": 10, "trap": "tr_pit", @@ -54,6 +55,7 @@ "description": "A deep pit with a plank placed across it, looks sturdy enough to cross safely or the plank could be removed to turn it back into trap fall.", "symbol": "#", "color": "light_red", + "connect_groups": "PIT_DEEP", "connects_to": "PIT_DEEP", "move_cost": 2, "flags": [ "TRANSPARENT", "ROAD" ], @@ -67,6 +69,7 @@ "description": "A narrow trench full of very pointy things that would easily puncture a body.", "symbol": "0", "color": "light_red", + "connect_groups": "PIT_DEEP", "connects_to": "PIT_DEEP", "move_cost": 10, "trap": "tr_spike_pit", @@ -81,6 +84,7 @@ "description": "Menacing with sharp spears along the bottom, this pit has a plank across it to allow someone or something to cross safely. The plank could be removed to revert it back into a trap.", "symbol": "#", "color": "light_red", + "connect_groups": "PIT_DEEP", "connects_to": "PIT_DEEP", "move_cost": 2, "flags": [ "TRANSPARENT", "ROAD" ], @@ -94,6 +98,7 @@ "description": "Looks like a ton of broken glass was dumped into this pit, maybe not fatal to fall in but wouldn't be pleasant to try to crawl out.", "symbol": "0", "color": "light_cyan", + "connect_groups": "PIT_DEEP", "connects_to": "PIT_DEEP", "move_cost": 10, "trap": "tr_glass_pit", @@ -108,6 +113,7 @@ "description": "A plank has been placed carefully to allow traversal over this ditch full of large glass shards. The wooden board could be removed so it couldn't be safely crossed.", "symbol": "#", "color": "light_cyan", + "connect_groups": "PIT_DEEP", "connects_to": "PIT_DEEP", "move_cost": 2, "flags": [ "TRANSPARENT", "ROAD" ], diff --git a/data/json/furniture_and_terrain/terrain-triffid.json b/data/json/furniture_and_terrain/terrain-triffid.json index a83daa9fc00c7..0b979a7a22de6 100644 --- a/data/json/furniture_and_terrain/terrain-triffid.json +++ b/data/json/furniture_and_terrain/terrain-triffid.json @@ -10,7 +10,6 @@ "coverage": 100, "roof": "t_barkfloor", "flags": [ "FLAMMABLE", "NOITEM", "SUPPORTS_ROOF", "WALL", "NO_SCENT", "AUTO_WALL_SYMBOL", "MINEABLE", "BLOCK_WIND" ], - "connects_to": "WALL", "bash": { "str_min": 60, "str_max": 180, @@ -30,7 +29,6 @@ "move_cost": 0, "coverage": 100, "flags": [ "FLAMMABLE", "NOITEM", "SUPPORTS_ROOF", "WALL", "REDUCE_SCENT", "AUTO_WALL_SYMBOL", "MINEABLE", "BLOCK_WIND" ], - "connects_to": "WALL", "bash": { "str_min": 40, "str_max": 160, @@ -48,7 +46,7 @@ "symbol": "&", "color": "brown", "move_cost": 0, - "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", "NOITEM", "SUPPORTS_ROOF", "REDUCE_SCENT", "PERMEABLE", "CONNECT_TO_WALL" ], + "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", "NOITEM", "SUPPORTS_ROOF", "REDUCE_SCENT", "PERMEABLE", "CONNECT_WITH_WALL" ], "bash": { "str_min": 8, "str_max": 150, @@ -69,7 +67,6 @@ "coverage": 100, "roof": "t_barkfloor", "flags": [ "FLAMMABLE", "NOITEM", "SUPPORTS_ROOF", "WALL", "NO_SCENT", "AUTO_WALL_SYMBOL", "MINEABLE", "BLOCK_WIND" ], - "connects_to": "WALL", "bash": { "str_min": 80, "str_max": 180, @@ -133,6 +130,7 @@ "type": "terrain", "id": "t_triffid_slope_down", "name": "downward root slope", + "connect_groups": "PAVEMENT", "connects_to": "PAVEMENT", "description": "A downward-facing slope of root-covered dirt.", "symbol": ">", @@ -145,13 +143,14 @@ "type": "terrain", "id": "t_triffid_slope_up", "name": "upward root slope", - "connects_to": "WALL", "description": "An upward-facing slope of root-covered dirt.", "symbol": "<", "color": "brown", "roof": "t_barkfloor", "move_cost": 2, - "flags": [ "TRANSPARENT", "GOES_UP", "PLACE_ITEM", "SUPPORTS_ROOF" ] + "flags": [ "TRANSPARENT", "GOES_UP", "PLACE_ITEM", "SUPPORTS_ROOF" ], + "connect_groups": "WALL", + "connects_to": "WALL" }, { "type": "terrain", @@ -163,7 +162,7 @@ "move_cost": 0, "coverage": 95, "roof": "t_flat_roof", - "flags": [ "FLAMMABLE_ASH", "DOOR", "NOITEM", "BARRICADABLE_DOOR", "CONNECT_TO_WALL", "BLOCK_WIND" ], + "flags": [ "FLAMMABLE_ASH", "DOOR", "NOITEM", "BARRICADABLE_DOOR", "CONNECT_WITH_WALL", "BLOCK_WIND" ], "open": "t_bramble_door_o", "bash": { "str_min": 12, @@ -183,7 +182,7 @@ "color": "brown", "move_cost": 2, "roof": "t_flat_roof", - "flags": [ "FLAMMABLE_ASH", "TRANSPARENT", "FLAT", "BARRICADABLE_DOOR", "CONNECT_TO_WALL", "ROAD" ], + "flags": [ "FLAMMABLE_ASH", "TRANSPARENT", "FLAT", "BARRICADABLE_DOOR", "CONNECT_WITH_WALL", "ROAD" ], "close": "t_bramble_door_c", "bash": { "str_min": 12, diff --git a/data/json/furniture_and_terrain/terrain-walls.json b/data/json/furniture_and_terrain/terrain-walls.json index 601c0c34153a5..0712a941037ed 100644 --- a/data/json/furniture_and_terrain/terrain-walls.json +++ b/data/json/furniture_and_terrain/terrain-walls.json @@ -56,6 +56,7 @@ "move_cost": 4, "coverage": 60, "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", "NOITEM", "REDUCE_SCENT", "MOUNTABLE" ], + "connect_groups": "WALL", "connects_to": "WALL", "bash": { "str_min": 10, @@ -82,6 +83,7 @@ "color": "light_gray", "move_cost": 0, "coverage": 60, + "connect_groups": "WALL", "connects_to": "WALL", "roof": "t_flat_roof", "flags": [ "TRANSPARENT", "FLAMMABLE", "PLACE_ITEM", "INDOORS", "AUTO_WALL_SYMBOL", "THIN_OBSTACLE", "MOUNTABLE", "SHORT" ], @@ -689,7 +691,6 @@ "coverage": 100, "roof": "t_concrete_roof", "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "NO_SCENT", "AUTO_WALL_SYMBOL", "MINEABLE", "BLOCK_WIND" ], - "connects_to": "WALL", "bash": { "str_min": 120, "str_max": 460, @@ -712,7 +713,6 @@ "coverage": 100, "roof": "t_concrete_roof", "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "NO_SCENT", "AUTO_WALL_SYMBOL", "MINEABLE", "BLOCK_WIND" ], - "connects_to": "WALL", "bash": { "str_min": 120, "str_max": 460, @@ -735,7 +735,6 @@ "coverage": 100, "roof": "t_concrete_roof", "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "NO_SCENT", "AUTO_WALL_SYMBOL", "MINEABLE", "BLOCK_WIND" ], - "connects_to": "WALL", "bash": { "str_min": 120, "str_max": 460, @@ -758,7 +757,6 @@ "coverage": 100, "roof": "t_concrete_roof", "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "NO_SCENT", "AUTO_WALL_SYMBOL", "MINEABLE", "BLOCK_WIND" ], - "connects_to": "WALL", "bash": { "str_min": 120, "str_max": 460, @@ -781,7 +779,6 @@ "coverage": 100, "roof": "t_concrete_roof", "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "NO_SCENT", "AUTO_WALL_SYMBOL", "MINEABLE", "BLOCK_WIND" ], - "connects_to": "WALL", "bash": { "str_min": 120, "str_max": 460, @@ -804,7 +801,6 @@ "coverage": 100, "roof": "t_concrete_roof", "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "NO_SCENT", "AUTO_WALL_SYMBOL", "MINEABLE", "BLOCK_WIND" ], - "connects_to": "WALL", "bash": { "str_min": 120, "str_max": 460, @@ -827,7 +823,6 @@ "coverage": 100, "roof": "t_concrete_roof", "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "NO_SCENT", "AUTO_WALL_SYMBOL", "MINEABLE", "BLOCK_WIND" ], - "connects_to": "WALL", "bash": { "str_min": 120, "str_max": 460, @@ -850,7 +845,6 @@ "coverage": 100, "roof": "t_concrete_roof", "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "NO_SCENT", "AUTO_WALL_SYMBOL", "MINEABLE", "BLOCK_WIND" ], - "connects_to": "WALL", "bash": { "str_min": 90, "str_max": 350, @@ -873,7 +867,6 @@ "coverage": 100, "roof": "t_concrete_roof", "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "NO_SCENT", "AUTO_WALL_SYMBOL", "MINEABLE", "BLOCK_WIND" ], - "connects_to": "WALL", "bash": { "str_min": 90, "str_max": 350, @@ -896,7 +889,6 @@ "coverage": 100, "roof": "t_concrete_roof", "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "NO_SCENT", "AUTO_WALL_SYMBOL", "MINEABLE", "BLOCK_WIND" ], - "connects_to": "WALL", "bash": { "str_min": 90, "str_max": 350, @@ -919,7 +911,6 @@ "coverage": 100, "roof": "t_concrete_roof", "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "NO_SCENT", "AUTO_WALL_SYMBOL", "MINEABLE", "BLOCK_WIND" ], - "connects_to": "WALL", "bash": { "str_min": 90, "str_max": 350, @@ -942,7 +933,6 @@ "coverage": 100, "roof": "t_concrete_roof", "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "NO_SCENT", "AUTO_WALL_SYMBOL", "MINEABLE", "BLOCK_WIND" ], - "connects_to": "WALL", "bash": { "str_min": 90, "str_max": 350, @@ -965,7 +955,6 @@ "coverage": 100, "roof": "t_concrete_roof", "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "NO_SCENT", "AUTO_WALL_SYMBOL", "MINEABLE", "BLOCK_WIND" ], - "connects_to": "WALL", "bash": { "str_min": 90, "str_max": 350, @@ -988,7 +977,6 @@ "coverage": 100, "roof": "t_concrete_roof", "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "NO_SCENT", "AUTO_WALL_SYMBOL", "MINEABLE", "BLOCK_WIND" ], - "connects_to": "WALL", "bash": { "str_min": 90, "str_max": 350, @@ -1029,7 +1017,6 @@ "coverage": 100, "roof": "t_brick_roof", "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "NO_SCENT", "AUTO_WALL_SYMBOL", "MINEABLE", "BLOCK_WIND" ], - "connects_to": "WALL", "bash": { "str_min": 60, "str_max": 160, @@ -1051,7 +1038,6 @@ "coverage": 100, "roof": "t_rock_roof", "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "NO_SCENT", "AUTO_WALL_SYMBOL", "MINEABLE", "BLOCK_WIND" ], - "connects_to": "WALL", "bash": { "str_min": 80, "str_max": 300, @@ -1072,6 +1058,7 @@ "move_cost": 4, "coverage": 60, "flags": [ "TRANSPARENT", "NOITEM", "REDUCE_SCENT", "MOUNTABLE", "MINEABLE" ], + "connect_groups": "WALL", "connects_to": "WALL", "bash": { "str_min": 40, @@ -1094,8 +1081,7 @@ "move_cost": 0, "coverage": 100, "roof": "t_rock_roof", - "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "NO_SCENT", "AUTO_WALL_SYMBOL", "CONNECT_TO_WALL", "MINEABLE", "BLOCK_WIND" ], - "connects_to": "WALL", + "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "NO_SCENT", "AUTO_WALL_SYMBOL", "CONNECT_WITH_WALL", "MINEABLE", "BLOCK_WIND" ], "bash": { "str_min": 120, "str_max": 400, @@ -1137,7 +1123,6 @@ "coverage": 100, "roof": "t_brick_roof", "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "NO_SCENT", "AUTO_WALL_SYMBOL", "MINEABLE", "BLOCK_WIND" ], - "connects_to": "WALL", "bash": { "str_min": 40, "str_max": 120, @@ -1279,7 +1264,6 @@ "coverage": 100, "roof": "t_concrete_roof", "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "NO_SCENT", "AUTO_WALL_SYMBOL", "MINEABLE", "BLOCK_WIND" ], - "connects_to": "WALL", "bash": { "str_min": 90, "str_max": 350, @@ -1300,6 +1284,7 @@ "move_cost": 4, "coverage": 60, "flags": [ "NOITEM", "TRANSPARENT", "MOUNTABLE", "REDUCE_SCENT", "MINEABLE" ], + "connect_groups": "WALL", "connects_to": "WALL", "bash": { "str_min": 40, @@ -1322,7 +1307,6 @@ "coverage": 100, "roof": "t_concrete_roof", "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "NO_SCENT", "AUTO_WALL_SYMBOL", "MINEABLE", "BLOCK_WIND" ], - "connects_to": "WALL", "bash": { "str_min": 120, "str_max": 460, @@ -1343,6 +1327,7 @@ "move_cost": 5, "coverage": 60, "flags": [ "TRANSPARENT", "NOITEM", "MOUNTABLE", "REDUCE_SCENT", "MINEABLE" ], + "connect_groups": "WALL", "connects_to": "WALL", "bash": { "str_min": 60, @@ -1368,6 +1353,7 @@ "byproducts": [ { "item": "spike", "count": 19 }, { "item": "scrap", "count": 8 } ] }, "flags": [ "TRANSPARENT", "NOITEM", "PERMEABLE", "THIN_OBSTACLE" ], + "connect_groups": "WALL", "connects_to": "WALL", "oxytorch": { "result": "t_pit", @@ -1395,7 +1381,6 @@ "coverage": 100, "roof": "t_metal_flat_roof", "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "REDUCE_SCENT", "AUTO_WALL_SYMBOL", "MINEABLE", "BLOCK_WIND" ], - "connects_to": "WALL", "bash": { "str_min": 80, "str_max": 200, @@ -1437,7 +1422,6 @@ "coverage": 100, "roof": "t_wood_roof", "flags": [ "FLAMMABLE", "NOITEM", "SUPPORTS_ROOF", "WALL", "NO_SCENT", "AUTO_WALL_SYMBOL", "BLOCK_WIND" ], - "connects_to": "WALL", "bash": { "str_min": 12, "str_max": 150, @@ -1464,7 +1448,6 @@ "coverage": 100, "roof": "t_wood_roof", "flags": [ "FLAMMABLE", "NOITEM", "SUPPORTS_ROOF", "WALL", "REDUCE_SCENT", "AUTO_WALL_SYMBOL", "BLOCK_WIND" ], - "connects_to": "WALL", "bash": { "str_min": 8, "str_max": 150, @@ -1489,7 +1472,7 @@ "color": "light_red", "move_cost": 0, "coverage": 35, - "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", "NOITEM", "SUPPORTS_ROOF", "REDUCE_SCENT", "PERMEABLE", "CONNECT_TO_WALL" ], + "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", "NOITEM", "SUPPORTS_ROOF", "REDUCE_SCENT", "PERMEABLE", "CONNECT_WITH_WALL" ], "bash": { "str_min": 4, "str_max": 110, @@ -1516,6 +1499,7 @@ "move_cost": 4, "coverage": 60, "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", "NOITEM", "REDUCE_SCENT", "MOUNTABLE", "MINEABLE" ], + "connect_groups": "WALL", "connects_to": "WALL", "bash": { "str_min": 40, @@ -1548,7 +1532,6 @@ "BLOCK_WIND", "WIRED_WALL" ], - "connects_to": "WALL", "bash": { "str_min": 60, "str_max": 180, @@ -1570,7 +1553,6 @@ "coverage": 100, "roof": "t_wood_roof", "flags": [ "FLAMMABLE", "NOITEM", "SUPPORTS_ROOF", "WALL", "REDUCE_SCENT", "AUTO_WALL_SYMBOL", "MINEABLE", "BLOCK_WIND" ], - "connects_to": "WALL", "bash": { "str_min": 40, "str_max": 160, @@ -1589,7 +1571,7 @@ "symbol": "&", "color": "brown", "move_cost": 0, - "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", "NOITEM", "SUPPORTS_ROOF", "REDUCE_SCENT", "PERMEABLE", "CONNECT_TO_WALL" ], + "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", "NOITEM", "SUPPORTS_ROOF", "REDUCE_SCENT", "PERMEABLE", "CONNECT_WITH_WALL" ], "bash": { "str_min": 8, "str_max": 150, @@ -1610,7 +1592,7 @@ "color": "brown", "move_cost": 0, "coverage": 100, - "flags": [ "FLAMMABLE", "NOITEM", "SUPPORTS_ROOF", "REDUCE_SCENT", "CONNECT_TO_WALL", "WALL", "BLOCK_WIND" ], + "flags": [ "FLAMMABLE", "NOITEM", "SUPPORTS_ROOF", "REDUCE_SCENT", "CONNECT_WITH_WALL", "WALL", "BLOCK_WIND" ], "bash": { "str_min": 35, "str_max": 150, @@ -1659,7 +1641,7 @@ "items": [ { "item": "2x4", "count": [ 0, 3 ] }, { "item": "splinter", "count": [ 3, 6 ] } ] }, "shoot": { "chance_to_hit": 25, "reduce_damage": [ 20, 40 ], "reduce_damage_laser": [ 20, 50 ], "destroy_damage": [ 30, 100 ] }, - "flags": [ "TRANSPARENT", "FLAMMABLE_HARD", "NOITEM", "SUPPORTS_ROOF", "REDUCE_SCENT", "PERMEABLE", "CONNECT_TO_WALL" ] + "flags": [ "TRANSPARENT", "FLAMMABLE_HARD", "NOITEM", "SUPPORTS_ROOF", "REDUCE_SCENT", "PERMEABLE", "CONNECT_WITH_WALL" ] }, { "id": "t_wall_wattle_half", @@ -1692,7 +1674,6 @@ "move_cost": 0, "coverage": 100, "flags": [ "NOITEM", "WALL", "PERMEABLE", "SUPPORTS_ROOF", "AUTO_WALL_SYMBOL", "MINEABLE" ], - "connects_to": "WALL", "bash": { "str_min": 60, "str_max": 200, @@ -1719,7 +1700,6 @@ "coverage": 100, "roof": "t_dirt", "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "NO_SCENT", "AUTO_WALL_SYMBOL", "MINEABLE", "BLOCK_WIND" ], - "connects_to": "WALL", "bash": { "str_min": 60, "str_max": 200, @@ -1741,7 +1721,6 @@ "coverage": 100, "roof": "t_dirt", "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "NO_SCENT", "AUTO_WALL_SYMBOL", "MINEABLE", "BLOCK_WIND" ], - "connects_to": "WALL", "bash": { "str_min": 30, "str_max": 200, @@ -1760,8 +1739,7 @@ "color": "magenta", "move_cost": 0, "coverage": 100, - "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "NO_SCENT", "AUTO_WALL_SYMBOL", "BLOCK_WIND" ], - "connects_to": "WALL" + "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "NO_SCENT", "AUTO_WALL_SYMBOL", "BLOCK_WIND" ] }, { "type": "terrain", @@ -1774,7 +1752,6 @@ "move_cost": 0, "coverage": 60, "flags": [ "NOITEM", "WALL", "PERMEABLE", "AUTO_WALL_SYMBOL", "MINEABLE" ], - "connects_to": "WALL", "bash": { "str_min": 30, "str_max": 200, @@ -1998,7 +1975,7 @@ "message": "You finish cutting the metal.", "byproducts": [ { "item": "pipe", "count": 3 } ] }, - "flags": [ "TRANSPARENT", "NOITEM", "PERMEABLE", "CONNECT_TO_WALL", "THIN_OBSTACLE" ], + "flags": [ "TRANSPARENT", "NOITEM", "PERMEABLE", "CONNECT_WITH_WALL", "THIN_OBSTACLE" ], "oxytorch": { "result": "t_floor", "duration": "9 seconds", "byproducts": [ { "item": "pipe", "count": [ 1, 2 ] } ] }, "bash": { "str_min": 60, @@ -2246,6 +2223,7 @@ "color": "light_gray", "move_cost": 5, "flags": [ "TRANSPARENT", "NOITEM", "MOUNTABLE", "PERMEABLE", "MINEABLE" ], + "connect_groups": "WALL", "connects_to": "WALL", "bash": { "str_min": 60, @@ -2376,7 +2354,6 @@ "coverage": 100, "roof": "t_rock_roof", "flags": [ "NOITEM", "WALL", "NO_SCENT", "AUTO_WALL_SYMBOL", "MINEABLE", "BLOCK_WIND" ], - "connects_to": "WALL", "bash": { "str_min": 50, "str_max": 200, @@ -2397,6 +2374,7 @@ "move_cost": 4, "coverage": 60, "flags": [ "TRANSPARENT", "NOITEM", "REDUCE_SCENT", "MOUNTABLE", "MINEABLE" ], + "connect_groups": "WALL", "connects_to": "WALL", "bash": { "str_min": 30, diff --git a/data/json/furniture_and_terrain/terrain-windows.json b/data/json/furniture_and_terrain/terrain-windows.json index b7ca22d3eee67..6081fd945a8d1 100644 --- a/data/json/furniture_and_terrain/terrain-windows.json +++ b/data/json/furniture_and_terrain/terrain-windows.json @@ -14,7 +14,7 @@ "FLAMMABLE", "NOITEM", "BARRICADABLE_WINDOW", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" @@ -42,7 +42,7 @@ "move_cost": 0, "coverage": 95, "roof": "t_flat_roof", - "flags": [ "FLAMMABLE", "NOITEM", "WALL", "CONNECT_TO_WALL", "BLOCK_WIND", "REDUCE_SCENT", "WINDOW", "SUPPORTS_ROOF" ], + "flags": [ "FLAMMABLE", "NOITEM", "WALL", "BLOCK_WIND", "REDUCE_SCENT", "WINDOW", "SUPPORTS_ROOF" ], "deconstruct": { "ter_set": "t_window_empty", "items": [ { "item": "glass_sheet", "count": 1 }, { "item": "duct_tape", "charges": [ 15, 25 ] } ] @@ -75,7 +75,7 @@ "NOITEM", "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW_CURTAINS", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" @@ -138,7 +138,7 @@ "NOITEM", "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" @@ -185,7 +185,7 @@ "NOITEM", "OPENCLOSE_INSIDE", "MOUNTABLE", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "THIN_OBSTACLE", "SMALL_PASSAGE", "PERMEABLE", @@ -291,7 +291,7 @@ "NOITEM", "OPENCLOSE_INSIDE", "MOUNTABLE", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "THIN_OBSTACLE", "SMALL_PASSAGE", "PERMEABLE", @@ -342,7 +342,7 @@ "NOITEM", "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW_CURTAINS", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" @@ -403,7 +403,7 @@ "ALARMED", "NOITEM", "BARRICADABLE_WINDOW", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" @@ -469,7 +469,7 @@ "FLAMMABLE", "SUPPORTS_ROOF", "MOUNTABLE", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "THIN_OBSTACLE", "SMALL_PASSAGE", "PERMEABLE", @@ -515,7 +515,7 @@ "FLAMMABLE", "NOITEM", "MOUNTABLE", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "SMALL_PASSAGE", "PERMEABLE", "WINDOW", @@ -532,7 +532,7 @@ "move_cost": 0, "coverage": 95, "roof": "t_flat_roof", - "flags": [ "FLAMMABLE", "NOITEM", "REDUCE_SCENT", "CONNECT_TO_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" ], + "flags": [ "FLAMMABLE", "NOITEM", "REDUCE_SCENT", "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" ], "deconstruct": { "ter_set": "t_window_empty", "items": [ { "item": "2x4", "count": [ 3, 4 ] }, { "item": "nail", "charges": [ 6, 8 ] }, { "item": "glass_sheet", "count": 1 } ] @@ -567,7 +567,7 @@ "move_cost": 0, "coverage": 95, "roof": "t_flat_roof", - "flags": [ "FLAMMABLE", "NOITEM", "CONNECT_TO_WALL", "BLOCK_WIND", "PERMEABLE", "WINDOW", "SUPPORTS_ROOF" ], + "flags": [ "FLAMMABLE", "NOITEM", "CONNECT_WITH_WALL", "BLOCK_WIND", "PERMEABLE", "WINDOW", "SUPPORTS_ROOF" ], "deconstruct": { "ter_set": "t_window_empty", "items": [ { "item": "2x4", "count": [ 3, 4 ] }, { "item": "nail", "charges": [ 6, 8 ] } ] @@ -602,7 +602,7 @@ "move_cost": 0, "coverage": 95, "roof": "t_flat_roof", - "flags": [ "FLAMMABLE", "NOITEM", "REDUCE_SCENT", "CONNECT_TO_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" ], + "flags": [ "FLAMMABLE", "NOITEM", "REDUCE_SCENT", "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" ], "deconstruct": { "ter_set": "t_window", "items": [ { "item": "2x4", "count": [ 6, 8 ] }, { "item": "nail", "charges": [ 12, 16 ] } ] }, "bash": { "str_min": 12, @@ -625,7 +625,7 @@ "move_cost": 0, "coverage": 95, "roof": "t_flat_roof", - "flags": [ "FLAMMABLE", "NOITEM", "REDUCE_SCENT", "CONNECT_TO_WALL", "BLOCK_WIND", "PERMEABLE", "WINDOW", "SUPPORTS_ROOF" ], + "flags": [ "FLAMMABLE", "NOITEM", "REDUCE_SCENT", "CONNECT_WITH_WALL", "BLOCK_WIND", "PERMEABLE", "WINDOW", "SUPPORTS_ROOF" ], "deconstruct": { "ter_set": "t_window_empty", "items": [ { "item": "2x4", "count": [ 6, 8 ] }, { "item": "nail", "charges": [ 12, 16 ] } ] @@ -657,7 +657,7 @@ "message": "You finish cutting the metal.", "byproducts": [ { "item": "rebar", "count": [ 1, 4 ] } ] }, - "flags": [ "NOITEM", "REDUCE_SCENT", "CONNECT_TO_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" ], + "flags": [ "NOITEM", "REDUCE_SCENT", "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" ], "oxytorch": { "result": "t_window_empty", "duration": "4 seconds", @@ -692,7 +692,7 @@ "move_cost": 0, "coverage": 95, "roof": "t_flat_roof", - "flags": [ "NOITEM", "REDUCE_SCENT", "CONNECT_TO_WALL", "BLOCK_WIND", "PERMEABLE", "WINDOW", "SUPPORTS_ROOF" ], + "flags": [ "NOITEM", "REDUCE_SCENT", "CONNECT_WITH_WALL", "BLOCK_WIND", "PERMEABLE", "WINDOW", "SUPPORTS_ROOF" ], "oxytorch": { "result": "t_window_empty", "duration": "4 seconds", @@ -738,7 +738,7 @@ "message": "You finish cutting the metal.", "byproducts": [ { "item": "rebar", "count": [ 1, 8 ] } ] }, - "flags": [ "TRANSPARENT", "NOITEM", "CONNECT_TO_WALL", "THIN_OBSTACLE", "WINDOW", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "NOITEM", "CONNECT_WITH_WALL", "THIN_OBSTACLE", "WINDOW", "SUPPORTS_ROOF" ], "oxytorch": { "result": "t_window", "duration": "9 seconds", "byproducts": [ { "item": "rebar", "count": [ 1, 2 ] } ] }, "bash": { "str_min": 3, @@ -768,7 +768,7 @@ "message": "You finish cutting the metal.", "byproducts": [ { "item": "rebar", "count": [ 1, 8 ] } ] }, - "flags": [ "TRANSPARENT", "NOITEM", "CONNECT_TO_WALL", "WINDOW", "PERMEABLE", "SUPPORTS_ROOF", "THIN_OBSTACLE" ], + "flags": [ "TRANSPARENT", "NOITEM", "CONNECT_WITH_WALL", "WINDOW", "PERMEABLE", "SUPPORTS_ROOF", "THIN_OBSTACLE" ], "oxytorch": { "result": "t_window_empty", "duration": "9 seconds", "byproducts": [ { "item": "rebar", "count": [ 1, 2 ] } ] }, "bash": { "str_min": 60, @@ -799,7 +799,7 @@ "message": "You finish cutting the metal.", "byproducts": [ { "item": "rebar", "count": [ 1, 8 ] } ] }, - "flags": [ "TRANSPARENT", "NOITEM", "REDUCE_SCENT", "BLOCK_WIND", "ALARMED", "CONNECT_TO_WALL", "WINDOW", "SUPPORTS_ROOF" ], + "flags": [ "TRANSPARENT", "NOITEM", "REDUCE_SCENT", "BLOCK_WIND", "ALARMED", "CONNECT_WITH_WALL", "WINDOW", "SUPPORTS_ROOF" ], "oxytorch": { "result": "t_window_alarm", "duration": "9 seconds", "byproducts": [ { "item": "rebar", "count": [ 1, 2 ] } ] }, "bash": { "str_min": 3, @@ -835,7 +835,7 @@ "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW_CURTAINS", "REDUCE_SCENT", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" @@ -883,7 +883,7 @@ "BARRICADABLE_WINDOW_CURTAINS", "REDUCE_SCENT", "BLOCK_WIND", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "WINDOW", "SUPPORTS_ROOF" ], @@ -920,7 +920,6 @@ "SUPPORTS_ROOF", "WALL", "BARRICADABLE_WINDOW", - "CONNECT_TO_WALL", "MINEABLE", "BLOCK_WIND", "REDUCE_SCENT", @@ -950,7 +949,6 @@ "SUPPORTS_ROOF", "WALL", "BARRICADABLE_WINDOW", - "CONNECT_TO_WALL", "MINEABLE", "BLOCK_WIND", "REDUCE_SCENT", @@ -980,7 +978,6 @@ "SUPPORTS_ROOF", "WALL", "BARRICADABLE_WINDOW", - "CONNECT_TO_WALL", "MINEABLE", "BLOCK_WIND", "REDUCE_SCENT", @@ -1021,7 +1018,7 @@ "flags": [ "TRANSPARENT", "NOITEM", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BARRICADABLE_WINDOW", "BLOCK_WIND", "REDUCE_SCENT", @@ -1063,7 +1060,15 @@ "message": "You finish cutting the metal.", "byproducts": [ { "item": "pipe", "count": [ 1, 12 ] }, { "item": "sheet_metal", "count": 4 } ] }, - "flags": [ "NOITEM", "CONNECT_TO_WALL", "BARRICADABLE_WINDOW_CURTAINS", "BLOCK_WIND", "REDUCE_SCENT", "WINDOW", "SUPPORTS_ROOF" ], + "flags": [ + "NOITEM", + "CONNECT_WITH_WALL", + "BARRICADABLE_WINDOW_CURTAINS", + "BLOCK_WIND", + "REDUCE_SCENT", + "WINDOW", + "SUPPORTS_ROOF" + ], "curtain_transform": "t_metal_grate_window", "examine_action": "curtains", "open": "t_metal_grate_window_with_curtain_open", @@ -1094,7 +1099,7 @@ "flags": [ "TRANSPARENT", "NOITEM", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BARRICADABLE_WINDOW_CURTAINS", "BLOCK_WIND", "REDUCE_SCENT", @@ -1144,7 +1149,7 @@ "flags": [ "TRANSPARENT", "NOITEM", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BARRICADABLE_WINDOW", "THIN_OBSTACLE", "PERMEABLE", @@ -1185,7 +1190,15 @@ "color": "light_gray", "move_cost": 0, "roof": "t_flat_roof", - "flags": [ "NOITEM", "CONNECT_TO_WALL", "THIN_OBSTACLE", "BARRICADABLE_WINDOW_CURTAINS", "PERMEABLE", "WINDOW", "SUPPORTS_ROOF" ], + "flags": [ + "NOITEM", + "CONNECT_WITH_WALL", + "THIN_OBSTACLE", + "BARRICADABLE_WINDOW_CURTAINS", + "PERMEABLE", + "WINDOW", + "SUPPORTS_ROOF" + ], "hacksaw": { "result": "t_window_reinforced_noglass", "duration": "10 minutes", @@ -1226,7 +1239,7 @@ "flags": [ "TRANSPARENT", "NOITEM", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BARRICADABLE_WINDOW_CURTAINS", "PERMEABLE", "WINDOW", @@ -1288,7 +1301,7 @@ "NOITEM", "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" @@ -1329,7 +1342,7 @@ "OPENCLOSE_INSIDE", "MOUNTABLE", "BARRICADABLE_WINDOW", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "THIN_OBSTACLE", "SMALL_PASSAGE", "PERMEABLE", @@ -1369,7 +1382,7 @@ "NOITEM", "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW_CURTAINS", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" @@ -1415,7 +1428,7 @@ "NOITEM", "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW_CURTAINS", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" @@ -1463,7 +1476,7 @@ "OPENCLOSE_INSIDE", "MOUNTABLE", "BARRICADABLE_WINDOW_CURTAINS", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "THIN_OBSTACLE", "SMALL_PASSAGE", "PERMEABLE", @@ -1512,7 +1525,7 @@ "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW", "REDUCE_SCENT", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" @@ -1553,7 +1566,7 @@ "OPENCLOSE_INSIDE", "MOUNTABLE", "BARRICADABLE_WINDOW", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "THIN_OBSTACLE", "SMALL_PASSAGE", "PERMEABLE", @@ -1594,7 +1607,7 @@ "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW_CURTAINS", "REDUCE_SCENT", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" @@ -1641,7 +1654,7 @@ "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW_CURTAINS", "REDUCE_SCENT", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" @@ -1689,7 +1702,7 @@ "OPENCLOSE_INSIDE", "MOUNTABLE", "BARRICADABLE_WINDOW_CURTAINS", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "THIN_OBSTACLE", "SMALL_PASSAGE", "PERMEABLE", @@ -1737,7 +1750,7 @@ "NOITEM", "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "REDUCE_SCENT", "WINDOW", @@ -1786,7 +1799,7 @@ "OPENCLOSE_INSIDE", "MOUNTABLE", "BARRICADABLE_WINDOW", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "THIN_OBSTACLE", "SMALL_PASSAGE", "PERMEABLE", @@ -1834,7 +1847,7 @@ "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW_CURTAINS", "REDUCE_SCENT", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" @@ -1883,7 +1896,7 @@ "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW_CURTAINS", "REDUCE_SCENT", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" @@ -1933,7 +1946,7 @@ "OPENCLOSE_INSIDE", "MOUNTABLE", "BARRICADABLE_WINDOW_CURTAINS", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "THIN_OBSTACLE", "SMALL_PASSAGE", "PERMEABLE", @@ -1984,7 +1997,7 @@ "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW", "REDUCE_SCENT", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" @@ -2028,7 +2041,7 @@ "OPENCLOSE_INSIDE", "MOUNTABLE", "BARRICADABLE_WINDOW", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "THIN_OBSTACLE", "SMALL_PASSAGE", "PERMEABLE", @@ -2072,7 +2085,7 @@ "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW_CURTAINS", "REDUCE_SCENT", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" @@ -2120,7 +2133,7 @@ "OPENCLOSE_INSIDE", "MOUNTABLE", "BARRICADABLE_WINDOW_CURTAINS", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "THIN_OBSTACLE", "SMALL_PASSAGE", "PERMEABLE", @@ -2171,7 +2184,7 @@ "OPENCLOSE_INSIDE", "MOUNTABLE", "BARRICADABLE_WINDOW_CURTAINS", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "THIN_OBSTACLE", "SMALL_PASSAGE", "PERMEABLE", @@ -2221,7 +2234,7 @@ "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW", "REDUCE_SCENT", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" @@ -2262,7 +2275,7 @@ "OPENCLOSE_INSIDE", "MOUNTABLE", "BARRICADABLE_WINDOW", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "THIN_OBSTACLE", "SMALL_PASSAGE", "PERMEABLE", @@ -2303,7 +2316,7 @@ "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW_CURTAINS", "REDUCE_SCENT", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" @@ -2350,7 +2363,7 @@ "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW_CURTAINS", "REDUCE_SCENT", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" @@ -2398,7 +2411,7 @@ "OPENCLOSE_INSIDE", "MOUNTABLE", "BARRICADABLE_WINDOW_CURTAINS", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "THIN_OBSTACLE", "SMALL_PASSAGE", "PERMEABLE", @@ -2447,7 +2460,7 @@ "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW", "REDUCE_SCENT", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" @@ -2496,7 +2509,7 @@ "OPENCLOSE_INSIDE", "MOUNTABLE", "BARRICADABLE_WINDOW", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "THIN_OBSTACLE", "SMALL_PASSAGE", "PERMEABLE", @@ -2545,7 +2558,7 @@ "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW_CURTAINS", "REDUCE_SCENT", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" @@ -2595,7 +2608,7 @@ "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW_CURTAINS", "REDUCE_SCENT", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" @@ -2646,7 +2659,7 @@ "OPENCLOSE_INSIDE", "MOUNTABLE", "BARRICADABLE_WINDOW_CURTAINS", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "THIN_OBSTACLE", "SMALL_PASSAGE", "PERMEABLE", @@ -2697,7 +2710,7 @@ "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW", "REDUCE_SCENT", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" @@ -2745,7 +2758,7 @@ "OPENCLOSE_INSIDE", "MOUNTABLE", "BARRICADABLE_WINDOW", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "THIN_OBSTACLE", "SMALL_PASSAGE", "PERMEABLE", @@ -2793,7 +2806,7 @@ "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW_CURTAINS", "REDUCE_SCENT", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" @@ -2842,7 +2855,7 @@ "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW_CURTAINS", "REDUCE_SCENT", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" @@ -2892,7 +2905,7 @@ "OPENCLOSE_INSIDE", "MOUNTABLE", "BARRICADABLE_WINDOW_CURTAINS", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "THIN_OBSTACLE", "SMALL_PASSAGE", "PERMEABLE", @@ -2943,7 +2956,7 @@ "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW", "REDUCE_SCENT", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" @@ -2992,7 +3005,7 @@ "OPENCLOSE_INSIDE", "MOUNTABLE", "BARRICADABLE_WINDOW", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "THIN_OBSTACLE", "SMALL_PASSAGE", "PERMEABLE", @@ -3041,7 +3054,7 @@ "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW_CURTAINS", "REDUCE_SCENT", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" @@ -3091,7 +3104,7 @@ "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW_CURTAINS", "REDUCE_SCENT", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" @@ -3142,7 +3155,7 @@ "OPENCLOSE_INSIDE", "MOUNTABLE", "BARRICADABLE_WINDOW_CURTAINS", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "THIN_OBSTACLE", "SMALL_PASSAGE", "PERMEABLE", @@ -3193,7 +3206,7 @@ "NOITEM", "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" @@ -3237,7 +3250,7 @@ "OPENCLOSE_INSIDE", "MOUNTABLE", "BARRICADABLE_WINDOW", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "THIN_OBSTACLE", "SMALL_PASSAGE", "PERMEABLE", @@ -3280,7 +3293,7 @@ "NOITEM", "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW_CURTAINS", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" @@ -3328,7 +3341,7 @@ "NOITEM", "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW_CURTAINS", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" @@ -3378,7 +3391,7 @@ "OPENCLOSE_INSIDE", "MOUNTABLE", "BARRICADABLE_WINDOW_CURTAINS", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "THIN_OBSTACLE", "SMALL_PASSAGE", "PERMEABLE", @@ -3429,7 +3442,7 @@ "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW", "REDUCE_SCENT", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" @@ -3477,7 +3490,7 @@ "OPENCLOSE_INSIDE", "MOUNTABLE", "BARRICADABLE_WINDOW", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "THIN_OBSTACLE", "SMALL_PASSAGE", "PERMEABLE", @@ -3525,7 +3538,7 @@ "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW_CURTAINS", "REDUCE_SCENT", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" @@ -3578,7 +3591,7 @@ "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW_CURTAINS", "REDUCE_SCENT", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" @@ -3632,7 +3645,7 @@ "OPENCLOSE_INSIDE", "MOUNTABLE", "BARRICADABLE_WINDOW_CURTAINS", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "THIN_OBSTACLE", "SMALL_PASSAGE", "PERMEABLE", @@ -3710,7 +3723,7 @@ "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW", "REDUCE_SCENT", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" @@ -3758,7 +3771,7 @@ "BARRICADABLE_WINDOW", "OPENCLOSE_INSIDE", "MOUNTABLE", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "THIN_OBSTACLE", "SMALL_PASSAGE", "PERMEABLE", @@ -3806,7 +3819,7 @@ "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW_CURTAINS", "REDUCE_SCENT", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" @@ -3855,7 +3868,7 @@ "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW_CURTAINS", "REDUCE_SCENT", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "BLOCK_WIND", "WINDOW", "SUPPORTS_ROOF" @@ -3905,7 +3918,7 @@ "OPENCLOSE_INSIDE", "MOUNTABLE", "BARRICADABLE_WINDOW_CURTAINS", - "CONNECT_TO_WALL", + "CONNECT_WITH_WALL", "THIN_OBSTACLE", "SMALL_PASSAGE", "PERMEABLE", @@ -3948,7 +3961,16 @@ "color": "light_gray", "move_cost": 0, "roof": "t_metal_flat_roof", - "flags": [ "TRANSPARENT", "NOITEM", "CONNECT_TO_WALL", "THIN_OBSTACLE", "BLOCK_WIND", "REDUCE_SCENT", "WINDOW", "SUPPORTS_ROOF" ], + "flags": [ + "TRANSPARENT", + "NOITEM", + "CONNECT_WITH_WALL", + "THIN_OBSTACLE", + "BLOCK_WIND", + "REDUCE_SCENT", + "WINDOW", + "SUPPORTS_ROOF" + ], "bash": { "str_min": 50, "str_max": 75, diff --git a/data/json/furniture_and_terrain/terrain-zlevel-transitions.json b/data/json/furniture_and_terrain/terrain-zlevel-transitions.json index 828e682edf509..a3d7b12d11d39 100644 --- a/data/json/furniture_and_terrain/terrain-zlevel-transitions.json +++ b/data/json/furniture_and_terrain/terrain-zlevel-transitions.json @@ -191,6 +191,7 @@ "id": "t_ramp_down_high", "name": "road ramp down (high end)", "description": "The upper end of an asphalt ramp leading down.", + "connect_groups": "PAVEMENT", "connects_to": "PAVEMENT", "symbol": ">", "color": "dark_gray", @@ -202,6 +203,7 @@ "id": "t_ramp_down_low", "name": "road ramp down (low end)", "description": "The lower end of an asphalt ramp leading down.", + "connect_groups": "WALL", "connects_to": "WALL", "symbol": ">", "color": "dark_gray", @@ -212,6 +214,7 @@ "type": "terrain", "id": "t_ramp_up_high", "name": "road ramp up (high end)", + "connect_groups": "WALL", "connects_to": "WALL", "description": "The upper end of an asphalt ramp leading up.", "symbol": "<", @@ -223,6 +226,7 @@ "type": "terrain", "id": "t_ramp_up_low", "name": "road ramp up (low end)", + "connect_groups": "PAVEMENT", "connects_to": "PAVEMENT", "description": "The lower end of an asphalt ramp leading up.", "symbol": "<", @@ -245,6 +249,7 @@ "id": "t_earth_ramp_down_low", "name": "earth ramp down (low end)", "description": "The lower end of an earth ramp leading down.", + "connect_groups": "WALL", "connects_to": "WALL", "symbol": ">", "color": "brown", @@ -255,6 +260,7 @@ "type": "terrain", "id": "t_earth_ramp_up_high", "name": "earth ramp up (high end)", + "connect_groups": "WALL", "connects_to": "WALL", "description": "The upper end of an earth ramp leading up.", "symbol": "<", @@ -276,6 +282,7 @@ "type": "terrain", "id": "t_sidewalk_ramp_down_high", "name": "sidewalk ramp down (high end)", + "connect_groups": "PAVEMENT", "connects_to": "PAVEMENT", "description": "The upper end of a sidewalk ramp leading down.", "symbol": ">", @@ -287,6 +294,7 @@ "type": "terrain", "id": "t_sidewalk_ramp_down_low", "name": "sidewalk ramp down (low end)", + "connect_groups": "WALL", "connects_to": "WALL", "description": "The lower end of a sidewalk ramp leading down.", "symbol": ">", @@ -298,6 +306,7 @@ "type": "terrain", "id": "t_sidewalk_ramp_up_high", "name": "sidewalk ramp up (high end)", + "connect_groups": "WALL", "connects_to": "WALL", "description": "The upper end of a sidewalk ramp leading up.", "symbol": "<", @@ -319,6 +328,7 @@ "type": "terrain", "id": "t_slope_down", "name": "downward slope", + "connect_groups": "PAVEMENT", "connects_to": "PAVEMENT", "description": "A downward facing slope.", "symbol": ">", @@ -330,6 +340,7 @@ "type": "terrain", "id": "t_slope_up", "name": "upward slope", + "connect_groups": "WALL", "connects_to": "WALL", "description": "An upward facing slope.", "symbol": "<", @@ -396,6 +407,7 @@ "id": "t_railroad_ramp_down_high", "name": "railroad ramp down (high end)", "description": "The upper end of a railroad ramp leading down.", + "connect_groups": "RAIL", "connects_to": "RAIL", "symbol": ">", "color": "dark_gray", @@ -407,6 +419,7 @@ "id": "t_railroad_ramp_down_low", "name": "railroad ramp down (low end)", "description": "The lower end of a railroad ramp leading down.", + "connect_groups": "WALL", "connects_to": "WALL", "symbol": ">", "color": "dark_gray", @@ -417,6 +430,7 @@ "type": "terrain", "id": "t_railroad_ramp_up_high", "name": "railroad ramp up (high end)", + "connect_groups": "WALL", "connects_to": "WALL", "description": "The upper end of a railroad ramp leading up.", "symbol": "<", @@ -428,6 +442,7 @@ "type": "terrain", "id": "t_railroad_ramp_up_low", "name": "railroad ramp up (low end)", + "connect_groups": "RAIL", "connects_to": "RAIL", "description": "The lower end of a railroad ramp leading up.", "symbol": "<", @@ -439,6 +454,7 @@ "type": "terrain", "id": "t_concrete_ramp_down_high", "name": "concrete ramp down (high end)", + "connect_groups": "PAVEMENT", "connects_to": "PAVEMENT", "description": "The upper end of a concrete ramp leading down.", "symbol": ">", @@ -450,6 +466,7 @@ "type": "terrain", "id": "t_concrete_ramp_down_low", "name": "concrete ramp down (low end)", + "connect_groups": "WALL", "connects_to": "WALL", "description": "The lower end of a concrete ramp leading down.", "symbol": ">", @@ -461,6 +478,7 @@ "type": "terrain", "id": "t_concrete_ramp_up_high", "name": "concrete ramp up (high end)", + "connect_groups": "WALL", "connects_to": "WALL", "description": "The upper end of a concrete ramp leading up.", "symbol": "<", diff --git a/data/mods/Aftershock/maps/furniture_and_terrain/furniture_habitat.json b/data/mods/Aftershock/maps/furniture_and_terrain/furniture_habitat.json index 8352596ce8fce..f8ee466bd2c7b 100644 --- a/data/mods/Aftershock/maps/furniture_and_terrain/furniture_habitat.json +++ b/data/mods/Aftershock/maps/furniture_and_terrain/furniture_habitat.json @@ -11,6 +11,7 @@ "coverage": 55, "required_str": -1, "flags": [ "FLAMMABLE_ASH", "CONTAINER", "PLACE_ITEM", "ORGANIC", "MOUNTABLE", "FLAT_SURF", "NO_SELF_CONNECT" ], + "connect_groups": "COUNTER", "connects_to": "COUNTER", "deconstruct": { "items": [ diff --git a/data/mods/Aftershock/maps/furniture_and_terrain/terrain_alienciv.json b/data/mods/Aftershock/maps/furniture_and_terrain/terrain_alienciv.json index 076ef1d339fec..7c6744dc3c5d4 100644 --- a/data/mods/Aftershock/maps/furniture_and_terrain/terrain_alienciv.json +++ b/data/mods/Aftershock/maps/furniture_and_terrain/terrain_alienciv.json @@ -26,7 +26,6 @@ "symbol": "LINE_XOXO", "looks_like": "t_rock_wall", "color": "light_gray", - "connects_to": "WALL", "move_cost": 0, "coverage": 100, "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "NO_SCENT", "AUTO_WALL_SYMBOL", "BLOCK_WIND" ], diff --git a/data/mods/Aftershock/maps/furniture_and_terrain/terrain_groundxeno.json b/data/mods/Aftershock/maps/furniture_and_terrain/terrain_groundxeno.json index f31ce42c7aede..b27d6e5d76bb4 100644 --- a/data/mods/Aftershock/maps/furniture_and_terrain/terrain_groundxeno.json +++ b/data/mods/Aftershock/maps/furniture_and_terrain/terrain_groundxeno.json @@ -237,7 +237,6 @@ "coverage": 100, "roof": "t_basaltfloor", "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "NO_SCENT", "AUTO_WALL_SYMBOL", "MINEABLE", "BLOCK_WIND" ], - "connects_to": "WALL", "bash": { "str_min": 80, "str_max": 300, @@ -258,7 +257,6 @@ "coverage": 100, "roof": "t_ice", "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "NO_SCENT", "AUTO_WALL_SYMBOL", "MINEABLE", "BLOCK_WIND" ], - "connects_to": "WALL", "bash": { "str_min": 50, "str_max": 100, "sound": "crash!", "sound_fail": "whump!", "ter_set": "t_ice" } }, { @@ -272,7 +270,6 @@ "coverage": 100, "roof": "t_snow_roof", "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "NO_SCENT", "AUTO_WALL_SYMBOL", "MINEABLE", "BLOCK_WIND" ], - "connects_to": "WALL", "bash": { "str_min": 50, "str_max": 100, "sound": "crash!", "sound_fail": "whump!", "ter_set": "t_null", "bash_below": true } }, { diff --git a/data/mods/Aftershock/maps/furniture_and_terrain/terrain_habitat_wall.json b/data/mods/Aftershock/maps/furniture_and_terrain/terrain_habitat_wall.json index ed0b58eeb47cb..648f55093d546 100644 --- a/data/mods/Aftershock/maps/furniture_and_terrain/terrain_habitat_wall.json +++ b/data/mods/Aftershock/maps/furniture_and_terrain/terrain_habitat_wall.json @@ -8,7 +8,6 @@ "symbol": "LINE_XOXO", "looks_like": "t_wall_metal", "color": "light_gray", - "connects_to": "WALL", "move_cost": 0, "coverage": 100, "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "NO_SCENT", "AUTO_WALL_SYMBOL", "BLOCK_WIND" ], @@ -112,7 +111,7 @@ "color": "yellow", "description": "The glass panel that would have covered this porthole has been broken, allowing unfettered access to the rooms within.", "close": "t_wall_prefab_bglass_shutters", - "flags": [ "TRANSPARENT", "FLAMMABLE", "NOITEM", "MOUNTABLE", "CONNECT_TO_WALL", "SMALL_PASSAGE", "WINDOW" ], + "flags": [ "TRANSPARENT", "FLAMMABLE", "NOITEM", "MOUNTABLE", "CONNECT_WITH_WALL", "SMALL_PASSAGE", "WINDOW" ], "roof": "t_metal_flat_roof", "bash": { "str_min": 20, diff --git a/data/mods/Aftershock/maps/furniture_and_terrain/terrain_spaceship.json b/data/mods/Aftershock/maps/furniture_and_terrain/terrain_spaceship.json index 8466698e7eac3..ea38b73dc9f06 100644 --- a/data/mods/Aftershock/maps/furniture_and_terrain/terrain_spaceship.json +++ b/data/mods/Aftershock/maps/furniture_and_terrain/terrain_spaceship.json @@ -74,7 +74,7 @@ "symbol": "+", "color": "light_red", "open": "t_afs_space_ship_hatch_o", - "flags": [ "NOITEM", "DOOR", "CONNECT_TO_WALL", "MINEABLE" ], + "flags": [ "NOITEM", "DOOR", "CONNECT_WITH_WALL", "MINEABLE" ], "copy-from": "t_door_metal_lab_c", "bash": { "str_min": 200, @@ -101,7 +101,7 @@ "copy-from": "t_door_metal_lab_o", "symbol": "'", "color": "light_red", - "flags": [ "TRANSPARENT", "FLAT", "CONNECT_TO_WALL", "ROAD", "MINEABLE" ], + "flags": [ "TRANSPARENT", "FLAT", "CONNECT_WITH_WALL", "ROAD", "MINEABLE" ], "bash": { "str_min": 200, "str_max": 600, diff --git a/data/mods/CRT_EXPANSION/constructions/crt_terrain.json b/data/mods/CRT_EXPANSION/constructions/crt_terrain.json index 04d57a51c5a07..54158f0305bf9 100644 --- a/data/mods/CRT_EXPANSION/constructions/crt_terrain.json +++ b/data/mods/CRT_EXPANSION/constructions/crt_terrain.json @@ -8,7 +8,6 @@ "color": "brown_white", "move_cost": 0, "flags": [ "FLAMMABLE_HARD", "NOITEM", "SUPPORTS_ROOF", "WALL", "AUTO_WALL_SYMBOL" ], - "connects_to": "WALL", "bash": { "str_min": 4, "str_max": 12, diff --git a/data/mods/Magiclysm/terrain.json b/data/mods/Magiclysm/terrain.json index 02610694a78db..a58ad3193a943 100644 --- a/data/mods/Magiclysm/terrain.json +++ b/data/mods/Magiclysm/terrain.json @@ -47,6 +47,7 @@ "coverage": 100, "roof": "t_flat_roof", "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "AUTO_WALL_SYMBOL", "MINEABLE", "BLOCK_WIND" ], + "connect_groups": "WALL", "connects_to": "WALL" }, { @@ -124,7 +125,6 @@ "coverage": 100, "roof": "t_flat_roof", "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "NO_SCENT", "AUTO_WALL_SYMBOL", "BLOCK_WIND" ], - "connects_to": "WALL", "bash": { "str_min": 240, "str_max": 560, diff --git a/data/mods/My_Sweet_Cataclysm/sweet_mapgen/sweet_terrain.json b/data/mods/My_Sweet_Cataclysm/sweet_mapgen/sweet_terrain.json index 59f41893e2e67..d2bc99097fd29 100644 --- a/data/mods/My_Sweet_Cataclysm/sweet_mapgen/sweet_terrain.json +++ b/data/mods/My_Sweet_Cataclysm/sweet_mapgen/sweet_terrain.json @@ -8,6 +8,7 @@ "color": "light_blue", "move_cost": 5, "flags": [ "TRANSPARENT", "LIQUID", "NO_SCENT", "SWIMMABLE", "FISHABLE", "SHALLOW_WATER", "CHOCOLATE" ], + "connect_groups": "WATER", "connects_to": "WATER", "examine_action": "water_source" }, @@ -20,6 +21,7 @@ "color": "light_blue", "move_cost": 5, "flags": [ "TRANSPARENT", "LIQUID", "NO_SCENT", "SWIMMABLE", "FISHABLE", "CHOCOLATE" ], + "connect_groups": "WATER", "connects_to": "WATER", "examine_action": "water_source" }, diff --git a/data/mods/No_Hope/terrain.json b/data/mods/No_Hope/terrain.json index cbc04972f6e96..1489a1f455afb 100644 --- a/data/mods/No_Hope/terrain.json +++ b/data/mods/No_Hope/terrain.json @@ -269,6 +269,7 @@ "color": "red", "move_cost": 2, "roof": "t_flat_roof", + "connect_groups": "RAIL", "connects_to": "RAIL", "flags": [ "TRANSPARENT", "FLAMMABLE_HARD", "SUPPORTS_ROOF", "COLLAPSES", "INDOORS", "FLAT", "RUG" ], "bash": { @@ -291,6 +292,7 @@ "move_cost": 2, "light_emitted": 120, "roof": "t_flat_roof", + "connect_groups": "RAIL", "connects_to": "RAIL", "flags": [ "TRANSPARENT", "FLAMMABLE_HARD", "SUPPORTS_ROOF", "COLLAPSES", "INDOORS", "FLAT", "RUG" ], "bash": { @@ -313,6 +315,7 @@ "color": "light_gray", "move_cost": 2, "roof": "t_flat_roof", + "connect_groups": "RAIL", "connects_to": "RAIL", "flags": [ "TRANSPARENT", "INDOORS", "COLLAPSES", "SUPPORTS_ROOF", "FLAT", "ROAD" ], "bash": { "ter_set": "t_null", "str_min": 75, "str_max": 400, "str_min_supported": 100, "bash_below": true } @@ -327,6 +330,7 @@ "looks_like": "t_rock_floor", "move_cost": 2, "light_emitted": 120, + "connect_groups": "RAIL", "connects_to": "RAIL", "roof": "t_flat_roof", "flags": [ "TRANSPARENT", "INDOORS", "COLLAPSES", "SUPPORTS_ROOF", "FLAT", "ROAD" ], diff --git a/data/mods/Rummaging/modinfo.json b/data/mods/Rummaging/modinfo.json index a8c48136b4847..502b5f68bfa68 100644 --- a/data/mods/Rummaging/modinfo.json +++ b/data/mods/Rummaging/modinfo.json @@ -397,6 +397,7 @@ "HIDE_PLACE", "NO_SIGHT" ], + "connect_groups": "COUNTER", "connects_to": "COUNTER", "max_volume": "350 L", "examine_action": "workbench", @@ -410,6 +411,7 @@ "symbol": "#", "color": "blue", "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", "CONTAINER", "PLACE_ITEM", "ORGANIC", "MOUNTABLE", "FLAT_SURF", "SEALED" ], + "connect_groups": "COUNTER", "connects_to": "COUNTER", "max_volume": "350 L", "examine_action": "workbench", diff --git a/data/mods/Xedra_Evolved/furniture_and_terrain/terrain-doors.json b/data/mods/Xedra_Evolved/furniture_and_terrain/terrain-doors.json index 70040b1546d43..4f91c77bcbca2 100644 --- a/data/mods/Xedra_Evolved/furniture_and_terrain/terrain-doors.json +++ b/data/mods/Xedra_Evolved/furniture_and_terrain/terrain-doors.json @@ -30,7 +30,7 @@ "symbol": "'", "color": "light_gray", "move_cost": 2, - "flags": [ "TRANSPARENT", "FLAT", "CONNECT_TO_WALL", "ROAD" ], + "flags": [ "TRANSPARENT", "FLAT", "CONNECT_WITH_WALL", "ROAD" ], "close": "t_secretdoor_wall_c", "bash": { "str_min": 30, diff --git a/data/mods/innawood/furniture_and_terrain/terrain-floors-outdoors.json b/data/mods/innawood/furniture_and_terrain/terrain-floors-outdoors.json index d40182dc5c0d5..0ebbba229720f 100644 --- a/data/mods/innawood/furniture_and_terrain/terrain-floors-outdoors.json +++ b/data/mods/innawood/furniture_and_terrain/terrain-floors-outdoors.json @@ -3,6 +3,7 @@ "type": "terrain", "id": "t_pavement", "name": "pavement", + "connect_groups": "PAVEMENT", "connects_to": "PAVEMENT", "description": "A segment of asphalt, slowly degrading from cracks, frost heaves and lack of maintenance.", "symbol": ".", @@ -21,6 +22,7 @@ "type": "terrain", "id": "t_pavement_y", "name": "yellow pavement", + "connect_groups": "PAVEMENT", "connects_to": "PAVEMENT", "description": "Streaks of carefully aligned yellow paint mark the road to inform drivers not to cross. No one is enforcing these rules anymore.", "symbol": ".", diff --git a/doc/JSON_FLAGS.md b/doc/JSON_FLAGS.md index e6d88d435bf5e..68f8a0474f096 100644 --- a/doc/JSON_FLAGS.md +++ b/doc/JSON_FLAGS.md @@ -530,7 +530,7 @@ List of known flags, used in both `terrain.json` and `furniture.json`. - ```AMMOTYPE_RELOAD``` Furniture reloads by ammotype so player can choose from more than one fuel type. - ```AUTO_WALL_SYMBOL``` (only for terrain) The symbol of this terrain will be one of the line drawings (corner, T-intersection, straight line etc.) depending on the adjacent terrains. - Example: `-` and `|` are both terrain with the `CONNECT_TO_WALL` flag. `O` does not have the flag, while `X` and `Y` have the `AUTO_WALL_SYMBOL` flag. + Example: `-` and `|` are both terrain with the `CONNECT_WITH_WALL` flag. `O` does not have the flag, while `X` and `Y` have the `AUTO_WALL_SYMBOL` flag. `X` terrain will be drawn as a T-intersection (connected to west, south and east), `Y` will be drawn as horizontal line (going from west to east, no connection to south). ``` @@ -550,7 +550,7 @@ List of known flags, used in both `terrain.json` and `furniture.json`. - ```CAN_SIT``` Furniture the player can sit on. Player sitting near furniture with the `FLAT_SURF` tag will get mood bonus for eating. - ```CHIP``` Used in construction menu to determine if wall can have paint chipped off. - ```COLLAPSES``` Has a roof that can collapse. -- ```CONNECT_TO_WALL``` (only for terrain) This flag has been superseded by the JSON entry `connects_to`, but is retained for backward compatibility. +- ```CONNECT_WITH_WALL``` (only for terrain) This flag has been superseded by the JSON entries `connect_group` and `connects_to`, but is retained for backward compatibility. - ```CONSOLE``` Used as a computer. - ```CONTAINER``` Items on this square are hidden until looted by the player. - ```CURRENT``` This water is flowing. @@ -629,7 +629,7 @@ List of known flags, used in both `terrain.json` and `furniture.json`. - ```TRANSPARENT_FLOOR``` This terrain allows light to the z-level below. - ```UNSTABLE``` Walking here cause the bouldering effect on the character. - ```USABLE_FIRE``` This terrain or furniture counts as a nearby fire for crafting. -- ```WALL``` This terrain is an upright obstacle. Used for fungal conversion, and also implies `CONNECT_TO_WALL`. +- ```WALL``` This terrain is an upright obstacle. Used for fungal conversion, and also implies `CONNECT_WITH_WALL`. - ```WINDOW``` This terrain is a window, though it may be closed, broken, or covered up. Used by the tiles code to align furniture sprites away from the window. - ```WIRED_WALL``` This terrain is a wall with electric wires inside. Allows the `Reveal wall wirings` construction. - ```WORKOUT_LEGS``` This furniture is for training your legs. Needed for checks like `is_limb_broken()`. diff --git a/doc/JSON_INFO.md b/doc/JSON_INFO.md index 04c0047955510..94d60ecf760a6 100644 --- a/doc/JSON_INFO.md +++ b/doc/JSON_INFO.md @@ -184,9 +184,9 @@ Use the `Home` key to return to the top. - [`id`](#id-1) - [`name`](#name-1) - [`flags`](#flags-1) + - [`connect_groups`](#connect_groups) - [`connects_to`](#connects_to) - - [Connect groups](#connect-groups) - - [`rotates_to` and `rotates_to_member`](#rotates_to-and-rotates_to_member) + - [`rotates_to`](#rotates_to) - [`symbol`](#symbol) - [`comfort`](#comfort) - [`floor_bedding_warmth`](#floor_bedding_warmth) @@ -4373,9 +4373,9 @@ Strength required to move the furniture around. Negative values indicate an unmo "trap": "spike_pit", "max_volume": "1000 L", "flags": ["TRANSPARENT", "DIGGABLE"], - "connects_to" : "WALL", - "rotates_to" : "INDOORFLOOR", - "rotates_to_member" : "INDOORFLOOR", + "connect_groups" : [ "WALL" ], + "connects_to" : [ "WALL" ], + "rotates_to" : [ "INDOORFLOOR" ], "close": "t_foo_closed", "open": "t_foo_open", "lockpick_result": "t_door_unlocked", @@ -4580,13 +4580,16 @@ Displayed name of the object. This will be translated. (Optional) Various additional flags, see "doc/JSON_FLAGS.md". -#### `connects_to` +#### `connect_groups` -(Optional) The group of terrains to which this terrain connects. This affects tile rotation and connections, and the ASCII symbol drawn by terrain with the flag "AUTO_WALL_SYMBOL". +(Optional) Makes the type a member of one or more [Connect groups](#connect-groups). + +Does not make the type connect or rotate itself, but serves as the passive side. +For the active, connecting or rotating side, see [`connects_to`](#connects_to) and [`rotates_to`](#rotates_to). Available groups are: -##### Connect groups +##### Connection groups ``` NONE PIT_DEEP @@ -4603,25 +4606,35 @@ CANVAS_WALL INDOORFLOOR SAND ``` -Example: `-` , `|` , `X` and `Y` are terrain which share the same `connects_to` value. `O` does not have it. `X` and `Y` also have the `AUTO_WALL_SYMBOL` flag. `X` will be drawn as a T-intersection (connected to west, south and east), `Y` will be drawn as a horizontal line (going from west to east, no connection to south). +`WALL` is implied by the flags `WALL` and `CONNECT_WITH_WALL`. +`INDOORFLOOR` is implied by the flag `INDOORS`. +Implicit groups can be removed be using tilde `~` as prefix of the group name. + +#### `connects_to` and + +(Optional) Makes the type connect to terrain types in the given groups (see [`connect_groups`](#connect_groups)). This affects tile rotation and connections, and the ASCII symbol drawn by terrain with the flag "AUTO_WALL_SYMBOL". + +Example: `-` , `|` , `X` and `Y` are terrain which share a group in `connect_groups` and `connects_to`. `O` does not have it. `X` and `Y` also have the `AUTO_WALL_SYMBOL` flag. `X` will be drawn as a T-intersection (connected to west, south and east), `Y` will be drawn as a horizontal line (going from west to east, no connection to south). ``` -X- -Y- | O ``` -#### `rotates_to` and `rotates_to_member` +Group `WALL` is implied by the flags `WALL` and `CONNECT_WITH_WALL`. +Implicit groups can be removed be using tilde `~` as prefix of the group name. + +#### `rotates_to` -(Optional) `rotates_to` specifies the group of terrain (or furniture) towards which this terrain (or furniture) rotates. -`rotates_to_member` adds the terrain (or furniture) to a group, as rotation target. -See [Connect groups](#Connect-groups) for available values. +(Optional) Makes the type rotate towards terrain types in the given groups (see [`connect_groups`](#connect_groups)). -In contrast to `connects_to`, this is not symmetric. -Only the terrain or furniture with `rotates_to` will rotate. Terrain can only rotate depending on terrain, while funiture can rotate depending on terrain and on other funiture. The parameters can e.g. be used to have window curtains on the indoor side only, or to orient traffic lights depending on the pavement. +Group `INDOORFLOOR` is implied by the flags `DOOR` and `WINDOW`. +Implicit groups can be removed be using tilde `~` as prefix of the group name. + #### `symbol` ASCII symbol of the object as it appears in the game. The symbol string must be exactly one character long. This can also be an array of 4 strings, which define the symbol during the different seasons. The first entry defines the symbol during spring. If it's not an array, the same symbol is used all year round. diff --git a/doc/TILESET.md b/doc/TILESET.md index 513b1b9dc93c1..55e0a57340722 100644 --- a/doc/TILESET.md +++ b/doc/TILESET.md @@ -123,23 +123,31 @@ You can add `"rotates": true` to allow sprites to be rotated by the game automat `"multitile": true` signifies that there is an `additional_tiles` object (redundant? [probably](https://github.com/CleverRaven/Cataclysm-DDA/issues/46253)) with one or more objects that define sprites for game entities associated with this tile, such as broken versions of an item, or wall connections. Each object in the array has an `id` field, as above, and an `fg` field, which can be a single [root name](#root-name), an array of root names, or an array of objects as above. `"rotates": true` is implied with it and can be omitted. -#### Connecting terrain and furniture - `connects_to` +#### Connecting terrain and furniture - `connect_groups` and `connects_to` -For terrain or furniture that is intended to auto-connect using multitiles, set the property `connects_to` in the object definition (not in the tileset!) to an appropriate group: +For terrain or furniture that is intended to auto-connect using multitiles, set the properties `connect_groups` and `connects_to` in the object definition (not in the tileset!) to an appropriate group: ```json { "type": "terrain", "id": "t_brick_wall", ... + "connect_groups": "WALL", "connects_to": "WALL", ... } ``` -For details, see [JSON_INFO.md](./JSON_INFO.md#connects_to). +For both properties, arrays of multiple groups are possible. + +`connect_groups` adds the type to one or more groups, while `connects_to` makes the type connect to the given group(s). + +Connections are only set up from types that have a `connects_to` group to types that have the same group in `connect_groups`. + +For details, see JSON_INFO.md, sections [`connect_groups`](./JSON_INFO.md#connect_groups) and [`connects_to`](./JSON_INFO.md#connects_to). + +Wall work out of the box without modifying terrain definitions, as the required group `WALL` is implied by the flags `WALL` and `CONNECT_WITH_WALL` for `connect_groups` as well as `connects_to` (i.e. symmetric relation). -Connections are only set up between types that have the same `connects_to` group, so it is symmetric or bi-directional. Available groups are: ##### Connect groups @@ -212,17 +220,16 @@ In JSON, the multitile would be defined like this: #### Auto-rotating terrain and furniture - `rotates_to` Terrain and furniture can auto-rotate depending on other surrounding terrain or furniture using `rotates_to`. -For details, see [JSON_INFO.md](./JSON_INFO.md#rotates_to-and-rotates_to_member). +For details, see JSON_INFO.md, sections [`connect_groups`](./JSON_INFO.md#connect_groups) and [`rotates_to`](./JSON_INFO.md#rotates_to). Usage examples for terrain are doors and windows that look differently, seen from inside and outside (e.g. curtain). An example for furniture are street lights that orient towards the pavement. -The mechanism works similar to `connects_to`, and can be combined with it. -It makes also use of the same [Connect groups](#connect-groups). -Currently, however, auto-rotation is implemented only for `edge` and `end_piece` tiles (doors, windows) and `unconnected` tiles (e.g. street lights). +The mechanism works like to `connects_to`, and can be combined with it. +It also makes use of the same [Connect groups](#connect-groups), given by property `connect_groups`. +Currently, however, auto-rotation is implemented only for `edge` and `end_piece` tiles (doors, windows, furniture) and `unconnected` tiles (e.g. street lights). -Unlike `connects_to`, `rotates_to` is not symmetric. For the active/rotating type, `rotates_to` specifies a [Connect group](#connect-groups) the terrain should rotate towards (or rather, depend on). -For the passive/target type, `rotates_to_member` is used to add it to a [Connect group](#connect-groups). (The `connects_to` mechanism is not affected by setting groups this way.) +For the passive/target type, `connect_groups` is used to add it to a [Connect group](#connect-groups). Terrain can only use terrain to rotate towards, while furniture can use both, terrain and furniture. @@ -279,7 +286,7 @@ The full multitile would be defined like this: The order of sprites ensures that the multitile also works with only the first 4 instead of all 8 sprites. It also makes it compatible with tilesets that don't use the `rotates_to` feature. -Doors and windows work out of the box without modifying terrain definitions, as the required group `INDOORFLOOR` is implied by the flags `WINDOW`, `DOOR` (active) and `INDOORS` (target). +Doors and windows work out of the box without modifying terrain definitions, as the required group `INDOORFLOOR` is implied by the flags `WINDOW`, `DOOR` (active) and `INDOORS` (target/passive). ##### Unconnected `rotates_to` diff --git a/src/cata_tiles.cpp b/src/cata_tiles.cpp index 7ebf805de7b27..31ab182e219b6 100644 --- a/src/cata_tiles.cpp +++ b/src/cata_tiles.cpp @@ -2737,10 +2737,10 @@ bool cata_tiles::draw_terrain( const tripoint &p, const lit_level ll, int &heigh if( t && !invisible[0] ) { int subtile = 0; int rotation = 0; - int connect_group = 0; - int rotate_group = t.obj().rotate_to_group; + const std::bitset &connect_group = t.obj().connect_to_groups; + const std::bitset &rotate_group = t.obj().rotate_to_groups; - if( t.obj().connects( connect_group ) ) { + if( connect_group.any() ) { get_connect_values( p, subtile, rotation, connect_group, rotate_group, {} ); // re-memorize previously seen terrain in case new connections have been seen here.set_memory_seen_cache_dirty( p ); @@ -2766,10 +2766,10 @@ bool cata_tiles::draw_terrain( const tripoint &p, const lit_level ll, int &heigh // of the tile, so always re-calculate it. int subtile = 0; int rotation = 0; - int connect_group = 0; - int rotate_group = t2.obj().rotate_to_group; + const std::bitset &connect_group = t2.obj().connect_to_groups; + const std::bitset &rotate_group = t2.obj().rotate_to_groups; - if( t2.obj().connects( connect_group ) ) { + if( connect_group.any() ) { get_connect_values( p, subtile, rotation, connect_group, rotate_group, terrain_override ); } else { get_terrain_orientation( p, rotation, subtile, terrain_override, invisible, rotate_group ); @@ -2925,10 +2925,10 @@ bool cata_tiles::draw_furniture( const tripoint &p, const lit_level ll, int &hei }; int subtile = 0; int rotation = 0; - int connect_group = 0; - int rotate_group = f.obj().rotate_to_group; + const std::bitset &connect_group = f.obj().connect_to_groups; + const std::bitset &rotate_group = f.obj().rotate_to_groups; - if( f.obj().connects( connect_group ) ) { + if( connect_group.any() ) { get_furn_connect_values( p, subtile, rotation, connect_group, rotate_group, {} ); } else { get_tile_values_with_ter( p, f.to_i(), neighborhood, subtile, rotation, rotate_group ); @@ -2964,10 +2964,10 @@ bool cata_tiles::draw_furniture( const tripoint &p, const lit_level ll, int &hei }; int subtile = 0; int rotation = 0; - int connect_group = 0; - int rotate_group = f.obj().rotate_to_group; + const std::bitset &connect_group = f.obj().connect_to_groups; + const std::bitset &rotate_group = f.obj().rotate_to_groups; - if( f.obj().connects( connect_group ) ) { + if( connect_group.any() ) { get_furn_connect_values( p, subtile, rotation, connect_group, rotate_group, {} ); } else { get_tile_values_with_ter( p, f.to_i(), neighborhood, subtile, rotation, rotate_group ); @@ -4298,7 +4298,7 @@ void cata_tiles::init_light() void cata_tiles::get_terrain_orientation( const tripoint &p, int &rota, int &subtile, const std::map &ter_override, const std::array &invisible, - const int rotate_group ) + const std::bitset &rotate_group ) { map &here = get_map(); const bool overridden = ter_override.find( p ) != ter_override.end(); @@ -4574,7 +4574,8 @@ int cata_tiles::get_rotation_unconnected( const char rot_to ) } void cata_tiles::get_connect_values( const tripoint &p, int &subtile, int &rotation, - const int connect_group, const int rotate_to_group, + const std::bitset &connect_group, + const std::bitset &rotate_to_group, const std::map &ter_override ) { uint8_t connections = get_map().get_known_connections( p, connect_group, ter_override ); @@ -4583,8 +4584,8 @@ void cata_tiles::get_connect_values( const tripoint &p, int &subtile, int &rotat } void cata_tiles::get_furn_connect_values( const tripoint &p, int &subtile, int &rotation, - const int connect_group, const int rotate_to_group, const std::map &furn_override ) + const std::bitset &connect_group, const std::bitset &rotate_to_group, + const std::map &furn_override ) { uint8_t connections = get_map().get_known_connections_f( p, connect_group, furn_override ); uint8_t rotation_targets = get_map().get_known_rotates_to_f( p, rotate_to_group, {}, {} ); @@ -4607,7 +4608,7 @@ void cata_tiles::get_tile_values( const int t, const std::array &tn, int void cata_tiles::get_tile_values_with_ter( const tripoint &p, const int t, const std::array &tn, int &subtile, int &rotation, - const int rotate_to_group ) + const std::bitset &rotate_to_group ) { map &here = get_map(); uint8_t rotation_targets = get_map().get_known_rotates_to_f( p, rotate_to_group, {} ); @@ -4672,7 +4673,7 @@ void cata_tiles::get_tile_values_with_ter( case 11: // south opening T case 15: // surrounded default: // just in case - rotation = rotate_to_group == TERCONN_NONE ? 0 : 15; + rotation = rotate_to_group.none() ? 0 : 15; break; } diff --git a/src/cata_tiles.h b/src/cata_tiles.h index f3d53d8fdbc4f..15b092e3602bc 100644 --- a/src/cata_tiles.h +++ b/src/cata_tiles.h @@ -18,6 +18,7 @@ #include "lightmap.h" #include "line.h" #include "map_memory.h" +#include "mapdata.h" #include "options.h" #include "pimpl.h" #include "point.h" @@ -454,15 +455,20 @@ class cata_tiles char rotation_targets ); // as get_tile_values, but for unconnected tiles, infer rotation from surrounding walls void get_tile_values_with_ter( const tripoint &p, int t, const std::array &tn, - int &subtile, int &rotation, int rotate_to_group ); - static void get_connect_values( const tripoint &p, int &subtile, int &rotation, int connect_group, - int rotate_to_group, const std::map &ter_override ); + int &subtile, int &rotation, + const std::bitset &rotate_to_group ); + static void get_connect_values( const tripoint &p, int &subtile, int &rotation, + const std::bitset &connect_group, + const std::bitset &rotate_to_group, + const std::map &ter_override ); static void get_furn_connect_values( const tripoint &p, int &subtile, int &rotation, - int connect_group, int rotate_to_group, + const std::bitset &connect_group, + const std::bitset &rotate_to_group, const std::map &furn_override ); void get_terrain_orientation( const tripoint &p, int &rota, int &subtile, const std::map &ter_override, - const std::array &invisible, int rotate_group ); + const std::array &invisible, + const std::bitset &rotate_group ); static void get_rotation_and_subtile( char val, char rot_to, int &rota, int &subtile ); static int get_rotation_unconnected( char rot_to ); diff --git a/src/flexbuffer_json-inl.h b/src/flexbuffer_json-inl.h index 5ba8b330c5ccf..7b20e79612fde 100644 --- a/src/flexbuffer_json-inl.h +++ b/src/flexbuffer_json-inl.h @@ -949,6 +949,20 @@ inline std::vector JsonObject::get_string_array( const std::string } return ret; } +inline std::vector JsonObject::get_as_string_array( const std::string &name ) const +{ + std::vector ret; + if( has_array( name ) ) { + JsonArray ja = get_array( name ); + ret.reserve( ja.size() ); + for( JsonValue jv : get_array( name ) ) { + ret.emplace_back( jv ); + } + } else { + ret.emplace_back( get_string( name ) ); + } + return ret; +} inline bool JsonObject::has_member( const std::string &key ) const { diff --git a/src/flexbuffer_json.h b/src/flexbuffer_json.h index 20087c4e953c3..f2462b1f91ee9 100644 --- a/src/flexbuffer_json.h +++ b/src/flexbuffer_json.h @@ -629,6 +629,7 @@ class JsonObject : JsonWithPath // Sigh. std::vector get_int_array( const std::string &name ) const; std::vector get_string_array( const std::string &name ) const; + std::vector get_as_string_array( const std::string &name ) const; bool has_member( const std::string &key ) const; bool has_member( const char *key ) const; diff --git a/src/json.cpp b/src/json.cpp index df41f282d48fd..204f08042f8b8 100644 --- a/src/json.cpp +++ b/src/json.cpp @@ -412,6 +412,19 @@ std::vector TextJsonObject::get_string_array( const std::string &na return ret; } +std::vector TextJsonObject::get_as_string_array( const std::string &name ) const +{ + std::vector ret; + if( has_array( name ) ) { + for( const std::string entry : get_array( name ) ) { + ret.push_back( entry ); + } + } else { + ret.push_back( get_string( name ) ); + } + return ret; +} + TextJsonObject TextJsonObject::get_object( const std::string &name ) const { int pos = verify_position( name, false ); diff --git a/src/json.h b/src/json.h index 14029944f8117..12ed6a4b46b22 100644 --- a/src/json.h +++ b/src/json.h @@ -1101,6 +1101,8 @@ class TextJsonObject TextJsonArray get_array( const std::string &name ) const; std::vector get_int_array( const std::string &name ) const; std::vector get_string_array( const std::string &name ) const; + // returns a single element array if the sype is string instead of array + std::vector get_as_string_array( const std::string &name ) const; // get_object returns empty object if not found TextJsonObject get_object( const std::string &name ) const; diff --git a/src/map.cpp b/src/map.cpp index 40b38339f504f..602173139902c 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -1763,10 +1763,11 @@ ter_id map::ter( const tripoint_bub_ms &p ) const return ter( p.raw() ); } -uint8_t map::get_known_connections( const tripoint &p, int connect_group, +uint8_t map::get_known_connections( const tripoint &p, + const std::bitset &connect_group, const std::map &override ) const { - if( connect_group == TERCONN_NONE ) { + if( connect_group.none() ) { return 0; } @@ -1810,7 +1811,7 @@ uint8_t map::get_known_connections( const tripoint &p, int connect_group, if( may_connect ) { const ter_t &neighbour_terrain = neighbour_overridden ? neighbour_override->second.obj() : ter( neighbour ).obj(); - if( neighbour_terrain.connects_to( connect_group ) ) { + if( neighbour_terrain.in_connect_groups( connect_group ) ) { val += 1 << i; } } @@ -1819,10 +1820,11 @@ uint8_t map::get_known_connections( const tripoint &p, int connect_group, return val; } -uint8_t map::get_known_rotates_to( const tripoint &p, int rotate_to_group, +uint8_t map::get_known_rotates_to( const tripoint &p, + const std::bitset &rotate_to_group, const std::map &override ) const { - if( rotate_to_group == TERCONN_NONE ) { + if( rotate_to_group.none() ) { return CHAR_MAX; } @@ -1839,7 +1841,7 @@ uint8_t map::get_known_rotates_to( const tripoint &p, int rotate_to_group, const ter_t &neighbour_terrain = neighbour_overridden ? neighbour_override->second.obj() : ter( neighbour ).obj(); - if( neighbour_terrain.in_rotates_to( rotate_to_group ) ) { + if( neighbour_terrain.in_connect_groups( rotate_to_group ) ) { val += 1 << i; } } @@ -1847,10 +1849,11 @@ uint8_t map::get_known_rotates_to( const tripoint &p, int rotate_to_group, return val; } -uint8_t map::get_known_connections_f( const tripoint &p, int connect_group, +uint8_t map::get_known_connections_f( const tripoint &p, + const std::bitset &connect_group, const std::map &override ) const { - if( connect_group == TERCONN_NONE ) { + if( connect_group.none() ) { return 0; } @@ -1894,7 +1897,7 @@ uint8_t map::get_known_connections_f( const tripoint &p, int connect_group, if( may_connect ) { const furn_t &neighbour_furn = neighbour_overridden ? neighbour_override->second.obj() : furn( pt ).obj(); - if( neighbour_furn.connects_to( connect_group ) ) { + if( neighbour_furn.in_connect_groups( connect_group ) ) { val += 1 << i; } } @@ -1903,11 +1906,12 @@ uint8_t map::get_known_connections_f( const tripoint &p, int connect_group, return val; } -uint8_t map::get_known_rotates_to_f( const tripoint &p, int rotate_to_group, +uint8_t map::get_known_rotates_to_f( const tripoint &p, + const std::bitset &rotate_to_group, const std::map &override, const std::map &override_f ) const { - if( rotate_to_group == TERCONN_NONE ) { + if( rotate_to_group.none() ) { return CHAR_MAX; } @@ -1931,7 +1935,8 @@ uint8_t map::get_known_rotates_to_f( const tripoint &p, int rotate_to_group, const furn_t &neighbour_f = neighbour_overridden_f ? neighbour_override_f->second.obj() : furn( pt ).obj(); - if( neighbour.in_rotates_to( rotate_to_group ) || neighbour_f.in_rotates_to( rotate_to_group ) ) { + if( neighbour.in_connect_groups( rotate_to_group ) || + neighbour_f.in_connect_groups( rotate_to_group ) ) { val += 1 << i; } } @@ -8562,7 +8567,7 @@ bool map::has_graffiti_at( const tripoint &p ) const int map::determine_wall_corner( const tripoint &p ) const { - int test_connect_group = ter( p ).obj().connect_group; + const std::bitset &test_connect_group = ter( p ).obj().connect_to_groups; uint8_t connections = get_known_connections( p, test_connect_group ); // The bits in connections are SEWN, whereas the characters in LINE_ // constants are NESW, so we want values in 8 | 2 | 1 | 4 order. diff --git a/src/map.h b/src/map.h index d6012c51dd1d1..0caa1e68a8c91 100644 --- a/src/map.h +++ b/src/map.h @@ -805,10 +805,10 @@ class map // terrain. Additional overrides can be passed in to override terrain // at specific positions. This is used to display terrain overview in // the map editor. - uint8_t get_known_connections( const tripoint &p, int connect_group, + uint8_t get_known_connections( const tripoint &p, const std::bitset &connect_group, const std::map &override = {} ) const; // as above, but for furniture - uint8_t get_known_connections_f( const tripoint &p, int connect_group, + uint8_t get_known_connections_f( const tripoint &p, const std::bitset &connect_group, const std::map &override = {} ) const; // Return a bitfield of the adjacent tiles which rotate towards the given @@ -818,10 +818,10 @@ class map // Based on the true terrain. // Additional overrides can be passed in to override terrain // at specific positions. - uint8_t get_known_rotates_to( const tripoint &p, int rotate_to_group, + uint8_t get_known_rotates_to( const tripoint &p, const std::bitset &rotate_to_group, const std::map &override = {} ) const; // as above, but for furniture (considers neighbouring terrain and furniture) - uint8_t get_known_rotates_to_f( const tripoint &p, int rotate_to_group, + uint8_t get_known_rotates_to_f( const tripoint &p, const std::bitset &rotate_to_group, const std::map &override = {}, const std::map &override_f = {} ) const; diff --git a/src/mapdata.cpp b/src/mapdata.cpp index 66dd8fd6482ae..97ccb677fb272 100644 --- a/src/mapdata.cpp +++ b/src/mapdata.cpp @@ -174,7 +174,7 @@ std::string enum_to_string( ter_furn_flag data ) case ter_furn_flag::TFLAG_HARVESTED: return "HARVESTED"; case ter_furn_flag::TFLAG_PERMEABLE: return "PERMEABLE"; case ter_furn_flag::TFLAG_AUTO_WALL_SYMBOL: return "AUTO_WALL_SYMBOL"; - case ter_furn_flag::TFLAG_CONNECT_TO_WALL: return "CONNECT_TO_WALL"; + case ter_furn_flag::TFLAG_CONNECT_WITH_WALL: return "CONNECT_WITH_WALL"; case ter_furn_flag::TFLAG_CLIMBABLE: return "CLIMBABLE"; case ter_furn_flag::TFLAG_GOES_DOWN: return "GOES_DOWN"; case ter_furn_flag::TFLAG_GOES_UP: return "GOES_UP"; @@ -267,13 +267,14 @@ std::string enum_to_string( ter_furn_flag data ) } // namespace io static const std::unordered_map ter_connects_map = { { - { "WALL", TERCONN_WALL }, // implied for connects_to by ter_furn_flag::TFLAG_CONNECT_TO_WALL, ter_furn_flag::TFLAG_AUTO_WALL_SYMBOL or ter_furn_flag::TFLAG_WALL + { "WALL", TERCONN_WALL }, // implied for connects_to by ter_furn_flag::TFLAG_CONNECT_WITH_WALL, ter_furn_flag::TFLAG_AUTO_WALL_SYMBOL or ter_furn_flag::TFLAG_WALL { "CHAINFENCE", TERCONN_CHAINFENCE }, { "WOODFENCE", TERCONN_WOODFENCE }, { "RAILING", TERCONN_RAILING }, { "WATER", TERCONN_WATER }, { "POOLWATER", TERCONN_POOLWATER }, { "PAVEMENT", TERCONN_PAVEMENT }, + { "PAVEMENT_MARKING", TERCONN_PAVEMENT_MARKING }, { "RAIL", TERCONN_RAIL }, { "COUNTER", TERCONN_COUNTER }, { "CANVAS_WALL", TERCONN_CANVAS_WALL }, @@ -628,16 +629,17 @@ void map_data_common_t::extraprocess_flags( const ter_furn_flag flag ) transparent = true; } // wall connection check for JSON backwards compatibility - if( flag == ter_furn_flag::TFLAG_WALL || flag == ter_furn_flag::TFLAG_CONNECT_TO_WALL ) { - set_connects( "WALL" ); + if( flag == ter_furn_flag::TFLAG_WALL || flag == ter_furn_flag::TFLAG_CONNECT_WITH_WALL ) { + set_connect_groups( { "WALL" } ); + set_connects_to( { "WALL" } ); } // rotates_to check for JSON backwards compatibility if( flag == ter_furn_flag::TFLAG_WINDOW || flag == ter_furn_flag::TFLAG_DOOR ) { - set_rotates_to( "INDOORFLOOR" ); + set_rotates_to( { "INDOORFLOOR" } ); } // rotates_to_member check for JSON backwards compatibility if( flag == ter_furn_flag::TFLAG_INDOORS ) { - set_rotates_to_member( "INDOORFLOOR" ); + set_connect_groups( { "INDOORFLOOR" } ); } } @@ -658,52 +660,47 @@ void map_data_common_t::set_flag( const ter_furn_flag flag ) extraprocess_flags( flag ); } -void map_data_common_t::set_connects( const std::string &connect_group_string ) +void map_data_common_t::set_connect_groups( const std::vector + &connect_groups_vec ) { - const auto it = ter_connects_map.find( connect_group_string ); - if( it != ter_connects_map.end() ) { - connect_group = it->second; - } else { // arbitrary connect groups are a bad idea for optimization reasons - debugmsg( "can't find terrain connection group %s", connect_group_string.c_str() ); - } + set_groups( connect_groups, connect_groups_vec ); } -void map_data_common_t::set_rotates_to( const std::string &towards_group_string ) +void map_data_common_t::set_connects_to( const std::vector &connect_groups_vec ) { - const auto it = ter_connects_map.find( towards_group_string ); - if( it != ter_connects_map.end() ) { - rotate_to_group = it->second; - } else { // arbitrary rotates towards groups are a bad idea for optimization reasons - debugmsg( "can't find terrain rotates towards group %s", towards_group_string.c_str() ); - } + set_groups( connect_to_groups, connect_groups_vec ); } -void map_data_common_t::set_rotates_to_member( const std::string &towards_group_string ) +void map_data_common_t::set_rotates_to( const std::vector &connect_groups_vec ) { - const auto it = ter_connects_map.find( towards_group_string ); - if( it != ter_connects_map.end() ) { - rotate_to_group_member = it->second; - } else { // arbitrary rotates towards groups are a bad idea for optimization reasons - debugmsg( "can't find terrain rotates towards group %s", towards_group_string.c_str() ); - } + set_groups( rotate_to_groups, connect_groups_vec ); } -bool map_data_common_t::connects( int &ret ) const +void map_data_common_t::set_groups( std::bitset &bits, + const std::vector &connect_groups_vec ) { - if( connect_group != TERCONN_NONE ) { - ret = connect_group; - return true; - } - return false; -} - -bool map_data_common_t::rotates( int &ret ) const -{ - if( rotate_to_group != TERCONN_NONE ) { - ret = rotate_to_group; - return true; + for( const std::string &group : connect_groups_vec ) { + if( group.empty() ) { + debugmsg( "Can't use empty string for terrain groups" ); + continue; + } + std::string grp = group; + bool remove = false; + if( grp.at( 0 ) == '~' ) { + grp = grp.substr( 1 ); + remove = true; + } + const auto it = ter_connects_map.find( grp ); + if( it != ter_connects_map.end() ) { + if( remove ) { + bits.reset( it->second ); + } else { + bits.set( it->second ); + } + } else { + debugmsg( "can't find terrain group %s", group.c_str() ); + } } - return false; } ter_id t_null, @@ -1419,24 +1416,24 @@ void ter_t::load( const JsonObject &jo, const std::string &src ) trap = tr_null; transparent = false; - connect_group = TERCONN_NONE; - rotate_to_group = TERCONN_NONE; - rotate_to_group_member = TERCONN_NONE; + connect_groups.reset(); + connect_to_groups.reset(); + rotate_to_groups.reset(); for( auto &flag : jo.get_string_array( "flags" ) ) { set_flag( flag ); } - // connect_group is initialized to none, then terrain flags are set, then finally + // connect_to_groups is initialized to none, then terrain flags are set, then finally // connections from JSON are set. This is so that wall flags can set wall connections // but can be overridden by explicit connections in JSON. + if( jo.has_member( "connect_groups" ) ) { + set_connect_groups( jo.get_as_string_array( "connect_groups" ) ); + } if( jo.has_member( "connects_to" ) ) { - set_connects( jo.get_string( "connects_to" ) ); + set_connects_to( jo.get_as_string_array( "connects_to" ) ); } if( jo.has_member( "rotates_to" ) ) { - set_rotates_to( jo.get_string( "rotates_to" ) ); - } - if( jo.has_member( "rotates_to_member" ) ) { - set_rotates_to_member( jo.get_string( "rotates_to_member" ) ); + set_rotates_to( jo.get_as_string_array( "rotates_to" ) ); } optional( jo, was_loaded, "allowed_template_ids", allowed_template_id ); @@ -1597,21 +1594,22 @@ void furn_t::load( const JsonObject &jo, const std::string &src ) optional( jo, was_loaded, "light_emitted", light_emitted ); // see the comment in ter_id::load for connect_group handling - connect_group = TERCONN_NONE; - rotate_to_group = TERCONN_NONE; - rotate_to_group_member = TERCONN_NONE; + connect_groups.reset(); + connect_to_groups.reset(); + rotate_to_groups.reset(); + for( auto &flag : jo.get_string_array( "flags" ) ) { set_flag( flag ); } + if( jo.has_member( "connect_groups" ) ) { + set_connect_groups( jo.get_as_string_array( "connect_groups" ) ); + } if( jo.has_member( "connects_to" ) ) { - set_connects( jo.get_string( "connects_to" ) ); + set_connects_to( jo.get_as_string_array( "connects_to" ) ); } if( jo.has_member( "rotates_to" ) ) { - set_rotates_to( jo.get_string( "rotates_to" ) ); - } - if( jo.has_member( "rotates_to_member" ) ) { - set_rotates_to_member( jo.get_string( "rotates_to_member" ) ); + set_rotates_to( jo.get_as_string_array( "rotates_to" ) ); } optional( jo, was_loaded, "open", open, string_id_reader {}, furn_str_id::NULL_ID() ); diff --git a/src/mapdata.h b/src/mapdata.h index c76033bd47818..82342539f4365 100644 --- a/src/mapdata.h +++ b/src/mapdata.h @@ -219,7 +219,7 @@ enum class ter_furn_flag : int { TFLAG_HARVESTED, TFLAG_PERMEABLE, TFLAG_AUTO_WALL_SYMBOL, - TFLAG_CONNECT_TO_WALL, + TFLAG_CONNECT_WITH_WALL, TFLAG_CLIMBABLE, TFLAG_GOES_DOWN, TFLAG_GOES_UP, @@ -323,6 +323,7 @@ enum ter_connects : int { TERCONN_POOLWATER, TERCONN_WATER, TERCONN_PAVEMENT, + TERCONN_PAVEMENT_MARKING, TERCONN_RAIL, TERCONN_COUNTER, TERCONN_CANVAS_WALL, @@ -338,6 +339,8 @@ enum ter_connects : int { TERCONN_METALFLOOR, TERCONN_WOODFLOOR, TERCONN_INDOORFLOOR, + + NUM_TERCONN }; struct activity_byproduct { @@ -539,30 +542,26 @@ struct map_data_common_t { void set_flag( ter_furn_flag flag ); - // Terrain group to connects with; symmetric relation (i.e. both neighbours have the same value) - int connect_group = 0; - // Terrain group rotate towards; not symmetric, target of active part - int rotate_to_group = 0; - // Terrain group of this type, for others to rotate towards; not symmetric, passive part - int rotate_to_group_member = 0; - - // Set connection group - void set_connects( const std::string &connect_group_string ); + // Terrain groups of this type, for others to connect or rotate to; not symmetric, passive part + std::bitset connect_groups; + // Terrain groups to connect to; not symmetric, target of active part + std::bitset connect_to_groups; + // Terrain groups rotate towards; not symmetric, target of active part + std::bitset rotate_to_groups; + + // Set to be member of a connection target group + void set_connect_groups( const std::vector &connect_groups_vec ); + // Set target connection group + void set_connects_to( const std::vector &connect_groups_vec ); // Set target group to rotate towards - void set_rotates_to( const std::string &towards_group_string ); - // Set to be member of a rotation target group - void set_rotates_to_member( const std::string &towards_group_string ); + void set_rotates_to( const std::vector &connect_groups_vec ); - bool connects( int &ret ) const; - bool rotates( int &ret ) const; - - bool connects_to( int test_connect_group ) const { - return connect_group != TERCONN_NONE && connect_group == test_connect_group; - } + // Set groups helper function + void set_groups( std::bitset &bits, + const std::vector &connect_groups_vec ); - // Tests if the type is a member of a rotares_towards group - bool in_rotates_to( int test_rotates_group ) const { - return rotate_to_group_member != TERCONN_NONE && rotate_to_group_member == test_rotates_group; + bool in_connect_groups( const std::bitset &test_connect_group ) const { + return ( connect_groups & test_connect_group ).any(); } int symbol() const; diff --git a/tests/connect_rotate_test.cpp b/tests/connect_rotate_test.cpp index 0d79e61c405fc..7ebbfc6ba2b5b 100644 --- a/tests/connect_rotate_test.cpp +++ b/tests/connect_rotate_test.cpp @@ -14,7 +14,8 @@ class cata_tiles_test_helper { public: static void get_connect_values( const tripoint &p, int &subtile, int &rotation, - int connect_group, int rotate_to_group ) { + const std::bitset &connect_group, + const std::bitset &rotate_to_group ) { cata_tiles::get_connect_values( p, subtile, rotation, connect_group, rotate_to_group, {} ); } }; @@ -25,6 +26,10 @@ TEST_CASE( "walls should be unconnected without nearby walls", "[multitile][conn clear_map(); clear_avatar(); + std::bitset none; + std::bitset wall; + wall.set( TERCONN_WALL ); + tripoint pos = get_avatar().pos() + point_east + point_east; int subtile = 0; @@ -38,8 +43,8 @@ TEST_CASE( "walls should be unconnected without nearby walls", "[multitile][conn REQUIRE( here.ter_set( pos + point_north, t_floor ) ); THEN( "the wall should be unconnected" ) { - cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, TERCONN_WALL, - TERCONN_NONE ); + cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, + wall, none ); CHECK( subtile == unconnected ); CHECK( rotation == 0 ); } @@ -51,6 +56,10 @@ TEST_CASE( "walls should connect to walls as end pieces", "[multitile][connects] clear_map(); clear_avatar(); + std::bitset none; + std::bitset wall; + wall.set( TERCONN_WALL ); + tripoint pos = get_avatar().pos() + point_east + point_east; int subtile = 0; @@ -64,8 +73,8 @@ TEST_CASE( "walls should connect to walls as end pieces", "[multitile][connects] REQUIRE( here.ter_set( pos + point_west, t_floor ) ); THEN( "the wall should be connected as end_piece N" ) { - cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, TERCONN_WALL, - TERCONN_NONE ); + cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, + wall, none ); CHECK( subtile == end_piece ); CHECK( rotation == 0 ); } @@ -77,8 +86,8 @@ TEST_CASE( "walls should connect to walls as end pieces", "[multitile][connects] REQUIRE( here.ter_set( pos + point_west, t_floor ) ); THEN( "the wall should be connected as end_piece W" ) { - cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, TERCONN_WALL, - TERCONN_NONE ); + cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, + wall, none ); CHECK( subtile == end_piece ); CHECK( rotation == 1 ); } @@ -90,8 +99,8 @@ TEST_CASE( "walls should connect to walls as end pieces", "[multitile][connects] REQUIRE( here.ter_set( pos + point_west, t_floor ) ); THEN( "the wall should be connected as end_piece S" ) { - cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, TERCONN_WALL, - TERCONN_NONE ); + cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, + wall, none ); CHECK( subtile == end_piece ); CHECK( rotation == 2 ); } @@ -103,8 +112,8 @@ TEST_CASE( "walls should connect to walls as end pieces", "[multitile][connects] REQUIRE( here.ter_set( pos + point_west, t_wall ) ); THEN( "the wall should be connected as end_piece E" ) { - cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, TERCONN_WALL, - TERCONN_NONE ); + cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, + wall, none ); CHECK( subtile == end_piece ); CHECK( rotation == 3 ); } @@ -116,6 +125,10 @@ TEST_CASE( "walls should connect to walls as corners", "[multitile][connects]" ) clear_map(); clear_avatar(); + std::bitset none; + std::bitset wall; + wall.set( TERCONN_WALL ); + tripoint pos = get_avatar().pos() + point_east + point_east; int subtile = 0; @@ -129,8 +142,8 @@ TEST_CASE( "walls should connect to walls as corners", "[multitile][connects]" ) REQUIRE( here.ter_set( pos + point_west, t_floor ) ); THEN( "the wall should be connected as corner NW" ) { - cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, TERCONN_WALL, - TERCONN_NONE ); + cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, + wall, none ); CHECK( subtile == corner ); CHECK( rotation == 0 ); } @@ -142,8 +155,8 @@ TEST_CASE( "walls should connect to walls as corners", "[multitile][connects]" ) REQUIRE( here.ter_set( pos + point_west, t_floor ) ); THEN( "the wall should be connected as corner SW" ) { - cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, TERCONN_WALL, - TERCONN_NONE ); + cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, + wall, none ); CHECK( subtile == corner ); CHECK( rotation == 1 ); } @@ -155,8 +168,8 @@ TEST_CASE( "walls should connect to walls as corners", "[multitile][connects]" ) REQUIRE( here.ter_set( pos + point_west, t_wall ) ); THEN( "the wall should be connected as corner SE" ) { - cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, TERCONN_WALL, - TERCONN_NONE ); + cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, + wall, none ); CHECK( subtile == corner ); CHECK( rotation == 2 ); } @@ -168,8 +181,8 @@ TEST_CASE( "walls should connect to walls as corners", "[multitile][connects]" ) REQUIRE( here.ter_set( pos + point_west, t_wall ) ); THEN( "the wall should be connected as corner NE" ) { - cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, TERCONN_WALL, - TERCONN_NONE ); + cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, + wall, none ); CHECK( subtile == corner ); CHECK( rotation == 3 ); } @@ -181,6 +194,10 @@ TEST_CASE( "walls should connect to walls as edges", "[multitile][connects]" ) clear_map(); clear_avatar(); + std::bitset none; + std::bitset wall; + wall.set( TERCONN_WALL ); + tripoint pos = get_avatar().pos() + point_east + point_east; int subtile = 0; @@ -194,8 +211,8 @@ TEST_CASE( "walls should connect to walls as edges", "[multitile][connects]" ) REQUIRE( here.ter_set( pos + point_west, t_floor ) ); THEN( "the wall should be connected as edge NS" ) { - cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, TERCONN_WALL, - TERCONN_NONE ); + cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, + wall, none ); CHECK( subtile == edge ); CHECK( rotation == 0 ); } @@ -207,8 +224,8 @@ TEST_CASE( "walls should connect to walls as edges", "[multitile][connects]" ) REQUIRE( here.ter_set( pos + point_west, t_wall ) ); THEN( "the wall should be connected as edge EW" ) { - cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, TERCONN_WALL, - TERCONN_NONE ); + cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, + wall, none ); CHECK( subtile == edge ); CHECK( rotation == 1 ); } @@ -220,6 +237,10 @@ TEST_CASE( "walls should connect to walls as t-connections and fully", "[multiti clear_map(); clear_avatar(); + std::bitset none; + std::bitset wall; + wall.set( TERCONN_WALL ); + tripoint pos = get_avatar().pos() + point_east + point_east; int subtile = 0; @@ -233,8 +254,8 @@ TEST_CASE( "walls should connect to walls as t-connections and fully", "[multiti REQUIRE( here.ter_set( pos + point_west, t_wall ) ); THEN( "the wall should be connected as t-connection N" ) { - cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, TERCONN_WALL, - TERCONN_NONE ); + cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, + wall, none ); CHECK( subtile == t_connection ); CHECK( rotation == 0 ); } @@ -246,8 +267,8 @@ TEST_CASE( "walls should connect to walls as t-connections and fully", "[multiti REQUIRE( here.ter_set( pos + point_west, t_floor ) ); THEN( "the wall should be connected as t-connection W" ) { - cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, TERCONN_WALL, - TERCONN_NONE ); + cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, + wall, none ); CHECK( subtile == t_connection ); CHECK( rotation == 1 ); } @@ -259,8 +280,8 @@ TEST_CASE( "walls should connect to walls as t-connections and fully", "[multiti REQUIRE( here.ter_set( pos + point_west, t_wall ) ); THEN( "the wall should be connected as t-connection S" ) { - cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, TERCONN_WALL, - TERCONN_NONE ); + cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, + wall, none ); CHECK( subtile == t_connection ); CHECK( rotation == 2 ); } @@ -272,8 +293,8 @@ TEST_CASE( "walls should connect to walls as t-connections and fully", "[multiti REQUIRE( here.ter_set( pos + point_west, t_wall ) ); THEN( "the wall should be connected as t-connection E" ) { - cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, TERCONN_WALL, - TERCONN_NONE ); + cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, + wall, none ); CHECK( subtile == t_connection ); CHECK( rotation == 3 ); } @@ -286,8 +307,8 @@ TEST_CASE( "walls should connect to walls as t-connections and fully", "[multiti REQUIRE( here.ter_set( pos + point_west, t_wall ) ); THEN( "the wall should be connected as center" ) { - cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, TERCONN_WALL, - TERCONN_NONE ); + cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, + wall, none ); CHECK( subtile == center ); CHECK( rotation == 0 ); } @@ -300,6 +321,11 @@ TEST_CASE( "windows should connect to walls and rotate to indoor floor", "[multi clear_map(); clear_avatar(); + std::bitset floor; + floor.set( TERCONN_INDOORFLOOR ); + std::bitset wall; + wall.set( TERCONN_WALL ); + tripoint pos = get_avatar().pos() + point_east + point_east; int subtile = 0; @@ -313,8 +339,8 @@ TEST_CASE( "windows should connect to walls and rotate to indoor floor", "[multi REQUIRE( here.ter_set( pos + point_north, t_wall ) ); THEN( "the window should be connected as NS, with W positive" ) { - cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, TERCONN_WALL, - TERCONN_INDOORFLOOR ); + cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, + wall, floor ); CHECK( subtile == edge ); CHECK( rotation == 0 ); } @@ -326,8 +352,8 @@ TEST_CASE( "windows should connect to walls and rotate to indoor floor", "[multi REQUIRE( here.ter_set( pos + point_north, t_floor ) ); THEN( "the window should be connected EW, with N positive" ) { - cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, TERCONN_WALL, - TERCONN_INDOORFLOOR ); + cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, + wall, floor ); CHECK( subtile == edge ); CHECK( rotation == 3 ); } @@ -339,8 +365,8 @@ TEST_CASE( "windows should connect to walls and rotate to indoor floor", "[multi REQUIRE( here.ter_set( pos + point_north, t_wall ) ); THEN( "the window should be connected as NS, with E positive" ) { - cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, TERCONN_WALL, - TERCONN_INDOORFLOOR ); + cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, + wall, floor ); CHECK( subtile == edge ); CHECK( rotation == 2 ); } @@ -352,8 +378,8 @@ TEST_CASE( "windows should connect to walls and rotate to indoor floor", "[multi REQUIRE( here.ter_set( pos + point_north, t_pavement ) ); THEN( "the window should be connected as EW, with S positive" ) { - cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, TERCONN_WALL, - TERCONN_INDOORFLOOR ); + cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, + wall, floor ); CHECK( subtile == edge ); CHECK( rotation == 1 ); } @@ -366,8 +392,8 @@ TEST_CASE( "windows should connect to walls and rotate to indoor floor", "[multi REQUIRE( here.ter_set( pos + point_north, t_wall ) ); THEN( "the window should be connected as NS, with E and W negative" ) { - cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, TERCONN_WALL, - TERCONN_INDOORFLOOR ); + cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, + wall, floor ); CHECK( subtile == edge ); CHECK( rotation == 4 ); } @@ -379,8 +405,8 @@ TEST_CASE( "windows should connect to walls and rotate to indoor floor", "[multi REQUIRE( here.ter_set( pos + point_north, t_pavement ) ); THEN( "the window should be connected as EW, with N and S negative" ) { - cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, TERCONN_WALL, - TERCONN_INDOORFLOOR ); + cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, + wall, floor ); CHECK( subtile == edge ); CHECK( rotation == 7 ); } @@ -392,8 +418,8 @@ TEST_CASE( "windows should connect to walls and rotate to indoor floor", "[multi REQUIRE( here.ter_set( pos + point_north, t_wall ) ); THEN( "the window should be connected as NS, with E and W negative" ) { - cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, TERCONN_WALL, - TERCONN_INDOORFLOOR ); + cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, + wall, floor ); CHECK( subtile == edge ); CHECK( rotation == 6 ); } @@ -405,8 +431,8 @@ TEST_CASE( "windows should connect to walls and rotate to indoor floor", "[multi REQUIRE( here.ter_set( pos + point_north, t_floor ) ); THEN( "the window should be connected as EW, with N and S positive" ) { - cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, TERCONN_WALL, - TERCONN_INDOORFLOOR ); + cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, + wall, floor ); CHECK( subtile == edge ); CHECK( rotation == 5 ); } @@ -419,6 +445,10 @@ TEST_CASE( "unconnected windows rotate to indoor floor", "[multitile][rotates]" clear_map(); clear_avatar(); + std::bitset none; + std::bitset floor; + floor.set( TERCONN_INDOORFLOOR ); + tripoint pos = get_avatar().pos() + point_east + point_east; int subtile = 0; @@ -432,8 +462,8 @@ TEST_CASE( "unconnected windows rotate to indoor floor", "[multitile][rotates]" REQUIRE( here.ter_set( pos + point_north, t_pavement ) ); THEN( "the window should be unconnected" ) { - cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, TERCONN_NONE, - TERCONN_INDOORFLOOR ); + cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, + none, floor ); CHECK( subtile == unconnected ); CHECK( rotation == 15 ); } @@ -446,8 +476,8 @@ TEST_CASE( "unconnected windows rotate to indoor floor", "[multitile][rotates]" REQUIRE( here.ter_set( pos + point_north, t_floor ) ); THEN( "the window rotate to the north" ) { - cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, TERCONN_NONE, - TERCONN_INDOORFLOOR ); + cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, + none, floor ); CHECK( subtile == unconnected ); CHECK( rotation == 2 ); } @@ -459,8 +489,8 @@ TEST_CASE( "unconnected windows rotate to indoor floor", "[multitile][rotates]" REQUIRE( here.ter_set( pos + point_north, t_pavement ) ); THEN( "the window rotate to the east" ) { - cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, TERCONN_NONE, - TERCONN_INDOORFLOOR ); + cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, + none, floor ); CHECK( subtile == unconnected ); CHECK( rotation == 3 ); } @@ -472,8 +502,8 @@ TEST_CASE( "unconnected windows rotate to indoor floor", "[multitile][rotates]" REQUIRE( here.ter_set( pos + point_north, t_pavement ) ); THEN( "the window rotate to the south" ) { - cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, TERCONN_NONE, - TERCONN_INDOORFLOOR ); + cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, + none, floor ); CHECK( subtile == unconnected ); CHECK( rotation == 0 ); } @@ -485,8 +515,8 @@ TEST_CASE( "unconnected windows rotate to indoor floor", "[multitile][rotates]" REQUIRE( here.ter_set( pos + point_north, t_pavement ) ); THEN( "the window rotate to the west" ) { - cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, TERCONN_NONE, - TERCONN_INDOORFLOOR ); + cata_tiles_test_helper::get_connect_values( pos, subtile, rotation, + none, floor ); CHECK( subtile == unconnected ); CHECK( rotation == 1 ); }