diff --git a/.clang-tidy b/.clang-tidy index f5ccc3fef40fb..de79d44bc055c 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -21,7 +21,6 @@ readability-*,\ -bugprone-misplaced-widening-cast,\ -bugprone-narrowing-conversions,\ -bugprone-unused-return-value,\ --bugprone-use-after-move,\ -cert-err34-c,\ -cert-flp30-c,\ -cert-msc30-c,\ diff --git a/.github/workflows/pr-validator.yml b/.github/workflows/pr-validator.yml index d4f9d40e2f3fa..1ab7313e5dc60 100644 --- a/.github/workflows/pr-validator.yml +++ b/.github/workflows/pr-validator.yml @@ -3,7 +3,6 @@ on: pull_request: branches: - master - jobs: validate: name: Validate PR @@ -12,4 +11,4 @@ jobs: - name: "Validate SUMMARY" uses: CleverRaven/pr-validator@master with: - description-regex: '.*SUMMARY.*' + description-regex: '\n\s*`{0,3}SUMMARY: +(None|((Features|Content|Interface|Mods|Balance|Bugfixes|Performance|Infrastructure|Build|I18N) +".*"))`{0,3}\s*\n' diff --git a/data/json/construction.json b/data/json/construction.json index fcc5c55a7577b..75837611bb557 100644 --- a/data/json/construction.json +++ b/data/json/construction.json @@ -1402,6 +1402,17 @@ "pre_special": "check_empty", "post_terrain": "f_locker" }, + { + "type": "construction", + "description": "Build Wooden Rack", + "category": "FURN", + "required_skills": [ [ "fabrication", 1 ] ], + "time": "80 m", + "qualities": [ [ { "id": "HAMMER", "level": 2 } ], [ { "id": "SAW_W", "level": 1 } ] ], + "components": [ [ [ "2x4", 6 ] ], [ [ "wood_sheet", 2 ], [ "wood_panel", 4 ] ], [ [ "nail", 40 ] ] ], + "pre_special": "check_empty", + "post_terrain": "f_rack_wood" + }, { "type": "construction", "description": "Build Metal Rack", diff --git a/data/json/furniture.json b/data/json/furniture.json index e0e8e976f99ab..90fdfa52e2ea6 100644 --- a/data/json/furniture.json +++ b/data/json/furniture.json @@ -7,7 +7,7 @@ "description": "Pile of various metals, bricks, and other building materials. You could clear it with a shovel.", "color": "light_gray", "move_cost_mod": 6, - "max_volume": "750 L", + "max_volume": 3000, "required_str": -1, "flags": [ "TRANSPARENT", @@ -31,7 +31,7 @@ "symbol": "^", "color": "dark_gray", "move_cost_mod": 6, - "max_volume": "750 L", + "max_volume": 3000, "required_str": -1, "flags": [ "TRANSPARENT", @@ -55,7 +55,7 @@ "symbol": "#", "color": "green", "move_cost_mod": 8, - "max_volume": "750 L", + "max_volume": 3000, "required_str": -1, "flags": [ "TRANSPARENT", @@ -79,7 +79,7 @@ "symbol": "#", "color": "cyan", "move_cost_mod": 6, - "max_volume": "750 L", + "max_volume": 3000, "required_str": -1, "flags": [ "TRANSPARENT", @@ -217,7 +217,7 @@ "floor_bedding_warmth": 50, "required_str": -1, "deconstruct": { "items": [ { "item": "withered", "count": 50 } ] }, - "max_volume": "1000 L", + "max_volume": 4000, "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", "ORGANIC", "MOUNTABLE", "SHORT", "EASY_DECONSTRUCT" ], "bash": { "str_min": 2, @@ -289,9 +289,9 @@ "comfort": 1, "floor_bedding_warmth": -1500, "bonus_fire_warmth_feet": 1000, - "required_str": 8, + "required_str": 5, "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", "ORGANIC", "MOUNTABLE", "SHORT", "CAN_SIT" ], - "max_volume": "1000 L", + "max_volume": 4000, "deconstruct": { "items": [ { "item": "2x4", "count": 4 }, { "item": "nail", "charges": [ 6, 10 ] } ] }, "bash": { "str_min": 12, @@ -310,8 +310,8 @@ "color": "red", "move_cost_mod": 2, "coverage": 50, - "required_str": 8, - "max_volume": "1000 L", + "required_str": 5, + "max_volume": 4000, "flags": [ "TRANSPARENT", "FLAMMABLE", "ORGANIC", "MOUNTABLE", "SHORT", "FLAT_SURF" ], "deconstruct": { "items": [ { "item": "2x4", "count": 4 }, { "item": "wood_panel", "count": 1 }, { "item": "nail", "charges": [ 6, 8 ] } ] @@ -343,7 +343,7 @@ "required_str": 4, "flags": [ "TRANSPARENT", "FLAMMABLE", "PLACE_ITEM", "BLOCKSDOOR", "MOUNTABLE" ], "deconstruct": { "items": [ { "item": "nail", "charges": [ 2, 6 ] }, { "item": "2x4", "count": 2 } ] }, - "max_volume": "30 L", + "max_volume": 120, "bash": { "str_min": 6, "str_max": 30, @@ -405,7 +405,7 @@ "move_cost_mod": 2, "coverage": 50, "required_str": -1, - "max_volume": "1000 L", + "max_volume": 4000, "flags": [ "TRANSPARENT", "FLAMMABLE", "ORGANIC", "MOUNTABLE", "SHORT", "FLAT_SURF" ], "deconstruct": { "items": [ @@ -1903,7 +1903,7 @@ "coverage": 40, "required_str": -1, "examine_action": "kiln_empty", - "max_volume": "125 L", + "max_volume": 500, "crafting_pseudo_item": "char_kiln", "flags": [ "CONTAINER", "FIRE_CONTAINER", "PLACE_ITEM", "EASY_DECONSTRUCT", "MINEABLE" ], "deconstruct": { "items": [ { "item": "rock", "count": [ 35, 40 ] } ] }, @@ -1947,7 +1947,7 @@ "coverage": 40, "required_str": -1, "examine_action": "kiln_empty", - "max_volume": "125 L", + "max_volume": 500, "crafting_pseudo_item": "char_kiln", "flags": [ "CONTAINER", "FIRE_CONTAINER", "PLACE_ITEM" ], "deconstruct": { "items": [ { "item": "metal_tank", "count": [ 1, 4 ] }, { "item": "pipe", "count": [ 2, 4 ] } ] }, @@ -1999,7 +1999,7 @@ "coverage": 40, "required_str": -1, "examine_action": "arcfurnace_empty", - "max_volume": "200 L", + "max_volume": 800, "crafting_pseudo_item": "arcfurnace", "flags": [ "CONTAINER", "FIRE_CONTAINER", "PLACE_ITEM" ], "deconstruct": { "items": [ { "item": "metal_tank", "count": [ 1, 4 ] }, { "item": "pipe", "count": [ 2, 4 ] } ] }, @@ -2466,7 +2466,7 @@ "flags": [ "PLACE_ITEM", "TRANSPARENT", "FIRE_CONTAINER", "EASY_DECONSTRUCT" ], "deployed_item": "brazier", "examine_action": "fireplace", - "max_volume": "1000 L", + "max_volume": 4000, "bash": { "str_min": 8, "str_max": 30, @@ -2493,7 +2493,7 @@ "flags": [ "PLACE_ITEM", "TRANSPARENT", "FIRE_CONTAINER", "EASY_DECONSTRUCT" ], "deployed_item": "55gal_firebarrel", "examine_action": "fireplace", - "max_volume": "1000 L", + "max_volume": 4000, "bash": { "str_min": 8, "str_max": 30, @@ -2520,7 +2520,7 @@ "flags": [ "PLACE_ITEM", "TRANSPARENT", "FIRE_CONTAINER", "EASY_DECONSTRUCT" ], "deployed_item": "30gal_firebarrel", "examine_action": "fireplace", - "max_volume": "1000 L", + "max_volume": 4000, "bash": { "str_min": 8, "str_max": 30, @@ -2616,7 +2616,7 @@ { "item": "cable", "charges": [ 1, 2 ], "prob": 50 } ] }, - "max_volume": "1000 L", + "max_volume": 4000, "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", "ORGANIC", "BLOCKSDOOR", "MOUNTABLE" ], "bash": { "str_min": 10, @@ -2647,7 +2647,7 @@ "deployed_item": "camp_chair", "examine_action": "deployed_furniture", "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", "ORGANIC", "MOUNTABLE", "CAN_SIT" ], - "max_volume": "875 L", + "max_volume": 3500, "deconstruct": { "items": [ { "item": "camp_chair", "count": 1 } ] } }, { @@ -2816,7 +2816,7 @@ "floor_bedding_warmth": 1000, "required_str": -1, "deconstruct": { "items": [ { "item": "pillow", "count": 19 }, { "item": "blanket", "count": 3 } ] }, - "max_volume": "1000 L", + "max_volume": 4000, "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", @@ -2857,7 +2857,7 @@ { "item": "pillow", "count": 4 } ] }, - "max_volume": "1000 L", + "max_volume": 4000, "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", @@ -2929,7 +2929,7 @@ "floor_bedding_warmth": 200, "required_str": 3, "deconstruct": { "items": [ { "item": "box_large", "count": 1 } ] }, - "max_volume": "1500 L", + "max_volume": 6000, "deployed_item": "box_large", "examine_action": "deployed_furniture", "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", "PLACE_ITEM", "ORGANIC", "EASY_DECONSTRUCT", "BASHABLE", "HIDE_PLACE", "NO_SIGHT" ], @@ -3017,7 +3017,7 @@ { "item": "lock", "count": [ 0, 1 ] } ] }, - "max_volume": "200 L", + "max_volume": 800, "bash": { "str_min": 8, "str_max": 30, @@ -3041,7 +3041,7 @@ "deconstruct": { "items": [ { "item": "2x4", "count": 20 }, { "item": "nail", "charges": [ 16, 24 ] }, { "item": "pipe", "count": 2 } ] }, - "max_volume": "500 L", + "max_volume": 2000, "bash": { "str_min": 12, "str_max": 40, @@ -3594,7 +3594,7 @@ { "item": "sheet_metal_small", "count": [ 0, 4 ] } ] }, - "max_volume": "1750 L", + "max_volume": 7000, "bash": { "str_min": 35, "str_max": 80, @@ -3670,7 +3670,7 @@ "move_cost_mod": 3, "coverage": 45, "required_str": 10, - "max_volume": "1000 L", + "max_volume": 4000, "looks_like": "f_glass_fridge", "flags": [ "CONTAINER", "PLACE_ITEM", "BLOCKSDOOR", "FLAT_SURF" ], "deconstruct": { @@ -3710,7 +3710,7 @@ "move_cost_mod": 3, "coverage": 60, "required_str": 16, - "max_volume": "1000 L", + "max_volume": 4000, "insulation": 2, "looks_like": "f_washer", "flags": [ "CONTAINER", "PLACE_ITEM", "BLOCKSDOOR", "FLAT_SURF" ], @@ -3756,7 +3756,7 @@ "move_cost_mod": 3, "coverage": 60, "required_str": 16, - "max_volume": "1000 L", + "max_volume": 4000, "insulation": 2, "looks_like": "f_washer", "flags": [ "CONTAINER", "PLACE_ITEM", "BLOCKSDOOR", "FLAT_SURF", "SEALED" ], @@ -3801,7 +3801,7 @@ "move_cost_mod": 2, "coverage": 80, "required_str": 18, - "max_volume": "1750 L", + "max_volume": 7000, "insulation": 6, "looks_like": "f_fridge", "flags": [ "CONTAINER", "PLACE_ITEM", "BLOCKSDOOR" ], @@ -3995,7 +3995,7 @@ "move_cost_mod": -1, "coverage": 45, "required_str": -1, - "max_volume": "1000 L", + "max_volume": 4000, "looks_like": "t_machinery_heavy", "flags": [ "TRANSPARENT" ], "deconstruct": { @@ -4037,7 +4037,7 @@ "move_cost_mod": -1, "coverage": 65, "required_str": -1, - "max_volume": "1000 L", + "max_volume": 4000, "looks_like": "t_machinery_heavy", "deconstruct": { "items": [ @@ -4601,7 +4601,7 @@ { "item": "sheet_metal_small", "count": [ 2, 4 ] } ] }, - "max_volume": "1000 L", + "max_volume": 4000, "bash": { "str_min": 35, "str_max": 80, @@ -4668,7 +4668,7 @@ "move_cost_mod": 0, "comfort": 2, "floor_bedding_warmth": -1500, - "max_volume": "1000 L", + "max_volume": 4000, "required_str": 7, "bash": { "str_min": 8, @@ -4711,7 +4711,7 @@ "color": "blue", "move_cost_mod": -1, "coverage": 50, - "max_volume": "3750 ml", + "max_volume": 15, "required_str": 7, "flags": [ "TRANSPARENT", "FLAMMABLE", "PLACE_ITEM" ], "deconstruct": { diff --git a/data/json/furniture_and_terrain/furniture-appliances.json b/data/json/furniture_and_terrain/furniture-appliances.json index 2c9a19d0430a8..ae76d5e6f8115 100644 --- a/data/json/furniture_and_terrain/furniture-appliances.json +++ b/data/json/furniture_and_terrain/furniture-appliances.json @@ -10,7 +10,7 @@ "move_cost_mod": -1, "coverage": 55, "required_str": -1, - "max_volume": "1000 L", + "max_volume": 4000, "deconstruct": { "items": [ { "item": "pipe", "count": 1 }, @@ -92,7 +92,7 @@ "move_cost_mod": -1, "coverage": 60, "required_str": 13, - "max_volume": "200 L", + "max_volume": 800, "flags": [ "CONTAINER", "PLACE_ITEM", "BLOCKSDOOR", "FLAT_SURF", "MINEABLE" ], "deconstruct": { "items": [ @@ -136,7 +136,7 @@ "move_cost_mod": -1, "coverage": 60, "required_str": 12, - "max_volume": "37500 ml", + "max_volume": 150, "flags": [ "CONTAINER", "PLACE_ITEM", "BLOCKSDOOR", "FLAT_SURF", "MINEABLE" ], "deconstruct": { "items": [ @@ -192,7 +192,7 @@ { "item": "motor_tiny", "count": 1 } ] }, - "max_volume": "200 L", + "max_volume": 800, "bash": { "str_min": 18, "str_max": 50, @@ -237,7 +237,7 @@ { "item": "motor_tiny", "count": 1 } ] }, - "max_volume": "250 L", + "max_volume": 1000, "bash": { "str_min": 12, "str_max": 50, @@ -268,7 +268,7 @@ "move_cost_mod": -1, "coverage": 60, "required_str": -1, - "max_volume": "1000 L", + "max_volume": 4000, "flags": [ "CONTAINER", "PLACE_ITEM", "FIRE_CONTAINER", "SUPPRESS_SMOKE", "BLOCKSDOOR" ], "examine_action": "fireplace", "deconstruct": { @@ -309,7 +309,7 @@ "move_cost_mod": -1, "coverage": 60, "required_str": 12, - "max_volume": "30 L", + "max_volume": 120, "flags": [ "CONTAINER", "PLACE_ITEM", "BLOCKSDOOR", "FLAT_SURF", "MINEABLE" ], "deconstruct": { "items": [ @@ -365,7 +365,7 @@ { "item": "pilot_light", "count": 1 } ] }, - "max_volume": "40 L", + "max_volume": 160, "bash": { "str_min": 8, "str_max": 30, diff --git a/data/json/furniture_and_terrain/furniture-domestic_plants.json b/data/json/furniture_and_terrain/furniture-domestic_plants.json index f1f4a00d819f1..b58f312f6a70e 100644 --- a/data/json/furniture_and_terrain/furniture-domestic_plants.json +++ b/data/json/furniture_and_terrain/furniture-domestic_plants.json @@ -8,7 +8,7 @@ "move_cost_mod": 2, "description": "A variety of plant, used for decoration.", "required_str": 5, - "max_volume": "10 L", + "max_volume": 40, "flags": [ "CONTAINER", "FLAMMABLE_ASH", "PLACE_ITEM", "ORGANIC", "TINY", "TRANSPARENT", "EASY_DECONSTRUCT" ], "deconstruct": { "items": [ @@ -44,7 +44,7 @@ "color": "yellow", "move_cost_mod": 2, "required_str": 5, - "max_volume": "10 L", + "max_volume": 40, "flags": [ "CONTAINER", "FLAMMABLE_ASH", "PLACE_ITEM", "ORGANIC", "TINY", "TRANSPARENT", "EASY_DECONSTRUCT" ], "deconstruct": { "items": [ diff --git a/data/json/furniture_and_terrain/furniture-fireplaces.json b/data/json/furniture_and_terrain/furniture-fireplaces.json index 5b44725428669..28c4ba9d40750 100644 --- a/data/json/furniture_and_terrain/furniture-fireplaces.json +++ b/data/json/furniture_and_terrain/furniture-fireplaces.json @@ -29,7 +29,7 @@ "move_cost_mod": 2, "coverage": 60, "required_str": 10, - "max_volume": "250 L", + "max_volume": 1000, "flags": [ "TRANSPARENT", "CONTAINER", "FIRE_CONTAINER", "SUPPRESS_SMOKE", "PLACE_ITEM", "MOUNTABLE" ], "examine_action": "fireplace", "bash": { diff --git a/data/json/furniture_and_terrain/furniture-plumbing.json b/data/json/furniture_and_terrain/furniture-plumbing.json index 32ac687a05221..2a4f1b5f04970 100644 --- a/data/json/furniture_and_terrain/furniture-plumbing.json +++ b/data/json/furniture_and_terrain/furniture-plumbing.json @@ -10,7 +10,7 @@ "coverage": 30, "required_str": -1, "flags": [ "TRANSPARENT", "FLAMMABLE_HARD", "CONTAINER", "PLACE_ITEM", "BLOCKSDOOR", "MOUNTABLE" ], - "max_volume": "200 L", + "max_volume": 800, "examine_action": "keg", "keg_capacity": 600, "bash": { @@ -105,7 +105,7 @@ "move_cost_mod": -1, "coverage": 55, "required_str": -1, - "max_volume": "1000 L", + "max_volume": 4000, "flags": [ "CONTAINER", "PLACE_ITEM", "LIQUIDCONT", "NOITEM", "SEALED" ], "examine_action": "keg", "keg_capacity": 240, diff --git a/data/json/furniture_and_terrain/furniture-rural.json b/data/json/furniture_and_terrain/furniture-rural.json index 582e9e2b7a6cb..db76bf183f21a 100644 --- a/data/json/furniture_and_terrain/furniture-rural.json +++ b/data/json/furniture_and_terrain/furniture-rural.json @@ -28,7 +28,7 @@ "description": "Pile of chipped wood pieces. You can move it with a shovel.", "color": "brown", "move_cost_mod": 6, - "max_volume": "750 L", + "max_volume": 3000, "required_str": -1, "flags": [ "TRANSPARENT", diff --git a/data/json/furniture_and_terrain/furniture-seats.json b/data/json/furniture_and_terrain/furniture-seats.json index 8fd6b16d97b4d..be502d2814df1 100644 --- a/data/json/furniture_and_terrain/furniture-seats.json +++ b/data/json/furniture_and_terrain/furniture-seats.json @@ -13,7 +13,7 @@ "bonus_fire_warmth_feet": 1000, "required_str": 8, "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", "ORGANIC", "MOUNTABLE", "SHORT", "CAN_SIT" ], - "max_volume": "1000 L", + "max_volume": 4000, "deconstruct": { "items": [ { "item": "2x4", "count": 4 }, { "item": "nail", "charges": [ 6, 10 ] } ] }, "bash": { "str_min": 12, @@ -39,7 +39,7 @@ "deconstruct": { "items": [ { "item": "2x4", "count": 10 }, { "item": "rag", "count": [ 30, 33 ] }, { "item": "nail", "charges": [ 6, 8 ] } ] }, - "max_volume": "1000 L", + "max_volume": 4000, "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", "ORGANIC", "MOUNTABLE", "CAN_SIT" ], "bash": { "str_min": 12, @@ -70,7 +70,7 @@ "bonus_fire_warmth_feet": 1000, "required_str": 7, "deconstruct": { "items": [ { "item": "pipe", "count": 10 }, { "item": "rag", "count": [ 30, 33 ] }, { "item": "rope_6" } ] }, - "max_volume": "1000 L", + "max_volume": 4000, "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", "ORGANIC", "MOUNTABLE", "CAN_SIT" ], "bash": { "str_min": 12, @@ -100,7 +100,7 @@ "required_str": 4, "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", "ORGANIC", "MOUNTABLE", "CAN_SIT" ], "deconstruct": { "items": [ { "item": "2x4", "count": 4 }, { "item": "nail", "charges": [ 6, 8 ] } ] }, - "max_volume": "1000 L", + "max_volume": 4000, "bash": { "str_min": 6, "str_max": 20, @@ -124,7 +124,7 @@ "deconstruct": { "items": [ { "item": "2x4", "count": 12 }, { "item": "rag", "count": [ 30, 33 ] }, { "item": "nail", "charges": [ 8, 10 ] } ] }, - "max_volume": "1000 L", + "max_volume": 4000, "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", "ORGANIC", "BLOCKSDOOR", "MOUNTABLE", "CAN_SIT" ], "bash": { "str_min": 12, @@ -153,7 +153,7 @@ "required_str": 3, "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", "ORGANIC", "MOUNTABLE", "CAN_SIT" ], "deconstruct": { "items": [ { "item": "2x4", "count": 3 }, { "item": "nail", "charges": [ 2, 6 ] } ] }, - "max_volume": "875 L", + "max_volume": 3500, "bash": { "str_min": 6, "str_max": 20, diff --git a/data/json/furniture_and_terrain/furniture-sleep.json b/data/json/furniture_and_terrain/furniture-sleep.json index a0fa7200d7d48..113436af9f6c0 100644 --- a/data/json/furniture_and_terrain/furniture-sleep.json +++ b/data/json/furniture_and_terrain/furniture-sleep.json @@ -12,7 +12,7 @@ "floor_bedding_warmth": 1000, "required_str": -1, "deconstruct": { "items": [ { "item": "mattress", "count": 1 } ], "furn_set": "f_bed_frame" }, - "max_volume": "1000 L", + "max_volume": 4000, "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", "PLACE_ITEM", "ORGANIC", "MOUNTABLE", "CAN_SIT", "EASY_DECONSTRUCT" ], "bash": { "str_min": 12, @@ -39,7 +39,7 @@ "coverage": 40, "required_str": 5, "deconstruct": { "items": [ { "item": "2x4", "count": 12 }, { "item": "nail", "charges": [ 8, 10 ] } ] }, - "max_volume": "1000 L", + "max_volume": 4000, "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", "PLACE_ITEM", "ORGANIC", "MOUNTABLE", "CAN_SIT" ], "bash": { "str_min": 10, @@ -92,7 +92,7 @@ "deconstruct": { "items": [ { "item": "2x4", "count": 4 }, { "item": "rag", "count": [ 30, 35 ] }, { "item": "nail", "charges": [ 4, 6 ] } ] }, - "max_volume": "1000 L", + "max_volume": 4000, "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", "ORGANIC", "MOUNTABLE", "SHORT" ], "bash": { "str_min": 8, @@ -120,7 +120,7 @@ "floor_bedding_warmth": 200, "required_str": -1, "deconstruct": { "items": [ { "item": "stick", "count": 4 }, { "item": "straw_pile", "count": [ 7, 8 ] } ] }, - "max_volume": "1000 L", + "max_volume": 4000, "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", "ORGANIC", "MOUNTABLE", "SHORT", "EASY_DECONSTRUCT" ], "bash": { "str_min": 6, diff --git a/data/json/furniture_and_terrain/furniture-storage.json b/data/json/furniture_and_terrain/furniture-storage.json index 57505b7857e2c..9306d40b5acb8 100644 --- a/data/json/furniture_and_terrain/furniture-storage.json +++ b/data/json/furniture_and_terrain/furniture-storage.json @@ -17,7 +17,7 @@ { "item": "nail", "charges": [ 12, 16 ] } ] }, - "max_volume": "2000 L", + "max_volume": 8000, "bash": { "str_min": 6, "str_max": 40, @@ -56,7 +56,7 @@ { "item": "rag", "count": [ 15, 20 ] } ] }, - "max_volume": "875 L", + "max_volume": 3500, "bash": { "str_min": 12, "str_max": 40, @@ -89,7 +89,7 @@ { "item": "rag", "count": [ 15, 20 ] } ] }, - "max_volume": "875 L", + "max_volume": 3500, "bash": { "str_min": 12, "str_max": 40, @@ -128,7 +128,7 @@ "deconstruct": { "items": [ { "item": "2x4", "count": 4 }, { "item": "wood_panel", "count": [ 1, 2 ] }, { "item": "nail", "charges": [ 6, 10 ] } ] }, - "max_volume": "1000 L", + "max_volume": 4000, "bash": { "str_min": 12, "str_max": 40, @@ -151,7 +151,7 @@ "deconstruct": { "items": [ { "item": "2x4", "count": 4 }, { "item": "wood_panel", "count": [ 0, 1 ] }, { "item": "nail", "charges": [ 6, 10 ] } ] }, - "max_volume": "1000 L", + "max_volume": 4000, "bash": { "str_min": 12, "str_max": 40, @@ -174,7 +174,7 @@ "deconstruct": { "items": [ { "item": "2x4", "count": 3 }, { "item": "wood_panel", "count": 1 }, { "item": "nail", "charges": [ 6, 8 ] } ] }, - "max_volume": "1000 L", + "max_volume": 4000, "bash": { "str_min": 8, "str_max": 30, @@ -202,7 +202,7 @@ "deconstruct": { "items": [ { "item": "2x4", "count": 6 }, { "item": "wood_panel", "count": [ 0, 1 ] }, { "item": "nail", "charges": [ 6, 8 ] } ] }, - "max_volume": "2000 L", + "max_volume": 8000, "bash": { "str_min": 12, "str_max": 40, @@ -232,7 +232,7 @@ { "item": "pipe", "count": [ 0, 4 ] } ] }, - "max_volume": "400 L", + "max_volume": 1600, "bash": { "str_min": 12, "str_max": 40, @@ -257,7 +257,7 @@ "move_cost_mod": -1, "coverage": 30, "required_str": 14, - "max_volume": "250 L", + "max_volume": 1000, "flags": [ "TRANSPARENT", "CONTAINER", "SEALED", "PLACE_ITEM", "MOUNTABLE", "MINEABLE" ], "examine_action": "gunsafe_ml", "bash": { @@ -282,7 +282,7 @@ "move_cost_mod": -1, "coverage": 30, "required_str": 14, - "max_volume": "250 L", + "max_volume": 1000, "flags": [ "TRANSPARENT", "CONTAINER", "SEALED", "PLACE_ITEM", "MOUNTABLE", "MINEABLE" ], "bash": { "str_min": 40, @@ -306,7 +306,7 @@ "move_cost_mod": -1, "coverage": 30, "required_str": 14, - "max_volume": "250 L", + "max_volume": 1000, "flags": [ "TRANSPARENT", "CONTAINER", "SEALED", "PLACE_ITEM", "MOUNTABLE", "MINEABLE" ], "examine_action": "gunsafe_el", "bash": { @@ -340,7 +340,7 @@ { "item": "pipe", "count": [ 4, 8 ] } ] }, - "max_volume": "500 L", + "max_volume": 2000, "bash": { "str_min": 12, "str_max": 40, @@ -367,7 +367,7 @@ "deconstruct": { "items": [ { "item": "2x4", "count": 2 }, { "item": "nail", "charges": [ 2, 5 ] }, { "item": "sheet_metal", "count": 1 } ] }, - "max_volume": "10 L", + "max_volume": 40, "bash": { "str_min": 12, "str_max": 50, @@ -400,7 +400,7 @@ { "item": "sheet_metal_small", "count": [ 0, 4 ] } ] }, - "max_volume": "1750 L", + "max_volume": 7000, "bash": { "str_min": 6, "str_max": 30, @@ -414,6 +414,34 @@ ] } }, + { + "type": "furniture", + "id": "f_rack_wood", + "name": "wooden rack", + "symbol": "{", + "description": "A simple wooden rack. Display your items on it.", + "color": "brown", + "move_cost_mod": -1, + "coverage": 70, + "required_str": 7, + "looks_like": "f_bookcase", + "flags": [ "FLAMMABLE", "PLACE_ITEM", "ORGANIC", "BLOCKSDOOR" ], + "deconstruct": { + "items": [ + { "item": "2x4", "count": 12 }, + { "item": "wood_panel", "count": [ 1, 2 ] }, + { "item": "nail", "charges": [ 32, 40 ] } + ] + }, + "max_volume": "1500 L", + "bash": { + "str_min": 6, + "str_max": 40, + "sound": "smash!", + "sound_fail": "whump.", + "items": [ { "item": "2x4", "count": [ 2, 6 ] }, { "item": "nail", "charges": [ 20, 40 ] }, { "item": "splinter", "count": 12 } ] + } + }, { "type": "furniture", "id": "f_rack_coat", @@ -426,7 +454,7 @@ "required_str": 4, "flags": [ "TRANSPARENT", "FLAMMABLE", "PLACE_ITEM", "BLOCKSDOOR", "MOUNTABLE" ], "deconstruct": { "items": [ { "item": "nail", "charges": [ 2, 6 ] }, { "item": "2x4", "count": 2 } ] }, - "max_volume": "30 L", + "max_volume": 120, "bash": { "str_min": 6, "str_max": 30, @@ -445,7 +473,7 @@ "move_cost_mod": -1, "coverage": 40, "required_str": 5, - "max_volume": "20 L", + "max_volume": 80, "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", "CONTAINER", "PLACE_ITEM", "MOUNTABLE", "SHORT" ], "bash": { "str_min": 8, @@ -465,7 +493,7 @@ "move_cost_mod": -1, "coverage": 30, "required_str": 14, - "max_volume": "250 L", + "max_volume": 1000, "flags": [ "TRANSPARENT", "CONTAINER", "SEALED", "PLACE_ITEM", "MOUNTABLE", "MINEABLE" ], "open": "f_safe_o", "examine_action": "open_safe", @@ -491,7 +519,7 @@ "move_cost_mod": -1, "coverage": 30, "required_str": 14, - "max_volume": "250 L", + "max_volume": 1000, "flags": [ "TRANSPARENT", "CONTAINER", "SEALED", "PLACE_ITEM", "MOUNTABLE", "MINEABLE" ], "examine_action": "safe", "bash": { @@ -516,7 +544,7 @@ "move_cost_mod": -1, "coverage": 30, "required_str": 14, - "max_volume": "250 L", + "max_volume": 1000, "flags": [ "TRANSPARENT", "CONTAINER", "PLACE_ITEM", "MOUNTABLE", "MINEABLE" ], "close": "f_safe_c", "bash": { @@ -540,7 +568,7 @@ "color": "light_cyan", "move_cost_mod": 1, "required_str": 5, - "max_volume": "20 L", + "max_volume": 80, "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", "CONTAINER", "PLACE_ITEM", "MOUNTABLE", "SHORT" ], "bash": { "str_min": 8, @@ -569,7 +597,7 @@ { "item": "pipe", "count": [ 4, 8 ] } ] }, - "max_volume": "500 L", + "max_volume": 2000, "bash": { "str_min": 16, "str_max": 40, diff --git a/data/json/furniture_and_terrain/furniture-surfaces.json b/data/json/furniture_and_terrain/furniture-surfaces.json index 1333db6306a75..ec018eb2579c8 100644 --- a/data/json/furniture_and_terrain/furniture-surfaces.json +++ b/data/json/furniture_and_terrain/furniture-surfaces.json @@ -13,7 +13,7 @@ "deconstruct": { "items": [ { "item": "2x4", "count": 4 }, { "item": "wood_panel", "count": 1 }, { "item": "nail", "charges": [ 6, 10 ] } ] }, - "max_volume": "1000 L", + "max_volume": 4000, "bash": { "str_min": 12, "str_max": 40, @@ -78,12 +78,12 @@ "color": "light_red", "move_cost_mod": 1, "coverage": 45, - "required_str": 8, + "required_str": 5, "flags": [ "TRANSPARENT", "FLAMMABLE_ASH", "CONTAINER", "PLACE_ITEM", "ORGANIC", "MOUNTABLE", "FLAT_SURF" ], "deconstruct": { "items": [ { "item": "2x4", "count": 8 }, { "item": "wood_panel", "count": 1 }, { "item": "nail", "charges": [ 16, 24 ] } ] }, - "max_volume": "1000 L", + "max_volume": 4000, "bash": { "str_min": 12, "str_max": 40, @@ -201,8 +201,8 @@ "color": "red", "move_cost_mod": 2, "coverage": 50, - "required_str": 8, - "max_volume": "1000 L", + "required_str": 5, + "max_volume": 4000, "flags": [ "TRANSPARENT", "FLAMMABLE", "ORGANIC", "MOUNTABLE", "SHORT", "FLAT_SURF" ], "deconstruct": { "items": [ { "item": "2x4", "count": 4 }, { "item": "wood_panel", "count": 1 }, { "item": "nail", "charges": [ 6, 8 ] } ] diff --git a/data/json/furniture_and_terrain/terrain-manufactured.json b/data/json/furniture_and_terrain/terrain-manufactured.json index 06dd84ed07914..7727916d77fbb 100644 --- a/data/json/furniture_and_terrain/terrain-manufactured.json +++ b/data/json/furniture_and_terrain/terrain-manufactured.json @@ -7,7 +7,7 @@ "symbol": "&", "color": "green", "move_cost": 0, - "max_volume": "2000 L", + "max_volume": 8000, "flags": [ "TRANSPARENT", "REDUCE_SCENT", "PERMEABLE" ], "examine_action": "recycle_compactor", "bash": { diff --git a/data/json/item_groups.json b/data/json/item_groups.json index 601b4293f8e70..c1cf40e3eaa0e 100644 --- a/data/json/item_groups.json +++ b/data/json/item_groups.json @@ -2290,7 +2290,8 @@ [ "whistle_multitool", 5 ], [ "esbit_stove", 10 ], [ "bottle_folding", 10 ], - [ "mess_tin", 10 ] + [ "mess_tin", 10 ], + [ "survival_kit", 30 ] ] }, { @@ -3226,6 +3227,7 @@ [ "knife_folding", 6 ], [ "knife_swissarmy", 6 ], [ "multitool", 8 ], + [ "survival_kit", 3 ], [ "touring_suit", 20 ], [ "helmet_motor", 14 ], [ "motorbike_armor", 10 ], @@ -4706,6 +4708,7 @@ [ "recipe_arrows", 7 ], [ "flashlight", 40 ], [ "heavy_flashlight", 30 ], + [ "survival_kit", 35 ], [ "mess_kit", 9 ], [ "popcan_stove", 2 ], [ "denat_alcohol", 2 ], @@ -4782,6 +4785,7 @@ [ "bandages", 50 ], [ "cotton_ball", 50 ], [ "1st_aid", 35 ], + [ "survival_kit", 35 ], [ "saline", 10 ], [ "vitamins", 75 ], [ "gummy_vitamins", 25 ], @@ -4857,6 +4861,7 @@ [ "rollmat", 40 ], [ "tent_kit", 17 ], [ "large_tent_kit", 17 ], + [ "survival_kit", 10 ], [ "canteen", 15 ], [ "2lcanteen", 10 ], [ "camelbak", 5 ], @@ -5837,7 +5842,8 @@ [ "solarpack", 5 ], [ "chem_hexamine", 3 ], [ "esbit_stove", 6 ], - [ "mess_tin", 4 ] + [ "mess_tin", 4 ], + [ "survival_kit", 4 ] ] }, { @@ -6993,6 +6999,7 @@ [ "legrig", 10 ], [ "rucksack", 20 ], [ "gobag", 2 ], + [ "survival_kit", 3 ], [ "recipe_raptor", 2 ], [ "tac_helmet", 5 ], [ "tac_fullhelmet", 2 ], @@ -7688,6 +7695,7 @@ [ "sm_extinguisher", 7 ], [ "extinguisher", 2 ], [ "1st_aid", 5 ], + [ "survival_kit", 3 ], { "item": "duct_tape", "prob": 13, "charges-min": 20, "charges-max": 200 }, [ "screwdriver", 8 ], [ "screwdriver_set", 2 ], @@ -8214,6 +8222,7 @@ [ "small_repairkit", 14 ], [ "grapnel", 6 ], [ "misc_repairkit", 8 ], + [ "survival_kit", 3 ], [ "toolbox", 1 ], [ "survivor_belt", 2 ], [ "survivor_machete", 2 ], @@ -9205,6 +9214,7 @@ [ "rollmat", 60 ], [ "tent_kit", 10 ], [ "large_tent_kit", 5 ], + [ "survival_kit", 5 ], [ "canteen", 100 ], [ "2lcanteen", 50 ], [ "camelbak", 25 ], @@ -9770,7 +9780,8 @@ [ "lighter", 25 ], [ "pockknife", 15 ], [ "metal_file", 15 ], - [ "pin_reamer", 10 ] + [ "pin_reamer", 10 ], + [ "survival_kit", 5 ] ] }, { diff --git a/data/json/itemgroups/SUS_specific_use_storage_items.json b/data/json/itemgroups/SUS_specific_use_storage_items.json index 68e5e9d47c665..8beb9bb703eef 100644 --- a/data/json/itemgroups/SUS_specific_use_storage_items.json +++ b/data/json/itemgroups/SUS_specific_use_storage_items.json @@ -168,6 +168,8 @@ { "item": "pot_copper", "prob": 75 }, { "item": "stock_pot", "prob": 50 }, { "item": "pot_canning", "prob": 25 }, + { "item": "colander_steel", "prob": 40 }, + { "item": "splatter_guard", "prob": 20 }, { "item": "pan", "count": [ 1, 2 ] }, { "item": "steel_pan", "prob": 80 }, { "item": "copper_pan", "prob": 30 }, diff --git a/data/json/itemgroups/ammo.json b/data/json/itemgroups/ammo.json index 187d59f1e8749..5ad2b1e48ff9e 100644 --- a/data/json/itemgroups/ammo.json +++ b/data/json/itemgroups/ammo.json @@ -343,7 +343,12 @@ "id": "ammo_parts", "//": "Raw materials for assembling ammo excluding casings.", "items": [ - [ "gunpowder", 320 ], + [ "gunpowder_shotgun", 20 ], + [ "gunpowder_pistol", 105 ], + [ "gunpowder_magnum_pistol", 60 ], + [ "gunpowder_rifle", 85 ], + [ "gunpowder_large_rifle", 40 ], + [ "gunpowder_artillery", 5 ], [ "incendiary", 20 ], [ "lead", 160 ], [ "shotgun_primer", 80 ], diff --git a/data/json/itemgroups/books.json b/data/json/itemgroups/books.json index 200486cec9276..2589778bf6e89 100644 --- a/data/json/itemgroups/books.json +++ b/data/json/itemgroups/books.json @@ -680,6 +680,11 @@ "type": "item_group", "items": [ [ "record_weather", 100 ] ] }, + { + "id": "isherwood_mission_reward_herbal", + "type": "item_group", + "items": [ [ "isherwood_herbal_remedies", 100 ] ] + }, { "id": "tailorbooks", "type": "item_group", diff --git a/data/json/itemgroups/collections_domestic.json b/data/json/itemgroups/collections_domestic.json index bf098d19f0ee8..06373bed55843 100644 --- a/data/json/itemgroups/collections_domestic.json +++ b/data/json/itemgroups/collections_domestic.json @@ -66,6 +66,8 @@ [ "pressure_cooker", 5 ], [ "teapot", 40 ], [ "kettle", 40 ], + [ "colander_steel", 35 ], + [ "splatter_guard", 10 ], [ "jar_glass", 50 ], [ "jar_3l_glass", 40 ], [ "bowl_pewter", 25 ], diff --git a/data/json/itemgroups/guns.json b/data/json/itemgroups/guns.json index 6b75394e22e34..97cada03a65ca 100644 --- a/data/json/itemgroups/guns.json +++ b/data/json/itemgroups/guns.json @@ -68,6 +68,10 @@ "items": [ { "item": "m17", "prob": 100, "charges-min": 0, "charges-max": 17 }, { "item": "glock_18c", "prob": 70, "charges-min": 0, "charges-max": 17 }, + { "item": "mk23", "prob": 10, "charges-min": 0, "charges-max": 12 }, + { "item": "usp_45", "prob": 15, "charges-min": 0, "charges-max": 12 }, + { "item": "m1911_MEU", "prob": 5, "charges-min": 0, "charges-max": 7 }, + { "item": "glock_19", "prob": 20, "charges-min": 0, "charges-max": 15 }, { "item": "needlepistol", "prob": 45, "charges-min": 0, "charges-max": 50 }, { "item": "rm103a_pistol", "prob": 35, "charges-min": 0, "charges-max": 10 } ] @@ -153,7 +157,7 @@ "type": "item_group", "id": "guns_smg_improvised", "//": "Makeshift or otherwise poor quality SMGs.", - "items": [ [ "smg_22", 50 ], [ "smg_38", 30 ], [ "smg_40", 40 ], [ "smg_45", 40 ], [ "smg_9mm", 100 ] ] + "items": [ [ "smg_40", 40 ], [ "smg_45", 40 ], [ "smg_9mm", 100 ] ] }, { "type": "item_group", diff --git a/data/json/itemgroups/magazines.json b/data/json/itemgroups/magazines.json index 7becc2f2e47af..392d501682bfa 100644 --- a/data/json/itemgroups/magazines.json +++ b/data/json/itemgroups/magazines.json @@ -197,7 +197,7 @@ "type": "item_group", "id": "mags_smg_makeshift", "//": "Makeshift or otherwise poor quality SMG magazines.", - "items": [ [ "survivor9mm_mag", 50 ], [ "smg_22_mag", 20 ], [ "smg_38_mag", 15 ], [ "smg_40_mag", 15 ], [ "smg_45_mag", 20 ] ] + "items": [ [ "survivor9mm_mag", 50 ], [ "smg_40_mag", 15 ], [ "smg_45_mag", 20 ] ] }, { "type": "item_group", diff --git a/data/json/items/ammo.json b/data/json/items/ammo.json index 76dc661775d83..395f900bfd195 100644 --- a/data/json/items/ammo.json +++ b/data/json/items/ammo.json @@ -468,20 +468,68 @@ "type": "AMMO", "id": "gunpowder", "category": "chems", - "price": 3000, - "name": "gunpowder", + "price": 500, + "name": "mixed gunpowder", "symbol": "=", "color": "dark_gray", - "description": "Firearm-quality gunpowder.", - "container": "bottle_plastic_small", + "description": "Firearm-quality gunpowder, mixed without concern for composition, burn rate or shape. It has been slightly ground to make its properties more uniform. Only the truly desperate would attempt to reload with this.", + "container": "bottle_plastic", "material": "powder", "flags": [ "TINDER" ], "volume": "250 ml", "weight": 1, "ammo_type": "components", - "count": 200, + "count": 454, "effects": [ "COOKOFF" ] }, + { + "type": "AMMO", + "id": "gunpowder_shotgun", + "copy-from": "gunpowder", + "price": 3000, + "name": "smokeless shotgun powder", + "description": "Firearm-quality gunpowder, intended for use in shotgun shells." + }, + { + "type": "AMMO", + "id": "gunpowder_pistol", + "copy-from": "gunpowder", + "price": 3000, + "name": "smokeless pistol powder", + "description": "Firearm-quality gunpowder, intended for use in pistol ammunition." + }, + { + "type": "AMMO", + "id": "gunpowder_magnum_pistol", + "copy-from": "gunpowder", + "price": 3000, + "name": "smokeless magnum powder", + "description": "Firearm-quality gunpowder intended for use in magnum pistol ammunition." + }, + { + "type": "AMMO", + "id": "gunpowder_rifle", + "copy-from": "gunpowder", + "price": 3000, + "name": "smokeless rifle powder", + "description": "Firearm-quality gunpowder intended for use in rifle ammunition." + }, + { + "type": "AMMO", + "id": "gunpowder_large_rifle", + "copy-from": "gunpowder", + "price": 3000, + "name": "smokeless overbore rifle powder", + "description": "Firearm-quality gunpowder intended for use in large rifle ammunition." + }, + { + "type": "AMMO", + "id": "gunpowder_artillery", + "copy-from": "gunpowder", + "price": 3000, + "name": "artillery propellant", + "description": "Single base smokeless gunpowder intended for use in artillery propelling charges." + }, { "type": "AMMO", "id": "oxy_powder", @@ -948,6 +996,7 @@ "price": 12000, "//": "This seems like the larger medical tank, not an instant-use model with mask attached", "name": "oxygen", + "name_plural": "oxygen", "symbol": "=", "color": "light_gray", "description": "A canister of oxygen.", diff --git a/data/json/items/armor/backpacks.json b/data/json/items/armor/backpacks.json index 9cbaa78fb9342..d02bbc0f62a3e 100644 --- a/data/json/items/armor/backpacks.json +++ b/data/json/items/armor/backpacks.json @@ -198,7 +198,7 @@ "encumbrance": 30, "warmth": 5, "material_thickness": 2, - "container_data": { "contains": 40, "seals": true, "watertight": true }, + "container_data": { "contains": "10 L", "seals": true, "watertight": true }, "flags": [ "OVERSIZE", "BELTED", "WATER_FRIENDLY" ] }, { diff --git a/data/json/items/armor/boots.json b/data/json/items/armor/boots.json index fef0410e93404..6e76393d39de7 100644 --- a/data/json/items/armor/boots.json +++ b/data/json/items/armor/boots.json @@ -422,7 +422,7 @@ "description": "Stiff leather boots with intricate embroidery and one-inch heels. They look good, but aren't made for running. Each boot is large enough to conceal a small holdout pistol.", "coverage": 95, "proportional": { "weight": 1.2, "volume": 1.2, "price": 2, "encumbrance": 2 }, - "use_action": { "type": "holster", "max_volume": 1, "max_weight": 600, "draw_cost": 80, "multi": 2, "skills": [ "pistol" ] }, + "use_action": { "type": "holster", "max_volume": "250 ml", "max_weight": 600, "draw_cost": 80, "multi": 2, "skills": [ "pistol" ] }, "extend": { "flags": [ "FANCY" ] } }, { diff --git a/data/json/items/armor/holster.json b/data/json/items/armor/holster.json index 32601019cb5c5..232dcd8e0fe1e 100644 --- a/data/json/items/armor/holster.json +++ b/data/json/items/armor/holster.json @@ -14,7 +14,7 @@ "coverage": 5, "encumbrance": 5, "material_thickness": 1, - "use_action": { "type": "holster", "max_volume": 15, "draw_cost": 150, "skills": [ "smg", "shotgun", "rifle", "launcher" ] }, + "use_action": { "type": "holster", "max_volume": "3750 ml", "draw_cost": 150, "skills": [ "smg", "shotgun", "rifle", "launcher" ] }, "flags": [ "BELTED", "OVERSIZE", "NO_QUICKDRAW" ] }, { @@ -33,7 +33,14 @@ "encumbrance": 4, "material_thickness": 1, "flags": [ "BELTED", "OVERSIZE", "ALLOWS_NATURAL_ATTACKS" ], - "use_action": { "type": "holster", "max_volume": 2, "min_volume": 0, "max_weight": 1000, "draw_cost": 150, "skills": [ "pistol" ] } + "use_action": { + "type": "holster", + "max_volume": "500 ml", + "min_volume": 0, + "max_weight": 1000, + "draw_cost": 150, + "skills": [ "pistol" ] + } }, { "id": "bow_sling", @@ -52,7 +59,7 @@ "encumbrance": 7, "material_thickness": 1, "flags": [ "OVERSIZE", "WAIST" ], - "use_action": { "type": "holster", "max_volume": 20, "min_volume": 2, "skills": [ "archery" ] } + "use_action": { "type": "holster", "max_volume": "5 L", "min_volume": "500 ml", "skills": [ "archery" ] } }, { "id": "holster", @@ -69,7 +76,7 @@ "coverage": 5, "encumbrance": 5, "material_thickness": 1, - "use_action": { "type": "holster", "max_volume": 5, "min_volume": 2, "skills": [ "pistol", "smg", "shotgun" ] }, + "use_action": { "type": "holster", "max_volume": "1250 ml", "min_volume": "500 ml", "skills": [ "pistol", "smg", "shotgun" ] }, "flags": [ "WAIST", "OVERSIZE" ] }, { @@ -79,7 +86,7 @@ "name": "fast draw holster", "description": "A comfortable quick draw holster for small guns. Activate to holster/draw a gun.", "encumbrance": 2, - "use_action": { "type": "holster", "max_volume": 4, "draw_cost": 80, "skills": [ "pistol", "shotgun" ] } + "use_action": { "type": "holster", "max_volume": "1 L", "draw_cost": 80, "skills": [ "pistol", "shotgun" ] } }, { "id": "bholster", @@ -93,7 +100,14 @@ "material": "plastic", "covers": [ "LEGS" ], "encumbrance": 1, - "use_action": { "type": "holster", "max_volume": 2, "min_volume": 0, "max_weight": 1000, "draw_cost": 210, "skills": [ "pistol" ] }, + "use_action": { + "type": "holster", + "max_volume": "500 ml", + "min_volume": 0, + "max_weight": 1000, + "draw_cost": 210, + "skills": [ "pistol" ] + }, "flags": [ "SKINTIGHT", "WATER_FRIENDLY" ] }, { @@ -113,7 +127,7 @@ "encumbrance": 2, "storage": "3 L", "material_thickness": 2, - "use_action": { "type": "holster", "max_volume": 15, "min_volume": 5, "skills": [ "smg", "shotgun", "rifle" ] }, + "use_action": { "type": "holster", "max_volume": "3750 ml", "min_volume": "1250 ml", "skills": [ "smg", "shotgun", "rifle" ] }, "flags": [ "WATER_FRIENDLY", "STURDY", "WAIST" ] }, { @@ -132,7 +146,7 @@ "coverage": 10, "encumbrance": 2, "material_thickness": 1, - "use_action": { "type": "holster", "min_volume": 5, "max_volume": 8, "skills": [ "pistol", "smg", "shotgun", "rifle" ] }, + "use_action": { "type": "holster", "min_volume": "1250 ml", "max_volume": "2 L", "skills": [ "pistol", "smg", "shotgun", "rifle" ] }, "flags": [ "WAIST", "OVERSIZE" ] } ] diff --git a/data/json/items/bionics.json b/data/json/items/bionics.json index 1b25f3b58bff7..61b1873ec762f 100644 --- a/data/json/items/bionics.json +++ b/data/json/items/bionics.json @@ -936,7 +936,7 @@ "copy-from": "bionic_general_faulty", "type": "BIONIC_ITEM", "name": "Squeaky Ankles", - "plural_name": "Squeaky Ankles", + "name_plural": "Squeaky Ankles", "description": "A pair of defective bionics that make squeaking noises.", "weight": 100, "difficulty": 4 @@ -946,7 +946,7 @@ "copy-from": "bionic_general_faulty", "type": "BIONIC_ITEM", "name": "Pieces Of Junk", - "plural_name": "Pieces of Junk", + "name_plural": "Pieces of Junk", "description": "A jumble of broken metal pieces that were removed during reconstructive surgery.", "difficulty": 5 }, @@ -1069,7 +1069,7 @@ "copy-from": "bionic_general_faulty", "type": "BIONIC_ITEM", "name": "Wire-Induced Stiffness", - "plural_name": "Wire-Induced Stiffnesses", + "name_plural": "Wire-Induced Stiffnesses", "description": "A length of poorly installed wiring that would cause stiffness.", "difficulty": 7 }, @@ -1078,7 +1078,7 @@ "copy-from": "bionic_general_faulty", "type": "BIONIC_ITEM", "name": "Self-Locking Thumbs", - "plural_name": "Self-Locking Thumbs", + "name_plural": "Self-Locking Thumbs", "description": "A pair of faulty, self-locking thumb bionics.", "weight": 50, "difficulty": 5 diff --git a/data/json/items/book/survival.json b/data/json/items/book/survival.json index 16c140a1400de..1a44a04d5a749 100644 --- a/data/json/items/book/survival.json +++ b/data/json/items/book/survival.json @@ -145,5 +145,25 @@ "max_level": 6, "intelligence": 8, "time": "30 m" + }, + { + "id": "isherwood_herbal_remedies", + "type": "BOOK", + "name": "Natural Remedies of New England", + "name_plural": "copies of Natural Remedies of New England", + "description": "A leather bound manuscript, it features native herbal remedies with hand colored illustrations of each plant.", + "weight": 400, + "volume": "1250 ml", + "price": 50000, + "bashing": 5, + "material": [ "paper", "leather" ], + "symbol": "?", + "color": "light_gray", + "skill": "survival", + "required_level": 1, + "max_level": 5, + "intelligence": 8, + "time": "20 m", + "fun": 4 } ] diff --git a/data/json/items/comestibles/carnivore.json b/data/json/items/comestibles/carnivore.json index 88373f6d83268..7baeb0254ccd2 100644 --- a/data/json/items/comestibles/carnivore.json +++ b/data/json/items/comestibles/carnivore.json @@ -512,6 +512,7 @@ "price": 0, "material": "flesh", "volume": "250 ml", + "parasites": 32, "stack_size": 1, "fun": -20 }, diff --git a/data/json/items/comestibles/irradiated_veggy.json b/data/json/items/comestibles/irradiated_veggy.json index 1bca3339fe2ed..f78bc98a9cb5d 100644 --- a/data/json/items/comestibles/irradiated_veggy.json +++ b/data/json/items/comestibles/irradiated_veggy.json @@ -120,7 +120,7 @@ "price": 320, "material": "veggy", "flags": [ "FREEZERBURN", "SMOKABLE" ], - "volume": 1 + "volume": "250 ml" }, { "type": "COMESTIBLE", @@ -136,7 +136,7 @@ "description": "An irradiated cluster of celery will remain edible nearly forever. Sterilized using radiation, so it's safe to eat.", "price": 220, "material": "veggy", - "volume": 1 + "volume": "250 ml" }, { "type": "COMESTIBLE", diff --git a/data/json/items/comestibles/med.json b/data/json/items/comestibles/med.json index 58e3b93efa8fe..da546a1eac5c3 100644 --- a/data/json/items/comestibles/med.json +++ b/data/json/items/comestibles/med.json @@ -55,7 +55,7 @@ "type": "COMESTIBLE", "comestible_type": "MED", "name": "antibiotics", - "plural_name": "antibiotics", + "name_plural": "antibiotics", "description": "A prescription-strength antibacterial medication designed to prevent or stop the spread of infection. It's the quickest and most reliable way to cure any infections you might have. One dose lasts twelve hours.", "weight": 1, "volume": "250 ml", @@ -1402,7 +1402,7 @@ "name_plural": "Panaceii", "description": "An apple-red gel capsule the size of your thumbnail, filled with a thick oily liquid that shifts from black to purple at unpredictable intervals, flecked with tiny gray dots. Given the place you got it from, it's either very potent, or highly experimental. Holding it, all the little aches and pains seem to fade, just for a moment...", "weight": 15, - "volume": "250 ml", + "volume": "5 ml", "price": 1000000, "stack_size": 5, "material": "plastic", diff --git a/data/json/items/comestibles/nuts.json b/data/json/items/comestibles/nuts.json index 050854a234b32..f1bae69ee13da 100644 --- a/data/json/items/comestibles/nuts.json +++ b/data/json/items/comestibles/nuts.json @@ -434,7 +434,7 @@ "volume": "250 ml", "flags": [ "EDIBLE_FROZEN", "NUTRIENT_OVERRIDE" ], "charges": 4, - "//": "no vitamins here", + "//2": "no vitamins here", "fun": -20 }, { @@ -465,6 +465,6 @@ "price": 90, "material": "nut", "vitamins": [ [ "calcium", 4 ], [ "iron", 4 ] ], - "volume": 1 + "volume": "250 ml" } ] diff --git a/data/json/items/comestibles/other.json b/data/json/items/comestibles/other.json index c5acf9a7b9ac9..6c0fc9a2a5c6c 100644 --- a/data/json/items/comestibles/other.json +++ b/data/json/items/comestibles/other.json @@ -12,7 +12,7 @@ "calories": 1000, "description": "Not very nutritious. Warning: contains calories, unsuitable for breatharians.", "price": 100, - "volume": 1 + "volume": "250 ml" }, { "type": "COMESTIBLE", @@ -640,7 +640,7 @@ "price": 0, "material": "veggy", "flags": "TRADER_AVOID", - "volume": 1 + "volume": "250 ml" }, { "type": "COMESTIBLE", @@ -657,7 +657,7 @@ "price": 0, "material": "veggy", "flags": "TRADER_AVOID", - "volume": 1 + "volume": "250 ml" }, { "type": "COMESTIBLE", @@ -673,6 +673,6 @@ "description": "Some nectar. Seeing this item is a bug.", "price": 0, "flags": "TRADER_AVOID", - "volume": 1 + "volume": "250 ml" } ] diff --git a/data/json/items/containers.json b/data/json/items/containers.json index e5a95f8ac8ebd..931b41e1c3fda 100644 --- a/data/json/items/containers.json +++ b/data/json/items/containers.json @@ -266,7 +266,7 @@ "material": "paper", "symbol": ")", "color": "white", - "contains": 1 + "contains": "250 ml" }, { "id": "box_small", @@ -281,7 +281,7 @@ "material": "paper", "symbol": ")", "color": "brown", - "contains": 4 + "contains": "1 L" }, { "id": "box_medium", @@ -297,7 +297,7 @@ "material": "paper", "symbol": ")", "color": "brown", - "contains": 12 + "contains": "3 L" }, { "id": "box_large", @@ -350,7 +350,7 @@ "contains": "2 L", "seals": true, "watertight": true, - "armor_data": { "covers": [ "TORSO" ], "coverage": 15, "storage": 4, "material_thickness": 1 }, + "armor_data": { "covers": [ "TORSO" ], "coverage": 15, "storage": "1 L", "material_thickness": 1 }, "flags": [ "BELTED" ] }, { @@ -1143,5 +1143,22 @@ "preserves": false, "unseals_into": "null", "qualities": [ [ "CONTAIN", 1 ], [ "BOIL", 2 ] ] + }, + { + "id": "survival_kit_box", + "type": "CONTAINER", + "category": "other", + "name": "survival kit box", + "description": "An aluminum box that used to contain a small survival kit. Can hold 1 liter of liquid.", + "weight": 200, + "volume": "1 L", + "price": 0, + "material": "aluminum", + "symbol": "!", + "color": "light_cyan", + "contains": "1 L", + "seals": true, + "watertight": true, + "qualities": [ [ "CONTAIN", 1 ], [ "BOIL", 2 ] ] } ] diff --git a/data/json/items/generic.json b/data/json/items/generic.json index 9cc81d149c5cb..71525a2ea1366 100644 --- a/data/json/items/generic.json +++ b/data/json/items/generic.json @@ -205,7 +205,7 @@ "material": [ "nomex" ], "flags": [ "NO_SALVAGE" ], "weight": 42, - "volume": 1 + "volume": "250 ml" }, { "type": "GENERIC", @@ -696,7 +696,7 @@ "price_postapoc": 100, "material": "iron", "weight": 3220, - "volume": 3 + "volume": "750 ml" }, { "type": "GENERIC", @@ -710,7 +710,7 @@ "price_postapoc": 500, "material": "steel", "weight": 8440, - "volume": 20 + "volume": "5 L" }, { "type": "GENERIC", @@ -770,7 +770,7 @@ "price_postapoc": 100, "material": "iron", "weight": 226, - "volume": 1 + "volume": "250 ml" }, { "type": "GENERIC", @@ -784,7 +784,7 @@ "price_postapoc": 100, "material": "iron", "weight": 226, - "volume": 1 + "volume": "250 ml" }, { "type": "GENERIC", @@ -824,7 +824,7 @@ "price": 1000, "material": [ "aluminum", "plastic" ], "weight": 725, - "volume": 3 + "volume": "750 ml" }, { "type": "GENERIC", @@ -836,7 +836,7 @@ "price": 1000, "material": [ "steel", "plastic" ], "weight": 11339, - "volume": 12 + "volume": "3 L" }, { "type": "GENERIC", @@ -1450,7 +1450,7 @@ "price": 1000, "material": [ "steel", "plastic" ], "weight": 110, - "volume": 1 + "volume": "250 ml" }, { "type": "GENERIC", @@ -1506,7 +1506,7 @@ "price_postapoc": 100, "material": [ "aluminum", "plastic" ], "weight": 2857, - "volume": 4 + "volume": "1 L" }, { "type": "GENERIC", @@ -1547,7 +1547,7 @@ "material": "cotton", "flags": [ "NO_SALVAGE", "TRADER_AVOID" ], "weight": 80, - "volume": 1 + "volume": "250 ml" }, { "id": "pipe_cleaner", @@ -1589,7 +1589,7 @@ "price_postapoc": 0, "material": "steel", "weight": 50, - "volume": 1 + "volume": "250 ml" }, { "id": "l_HFPack", @@ -2372,7 +2372,7 @@ "price": 100, "material": [ "paper" ], "weight": 80, - "volume": 2 + "volume": "500 ml" }, { "type": "GENERIC", @@ -2564,7 +2564,7 @@ "price": 2000, "material": "veggy", "weight": 420, - "volume": 4 + "volume": "1 L" }, { "type": "GENERIC", @@ -2578,7 +2578,7 @@ "price": 300, "material": "veggy", "weight": 100, - "volume": 1 + "volume": "250 ml" }, { "id": "cash_card", @@ -2985,7 +2985,7 @@ "price_postapoc": 2000, "material": [ "steel", "plastic", "wood" ], "weight": 11339, - "volume": 12 + "volume": "3 L" }, { "type": "GENERIC", @@ -3063,5 +3063,20 @@ "bashing": 8, "to_hit": -2, "qualities": [ [ "HAMMER", 1 ] ] + }, + { + "id": "survival_kit", + "type": "GENERIC", + "category": "tools", + "name": "survival kit", + "description": "A small box filled with tools and items to help you survive in case of an emergency. Disassemble to get its content.", + "weight": 1612, + "volume": "1 L", + "price": 5000, + "material": "aluminum", + "symbol": "!", + "color": "green", + "use_action": "DISASSEMBLE", + "flags": [ "NO_REPAIR" ] } ] diff --git a/data/json/items/generic/casing.json b/data/json/items/generic/casing.json index 7aba76c4e20f2..d52ccb6c33167 100644 --- a/data/json/items/generic/casing.json +++ b/data/json/items/generic/casing.json @@ -330,7 +330,7 @@ "description": "An empty steel tube which once contained a 152mm ATGM. Now it's essentially just a huge pipe.", "material": "steel", "weight": 9500, - "volume": 30 + "volume": "7500 ml" }, { "id": "shot_hull", diff --git a/data/json/items/generic/dining_kitchen.json b/data/json/items/generic/dining_kitchen.json index 797f57072a59b..e78fa69d59fb5 100644 --- a/data/json/items/generic/dining_kitchen.json +++ b/data/json/items/generic/dining_kitchen.json @@ -139,7 +139,7 @@ "symbol": ")", "description": "A perfectly ordinary ceramic soup bowl.", "copy-from": "base_ceramic_dish", - "container_data": { "contains": 2, "watertight": true }, + "container_data": { "contains": "500 ml", "watertight": true }, "qualities": [ [ "BOIL", 2 ], [ "CONTAIN", 1 ] ] }, { @@ -151,7 +151,7 @@ "description": "A light ceramic teacup. Quite classy.", "copy-from": "base_ceramic_dish", "proportional": { "weight": 0.6 }, - "container_data": { "contains": 1, "watertight": true }, + "container_data": { "contains": "250 ml", "watertight": true }, "qualities": [ [ "BOIL", 2 ], [ "CONTAIN", 1 ] ] }, { @@ -163,7 +163,7 @@ "description": "A ceramic coffee cup with a logo on the side.", "copy-from": "base_ceramic_dish", "proportional": { "weight": 0.8 }, - "container_data": { "contains": 1, "watertight": true }, + "container_data": { "contains": "250 ml", "watertight": true }, "qualities": [ [ "BOIL", 2 ], [ "CONTAIN", 1 ] ], "snippet_category": [ { "id": "mug1", "text": "The side of the mug reads 'World's Greatest Dad'." }, @@ -211,7 +211,7 @@ "looks_like": "ceramic_cup", "proportional": { "weight": 0.8 }, "copy-from": "base_tin_dish", - "container_data": { "contains": 1, "watertight": true }, + "container_data": { "contains": "250 ml", "watertight": true }, "qualities": [ [ "BOIL", 2 ], [ "CONTAIN", 1 ] ] }, { @@ -222,7 +222,7 @@ "description": "A small pewter serving bowl without a lid. Holds 250 ml of liquid.", "copy-from": "base_tin_dish", "symbol": "u", - "container_data": { "contains": 1, "watertight": true }, + "container_data": { "contains": "250 ml", "watertight": true }, "qualities": [ [ "BOIL", 2 ], [ "CONTAIN", 1 ] ] }, { @@ -245,7 +245,7 @@ "symbol": "U", "description": "A tall drinking glass.", "copy-from": "base_glass_dish", - "container_data": { "contains": 2, "watertight": true }, + "container_data": { "contains": "500 ml", "watertight": true }, "qualities": [ [ "BOIL", 1 ], [ "CONTAIN", 1 ] ] }, { @@ -258,7 +258,7 @@ "symbol": "Y", "description": "A stemmed drinking glass that makes you feel very fancy when you drink from it.", "copy-from": "base_glass_dish", - "container_data": { "contains": 1, "watertight": true }, + "container_data": { "contains": "250 ml", "watertight": true }, "qualities": [ [ "CONTAIN", 1 ] ] }, { @@ -269,7 +269,7 @@ "symbol": "u", "description": "A glass bowl for soup or dessert.", "copy-from": "base_glass_dish", - "container_data": { "contains": 2, "watertight": true }, + "container_data": { "contains": "500 ml", "watertight": true }, "qualities": [ [ "BOIL", 1 ], [ "CONTAIN", 1 ] ] }, { @@ -290,7 +290,7 @@ "symbol": "U", "description": "A durable plastic drinking vessel. This one is made of clear acrylic and looks almost like glass.", "copy-from": "base_plastic_dish", - "container_data": { "contains": 2, "watertight": true }, + "container_data": { "contains": "500 ml", "watertight": true }, "qualities": [ [ "CONTAIN", 1 ] ] }, { @@ -302,7 +302,7 @@ "description": "A plastic bowl with a convenient sealing lid. Holds 750 ml of liquid.", "copy-from": "base_plastic_dish", "volume": "750 ml", - "container_data": { "contains": 3, "seals": true, "watertight": true }, + "container_data": { "contains": "750 ml", "seals": true, "watertight": true }, "qualities": [ [ "CONTAIN", 1 ] ] }, { @@ -314,7 +314,7 @@ "proportional": { "weight": 0.6, "volume": 0.5 }, "description": "A plastic bowl designed for use by children.", "copy-from": "base_plastic_dish", - "container_data": { "contains": 1, "watertight": true }, + "container_data": { "contains": "250 ml", "watertight": true }, "qualities": [ [ "CONTAIN", 1 ] ], "snippet_category": [ { "id": "kbowl1", "text": "This bowl is decorated with cartoon bears." }, @@ -624,7 +624,7 @@ "weight": 550, "volume": "2 L", "bashing": 6, - "container_data": { "contains": 8, "watertight": true } + "container_data": { "contains": "2 L", "watertight": true } }, { "type": "GENERIC", @@ -638,7 +638,7 @@ "weight": 3000, "volume": "2 L", "bashing": 10, - "container_data": { "contains": 8, "watertight": true } + "container_data": { "contains": "2 L", "watertight": true } }, { "type": "GENERIC", @@ -652,7 +652,7 @@ "weight": 750, "volume": "2 L", "bashing": 6, - "container_data": { "contains": 8, "watertight": true } + "container_data": { "contains": "2 L", "watertight": true } }, { "type": "GENERIC", @@ -666,7 +666,7 @@ "weight": 650, "volume": "2 L", "bashing": 4, - "container_data": { "contains": 8, "watertight": true } + "container_data": { "contains": "2 L", "watertight": true } }, { "type": "GENERIC", @@ -681,7 +681,7 @@ "volume": "9 L", "//": "Volume assumes you can stick some stuff in the pot inside your bag", "bashing": 8, - "container_data": { "contains": 48, "watertight": true } + "container_data": { "contains": "12 L", "watertight": true } }, { "id": "pot_canning", @@ -697,7 +697,7 @@ "material": "steel", "symbol": ")", "color": "dark_gray", - "container_data": { "contains": 100, "watertight": true }, + "container_data": { "contains": "25 L", "watertight": true }, "qualities": [ [ "COOK", 3 ], [ "BOIL", 2 ], [ "CONTAIN", 1 ], [ "CHEM", 1 ] ], "use_action": "HEAT_FOOD" }, @@ -714,7 +714,7 @@ "weight": 2628, "volume": "1 L", "bashing": 12, - "container_data": { "contains": 4, "watertight": true }, + "container_data": { "contains": "1 L", "watertight": true }, "delete": { "qualities": [ [ "COOK", 3 ] ] }, "extend": { "qualities": [ [ "HAMMER", 1 ], [ "COOK", 2 ] ] } }, @@ -731,7 +731,7 @@ "weight": 528, "volume": "1 L", "bashing": 8, - "container_data": { "contains": 8, "watertight": true }, + "container_data": { "contains": "2 L", "watertight": true }, "delete": { "qualities": [ [ "COOK", 3 ] ] }, "extend": { "qualities": [ [ "COOK", 2 ] ] } }, @@ -748,7 +748,7 @@ "weight": 628, "volume": "1 L", "bashing": 7, - "container_data": { "contains": 4, "watertight": true }, + "container_data": { "contains": "1 L", "watertight": true }, "delete": { "qualities": [ [ "COOK", 3 ] ] }, "extend": { "qualities": [ [ "COOK", 2 ] ] } }, @@ -767,7 +767,7 @@ "material": "steel", "symbol": ")", "color": "light_gray", - "container_data": { "contains": 4, "watertight": true }, + "container_data": { "contains": "1 L", "watertight": true }, "qualities": [ [ "COOK", 2 ], [ "BOIL", 2 ], [ "CONTAIN", 1 ] ], "use_action": "HEAT_FOOD" }, @@ -786,7 +786,7 @@ "material": "copper", "symbol": ")", "color": "light_red", - "container_data": { "contains": 4, "watertight": true }, + "container_data": { "contains": "1 L", "watertight": true }, "qualities": [ [ "COOK", 2 ], [ "BOIL", 2 ], [ "CONTAIN", 1 ] ], "use_action": "HEAT_FOOD" }, @@ -802,9 +802,32 @@ "weight": 728, "volume": "1500 ml", "bashing": 5, - "container_data": { "contains": 6, "watertight": true }, + "container_data": { "contains": "1500 ml", "watertight": true }, "delete": { "qualities": [ [ "COOK", 3 ] ] } }, + { + "id": "colander_steel", + "name": "mesh colander", + "category": "other", + "description": "A stainless steel mesh colander, for washing rice, vegetables or straining liquid off from noodles or other foods.", + "type": "GENERIC", + "volume": 2, + "weight": 318, + "symbol": ")", + "price": 600, + "price_postapoc": 5 + }, + { + "id": "splatter_guard", + "name": "splatter guard", + "description": "A stainless steel mesh screen for preventing flying oil from getting all over your nice counters (or you) when frying.", + "type": "GENERIC", + "volume": 2, + "weight": 357, + "symbol": ")", + "price": 600, + "price_postapoc": 5 + }, { "id": "cutting_board", "type": "GENERIC", diff --git a/data/json/items/gun/22.json b/data/json/items/gun/22.json index 06d3cf02bc3eb..f80075afbbcae 100644 --- a/data/json/items/gun/22.json +++ b/data/json/items/gun/22.json @@ -261,43 +261,6 @@ "magazine_well": 1, "magazines": [ [ "22", [ "mosquitomag" ] ] ] }, - { - "id": "smg_22", - "copy-from": "smg_base", - "type": "GUN", - "name": "Luty SMG: .22", - "name_plural": "Luty SMGs: .22", - "description": "A Luty pattern makeshift smoothbore SMG crudely constructed out of various steel parts using some of the more advanced powered hand tools; likely one of the most complex guns that are feasible to make outside of a machine shop, but still very unreliable. This one is chambered for .22 LR cartridges and accepts Ruger 10/22 magazines, or alternatively custom-made makeshift ones.", - "//": "Crafting recipe must make use of angle grinder, bench grinder, set square and vise, which don't yet exist in game.", - "weight": 3274, - "volume": "1750 ml", - "price": 20000, - "to_hit": -1, - "bashing": 10, - "material": "steel", - "color": "dark_gray", - "ammo": "22", - "ranged_damage": -2, - "dispersion": 590, - "durability": 4, - "modes": [ [ "DEFAULT", "auto", 10 ] ], - "loudness": 25, - "barrel_length": 1, - "valid_mod_locations": [ - [ "accessories", 3 ], - [ "barrel", 1 ], - [ "brass catcher", 1 ], - [ "grip", 1 ], - [ "magazine", 1 ], - [ "muzzle", 1 ], - [ "rail", 1 ], - [ "sights", 1 ], - [ "sling", 1 ], - [ "stock", 1 ], - [ "underbarrel", 1 ] - ], - "magazines": [ [ "22", [ "ruger1022mag", "ruger1022bigmag", "smg_22_mag" ] ] ] - }, { "id": "sw_22", "copy-from": "pistol_base", diff --git a/data/json/items/gun/38.json b/data/json/items/gun/38.json index f98a1bfdb46bf..ba46a8ebee15c 100644 --- a/data/json/items/gun/38.json +++ b/data/json/items/gun/38.json @@ -129,43 +129,6 @@ [ "underbarrel", 1 ] ] }, - { - "id": "smg_38", - "copy-from": "smg_base", - "type": "GUN", - "name": "Luty SMG: .38 Special", - "name_plural": "Luty SMGs: .38 Special", - "description": "A Luty pattern makeshift smoothbore SMG crudely constructed out of various steel parts using some of the more advanced powered hand tools; likely one of the most complex guns that are feasible to make outside of a machine shop, but still very unreliable. This one is chambered for .38 Special cartridges and accepts Taurus Pro .38 pistol magazines, or alternatively custom-made makeshift ones.", - "//": "Crafting recipe must make use of angle grinder, bench grinder, set square and vise, which don't yet exist in game.", - "weight": 3274, - "volume": "1750 ml", - "price": 20000, - "to_hit": -1, - "bashing": 10, - "material": "steel", - "color": "dark_gray", - "ammo": "38", - "ranged_damage": -3, - "dispersion": 590, - "durability": 4, - "modes": [ [ "DEFAULT", "auto", 10 ] ], - "loudness": 25, - "barrel_length": 1, - "valid_mod_locations": [ - [ "accessories", 3 ], - [ "barrel", 1 ], - [ "brass catcher", 1 ], - [ "grip", 1 ], - [ "magazine", 1 ], - [ "muzzle", 1 ], - [ "rail", 1 ], - [ "sights", 1 ], - [ "sling", 1 ], - [ "stock", 1 ], - [ "underbarrel", 1 ] - ], - "magazines": [ [ "38", [ "taurus38mag", "smg_38_mag" ] ] ] - }, { "id": "sw_619", "copy-from": "pistol_revolver", diff --git a/data/json/items/gun/40.json b/data/json/items/gun/40.json index ed7de3f17e5bc..c5f882ec16d8f 100644 --- a/data/json/items/gun/40.json +++ b/data/json/items/gun/40.json @@ -112,7 +112,7 @@ "name": "Luty SMG: .40 S&W", "name_plural": "Luty SMGs: .40 S&W", "description": "A Luty pattern makeshift smoothbore SMG crudely constructed out of various steel parts using some of the more advanced powered hand tools; likely one of the most complex guns that are feasible to make outside of a machine shop, but still very unreliable. This one is chambered for .40 S&W cartridges and accepts Glock 22 magazines, or alternatively custom-made makeshift ones.", - "//": "Crafting recipe must make use of angle grinder, bench grinder, set square and vise, which don't yet exist in game.", + "//": "Crafting recipe must make use of angle grinder, bench grinder, set square and vise, which don't yet exist in game. No factory mags until UMP40, mp5/40, or other straight .40 mags are implemented.", "weight": 3274, "volume": "1750 ml", "price": 20000, @@ -140,7 +140,7 @@ [ "stock", 1 ], [ "underbarrel", 1 ] ], - "magazines": [ [ "40", [ "glock40mag", "glock40bigmag", "smg_40_mag" ] ] ] + "magazines": [ [ "40", [ "smg_40_mag" ] ] ] }, { "id": "surv_six_shooter", diff --git a/data/json/items/gun/45.json b/data/json/items/gun/45.json index 8cc927350172b..328febeb11fd2 100644 --- a/data/json/items/gun/45.json +++ b/data/json/items/gun/45.json @@ -92,6 +92,18 @@ "magazine_well": 1, "magazines": [ [ "45", [ "m1911mag", "m1911bigmag" ] ] ] }, + { + "id": "m1911_MEU", + "copy-from": "m1911", + "type": "GUN", + "name": "M45A1", + "description": "The M45A1 supplanted earlier M45 MEUSOC pistols in use by Force Recon elements of Marine Expeditionary Units. Where the original M45 pistols were gutted M1911A1's hand-fitted by USMC armorers, the updated M45A1's are hardly different from any other commercial 1911 design save for their dual recoil springs. Most were replaced in 2016 with Glock 19's due to logistics issues.", + "weight": 1105, + "price": 169900, + "color": "brown_yellow", + "dispersion": 420, + "durability": 8 + }, { "id": "mac_10", "type": "GUN", @@ -269,9 +281,19 @@ "ammo": "45", "ranged_damage": 0, "built_in_mods": [ "match_trigger" ], - "default_mods": [ "suppressor" ], "magazines": [ [ "45", [ "usp45mag" ] ] ] }, + { + "id": "mk23", + "copy-from": "usp_45", + "type": "GUN", + "name": "MK 23 MOD 0", + "description": "Jokingly referred to as \"The World's Only Crew-Served Pistol\", this massive pistol was designed as a primary weapon for select \"special operators\". Its cumbersome nature, the introduction of the derivative HK USP series and the logistics of getting .45 ACP ammunition in theater doomed this behemoth to US SOCOM armories. Like the USP, the Mk 23 is a remarkably reliable gun; someone could probably take out a nuclear equipped walking tank with this in their holster.", + "weight": 1200, + "volume": "1607 ml", + "default_mods": [ "suppressor", "laser_sight" ], + "flags": [ "WATERPROOF_GUN", "NEVER_JAMS" ] + }, { "id": "walther_ppq_45", "copy-from": "pistol_base", diff --git a/data/json/items/magazine/22.json b/data/json/items/magazine/22.json index 8867d17e13c86..f0ed5211cc042 100644 --- a/data/json/items/magazine/22.json +++ b/data/json/items/magazine/22.json @@ -129,23 +129,6 @@ "reload_time": 160, "flags": [ "MAG_COMPACT" ] }, - { - "id": "smg_22_mag", - "type": "MAGAZINE", - "name": "makeshift .22 30-round magazine", - "description": "A makeshift 30-round single-column steel magazine which fits Ruger 10/22 rifle, but may fit some makeshift magazine-fed weapons as well. Don't expect much reliability.", - "weight": 300, - "volume": "750 ml", - "price": 4000, - "material": "steel", - "symbol": "#", - "color": "light_gray", - "ammo_type": "22", - "capacity": 30, - "reliability": 1, - "reload_time": 160, - "flags": [ "MAG_COMPACT" ] - }, { "id": "sw22mag", "type": "MAGAZINE", diff --git a/data/json/items/magazine/38.json b/data/json/items/magazine/38.json index bea42469400e0..ca7ba0bd1281b 100644 --- a/data/json/items/magazine/38.json +++ b/data/json/items/magazine/38.json @@ -1,21 +1,4 @@ [ - { - "id": "smg_38_mag", - "type": "MAGAZINE", - "name": "makeshift .38 25-round magazine", - "description": "A makeshift 25-round single-column steel magazine which fits Taurus Pro .38 pistol, but may fit some makeshift magazine-fed firearms as well. Don't expect much reliability.", - "weight": 300, - "volume": "750 ml", - "price": 4000, - "material": "steel", - "symbol": "#", - "color": "light_gray", - "ammo_type": "38", - "capacity": 25, - "reliability": 1, - "reload_time": 160, - "flags": [ "MAG_COMPACT" ] - }, { "id": "taurus38mag", "type": "MAGAZINE", diff --git a/data/json/items/magazine/40.json b/data/json/items/magazine/40.json index caca1153ea4f3..881a07b656008 100644 --- a/data/json/items/magazine/40.json +++ b/data/json/items/magazine/40.json @@ -67,7 +67,7 @@ "id": "smg_40_mag", "type": "MAGAZINE", "name": "makeshift .40 20-round magazine", - "description": "A makeshift 20-round single-column steel magazine which fits Glock 22 pistol, but may fit some makeshift magazine-fed firearms as well. Don't expect much reliability.", + "description": "An improvised magazine that is mostly compatible with a homemade 'Luty' submachinegun, with a simplified feed system. It looks like it might feed 20 rounds of .40S&W.", "weight": 300, "volume": "750 ml", "price": 4000, diff --git a/data/json/items/magazine/45.json b/data/json/items/magazine/45.json index a7dcb0996fb4c..80499629d9bb3 100644 --- a/data/json/items/magazine/45.json +++ b/data/json/items/magazine/45.json @@ -51,7 +51,7 @@ "id": "smg_45_mag", "type": "MAGAZINE", "name": "makeshift .45 20-round magazine", - "description": "A makeshift 20-round single-column steel magazine which fits MAC-10, but may fit some makeshift magazine-fed firearms as well. Don't expect much reliability.", + "description": "An improvised magazine that is mostly compatible with a homemade 'Luty' submachinegun, with a simplified feed system. It looks like it might feed 20 rounds of .45 ACP.", "weight": 300, "volume": "750 ml", "price": 4000, diff --git a/data/json/items/magazine/9mm.json b/data/json/items/magazine/9mm.json index 8bb884884efe4..140e5c8ba6953 100644 --- a/data/json/items/magazine/9mm.json +++ b/data/json/items/magazine/9mm.json @@ -231,7 +231,7 @@ "id": "survivor9mm_mag", "type": "MAGAZINE", "name": "makeshift STEN magazine", - "description": "An improvised magazine designed to be compatible with the STEN submachine gun, with a simplified feed system.", + "description": "An improvised magazine that is mostly compatible with the STEN submachine gun, with a simplified feed system.", "weight": 300, "volume": "500 ml", "price": 4000, diff --git a/data/json/items/migration.json b/data/json/items/migration.json index 4c346b5f05031..26c5316dbea45 100644 --- a/data/json/items/migration.json +++ b/data/json/items/migration.json @@ -633,5 +633,25 @@ "id": "reloaded_270", "type": "MIGRATION", "replace": "reloaded_270win_jsp" + }, + { + "id": "smg_38", + "type": "MIGRATION", + "replace": "smg_45" + }, + { + "id": "smg_38_mag", + "type": "MIGRATION", + "replace": "smg_45_mag" + }, + { + "id": "smg_22", + "type": "MIGRATION", + "replace": "smg_9mm" + }, + { + "id": "smg_22_mag", + "type": "MIGRATION", + "replace": "survivor9mm_mag" } ] diff --git a/data/json/items/tools.json b/data/json/items/tools.json index 54b1a6cf6af09..5c4c128424388 100644 --- a/data/json/items/tools.json +++ b/data/json/items/tools.json @@ -861,6 +861,20 @@ "charges_per_use": 1, "use_action": "CAN_GOO" }, + { + "id": "sieve_steel", + "type": "GENERIC", + "category": "tools", + "name": "sieve", + "description": "This is no mere strainer for noodles; it's a sieve used to separate particles of certain sizes. You could use this to do a really good job sifting flour, remove dust and soil from grain, or perhaps conduct gradiation tests for any civil engineers you might know. This one has been constructed from steel mesh.", + "weight": 318, + "volume": 2, + "price": 700, + "bashing": 2, + "material": [ "steel" ], + "symbol": ";", + "color": "dark_gray" + }, { "id": "carding_paddles", "type": "GENERIC", @@ -1291,7 +1305,7 @@ "material": "clay", "symbol": ")", "color": "brown", - "container_data": { "contains": 8, "watertight": true }, + "container_data": { "contains": "2 L", "watertight": true }, "qualities": [ [ "COOK", 3 ], [ "BOIL", 2 ], [ "CONTAIN", 1 ], [ "CHEM", 1 ] ], "use_action": "HEAT_FOOD", "flags": [ "ALLOWS_REMOTE_USE" ] @@ -1323,7 +1337,7 @@ "material": "clay", "symbol": ")", "color": "brown", - "container_data": { "contains": 3, "watertight": true }, + "container_data": { "contains": "750 ml", "watertight": true }, "qualities": [ [ "BOIL", 1 ] ] }, { @@ -3579,7 +3593,7 @@ "color": "light_gray", "techniques": "WBLOCK_1", "qualities": [ [ "CUT", 1 ], [ "BUTCHER", -42 ] ], - "flags": [ "REACH_ATTACK", "NONCONDUCTIVE", "SHEATH_SPEAR" ] + "flags": [ "REACH_ATTACK", "NONCONDUCTIVE", "SHEATH_SPEAR", "FRAGILE_MELEE" ] }, { "id": "makeshift_hammer", @@ -4989,7 +5003,7 @@ "material": "stone", "symbol": ";", "color": "dark_gray", - "container_data": { "contains": 6, "watertight": true }, + "container_data": { "contains": "1500 ml", "watertight": true }, "qualities": [ [ "COOK", 2 ], [ "BOIL", 1 ], [ "CONTAIN", 1 ] ], "use_action": "HEAT_FOOD", "flags": [ "ALLOWS_REMOTE_USE" ] @@ -5857,7 +5871,7 @@ "material": "steel", "symbol": ")", "color": "dark_gray", - "container_data": { "contains": 2, "watertight": true }, + "container_data": { "contains": "500 ml", "watertight": true }, "qualities": [ [ "BOIL", 1 ] ] }, { @@ -6224,7 +6238,7 @@ "symbol": "*", "color": "red", "explode_in_fire": true, - "explosion": { "power": 250, "shrapnel": { "casing_mass": 2500, "fragment_mass": 2.0, "drop": "scrap", "recovery": 20 } }, + "explosion": { "power": 250, "shrapnel": { "casing_mass": 2500, "fragment_mass": 2, "drop": "scrap", "recovery": 20 } }, "use_action": { "target": "tool_black_powder_charge_act", "msg": "You light the fuse on the black gunpowder charge. Get rid of it quickly!", @@ -6252,13 +6266,13 @@ "max_charges": 20, "turns_per_charge": 1, "explode_in_fire": true, - "explosion": { "power": 250, "shrapnel": { "casing_mass": 2500, "fragment_mass": 2.0, "drop": "scrap", "recovery": 20 } }, + "explosion": { "power": 250, "shrapnel": { "casing_mass": 2500, "fragment_mass": 2, "drop": "scrap", "recovery": 20 } }, "use_action": { "type": "explosion", "sound_volume": 0, "sound_msg": "Kshhh.", "no_deactivate_msg": "You've already lit the fuse - run!", - "explosion": { "power": 500, "shrapnel": { "casing_mass": 2500, "fragment_mass": 2.0, "drop": "scrap", "recovery": 20 } } + "explosion": { "power": 500, "shrapnel": { "casing_mass": 2500, "fragment_mass": 2, "drop": "scrap", "recovery": 20 } } }, "flags": [ "BOMB", "TRADER_AVOID" ] }, @@ -7249,7 +7263,7 @@ "symbol": ")", "color": "light_gray", "looks_like": "pot_canning", - "container_data": { "contains": 8, "seals": true, "watertight": true }, + "container_data": { "contains": "2 L", "seals": true, "watertight": true }, "qualities": [ [ "COOK", 3 ], [ "BOIL", 2 ], [ "CONTAIN", 1 ], [ "CHEM", 1 ] ], "use_action": "HEAT_FOOD", "flags": [ "ALLOWS_REMOTE_USE" ] diff --git a/data/json/items/vehicle/cargo.json b/data/json/items/vehicle/cargo.json index 37505b5aedf4e..3f92e96b81104 100644 --- a/data/json/items/vehicle/cargo.json +++ b/data/json/items/vehicle/cargo.json @@ -87,6 +87,6 @@ "name": "animal locker", "description": "A locker used to contain animals safely during transportation if installed properly. There is room for animal food and other animal care goods. It is meant to hold medium or smaller animals for transport. Use it on a suitable animal to capture, use it on an empty tile to release.", "weight": 10000, - "volume": 125 + "volume": "31250 ml" } ] diff --git a/data/json/items/vehicle/engineering.json b/data/json/items/vehicle/engineering.json index 263d5111b785f..3a37132d509c7 100644 --- a/data/json/items/vehicle/engineering.json +++ b/data/json/items/vehicle/engineering.json @@ -49,7 +49,7 @@ "material": "steel", "category": "veh_parts", "price": 8500, - "volume": 29 + "volume": "7250 ml" }, { "type": "GENERIC", diff --git a/data/json/items/vehicle/farming.json b/data/json/items/vehicle/farming.json index b38452a1f9987..37fe4425138b4 100644 --- a/data/json/items/vehicle/farming.json +++ b/data/json/items/vehicle/farming.json @@ -12,7 +12,7 @@ "material": "steel", "category": "veh_parts", "price": 3500, - "volume": 28 + "volume": "7 L" }, { "type": "GENERIC", diff --git a/data/json/mapgen/isherwood_farms/farm_isherwood.json b/data/json/mapgen/isherwood_farms/farm_isherwood.json index 4fda44bd6092b..2dd1f8cf81963 100644 --- a/data/json/mapgen/isherwood_farms/farm_isherwood.json +++ b/data/json/mapgen/isherwood_farms/farm_isherwood.json @@ -32,12 +32,12 @@ " Wyyy______________+,,,, ,,, UUU ,pwN....Lw F F ", " #_________________W ,, --w--+-|Y.....| F DDDDDDDDDDDDDDDD F ", " #33332_______23333W ,, -u5e4.u.......- F F ", - " #____2_______2____# ,,,, -o............- F DDDDDDDDDDDDDDDD F ", - " #____2_______2____# ###++### -u.....hLLh..H- F Q F ", - " W____g_______g____W #EE__@V# -e.....hLLh..Lw F DDDDDDDDDDDDDDDD F ", - " W____g_______g____W #E__J_0# -z.....hLLh..H- F F ", - " #____2_______2____# ###___^#,+............*- F DDDDDDDDDDDDDDDD F ", - " #____2_______2____# #>Z____+,-*..Y----+----- F F ", + " #____2_______2____# ,,,, -o......hLLh..- F DDDDDDDDDDDDDDDD F ", + " #____2_______2____# ###++### -u......hLLh.H- F Q F ", + " W____g_______g____W #EE__@V# -e......hLLh.Lw F DDDDDDDDDDDDDDDD F ", + " W____g_______g____W #E__J_0# -z......hLLh.H- F F ", + " #____2_______2____# ###___^#,+....vv......*- F DDDDDDDDDDDDDDDD F ", + " #____2_______2____# #>Z____+,-Y.vv----+----- F F ", " #33332_______23333# ###___V# --+---|kk..LH*- F DDDDDDDDDDDDDDDD F ", " #______________yyy# #s___JV# -*.S|d|kh.....w F F ", " W_______________yyW #s____A# wb..+.+....BB.- F DDDDDDDDDDDDDDDD F ", @@ -127,9 +127,13 @@ "p": [ "f_datura", "f_bluebell", "f_mutpoppy", "f_dahlia", "f_flower_tulip", "f_chamomile", "f_flower_spurge", "f_lily" ], "0": "f_drill_press", "@": "f_tablesaw", - "^": [ "f_mitresaw", "f_bandsaw" ] + "^": [ "f_mitresaw", "f_bandsaw" ], + "v": "f_glass_cabinet" + }, + "items": { + "s": { "item": "preserved_food", "chance": 100, "repeat": [ 8, 20 ] }, + "v": { "item": "NC_ISHERWOOD_CLAIRE_misc", "chance": 100, "repeat": [ 4, 8 ] } }, - "items": { "s": { "item": "preserved_food", "chance": 100, "repeat": [ 8, 20 ] } }, "place_item": [ { "item": "straw_pile", "x": [ 3, 5 ], "y": [ 5, 7 ], "amount": [ 0, 8 ] }, { "item": "cattlefodder", "x": [ 3, 5 ], "y": [ 5, 7 ], "amount": [ 0, 4 ] }, diff --git a/data/json/mapgen/mi-go/mi-go_nested.json b/data/json/mapgen/mi-go/mi-go_nested.json index bcbd66222281f..2107dce47805c 100644 --- a/data/json/mapgen/mi-go/mi-go_nested.json +++ b/data/json/mapgen/mi-go/mi-go_nested.json @@ -17,7 +17,7 @@ ".| ||@@", ".|+||@@" ], - "place_monsters": [ { "monster": "GROUP_MI-GO_BASE_COMMON", "x": [ 2, 3 ], "y": [ 1, 4 ], "repeat": [ 0, 2 ] } ], + "place_monsters": [ { "monster": "GROUP_MI-GO_BASE_COMMON", "x": [ 2, 3 ], "y": [ 1, 4 ], "density": 0.02, "repeat": [ 0, 2 ] } ], "palettes": [ "mi-go_palette" ] } }, @@ -40,7 +40,7 @@ "|||||||@", "@@@@@@@@" ], - "place_monsters": [ { "monster": "GROUP_MI-GO_BASE_COMMON", "x": [ 1, 6 ], "y": [ 2, 4 ], "repeat": [ 1, 3 ] } ], + "place_monsters": [ { "monster": "GROUP_MI-GO_BASE_COMMON", "x": [ 1, 6 ], "y": [ 2, 4 ], "density": 0.01, "repeat": [ 1, 3 ] } ], "palettes": [ "mi-go_palette" ] } }, @@ -63,7 +63,7 @@ "@@@@@@@@", "@@@@@@@@" ], - "place_monsters": [ { "monster": "GROUP_MI-GO_BASE_CAPTORS", "x": [ 1, 6 ], "y": 2, "repeat": [ 1, 2 ] } ], + "place_monsters": [ { "monster": "GROUP_MI-GO_BASE_CAPTORS", "x": [ 1, 6 ], "y": 2, "density": 0.01, "repeat": [ 1, 2 ] } ], "palettes": [ "mi-go_palette" ] } }, @@ -119,7 +119,7 @@ "|| i@", "@|+|||@" ], - "place_monsters": [ { "monster": "GROUP_MI-GO_BASE_COMMON", "x": [ 2, 5 ], "y": [ 1, 5 ], "repeat": [ 1, 3 ] } ], + "place_monsters": [ { "monster": "GROUP_MI-GO_BASE_COMMON", "x": [ 2, 5 ], "y": [ 1, 5 ], "density": 0.02, "repeat": [ 1, 3 ] } ], "palettes": [ "mi-go_palette" ] } }, @@ -164,8 +164,8 @@ "7": { "class": "mi-go_prisoner", "chance": 20 } }, "place_monsters": [ - { "monster": "GROUP_MI-GO_BASE_CAPTORS", "x": [ 2, 12 ], "y": [ 5, 10 ], "repeat": [ 2, 3 ] }, - { "monster": "GROUP_MI-GO_BASE_BOSS", "x": [ 12, 13 ], "y": [ 7, 8 ], "repeat": [ 0, 1 ] } + { "monster": "GROUP_MI-GO_BASE_CAPTORS", "x": [ 2, 12 ], "y": [ 5, 10 ], "density": 0.02, "repeat": [ 2, 3 ] }, + { "monster": "GROUP_MI-GO_BASE_BOSS", "x": [ 12, 13 ], "y": [ 7, 8 ], "density": 0.01, "repeat": [ 0, 1 ] } ] } }, @@ -188,7 +188,7 @@ ".|||||||", "@@@@@@@@" ], - "place_monsters": [ { "monster": "GROUP_MI-GO_BASE_COMMON", "x": [ 2, 5 ], "y": [ 1, 4 ], "repeat": [ 0, 3 ] } ], + "place_monsters": [ { "monster": "GROUP_MI-GO_BASE_COMMON", "x": [ 2, 5 ], "y": [ 1, 4 ], "density": 0.01, "repeat": [ 0, 3 ] } ], "palettes": [ "mi-go_palette" ] } }, @@ -213,11 +213,11 @@ "|| ||@@@" ], "place_monsters": [ - { "monster": "GROUP_MI-GO_BASE_CAPTORS", "x": [ 2, 4 ], "y": [ 2, 5 ], "repeat": [ 1, 2 ] }, - { "monster": "GROUP_DOMESTIC", "x": 4, "y": 0 }, - { "monster": "GROUP_FOREST", "x": 6, "y": 1 }, - { "monster": "GROUP_SWAMP", "x": 7, "y": 3 }, - { "monster": "GROUP_CAVE", "x": 2, "y": 7 } + { "monster": "GROUP_MI-GO_BASE_CAPTORS", "x": [ 2, 4 ], "y": [ 2, 5 ], "density": 0.01, "repeat": [ 1, 2 ] }, + { "monster": "GROUP_DOMESTIC", "x": 4, "y": 0, "density": 0.01 }, + { "monster": "GROUP_FOREST", "x": 6, "y": 1, "density": 0.01 }, + { "monster": "GROUP_SWAMP", "x": 7, "y": 3, "density": 0.01 }, + { "monster": "GROUP_CAVE", "x": 2, "y": 7, "density": 0.01 } ], "palettes": [ "mi-go_palette" ] } @@ -243,7 +243,7 @@ "@@|||V ", "@@@@||||+" ], - "place_monsters": [ { "monster": "GROUP_MI-GO_BASE_COMMON", "x": [ 1, 8 ], "y": [ 3, 5 ], "repeat": [ 0, 2 ] } ], + "place_monsters": [ { "monster": "GROUP_MI-GO_BASE_COMMON", "x": [ 1, 8 ], "y": [ 3, 5 ], "density": 0.01, "repeat": [ 0, 2 ] } ], "palettes": [ "mi-go_palette" ] } }, @@ -268,7 +268,7 @@ "P |||@@@@", "|||@+@@@@" ], - "place_monsters": [ { "monster": "GROUP_MI-GO_BASE_COMMON", "x": [ 0, 3 ], "y": [ 2, 5 ], "repeat": [ 0, 2 ] } ], + "place_monsters": [ { "monster": "GROUP_MI-GO_BASE_COMMON", "x": [ 0, 3 ], "y": [ 2, 5 ], "density": 0.01, "repeat": [ 0, 2 ] } ], "palettes": [ "mi-go_palette" ] } }, @@ -312,6 +312,7 @@ "@||||+||", "@@@@@@@@" ], + "place_monsters": [ { "monster": "GROUP_MI-GO_BASE_COMMON", "x": [ 1, 3 ], "y": [ 2, 5 ], "density": 0.01, "repeat": [ 0, 2 ] } ], "palettes": [ "mi-go_palette" ] } }, @@ -336,7 +337,7 @@ "@@@@@@@@@@", "@@@@@@@@@@" ], - "place_monsters": [ { "monster": "GROUP_MI-GO_BASE_COMMON", "x": [ 2, 6 ], "y": [ 1, 4 ], "repeat": [ 0, 1 ] } ], + "place_monsters": [ { "monster": "GROUP_MI-GO_BASE_COMMON", "x": [ 2, 6 ], "y": [ 1, 4 ], "density": 0.01, "repeat": [ 0, 1 ] } ], "palettes": [ "mi-go_palette" ] } }, @@ -426,5 +427,47 @@ ], "palettes": [ "mi-go_palette" ] } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "mi-go_scout_tower_cells", + "//": "Mi-go surgical suite and prisoner cells for upper z levels", + "weight": 100, + "object": { + "fill_ter": "t_floor_resin", + "mapgensize": [ 18, 18 ], + "rotation": [ 0, 3 ], + "rows": [ + "vvvvvvvv||vvvvvvvv", + "vvvvvv||||||vvvvvv", + "vvvv|||PPPP|||vvvv", + "vv|||PP #1|||vv", + "|||PP i ### ||v", + "|< } #2 |v", + "|> VnV i ###||", + "@|i nnn #3|", + "@|i nnn i # |", + "@+ VnV ###||", + "|| i #4 |v", + "|P } ### ###|v", + "| i # ####5||v", + "|||PPPP #7#6 |||vv", + "@@||||||||# ||vvvv", + "@||vvvvvv||||vvvvv", + "@vvv@@@@@@@@@@@@@@", + "@@@@@@@@@@@@@@@@@@" + ], + "palettes": [ "mi-go_palette" ], + "npcs": { + "1": { "class": "mi-go_prisoner", "chance": 20 }, + "2": { "class": "mi-go_prisoner", "chance": 20 }, + "3": { "class": "mi-go_prisoner", "chance": 20 }, + "4": { "class": "mi-go_prisoner", "chance": 20 }, + "5": { "class": "mi-go_prisoner", "chance": 20 }, + "6": { "class": "mi-go_prisoner", "chance": 20 }, + "7": { "class": "mi-go_prisoner", "chance": 20 } + } + } } ] diff --git a/data/json/mapgen/mi-go/mi-go_scout_tower.json b/data/json/mapgen/mi-go/mi-go_scout_tower.json new file mode 100644 index 0000000000000..ec101401e862d --- /dev/null +++ b/data/json/mapgen/mi-go/mi-go_scout_tower.json @@ -0,0 +1,151 @@ +[ + { + "type": "mapgen", + "method": "json", + "om_terrain": "mi-go_scout_tower_1", + "object": { + "fill_ter": "t_floor_resin", + "rows": [ + "........................", + "........................", + "........................", + "............||..........", + "..........||||||........", + "........|||TPTP|||......", + "......||| |||....", + "....||| T||...", + "...||< T |...", + "...||| P P ||..", + "....|| T T|..", + ".....| P P T|..", + ".....+ ||..", + "....|| TPTP TPTP|...", + "..||| |...", + "||| + TPTP ||...", + "|| ||| TPTP |||....", + "|| 14 ||||||||TT||......", + ".| ||......||||.......", + ".|||||..................", + "........................", + "........................", + "........................", + "........................" + ], + "palettes": [ "mi-go_palette" ], + "place_nested": [ { "chunks": [ "mi-go_encampment1_room14" ], "x": 1, "y": 14 } ], + "place_monsters": [ { "monster": "GROUP_MI-GO_BASE_COMMON", "density": 0.1, "x": 8, "y": 10 } ] + } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": "mi-go_scout_tower_2", + "object": { + "fill_ter": "t_floor_resin", + "rows": [ + "vvvvvvvvvvvvvvvvvvvvvvvv", + "vvvvvvvvvvvvvvvvvvvvvvvv", + "vvvvvvvvvvvvvvvvvvvvvvvv", + "vvvvvvvvvvvv||vvvvvvvvvv", + "vvvvvvvvvv||||||vvvvvvvv", + "vvvvvvvv||| O|||vvvvvv", + "vvvvvv||| O{O |||vvvv", + "vvvv|||i O O i O||vvv", + "vvv||> O{O O{O|vvv", + "vvv||< O O O ||vv", + "vvvv||i F O{O i|vv", + "vvvvv| O O O |vv", + "vvvvv| O{O O{O ||vv", + "vvvv|| i O O O |vvv", + "vv||| O{O {V|vvv", + "||| + F V O ||vvv", + "||{ ||| i F|||vvvv", + "||V i||||||||iV||vvvvvv", + "v|PPP||vvvvvv||||vvvvvvv", + "v|||||vvvvvvvvvvvvvvvvvv", + "vvvvvvvvvvvvvvvvvvvvvvvv", + "vvvvvvvvvvvvvvvvvvvvvvvv", + "vvvvvvvvvvvvvvvvvvvvvvvv", + "vvvvvvvvvvvvvvvvvvvvvvvv" + ], + "palettes": [ "mi-go_palette" ], + "place_monsters": [ { "monster": "GROUP_MI-GO_BASE_COMMON", "density": 0.1, "x": 8, "y": 10, "repeat": [ 1, 2 ] } ] + } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": "mi-go_scout_tower_3", + "object": { + "fill_ter": "t_floor_resin", + "rows": [ + "vvvvvvvvvvvvvvvvvvvvvvvv", + "vvvvvvvvvvvvvvvvvvvvvvvv", + "vvvvvvvvvvvvvvvvvvvvvvvv", + "vvvvvvvvvvvv||vvvvvvvvvv", + "vvvvvvvvvv||||||vvvvvvvv", + "vvvvvvvv||| |||vvvvvv", + "vvvvvv||| |||vvvv", + "vvvv||| ||vvv", + "vvv||< |vvv", + "vvv||> 6 ||vv", + "vvvv|| |vv", + "vvvvv| |vv", + "vvvvv| ||vv", + "vvvv|| |vvv", + "vv||| |vvv", + "||| + ||vvv", + "|| ||| |||vvvv", + "|| 14 |||||||| ||vvvvvv", + "v| ||vvvvvv||||vvvvvvv", + "v|||||vvvvvvvvvvvvvvvvvv", + "vvvvvvvvvvvvvvvvvvvvvvvv", + "vvvvvvvvvvvvvvvvvvvvvvvv", + "vvvvvvvvvvvvvvvvvvvvvvvv", + "vvvvvvvvvvvvvvvvvvvvvvvv" + ], + "palettes": [ "mi-go_palette" ], + "place_nested": [ + { "chunks": [ "mi-go_scout_tower_cells" ], "x": 4, "y": 3 }, + { "chunks": [ "mi-go_encampment1_room14" ], "x": 1, "y": 14 } + ], + "place_monsters": [ { "monster": "GROUP_MI-GO_SCOUT_TOWER", "density": 0.1, "x": 12, "y": 12 } ] + } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": "mi-go_scout_tower_4", + "object": { + "fill_ter": "t_floor_resin", + "rows": [ + "vvvvvvvvvvvvvvvvvvvvvvvv", + "vvvvvvvvvvvvvvvvvvvvvvvv", + "vvvvvvvvvvvvvvvvvvvvvvvv", + "vvvvvvvvvvvv##vvvvvvvvvv", + "vvvvvvvvvv######vvvvvvvv", + "vvvvvvvv###_iV_###vvvvvv", + "vvvvvv###________###vvvv", + "vvvv###____________##vvv", + "vvv##>___T__________#vvv", + "vvv##_______________##vv", + "vvvv##_______________ivv", + "vvvvvi_______T________vv", + "vvvvv_________________vv", + "vvvvi____________T___vvv", + "vv###_______________ivvv", + "###_+____T_________##vvv", + "##{_###__________###vvvv", + "##V__i#i____i___##vvvvvv", + "v#VV_##vvvvvv####vvvvvvv", + "v#####vvvvvvvvvvvvvvvvvv", + "vvvvvvvvvvvvvvvvvvvvvvvv", + "vvvvvvvvvvvvvvvvvvvvvvvv", + "vvvvvvvvvvvvvvvvvvvvvvvv", + "vvvvvvvvvvvvvvvvvvvvvvvv" + ], + "palettes": [ "mi-go_palette" ], + "place_monsters": [ { "monster": "GROUP_MI-GO_BASE_COMMON", "density": 0.1, "x": 12, "y": 12, "repeat": [ 1, 2 ] } ] + } + } +] diff --git a/data/json/mapgen/steel_mill/steel_mill_z1.json b/data/json/mapgen/steel_mill/steel_mill_z1.json new file mode 100644 index 0000000000000..98c3d0de2444a --- /dev/null +++ b/data/json/mapgen/steel_mill/steel_mill_z1.json @@ -0,0 +1,141 @@ +[ + { + "type": "mapgen", + "method": "json", + "om_terrain": [ + [ "steel_mill_0_1", "steel_mill_0_2", "steel_mill_0_3", "steel_mill_0_4" ], + [ "steel_mill_1_1", "steel_mill_1_2", "steel_mill_1_3", "steel_mill_1_4" ], + [ "steel_mill_2_1", "steel_mill_2_2", "steel_mill_2_3", "steel_mill_2_4" ], + [ "steel_mill_3_1", "steel_mill_3_2", "steel_mill_3_3", "steel_mill_rail_1" ], + [ "steel_mill_4_1", "steel_mill_4_2", "steel_mill_4_3", "steel_mill_rail_2" ] + ], + "object": { + "fill_ter": "t_thconc_floor", + "rows": [ + "vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv._______,,_______.vvvvvvvvvvvvvvvvvvvvvvvvvvv", + "v..................................................._______,,_______............................v", + "v..................................................___________________________________,,,,,,,,.v", + "v....]]]]]]]]]]]]**]]]**]]**]]**].................____________________________________________.v", + "v....]ee]ee]<< #ch #ch #Sch S]-------------..._____________________________________________.v", + "v....]ee@ee]<< #ddd #ddd #Sddd 7]--------------.______________________________________________.v", + "v....]xx]xx] # h # h # h 7]]]++]++]]]----_______________________________________________.v", + "v....] # S# S#77 T]h ]----_______________________________________,,,,,,,,.v", + "v....* #+####+#######+##]h ]----_______________,,,,,,,,,,,,,,,,,_______________.v", + "v....* + ]h CCCCcC]----_______________________,_______________________.v", + "v....]hTh DV + + C h *----_______________________,_______________________.v", + "v....]###### ########### + *----_______________________,_______________________.v", + "v....]l l l# #C0C0C0C0C# ] 7777]----_______________________,_______________,,,,,,,,.v", + "v....]l l l# + # h]]]]]]]]]]]----_______________,,,,,,,,,,,,,,,,,_______________.v", + "v....]l l l# #+#+#+#+#+# h]--------------_______________________,_______________________.v", + "v....]l + #t#t#t#t#t# h]--------------_______________________,_______________________.v", + "v....]l l# ########### *--___________________________________,_______________________.v", + "v....]l l# + *--___________________________________,_______________,,,,,,,,.v", + "v....]]]]]]]D + ]--___________________________,,,,,,,,,,,,,,,,,_______________.v", + "v..........]]]]**]]]]**]]]++#++]]--___________________________________,_______________________.v", + "v........................] ].--,,,,,,,,___________________________,_______________________.v", + "v........................* *.--___________________________________,_______________________.v", + "v....]]]]]]]]]]]]]]].....* *.--___________________________________,_______________,,,,,,,,.v", + "v....]MMMM <].....] ].--___________________________,,,,,,,,,,,,,,,,,_______________.v", + "v....]FFFFE ]]]]]]]++#++]]--___________________________________,_______________________.v", + "v....]F x|||| ]lllll] ]--------------_______________________,_______________________.v", + "v....]F x|||| R + ]]]]]]]]]]]]]]]_______________________,_______________________.v", + "v....]FFFF || ]+]]]]]]]]]++#CCCCCCCCCCCCC]_______________________,_______________,,,,,,,,.v", + "v....]MMMM || ss ss ] # C C C C]____________.)))))))))),,,,,,,,,_______________.v", + "v....]FFFF || ss ss ] # C C C C]____________.) b bbb ),_______________________.v", + "v....]F x|||| ss ss ] # C C C C]____________-+ b),_______________________.v", + "v....]F x|||| ss ss ] + C]____________.) bbb bb),_______________________.v", + "v....]FFFF || + ##############]____________.)b b bb),_______________,,,,,,,,.v", + "v....]MMMM || + #CCCCCC#sssss]]____________.)))))))))),,,,,,,,,_______________.v", + "v....]FFFF || ] #C #s s s]]____________..........v,_______________________.v", + "v....]F x|||||||||| ] # #s ]] ____________..........v,_______________________.v", + "v....]F x|||||||||| <] + + ]] `____________..........v,_______________________.v", + "v....]FFFFE <] # #ss]] ____________..........v,_______________,,,,,,,,.v", + "v....]P P ee@]++]]]]]]]]]]] b `____________..........v,,,,,,,,,_______________.v", + "v....]P P << mc m eee] hTh hTh f]b ____________''''''''''vvvvvvvvvvvvvvvvvvvvvvvvvvv", + "v....]MMMMPPPPPPPME eee] C] b`____________''OOOOOOO'''''''''''''''''''''''''''v", + "v....]MEEMPPPPPPPEM ] DV C0CC] ____________''xoooooO'''''''''''''OOOOOOO'''''''v", + "v....]mccm << mPPm ]++]]]]]]]]]]] `____________''xoooooO'''''''''''''xoooooO'''''''v", + "v....] PP ] ;] ____________''OOOOOOO'''''''''''''xoooooO'''''''v", + "v....]##### > #ch #ch #Sch S]:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]aa@aa]>> #ddd #ddd #Sddd ]:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]xx]xx] # h # h # h ]rrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::] # S# S#77 T]rrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::* #+####+#######+##]rrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::* *rrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]hTh DV *rrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]###### #################]rrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]W sll# + CCCC]rrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]W # + h h h *rrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]W # # hTTTTTTTT *:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]w + #7 TTTTTTTTh ]:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]w #####7 TTTTTTTT *:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]AAAA + #7 h h *:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]]]]]]]UUU# ]:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::::::::]]]]]**]]]**]]]**]**]]:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::::::::::::::::::::::rrrrrrr::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::::::::::::::::::::::rrrrrrr::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]]]]]]]]]]]]]]]:::::rrrrrrr::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]MMMMGGGGGGG<>]:::::rrrrrrr::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]FFFFEGaaaaGGG]rrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]FaaFGGaaaaaGG]rrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]FaaFGaaaaaaGGRrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]FFFFGaaaaaaGG]]]]]]]]]]]rrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]MMMMGaaaaaaGGGGGGGGGGGG]rrrrrrrrrrrrrrrrr:::::::::::::rrrrrrrrrr::::::::::::::::::::::::::", + ":::::]FFFFGaaaaaaGGGGGGGGGGGG]rrrrrrrrrrrrrrrrr:::::::::::::rrrrrrrrrr::::::::::::::::::::::::::", + ":::::]FaaFGaaaaaaaaaaaaaaaaGG]rrrrrrrrrrrrrrrrr:::::::::::::rrrrrrrrrr::::::::::::::::::::::::::", + ":::::]FaaFGaaaaaaaaaaaaaaaaGG]rrrrrrrrrrrrrrrrr:::::::::::::rrrrrrrrrr::::::::::::::::::::::::::", + ":::::]FFFFGaaaaaaaaaaaaaaaaGGRrrrrrrrrrrrrrrrrr:::::::::::::rrrrrrrrrr::::::::::::::::::::::::::", + ":::::]MMMMGaaaaaaaaaaaaaaaaGGRrrrrrrrrrrrrrrrrr:::::::::::::rrrrrrrrrr::::::::::::::::::::::::::", + ":::::]FFFFGaaaaaaaaaaaaaaGGGG]rrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]FaaFGaaaaaaaaaaaaaaGGGG]rrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]FaaFGGaaaaaaaaaaaaaGGG>]rrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]FFFFEGaaaaaaaaaaaaaGGG>]rrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]PaaPGGaaaaaaaaaaaaaGee@]rrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]PaaPGa>>aaaaaaaaaaaGeee]rrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]MMMMGaGGaaEEaaaaaaaGeee]rrrrrrrrrrrrrrrrr::::::::::::::rrrrrrr::::::::::::::::::::::::::::", + ":::::]MEEMGGGGaaEEaaaaaaaGGGGRrrrrrrrrrrrrrrrrr::::::::::::::rrrrrrr:::::::::::::rrrrrrr::::::::", + ":::::]GccGGa>>aaaaaaaaaaaGGGGRrrrrrrrrrrrrrrrrr::::::::::::::rrrrrrr:::::::::::::rrrrrrr::::::::", + ":::::]GGGGGaaaaaaaaaaaaaaGGGG]rrrrrrrrrrrrrrrrr::::::::::::::rrrrrrr:::::::::::::rrrrrrr::::::::", + ":::::]##++#aaaaa>GG>aaaaaGGGG]rrrrrrrrrrrrrrrrr::::::::::::::::::::::::::::::::::rrrrrrr::::::::", + ":::::]>> #aaaaa>GG>aaaaaGGGG]rrrrrrrrrrrrrrrrr::::::::::::::rrrrrrr:::rrrrrrr::::::::::::::::::", + ":::::] RaaaaaaaaaaaaaaGGGG]rrrrrrrrrrrrrrrrr::::::::::::::rrrrrrr:::rrrrrrr::::::::::::::::::", + ":::::]lh RaaaaGGGGGaaaaaGGGGRrrrrrrrrrrrrrrrrr::::::::::::::rrrrrrr:::rrrrrrr::::::::::::::::::", + ":::::]TTA #aaaaIEMMEaaaaaaGGGRrrrrrrrrrrrrrrrrr::::::::::::::rrrrrrr:::rrrrrrr::::::::::::::::::", + ":::::]#####aaaaGEMMEaaaaaaaGG]rrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]aaaaaaaaaGammaaaaaaaaGG]]]]rrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]]aaaaaaaaGGmmaaaaaaaaaaaaaRrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::]aaaaaaaaGammaaaaaaaaaaaaaRrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]]aaaaaaaaGEppEaaaaaaaaaaaa]rrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]aaaaaaaaaGEppEaaaaaaaaaaaa]rrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]aaaaaaaaaGammaaaaaaaaaaaaa]rrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]aaaaaaaaaGammaaaaaaaaaaaaa]rrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]aaaaaaaaaGammaaaaaaaaaaaaaRrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]aaaaaaaaaIMMMEaaaaaaaaaaaaRrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]aaaaaaaaaGEMMMaPPPPPPPPPaa]rrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]aaaGGGGGGGMMMMaaaaaaaaaaaa]rrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]aaaGEMaaaaammaaaaaaaaaaaaa]rrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]aaaGEMmmmmmmmaaaaaaaaaaaaa]rrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]aaaammmaaaammaaaaaaaaaaaaaRrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]aaaammaaaaammaaaaaaaaaaaaaRrrrrrrrrrrrrrr::::::::::::::]]RR]]RR]]:::::::::::::::::::::::::", + ":::::]aaaaaaaaaaammaaaaaaaaaaaaa]rrrrrrrrrrrrrr::::::::::::::]2 T]:::::::::::::::::::::::::", + ":::::]aaaaaaaaaaammaaaaaaaaaaaaa]rrrrrrrrrrrrrr::::::::::::::]5h T]:::::::::::::::::::::::::", + ":::::]aaaaaaaaaaammaaaaaaaaaaaaa]rrrrrrrrrrrrrr::::::::::::::]5 h ]:::::::::::::::::::::::::", + ":::::]aaaaaaaaaaEMMmmmmmmaaaaaaa]rrrrrrrrrrrrrr::::::::::::::] cc cc>]:::::::::::::::::::::::::", + ":::::]aaaaaaaaaaammaaaaaaaaaaaaaRrrrrrrrrrrrrrr::::::::::::::]]RR]]RR]]:::::::::::::::::::::::::", + ":::::]aaaaaaaaaaammaaaaaaaaaaaaaRrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::]aaaaaaaaaaaaaaaaaaaaaaaaaa]rrrrrrrrrrrrrr::::::::::::::::::::::%%gG::::::Gg%%gG::::::Gg%%:", + ":::::]aaaaaaaaaaaaaaaaaaaaaaaaaa]rrrrrrrrrrrrrr::::::::::::::::::::::%%gG::::::Gg%%gG::::::Gg%%:", + ":::::]aaaaaaaaaaaaaaaaaaaaaaaaaa]rrrrrrrrrrrrrr::::::::::::::rrrrr::GGGGGGGGGGGGGGGGGGGGGGGGGGG:", + ":::::]aaaaaaaaaaaaaaaaaaaaaaaaaa]rrrrrrrrrrrrrr::::::::::::::rrrrr::GG::M::::M::::::::M::::M::G:", + ":::::]aaaaaaaaaaaaaaaaaaaaaaaaaaRrrrrr:::::::::::::::::::::::rrrrr::GI::M::::M::::::::M::::M::G:", + ":::::]aaaaaaaaaaaaaaaaaaaaaaaaaaRrrrrr:::::::::::::::::::::::rrrrr::GG::M::::M::::::::M::::M::G:", + ":::::]]]]]aaaaaaaaaaaaaaaaaaaaaa]rrrrr:::::::::::::::::::::::rrrrr::GGGGGGGGGGGGGGGGGGGGGGGGGGG:", + ":::::::::]aaaaaaaaaaaaaaaaaaaaaa]rrrrr:::::::::::::::::::::::rrrrr:::%%gG::::::Gg%%gG::::::Gg%%:", + ":::::::::]aaaaaaaaaaaaaaaaaaaaaa]rrrrr:::::::::::::::::::::::rrrrr:::%%gG::::::Gg%%gG::::::Gg%%:", + ":::::::::]aaaaaaaaaaaaaaaaaaaaaa]rrrrr::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::::::]]]aaaaaaaaaaaaaaaaa]]]]:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::rrrrr::::::::::::::::::::::::::::::", + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::rrrrr::::::::::::::::::::::::::::::", + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::rrrrr::::::::::::::::::::::::::::::", + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::rrrrr::::::::::::::::::::::::::::::", + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::rrrrr::::::::::::::::::::::::::::::", + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::rrrrr::::::::::::::::::::::::::::::", + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::rrrrr::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::%%gG::::::Gg%%gG::::::Gg%%:", + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::%%gG::::::Gg%%gG::::::Gg%%:", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::GGGGGGGGGGGGGGGGGGGGGGGGGGG:", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::GG::M::::M::::::::M::::M::G:", + ":::::::::::::::rrrrrrrrrr]]RR]]]]]]]]]]]]]]]]]]]]::::::::::::rrrrr::GI::M::::M::::::::M::::M::G:", + ":::::::::::::::rrrrrrrrrr]GGGGaaaaaaaaaaaaaaaaaa]::::::::::::rrrrr::GG::M::::M::::::::M::::M::G:", + ":::::::::::::::rrrrrrrrrr]GGGGaaaaaaaaaaaaaaaaaa]::::::::::::rrrrr::GGGGGGGGGGGGGGGGGGGGGGGGGGG:", + ":::::::::::::::rrrrrrrrrr]GGGGaaaaaaaaaaaaaaaaaa]::::::::::::rrrrr:::%%gG::::::Gg%%gG::::::Gg%%:", + ":::::::::::::::rrrrrrrrrr]GGGGaaaaaaaaaaaaaaaaaa]::::::::::::rrrrr:::%%gG::::::Gg%%gG::::::Gg%%:", + ":::::::::::::::rrrrrrrrrr]IGGGaaaaaaaaaaaaaaaaaa]::::::::::::rrrrr::::::::::::::::::::::::::::::", + ":::::::::::::::rrrrrrrrrr]@eGGaaaaaaaaaaaaaaaaaa]::::::::::::rrrrr::::::::::::::::::::::::::::::", + ":::::::::::::::rrrrrrrrrr]eeGGaaaaaaaaaaaaaaaaaa]:::::::::::::::::::::::::::::::::::::::::::::::", + ":::::::::::::::::::::::::]GGGGGGGGGGGGGGGGGGGGGG]:::::::::::::::::::::::::::::::::::::::::::::::", + ":::::::::::::::::::::::::]GGGGGGGGGGGGGGGFFFEFFF]:::::::::::::::::::::::::::::::::::::::::::::::", + ":::::::::::::::::::::::::]GGGGGGGGGGGGGGcFaFPFaF]:::::::::::::::::::::::::::::::::::::::::::::::", + ":::::::::::::::::::::::::]8888GGGGGGGGGGcFFFMFFF]:::::::::::::::::::::::::::::::::::::::::::::::", + ":::::::::::::::::::::::::]]]]]]]]]]]]]]]]]]]]]]]]:::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::" + ], + "terrain": [ { "M": "t_grate" }, { "8": "t_grate" } ], + "furniture": { }, + "palettes": [ "steel_mill_palette" ] + } + } +] diff --git a/data/json/mapgen/steel_mill/steel_mill_z3.json b/data/json/mapgen/steel_mill/steel_mill_z3.json new file mode 100644 index 0000000000000..ca86d06829fa0 --- /dev/null +++ b/data/json/mapgen/steel_mill/steel_mill_z3.json @@ -0,0 +1,141 @@ +[ + { + "type": "mapgen", + "method": "json", + "om_terrain": [ + [ "steel_mill_0_1_3", "steel_mill_0_2_3", "steel_mill_0_3_3", "steel_mill_0_4_3" ], + [ "steel_mill_1_1_3", "steel_mill_1_2_3", "steel_mill_1_3_3", "steel_mill_1_4_3" ], + [ "steel_mill_2_1_3", "steel_mill_2_2_3", "steel_mill_2_3_3", "steel_mill_2_4_3" ], + [ "steel_mill_3_1_3", "steel_mill_3_2_3", "steel_mill_3_3_3", "steel_mill_rail_1_3" ], + [ "steel_mill_4_1_3", "steel_mill_4_2_3", "steel_mill_4_3_3", "steel_mill_rail_2_3" ] + ], + "object": { + "fill_ter": "t_thconc_floor", + "rows": [ + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrr::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrr>rr::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrr::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrr::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrr::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrr::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrr::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrr::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrr::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrr::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrr::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrr::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrr::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrr::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrr::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrr::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrr::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrr::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrr::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrr::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrr::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrr::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrr::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrr::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrr::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrr::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrr::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrr::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr::::::::::::::::::::::::::::rrrrrrrrrr:::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr::::::::::::::::::::::::::::rrrrrrrrrr:::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr::::::::::::::::::::::::::::rrrrrrrrrr:::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr::::::::::::::::::::::::::::rrrrrrrrrr:::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr::::::::::::::::::::::::::::rrrrrrrrrr:::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr::::::::::::::::::::::::::::rrrrrrrrrr:::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::rrrrrrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::::::rrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::::::rrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::::::rrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::::::rrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + ":::::::::::::::::::::::::rrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::", + ":::::::::::::::::::::::::rrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::", + ":::::::::::::::::::::::::rrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::", + ":::::::::::::::::::::::::rrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::", + ":::::::::::::::::::::::::rrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::", + ":::::::::::::::::::::::::rrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::", + ":::::::::::::::::::::::::rrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::", + ":::::::::::::::::::::::::rrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::", + ":::::::::::::::::::::::::rrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::", + ":::::::::::::::::::::::::rrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::", + ":::::::::::::::::::::::::rrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::", + ":::::::::::::::::::::::::rrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::", + ":::::::::::::::::::::::::rrrrrrrrrrrrrrrrrrrrrrrr:::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", + "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::" + ], + "terrain": { }, + "furniture": { }, + "palettes": [ "steel_mill_palette" ] + } + } +] diff --git a/data/json/mapgen_palettes/campground.json b/data/json/mapgen_palettes/campground.json index c5318d778b2eb..a2dac11eeba16 100644 --- a/data/json/mapgen_palettes/campground.json +++ b/data/json/mapgen_palettes/campground.json @@ -1,55 +1,57 @@ -{ - "type": "palette", - "id": "campground_palette", - "terrain": { - "#": "t_grass", - "&": "t_thconc_floor", - "+": [ "t_door_c", "t_door_o" ], - "_": [ - [ "t_dirt", 3 ], - [ "t_grass", 5 ], - [ "t_grass_long", 25 ], - [ "t_grass_tall", 5 ], - [ "t_underbrush", 2 ], - [ "t_shrub", 5 ], - [ "t_tree", 4 ], - [ "t_tree_pine", 2 ], - [ "t_tree_birch", 1 ] - ], - ";": [ [ "t_dirt", 10 ], [ "t_grass", 15 ], [ "t_grass_long", 2 ] ], - ",": [ [ "t_dirt", 10 ], [ "t_grass", 15 ], [ "t_grass_long", 2 ] ], - "B": [ [ "t_dirt", 10 ], [ "t_grass", 15 ], [ "t_grass_long", 2 ] ], - "H": [ [ "t_dirt", 100 ], [ "t_grass", 5 ], [ "t_grass_long", 1 ] ], - "n": [ [ "t_dirt", 100 ], [ "t_grass", 5 ], [ "t_grass_long", 1 ] ], - "S": "t_thconc_floor", - "T": "t_thconc_floor", - "f": "t_floor", - "D": "t_floor", - "h": "t_floor", - ".": [ [ "t_dirt", 100 ], [ "t_grass", 5 ], [ "t_grass_long", 1 ] ], - "b": [ [ "t_dirt", 10 ], [ "t_grass", 15 ], [ "t_grass_long", 2 ] ], - "c": [ [ "t_dirt", 10 ], [ "t_grass", 15 ], [ "t_grass_long", 2 ] ], - "s": [ [ "t_dirt", 5 ], [ "t_grass", 16 ], [ "t_grass_long", 1 ] ], - "t": [ [ "t_dirt", 10 ], [ "t_grass", 15 ], [ "t_grass_long", 2 ] ], - "|": "t_wall_w", - "w": "t_window", - "o": "t_pit_shallow", - "O": "t_gutter_downspout" - }, - "furniture": { - "D": "f_desk", - "h": "f_chair", - "H": "f_camp_chair", - "#": "f_large_canvas_wall", - "&": "f_toilet", - ";": "f_large_groundsheet", - ",": "f_center_groundsheet", - "B": "f_brazier", - "S": "f_sink", - "b": "f_bench", - "c": [ "f_large_canvas_door", "f_large_canvas_door_o" ], - "t": "f_table", - "n": "f_tourist_table", - "o": "f_firering" +[ + { + "type": "palette", + "id": "campground_palette", + "terrain": { + "#": "t_grass", + "&": "t_thconc_floor", + "+": [ "t_door_c", "t_door_o" ], + "_": [ + [ "t_dirt", 3 ], + [ "t_grass", 5 ], + [ "t_grass_long", 25 ], + [ "t_grass_tall", 5 ], + [ "t_underbrush", 2 ], + [ "t_shrub", 5 ], + [ "t_tree", 4 ], + [ "t_tree_pine", 2 ], + [ "t_tree_birch", 1 ] + ], + ";": [ [ "t_dirt", 10 ], [ "t_grass", 15 ], [ "t_grass_long", 2 ] ], + ",": [ [ "t_dirt", 10 ], [ "t_grass", 15 ], [ "t_grass_long", 2 ] ], + "B": [ [ "t_dirt", 10 ], [ "t_grass", 15 ], [ "t_grass_long", 2 ] ], + "H": [ [ "t_dirt", 100 ], [ "t_grass", 5 ], [ "t_grass_long", 1 ] ], + "n": [ [ "t_dirt", 100 ], [ "t_grass", 5 ], [ "t_grass_long", 1 ] ], + "S": "t_thconc_floor", + "T": "t_thconc_floor", + "f": "t_floor", + "D": "t_floor", + "h": "t_floor", + ".": [ [ "t_dirt", 100 ], [ "t_grass", 5 ], [ "t_grass_long", 1 ] ], + "b": [ [ "t_dirt", 10 ], [ "t_grass", 15 ], [ "t_grass_long", 2 ] ], + "c": [ [ "t_dirt", 10 ], [ "t_grass", 15 ], [ "t_grass_long", 2 ] ], + "s": [ [ "t_dirt", 5 ], [ "t_grass", 16 ], [ "t_grass_long", 1 ] ], + "t": [ [ "t_dirt", 10 ], [ "t_grass", 15 ], [ "t_grass_long", 2 ] ], + "|": "t_wall_w", + "w": "t_window", + "o": "t_pit_shallow", + "O": "t_gutter_downspout" + }, + "furniture": { + "D": "f_desk", + "h": "f_chair", + "H": "f_camp_chair", + "#": "f_large_canvas_wall", + "&": "f_toilet", + ";": "f_large_groundsheet", + ",": "f_center_groundsheet", + "B": "f_brazier", + "S": "f_sink", + "b": "f_bench", + "c": [ "f_large_canvas_door", "f_large_canvas_door_o" ], + "t": "f_table", + "n": "f_tourist_table", + "o": "f_firering" + } } -} +] diff --git a/data/json/mapgen_palettes/farm.json b/data/json/mapgen_palettes/farm.json index 8620e030d462e..b331bec42d711 100644 --- a/data/json/mapgen_palettes/farm.json +++ b/data/json/mapgen_palettes/farm.json @@ -72,8 +72,8 @@ "d": [ { "item": "dresser", "chance": 80, "repeat": [ 1, 6 ] }, { "item": "homeguns", "chance": 20 } ], "e": { "item": "fridge", "chance": 65, "repeat": [ 1, 15 ] }, "o": { "item": "oven", "chance": 65, "repeat": [ 1, 3 ] }, - "h": { "item": "bedroom", "chance": 65 }, - "H": { "item": "livingroom", "chance": 65 }, + "h": { "item": "bedroom", "chance": 10 }, + "H": { "item": "livingroom", "chance": 15 }, "k": { "item": "bedroom", "chance": 65 }, "l": [ { "item": "tools_earthworking", "chance": 65 }, diff --git a/data/json/mapgen_palettes/mi-go_palette.json b/data/json/mapgen_palettes/mi-go_palette.json index d7753efb1d854..ea1564d414e5f 100644 --- a/data/json/mapgen_palettes/mi-go_palette.json +++ b/data/json/mapgen_palettes/mi-go_palette.json @@ -23,6 +23,7 @@ "V": "f_alien_anemone", "{": "f_alien_gasper", "F": "f_alien_zapper", + "T": [ "f_alien_zapper", [ "f_alien_gasper", 2 ], [ "f_alien_tendril", 4 ], [ "f_alien_anemone", 2 ] ], "P": [ [ "f_alien_pod", 2 ], [ "f_alien_pod_organ", 2 ], "f_alien_pod_resin" ], "p": [ [ "f_alien_pod", 2 ], [ "f_alien_pod_organ", 2 ], "f_alien_pod_resin" ], "O": "f_alien_pod_resin" diff --git a/data/json/mapgen_palettes/steel_mill_palette.json b/data/json/mapgen_palettes/steel_mill_palette.json new file mode 100644 index 0000000000000..234cea269c07b --- /dev/null +++ b/data/json/mapgen_palettes/steel_mill_palette.json @@ -0,0 +1,74 @@ +[ + { + "type": "palette", + "id": "steel_mill_palette", + "terrain": { + ".": [ "t_grass", "t_grass", "t_grass", "t_grass_long", "t_grass_dead", "t_grass_dead", "t_dirt" ], + "'": [ "t_railroad_rubble" ], + "]": [ "t_strconc_wall" ], + ")": [ "t_concrete_wall" ], + "+": [ "t_door_metal_c" ], + "x": [ "t_door_metal_locked" ], + "*": [ "t_wall_glass" ], + "R": [ "t_reinforced_glass_h" ], + "v": [ "t_chainfence" ], + ",": [ "t_pavement_y" ], + "-": [ "t_sidewalk" ], + "_": [ "t_pavement" ], + "#": [ "t_sconc_wall" ], + "e": [ "t_elevator" ], + "@": [ "t_elevator_control_off" ], + "O": [ "t_wall_metal" ], + "o": [ "t_scrap_floor" ], + "<": [ "t_stairs_up" ], + ">": [ "t_stairs_down" ], + "/": [ "t_ladder_up" ], + "I": [ "t_ladder_down" ], + "c": [ "t_console_broken" ], + "m": [ "t_machinery_light" ], + "M": [ "t_machinery_heavy" ], + "E": [ "t_machinery_electronic" ], + "8": [ "t_bulk_tank" ], + "^": [ "t_railroad_rubble" ], + "X": [ "t_railroad_track" ], + "=": [ "t_railroad_tie" ], + "H": [ "t_railroad_track_on_tie" ], + "%": [ "t_wall_metal" ], + "|": [ "t_conveyor" ], + "F": [ "t_wall_metal" ], + "p": [ "t_recycler" ], + "P": [ "t_sewage_pipe" ], + "B": [ "t_buffer_stop" ], + ":": [ "t_open_air" ], + ";": [ "t_gates_control_concrete" ], + "a": [ "t_open_air_rooved" ], + "r": [ "t_metal_flat_roof" ], + "g": [ "t_generator_broken" ], + "G": [ "t_grate" ], + "2": [ "t_sai_box" ], + "5": [ "t_switchgear_l" ], + "`": [ "t_thconc_y" ] + }, + "furniture": { + "h": [ "f_chair" ], + "T": [ "f_table" ], + "A": [ "f_air_conditioner" ], + "d": [ "f_desk" ], + "s": [ "f_utility_shelf" ], + "l": [ "f_locker" ], + "S": [ "f_bookcase" ], + "b": [ "f_crate_c", "f_crate_c", "f_crate_o" ], + "0": [ "f_sink" ], + "C": [ "f_counter" ], + "W": [ "f_water_heater" ], + "w": [ "f_water_purifier" ], + "U": [ "f_home_furnace" ], + "f": [ "f_fridge" ], + "D": [ "f_vending_c" ], + "V": [ "f_vending_c" ], + "7": [ "f_filing_cabinet" ] + }, + "toilets": { "t": { } }, + "vendingmachines": { "D": { "itemgroup": "vending_drink" }, "V": { "itemgroup": "vending_food" } } + } +] diff --git a/data/json/martialarts.json b/data/json/martialarts.json index 6255ba338229d..bd9748a9bf36a 100644 --- a/data/json/martialarts.json +++ b/data/json/martialarts.json @@ -492,6 +492,28 @@ "primitive_axe" ] }, + { + "type": "martial_art", + "id": "style_judo", + "name": "Judo", + "description": "Judo is a martial art that focuses on grabs and throws, both defensive and offensive. You are resistant to most effects that can knock you down and can counter grab and takedown attacks with strong judo throw.", + "initiate": [ "You prepare yourself for a grapple.", "%s prepares for a grapple." ], + "learn_difficulty": 4, + "static_buffs": [ + { + "id": "buff_judo_static", + "name": "Judo Stance", + "description": "Your knowledge of grappling allows you to recover from knock down effects instantly.\nIn addition, you can counter grabs and takedown attacks with a judo throw.", + "unarmed_allowed": true, + "melee_allowed": true, + "unarmed_weapons_allowed": false, + "min_unarmed": 0, + "throw_immune": true + } + ], + "techniques": [ "tec_judo_backthrow", "tec_judo_counter", "tec_judo_disarm", "tec_judo_break", "tec_judo_throw" ], + "weapons": [ "bagh_nakha", "bio_claws_weapon", "cestus", "knuckle_brass", "knuckle_nail", "knuckle_steel" ] + }, { "type": "martial_art", "id": "style_karate", @@ -500,42 +522,30 @@ "initiate": [ "You adopt a classic karate stance.", "%s adopts a classic karate stance." ], "learn_difficulty": 5, "arm_block": 2, - "leg_block": 99, - "onhit_buffs": [ + "static_buffs": [ { - "id": "karate_hit_buff", - "name": "Karate Hit", + "id": "buff_karate_static", + "name": "Karate Stance", + "description": "Your no nonsense stance allows you hit more accurately.\n\n+2 Accuracy.", "unarmed_allowed": true, "min_unarmed": 0, - "buff_duration": 3, - "description": "+1 Dodges, +2 Blocks", - "bonus_dodges": 1, - "bonus_blocks": 2 + "flat_bonuses": [ [ "hit", 2.0 ] ] } ], - "techniques": [ "tec_karate_rapid", "tec_karate_precise" ] - }, - { - "type": "martial_art", - "id": "style_judo", - "name": "Judo", - "description": "Judo is a martial art that focuses on grabs and throws, both defensive and offensive. It also focuses on recovering from throws; while using judo, you will not lose any turns to being thrown or knocked down.", - "initiate": [ "You prepare yourself for a grapple.", "%s prepares for a grapple." ], - "learn_difficulty": 4, - "arm_block": 99, - "leg_block": 99, - "static_buffs": [ + "onhit_buffs": [ { - "id": "judo_recovery", - "name": "Judo", + "id": "buff_karate_onhit", + "name": "Karate Strike", + "description": "Landing a hit allows you to perfectly position yourself for maximum defense against multiple opponents.\n\n+2 Block attempts, +1 Dodges attempts, blocked damge reduced by 50%% of Strength.\nLasts 2 turns.", + "min_unarmed": 3, "unarmed_allowed": true, - "min_unarmed": 0, "buff_duration": 2, - "throw_immune": true, - "description": "Immune to throws and knockdowns." + "bonus_blocks": 2, + "bonus_dodges": 1, + "flat_bonuses": [ [ "block", "str", 0.5 ] ] } ], - "techniques": [ "tec_judo_grab", "tec_judo_throw" ] + "techniques": [ "tec_karate_rapid", "tec_karate_precise", "tec_karate_roundhouse", "tec_karate_counter" ] }, { "type": "martial_art", diff --git a/data/json/monsterdrops/zombie_survivor.json b/data/json/monsterdrops/zombie_survivor.json index 6ee4860cfd4de..9bc28a90c4ae8 100644 --- a/data/json/monsterdrops/zombie_survivor.json +++ b/data/json/monsterdrops/zombie_survivor.json @@ -23,7 +23,8 @@ { "group": "stash_food", "prob": 40 } ] }, - { "item": "cash_card", "charges-min": 25000, "charges-max": 100000 } + { "item": "cash_card", "charges-min": 25000, "charges-max": 100000 }, + { "item": "survival_kit", "prob": 5, "damage": [ 1, 4 ] } ] }, { diff --git a/data/json/monstergroups/mi-go.json b/data/json/monstergroups/mi-go.json index 22989ab464ada..6e100677d855d 100644 --- a/data/json/monstergroups/mi-go.json +++ b/data/json/monstergroups/mi-go.json @@ -5,21 +5,13 @@ "//": "Mi-go raiding parties spawning in the vicinity of a mi-go camp. Puts slavers later on and keeps large groups from spawning until the player can deal with them.", "default": "mon_mi_go_slaver", "monsters": [ - { "monster": "mon_mi_go", "freq": 100, "cost_multiplier": 20, "ends": 14 }, - { "monster": "mon_mi_go", "freq": 100, "cost_multiplier": 10, "starts": 14, "ends": 30, "pack_size": [ 2, 4 ] }, - { "monster": "mon_mi_go", "freq": 100, "cost_multiplier": 2, "starts": 30, "pack_size": [ 3, 6 ] }, - { "monster": "mon_mi_go_slaver", "freq": 100, "cost_multiplier": 10, "starts": 14, "ends": 30 }, - { - "monster": "mon_mi_go_slaver", - "freq": 100, - "cost_multiplier": 20, - "starts": 14, - "ends": 30, - "pack_size": [ 1, 2 ] - }, - { "monster": "mon_mi_go_slaver", "freq": 100, "cost_multiplier": 5, "starts": 30, "pack_size": [ 3, 6 ] }, - { "monster": "mon_mi_go_scout", "freq": 100, "cost_multiplier": 50, "starts": 35 }, - { "monster": "mon_mi_go_myrmidon", "freq": 20, "cost_multiplier": 50, "starts": 45 } + { "monster": "mon_mi_go", "freq": 100, "cost_multiplier": 20, "pack_size": [ 2, 4 ] }, + { "monster": "mon_mi_go", "freq": 100, "cost_multiplier": 10, "pack_size": [ 4, 8 ] }, + { "monster": "mon_mi_go", "freq": 100, "cost_multiplier": 2, "starts": 720, "pack_size": [ 3, 6 ] }, + { "monster": "mon_mi_go_slaver", "freq": 30, "cost_multiplier": 10, "starts": 840 }, + { "monster": "mon_mi_go_slaver", "freq": 30, "cost_multiplier": 20, "starts": 1080, "pack_size": [ 1, 2 ] }, + { "monster": "mon_mi_go_scout", "freq": 100, "cost_multiplier": 50, "starts": 840 }, + { "monster": "mon_mi_go_myrmidon", "freq": 10, "cost_multiplier": 50, "starts": 1080 } ] }, { @@ -28,13 +20,12 @@ "//": "Basic mi-go base defenders.", "default": "mon_mi_go_slaver", "monsters": [ - { "monster": "mon_mi_go", "freq": 100, "cost_multiplier": 1 }, + { "monster": "mon_mi_go", "freq": 100, "cost_multiplier": 1, "pack_size": [ 2, 4 ] }, { "monster": "mon_mi_go", "freq": 100, "cost_multiplier": 3, "pack_size": [ 2, 4 ] }, - { "monster": "mon_mi_go_guard", "freq": 100, "cost_multiplier": 1, "pack_size": [ 1, 2 ] }, - { "monster": "mon_mi_go_guard", "freq": 100, "cost_multiplier": 3, "pack_size": [ 2, 4 ] }, - { "monster": "mon_mi_go_slaver", "freq": 100, "cost_multiplier": 2 }, - { "monster": "mon_mi_go_slaver", "freq": 100, "cost_multiplier": 4, "pack_size": [ 1, 2 ] }, - { "monster": "mon_mi_go_scout", "freq": 100, "cost_multiplier": 2 } + { "monster": "mon_mi_go_guard", "freq": 50, "cost_multiplier": 1, "pack_size": [ 1, 2 ] }, + { "monster": "mon_mi_go_guard", "freq": 30, "cost_multiplier": 3, "pack_size": [ 1, 2 ] }, + { "monster": "mon_mi_go_slaver", "freq": 20, "cost_multiplier": 4, "starts": 840, "pack_size": [ 1, 2 ] }, + { "monster": "mon_mi_go_scout", "freq": 100, "cost_multiplier": 2, "starts": 840 } ] }, { @@ -43,8 +34,8 @@ "//": "Mi-go base defenders for rooms where captives are being held.", "default": "mon_mi_go_guard", "monsters": [ - { "monster": "mon_mi_go_guard", "freq": 100, "cost_multiplier": 1, "pack_size": [ 1, 2 ] }, - { "monster": "mon_mi_go_guard", "freq": 100, "cost_multiplier": 3, "pack_size": [ 2, 4 ] }, + { "monster": "mon_mi_go_guard", "freq": 50, "cost_multiplier": 1, "pack_size": [ 1, 2 ] }, + { "monster": "mon_mi_go_guard", "freq": 50, "cost_multiplier": 3, "pack_size": [ 2, 4 ] }, { "monster": "mon_mi_go_surgeon", "freq": 100, "cost_multiplier": 2 }, { "monster": "mon_mi_go_surgeon", "freq": 100, "cost_multiplier": 4, "pack_size": [ 1, 2 ] } ] @@ -55,9 +46,20 @@ "//": "Mi-go base defenders for major boss battles.", "default": "mon_mi_go_guard", "monsters": [ - { "monster": "mon_mi_go_guard", "freq": 100, "cost_multiplier": 3, "pack_size": [ 2, 5 ] }, - { "monster": "mon_mi_go_myrmidon", "freq": 100, "cost_multiplier": 6, "pack_size": [ 1, 2 ] }, + { "monster": "mon_mi_go_guard", "freq": 70, "cost_multiplier": 3, "pack_size": [ 2, 5 ] }, + { "monster": "mon_mi_go_myrmidon", "freq": 30, "cost_multiplier": 6, "starts": 840, "pack_size": [ 1, 2 ] }, { "monster": "mon_mi_go_scout", "freq": 100, "cost_multiplier": 3, "pack_size": [ 1, 2 ] } ] + }, + { + "type": "monstergroup", + "name": "GROUP_MI-GO_SCOUT_TOWER", + "//": "Mi-go scout tower prisoner room.", + "default": "mon_mi_go", + "monsters": [ + { "monster": "mon_mi_go_surgeon", "freq": 100, "cost_multiplier": 3 }, + { "monster": "mon_mi_go_guard", "freq": 100, "cost_multiplier": 6 }, + { "monster": "mon_mi_go", "freq": 100, "cost_multiplier": 2, "pack_size": [ 3, 4 ] } + ] } ] diff --git a/data/json/monstergroups/monstergroups.json b/data/json/monstergroups/monstergroups.json index 81122d0cc5b41..284038c412131 100644 --- a/data/json/monstergroups/monstergroups.json +++ b/data/json/monstergroups/monstergroups.json @@ -4272,7 +4272,7 @@ "monsters": [ { "monster": "mon_gelatin", "freq": 250, "cost_multiplier": 0 }, { "monster": "mon_mi_go", "freq": 250, "cost_multiplier": 0 }, - { "monster": "mon_mi_go_scout", "freq": 250, "cost_multiplier": 0, "starts": 35 }, + { "monster": "mon_mi_go_scout", "freq": 250, "cost_multiplier": 0, "starts": 840 }, { "monster": "mon_kreck", "freq": 250, "cost_multiplier": 0 }, { "monster": "mon_gracke", "freq": 250, "cost_multiplier": 0 } ] @@ -4312,7 +4312,7 @@ { "monster": "mon_flying_polyp", "freq": 100, "cost_multiplier": 0 }, { "monster": "mon_hunting_horror", "freq": 100, "cost_multiplier": 0 }, { "monster": "mon_mi_go", "freq": 100, "cost_multiplier": 0 }, - { "monster": "mon_mi_go_scout", "freq": 100, "cost_multiplier": 0, "starts": 35 }, + { "monster": "mon_mi_go_scout", "freq": 100, "cost_multiplier": 0, "starts": 840 }, { "monster": "mon_yugg", "freq": 100, "cost_multiplier": 0 }, { "monster": "mon_gelatin", "freq": 100, "cost_multiplier": 0 }, { "monster": "mon_flaming_eye", "freq": 100, "cost_multiplier": 0 }, diff --git a/data/json/mutations/mutations.json b/data/json/mutations/mutations.json index 413290e265da5..fe06420202b95 100644 --- a/data/json/mutations/mutations.json +++ b/data/json/mutations/mutations.json @@ -477,15 +477,6 @@ "active": true, "category": [ "MEDICAL" ] }, - { - "type": "mutation", - "id": "INCONSPICUOUS", - "name": "Inconspicuous", - "points": 1, - "description": "While sleeping or staying still, it is less likely that monsters will wander close to you.", - "social_modifiers": { "lie": 2 }, - "valid": false - }, { "type": "mutation", "id": "MASOCHIST", @@ -1013,6 +1004,7 @@ "name": "Sweet Tooth", "points": 1, "description": "You have a soft spot for processed foods, and gain a morale bonus from eating them.", + "starting_trait": true, "cancels": [ "ANTIJUNK" ], "changes_to": [ "PROJUNK2" ], "category": [ "MOUSE", "INSECT" ] diff --git a/data/json/npcs/TALK_COMMON_ALLY.json b/data/json/npcs/TALK_COMMON_ALLY.json index 87bc58d545cab..c30c304f43435 100644 --- a/data/json/npcs/TALK_COMMON_ALLY.json +++ b/data/json/npcs/TALK_COMMON_ALLY.json @@ -741,16 +741,16 @@ "effect": "sort_loot" }, { - "text": "Please work on any unfinished construction task that you know how to finish.", + "text": "Please do any construction work that you can.", "topic": "TALK_DONE", "condition": { "not": "npc_has_activity" }, "effect": "do_construction" }, { - "text": "Please work on any contruction blueprint zones nearby.", + "text": "Please do some farming work.", "topic": "TALK_DONE", "condition": { "not": "npc_has_activity" }, - "effect": "do_blueprint_construction" + "effect": "do_farming" } ] }, diff --git a/data/json/npcs/classes.json b/data/json/npcs/classes.json index 065ec05cad5a4..229f5c90c72ae 100644 --- a/data/json/npcs/classes.json +++ b/data/json/npcs/classes.json @@ -123,6 +123,7 @@ [ "MYCUS_FRIEND", 100 ], [ "FLIMSY2", 100 ] ], + "common": false, "worn_override": "NC_VOICE_worn", "carry_override": "NC_VOICE_carry", "weapon_override": "NC_VOICE_weapon", diff --git a/data/json/npcs/isherwood_farm/NPC_Carlos_Isherwood.json b/data/json/npcs/isherwood_farm/NPC_Carlos_Isherwood.json index dffea3e5ae859..3caed2926dce9 100644 --- a/data/json/npcs/isherwood_farm/NPC_Carlos_Isherwood.json +++ b/data/json/npcs/isherwood_farm/NPC_Carlos_Isherwood.json @@ -158,7 +158,7 @@ "value": 50000, "item": "anvil", "count": 1, - "origins": [ "ORIGIN_ANY_NPC" ], + "origins": [ "ORIGIN_SECONDARY" ], "followup": "MISSION_ISHERWOOD_CARLOS_2", "dialogue": { "describe": "I need an anvil to do advanced metal work.", diff --git a/data/json/npcs/isherwood_farm/NPC_Chris_Isherwood.json b/data/json/npcs/isherwood_farm/NPC_Chris_Isherwood.json index e93a4124fd2e2..5076381beda13 100644 --- a/data/json/npcs/isherwood_farm/NPC_Chris_Isherwood.json +++ b/data/json/npcs/isherwood_farm/NPC_Chris_Isherwood.json @@ -173,7 +173,7 @@ "effect": "follow", "assign_mission_target": { "om_terrain": "mi-go_camp2", "om_special": "Mi-Go Encampment", "reveal_radius": 3 } }, - "origins": [ "ORIGIN_ANY_NPC" ], + "origins": [ "ORIGIN_SECONDARY" ], "destination": "mi-go_camp2", "dialogue": { "describe": "We need to investigate the alien encampment.", diff --git a/data/json/npcs/isherwood_farm/NPC_Claire_Isherwood.json b/data/json/npcs/isherwood_farm/NPC_Claire_Isherwood.json index 00069bf4e587d..afffc773f8a80 100644 --- a/data/json/npcs/isherwood_farm/NPC_Claire_Isherwood.json +++ b/data/json/npcs/isherwood_farm/NPC_Claire_Isherwood.json @@ -8,6 +8,8 @@ "class": "NC_ISHERWOOD_CLAIRE", "attitude": 0, "mission": 7, + "carry_override": "NC_ISHERWOOD_rifle", + "weapon_override": "NC_ISHERWOOD_archery", "chat": "TALK_ISHERWOOD_CLAIRE", "mission_offered": "MISSION_ISHERWOOD_CLAIRE_1", "faction": "isherwood_family" @@ -21,9 +23,6 @@ "common": false, "bonus_per": { "one_in": 4 }, "shopkeeper_item_group": "NC_ISHERWOOD_CLAIRE_misc", - "worn_override": "NC_Isherwood_worn", - "carry_override": "NC_ISHERWOOD_rifle", - "weapon_override": "NC_ISHERWOOD_archery", "skills": [ { "skill": "ALL", @@ -37,10 +36,35 @@ { "skill": "rifle", "bonus": { "rng": [ 4, 8 ] } } ] }, + { + "type": "item_group", + "id": "NC_ISHERWOOD_CLAIRE_storage", + "items": [ [ "backpack_hiking", 100 ] ] + }, + { + "id": "NC_ISHERWOOD_CLAIRE_gloves", + "type": "item_group", + "items": [ [ "gloves_leather", 45 ], [ "gloves_light", 20 ] ] + }, + { + "id": "NC_ISHERWOOD_CLAIRE_pants", + "type": "item_group", + "items": [ [ "jeans", 50 ], [ "pants_cargo", 70 ], [ "leather_belt", 30 ] ] + }, + { + "id": "NC_ISHERWOOD_CLAIRE_shoes", + "type": "item_group", + "items": [ [ "boots", 70 ], [ "knee_high_boots", 50 ], [ "boots_hiking", 20 ], [ "mocassins", 20 ] ] + }, + { + "id": "NC_ISHERWOOD_CLAIRE_torso", + "type": "item_group", + "items": [ [ "tank_top", 50 ], [ "dress", 45 ], [ "jacket_light", 40 ] ] + }, { "type": "item_group", "id": "NC_ISHERWOOD_CLAIRE_hat", - "items": [ [ "null", 40 ], [ "cowboy_hat", 40 ], [ "hat_boonie", 20 ] ] + "items": [ [ "null", 40 ], [ "cowboy_hat", 40 ], [ "straw_hat", 20 ] ] }, { "type": "item_group", @@ -236,7 +260,7 @@ "value": 20000, "item": "raw_dandelion", "count": 50, - "origins": [ "ORIGIN_ANY_NPC" ], + "origins": [ "ORIGIN_SECONDARY" ], "followup": "MISSION_ISHERWOOD_CLAIRE_2", "end": { "opinion": { "trust": 1, "value": 1 }, @@ -266,13 +290,13 @@ "value": 20000, "item": "seed_bee_balm", "count": 20, + "followup": "MISSION_ISHERWOOD_CLAIRE_3", "end": { "opinion": { "trust": 2, "value": 2 }, "effect": [ { "u_buy_item": "pine_tea", "container": "jar_glass_sealed", "count": 2 }, { "u_buy_item": "royal_jelly", "count": 1 }, - { "u_buy_item": "bee_balm_tea", "container": "jar_glass_sealed", "count": 2 }, - { "u_add_var": "u_did_claire_missions", "type": "general", "context": "recruit", "value": "yes" } + { "u_buy_item": "bee_balm_tea", "container": "jar_glass_sealed", "count": 2 } ] }, "origins": [ "ORIGIN_SECONDARY" ], @@ -287,5 +311,37 @@ "success_lie": "What good does this do us?", "failure": "I'll have to find someone more at home in the forest..." } + }, + { + "id": "MISSION_ISHERWOOD_CLAIRE_3", + "type": "mission_definition", + "name": "Find and capture a cat", + "goal": "MGOAL_FIND_MONSTER", + "difficulty": 4, + "value": 100000, + "origins": [ "ORIGIN_SECONDARY" ], + "start": { + "assign_mission_target": { "om_terrain": "cabin_isherwood", "reveal_radius": 1, "random": true, "search_range": 20, "min_distance": 8 }, + "update_mapgen": { "place_monster": [ { "monster": "mon_cat", "pack_size": [ 3, 6 ], "x": 20, "y": 22, "target": true } ] }, + "effect": [ { "u_buy_item": "chicken_cage", "count": 1 } ] + }, + "end": { + "opinion": { "trust": 2, "value": 2 }, + "effect": [ + { "u_buy_item": "isherwood_herbal_remedies", "count": 1 }, + { "u_add_var": "u_did_claire_missions", "type": "general", "context": "recruit", "value": "yes" } + ] + }, + "dialogue": { + "describe": "I could use a barn cat to keep the mice down.", + "offer": "I saw some feral cats out by the old cabin. Can you capture one for me?", + "accepted": "Thank you! Please hurry back! Take this cage so you have a chance of capturing one.", + "rejected": "I did't want to use chemicals on these rats.", + "advice": "Take this pet carrier; if you can get close to a cat, you can put it inside. If you're having problems, try befriending it with cat food.", + "inquire": "Have you found a cat?", + "success": "Thank you so much, I want you to have this copy of my natural remedy journal. I'll name this handsome fellow Joshua.", + "success_lie": "What?! You're lying, I can tell! Did you even bring back my cage?", + "failure": "Oh no! I guess they are too nimble for you..." + } } ] diff --git a/data/json/npcs/isherwood_farm/NPC_Eddie_Isherwood.json b/data/json/npcs/isherwood_farm/NPC_Eddie_Isherwood.json index c286d9f4470ff..17547df614130 100644 --- a/data/json/npcs/isherwood_farm/NPC_Eddie_Isherwood.json +++ b/data/json/npcs/isherwood_farm/NPC_Eddie_Isherwood.json @@ -199,7 +199,7 @@ "value": 50000, "item": "rock", "count": 120, - "origins": [ "ORIGIN_ANY_NPC" ], + "origins": [ "ORIGIN_SECONDARY" ], "followup": "MISSION_ISHERWOOD_EDDIE_2", "dialogue": { "describe": "We need to build some kilns.", @@ -214,7 +214,10 @@ }, "end": { "opinion": { "trust": 1, "value": 1 }, - "effect": { "u_add_var": "u_did_kiln_mission", "type": "general", "context": "mission", "value": "yes" }, + "effect": [ + { "u_buy_item": "meat_smoked", "count": 12 }, + { "u_buy_item": "milk", "container": "jar_3l_glass_sealed", "count": 12 } + ], "update_mapgen": [ { "om_terrain": "rural_outbuilding", @@ -239,16 +242,19 @@ "item": "material_sand", "count": 2000, "followup": "MISSION_ISHERWOOD_EDDIE_3", - "end": { "opinion": { "trust": 1, "value": 1 } }, + "end": { + "opinion": { "trust": 1, "value": 1 }, + "effect": [ { "u_buy_item": "butter", "count": 6 }, { "u_buy_item": "milk", "container": "jar_3l_glass_sealed", "count": 12 } ] + }, "origins": [ "ORIGIN_SECONDARY" ], "dialogue": { "describe": "I do have some resource gathering I could use help with.", - "offer": "Now that the kilns are set up, we could use 2000 units of sand to get production going.", + "offer": "Now that the forge is set up, we could use 2000 units of sand to get production going.", "accepted": "Thank you.", "rejected": "Oh well. I'll try to find time to get it myself, thanks.", "advice": "You can find it along river banks, or maybe landscaping supplies and hardware stores.", "inquire": "How is the search going?", - "success": "Thanks, now Luke can get started.", + "success": "Thanks, now Luke can get started. Here's a token of my thanks.", "success_lie": "What good does this do us?", "failure": "I wonder where all the sand went..." } @@ -262,21 +268,24 @@ "value": 20000, "item": "clay_lump", "count": 1000, - "end": { "opinion": { "trust": 2, "value": 2 } }, - "effect": [ - { "u_add_var": "u_did_eddie_missions", "type": "general", "context": "mission", "value": "yes" }, - { "u_buy_item": "rope_6", "count": 1 }, - { "u_buy_item": "cattlefodder", "count": 3 } - ], + "end": { + "opinion": { "trust": 2, "value": 2 }, + "effect": [ + { "u_add_var": "u_did_eddie_missions", "type": "general", "context": "mission", "value": "yes" }, + { "u_buy_item": "rope_6", "count": 1 }, + { "u_buy_monster": "mon_cow", "count": 1, "name": "Daisy" }, + { "u_buy_item": "cattlefodder", "count": 3 } + ] + }, "origins": [ "ORIGIN_SECONDARY" ], "dialogue": { "describe": "I do have some resource gathering I could use help if you have time.", - "offer": "Now that the kilns are set up, we could use 1000 units of clay to get production going.", + "offer": "Now that the clay kiln is set up, we could use 1000 units of clay to get production going.", "accepted": "Thank you.", "rejected": "Oh well. I'll try to find time to get it myself, thanks.", "advice": "You can find it along river banks, or maybe look for deposits in the forest.", "inquire": "How is the search going?", - "success": "Thanks, now Luke can get started making jugs, We'd like to give you a cow if you want it. Here's a rope an some fodder, feel free to pick one out.", + "success": "Thanks, now Luke can get started making jugs, We'd like to give you a cow, Here's Daisy, take good care of her and she'll provide you with milk.", "success_lie": "What good does this do us?", "failure": "I wonder where all the sand went..." } diff --git a/data/json/npcs/isherwood_farm/NPC_Jack_Isherwood.json b/data/json/npcs/isherwood_farm/NPC_Jack_Isherwood.json index 3c7c24a702c39..f415b0bd9ed21 100644 --- a/data/json/npcs/isherwood_farm/NPC_Jack_Isherwood.json +++ b/data/json/npcs/isherwood_farm/NPC_Jack_Isherwood.json @@ -8,6 +8,9 @@ "class": "NC_ISHERWOOD_JACK", "attitude": 0, "mission": 7, + "worn_override": "NC_Isherwood_worn", + "carry_override": "NC_ISHERWOOD_rifle", + "weapon_override": "NC_ISHERWOOD_archery", "chat": "TALK_ISHERWOOD_JACK", "mission_offered": "MISSION_ISHERWOOD_JACK_1", "faction": "isherwood_family" @@ -21,9 +24,6 @@ "common": false, "bonus_per": { "one_in": 4 }, "shopkeeper_item_group": "NC_ISHERWOOD_JACK_misc", - "worn_override": "NC_Isherwood_worn", - "carry_override": "NC_ISHERWOOD_rifle", - "weapon_override": "NC_ISHERWOOD_archery", "skills": [ { "skill": "ALL", @@ -311,7 +311,7 @@ "value": 20000, "item": "jar_3l_glass", "count": 20, - "origins": [ "ORIGIN_ANY_NPC" ], + "origins": [ "ORIGIN_SECONDARY" ], "followup": "MISSION_ISHERWOOD_JACK_2", "end": { "opinion": { "trust": 1, "value": 1 }, diff --git a/data/json/npcs/isherwood_farm/NPC_Jesse_Isherwood.json b/data/json/npcs/isherwood_farm/NPC_Jesse_Isherwood.json index 76f43a78ebbf5..f0cb20d1a709e 100644 --- a/data/json/npcs/isherwood_farm/NPC_Jesse_Isherwood.json +++ b/data/json/npcs/isherwood_farm/NPC_Jesse_Isherwood.json @@ -113,7 +113,7 @@ { "type": "talk_topic", "id": "TALK_ISHERWOOD_JESSE_TIPS", - "dynamic_line": "We can't wait for someone else to fix things, we need to take care of ourselves. Horses make good all around companions. They can get places that cars can't and also help when all the engines fail. They become very trusting if you feed them some nice fodder.", + "dynamic_line": "Horses make good all around companions. They can get places that cars can't and also help when all the engines fail. They become very trusting if you feed them some nice fodder.", "responses": [ { "text": "Let's talk about something else.", "topic": "TALK_ISHERWOOD_JESSE_TOPICS" }, { "text": "I'd better get going.", "topic": "TALK_DONE" } @@ -188,27 +188,52 @@ "goal": "MGOAL_KILL_MONSTER", "difficulty": 5, "value": 50000, + "followup": "MISSION_ISHERWOOD_JESSE_2", "start": { "assign_mission_target": { "om_terrain": "forest_thick", "reveal_radius": 1, "random": true, "search_range": 20, "min_distance": 8 }, - "update_mapgen": { "place_monster": [ { "monster": "mon_flying_polyp", "x": 11, "y": 11, "target": true } ] } + "update_mapgen": { "place_monster": [ { "monster": "mon_wolf", "pack_size": [ 4, 8 ], "x": 3, "y": 9, "target": true } ] } }, "origins": [ "ORIGIN_ANY_NPC" ], + "dialogue": { + "describe": "We could use some help killing some wolves.", + "offer": "There's been some wolves that keep scaring our chickens and horses, I'd be grateful if you can kill them.", + "accepted": "Wonderful, let me know when it is done.", + "rejected": "Thanks anyway, we will try some traps.", + "advice": "A gun will probably help.", + "inquire": "Did you kill it?", + "success": "I appreciate it, I've got this old saddle I want you to have. I'll be happy to put a horse under it if you want to do some more heroics.", + "success_lie": "Show me the bodies.", + "failure": "It was a lost cause anyways..." + }, + "end": { "opinion": { "trust": 1, "value": 1 }, "effect": [ { "u_buy_item": "riding_saddle", "count": 1 } ] } + }, + { + "id": "MISSION_ISHERWOOD_JESSE_2", + "type": "mission_definition", + "name": "Kill monster", + "goal": "MGOAL_KILL_MONSTER", + "difficulty": 8, + "value": 80000, + "start": { + "assign_mission_target": { "om_terrain": "forest_thick", "reveal_radius": 1, "random": true, "search_range": 20, "min_distance": 15 }, + "update_mapgen": { "place_monster": [ { "monster": "mon_flying_polyp", "pack_size": [ 3, 6 ], "x": 11, "y": 11, "target": true } ] } + }, + "origins": [ "ORIGIN_SECONDARY" ], "dialogue": { "describe": "We could use some help killing some monsters.", - "offer": "I don't know what it is, but it is very fast, I'm willing to outfit you with a horse if you succeed.", + "offer": "We could use some help killing a pack of monsters. I don't know what they are, but they're very fast, I'm willing to outfit you with a horse if you succeed.", "accepted": "Be ready for anything.", "rejected": "Thanks anyway, we will try some traps.", "advice": "A gun will probably help.", "inquire": "Did you kill it?", - "success": "I appreciate it, this will help keep our animals safe, here's an extra saddle for you. Take this fodder and choose a horse for your bravery.", - "success_lie": "Show me the body.", + "success": "I appreciate it, this will help keep our animals safe. This is, Steve, he's a good, steady horse. You should talk to Carlos about some armor for him.", + "success_lie": "Show me the bodies.", "failure": "It was a lost cause anyways..." }, "end": { "opinion": { "trust": 1, "value": 1 }, "effect": [ - { "u_buy_item": "riding_saddle", "count": 1 }, - { "u_buy_item": "cattlefodder", "count": 3 }, + { "u_buy_monster": "mon_horse", "count": 1, "name": "Steve" }, { "u_add_var": "u_did_jesse_missions", "type": "general", "context": "recruit", "value": "yes" } ] } diff --git a/data/json/npcs/isherwood_farm/NPC_Luke_Isherwood.json b/data/json/npcs/isherwood_farm/NPC_Luke_Isherwood.json index 3bd249cca8109..81318d3526e39 100644 --- a/data/json/npcs/isherwood_farm/NPC_Luke_Isherwood.json +++ b/data/json/npcs/isherwood_farm/NPC_Luke_Isherwood.json @@ -167,7 +167,7 @@ "value": 50000, "item": "glassblowing_book", "count": 1, - "origins": [ "ORIGIN_ANY_NPC" ], + "origins": [ "ORIGIN_SECONDARY" ], "followup": "MISSION_ISHERWOOD_LUKE_2", "dialogue": { "describe": "I need more knowledge to get the glass blowing started.", diff --git a/data/json/npcs/missiondef.json b/data/json/npcs/missiondef.json index a26ca6adb8533..ccd30f67a9885 100644 --- a/data/json/npcs/missiondef.json +++ b/data/json/npcs/missiondef.json @@ -771,5 +771,46 @@ "success_lie": "I know time is relative and all that.", "failure": "I'm not quite sure how you failed to survive AND are talking to me." } + }, + { + "id": "MISSION_LEARN_ABOUT_CATTAIL_JELLY", + "type": "mission_definition", + "name": "Gather cattail stalks to create cattail jelly", + "description": "Gather 80 cattail stalks from the swamp and bring them back to learn how to craft cattail jelly. Raise your survival skill to at least 1 by harvesting cattail stalks. Bring back the provided bag as well.", + "goal": "MGOAL_CONDITION", + "goal_condition": { + "and": [ + { "u_has_item": "duffelbag" }, + { "u_has_items": { "item": "cattail_stalk", "count": 80 } }, + { "u_has_skill": { "skill": "survival", "level": 1 } } + ] + }, + "difficulty": 1, + "value": 0, + "origins": [ "ORIGIN_OPENER_NPC", "ORIGIN_ANY_NPC" ], + "start": { + "effect": [ { "u_buy_item": "duffelbag" } ], + "assign_mission_target": { "om_terrain": "forest_water", "reveal_radius": 3 } + }, + "end": { + "effect": [ + { "u_sell_item": "duffelbag" }, + { "u_sell_item": "cattail_stalk", "count": 80 }, + { "npc_consume_item": "cattail_stalk", "count": 80 }, + { "u_learn_recipe": "cattail_jelly" }, + { "u_buy_item": "cattail_jelly", "container": "bag_zipper", "count": 7 } + ] + }, + "dialogue": { + "describe": "Medical services are a little sparse following , but people have been surviving using their wits and the bounty of Mother Nature for a long time. Care to learn a little?", + "offer": "Did you know that cattails are a source of a jelly that works as an antiseptic and analgesic? Something like that is likely to be mighty helpful out here. I want you to take this bag, head to the nearest swamp, collect 80 cattail stalks, and bring them back here. In exchange, I'll show you how to harvest the jelly.", + "accepted": "Great! This bag should be big enough to hold all of the stalks we'll need. Don't forget to bring it back.", + "rejected": "Your loss.", + "advice": "The cattails grow in the fresh water in swamps. You can't miss them.", + "inquire": "Got those cattail stalks yet? Don't forget to bring back my bag and improve your survival skill to at least 1 as well.", + "success": "Great! Hand them over and I'll show you how this works.", + "success_lie": "OK, then hand them over.", + "failure": "Well, that's a shame." + } } ] diff --git a/data/json/npcs/starting_traits.json b/data/json/npcs/starting_traits.json index 0a3cb9e8b2b1a..0045a328beab0 100644 --- a/data/json/npcs/starting_traits.json +++ b/data/json/npcs/starting_traits.json @@ -33,6 +33,7 @@ { "group": "trait_group_TOUGH", "prob": 20 }, { "group": "trait_group_WEAKSCENT", "prob": 10 }, { "group": "trait_group_PAINRESIST", "prob": 10 }, + { "group": "trait_group_PROJUNK", "prob": 5 }, { "trait": "DEFT", "prob": 10 }, { "trait": "DISRESISTANT", "prob": 10 }, { "trait": "ADRENALINE", "prob": 10 }, @@ -58,7 +59,6 @@ { "trait": "MEATARIAN", "prob": 5 }, { "trait": "HOARDER", "prob": 10 }, { "trait": "JITTERY", "prob": 10 }, - { "trait": "ANTIJUNK", "prob": 5 }, { "trait": "LACTOSE", "prob": 10 }, { "trait": "VEGETARIAN", "prob": 15 }, { "trait": "MOODSWINGS", "prob": 10 }, @@ -67,8 +67,7 @@ { "trait": "SQUEAMISH", "prob": 20 }, { "trait": "TRIGGERHAPPY", "prob": 10 }, { "trait": "ANTIWHEAT", "prob": 5 }, - { "trait": "WOOLALLERGY", "prob": 5 }, - { "trait": "INCONSPICUOUS", "prob": 10 } + { "trait": "WOOLALLERGY", "prob": 5 } ] }, { @@ -250,5 +249,11 @@ "id": "trait_group_PAINRESIST", "subtype": "distribution", "traits": [ { "trait": "PAINRESIST" }, { "trait": "MORE_PAIN" } ] + }, + { + "type": "trait_group", + "id": "trait_group_PROJUNK", + "subtype": "distribution", + "traits": [ { "trait": "PROJUNK" }, { "trait": "ANTIJUNK" } ] } ] diff --git a/data/json/obsolete.json b/data/json/obsolete.json index 8f9e4a1aa27ab..cfed4ab4d2a95 100644 --- a/data/json/obsolete.json +++ b/data/json/obsolete.json @@ -243,5 +243,14 @@ "type": "recipe", "result": "flamethrower_simple", "obsolete": true + }, + { + "type": "mutation", + "id": "INCONSPICUOUS", + "name": "Inconspicuous", + "points": 1, + "description": "While sleeping or staying still, it is less likely that monsters will wander close to you.", + "social_modifiers": { "lie": 2 }, + "valid": false } ] diff --git a/data/json/overmap/overmap_special/specials.json b/data/json/overmap/overmap_special/specials.json index d9f6cdf67d52a..048ad7631ac12 100644 --- a/data/json/overmap/overmap_special/specials.json +++ b/data/json/overmap/overmap_special/specials.json @@ -4509,7 +4509,23 @@ "city_sizes": [ 0, 20 ], "occurrences": [ 0, 1 ], "flags": [ "CLASSIC" ], - "spawns": { "group": "GROUP_MI-GO_CAMP_OM", "population": [ 50, 200 ], "radius": [ 2, 30 ] } + "spawns": { "group": "GROUP_MI-GO_CAMP_OM", "population": [ 20, 50 ], "radius": [ 2, 30 ] } + }, + { + "type": "overmap_special", + "id": "Mi-Go Scout Tower", + "overmaps": [ + { "point": [ 0, 0, 0 ], "overmap": "mi-go_scout_tower_1_north" }, + { "point": [ 0, 0, 1 ], "overmap": "mi-go_scout_tower_2_north" }, + { "point": [ 0, 0, 2 ], "overmap": "mi-go_scout_tower_3_north" }, + { "point": [ 0, 0, 3 ], "overmap": "mi-go_scout_tower_4_north" } + ], + "locations": [ "wilderness", "forest", "land" ], + "city_distance": [ 1, -1 ], + "city_sizes": [ 0, 20 ], + "occurrences": [ 0, 3 ], + "flags": [ "CLASSIC" ], + "spawns": { "group": "GROUP_MI-GO_CAMP_OM", "population": [ 2, 5 ], "radius": [ 2, 30 ] } }, { "type": "overmap_special", @@ -5558,5 +5574,77 @@ "city_sizes": [ 3, 20 ], "occurrences": [ 0, 0 ], "flags": [ "UNIQUE" ] + }, + { + "type": "overmap_special", + "id": "steel mill", + "overmaps": [ + { "point": [ 0, 0, 0 ], "overmap": "steel_mill_0_1_north" }, + { "point": [ 1, 0, 0 ], "overmap": "steel_mill_0_2_north" }, + { "point": [ 2, 0, 0 ], "overmap": "steel_mill_0_3_north" }, + { "point": [ 3, 0, 0 ], "overmap": "steel_mill_0_4_north" }, + { "point": [ 0, 1, 0 ], "overmap": "steel_mill_1_1_north" }, + { "point": [ 1, 1, 0 ], "overmap": "steel_mill_1_2_north" }, + { "point": [ 2, 1, 0 ], "overmap": "steel_mill_1_3_north" }, + { "point": [ 3, 1, 0 ], "overmap": "steel_mill_1_4_north" }, + { "point": [ 0, 2, 0 ], "overmap": "steel_mill_2_1_north" }, + { "point": [ 1, 2, 0 ], "overmap": "steel_mill_2_2_north" }, + { "point": [ 2, 2, 0 ], "overmap": "steel_mill_2_3_north" }, + { "point": [ 3, 2, 0 ], "overmap": "steel_mill_2_4_north" }, + { "point": [ 0, 3, 0 ], "overmap": "steel_mill_3_1_north" }, + { "point": [ 1, 3, 0 ], "overmap": "steel_mill_3_2_north" }, + { "point": [ 2, 3, 0 ], "overmap": "steel_mill_3_3_north" }, + { "point": [ 3, 3, 0 ], "overmap": "steel_mill_rail_1_north" }, + { "point": [ 0, 4, 0 ], "overmap": "steel_mill_4_1_north" }, + { "point": [ 1, 4, 0 ], "overmap": "steel_mill_4_2_north" }, + { "point": [ 2, 4, 0 ], "overmap": "steel_mill_4_3_north" }, + { "point": [ 3, 4, 0 ], "overmap": "steel_mill_rail_2_north" }, + { "point": [ 0, 0, 1 ], "overmap": "steel_mill_0_1_2_north" }, + { "point": [ 1, 0, 1 ], "overmap": "steel_mill_0_2_2_north" }, + { "point": [ 2, 0, 1 ], "overmap": "steel_mill_0_3_2_north" }, + { "point": [ 3, 0, 1 ], "overmap": "steel_mill_0_4_2_north" }, + { "point": [ 0, 1, 1 ], "overmap": "steel_mill_1_1_2_north" }, + { "point": [ 1, 1, 1 ], "overmap": "steel_mill_1_2_2_north" }, + { "point": [ 2, 1, 1 ], "overmap": "steel_mill_1_3_2_north" }, + { "point": [ 3, 1, 1 ], "overmap": "steel_mill_1_4_2_north" }, + { "point": [ 0, 2, 1 ], "overmap": "steel_mill_2_1_2_north" }, + { "point": [ 1, 2, 1 ], "overmap": "steel_mill_2_2_2_north" }, + { "point": [ 2, 2, 1 ], "overmap": "steel_mill_2_3_2_north" }, + { "point": [ 3, 2, 1 ], "overmap": "steel_mill_2_4_2_north" }, + { "point": [ 0, 3, 1 ], "overmap": "steel_mill_3_1_2_north" }, + { "point": [ 1, 3, 1 ], "overmap": "steel_mill_3_2_2_north" }, + { "point": [ 2, 3, 1 ], "overmap": "steel_mill_3_3_2_north" }, + { "point": [ 3, 3, 1 ], "overmap": "steel_mill_rail_1_2_north" }, + { "point": [ 0, 4, 1 ], "overmap": "steel_mill_4_1_2_north" }, + { "point": [ 1, 4, 1 ], "overmap": "steel_mill_4_2_2_north" }, + { "point": [ 2, 4, 1 ], "overmap": "steel_mill_4_3_2_north" }, + { "point": [ 3, 4, 1 ], "overmap": "steel_mill_rail_2_2_north" }, + { "point": [ 0, 0, 2 ], "overmap": "steel_mill_0_1_3_north" }, + { "point": [ 1, 0, 2 ], "overmap": "steel_mill_0_2_3_north" }, + { "point": [ 2, 0, 2 ], "overmap": "steel_mill_0_3_3_north" }, + { "point": [ 3, 0, 2 ], "overmap": "steel_mill_0_4_3_north" }, + { "point": [ 0, 1, 2 ], "overmap": "steel_mill_1_1_3_north" }, + { "point": [ 1, 1, 2 ], "overmap": "steel_mill_1_2_3_north" }, + { "point": [ 2, 1, 2 ], "overmap": "steel_mill_1_3_3_north" }, + { "point": [ 3, 1, 2 ], "overmap": "steel_mill_1_4_3_north" }, + { "point": [ 0, 2, 2 ], "overmap": "steel_mill_2_1_3_north" }, + { "point": [ 1, 2, 2 ], "overmap": "steel_mill_2_2_3_north" }, + { "point": [ 2, 2, 2 ], "overmap": "steel_mill_2_3_3_north" }, + { "point": [ 3, 2, 2 ], "overmap": "steel_mill_2_4_3_north" }, + { "point": [ 0, 3, 2 ], "overmap": "steel_mill_3_1_3_north" }, + { "point": [ 1, 3, 2 ], "overmap": "steel_mill_3_2_3_north" }, + { "point": [ 2, 3, 2 ], "overmap": "steel_mill_3_3_3_north" }, + { "point": [ 3, 3, 2 ], "overmap": "steel_mill_rail_1_3_north" }, + { "point": [ 0, 4, 2 ], "overmap": "steel_mill_4_1_3_north" }, + { "point": [ 1, 4, 2 ], "overmap": "steel_mill_4_2_3_north" }, + { "point": [ 2, 4, 2 ], "overmap": "steel_mill_4_3_3_north" }, + { "point": [ 3, 4, 2 ], "overmap": "steel_mill_rail_2_3_north" } + ], + "locations": [ "wilderness", "land" ], + "connections": [ { "point": [ 2, -1, 0 ], "terrain": "road", "connection": "local_road", "from": [ 2, 0, 0 ] } ], + "city_distance": [ 10, 100 ], + "city_sizes": [ 3, 12 ], + "occurrences": [ 0, 1 ], + "flags": [ "CLASSIC" ] } ] diff --git a/data/json/overmap/overmap_terrain/overmap_terrain_industrial.json b/data/json/overmap/overmap_terrain/overmap_terrain_industrial.json index e2bf4ccfb9c95..6f990dec02c54 100644 --- a/data/json/overmap/overmap_terrain/overmap_terrain_industrial.json +++ b/data/json/overmap/overmap_terrain/overmap_terrain_industrial.json @@ -507,5 +507,485 @@ "name": "storage units", "sym": "#", "color": "i_yellow" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_0_1", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_0_2", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_0_3", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_0_4", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_1_1", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_1_2", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_1_3", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_1_4", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_2_1", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_2_2", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_2_3", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_2_4", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_3_1", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_3_2", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_3_3", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_rail_1", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill depot", + "sym": "|", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_4_1", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_4_2", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_4_3", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_rail_2", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill depot", + "sym": "|", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_0_1_2", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_0_2_2", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_0_3_2", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_0_4_2", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_1_1_2", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_1_2_2", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_1_3_2", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_1_4_2", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_2_1_2", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_2_2_2", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_2_3_2", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_2_4_2", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_3_1_2", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_3_2_2", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_3_3_2", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_rail_1_2", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill depot", + "sym": "|", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_4_1_2", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_4_2_2", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_4_3_2", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_rail_2_2", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill depot", + "sym": "|", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_0_1_3", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_0_2_3", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_0_3_3", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_0_4_3", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_1_1_3", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_1_2_3", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_1_3_3", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_1_4_3", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_2_1_3", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_2_2_3", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_2_3_3", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_2_4_3", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_3_1_3", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_3_2_3", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_3_3_3", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_rail_1_3", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill depot", + "sym": "|", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_4_1_3", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_4_2_3", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_4_3_3", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill", + "sym": "S", + "color": "dark_gray" + }, + { + "type": "overmap_terrain", + "id": "steel_mill_rail_2_3", + "copy-from": "generic_city_building_no_sidewalk", + "name": "steel mill depot", + "sym": "|", + "color": "dark_gray" } ] diff --git a/data/json/overmap/overmap_terrain/overmap_terrain_mi-go.json b/data/json/overmap/overmap_terrain/overmap_terrain_mi-go.json index af8262bc764c3..127d27e83e802 100644 --- a/data/json/overmap/overmap_terrain/overmap_terrain_mi-go.json +++ b/data/json/overmap/overmap_terrain/overmap_terrain_mi-go.json @@ -30,5 +30,37 @@ "sym": "_", "color": "light_gray", "mondensity": 2 + }, + { + "type": "overmap_terrain", + "id": "mi-go_scout_tower_1", + "name": "mi-go scout tower", + "sym": ">", + "color": "light_gray", + "mondensity": 2 + }, + { + "type": "overmap_terrain", + "id": "mi-go_scout_tower_2", + "name": "mi-go scout tower", + "sym": ">", + "color": "light_gray", + "mondensity": 2 + }, + { + "type": "overmap_terrain", + "id": "mi-go_scout_tower_3", + "name": "mi-go scout tower", + "sym": ">", + "color": "light_gray", + "mondensity": 2 + }, + { + "type": "overmap_terrain", + "id": "mi-go_scout_tower_4", + "name": "mi-go scout tower", + "sym": ">", + "color": "light_gray", + "mondensity": 2 } ] diff --git a/data/json/player_activities.json b/data/json/player_activities.json index 2a8f3425b5eb1..b69910bc5931d 100644 --- a/data/json/player_activities.json +++ b/data/json/player_activities.json @@ -26,10 +26,10 @@ "no_resume": true }, { - "id": "ACT_BLUEPRINT_CONSTRUCTION", + "id": "ACT_TIDY_UP", "type": "activity_type", - "activity_level": "ACTIVE_EXERCISE", - "verb": "constructing", + "activity_level": "MODERATE_EXERCISE", + "verb": "tidying up", "suspendable": false, "based_on": "neither", "no_resume": true @@ -306,6 +306,24 @@ "based_on": "neither", "no_resume": true }, + { + "id": "ACT_FETCH_REQUIRED", + "type": "activity_type", + "activity_level": "MODERATE_EXERCISE", + "verb": "fetching components", + "suspendable": false, + "based_on": "neither", + "no_resume": true + }, + { + "id": "ACT_MULTIPLE_FARM", + "type": "activity_type", + "activity_level": "ACTIVE_EXERCISE", + "verb": "farming", + "suspendable": false, + "based_on": "neither", + "no_resume": true + }, { "id": "ACT_PLANT_PLOT", "type": "activity_type", @@ -533,6 +551,13 @@ "verb": "drilling", "based_on": "speed" }, + { + "id": "ACT_CHURN", + "type": "activity_type", + "activity_level": "EXTRA_EXERCISE", + "verb": "churning earth", + "based_on": "time" + }, { "id": "ACT_DIG", "type": "activity_type", diff --git a/data/json/recipes/ammo/components.json b/data/json/recipes/ammo/components.json index 2a7d7cd96096e..260d505ca603d 100644 --- a/data/json/recipes/ammo/components.json +++ b/data/json/recipes/ammo/components.json @@ -12,6 +12,27 @@ "qualities": [ { "id": "CHEM", "level": 1 } ], "components": [ [ [ "magnesium", 100 ], [ "chem_aluminium_powder", 100 ] ], [ [ "oxy_powder", 200 ] ] ] }, + { + "result": "gunpowder", + "type": "recipe", + "category": "CC_AMMO", + "subcategory": "CSC_AMMO_COMPONENTS", + "skill_used": "fabrication", + "difficulty": 1, + "time": "15 s", + "book_learn": [ [ "pocket_firearms", 3 ], [ "manual_gun", 2 ], [ "recipe_bullets", 1 ], [ "textbook_anarch", 0 ] ], + "tools": [ [ [ "mortar_pestle", -1 ] ], [ [ "sieve_steel", -1 ] ] ], + "components": [ + [ + [ "gunpowder_shotgun", 1 ], + [ "gunpowder_pistol", 1 ], + [ "gunpowder_magnum_pistol", 1 ], + [ "gunpowder_rifle", 1 ], + [ "gunpowder_large_rifle", 1 ], + [ "gunpowder_artillery", 1 ] + ] + ] + }, { "type": "recipe", "result": "460_casing", diff --git a/data/json/recipes/ammo/grenades.json b/data/json/recipes/ammo/grenades.json index bc153f9350ea3..28d6f96d23fdf 100644 --- a/data/json/recipes/ammo/grenades.json +++ b/data/json/recipes/ammo/grenades.json @@ -14,7 +14,7 @@ "charges": 1, "using": [ [ "ammo_40mm", 1 ] ], "tools": [ [ [ "press", -1 ] ] ], - "components": [ [ [ "gunpowder", 30 ] ], [ [ "combatnail", 25 ] ] ] + "components": [ [ [ "gunpowder", 30 ], [ "gunpowder_pistol", 30 ], [ "gunpowder_shotgun", 3 ] ], [ [ "combatnail", 25 ] ] ] }, { "result": "40mm_shot", @@ -30,7 +30,7 @@ "book_learn": [ [ "manual_launcher", 4 ], [ "manual_shotgun", 6 ] ], "charges": 1, "using": [ [ "bullet_forming", 2 ], [ "ammo_40mm", 1 ], [ "ammo_bullet", 12 ] ], - "components": [ [ [ "gunpowder", 30 ] ] ] + "components": [ [ [ "gunpowder", 30 ], [ "gunpowder_pistol", 30 ], [ "gunpowder_shotgun", 30 ] ] ] }, { "result": "40mm_slug", @@ -46,6 +46,6 @@ "book_learn": [ [ "manual_launcher", 4 ], [ "manual_shotgun", 6 ] ], "charges": 1, "using": [ [ "bullet_forming", 3 ], [ "ammo_40mm", 1 ], [ "ammo_bullet", 12 ] ], - "components": [ [ [ "gunpowder", 36 ] ], [ [ "plastic_chunk", 1 ] ] ] + "components": [ [ [ "gunpowder", 36 ], [ "gunpowder_pistol", 36 ], [ "gunpowder_shotgun", 2 ] ], [ [ "plastic_chunk", 1 ] ] ] } ] diff --git a/data/json/recipes/ammo/pistol.json b/data/json/recipes/ammo/pistol.json index 93356ddbcb147..49d65e9cd1ee1 100644 --- a/data/json/recipes/ammo/pistol.json +++ b/data/json/recipes/ammo/pistol.json @@ -77,7 +77,11 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 2 ] ], - "components": [ [ [ "32_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder", 2 ] ] ] + "components": [ + [ [ "32_casing", 1 ] ], + [ [ "smpistol_primer", 1 ] ], + [ [ "gunpowder", 2 ], [ "gunpowder_pistol", 2 ], [ "gunpowder_shotgun", 2 ] ] + ] }, { "result": "reloaded_38_fmj", @@ -93,7 +97,12 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 2 ] ], - "components": [ [ [ "38_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder", 2 ] ], [ [ "copper", 1 ] ] ] + "components": [ + [ [ "38_casing", 1 ] ], + [ [ "smpistol_primer", 1 ] ], + [ [ "gunpowder", 2 ], [ "gunpowder_pistol", 2 ], [ "gunpowder_shotgun", 2 ] ], + [ [ "copper", 1 ] ] + ] }, { "result": "reloaded_38_special", @@ -109,7 +118,11 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 2 ] ], - "components": [ [ [ "38_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder", 2 ] ] ] + "components": [ + [ [ "38_casing", 1 ] ], + [ [ "smpistol_primer", 1 ] ], + [ [ "gunpowder", 2 ], [ "gunpowder_pistol", 2 ], [ "gunpowder_shotgun", 2 ] ] + ] }, { "result": "reloaded_38super_fmj", @@ -125,7 +138,7 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 2 ], [ "ammo_38super", 1 ] ], - "components": [ [ [ "gunpowder", 3 ] ] ] + "components": [ [ [ "gunpowder", 3 ], [ "gunpowder_pistol", 3 ], [ "gunpowder_shotgun", 3 ] ] ] }, { "result": "reloaded_357mag_fmj", @@ -141,7 +154,7 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 2 ], [ "ammo_357mag", 1 ] ], - "components": [ [ [ "gunpowder", 5 ] ] ] + "components": [ [ [ "gunpowder", 5 ], [ "gunpowder_rifle", 5 ], [ "gunpowder_magnum_pistol", 5 ] ] ] }, { "result": "reloaded_357mag_jhp", @@ -157,7 +170,7 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 2 ], [ "ammo_357mag", 1 ] ], - "components": [ [ [ "gunpowder", 5 ] ] ] + "components": [ [ [ "gunpowder", 5 ], [ "gunpowder_rifle", 5 ], [ "gunpowder_magnum_pistol", 5 ] ] ] }, { "result": "bp_38_special", @@ -189,7 +202,11 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 2 ] ], - "components": [ [ [ "38_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder", 3 ] ] ] + "components": [ + [ [ "38_casing", 1 ] ], + [ [ "smpistol_primer", 1 ] ], + [ [ "gunpowder", 3 ], [ "gunpowder_pistol", 3 ], [ "gunpowder_shotgun", 3 ] ] + ] }, { "result": "reloaded_40fmj", @@ -205,7 +222,12 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 2 ] ], - "components": [ [ [ "40_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder", 4 ] ], [ [ "copper", 1 ] ] ] + "components": [ + [ [ "40_casing", 1 ] ], + [ [ "smpistol_primer", 1 ] ], + [ [ "gunpowder", 4 ], [ "gunpowder_pistol", 4 ], [ "gunpowder_shotgun", 4 ] ], + [ [ "copper", 1 ] ] + ] }, { "result": "reloaded_40sw", @@ -221,7 +243,11 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 2 ] ], - "components": [ [ [ "40_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder", 4 ] ] ] + "components": [ + [ [ "40_casing", 1 ] ], + [ [ "smpistol_primer", 1 ] ], + [ [ "gunpowder", 4 ], [ "gunpowder_pistol", 4 ], [ "gunpowder_shotgun", 4 ] ] + ] }, { "result": "reloaded_10mm_fmj", @@ -237,7 +263,7 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 2 ], [ "ammo_10mm", 1 ] ], - "components": [ [ [ "gunpowder", 5 ] ] ] + "components": [ [ [ "gunpowder", 5 ], [ "gunpowder_magnum_pistol", 5 ] ] ] }, { "result": "reloaded_44fmj", @@ -253,7 +279,12 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 5 ], [ "ammo_bullet", 4 ] ], - "components": [ [ [ "44_casing", 1 ] ], [ [ "lgpistol_primer", 1 ] ], [ [ "gunpowder", 6 ] ], [ [ "copper", 2 ] ] ] + "components": [ + [ [ "44_casing", 1 ] ], + [ [ "lgpistol_primer", 1 ] ], + [ [ "gunpowder", 6 ], [ "gunpowder_rifle", 6 ], [ "gunpowder_magnum_pistol", 6 ] ], + [ [ "copper", 2 ] ] + ] }, { "result": "reloaded_44magnum", @@ -269,7 +300,11 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 5 ], [ "ammo_bullet", 5 ] ], - "components": [ [ [ "44_casing", 1 ] ], [ [ "lgpistol_primer", 1 ] ], [ [ "gunpowder", 6 ] ] ] + "components": [ + [ [ "44_casing", 1 ] ], + [ [ "lgpistol_primer", 1 ] ], + [ [ "gunpowder", 6 ], [ "gunpowder_rifle", 6 ], [ "gunpowder_magnum_pistol", 6 ] ] + ] }, { "result": "bp_44magnum", @@ -301,7 +336,11 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 3 ], [ "ammo_bullet", 3 ] ], - "components": [ [ [ "45_casing", 1 ] ], [ [ "lgpistol_primer", 1 ] ], [ [ "gunpowder", 4 ] ] ] + "components": [ + [ [ "45_casing", 1 ] ], + [ [ "lgpistol_primer", 1 ] ], + [ [ "gunpowder", 4 ], [ "gunpowder_pistol", 4 ], [ "gunpowder_shotgun", 4 ] ] + ] }, { "result": "reloaded_45_jhp", @@ -317,7 +356,11 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 3 ], [ "ammo_bullet", 3 ] ], - "components": [ [ [ "45_casing", 1 ] ], [ [ "lgpistol_primer", 1 ] ], [ [ "gunpowder", 4 ] ] ] + "components": [ + [ [ "45_casing", 1 ] ], + [ [ "lgpistol_primer", 1 ] ], + [ [ "gunpowder", 4 ], [ "gunpowder_pistol", 4 ], [ "gunpowder_shotgun", 4 ] ] + ] }, { "result": "reloaded_45_super", @@ -333,7 +376,7 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 3 ], [ "ammo_bullet", 3 ] ], - "components": [ [ [ "45_casing", 1 ] ], [ [ "lgpistol_primer", 1 ] ], [ [ "gunpowder", 5 ] ] ] + "components": [ [ [ "45_casing", 1 ] ], [ [ "lgpistol_primer", 1 ] ], [ [ "gunpowder", 5 ], [ "gunpowder_pistol", 5 ] ] ] }, { "result": "reloaded_454_Casull", @@ -349,7 +392,12 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 5 ], [ "ammo_bullet", 4 ] ], - "components": [ [ [ "454_casing", 1 ] ], [ [ "smrifle_primer", 1 ] ], [ [ "gunpowder", 6 ] ], [ [ "copper", 2 ] ] ] + "components": [ + [ [ "454_casing", 1 ] ], + [ [ "smrifle_primer", 1 ] ], + [ [ "gunpowder", 6 ], [ "gunpowder_rifle", 6 ], [ "gunpowder_magnum_pistol", 6 ] ], + [ [ "copper", 2 ] ] + ] }, { "result": "bp_454_Casull", @@ -381,7 +429,7 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 3 ], [ "ammo_bullet", 4 ], [ "ammo_45colt", 1 ] ], - "components": [ [ [ "gunpowder", 4 ] ] ] + "components": [ [ [ "gunpowder", 4 ], [ "gunpowder_pistol", 4 ], [ "gunpowder_shotgun", 4 ] ] ] }, { "result": "reloaded_46mm", @@ -397,7 +445,7 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 2 ] ], - "components": [ [ [ "46mm_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder", 4 ] ] ] + "components": [ [ [ "46mm_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder", 4 ], [ "gunpowder_pistol", 4 ] ] ] }, { "result": "reloaded_460_fmj", @@ -413,7 +461,12 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 3 ], [ "ammo_bullet", 3 ] ], - "components": [ [ [ "460_casing", 1 ] ], [ [ "lgpistol_primer", 1 ] ], [ [ "gunpowder", 6 ] ], [ [ "copper", 2 ] ] ] + "components": [ + [ [ "460_casing", 1 ] ], + [ [ "lgpistol_primer", 1 ] ], + [ [ "gunpowder", 6 ], [ "gunpowder_rifle", 6 ], [ "gunpowder_magnum_pistol", 6 ] ], + [ [ "copper", 2 ] ] + ] }, { "result": "reloaded_460_rowland", @@ -429,7 +482,11 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 3 ], [ "ammo_bullet", 3 ] ], - "components": [ [ [ "460_casing", 1 ] ], [ [ "lgpistol_primer", 1 ] ], [ [ "gunpowder", 6 ] ] ] + "components": [ + [ [ "460_casing", 1 ] ], + [ [ "lgpistol_primer", 1 ] ], + [ [ "gunpowder", 6 ], [ "gunpowder_rifle", 6 ], [ "gunpowder_magnum_pistol", 6 ] ] + ] }, { "result": "reloaded_500_Magnum", @@ -445,7 +502,12 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 6 ], [ "ammo_bullet", 5 ] ], - "components": [ [ [ "500_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], [ [ "gunpowder", 8 ] ], [ [ "copper", 2 ] ] ] + "components": [ + [ [ "500_casing", 1 ] ], + [ [ "lgrifle_primer", 1 ] ], + [ [ "gunpowder", 8 ], [ "gunpowder_rifle", 8 ], [ "gunpowder_magnum_pistol", 8 ] ], + [ [ "copper", 2 ] ] + ] }, { "result": "reloaded_57mm", @@ -461,7 +523,7 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 2 ] ], - "components": [ [ [ "57mm_casing", 1 ] ], [ [ "smrifle_primer", 1 ] ], [ [ "gunpowder", 4 ] ] ] + "components": [ [ [ "57mm_casing", 1 ] ], [ [ "smrifle_primer", 1 ] ], [ [ "gunpowder", 4 ], [ "gunpowder_pistol", 4 ] ] ] }, { "result": "reloaded_762_25", @@ -477,7 +539,7 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 2 ], [ "ammo_762_25", 1 ] ], - "components": [ [ [ "gunpowder", 4 ] ] ] + "components": [ [ [ "gunpowder", 4 ], [ "gunpowder_pistol", 4 ] ] ] }, { "result": "reloaded_9mm", @@ -493,7 +555,7 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 2 ], [ "ammo_9mm", 1 ] ], - "components": [ [ [ "gunpowder", 3 ] ] ] + "components": [ [ [ "gunpowder", 3 ], [ "gunpowder_pistol", 3 ], [ "gunpowder_shotgun", 3 ] ] ] }, { "result": "reloaded_9mmP", @@ -509,7 +571,7 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 2 ], [ "ammo_9mm", 1 ] ], - "components": [ [ [ "gunpowder", 4 ] ] ] + "components": [ [ [ "gunpowder", 4 ], [ "gunpowder_pistol", 4 ] ] ] }, { "result": "reloaded_9mmP2", @@ -525,7 +587,7 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 2 ], [ "ammo_9mm", 1 ] ], - "components": [ [ [ "gunpowder", 5 ] ] ] + "components": [ [ [ "gunpowder", 5 ], [ "gunpowder_pistol", 5 ] ] ] }, { "result": "reloaded_9mmfmj", @@ -541,7 +603,7 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 2 ], [ "ammo_9mm", 1 ] ], - "components": [ [ [ "gunpowder", 3 ] ], [ [ "copper", 1 ] ] ] + "components": [ [ [ "gunpowder", 3 ], [ "gunpowder_pistol", 3 ], [ "gunpowder_shotgun", 3 ] ], [ [ "copper", 1 ] ] ] }, { "result": "reloaded_9x18mm", @@ -557,7 +619,11 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 2 ] ], - "components": [ [ [ "9x18mm_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder", 3 ] ] ] + "components": [ + [ [ "9x18mm_casing", 1 ] ], + [ [ "smpistol_primer", 1 ] ], + [ [ "gunpowder", 3 ], [ "gunpowder_pistol", 3 ], [ "gunpowder_shotgun", 3 ] ] + ] }, { "result": "reloaded_9x18mmfmj", @@ -573,7 +639,12 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 2 ] ], - "components": [ [ [ "9x18mm_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder", 3 ] ], [ [ "copper", 1 ] ] ] + "components": [ + [ [ "9x18mm_casing", 1 ] ], + [ [ "smpistol_primer", 1 ] ], + [ [ "gunpowder", 3 ], [ "gunpowder_pistol", 3 ], [ "gunpowder_shotgun", 3 ] ], + [ [ "copper", 1 ] ] + ] }, { "result": "reloaded_9x18mmP2", @@ -589,7 +660,11 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 2 ] ], - "components": [ [ [ "9x18mm_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder", 5 ] ] ] + "components": [ + [ [ "9x18mm_casing", 1 ] ], + [ [ "smpistol_primer", 1 ] ], + [ [ "gunpowder", 5 ], [ "gunpowder_pistol", 5 ], [ "gunpowder_shotgun", 5 ] ] + ] }, { "result": "reloaded_380_JHP", @@ -605,7 +680,7 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 2 ], [ "ammo_380", 1 ] ], - "components": [ [ [ "gunpowder", 2 ] ] ] + "components": [ [ [ "gunpowder", 2 ], [ "gunpowder_pistol", 2 ], [ "gunpowder_shotgun", 2 ] ] ] }, { "result": "reloaded_380_p", @@ -621,7 +696,7 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 2 ], [ "ammo_380", 1 ] ], - "components": [ [ [ "gunpowder", 3 ] ] ] + "components": [ [ [ "gunpowder", 3 ], [ "gunpowder_pistol", 3 ], [ "gunpowder_shotgun", 3 ] ] ] }, { "result": "reloaded_380_FMJ", @@ -637,6 +712,6 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 2 ], [ "ammo_380", 1 ] ], - "components": [ [ [ "gunpowder", 2 ] ], [ [ "copper", 1 ] ] ] + "components": [ [ [ "gunpowder", 2 ], [ "gunpowder_pistol", 3 ], [ "gunpowder_shotgun", 3 ] ], [ [ "copper", 1 ] ] ] } ] diff --git a/data/json/recipes/ammo/rifle.json b/data/json/recipes/ammo/rifle.json index bdcb8962157f7..8622bfd3fe409 100644 --- a/data/json/recipes/ammo/rifle.json +++ b/data/json/recipes/ammo/rifle.json @@ -47,7 +47,7 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 3 ], [ "ammo_bullet", 2 ] ], - "components": [ [ [ "22_casing_new", 1 ] ], [ [ "gunpowder", 2 ] ], [ [ "copper", 1 ] ] ] + "components": [ [ [ "22_casing_new", 1 ] ], [ [ "gunpowder", 2 ], [ "gunpowder_pistol", 2 ] ], [ [ "copper", 1 ] ] ] }, { "result": "reloaded_22_lr", @@ -63,7 +63,7 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 2 ] ], - "components": [ [ [ "22_casing_new", 1 ] ], [ [ "gunpowder", 2 ] ] ] + "components": [ [ [ "22_casing_new", 1 ] ], [ [ "gunpowder", 2 ], [ "gunpowder_pistol", 2 ] ] ] }, { "result": "reloaded_223", @@ -79,7 +79,12 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 4 ], [ "ammo_bullet", 3 ] ], - "components": [ [ [ "223_casing", 1 ] ], [ [ "smrifle_primer", 1 ] ], [ [ "gunpowder", 4 ] ], [ [ "copper", 1 ] ] ] + "components": [ + [ [ "223_casing", 1 ] ], + [ [ "smrifle_primer", 1 ] ], + [ [ "gunpowder", 4 ], [ "gunpowder_magnum_pistol", 4 ], [ "gunpowder_rifle", 4 ] ], + [ [ "copper", 1 ] ] + ] }, { "result": "reloaded_270win_jsp", @@ -95,7 +100,7 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 8 ], [ "ammo_bullet", 5 ], [ "ammo_270win", 1 ] ], - "components": [ [ [ "gunpowder", 10 ] ], [ [ "copper", 3 ] ] ] + "components": [ [ [ "gunpowder", 10 ], [ "gunpowder_magnum_pistol", 10 ], [ "gunpowder_rifle", 10 ] ], [ [ "copper", 3 ] ] ] }, { "result": "reloaded_300_winmag", @@ -111,7 +116,12 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 12 ], [ "ammo_bullet", 8 ] ], - "components": [ [ [ "300_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], [ [ "gunpowder", 16 ] ], [ [ "copper", 4 ] ] ] + "components": [ + [ [ "300_casing", 1 ] ], + [ [ "lgrifle_primer", 1 ] ], + [ [ "gunpowder", 16 ], [ "gunpowder_rifle", 16 ], [ "gunpowder_large_rifle", 16 ] ], + [ [ "copper", 4 ] ] + ] }, { "result": "reloaded_3006", @@ -127,7 +137,12 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 12 ], [ "ammo_bullet", 8 ] ], - "components": [ [ [ "3006_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], [ [ "gunpowder", 12 ] ], [ [ "copper", 4 ] ] ] + "components": [ + [ [ "3006_casing", 1 ] ], + [ [ "lgrifle_primer", 1 ] ], + [ [ "gunpowder", 12 ], [ "gunpowder_rifle", 12 ], [ "gunpowder_large_rifle", 12 ] ], + [ [ "copper", 4 ] ] + ] }, { "result": "reloaded_3006fmj", @@ -143,7 +158,12 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 12 ], [ "ammo_bullet", 8 ] ], - "components": [ [ [ "3006_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], [ [ "gunpowder", 12 ] ], [ [ "copper", 4 ] ] ] + "components": [ + [ [ "3006_casing", 1 ] ], + [ [ "lgrifle_primer", 1 ] ], + [ [ "gunpowder", 12 ], [ "gunpowder_rifle", 12 ], [ "gunpowder_large_rifle", 12 ] ], + [ [ "copper", 4 ] ] + ] }, { "result": "reloaded_3006_incendiary", @@ -162,7 +182,12 @@ "components": [ [ [ "3006_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], - [ [ "gunpowder", 12 ] ], + [ + [ "gunpowder", 12 ], + [ "gunpowder_magnum_pistol", 12 ], + [ "gunpowder_rifle", 12 ], + [ "gunpowder_large_rifle", 12 ] + ], [ [ "copper", 4 ] ], [ [ "incendiary", 8 ] ] ] @@ -184,7 +209,12 @@ "components": [ [ [ "308_casing", 1 ], [ "762_51_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], - [ [ "gunpowder", 8 ] ], + [ + [ "gunpowder", 8 ], + [ "gunpowder_magnum_pistol", 12 ], + [ "gunpowder_rifle", 12 ], + [ "gunpowder_large_rifle", 12 ] + ], [ [ "copper", 3 ] ] ] }, @@ -204,7 +234,7 @@ "components": [ [ [ "4570_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], - [ [ "gunpowder", 15 ] ], + [ [ "gunpowder", 15 ], [ "gunpowder_rifle", 12 ], [ "gunpowder_magnum_pistol", 12 ] ], [ [ "lead", 5 ] ], [ [ "copper", 2 ] ] ] @@ -222,7 +252,12 @@ "book_learn": [ [ "recipe_bullets", 2 ], [ "mag_rifle", 4 ] ], "charges": 1, "using": [ [ "bullet_forming", 15 ], [ "ammo_bullet", 8 ] ], - "components": [ [ [ "4570_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], [ [ "gunpowder", 17 ] ], [ [ "copper", 7 ] ] ] + "components": [ + [ [ "4570_casing", 1 ] ], + [ [ "lgrifle_primer", 1 ] ], + [ [ "gunpowder", 17 ], [ "gunpowder_magnum_pistol", 12 ], [ "gunpowder_rifle", 12 ] ], + [ [ "copper", 7 ] ] + ] }, { "result": "reloaded_4570_low", @@ -237,7 +272,12 @@ "book_learn": [ [ "recipe_bullets", 2 ], [ "mag_rifle", 4 ] ], "charges": 1, "using": [ [ "bullet_forming", 15 ], [ "ammo_bullet", 8 ] ], - "components": [ [ [ "4570_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], [ [ "gunpowder", 12 ] ], [ [ "lead", 9 ] ] ] + "components": [ + [ [ "4570_casing", 1 ] ], + [ [ "lgrifle_primer", 1 ] ], + [ [ "gunpowder", 12 ], [ "gunpowder_magnum_pistol", 12 ], [ "gunpowder_rifle", 12 ] ], + [ [ "lead", 9 ] ] + ] }, { "result": "reloaded_4570_bp", @@ -273,7 +313,7 @@ [ [ "5x50_hull", 1 ] ], [ [ "plastic_chunk", 1 ] ], [ [ "smrifle_primer", 1 ] ], - [ [ "gunpowder", 3 ] ], + [ [ "gunpowder", 3 ], [ "gunpowder_magnum_pistol", 3 ] ], [ [ "combatnail", 1 ] ] ] }, @@ -291,7 +331,12 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 18 ], [ "ammo_bullet", 12 ] ], - "components": [ [ [ "50_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], [ [ "gunpowder", 30 ] ], [ [ "copper", 6 ] ] ] + "components": [ + [ [ "50_casing", 1 ] ], + [ [ "lgrifle_primer", 1 ] ], + [ [ "gunpowder", 30 ], [ "gunpowder_large_rifle", 30 ] ], + [ [ "copper", 6 ] ] + ] }, { "result": "reloaded_50_incendiary", @@ -310,7 +355,7 @@ "components": [ [ [ "50_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], - [ [ "gunpowder", 30 ] ], + [ [ "gunpowder", 30 ], [ "gunpowder_large_rifle", 30 ] ], [ [ "copper", 6 ] ], [ [ "incendiary", 20 ] ] ] @@ -332,7 +377,7 @@ "components": [ [ [ "50_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], - [ [ "gunpowder", 30 ] ], + [ [ "gunpowder", 30 ], [ "gunpowder_large_rifle", 30 ] ], [ [ "scrap", 1 ] ], [ [ "copper", 6 ] ] ] @@ -351,7 +396,12 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 4 ], [ "ammo_bullet", 3 ] ], - "components": [ [ [ "545_casing", 1 ] ], [ [ "smrifle_primer", 1 ] ], [ [ "gunpowder", 5 ] ], [ [ "copper", 1 ] ] ] + "components": [ + [ [ "545_casing", 1 ] ], + [ [ "smrifle_primer", 1 ] ], + [ [ "gunpowder", 5 ], [ "gunpowder_magnum_pistol", 5 ], [ "gunpowder_rifle", 5 ] ], + [ [ "copper", 1 ] ] + ] }, { "result": "reloaded_545_ap", @@ -367,7 +417,12 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 4 ], [ "ammo_bullet", 3 ] ], - "components": [ [ [ "545_casing", 1 ] ], [ [ "smrifle_primer", 1 ] ], [ [ "gunpowder", 6 ] ], [ [ "copper", 1 ] ] ] + "components": [ + [ [ "545_casing", 1 ] ], + [ [ "smrifle_primer", 1 ] ], + [ [ "gunpowder", 6 ], [ "gunpowder_magnum_pistol", 6 ], [ "gunpowder_rifle", 6 ] ], + [ [ "copper", 1 ] ] + ] }, { "result": "reloaded_300blk", @@ -399,7 +454,17 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 4 ], [ "ammo_bullet", 3 ] ], - "components": [ [ [ "223_casing", 1 ] ], [ [ "smrifle_primer", 1 ] ], [ [ "gunpowder", 6 ] ], [ [ "copper", 1 ] ] ] + "components": [ + [ [ "223_casing", 1 ] ], + [ [ "smrifle_primer", 1 ] ], + [ + [ "gunpowder", 6 ], + [ "gunpowder_magnum_pistol", 6 ], + [ "gunpowder_rifle", 6 ], + [ "gunpowder_magnum_pistol", 6 ] + ], + [ [ "copper", 1 ] ] + ] }, { "result": "reloaded_556_incendiary", @@ -418,7 +483,7 @@ "components": [ [ [ "223_casing", 1 ] ], [ [ "smrifle_primer", 1 ] ], - [ [ "gunpowder", 6 ] ], + [ [ "gunpowder", 6 ], [ "gunpowder_rifle", 6 ], [ "gunpowder_magnum_pistol", 6 ] ], [ [ "copper", 1 ] ], [ [ "incendiary", 2 ] ] ] @@ -437,7 +502,12 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 15 ], [ "ammo_bullet", 10 ] ], - "components": [ [ [ "700nx_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], [ [ "gunpowder", 30 ] ], [ [ "copper", 5 ] ] ] + "components": [ + [ [ "700nx_casing", 1 ] ], + [ [ "lgrifle_primer", 1 ] ], + [ [ "gunpowder", 30 ], [ "gunpowder_large_rifle", 30 ] ], + [ [ "copper", 5 ] ] + ] }, { "result": "reloaded_762_51", @@ -456,7 +526,7 @@ "components": [ [ [ "308_casing", 1 ], [ "762_51_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], - [ [ "gunpowder", 10 ] ], + [ [ "gunpowder", 10 ], [ "gunpowder_rifle", 10 ], [ "gunpowder_magnum_pistol", 10 ] ], [ [ "copper", 3 ] ] ] }, @@ -477,7 +547,12 @@ "components": [ [ [ "308_casing", 1 ], [ "762_51_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], - [ [ "gunpowder", 10 ] ], + [ + [ "gunpowder", 10 ], + [ "gunpowder_magnum_pistol", 10 ], + [ "gunpowder_rifle", 10 ], + [ "gunpowder_large_rifle", 10 ] + ], [ [ "copper", 3 ] ], [ [ "incendiary", 6 ] ] ] @@ -496,7 +571,17 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 10 ], [ "ammo_bullet", 7 ] ], - "components": [ [ [ "762R_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], [ [ "gunpowder", 10 ] ], [ [ "copper", 3 ] ] ] + "components": [ + [ [ "762R_casing", 1 ] ], + [ [ "lgrifle_primer", 1 ] ], + [ + [ "gunpowder", 10 ], + [ "gunpowder_magnum_pistol", 10 ], + [ "gunpowder_rifle", 10 ], + [ "gunpowder_large_rifle", 10 ] + ], + [ [ "copper", 3 ] ] + ] }, { "result": "reloaded_762_m43", @@ -512,7 +597,12 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 5 ], [ "ammo_bullet", 4 ] ], - "components": [ [ [ "762_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], [ [ "gunpowder", 8 ] ], [ [ "copper", 1 ] ] ] + "components": [ + [ [ "762_casing", 1 ] ], + [ [ "lgrifle_primer", 1 ] ], + [ [ "gunpowder", 8 ], [ "gunpowder_magnum_pistol", 8 ], [ "gunpowder_rifle", 8 ] ], + [ [ "copper", 1 ] ] + ] }, { "result": "reloaded_762_m87", @@ -528,6 +618,11 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 5 ], [ "ammo_bullet", 4 ] ], - "components": [ [ [ "762_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], [ [ "gunpowder", 8 ] ], [ [ "copper", 1 ] ] ] + "components": [ + [ [ "762_casing", 1 ] ], + [ [ "lgrifle_primer", 1 ] ], + [ [ "gunpowder", 8 ], [ "gunpowder_magnum_pistol", 8 ], [ "gunpowder_rifle", 8 ] ], + [ [ "copper", 1 ] ] + ] } ] diff --git a/data/json/recipes/ammo/shot.json b/data/json/recipes/ammo/shot.json index c1f325237e490..7fd05a9bbb6ce 100644 --- a/data/json/recipes/ammo/shot.json +++ b/data/json/recipes/ammo/shot.json @@ -13,7 +13,7 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 1 ], [ "ammo_bullet", 10 ], [ "ammo_shot", 1 ] ], - "components": [ [ [ "gunpowder", 6 ] ] ] + "components": [ [ [ "gunpowder", 6 ], [ "gunpowder_pistol", 6 ], [ "gunpowder_shotgun", 6 ] ] ] }, { "result": "reloaded_410shot_000", @@ -29,7 +29,7 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 1 ], [ "ammo_bullet", 5 ], [ "ammo_410shot", 1 ] ], - "components": [ [ [ "gunpowder", 5 ] ] ] + "components": [ [ [ "gunpowder", 5 ], [ "gunpowder_pistol", 5 ], [ "gunpowder_shotgun", 5 ] ] ] }, { "result": "reloaded_shot_bird", @@ -45,7 +45,7 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 1 ], [ "ammo_bullet", 10 ], [ "ammo_shot", 1 ] ], - "components": [ [ [ "gunpowder", 3 ] ] ] + "components": [ [ [ "gunpowder", 3 ], [ "gunpowder_pistol", 3 ], [ "gunpowder_shotgun", 3 ] ] ] }, { "result": "reloaded_shot_dragon", @@ -61,7 +61,7 @@ "charges": 1, "using": [ [ "ammo_shot", 1 ] ], "tools": [ [ [ "press", -1 ] ] ], - "components": [ [ [ "gunpowder", 3 ] ], [ [ "magnesium", 5 ] ] ] + "components": [ [ [ "gunpowder", 3 ], [ "gunpowder_pistol", 3 ], [ "gunpowder_shotgun", 3 ] ], [ [ "magnesium", 5 ] ] ] }, { "result": "reloaded_shot_flechette", @@ -78,7 +78,7 @@ "reversible": true, "using": [ [ "ammo_shot", 1 ] ], "tools": [ [ [ "press", -1 ] ] ], - "components": [ [ [ "gunpowder", 6 ] ], [ [ "combatnail", 10 ] ] ] + "components": [ [ [ "gunpowder", 6 ], [ "gunpowder_pistol", 6 ], [ "gunpowder_shotgun", 6 ] ], [ [ "combatnail", 10 ] ] ] }, { "result": "reloaded_shot_slug", @@ -94,7 +94,7 @@ "charges": 1, "reversible": true, "using": [ [ "bullet_forming", 1 ], [ "ammo_bullet", 20 ], [ "ammo_shot", 1 ] ], - "components": [ [ [ "gunpowder", 6 ] ] ] + "components": [ [ [ "gunpowder", 6 ], [ "gunpowder_pistol", 6 ], [ "gunpowder_shotgun", 6 ] ] ] }, { "result": "bp_shot_00", @@ -193,7 +193,10 @@ "reversible": true, "using": [ [ "ammo_shot", 2 ] ], "tools": [ [ [ "press", -1 ] ] ], - "components": [ [ [ "gunpowder", 12 ] ], [ [ "scrap", 1 ], [ "nail", 10 ], [ "bb", 20 ] ] ] + "components": [ + [ [ "gunpowder", 12 ], [ "gunpowder_pistol", 12 ], [ "gunpowder_shotgun", 12 ] ], + [ [ "scrap", 1 ], [ "nail", 10 ], [ "bb", 20 ] ] + ] }, { "result": "signal_flare", diff --git a/data/json/recipes/other/medical.json b/data/json/recipes/other/medical.json index d66fbe5ca1993..87e6a63ff1808 100644 --- a/data/json/recipes/other/medical.json +++ b/data/json/recipes/other/medical.json @@ -72,6 +72,7 @@ "subcategory": "CSC_OTHER_MEDICAL", "skill_used": "cooking", "autolearn": true, + "book_learn": [ [ "isherwood_herbal_remedies", 1 ] ], "time": "30 s", "components": [ [ [ "chem_ethanol", 250 ], [ "denat_alcohol", 250 ] ] ] }, @@ -85,6 +86,7 @@ "skills_required": [ "survival", 4 ], "time": "60 m", "autolearn": true, + "book_learn": [ [ "isherwood_herbal_remedies", 3 ] ], "qualities": [ { "id": "HAMMER", "level": 1 }, { "id": "CUT", "level": 1 }, { "id": "BOIL", "level": 2 } ], "tools": [ [ [ "surface_heat", 10, "LIST" ] ] ], "components": [ [ [ "cooking_oil", 2 ], [ "cooking_oil2", 2 ] ], [ [ "mugwort", 2 ] ] ] @@ -99,6 +101,7 @@ "skills_required": [ "survival", 4 ], "time": "60 m", "autolearn": true, + "book_learn": [ [ "isherwood_herbal_remedies", 3 ] ], "qualities": [ { "id": "HAMMER", "level": 1 }, { "id": "CUT", "level": 1 }, { "id": "BOIL", "level": 2 } ], "tools": [ [ [ "surface_heat", 10, "LIST" ] ] ], "components": [ [ [ "cooking_oil", 2 ], [ "cooking_oil2", 2 ] ], [ [ "thyme", 2 ] ] ] @@ -117,7 +120,8 @@ [ "mag_survival", 1 ], [ "textbook_survival", 1 ], [ "survival_book", 1 ], - [ "pocket_survival", 1 ] + [ "pocket_survival", 1 ], + [ "isherwood_herbal_remedies", 1 ] ], "qualities": [ { "id": "CUT", "level": 1 } ], "components": [ [ [ "cattail_stalk", 4 ] ] ] diff --git a/data/json/recipes/other/tool.json b/data/json/recipes/other/tool.json index 534f48acb6654..7635f5e55693e 100644 --- a/data/json/recipes/other/tool.json +++ b/data/json/recipes/other/tool.json @@ -363,5 +363,15 @@ "qualities": [ { "id": "CUT", "level": 1 }, { "id": "COOK", "level": 2 } ], "tools": [ [ [ "surface_heat", 7, "LIST" ] ] ], "components": [ [ [ "stick", 1 ], [ "2x4", 1 ], [ "splinter", 1 ], [ "pool_cue", 1 ], [ "torch_done", 1 ] ], [ [ "pine_bough", 2 ] ] ] + }, + { + "type": "recipe", + "result": "sieve_steel", + "category": "CC_OTHER", + "subcategory": "CSC_OTHER_TOOLS", + "skill_used": "fabrication", + "time": "2 m", + "autolearn": true, + "components": [ [ [ "colander_steel", 1 ], [ "splatter_guard", 1 ] ] ] } ] diff --git a/data/json/recipes/recipe_deconstruction.json b/data/json/recipes/recipe_deconstruction.json index 25a482e5fa650..5b2220b7133e9 100644 --- a/data/json/recipes/recipe_deconstruction.json +++ b/data/json/recipes/recipe_deconstruction.json @@ -2642,6 +2642,23 @@ ], "flags": [ "BLIND_EASY", "UNCRAFT_LIQUIDS_CONTAINED" ] }, + { + "result": "survival_kit", + "type": "uncraft", + "time": "6 s", + "components": [ + [ [ "knife_folding", 1 ] ], + [ [ "flint_steel", 1 ] ], + [ [ "whistle_multitool", 1 ] ], + [ [ "bottle_folding", 1 ] ], + [ [ "glowstick", 1 ] ], + [ [ "handflare", 4 ] ], + [ [ "pur_tablets", 15 ] ], + [ [ "pocket_survival", 1 ] ], + [ [ "survival_kit_box", 1 ] ] + ], + "flags": [ "BLIND_EASY" ] + }, { "result": "garlic", "type": "uncraft", diff --git a/data/json/recipes/recipe_food.json b/data/json/recipes/recipe_food.json index 98fbc50f51350..9a685e2a10b30 100644 --- a/data/json/recipes/recipe_food.json +++ b/data/json/recipes/recipe_food.json @@ -4195,7 +4195,8 @@ [ "adv_chemistry", 6 ], [ "atomic_survival", 4 ], [ "survival_book", 5 ], - [ "recipe_labchem", 5 ] + [ "recipe_labchem", 5 ], + [ "isherwood_herbal_remedies", 4 ] ], "qualities": [ { "id": "CHEM", "level": 2 } ], "tools": [ ], diff --git a/data/json/recipes/recipe_medsandchemicals.json b/data/json/recipes/recipe_medsandchemicals.json index 21d3591f71d0e..aa507baab91c9 100644 --- a/data/json/recipes/recipe_medsandchemicals.json +++ b/data/json/recipes/recipe_medsandchemicals.json @@ -177,7 +177,8 @@ [ "pocket_survival", 3 ], [ "atomic_survival", 2 ], [ "textbook_survival", 2 ], - [ "survival_book", 3 ] + [ "survival_book", 3 ], + [ "isherwood_herbal_remedies", 2 ] ], "qualities": [ { "id": "CHEM", "level": 2 } ], "tools": [ [ [ "surface_heat", 2, "LIST" ] ] ], @@ -192,7 +193,13 @@ "skills_required": [ "survival", 2 ], "difficulty": 2, "time": "20 m", - "book_learn": [ [ "pocket_survival", 3 ], [ "atomic_survival", 2 ], [ "textbook_survival", 2 ], [ "survival_book", 3 ] ], + "book_learn": [ + [ "pocket_survival", 3 ], + [ "atomic_survival", 2 ], + [ "textbook_survival", 2 ], + [ "survival_book", 3 ], + [ "isherwood_herbal_remedies", 1 ] + ], "tools": [ [ [ "surface_heat", 8, "LIST" ] ] ], "components": [ [ [ "meal_bone", 1 ] ], [ [ "water_clean", 1 ] ] ] }, @@ -205,7 +212,13 @@ "skills_required": [ "survival", 2 ], "difficulty": 3, "time": "30 m", - "book_learn": [ [ "pocket_survival", 3 ], [ "atomic_survival", 2 ], [ "textbook_survival", 2 ], [ "survival_book", 3 ] ], + "book_learn": [ + [ "pocket_survival", 3 ], + [ "atomic_survival", 2 ], + [ "textbook_survival", 2 ], + [ "survival_book", 3 ], + [ "isherwood_herbal_remedies", 2 ] + ], "tools": [ [ [ "surface_heat", 8, "LIST" ] ] ], "components": [ [ [ "meal_bone", 1 ] ], [ [ "dry_fruit", 1 ], [ "sugar", 45 ] ], [ [ "water_clean", 1 ] ] ] }, @@ -224,7 +237,8 @@ [ "pocket_survival", 3 ], [ "atomic_survival", 2 ], [ "textbook_survival", 2 ], - [ "survival_book", 3 ] + [ "survival_book", 3 ], + [ "isherwood_herbal_remedies", 2 ] ], "qualities": [ { "id": "CHEM", "level": 2 } ], "tools": [ [ [ "surface_heat", 2, "LIST" ] ] ], @@ -267,7 +281,8 @@ [ "atomic_survival", 5 ], [ "textbook_survival", 5 ], [ "survival_book", 5 ], - [ "recipe_labchem", 4 ] + [ "recipe_labchem", 4 ], + [ "isherwood_herbal_remedies", 3 ] ], "qualities": [ { "id": "CHEM", "level": 3 } ], "tools": [ [ [ "surface_heat", 20, "LIST" ] ] ], @@ -332,7 +347,8 @@ [ "atomic_survival", 6 ], [ "textbook_survival", 6 ], [ "survival_book", 7 ], - [ "recipe_labchem", 6 ] + [ "recipe_labchem", 6 ], + [ "isherwood_herbal_remedies", 5 ] ], "qualities": [ { "id": "CHEM", "level": 3 } ], "tools": [ [ [ "surface_heat", 20, "LIST" ] ] ], @@ -487,7 +503,13 @@ "skills_required": [ "firstaid", 1 ], "difficulty": 4, "time": "24 m", - "book_learn": [ [ "adv_chemistry", 2 ], [ "textbook_chemistry", 2 ], [ "recipe_labchem", 2 ], [ "atomic_survival", 3 ] ], + "book_learn": [ + [ "adv_chemistry", 2 ], + [ "textbook_chemistry", 2 ], + [ "recipe_labchem", 2 ], + [ "atomic_survival", 3 ], + [ "isherwood_herbal_remedies", 2 ] + ], "qualities": [ { "id": "CHEM", "level": 2 } ], "tools": [ [ [ "surface_heat", 25, "LIST" ] ] ], "components": [ [ [ "water_clean", 1 ] ], [ [ "oxy_powder", 5 ] ], [ [ "willowbark", 10 ] ] ] @@ -519,7 +541,7 @@ "skill_used": "cooking", "difficulty": 6, "time": "24 m", - "book_learn": [ [ "adv_chemistry", 5 ], [ "textbook_chemistry", 5 ], [ "recipe_labchem", 5 ] ], + "book_learn": [ [ "adv_chemistry", 5 ], [ "textbook_chemistry", 5 ], [ "recipe_labchem", 5 ], [ "isherwood_herbal_remedies", 4 ] ], "qualities": [ { "id": "CHEM", "level": 2 } ], "tools": [ [ [ "surface_heat", 20, "LIST" ] ] ], "components": [ [ [ "salt_water", 2 ], [ "saline", 10 ] ] ] @@ -715,7 +737,8 @@ [ "pocket_survival", 3 ], [ "atomic_survival", 2 ], [ "textbook_survival", 2 ], - [ "survival_book", 3 ] + [ "survival_book", 3 ], + [ "isherwood_herbal_remedies", 2 ] ], "qualities": [ { "id": "CHEM", "level": 1 } ], "tools": [ [ [ "surface_heat", 2, "LIST" ] ] ], diff --git a/data/json/recipes/weapon/magazines.json b/data/json/recipes/weapon/magazines.json index 67a817456b0d0..f3c555ba706f3 100644 --- a/data/json/recipes/weapon/magazines.json +++ b/data/json/recipes/weapon/magazines.json @@ -9,9 +9,10 @@ "skills_required": [ "gun", 2 ], "time": "20 m", "book_learn": [ [ "recipe_bullets", 2 ], [ "mag_rifle", 3 ] ], - "qualities": [ { "id": "SAW_M", "level": 1 }, { "id": "HAMMER", "level": 1 } ], "tools": [ [ [ "small_repairkit", 10 ], [ "large_repairkit", 5 ] ] ], - "components": [ [ [ "steel_chunk", 1 ] ] ] + "using": [ [ "3006_casehead", 1 ] ], + "qualities": [ { "id": "SAW_M", "level": 1 }, { "id": "HAMMER", "level": 1 } ], + "components": [ [ [ "sheet_metal_small", 1 ] ] ] }, { "result": "762x39_clip", @@ -24,8 +25,9 @@ "time": "20 m", "book_learn": [ [ "recipe_bullets", 2 ], [ "mag_rifle", 3 ] ], "qualities": [ { "id": "SAW_M", "level": 1 }, { "id": "HAMMER", "level": 1 } ], + "using": [ [ "762_casehead", 1 ] ], "tools": [ [ [ "small_repairkit", 10 ], [ "large_repairkit", 5 ] ] ], - "components": [ [ [ "steel_chunk", 2 ] ] ] + "components": [ [ [ "sheet_metal_small", 1 ] ] ] }, { "result": "762R_clip", @@ -38,8 +40,9 @@ "time": "20 m", "book_learn": [ [ "recipe_bullets", 2 ], [ "mag_rifle", 3 ] ], "qualities": [ { "id": "SAW_M", "level": 1 }, { "id": "HAMMER", "level": 1 } ], + "using": [ [ "762R_casehead", 1 ] ], "tools": [ [ [ "small_repairkit", 10 ], [ "large_repairkit", 5 ] ] ], - "components": [ [ [ "steel_chunk", 1 ] ] ] + "components": [ [ [ "sheet_metal_small", 1 ] ] ] }, { "result": "garandclip", @@ -51,9 +54,10 @@ "skills_required": [ "gun", 2 ], "time": "20 m", "book_learn": [ [ "recipe_bullets", 2 ], [ "mag_rifle", 3 ] ], + "using": [ [ "3006_casehead", 1 ] ], "qualities": [ { "id": "SAW_M", "level": 1 }, { "id": "HAMMER", "level": 1 } ], - "tools": [ [ [ "small_repairkit", 10 ], [ "large_repairkit", 5 ] ] ], - "components": [ [ [ "steel_chunk", 1 ] ] ] + "tools": [ [ [ "garand", -1 ] ], [ [ "small_repairkit", 10 ], [ "large_repairkit", 5 ] ] ], + "components": [ [ [ "sheet_metal_small", 1 ] ] ] }, { "result": "marlin_tubeloader", @@ -79,6 +83,7 @@ "skills_required": [ "gun", 2 ], "time": "8 m", "autolearn": true, + "tools": [ [ [ "nailgun", -1 ], [ "nailrifle", -1 ], [ "coilgun", -1 ] ], [ [ "nail", -1 ], [ "combatnail", -1 ] ] ], "qualities": [ { "id": "HAMMER", "level": 2 }, { "id": "SAW_M", "level": 1 }, { "id": "SCREW", "level": 1 } ], "components": [ [ [ "can_drink_unsealed", 1 ], [ "can_food_unsealed", 1 ], [ "canister_empty", 1 ] ], @@ -111,6 +116,21 @@ "skills_required": [ "gun", 1 ], "time": "20 m", "autolearn": true, + "tools": [ + [ + [ "acr", -1 ], + [ "ar15", -1 ], + [ "h&k416a5", -1 ], + [ "m249", -1 ], + [ "m27iar", -1 ], + [ "m4a1", -1 ], + [ "scar_l", -1 ], + [ "sig552", -1 ], + [ "surv_carbine_223", -1 ] + ], + [ [ "small_repairkit", 10 ], [ "large_repairkit", 5 ] ] + ], + "using": [ [ "223_casehead", 1 ] ], "qualities": [ { "id": "SAW_M", "level": 1 }, { "id": "HAMMER", "level": 1 }, { "id": "SCREW_FINE", "level": 1 } ], "components": [ [ [ "sheet_metal_small", 1 ] ], [ [ "spring", 1 ] ], [ [ "duct_tape", 40 ] ] ] }, @@ -127,32 +147,6 @@ "using": [ [ "sewing_standard", 40 ] ], "components": [ [ [ "rag", 2 ] ] ] }, - { - "result": "smg_22_mag", - "type": "recipe", - "category": "CC_WEAPON", - "subcategory": "CSC_WEAPON_MAGAZINES", - "skill_used": "fabrication", - "difficulty": 2, - "skills_required": [ "gun", 1 ], - "time": "20 m", - "autolearn": true, - "qualities": [ { "id": "SAW_M", "level": 1 }, { "id": "HAMMER", "level": 1 }, { "id": "SCREW_FINE", "level": 1 } ], - "components": [ [ [ "sheet_metal_small", 1 ] ], [ [ "spring", 1 ] ], [ [ "duct_tape", 40 ] ] ] - }, - { - "result": "smg_38_mag", - "type": "recipe", - "category": "CC_WEAPON", - "subcategory": "CSC_WEAPON_MAGAZINES", - "skill_used": "fabrication", - "difficulty": 2, - "skills_required": [ "gun", 1 ], - "time": "20 m", - "autolearn": true, - "qualities": [ { "id": "SAW_M", "level": 1 }, { "id": "HAMMER", "level": 1 }, { "id": "SCREW_FINE", "level": 1 } ], - "components": [ [ [ "sheet_metal_small", 1 ] ], [ [ "spring", 1 ] ], [ [ "duct_tape", 40 ] ] ] - }, { "result": "smg_40_mag", "type": "recipe", @@ -163,6 +157,8 @@ "skills_required": [ "gun", 1 ], "time": "20 m", "autolearn": true, + "tools": [ [ [ "smg_40", -1 ] ] ], + "using": [ [ "40_casehead", 1 ] ], "qualities": [ { "id": "SAW_M", "level": 1 }, { "id": "HAMMER", "level": 1 }, { "id": "SCREW_FINE", "level": 1 } ], "components": [ [ [ "sheet_metal_small", 1 ] ], [ [ "spring", 1 ] ], [ [ "duct_tape", 40 ] ] ] }, @@ -176,6 +172,8 @@ "skills_required": [ "gun", 1 ], "time": "20 m", "autolearn": true, + "tools": [ [ [ "smg_45", -1 ] ] ], + "using": [ [ "45_casehead", 1 ] ], "qualities": [ { "id": "SAW_M", "level": 1 }, { "id": "HAMMER", "level": 1 }, { "id": "SCREW_FINE", "level": 1 } ], "components": [ [ [ "sheet_metal_small", 1 ] ], [ [ "spring", 1 ] ], [ [ "duct_tape", 40 ] ] ] }, @@ -189,6 +187,8 @@ "skills_required": [ "gun", 1 ], "time": "20 m", "autolearn": true, + "tools": [ [ [ "smg_9mm", -1 ], [ "sten", -1 ] ] ], + "using": [ [ "9mm_casehead", 1 ] ], "qualities": [ { "id": "SAW_M", "level": 1 }, { "id": "HAMMER", "level": 1 }, { "id": "SCREW_FINE", "level": 1 } ], "components": [ [ [ "sheet_metal_small", 1 ] ], [ [ "spring", 1 ] ], [ [ "duct_tape", 40 ] ] ] }, diff --git a/data/json/requirements/ammo.json b/data/json/requirements/ammo.json index 73c2e1f9f1413..bfdc52c49ec7c 100644 --- a/data/json/requirements/ammo.json +++ b/data/json/requirements/ammo.json @@ -69,5 +69,135 @@ "type": "requirement", "//": "Components required for .300 AAC Blackout ammo", "components": [ [ [ "300blk_casing", 1 ] ], [ [ "smrifle_primer", 1 ] ] ] + }, + { + "id": "22_casehead", + "type": "requirement", + "//": "References needed for boltfaces and magazines using .22 lr or derivatives", + "tools": [ + [ + [ "22_casing", -1 ], + [ "22_casing_new", -1 ], + [ "22_fmj", -1 ], + [ "22_lr", -1 ], + [ "22_cb", -1 ], + [ "22_ratshot", -1 ], + [ "reloaded_22_lr", -1 ], + [ "reloaded_22_fmj", -1 ] + ] + ] + }, + { + "id": "223_casehead", + "type": "requirement", + "//": "References needed for boltfaces and magazines using .223 or derivatives", + "tools": [ + [ + [ "300blk_casing", -1 ], + [ "223_casing", -1 ], + [ "223", -1 ], + [ "556", -1 ], + [ "556_incendiary", -1 ], + [ "reloaded_223", -1 ], + [ "reloaded_556", -1 ], + [ "reloaded_556_incendiary", -1 ], + [ "300blk", -1 ], + [ "300blk_ss", -1 ], + [ "reloaded_300blk", -1 ] + ] + ] + }, + { + "id": "9mm_casehead", + "type": "requirement", + "//": "References needed for boltfaces and magazines using 9mm or derivatives", + "tools": [ + [ + [ "9mm_casing", -1 ], + [ "9mm", -1 ], + [ "9mmfmj", -1 ], + [ "9mmP", -1 ], + [ "9mmP2", -1 ], + [ "bp_9mm", -1 ], + [ "bp_9mmfmj", -1 ], + [ "reloaded_9mm", -1 ], + [ "reloaded_9mmfmj", -1 ], + [ "reloaded_9mmP", -1 ], + [ "reloaded_9mmP2", -1 ] + ] + ] + }, + { + "id": "40_casehead", + "type": "requirement", + "//": "References needed for boltfaces and magazines using .40sw or derivatives", + "tools": [ + [ + [ "357sig_casing", -1 ], + [ "40_casing", -1 ], + [ "40fmj", -1 ], + [ "40sw", -1 ], + [ "reloaded_40fmj", -1 ], + [ "reloaded_40sw", -1 ], + [ "357sig_fmj", -1 ], + [ "357sig_jhp", -1 ], + [ "reloaded_357sig_fmj", -1 ], + [ "reloaded_357sig_jhp", -1 ] + ] + ] + }, + { + "id": "45_casehead", + "type": "requirement", + "//": "References needed for boltfaces and magazines using .45acp or derivatives", + "tools": [ + [ + [ "45_casing", -1 ], + [ "460_casing", -1 ], + [ "460_fmj", -1 ], + [ "460_rowland", -1 ], + [ "reloaded_460_fmj", -1 ], + [ "reloaded_460_rowland", -1 ], + [ "45_acp", -1 ], + [ "45_jhp", -1 ], + [ "45_super", -1 ], + [ "reloaded_45_acp", -1 ], + [ "reloaded_45_jhp", -1 ], + [ "reloaded_45_super", -1 ] + ] + ] + }, + { + "id": "3006_casehead", + "type": "requirement", + "//": "References needed for boltfaces and magazines using .30-06 or derivatives", + "tools": [ + [ + [ "3006_casing", -1 ], + [ "3006", -1 ], + [ "3006fmj", -1 ], + [ "3006_incendiary", -1 ], + [ "reloaded_3006", -1 ], + [ "reloaded_3006fmj", -1 ], + [ "reloaded_3006_incendiary", -1 ], + [ "270win_casing", -1 ], + [ "270win_jsp", -1 ], + [ "reloaded_270win_jsp", -1 ] + ] + ] + }, + { + "id": "762_casehead", + "type": "requirement", + "//": "References needed for boltfaces and magazines using 7.62x39 or derivatives", + "tools": [ + [ [ "762_casing", -1 ], [ "762_m43", -1 ], [ "762_m87", -1 ], [ "reloaded_762_m43", -1 ], [ "reloaded_762_m87", -1 ] ] + ] + }, + { + "id": "762R_casehead", + "type": "requirement", + "//": "References needed for boltfaces and magazines using 7.62x54R or derivatives", + "tools": [ [ [ "762R_casing", -1 ], [ "762_54R", -1 ], [ "reloaded_762_54R", -1 ] ] ] } ] diff --git a/data/json/snippets/snippets.json b/data/json/snippets/snippets.json index 19c0a75872cb8..8e2dd6cb356d0 100644 --- a/data/json/snippets/snippets.json +++ b/data/json/snippets/snippets.json @@ -18,9 +18,7 @@ "This is an advertisement for Robert's Universal Robots brand labor-bots. It shows a picture of a robot carrying a heavy pallet of bricks. In the background a human foreman is sleeping on the job, with his hardhat pulled down over his eyes. The captions read: \"It's a tough job, so why should you have to do it?\" and \"R.U.R. Technology you can Trust.\"", "This is an advertisement for Robert's Universal Robots brand labor-bots. It shows a picture of a factory floor run entirely by robots. In the background a man in a suit reads a newspaper that shows soaring stock prices. The caption reads: \"R.U.R. Technology you can Trust.\"", "This is an advertisement for Sybil's Cyber Boutique. It shows a picture of several bikini-clad female doctors removing the skin from man's face. The patient is strapped to a chair but cheerfully gives two thumbs up. The caption reads: \"Free Plastic Surgery While You Wait!\"", - "This is an advertisement for Sybil's Cyber Boutique. It shows a picture of several bikini-clad nurses giving liquid medicine to a delighted patient, who uses a fingertip needle to suck it in into his veins. Outside the window two shadow figures using the same fingertip needles to absorb something less resembling medicine. The caption reads: \"Why use old IV when you can have Intravenous Needle CBM!\"", "This is an advertisement for Sybil's Cyber Boutique. It shows a picture of a nerdy looking man surrounded by a group of admiring women. In the foreground a blood-drenched doctor gives an exaggerated wink and two thumbs up. The caption reads: \"Holiday sales! Get the package deals!\"", - "This is an advertisement for Sybil's Cyber Boutique. It shows a picture of a man flexing shiny cybernetic arms in front of a mirror. He is flanked by two scantily clad nurses who hold bloody chainsaws and give approving thumbs up. In the background feral dogs gnaw on the man's discarded former limbs. The caption reads: \"Spring Cleaning Sale! 20% off!\"", "This is an advertisement for Sybil's Cyber Boutique. It shows a picture of a man carrying a somewhat confused horse on his shoulders. He is flanked by two scantily clad nurses who hold bloody chainsaws and give approving thumbs up. His bulging knees and elbows are stitched and seem to be the source of his ability. The caption reads: \"Brand new! Horse power at hand!\"", "This is an advertisement for Sybil's Cyber Boutique. It shows a picture of a man smiling while being relentlessly punched by a boxer. He doesn't even sweat as punches have no effect on him. Two scantily clad nurses give approving thumbs up from the background. The caption reads: \"Bouncy as never before! Absorb those shocks!\"", "This is an advertisement for Rivtech brand handguns. It shows a picture of a well armed couple in business suits with matching handguns facing down a legion of villainous looking characters. The caption reads: \"Protect yourself with the Rivtech caseless automagnum!\"", @@ -35,11 +33,13 @@ "This is a propaganda poster showing the Northrop Dispatch's military variant. It depicts the iconic dark green, arachnoid dispatch, standing before a fence and facing away from the camera as blurring machines rush forward from its back towards black silhouettes menacing on the horizon. It reads: \"WE ARE HERE TO PROTECT YOU.\"", "This is an advertisement for Leadworks LLC handguns. It shows a picture of a bionic police officer assisting a young couple, who were being attacked by a gang of ruffians. The caption reads: \"You don't have to void your warranty or wear out your thumb to achieve felon-stopping firepower. The L39B, tried and true by our fine cyborgs in blue, is available in .45 ACP for that extra punch, and we offer semiautomatic (but equally robust!) versions for the civilian market. Leadworks, LLC.\"", "This is an advertisement for Leadworks LLC modular weapons. It shows a picture of an overworked-yet-grateful police sergeant assembling a sleek rifle, with similar-looking weapons racked neatly behind her. The caption reads: \"Leadworks is proud to offer the L523 modular weapon system. No more must armorers stock and maintain stacks and stacks of rifles, carbines, and squad support weapons, juggling multiple incompatible ammunition types! Just procure a base unit for every trooper, and use our lightweight and portable conversion kits to swap from house-to-house CQB carbine to rooftop-patrol DSR, safely and cleanly!\"", - "This is a public notice from the Centers for Disease Control. Its message, repeated in several languages, reads: Due to the rising threat of so-called \"Green Fever\" the CDC would like to remind the public to cover your nose and mouth with a tissue when you cough or sneeze and wash your hands frequently with soap and water. In light of recent events, the CDC also recommends an annual flu vaccine for everyone 6 months of age and older.", - "This is a public message from the Federal Emergency Management Agency. Its message, repeated in several languages, reads: STAY IN YOUR HOMES! The US government is taking steps to halt the current epidemic of \"Green Fever\" and help is currently on its way to afflicted areas. In the name of public safety you are hereby ordered to remain in your homes until evacuated to a treatment camp by authorized agents of the United States military. Thank you for your compliance.", - "This is a public warning from an unnamed source. Its rambling message, poorly-photocopied onto both sides of the page, reads: Don't believe the lies! The Army is rounding up people in death camps while the Green Fever spreads like wildfire. Do not believe what the mainstream news-media is reporting. All official evacuation points are death-traps. Secure supplies and escape the cities while there is still time.", + "This is a public notice from the Centers for Disease Control. Its message, repeated in several languages, reads: Due to the recent outbreak of the A H3N2 flu strain, the CDC would like to remind the public to cover your nose and mouth with a tissue when you cough or sneeze and wash your hands frequently with soap and water. The CDC also recommends an annual flu vaccine for everyone 6 months of age and older, which can be found at your local doctor's office or pharmacy.", + "This is a public alert from the Centers for Disease Control. Its message, repeated in several languages, reads: PUBLIC HEALTH ALERT: Due to recent events, the CDC is issuing a warning to avoid public areas and spaces. An unknown biological contaminant is suspected to be affecting citizens, possibly an unexpected mutation in the A H3N2 flu strain. The CDC would like to remind the public to cover your nose and mouth when sneezing, wash your hands frequently, and recieve an up-to-date flu shot if possible. Boiling water is recommended until further notice.", + "This is a public alert from the Federal Emergency Management Agency. Its message, repeated in several languages, reads: STAY IN YOUR HOMES! All residents of the New England Disaster Area are advised to shelter in place wherever possible. The United States Armed Forces are working to contain the area. If there is a nearby evacuation shelter you can get to safely, you are recommended to do so. Otherwise, stay in your homes until authorized personnel evacuate you to a secured facility. Thank you for your compliance.", + "This is a public alert from the Federal Emergency Management Agency. Its message, repeated in several languages, consists of a list of towns serving as major evacuation points from the New England Disaster Area. Someone has scribbled off most of the town names, and scrawled \"OVERRUN\" next to each one, with the exception of the Tacoma evacuation point.", + "This is a public warning from an unnamed source. Its rambling message, poorly-photocopied onto both sides of the page, reads: Don't believe the lies! The Army is rounding up people in death camps and executing them at mass graves. They cannot stop this. Do not believe what the mainstream news-media is reporting. All official evacuation points are death-traps. Secure supplies and escape the cities while there is still time.", "This is a public message from an unnamed source. Its message, photocopied from a scrawled handwritten copy, reads: REPENT YOUR SINS O BABYLON FOR THE TIME OF HIS JUDGEMENT IS NIGH! LOOK UPON YOUR DESTRUCTION AND KNOW THAT IT IS JUST! YOU WILL BE DIVIDED FATHER AGAINST SON AND MOTHER AGAINST CHILD UNTO THE VERY LAST SINNER!", - "This is a public warning from the United States Army. Its brief message, repeated in several languages, reads: The President of the United States has declared unilateral martial law affecting the entire nation. Shelter in place until evacuated to an appropriate emergency management camp by authorized military personnel. This curfew will remain in effect until further notice. Stay indoors. Violators will be shot on sight.", + "This is a public warning from the Federal Government. Its brief message, repeated in several languages, reads: The President of the United States has declared unilateral martial law to be in effect for the 48 contiguous states in response to the ongoing national crisis. Continue to shelter in place until evacuated to an appropriate emergency management camp by authorized military personnel. A 24-hour curfew has been established. This curfew will remain in effect until further notice. Stay indoors. Violators will be shot on sight.", "This is an advertisement for Rivtech's 'ATOMIC POWER THIRST' energy drink. While intended to advertise a new flavor called Isotope RU-238 'FRUIT', most of the text is dedicated to a long list of possible side effects: anxiety, insomnia, severe insomnia, dizziness, tremors, nausea, headache, vomiting, delusions, hallucinations, rhabdomyolysis, internal burns, thyroid cancer, extensive internal bleeding, upper gastrointestinal bleeding, diarrhea, cardiac dysrhythmia, cardiovascular collapse, suicidal ideation, seizures, ataxia, amnesia, mania, stroke, neurodegeneration, malignalitaloptereosis, necrotizing fasciitis, recurrent flu, and pinkeye.", "This is a soda advertisement. On the front is a picture of a happy couple on a beach watching the sun set. Between them are bottles of soda. The poster reads, \"Cascade Cola, for those special moments\" in bold white letters.", "This is a flier for a fast food chain. In it, a man is placing an order with an attractive woman wearing a bright green shirt in the window with two happy children sitting in the back seat. The flier reads \"Burgers, fries, and a Smile.\" Down in one corner is a company logo.", @@ -57,7 +57,6 @@ "This is a poster advertising a underground bunker. The poster shows a nuclear bomb wiping out a city while a family huddles safely underground. There a slogan \"Concerned about enemy attack? Want to protect your family? Join the VAULT program today.\" which is written in the middle. However, there seems to be no information about *how* one might do so.", "This is a flier for Red Ryder BBGuns. On it a child is pulling a shining red wagon with a cooked pheasant on it and a wooden rifle over one shoulder. The child has a dog trailing beside him and a satisfied look on his face. The caption reads \"When you chose Red Ryder, you invested in the American Dream. You invested in our Independence.\"", "This is an old flier for a movie from the 30s. A tan man with slick black hair and muscles bulging through his offwhite suit is clasping a woman to his hip with one hand, and the woman is wearing a black leather dress. With her hips splayed, she is holding a pistol in one hand and starring directly out of the advert. The caption reads \"Witness the rebirth of New Noir with 'Jersey Shore Blues'. Starring Jenifer Languiz as 'Snookie'!\"", - "\"Have you found (y)our savior today? Atom is here for you, it is inside you!\" This flier marked the rising popularity of the Atom Cult, a religion in which the essence of life is discovered through meticulous inward study and pious donations.", "\"Joe's Diner; 1/2 pound of meat, 3 toppings, 'your choice', all with a side of freedom fries and a BIG Gulp size pop.\"", "This is an advertisement for the Wink & Nod brand Soporific Induction CBM. It shows a picture of a woman sleeping on a bed of nails with a satisfied smile on her face. The caption reads: \"Catch Zs with ease, wherever you please!\"", "This is a leaflet about autoclaving procedure. One sentence catches your attention \"/!\\Always place your tools into an autoclave pouch before autoclaving./!\\\"", @@ -80,7 +79,6 @@ "\"this demon thing came after me it got me good i shot it but i dont know if ill make it\"", "\"DANNY IF YOU READ THIS THIS IS CLARA WE'RE ALL OKAY AND WE'RE HEADING TO THE RIVER. A BOAT SAID THEY WERE DOCKED NEARBY.\"", "\"When I think of all the dead people I get mad, because I was supposed to be the next big leader. WHERES MY CHANCE!??\"", - "\"You know they got a machine that can change the weather now? You put in a bunch o'numbers and the whole thing funks around!\"", "\"A man in a black robe came up to me, said he wanted to make a deal...\"", "\"Cha-cha-cha-chia! Saw a woman today, with fungus coming out her head like hair tendrils.\"", "\"If only I had had more time with that Autodoc I could have saved them! But with that damn chip in their brain those poor cyborg wil never be human again...\"", @@ -89,20 +87,16 @@ "\"I kept shooting with my handgun, but I never got any better!\"", "\"ITS OKEY GUYS! I BARRYED A TIME CAPSUL IN MY BACKYARD! I PUT IN SOME HOEHOES.\"", "\"I got my tinfoil hat on. Good thing too, cause this monster was starrin at me kinda funny, trying to freeze my mind in place.\"", - "\"You want my advice? Smoke Crack, It gets shit done.\"", - "\"The raindrops keep falling on my head, the acid ensured my eyes would soon be bleedin red...\"", + "\"You want my advice? Smoke crack, it gets shit done.\"", "\"ALWAYS WITH THE EFFICIENCY GUYS; YOURE ALWAYS WORKING TO GO HOME TO PAY RENT TO SLEEP TO WAKE UP TO WORK AGAIN. STOP\"", "\"IM OFF TO THUNDERDOME, BYE SUCKERS.\"", "\"If you get a parasite, take some sand and some vodka. Rub the sand into the afflicted area, real good too; like you're washing your hair. Then rinse with vodka.\"", "\"I put my toilet water into a gastank. Then I poured it into a glass cup. Then I drank it without vomiting my insides back into the toilet.\"", "\"This isn't real this is a test to turn you into a Manchurian Candidate!\"", - "\"Real Men do it with STYLE. SUPASTYLIN.\"", "\"They're all hiding on an oil rig, I heard it myself over the AM airwaves. They think they're the nobles of the 21st century, the prigs.\"", - "The Green Fever shall purge the land for His Chosen children. I have seen His black fire shining in the eyes of the afflicted and eagerly await the day He shall consume us all. Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn.", "\"Some of 'em are big. Real big. Don't stick around, I saw my mate get fucking torn in half!\"", "\"po p y fl ow er s don t ea at them\"", "\"Some guy is walking through the horde without a scratch. Please tell me they're docile now. Please fucking tell me.\"", - "\"Swamp water tastes good! An\"", "\"Why are all the lawnmowers broken?!\"", "\"Some of the bridges, they're right next to each other, right? If you see something up ahead one of those, just careen through to the other side. My van was long enough to bridge right across!\"", "\"BURN BURN BURN BURN BURN ALL BURN ALL BURN ALL BURN\"", @@ -111,7 +105,6 @@ "\"Am I the last one alive?\"", "\"Boyfriend stole my pistol while I was asleep. I locked him in the bathroom and set the house on fire. At least he attracted their attention.\"", "\"I get air conditioners, but... this whole laboratory is frozen to ice!\"", - "\"Fuck aerodynamics, I want another engine!\"", "\"A wood ax works pretty well against them. So does a machete, but you can't cut down a tree.\"", "\"Why would you hide in a farm? Sure, it's isolated, but if they know where you are, you don't exactly have cover on all sides.\"", "\"Imagine if this spread to, like, Australia. Zombie kangaroos. Haha...\"", @@ -125,16 +118,15 @@ "\"It doesn't matter how you die. You're gonna turn into one of them.\"", "\"WHY DO ALL THE DEAD CHILDREN GO TO SCHOOL\"", "\"Don't keep your goddamn casings! They'll just weigh you down.\"", - "There is a splotch of blood on it. \"blood of the zombie king\"", "\"Local auto shop is full of the things. And to think I worked with them on repairing cars... now they're just... fucking corpses.\"", "\"DON'T EAT THE SLIME DON'T EAT THE SLIME DON'T EAT THE SLIME\"", "\"I used to be human. But... my arms... they are like tentacles. I slither along akin to a snail and I shed my feathers every day.\"", + "\"Killed a giant worm thing, but now I'm only three feet tall. Should've just left the damn worm alone, now none of my clothes fit!\"", "\"I don't have enough time to double tap. You don't either.\"", "\"PINK TALL ONES RUN RUN RUN RUN RUN\"", "\"Are they still human inside?\"", "\"the eye it watches me it follows me everywhere help\"", "\"tHE Portal it's so COld\"", - "\"I can wear three backpacks! Fuck, I'm good.\"", "\"They build modern bullets fuckin crazy. Set some on fire and they all goes like a lil grenade. Need kindling first.\"", "\"GOD CAN'T SAVE US\"", "\"SHOOT YOURSELF, LET IT END QUICKLY\"", @@ -144,7 +136,6 @@ "\"I am one with the plants.\"", "\"Broadsword! Yeah!\"", "\"If you see a trail of dirt getting displaced in your direction... run. Run for your life.\"", - "\"Don't fall down a nuclear silo, they left 'em all open\"", "\"DINT ATE THE MUSHROM\"", "\"Libraries are useless after the apocalypse.\"", "\"I swear to God I've seen these plant things before! In a book, or something! I swear...\"", @@ -152,21 +143,18 @@ "\"Make sure your car is REALLY stopped before you get out.\"", "\"I found some kind of stone pyramid with spikes. I feel... I feel like I'm being watched.\"", "\"Why would you ever hide in a damn gun store? The owner... he was a moron alright.\"", - "\"This apocalypse will be good for the US financial crisis\"", "\"THEY DON'T feel ANYTHING\"", "\"What was XEDRA doing, anyway?\"", "\"Is that one pharmaceutical company gonna come out with a, like, cure for this anytime soon?\"", "\"THE MARLEY WAS RIGHT\"", - "\"I... I just put a muffler onto a... nail gun.\"", "\"Squeeze some ammonia into zombie flesh and hold it tight. You smell like one of them! I think.\"", "\"I thought my damn terminal cancer was bad enough... now the dead are rising?!\"", "\"THE GOO IS IN THE WATER DON'T DRINK WATER\"", "\"Don't let the ember go out please don't go out I need you precious fire.\"", - "\"What's with these pits... with, like, sli\"", "\"Everyone used their gas to get to another town... but it's the same story everywhere.\"", - "\"The gas the gas the green gas spreads forever\"", + "\"There's still an evacuation point at Concord, spread the word.\"", + "\"STAY AWAY FROM CONCORD\"", "\"Most things can be taken out with a shotgun. More things can be taken out with a grenade. Imagine what a mini-nuke does.\"", - "\"My friend gave me lit dynamite, but it hasn't exploded yet... I don't think that's supposed to happen. God help us.\"", "\"Come to the bar if you see this, let's re-enact a zombie movie, friends.\"", "\"They are NOT slow! They are NEVER slow!\"", "\"I had a phobia of bees BEFORE they grew to enormous sizes.\"", @@ -176,33 +164,26 @@ "\"Crawled in through the vents. Whole office building is infested.\"", "\"Don't shoot the people who get bit! It's OK! Death is the only thing that makes you turn!\"", "\"Zombies, walkers, dead ones, undead, reanimated, zed, animata, biters. Did I miss any?\"", - "\"I left a stash of rechargeable batteries in my safe and apparently the goddamn zombie Tooth Fairy has taken them all.\"", "\"All I've got is this keg of beer and an appetite. Come at me, apocalypse!\"", "\"My cousin says that murder nowadays is just a war crime. War for what, I don't know, since the undead seem to be rebels without a cause.\"", "\"SWAMPS RUN SWAMPS NO SWAMPS RUN\"", - "\"dog bit off my legs, magical hospital make all better\"", "\"They said a walking cane was a useless weapon... but then I hit one of them with it.\"", "\"River water around these parts is extremely safe. Probably more safe than the damn tap water at this point.\"", "\"DON't bomB THe PORtals it MAKES iT WORSE\"", "\"No wonder all the camps got overrun, they kept a goddamn zombie test subject! Each and every one of 'em!\"", "\"I just realized how damn demented those fliers are.\"", "\"I propose a new currency: 9mm.\"", - "\"Something wrong, with cars..., ram, and,. my speedometer read six hundred.,.thousand can't feel lungs,\"", "\"My skin is crawling and I teleport every few minutes... what is going o\"", "\"You can't see them through the smoke but they can't either.\"", "\"There's gotta be a better use of all this rebar...\"", "\"met schoolhouse of people, all crazy and mad they were, ate killed all of them, yum\"", "\"STAY AWAY FROM THE BIG ONES IN THE FOREST\"", "\"got into a prison with a halligan bar. makes me wonder how they kept prisoners inside\"", - "\"Shopping carts become a lot more efficient when you plate-weld a trunk to them. Crate on wheels!\"", - "\"telportfd itont wall, amr gone\"", "\"This thing isn't a car any more. It's just a fucking mountain of metal on wheels, which I live in.\"", "\"Anyone else seen those really... SQUARE-looking towns? I don't think they're normal.\"", - "\"BOSTON IS FUNGUS DON'T GO THERE\"", "\"big z threw me on top of the building, legs broken but at least im safe for a few more minutes\"", "\"I'm starting to feel bad about disabling all these turrets and stealing their ammunition.\"", "\"Make sure you strip the house for all available resources-- tubes, pipes, ceramics, sheets, strings, and more\"", - "\"there was a giant shell in my backyard for a few weeks. one day a squid guy popped out of it and said his name was steve\"", "\"FUCK FAUX-MUTANTS, BEING 'EXTREMELY THIRSTY' DOES NOT COUNT\"", "\"There's nothing wrong with eating people if you HAVE to. I mean, I only did it because I didn't want to waste my potato chips!\"", "\"all these robotic police really take the piss out of kops\"", @@ -211,17 +192,15 @@ "\"Thank You RivTech. Thank You For Good Coffee. Will Always Stay Awake For You Rivtech.\"", "\"See, now I'm just not sure where I'm putting all these storage batteries in my body!\"", "\"dont try to leave they will shoot you\"", - "\"herbs + salt + cooking oil + coffee powder + ammonia = a meal, right?\"", - "\"HA! YOU THOUGHT I WOULD LEAVE A USEFUL NOTE?! SCREW YOU! GO DIE IN A BLOB PIT!\"", "\"I'd like to thank my high-school culinary arts class for teaching me how to make RDX and mutagenic serum.\"", "\"Makayla Sanchez burned down my fucking house\"", "\"he calls himself the 'man with the hands', don't approach\"", "\"So... what happens if the military rescues us? We're all freaks by now, right? How the fuck are we gonna go back to real life?\"", "\"Not sure if my companion WANTED to turn into a bird, but I was the one giving her the serum, and I saved her life! That's fair, right?\"", - "\"what's a resonance cascade? can't be that bad, maybe i'll get some cool l##/###\"", "\"I've never been very confident, is that why my shots keep missing?\"", "\"FIRE BAD. NOW NAKED. PLEASE HELP.\"", "\"Heard of a place up in Maine where people have their shit together. Hundreds of people, defense, food and shelter... let's go raid it, guys!\"", + "\"KASHWAK: NO-FO\"", "\"The whispering fog is taking me in like a blanket. I'm warm now. I'm finally\"", "\"got a video recording of hour one when the portals were still up. pretty cool\"", "\"Stuck here. Zombies outside. Friends were outside too, now they're part of zombies. Need to be quiet\"", @@ -230,37 +209,32 @@ "\"waded through 14 miles of sewage for playboy magazine, wasnt worth it\"", "\"I'm coming back for this note in twelve hours. If I don't, take all my shit!\"", "\"all my friends died when they came near me. there's nothing funny about that\"", - "\"Wow, this sinkhole is really comfortable!\"", "\"DOG NOT REAL DOG\"", "\"This is all just a dream, right??! I'M GOING TO WAKE UP, SHE'S GOING TO BE OK\"", "\"wek ik spak\"", "\"IT'S BURIED! THE TEMPLE IS BURIED!\"", "\"If I had a dollar for every cash card I've found, I'd have more money than is on these stupid things!\"", "\"can never have enough kevlar. basically just live in a kevlar turtle shell.\"", - "\"Wow, I haven't had to piss in weeks!\"", "\"MY GLITTERING SNAKE COMPELS YOU! OBEY!\"", "\"can sunstasin self frorever off fof my funggnaloid babiues oout fo yme arms eat themm up eatbtb my chidlldren\"", "\"Gonna settle down one day. Nice big orchard, couple of friends/future family to spend time with, and my army of zlaves to guard the place.\"", - "\"got a video recording of hour one when the portals were still up. pretty cool\"", "\"a ctulaly don t mi nd t he cold it s f i ne in h ere nn o problem\"", "\"tried to shoot myself but the nanobots fixed it, fucked up the controls, now i can't turn them off i just want it to be over\"", "\"Tried wearing dead zombie clothes, but they still knew I was alive! It's like they're a hivemind, man!\"", "\"riddle. what's 1/4 feathers, 1/4 scales, 1/4 metal, and 1/4 flesh? answer: sorry, but you should know this one.\"", "\"For anyone that's reading this, I just want to confirm (FROM AN UNBIASED SOURCE) that it was NOT the scientists' fault.\"", - "\"traveled with a few friends after the thing started. mostly stuck to bike paths and eaten fruit and mushroomdhfhghghhhh\"", "\"We're the eagle-eyes in the sky! Just two mutant avians in our helicopter! Filming the Cataclysm! Check us out on any working electronics!\"", - "\"My friend was getting eaten. Started ranting about how he had 70 HP on his head, and that the zombie shouldn't penetrate his armor... poor guy. Bad die roll, I guess.\"", "\"WE'RE GOING TO SAIL TO CANADA, BITCHES!\"", "\"Anyone hear about that guy who tried to sail his family to Canada? What a moron, right?\"", "\"recently canadian border has gotten more dangerous don't go there\"", "\"Hey, what happened to my dad's airboat?!\"", "\"Reading is good! Never stop reading. Read EVERYTHING.\"", "\"I'm gonna be honest here, I'm really gonna die soon so I dont want to gt forgnottedn ples dont forntget me y nrmmy name is h@@hbhbh\"", - "\"It wasn't Russia or China, guys. It was me. This whole apocalypse is my fault. You can just call me... Darkling.\"", "\"all it takes to seal a wound is a sawblade and a match! trust me\"", "\"I wonder what's in this sarcophagus? Maybe it's a real sarcophagus. Maybe there's a big guy named God under here.\"", "\"these hulks aint so incredible when ya got .50\"", - "\"Got my legs dissected. It's OK, at least I have my dog! Her legs were also dissected, but that's OK, we're gonna be OK...\"", + "\"WBLF 970 went off-air three days ago. There's nobody left on the radio. Might as well throw this thing away...\"", + "\"I've heard it's safer across the Mississippi. Going to start driving today. If you're reading this, pray for me\"", "\"Mi-go is friend! Go with Mi-go to friend dimension! On the Friend Team!!\"", "\"We have Landed our Comet. The Sky is Ablaze.\"", "\"Last one standing. It's good feeling. I win. I win I win I win I win I win\"", @@ -272,18 +246,16 @@ "\"Renting out my rat tunnels for 50 9mm rounds a night. I dug them with my own claws, so you know they're the best.\"", "\"Anyone wanna listen to some music at full volume and shoot the Zs that approach? You pick the tunes if I get some ammo.\"", "\"Lots of new easy ways to burn calories now. Fighting aminata, managing the fields, running with my wings buzzing, and more.\"", - "\"lotta dead mothers\"", "\"FLAMING SWORD HUMANE. CAUTERIZES WOUNDS. SURGICAL.\"", "\"knife screams it screams i cant breathe so scared help me please help\"", "\"when it started, we could still hope The Man was gonna save us...\"", "\"Hey, Ted. Alexander and Cass and I are heading to Z-Mobile for the last of the meth. Keep the lizard fetus fed for us, OK?\"", "\"i say we call the material from melting down cars and dead robots 'massachusetite' or 'vermontsteel' or 'connecticut composite'\"", "\"Sometimes what you need when you're infected, bleeding, sick and hungover is a J and some chips.\"", - "\"I am nothing without my supertank and storage megastructure.\"", + "\"This has to be China's fault. Seriously, why is nobody suspecting the people we're having a cold war with! This is an invasion! These aren't zombies, it's just camoflauge! WAKE UP, SHEEPLE!\"", "\"Hahahahaa stupid fuck in his mansion, with his plate armor and big axe. Guy never swung the thing in his life. Can't block bullets, dipshit\"", "\"I woke up with a dozen bears in a tribe outside the vault. One was covered in red markings, glowing-- speaking.\"", "\"poor guy. watched him from afar with my binocs for months and months. today he died fighting. feels like i knew him even though i never approached.\"", - "\"I hope I don't leave this note in a pawn shop, bank vault, or library... 'cus that would mean I'm dead.\"", "\"ENGLAND DID THIS\"", "\"That little fakkin rat din say anythin till we whacked him with a steel chain! Then 'e just wanted to know if he could buy the chain!\"", "\"tom, adorned with fluid sacs three layers deep, crawls to safety like a slug\"", @@ -291,7 +263,6 @@ "\"Starting today, the hallucinations are my only friends.\"", "\"For sale: zombaby shoes, very filthy\"", "\"Started my own brewery recently. I just need some glass bottles, now! Several thousand! I'm planning way ahead.\"", - "\"We're the eagle-eyes in the sky! We're gonna fly our bird 'copter! Northward! And bomb the military checkpoint! Wish us luck!\"", "\"Heard recently of some radio op who lives in a skyscraper, announcing where those hordes are going. Couldn't find the frequency, though.\"", "\"Woah, bud! Not all cannibals eat meat!\"", "\"ay why aint my bullets fuckin explodin\"", @@ -299,8 +270,6 @@ "\"The fewer people in New England, the stronger we'll become.\"", "\"It all boils down to the Apex Predator.\"", "\"King Jameson ik goner! Thee cyber limbs isk falleng off me body! Stak pyroteknik I heear!\"", - "\"Christian, but have no bible-- the Flying Spaghetti Monster is my god now. For morale's sake...\"", - "\"THE GRANADE DEBUGGED MY SPIDER FRIEND WHERE IS SHE\"", "\"Got my mortar and pestle. Now if I could just find some avocados...\"", "\"saw a girl standing with the mushrooms. spores coming out of slits in her neck. she looked happy.\"", "\"Found some pink berries. Eating them makes bushes into more pink berries. Infinite berry.\"", @@ -318,25 +287,26 @@ "\"Go to every fungus patch you find but WEAR A SUIT. Food there is very very filling. Look for pink berries, blue flowers\"", "\"red blue yellow berry seed sap bloom flowers tower mycus mycus mycus.\"", "\"Husband 30 yrs died in bombs. Mushrooms brought him back. GIVE YOURSELF TO THEm AND THEY WILL HELP YOU\"", - "\"Lisa always was a fan of sports. Thank God these Global Athletics Games in Harran started some time before the outbreak, so she was able to leave New England before it was quarantined. I can only hope there are no zombies, as we do have here, in the city she flew to.\"" + "\"Lisa always was a fan of sports. Thank God these Global Athletics Games in Harran started some time before the outbreak, so she was able to leave New England before it was quarantined. I can only hope there are no zombies, as we do have here, in the city she flew to.\"", + "\"Don't mix powders, them books said. Do Not Mix powders. Didn't listen did I. Blew my goddamn pinky off, near lost my right eye.\"", + "\"followed what toby wrote down. shells looked like theyd hold more, I put in some more. traded most to h raiders for crank. shot my 38 today and it fuckn exploded. low on crank, good as dead, no gun, no toby. headed to montreal real sorry bout the bullets\"" ] }, { "type": "snippet", "category": "newest_news", "text": [ - "LABS BOMBED: In further invasion proof (discounting earlier suggestion of a riot drug) most of New England's scientific labs were bombed simultaneously yesterday. No word yet from the military about who the aggressors are.", - "CHINA INVADES?: Communications were muddled by a large influx of aggressive armed individuals. \"We have this,\" says a local Police Chief. \"We are authorizing our robotic security drones to use lethal force on combative humans.\"", - "INVADERS NOT HUMAN?: An earlier command by the Police Chief has backfired. \"The invaders don't register as human. The securibots turned on us when we tried to fight them. We don't have enough people left to reprogram them.\"", - "INVASION IS GM TROOPS: Reports of invasion by as yet unknown soldiers have been confirmed, and this paper has gained first hand footage proving genetic modification, with examples of extreme strength, speed and natural armor.", - "INVADERS ARE SUPER SOLDIERS: Further proof of mutation, in addition to strength, speed & toughness, we now have reports of foreign enemies who are somehow firing lightning fields, spitting acid and reports of soldiers hidden in mobile clouds of smoke.", - "MILITARY HAS GM TOO - GENERAL: \"We want to reassure the people, these invaders are not the only super-soldiers. Our genemods are more advanced than China's. We were safety-testing, which China obviously skipped disastrously.\"", + "LABS BOMBED: In an apparent foreign attack (contradicting earlier Department of Defense denials of the disaster being caused by Chinese aggression) most of New England's scientific labs were bombed simultaneously yesterday. A statement from the Pentagon has been issued, stating the strikes were the result of Chinese opportunism during the national crisis, and assured that action would be taken in kind against the aggressors.", + "RIOTS GROWING?: Communications were muddled by a large influx of aggressive armed individuals. \"We have this under control,\" says a local police chief. \"We are authorizing our robotic security drones to use lethal force on combative humans.\"", + "RIOTERS NOT HUMAN?: An earlier command by regional police has backfired. \"The hooligans don't register as human.\" says a local police chief. \"The securibots turned on us when we tried to fight them. We don't have enough people left to reprogram them.\"", + "GENETIC MODIFICATIONS?: Eyewitnesses from the New England Disaster Area have claimed that the infected are displaying inhuman qualities. \"I swear to God, one of them was the size of a tree!\", said one panicked survivor. There are also reports of infected with acidic and/or electric properties.", + "SUPER-SOLDIERS DEPLOYED: General Westinghouse released a statement today that elite troops equipped with top-of-the-line experimental combat bionics have been deployed via helicopter into the New England Disaster Area. \"Through the strength of American technology and American soldiers, we will fix this disaster!\"", "PUBLIC SERVICE ANNOUNCEMENT: \"Aid Delayed\". Fighting by the military at the edge of the New England Disaster Area is expected to delay civilian extraction. Civilians will be forced to supply themselves over the next weeks.", - "PUBLIC SERVICE ANNOUNCEMENT: \"New England Cut Off\". New England has been quarantined for the safety of the rest of the USA. No rescue attempts will be funded, it is assumed there are no survivors in the area.", - "LEAVE TO THE EXPERTS -- GENERAL: \"Do not attempt to deal with invaders yourself, our troops have the technology and the training for military action. Loud gunfire may attract more enemy attention than you have ammo!\"", - "TOWNS OCCUPIED TERRITORY: FEMA officials said today \"Do not try to defend your property in towns: invaders use advanced tracking, perhaps scent. Please retreat to your nearest evacuation center outside town and await extraction.\"", - "PUBLIC SERVICE ANNOUNCEMENT: \"Beware Acid Rain\". Several caustic chemicals in the air react with rain clouds to cause deadly acid rain. No word yet on if this is a deliberate tactic or a side effect of the earlier bombings.", - "EDITOR SAYS \"DESTROY THE DEAD\". Recognizable enemy dead left lying in the street may give away militia positions! If you kill an enemy combatant, smash or butcher with a knife until unrecognizable! Screw Geneva! Protect our troops!", + "PUBLIC SERVICE ANNOUNCEMENT: \"New England Cut Off\". New England has been quarantined for the safety of the rest of the USA. No rescue attempts will be funded; it is assumed there are no survivors in the area.", + "LEAVE TO THE EXPERTS -- GENERAL: \"Do not attempt to deal with infected yourself, our troops have the technology and the training for military action. Loud gunfire may attract more hostile attention than you have ammo!\"", + "TOWNS OCCUPIED TERRITORY: FEMA officials said today \"Do not try to defend your property in towns: hostiles use advanced tracking, perhaps scent. Please retreat to your nearest evacuation center outside town and await extraction.\"", + "EDITOR SAYS \"DESTROY THE DEAD\". Recognizable dead left lying in the street may be dangerous! If you kill a hostile, smash or butcher with a knife until unrecognizable! The Geneva Conventions don't apply to civilians!", + "THEY'RE NOT RIOTS!: According to head officials at the Centers for Disease Control, autopsies of rioters in New England have shown massive pathological infection, possibly causing hyper-aggression, disregard for personal harm, and a severely-impaired ability for higher reasoning.", "SOLDIERS SEEN HEADED UNDERGROUND. Rumors abound as eyewitness see troops headed underground near a local salon. Expert sources suggest that the soldiers may be headed to a possible underground bunker.", "A BRIDGE TOO FAR: In a Monday statement, the Department of Defense detailed its plans to deploy strategic minefields on key bridge crossings, in order to quarantine infected regions. \"Military personnel will be on-site to assist any refugees fleeing the infected zones. We urge citizens to comply with all military directives and avoid quarantined areas whenever possible until order can be restored.\"" ] @@ -345,39 +315,36 @@ "type": "snippet", "category": "many_years_old_news", "text": [ - "QUANTUM LEAP: An undisclosed project has yielded results in the form of theoretical teleportation. \"This is just the tip of the iceberg,\" said a source. \"I can't disclose, but this development is the LEAST in this exciting vein!\"", - "HE WILL BLOW YOUR WORLD: Scientist Kevin Granade reveals potential \"Reality Grenade\", loosely related to teleport-tech. He claims could be used to weaken enemies or improve our own troops. \"We're still in Alpha testing,\" says Kevin, \"It really needs a Bugfix\".", + "QUANTUM LEAP: An undisclosed DARPA project has yielded results in the form of theoretical teleportation. \"This is just the tip of the iceberg,\" said an anonymous source. \"I can't disclose, but this development is the LEAST in this exciting vein!\"", "SECURIBOTS: Keeping your home safe, ready the second the alarm goes off... Who needs people?", "ROBOCOP BEATS CRIME: Due to the common usage of Securibots and their ability to respond more rapidly than people, crime is down 54% and dropping. Police chief says \"Don't trip an alarm and you have nothing to worry about\"", "ROBOT RAMPAGE: Three Protesters injured when surrounding a Military base, protesting automated turrets which put guards out of jobs. \"We warned them, turrets will open fire on anyone without a military ID,\" a general said.", - "US IGNORES UN DEMANDS: The US ambassador to the UN today turned down UN requests to begin nuclear disarmament by China, the US and North Korea. \"We have a right to defend ourselves,\" insisted the ambassador. \"We'll back down when they do\".", - "A WHOLE NEW YOU! Augment your world with CBMs! This ad features a man covered in solar panels with a miniature flashlight in the middle of his head.", + "US IGNORES UN DEMANDS: The US ambassador to the UN today turned down UN requests to begin mutual nuclear disarmament of China, the US and North Korea. \"We have a right to defend ourselves,\" insisted the ambassador. \"We'll back down when they do\".", + "A WHOLE NEW YOU! Augment your world with CBMs! This ad features a man covered in glowing tattoos with a miniature flashlight in the middle of his head. He's waving at the reader; all of his fingertips are Allen wrenches.", "The Future... powered by COFFEE! Rivtech brings you the greatest revolution since espresso. Why wait for milk to boil? Have your coffee ready instantly with \"THE POWER OF THE ATOM\"!", "GLAMOPOLITAN! We've got ALL the latest tips! Whether you want to know what the elite are eating, wearing or discussing, Glamopolitan is YOUR magazine! So pick up a copy today and \"Sizzle Like A Star\"!", - "POPULAR MECHANICS: People say mechanics is boring. We say, Prove them Wrong! We've got all the articles that make it interesting to talk about, so you can \"Make Mechanics Popular\"!", + "POPULAR MECHANICS: People say mechanics is boring. We say, prove them wrong! We've got all the articles that make it interesting to talk about, so you can \"Make Mechanics Popular\"!", "CRAFTY CRAFTERS QUARTERLY: Macaroni isn't just for eating anymore! Learn how to make jewelery and art from it as well! We also discuss the correct way to use superglue without gluing your hands together!", - "UNDERGROUND BUNKER? Sources in the government suggest that an underground bunker is being built in a secret location in case of enemy attack. We were unable to get the exact location as our sources mysteriously disappeared shortly after revealing this information.", - "STUDENT MISSING: A high school student vanished yesterday evening in the forest near Wayland. The 17-year-old international student from China (who adopted the anglicized nickname \"Brett\" due to Americans' difficulty pronouncing his given name) was last seen with his friends in the camp. \"Brett said that he was gonna get some firewood but he never came back,\" said his classmate, Jianxiang Wang. The search is underway.", + "UNDERGROUND BUNKER? Sources in the government suggest that underground bunkers are being built in a secret location in case of enemy attack. We were unable to get the exact location as our sources mysteriously disappeared shortly after revealing this information.", + "STUDENT MISSING: A high school student vanished yesterday evening in the forest near Wayland. The 17-year-old international student from China (who adopted the anglicized nickname \"Brett\" due to his classmates' difficulty pronouncing his given name) was last seen with his friends in the camp. \"Brett said that he was gonna get some firewood but he never came back,\" said his classmate, Jianxiang Wang. The search is underway.", "STILL SEARCHING: The search for Brett, the high school student who went missing three days ago, is still ongoing. \"He could have played in the soccer game against Weston High School yesterday,\" Brett's sorrowful teammate said, \"[..] we've never stopped praying.\" Despite the best efforts of the County Search & Rescue, Brett had still not been located at the time of this report.", - "RUMORS DENIED: Allegations that the military had been conducting teleportation experiments in secret just outside Wayland were put to rest during a press conference earlier today. \"I have to clarify that not only have we never done such research,\" said the officer on the press conference, \"teleportation only exists in sci-fi films.\"" + "RUMORS DENIED: Allegations that DARPA had been conducting teleportation experiments in secret just outside Wayland were put to rest during a press conference earlier today. \"I have to clarify that not only have we never done such research,\" said the officer on the press conference, \"teleportation only exists in sci-fi films.\"" ] }, { "type": "snippet", "category": "years_old_news", "text": [ - "GRANADE SEEKS FUNDING FOR GRANADE: This paper has been investigating rumors disgraced former scientist Kevin Granade seeks public funding for so-called reality-warping weapon \"the Granade\", which \"[...]works by patching reality\". Apparently it will be crowdsourced via Kickstarter as \"Project Cataclysm\" ", "GOVERNMENT SCIENCE BOOST: The government has drastically increased defense R&D after UN disarmament demands. \"This not only keeps money in our country, but maintains our lead on China and keeps us defended\", the President said.", "HOME GROWN SCIENCE: Several governors & legislators from the New England region discussed a new regional initiative today, which relaxed laws that limit the distance a hazardous-material laboratory or factory can be from a city. \"This should keep our economy going strong for years to come, with all the military R&D facilities being established,\", one mayor remarked.", "DRIVING ON A WING AND A PRAYER: A New England man has proven it is possible to create a new car from scrap parts using almost nothing but duct tape. When asked why he had done it, his answer was \"Well, I didn't have a welder.\"", "NEVER BE LEFT IN THE DARK! Rivtech Atomic-nightlight uses \"inexhaustible\" plutonium fuel cell, provides light, feeds power back into your grid!", - "A WHOLE NEW YOU! Augment your world with CBMs! This ad features a man covered in solar panels with a miniature flashlight in the middle of his head.", "Sick of FUEL PRICES? Bus stop too far? Get your driving fix from THE SUN! Solar powered electric cars: Silent, Cheap, Powerful.", "Coffee of The Future... RIGHT NOW! No one has really has the time to make great coffee, but now you don't have to! Rivtech gives you inexhaustible ATOMIC power! To make boiling hot coffee the MINUTE you want it! Atomic Coffeemaker.", "GLAMOPOLITAN! We've got ALL the latest tips! Whether you want to know what the elite are eating, wearing or discussing, Glamopolitan is YOUR magazine! So pick up a copy today and \"Sizzle Like A Star\"!", "POPULAR MECHANICS: People say mechanics is boring? We say, Prove them Wrong! We've got all the articles that make it interesting to talk about, so you can \"Make Mechanics Popular\"!", "BIRDHOUSE MONTHLY... This month we look at some Dutch innovations in birdhouse design, and compare with the often confused Scandinavian Birdhouse design. Our article on sheet metal birdhouses will have you riveted!", - "TECHWORLD NEWS: Toy company at the origin of the successful talking doll rebrands and becomes Uncanny. Uncanny plans to bring their expertise to the field of androids. Unconfirmed rumors suggest that Uncanny already got a pretty big command from the government." + "TECHWORLD NEWS: Toy company at the origin of the successful talking doll rebrands and becomes Uncanny. Uncanny plans to bring their expertise to the field of androids. Unconfirmed rumors suggest that Uncanny has already recieved large orders from the government." ] }, { @@ -385,27 +352,28 @@ "category": "one_year_old_news", "text": [ "READY FOR THE WORST: The government has proven it is ready to deal with China's threats. In the event of an actual attack, we have established evacuation centers, within a short distance of most towns.", - "MUTANT COLD: A new cold virus has emerged in the New England area. \"There don't appear to be complications, but many sufferers are developing large amounts of benign tumorous tissue, A pound or more,\" said a doctor", + "MUTANT COLD: A new cold virus has emerged in the New England area. \"There don't appear to be complications, but many sufferers are dealing with sudden muscle weakness and a greater-than-normal amount of lethargy from this virus,\" said a doctor. \"In addition, it's been documented to last up to ten days.\"", "GRAVE BUSINESS: Recent reports show a large spike in thefts from and assaults on funeral homes in the last few weeks. Described as highly strange but not especially dangerous, Homeland Security is \"looking at the connections now.\"", - "SPACE TELEPORTATION - TRUTH OR FICTION? Scientists addressed a growing conspiracy theory today \"The plutonium consumed is massive. We cannot use teleportation to reach aliens, unless they live on some kind of parallel world.\"", + "SPACE TELEPORTATION - TRUTH OR FICTION? Scientists addressed a growing conspiracy theory today \"The plutonium consumed is massive. We could never use teleportation to reach aliens, unless they live on some kind of parallel world.\"", "LASERS - NEXT BIG THING?: Top defense researchers remarked during demonstration of a prototype today: \"We are still working on it, the laser weapon lacks power, but has a technically almost unlimited range,\" one said", - "DRUG USE ON THE RISE: Recent statistic suggest drug use has climbed more than 40% in the last two years. \"People are scared for their jobs, their country, even their life... of course some will turn to drugs,\" said an expert.", + "DRUG USE ON THE RISE: Recent statistic suggest drug use in New England has climbed more than 20% in the last two years. \"People are scared for their jobs, their country, even their life... of course some will turn to drugs,\" said an expert.", "FEELING BLUE? Try \"Greens\" for Magazines! Your local Supermarket! Nothing cheers you up like a good magazine... Unless it's JUNK FOOD! Or why not buy an MP3 PLAYER or a GAME CONSOLE? Chase those blues away at GREENS Supermarket", "GLAMOPOLITAN! We've got ALL the latest tips! Whether you want to know what the elite are eating, wearing or discussing, Glamopolitan is YOUR magazine! So pick up a copy today and \"Sizzle Like A Star\"!", "POPULAR MECHANICS: People say mechanics is boring? We say, Prove them Wrong! We've got all the articles that make it interesting to talk about, so you can \"Make Mechanics Popular\"!", "BIRDHOUSE MONTHLY... Which wood would a woodpecker prefer? This month we discuss hardwood versus soft woods, whether to lacquer, oil or paint, and which type of nails you should use!", - " ...What do you know about surviving in the Wilderness? If you can't make a snare you don't know TRAP! Hunt down a copy of TRAPPERS' LIFE and learn about wildlife!... And how to kill it. This week, a CROSSBOW TRAP!" + " ...What do you know about surviving in the Wilderness? If you can't make a snare you don't know TRAP! Hunt down a copy of TRAPPERS' LIFE and learn about wildlife!... And how to kill it. This week, a CROSSBOW TRAP!", + "NEW LAB OPENS: The H.R. Bennett Research Facility has been officially opened by the Department of Energy. According to Deputy Secretary of Energy Randall Balakrishnan , \"This facility is one of the most state-of-the-art in the world. With the opening of the H.R. Bennett research complex, New England's future is looking brighter than ever.\"" ] }, { "type": "snippet", "category": "months_old_news", "text": [ - "SUPPORT THE COUNTRY THAT SUPPORTS YOU - PRESIDENT: Unexpectedly and unpopularly, the president today instituted a peacetime draft in response to China massing troops. \"We must pray for the best while preparing for the worst.\"", + "SUPPORT THE COUNTRIES THAT SUPPORT YOURS - PRESIDENT: Unexpectedly and unpopularly, the president today suggested the possible institution of a peacetime draft in response to increasing Chinese aggression towards Taiwan and the Philippines. \"We must pray for the best while preparing for the worst. We cannot abandon key allies in the face of Chinese bullying.\"", "EVACS UNSTOCKED: TRUTH OR FICTION? An unidentified government source has suggested that the evacuation centers are unstocked, having \"already accomplished the goal of calming the people\". He later retracted the comment and is unable to be contacted.", "NEW WEAPON UNVEILED: Defense today lifted the lid on a long held secret project. \"We can't discuss the specifics, but it generates a burst of plasma which accurately follows a path of laser-heated air,\" according to a Pentagon official.", "UFO CRASH: TRUTH OR FICTION? One civilian account claims a shining disk appeared in his field. \"It kind of glowed, and I could see a strange gray world through it. Then a shambling hazy purple mushroom came through, man.\"", - "TIME TRAVEL: TRUTH OR FICTION? Leaked federal documents describe the formation of a new federal agency XEDRA, to oversee \"4th Axis technology\" already in use. Expert opinion suggests time-travel or parallel worlds.", + "TIME TRAVEL: TRUTH OR FICTION? Leaked federal documents describe the formation of a new federal agency called XEDRA, to oversee \"4th Axis technology\" already in use. Our expert's opinion suggests time-travel or parallel worlds. The meaning of the acronym is currently unknown.", " ...What do you know about surviving in the Wilderness? If you can't make a snare you don't know TRAP! Hunt down a copy of TRAPPERS' LIFE and learn about wildlife!... And how to kill it. Classic BEAR TRAP returns in this issue!", "HUNTING GOODS! Food prices getting you down? Why not get a crossbow or compound bow and Hunt Your Own!? Our arrows and bolts are completely reusable, so why not hunt animals like Mother Nature intended?" ] @@ -414,10 +382,10 @@ "type": "snippet", "category": "weeks_old_news", "text": [ - "BEWARE UNDEAD PROPAGANDA: Stories about the dead \"rising\" may abet the enemy, a general said today. \"These stories have been tracked to communist sources tied in with the presumably Chinese invasion.\"", - "GENERAL SAYS AVOID BUNKERS: Do not attempt to flee to your nearest military bunker! Understaffed bunkers are defended by turrets, which shoot those without proper registration. Please seek military personnel if you need access.", - "RIOTS CAUSED BY \"NEW DRUG\": Rumors of riots were quelled today. \"These are isolated incidents\" said a local police chief. \"The violence is random and senseless, our current theory is a street drug gone terribly wrong\"", - "ZOMBIE DRUG: TRUTH OR FICTION? A blogger suggests recent riots are a chemical attack by China. \"They are jealous of our cybernetic superiority, they teamed up with Haiti to put hoodoo drugs in the water making people zombies.\"", + "MYTH DEBUNKED: DEAD ARE STAYING DEAD: Stories about the dead rising \"are completely unfounded.\", a general said today. \"It's an obvious hoax by people just looking for five minutes of fame, or to scare people in these uncertain times. After all, remember the clown thing a few years ago?\"", + "GENERAL SAYS AVOID BUNKERS: Do not attempt to flee to your nearest military bunker! Understaffed bunkers are defended by turrets, which will shoot those without proper registration. Please seek military personnel if you need access.", + "VIOLENCE OUTBREAKS CAUSED BY \"NEW DRUG\": Rumors of riots were quelled today. \"These are isolated incidents\" said a local police chief. \"The violence is random and senseless, our current theory is contamination in a new street drug.\"", + "ZOMBIE DRUG? A controversial blogger suggested the recent riots are a chemical attack by China in her latest podcast. \"They're jealous of our cybernetic superiority, so they teamed up with Haiti to put hoodoo drugs in the water making people zombies!\"", "PICKLED MEAT IN A JAR! Just like your grandma used to make! It will last for months or longer, and when you've eaten it, you can refill and seal the jar! Stock your emergency supply TODAY!", "BAGS, BAGS, BAGS! They're very useful things! If we didn't have BAGS, what-would-we-use... to PUT a lot of things in!? (Ad by the \"Play SchoolClothing Co.\")", "GLAMOPOLITAN! We've got ALL the latest tips! Whether you want to know what the elite are eating, wearing or discussing, Glamopolitan is YOUR magazine! So pick up a copy today and \"Sizzle Like A Star\"!", @@ -553,10 +521,9 @@ "We have made a fascinating discovery; by creating a miniature portal with low stability and high power, one can transpose into the 4th dimension and return immediately, but shifted by several meters. Our subjects oscillated so quickly that none were even aware that they had visited lower planes.", "The research team headed by Dr. Isha has produced a concentrated form of mutagen that shows promising results for the treatment of many forms of disease. Testing reveals that it inhibits the body's pain responses while bolstering the immune system and natural regenerative capabilities, though a few troubling behavioral side effects have been reported.", "Our research on teleportation has ground to a halt. For some reason, the creation of a long-range transportation device eludes us, and one can transfer no further than 30 meters.", - "Dr. Heisenstein told us today that director of teleportation department put our competitors - he couldn't exactly remember their names, something like \"Hole Science\" and something related to black mountains - as an example. He said we have reliable information that they both have working teleportation devices, and that they are much more advanced than ours. We should continue our teleportation research no matter the cost if we don't want to be fired.", "I don't know how it happened, but a janitor managed to activate the portal while cleaning the lab, shifting in an assortment of prehistoric fauna. Security was called in immediately but was unable to save the janitor from being torn apart. By the time the confusion settled, all the fauna had been terminated.", "Tests on the prehistoric fauna show extremely close genetic relationships with extant and extinct terranean animals. It might be that the portal had performed a transposition in time, unfortunately the portal device was destroyed when security put down the fauna.", - "An incident occurred in the teleportation lab, wherein a subject managed to teleport into another subject. The latter was completely destroyed from the inside out, while the former sustained little damage. I would like to explore the phenomenon further, but subjects are expensive.", + "An incident occurred in the secondary teleportation lab, wherein a subject managed to teleport into another subject. The latter was completely destroyed from the inside out, while the former sustained little damage. I would like to explore the phenomenon further, but subjects are expensive.", "Test subjects in the teleportation department are showing alarming symptoms. It seems prolonged rapid transposition along the 4th dimension weakens the forces holding one on this plane.", "Catastrophe struck in our teleportation department yesterday. It seems that our test subjects are so detached from this plane that they create occasional tunnels along the 4th dimension, allowing life forms to transfer to this plane. All subjects with prolonged exposure have been terminated.", "Our lifeform extraction program continues to produce samples of specimen XE037. It seems to be a kind of living, semi-sentient primordial ooze, and is the basis of much of the life we have found.", @@ -625,7 +592,6 @@ "This is an emergency broadcast from the National Emergency Alert System. This is not a test. There has been several hundred confirmed cases of an unknown pathogen in the metropolitan area of ...kshhssk... in the last 24 hours. The contagion is believed to be highly transmittable. Residents are advised to remain in their homes at this time. More information will be released as it becomes available.", "This is an emergency broadcast from the National Emergency Alert System. This is not a test. The new pathogen has now been confirmed in several cities across the US. Victims of this disease are known to display highly aggressive, rabies-like behavior, and may be violent to people around them. Avoid contact with infected persons at all costs. If you suspect that you or someone else has contracted the pathogen, contact emergency services immediately.", "This is not a test. Seek immediate shelter. Multiple missile launches have been confirmed to be targeting the ..ksshhsk... Seek immediate shelter. If a community shelter is not available, alternative shelter locations are basements, beneath stairwells, or central rooms with no windows. Ensure that you have sufficient protection from falling debris. Ensure that you have food and water for at least one week. Repeat. Seek immediate shelter.", - "Hello American patriots! This is the national guard, calling you to use your God-Given second amendment rights and buy a firearm! It is obvious that the Chinese, a scourge upon the face of the earth and the stopper of freedom and prosperity, are in a state of aggression. Therefore, we suggest that with the new gun laws introduced, YOU must help in the defense of this bastion of freedom and prosperity. Go to your local gun store and prepare to defend yourself against the red scourge in every way you can!", "zzzzchzzzzchurzzz Are you tired of always losing your dumpy old sunglasses? Tired of having to pay for over price shades just to have them fall to pieces? Well no longer now introducing zchzzzzch- brand Anti-glare compensators for the shade you need in you. Order now for 12 easy payments of $1200.99 and we'll throw in a free order of zpzzzzpzz eye bot.", "This is WSSA-233, broadcasting from . We've barricaded all the doors and windows. There's a ton of them right outside, we're trying to stay quiet. Do not, I repeat, do not approach.", "First Fleet, this is Mount Wheater, we've send a helicopter with a squad to the location of the Guard Outpost. If any survivors of the crash are to reach the outpost, contact the base, we are short on men and one of the big ones has just breached the perimeter. Over.", diff --git a/data/json/techniques.json b/data/json/techniques.json index 37656bf7f827d..58c343cac1726 100644 --- a/data/json/techniques.json +++ b/data/json/techniques.json @@ -750,22 +750,110 @@ }, { "type": "technique", - "id": "tec_karate_rapid", - "name": "quick punch", + "id": "tec_judo_throw", + "name": "Throw", + "messages": [ "You throw %s to the ground", " throws %s to the ground" ], "min_unarmed": 0, "unarmed_allowed": true, - "messages": [ "You quickly punch %s", " quickly punches %s" ], - "mult_bonuses": [ [ "movecost", 0.5 ], [ "damage", "bash", 0.66 ], [ "damage", "cut", 0.66 ], [ "damage", "stab", 0.66 ] ] + "melee_allowed": true, + "unarmed_weapons_allowed": false, + "down_dur": 1, + "mult_bonuses": [ [ "damage", "bash", 1.25 ] ] + }, + { + "type": "technique", + "id": "tec_judo_disarm", + "name": "Disarming Throw", + "messages": [ "You disarm and throw %s", " disarms and throws %s" ], + "min_unarmed": 1, + "unarmed_allowed": true, + "melee_allowed": true, + "unarmed_weapons_allowed": false, + "disarms": true, + "down_dur": 1, + "mult_bonuses": [ [ "damage", "bash", 1.25 ] ] + }, + { + "type": "technique", + "id": "tec_judo_backthrow", + "name": "Back Throw", + "messages": [ "You flip %s head over heels", " flips %s head over heels" ], + "min_unarmed": 2, + "unarmed_allowed": true, + "melee_allowed": true, + "unarmed_weapons_allowed": false, + "crit_tec": true, + "side_switch": true, + "down_dur": 1, + "stun_dur": 1, + "mult_bonuses": [ [ "damage", "bash", 1.5 ] ] + }, + { + "type": "technique", + "id": "tec_judo_break", + "name": "Grab Break", + "messages": [ + "The %s tries to grab you, but you break their feeble grapple!", + "The %s tries to grab , but they break its feeble grapple!" + ], + "min_unarmed": 3, + "unarmed_allowed": true, + "melee_allowed": true, + "defensive": true, + "grab_break": true + }, + { + "type": "technique", + "id": "tec_judo_counter", + "name": "Counter Throw", + "messages": [ "You evade and toss %s to the ground", " evades and tosses %s to the ground" ], + "min_unarmed": 4, + "unarmed_allowed": true, + "melee_allowed": true, + "unarmed_weapons_allowed": false, + "dodge_counter": true, + "down_dur": 1, + "mult_bonuses": [ [ "movecost", 0.0 ] ] + }, + { + "type": "technique", + "id": "tec_karate_counter", + "name": "Karate Counter", + "messages": [ "You counterattack %s", " counterattacks %s" ], + "min_unarmed": 5, + "unarmed_allowed": true, + "block_counter": true, + "crit_ok": true, + "mult_bonuses": [ [ "movecost", 0.0 ] ] }, { "type": "technique", "id": "tec_karate_precise", - "name": "karate chop", + "name": "Knifehand Strike", + "messages": [ "You hit %s with a knifehand strike", " hits %s with a knifehand strike" ], "min_unarmed": 4, "unarmed_allowed": true, "crit_tec": true, - "messages": [ "You karate chop %s", " karate chops %s" ], - "stun_dur": 2 + "stun_dur": 1, + "mult_bonuses": [ [ "damage", "bash", 1.33 ] ] + }, + { + "type": "technique", + "id": "tec_karate_rapid", + "name": "Backfist Strike", + "messages": [ "You quickly strike %s with the back of your fist", " quickly strikes %s with the back of their fist" ], + "min_unarmed": 1, + "unarmed_allowed": true, + "mult_bonuses": [ [ "movecost", 0.5 ], [ "damage", "bash", 0.66 ], [ "damage", "cut", 0.66 ], [ "damage", "stab", 0.66 ] ] + }, + { + "type": "technique", + "id": "tec_karate_roundhouse", + "name": "Roundhouse Kick", + "messages": [ "You roundhouse kick %s", " roundhouse kicks %s" ], + "min_unarmed": 0, + "unarmed_allowed": true, + "mult_bonuses": [ [ "damage", "bash", 1.2 ] ] }, { "type": "technique", @@ -837,26 +925,6 @@ "req_buffs": [ "pankration_grappling" ], "messages": [ "You put %s in a chokehold", " puts %s in a chokehold" ] }, - { - "type": "technique", - "id": "tec_judo_throw", - "name": "throw", - "min_unarmed": 3, - "unarmed_allowed": true, - "down_dur": 1, - "knockback_dist": 1, - "knockback_spread": 1, - "messages": [ "You throw %s", " throws %s" ] - }, - { - "type": "technique", - "id": "tec_judo_grab", - "name": "grab", - "min_unarmed": 2, - "unarmed_allowed": true, - "down_dur": 2, - "messages": [ "You grab %s", " grabs %s" ] - }, { "type": "technique", "id": "tec_taichi_disarm", diff --git a/data/json/traps.json b/data/json/traps.json index 75984a829b539..b4a7eacd9b450 100644 --- a/data/json/traps.json +++ b/data/json/traps.json @@ -122,7 +122,15 @@ "difficulty": 3, "action": "beartrap", "drops": [ "beartrap" ], - "vehicle_data": { "damage": 300, "sound_volume": 8, "sound": "SNAP!", "sound_type": "trap", "sound_variant": "bear_trap" } + "vehicle_data": { + "damage": 300, + "sound_volume": 8, + "sound": "SNAP!", + "sound_type": "trap", + "sound_variant": "bear_trap", + "remove_trap": true, + "spawn_items": [ "beartrap" ] + } }, { "type": "trap", @@ -136,7 +144,15 @@ "difficulty": 4, "action": "beartrap", "drops": [ "beartrap" ], - "vehicle_data": { "damage": 300, "sound_volume": 8, "sound": "SNAP!", "sound_type": "trap", "sound_variant": "bear_trap" } + "vehicle_data": { + "damage": 300, + "sound_volume": 8, + "sound": "SNAP!", + "sound_type": "trap", + "sound_variant": "bear_trap", + "remove_trap": true, + "spawn_items": [ "beartrap" ] + } }, { "type": "trap", @@ -202,13 +218,14 @@ "action": "crossbow", "drops": [ "string_36", "crossbow", "bolt_steel" ], "vehicle_data": { - "remove_trap": true, "chance": 30, "damage": 300, "sound_volume": 1, "sound": "Clank!", "sound_type": "fire_gun", - "sound_variant": "crossbow" + "sound_variant": "crossbow", + "remove_trap": true, + "spawn_items": [ "crossbow", "string_6", { "id": "bolt_steel", "chance": 0.9 } ] } }, { @@ -224,13 +241,36 @@ "action": "shotgun", "drops": [ "string_36", "shotgun_d", { "item": "shot_00", "quantity": 2, "charges": 1 } ], "vehicle_data": { - "remove_trap": true, "chance": 70, "damage": 300, "sound_volume": 60, "sound": "Bang!", "sound_type": "fire_gun", - "sound_variant": "shotgun_d" + "sound_variant": "shotgun_d", + "set_trap": "tr_shotgun_2_1" + } + }, + { + "type": "trap", + "id": "tr_shotgun_2_1", + "trigger_weight": 200, + "name": "shotgun trap", + "color": "red", + "symbol": "^", + "visibility": 4, + "avoidance": 5, + "difficulty": 6, + "action": "shotgun", + "drops": [ "string_36", "shotgun_d", { "item": "shot_00", "quantity": 1, "charges": 1 } ], + "vehicle_data": { + "chance": 70, + "damage": 300, + "sound_volume": 60, + "sound": "Bang!", + "sound_type": "fire_gun", + "sound_variant": "shotgun_d", + "remove_trap": true, + "spawn_items": [ "shotgun_d", "string_6" ] } }, { @@ -251,7 +291,9 @@ "sound_volume": 60, "sound": "Bang!", "sound_type": "fire_gun", - "sound_variant": "shotgun_s" + "sound_variant": "shotgun_s", + "remove_trap": true, + "spawn_items": [ "shotgun_s", "string_6" ] } }, { diff --git a/data/json/uncraft/ammo/10mm.json b/data/json/uncraft/ammo/10mm.json index 9cbd29fed0454..a8fdc492c25ee 100644 --- a/data/json/uncraft/ammo/10mm.json +++ b/data/json/uncraft/ammo/10mm.json @@ -4,7 +4,7 @@ "type": "uncraft", "time": "5 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 2 ] ], [ [ "10mm_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder", 5 ] ] ], + "components": [ [ [ "lead", 2 ] ], [ [ "10mm_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder_magnum_pistol", 5 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] } ] diff --git a/data/json/uncraft/ammo/22.json b/data/json/uncraft/ammo/22.json index 36a35659b737a..17313c6d8e9bb 100644 --- a/data/json/uncraft/ammo/22.json +++ b/data/json/uncraft/ammo/22.json @@ -6,7 +6,7 @@ "difficulty": 5, "time": "5 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 2 ] ], [ [ "22_casing_new", 1 ] ], [ [ "gunpowder", 1 ] ] ], + "components": [ [ [ "lead", 2 ] ], [ [ "22_casing_new", 1 ] ], [ [ "gunpowder_pistol", 1 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] }, { @@ -16,7 +16,7 @@ "difficulty": 5, "time": "5 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 2 ] ], [ [ "22_casing_new", 1 ] ], [ [ "gunpowder", 2 ] ], [ [ "copper", 1 ] ] ], + "components": [ [ [ "lead", 2 ] ], [ [ "22_casing_new", 1 ] ], [ [ "gunpowder_pistol", 2 ] ], [ [ "copper", 1 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] }, { @@ -26,7 +26,7 @@ "difficulty": 5, "time": "5 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 2 ] ], [ [ "22_casing_new", 1 ] ], [ [ "gunpowder", 2 ] ] ], + "components": [ [ [ "lead", 2 ] ], [ [ "22_casing_new", 1 ] ], [ [ "gunpowder_pistol", 2 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] }, { @@ -36,7 +36,7 @@ "difficulty": 5, "time": "5 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 2 ] ], [ [ "22_casing_new", 1 ] ], [ [ "gunpowder", 2 ] ] ], + "components": [ [ [ "lead", 2 ] ], [ [ "22_casing_new", 1 ] ], [ [ "gunpowder_pistol", 2 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] } ] diff --git a/data/json/uncraft/ammo/223.json b/data/json/uncraft/ammo/223.json index a1740fb18c3b9..e59ca2db651eb 100644 --- a/data/json/uncraft/ammo/223.json +++ b/data/json/uncraft/ammo/223.json @@ -6,7 +6,13 @@ "difficulty": 5, "time": "5 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 3 ] ], [ [ "223_casing", 1 ] ], [ [ "smrifle_primer", 1 ] ], [ [ "gunpowder", 4 ] ], [ [ "copper", 2 ] ] ], + "components": [ + [ [ "lead", 3 ] ], + [ [ "223_casing", 1 ] ], + [ [ "smrifle_primer", 1 ] ], + [ [ "gunpowder_rifle", 4 ] ], + [ [ "copper", 2 ] ] + ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] } ] diff --git a/data/json/uncraft/ammo/270win.json b/data/json/uncraft/ammo/270win.json index b5cbfe387fea7..f204174bca71a 100644 --- a/data/json/uncraft/ammo/270win.json +++ b/data/json/uncraft/ammo/270win.json @@ -10,7 +10,7 @@ [ [ "lead", 5 ] ], [ [ "270win_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], - [ [ "gunpowder", 10 ] ], + [ [ "gunpowder_large_rifle", 10 ] ], [ [ "copper", 3 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] diff --git a/data/json/uncraft/ammo/30-06.json b/data/json/uncraft/ammo/30-06.json index c86eb571960de..80560f3a1bc8a 100644 --- a/data/json/uncraft/ammo/30-06.json +++ b/data/json/uncraft/ammo/30-06.json @@ -10,7 +10,7 @@ [ [ "lead", 6 ] ], [ [ "3006_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], - [ [ "gunpowder", 8 ] ], + [ [ "gunpowder_large_rifle", 8 ] ], [ [ "copper", 6 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] @@ -26,7 +26,7 @@ [ [ "incendiary", 6 ] ], [ [ "3006_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], - [ [ "gunpowder", 8 ] ], + [ [ "gunpowder_large_rifle", 8 ] ], [ [ "copper", 6 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] @@ -42,7 +42,7 @@ [ [ "lead", 6 ] ], [ [ "3006_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], - [ [ "gunpowder", 8 ] ], + [ [ "gunpowder_large_rifle", 8 ] ], [ [ "copper", 6 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] diff --git a/data/json/uncraft/ammo/300.json b/data/json/uncraft/ammo/300.json index 828093538a649..02dbf8bdaf12b 100644 --- a/data/json/uncraft/ammo/300.json +++ b/data/json/uncraft/ammo/300.json @@ -10,7 +10,7 @@ [ [ "lead", 8 ] ], [ [ "300_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], - [ [ "gunpowder", 16 ] ], + [ [ "gunpowder_large_rifle", 16 ] ], [ [ "copper", 21 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] diff --git a/data/json/uncraft/ammo/300blk.json b/data/json/uncraft/ammo/300blk.json index f9a7536fe8ce1..09105b3fdb007 100644 --- a/data/json/uncraft/ammo/300blk.json +++ b/data/json/uncraft/ammo/300blk.json @@ -10,7 +10,7 @@ [ [ "lead", 5 ] ], [ [ "300blk_casing", 1 ] ], [ [ "smrifle_primer", 1 ] ], - [ [ "gunpowder", 4 ] ], + [ [ "gunpowder_rifle", 4 ] ], [ [ "copper", 2 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] diff --git a/data/json/uncraft/ammo/308.json b/data/json/uncraft/ammo/308.json index e01067cfe0081..ad96d0863a6ff 100644 --- a/data/json/uncraft/ammo/308.json +++ b/data/json/uncraft/ammo/308.json @@ -10,7 +10,7 @@ [ [ "lead", 6 ] ], [ [ "308_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], - [ [ "gunpowder", 10 ] ], + [ [ "gunpowder_large_rifle", 10 ] ], [ [ "copper", 6 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] diff --git a/data/json/uncraft/ammo/32.json b/data/json/uncraft/ammo/32.json index 5f3b2d4374940..f615190e387db 100644 --- a/data/json/uncraft/ammo/32.json +++ b/data/json/uncraft/ammo/32.json @@ -6,7 +6,7 @@ "difficulty": 5, "time": "5 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 2 ] ], [ [ "32_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder", 2 ] ] ], + "components": [ [ [ "lead", 2 ] ], [ [ "32_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder_pistol", 2 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] } ] diff --git a/data/json/uncraft/ammo/357mag.json b/data/json/uncraft/ammo/357mag.json index 41d027ea6190a..29c2c95c720a5 100644 --- a/data/json/uncraft/ammo/357mag.json +++ b/data/json/uncraft/ammo/357mag.json @@ -4,7 +4,7 @@ "type": "uncraft", "time": "5 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 2 ] ], [ [ "357mag_casing", 1 ] ], [ [ "lgpistol_primer", 1 ] ], [ [ "gunpowder", 5 ] ] ], + "components": [ [ [ "lead", 2 ] ], [ [ "357mag_casing", 1 ] ], [ [ "lgpistol_primer", 1 ] ], [ [ "gunpowder_magnum_pistol", 5 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] }, { @@ -12,7 +12,7 @@ "type": "uncraft", "time": "5 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 2 ] ], [ [ "357mag_casing", 1 ] ], [ [ "lgpistol_primer", 1 ] ], [ [ "gunpowder", 5 ] ] ], + "components": [ [ [ "lead", 2 ] ], [ [ "357mag_casing", 1 ] ], [ [ "lgpistol_primer", 1 ] ], [ [ "gunpowder_magnum_pistol", 5 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] } ] diff --git a/data/json/uncraft/ammo/357sig.json b/data/json/uncraft/ammo/357sig.json index c80a0926a5997..ed1ed2c6f5b60 100644 --- a/data/json/uncraft/ammo/357sig.json +++ b/data/json/uncraft/ammo/357sig.json @@ -4,7 +4,7 @@ "type": "uncraft", "time": "5 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 2 ] ], [ [ "357sig_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder", 2 ] ] ], + "components": [ [ [ "lead", 2 ] ], [ [ "357sig_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder_magnum_pistol", 2 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] }, { @@ -12,7 +12,7 @@ "type": "uncraft", "time": "5 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 2 ] ], [ [ "357sig_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder", 2 ] ] ], + "components": [ [ [ "lead", 2 ] ], [ [ "357sig_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder_magnum_pistol", 2 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] } ] diff --git a/data/json/uncraft/ammo/38.json b/data/json/uncraft/ammo/38.json index b51fa23972ec7..6e6989f43eba4 100644 --- a/data/json/uncraft/ammo/38.json +++ b/data/json/uncraft/ammo/38.json @@ -4,7 +4,7 @@ "type": "uncraft", "time": "5 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 2 ] ], [ [ "38_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder", 2 ] ] ], + "components": [ [ [ "lead", 2 ] ], [ [ "38_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder_pistol", 2 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] }, { @@ -12,7 +12,7 @@ "type": "uncraft", "time": "5 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 2 ] ], [ [ "38_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder", 2 ] ] ], + "components": [ [ [ "lead", 2 ] ], [ [ "38_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder_pistol", 2 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] }, { @@ -20,7 +20,7 @@ "type": "uncraft", "time": "5 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 2 ] ], [ [ "38_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder", 3 ] ] ], + "components": [ [ [ "lead", 2 ] ], [ [ "38_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder_pistol", 3 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] } ] diff --git a/data/json/uncraft/ammo/380.json b/data/json/uncraft/ammo/380.json index dc4b9db6bf46f..cbc1e66ab104c 100644 --- a/data/json/uncraft/ammo/380.json +++ b/data/json/uncraft/ammo/380.json @@ -5,7 +5,7 @@ "type": "uncraft", "using": [ [ "ammo_380", 1 ] ], "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 2 ] ], [ [ "gunpowder", 3 ] ] ] + "components": [ [ [ "lead", 2 ] ], [ [ "gunpowder_pistol", 3 ] ] ] }, { "result": "380_FMJ", @@ -13,7 +13,7 @@ "type": "uncraft", "using": [ [ "ammo_380", 1 ] ], "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 2 ] ], [ [ "gunpowder", 3 ] ] ] + "components": [ [ [ "lead", 2 ] ], [ [ "gunpowder_pistol", 3 ] ] ] }, { "result": "380_p", @@ -21,6 +21,6 @@ "type": "uncraft", "using": [ [ "ammo_380", 1 ] ], "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 2 ] ], [ [ "gunpowder", 4 ] ] ] + "components": [ [ [ "lead", 2 ] ], [ [ "gunpowder_pistol", 4 ] ] ] } ] diff --git a/data/json/uncraft/ammo/38super.json b/data/json/uncraft/ammo/38super.json index 7810c99fca71f..143ef343d3bcd 100644 --- a/data/json/uncraft/ammo/38super.json +++ b/data/json/uncraft/ammo/38super.json @@ -6,7 +6,7 @@ "difficulty": 5, "time": "5 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 2 ] ], [ [ "38super_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder", 3 ] ] ], + "components": [ [ [ "lead", 2 ] ], [ [ "38super_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder_magnum_pistol", 3 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] } ] diff --git a/data/json/uncraft/ammo/40.json b/data/json/uncraft/ammo/40.json index 6c7265ba44957..3134dfbb47d30 100644 --- a/data/json/uncraft/ammo/40.json +++ b/data/json/uncraft/ammo/40.json @@ -4,7 +4,7 @@ "type": "uncraft", "time": "5 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 2 ] ], [ [ "40_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder", 4 ] ] ], + "components": [ [ [ "lead", 2 ] ], [ [ "40_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder_pistol", 4 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] }, { @@ -12,7 +12,7 @@ "type": "uncraft", "time": "5 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 2 ] ], [ [ "40_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder", 4 ] ] ], + "components": [ [ [ "lead", 2 ] ], [ [ "40_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder_pistol", 4 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] } ] diff --git a/data/json/uncraft/ammo/410shot.json b/data/json/uncraft/ammo/410shot.json index f8cd941656d39..ad3f7658a1a18 100644 --- a/data/json/uncraft/ammo/410shot.json +++ b/data/json/uncraft/ammo/410shot.json @@ -6,7 +6,7 @@ "difficulty": 5, "time": "1 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "410shot_hull", 1 ] ], [ [ "shotgun_primer", 1 ] ], [ [ "gunpowder", 5 ] ], [ [ "lead", 5 ] ] ], + "components": [ [ [ "410shot_hull", 1 ] ], [ [ "shotgun_primer", 1 ] ], [ [ "gunpowder_pistol", 5 ] ], [ [ "lead", 5 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] } ] diff --git a/data/json/uncraft/ammo/44.json b/data/json/uncraft/ammo/44.json index e191b9aae3b48..f48d88a6b2819 100644 --- a/data/json/uncraft/ammo/44.json +++ b/data/json/uncraft/ammo/44.json @@ -10,7 +10,7 @@ [ [ "lead", 7 ] ], [ [ "44_casing", 1 ] ], [ [ "lgpistol_primer", 1 ] ], - [ [ "gunpowder", 10 ] ], + [ [ "gunpowder_magnum_pistol", 10 ] ], [ [ "copper", 7 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] @@ -22,7 +22,7 @@ "difficulty": 5, "time": "5 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 10 ] ], [ [ "44_casing", 1 ] ], [ [ "lgpistol_primer", 1 ] ], [ [ "gunpowder", 10 ] ] ], + "components": [ [ [ "lead", 10 ] ], [ [ "44_casing", 1 ] ], [ [ "lgpistol_primer", 1 ] ], [ [ "gunpowder_magnum_pistol", 10 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] } ] diff --git a/data/json/uncraft/ammo/45.json b/data/json/uncraft/ammo/45.json index 3b9fbbde76cac..30350589639e0 100644 --- a/data/json/uncraft/ammo/45.json +++ b/data/json/uncraft/ammo/45.json @@ -4,7 +4,7 @@ "type": "uncraft", "time": "5 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 3 ] ], [ [ "45_casing", 1 ] ], [ [ "lgpistol_primer", 1 ] ], [ [ "gunpowder", 4 ] ] ], + "components": [ [ [ "lead", 3 ] ], [ [ "45_casing", 1 ] ], [ [ "lgpistol_primer", 1 ] ], [ [ "gunpowder_pistol", 4 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] }, { @@ -12,7 +12,7 @@ "type": "uncraft", "time": "5 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 3 ] ], [ [ "45_casing", 1 ] ], [ [ "lgpistol_primer", 1 ] ], [ [ "gunpowder", 4 ] ] ], + "components": [ [ [ "lead", 3 ] ], [ [ "45_casing", 1 ] ], [ [ "lgpistol_primer", 1 ] ], [ [ "gunpowder_pistol", 4 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] }, { @@ -20,7 +20,7 @@ "type": "uncraft", "time": "5 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 3 ] ], [ [ "45_casing", 1 ] ], [ [ "lgpistol_primer", 1 ] ], [ [ "gunpowder", 5 ] ] ], + "components": [ [ [ "lead", 3 ] ], [ [ "45_casing", 1 ] ], [ [ "lgpistol_primer", 1 ] ], [ [ "gunpowder_magnum_pistol", 5 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] } ] diff --git a/data/json/uncraft/ammo/454.json b/data/json/uncraft/ammo/454.json index bae0e66db6290..ad1a028d1d749 100644 --- a/data/json/uncraft/ammo/454.json +++ b/data/json/uncraft/ammo/454.json @@ -10,7 +10,7 @@ [ [ "lead", 20 ] ], [ [ "454_casing", 1 ] ], [ [ "smrifle_primer", 1 ] ], - [ [ "gunpowder", 20 ] ], + [ [ "gunpowder_magnum_pistol", 20 ] ], [ [ "copper", 20 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] diff --git a/data/json/uncraft/ammo/4570.json b/data/json/uncraft/ammo/4570.json index 87629aa32304e..2239490c0244b 100644 --- a/data/json/uncraft/ammo/4570.json +++ b/data/json/uncraft/ammo/4570.json @@ -9,7 +9,7 @@ [ [ "lead", 5 ] ], [ [ "4570_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], - [ [ "gunpowder", 15 ] ] + [ [ "gunpowder_large_rifle", 15 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] }, @@ -18,7 +18,7 @@ "type": "uncraft", "time": "5 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "copper", 7 ] ], [ [ "4570_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], [ [ "gunpowder", 17 ] ] ], + "components": [ [ [ "copper", 7 ] ], [ [ "4570_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], [ [ "gunpowder_large_rifle", 17 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] }, { @@ -26,7 +26,7 @@ "type": "uncraft", "time": "5 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 9 ] ], [ [ "4570_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], [ [ "gunpowder", 12 ] ] ], + "components": [ [ [ "lead", 9 ] ], [ [ "4570_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], [ [ "gunpowder_large_rifle", 12 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] } ] diff --git a/data/json/uncraft/ammo/45colt.json b/data/json/uncraft/ammo/45colt.json index ca3b831d8adfe..cf84c3b9fb5c1 100644 --- a/data/json/uncraft/ammo/45colt.json +++ b/data/json/uncraft/ammo/45colt.json @@ -4,7 +4,7 @@ "type": "uncraft", "time": "5 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 5 ] ], [ [ "45colt_casing", 1 ] ], [ [ "lgpistol_primer", 1 ] ], [ [ "gunpowder", 4 ] ] ], + "components": [ [ [ "lead", 5 ] ], [ [ "45colt_casing", 1 ] ], [ [ "lgpistol_primer", 1 ] ], [ [ "gunpowder_pistol", 4 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] } ] diff --git a/data/json/uncraft/ammo/460.json b/data/json/uncraft/ammo/460.json index c9dac3edbcb7b..1540caa180408 100644 --- a/data/json/uncraft/ammo/460.json +++ b/data/json/uncraft/ammo/460.json @@ -6,7 +6,7 @@ "difficulty": 5, "time": "5 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 3 ] ], [ [ "460_casing", 1 ] ], [ [ "lgpistol_primer", 1 ] ], [ [ "gunpowder", 10 ] ] ], + "components": [ [ [ "lead", 3 ] ], [ [ "460_casing", 1 ] ], [ [ "lgpistol_primer", 1 ] ], [ [ "gunpowder_magnum_pistol", 10 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] }, { @@ -16,7 +16,7 @@ "difficulty": 5, "time": "5 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 3 ] ], [ [ "460_casing", 1 ] ], [ [ "lgpistol_primer", 1 ] ], [ [ "gunpowder", 10 ] ] ], + "components": [ [ [ "lead", 3 ] ], [ [ "460_casing", 1 ] ], [ [ "lgpistol_primer", 1 ] ], [ [ "gunpowder_magnum_pistol", 10 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] } ] diff --git a/data/json/uncraft/ammo/46mm.json b/data/json/uncraft/ammo/46mm.json index 540d26c2be90d..f3480e4f8a4b1 100644 --- a/data/json/uncraft/ammo/46mm.json +++ b/data/json/uncraft/ammo/46mm.json @@ -6,7 +6,7 @@ "difficulty": 5, "time": "5 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 2 ] ], [ [ "46mm_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder", 4 ] ] ], + "components": [ [ [ "lead", 2 ] ], [ [ "46mm_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder_pistol", 4 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] } ] diff --git a/data/json/uncraft/ammo/500.json b/data/json/uncraft/ammo/500.json index b79146ae5ca73..f617c1b13abab 100644 --- a/data/json/uncraft/ammo/500.json +++ b/data/json/uncraft/ammo/500.json @@ -10,7 +10,7 @@ [ [ "lead", 24 ] ], [ [ "500_casing", 1 ] ], [ [ "lgpistol_primer", 1 ] ], - [ [ "gunpowder", 24 ] ], + [ [ "gunpowder_magnum_pistol", 24 ] ], [ [ "copper", 24 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] diff --git a/data/json/uncraft/ammo/50bmg.json b/data/json/uncraft/ammo/50bmg.json index 8a4b0df1185c2..f38632073d9df 100644 --- a/data/json/uncraft/ammo/50bmg.json +++ b/data/json/uncraft/ammo/50bmg.json @@ -11,7 +11,7 @@ [ [ "incendiary", 20 ] ], [ [ "50_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], - [ [ "gunpowder", 30 ] ], + [ [ "gunpowder_large_rifle", 30 ] ], [ [ "copper", 6 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] @@ -27,7 +27,7 @@ [ [ "lead", 12 ] ], [ [ "50_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], - [ [ "gunpowder", 30 ] ], + [ [ "gunpowder_large_rifle", 30 ] ], [ [ "copper", 6 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] @@ -42,7 +42,7 @@ "components": [ [ [ "50_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], - [ [ "gunpowder", 30 ] ], + [ [ "gunpowder_large_rifle", 30 ] ], [ [ "copper", 6 ] ], [ [ "scrap", 1 ] ] ], diff --git a/data/json/uncraft/ammo/545.json b/data/json/uncraft/ammo/545.json index 4537e16fcb72b..a22ab9ae35683 100644 --- a/data/json/uncraft/ammo/545.json +++ b/data/json/uncraft/ammo/545.json @@ -6,7 +6,13 @@ "difficulty": 5, "time": "5 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 2 ] ], [ [ "545_casing", 1 ] ], [ [ "smrifle_primer", 1 ] ], [ [ "gunpowder", 5 ] ], [ [ "copper", 2 ] ] ], + "components": [ + [ [ "lead", 2 ] ], + [ [ "545_casing", 1 ] ], + [ [ "smrifle_primer", 1 ] ], + [ [ "gunpowder_rifle", 5 ] ], + [ [ "copper", 2 ] ] + ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] }, { @@ -16,7 +22,13 @@ "difficulty": 5, "time": "5 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 3 ] ], [ [ "545_casing", 1 ] ], [ [ "smrifle_primer", 1 ] ], [ [ "gunpowder", 5 ] ], [ [ "copper", 3 ] ] ], + "components": [ + [ [ "lead", 3 ] ], + [ [ "545_casing", 1 ] ], + [ [ "smrifle_primer", 1 ] ], + [ [ "gunpowder_rifle", 5 ] ], + [ [ "copper", 3 ] ] + ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] } ] diff --git a/data/json/uncraft/ammo/556.json b/data/json/uncraft/ammo/556.json index 804b80af2f5fd..eabf5c87d2ac9 100644 --- a/data/json/uncraft/ammo/556.json +++ b/data/json/uncraft/ammo/556.json @@ -6,7 +6,13 @@ "difficulty": 5, "time": "5 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 3 ] ], [ [ "223_casing", 1 ] ], [ [ "smrifle_primer", 1 ] ], [ [ "gunpowder", 6 ] ], [ [ "copper", 2 ] ] ], + "components": [ + [ [ "lead", 3 ] ], + [ [ "223_casing", 1 ] ], + [ [ "smrifle_primer", 1 ] ], + [ [ "gunpowder_rifle", 6 ] ], + [ [ "copper", 2 ] ] + ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] }, { @@ -21,7 +27,7 @@ [ [ "lead", 3 ] ], [ [ "223_casing", 1 ] ], [ [ "smrifle_primer", 1 ] ], - [ [ "gunpowder", 6 ] ], + [ [ "gunpowder_rifle", 6 ] ], [ [ "copper", 2 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] diff --git a/data/json/uncraft/ammo/57mm.json b/data/json/uncraft/ammo/57mm.json index 01e20020fd831..ca3e7e99f9292 100644 --- a/data/json/uncraft/ammo/57mm.json +++ b/data/json/uncraft/ammo/57mm.json @@ -6,7 +6,7 @@ "difficulty": 5, "time": "5 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 2 ] ], [ [ "57mm_casing", 1 ] ], [ [ "smrifle_primer", 1 ] ], [ [ "gunpowder", 4 ] ] ], + "components": [ [ [ "lead", 2 ] ], [ [ "57mm_casing", 1 ] ], [ [ "smrifle_primer", 1 ] ], [ [ "gunpowder_pistol", 4 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] } ] diff --git a/data/json/uncraft/ammo/5x50.json b/data/json/uncraft/ammo/5x50.json index a3666d230316b..8455759437ba7 100644 --- a/data/json/uncraft/ammo/5x50.json +++ b/data/json/uncraft/ammo/5x50.json @@ -6,7 +6,7 @@ "difficulty": 5, "time": "5 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 2 ] ], [ [ "5x50_hull", 1 ] ], [ [ "smrifle_primer", 1 ] ], [ [ "gunpowder", 3 ] ] ], + "components": [ [ [ "lead", 2 ] ], [ [ "5x50_hull", 1 ] ], [ [ "smrifle_primer", 1 ] ], [ [ "gunpowder_rifle", 3 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] }, { @@ -16,7 +16,7 @@ "difficulty": 5, "time": "5 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 3 ] ], [ [ "5x50_hull", 1 ] ], [ [ "smrifle_primer", 1 ] ], [ [ "gunpowder", 3 ] ] ], + "components": [ [ [ "lead", 3 ] ], [ [ "5x50_hull", 1 ] ], [ [ "smrifle_primer", 1 ] ], [ [ "gunpowder_rifle", 3 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] } ] diff --git a/data/json/uncraft/ammo/700nx.json b/data/json/uncraft/ammo/700nx.json index 052d144a30b0b..3a5d9fec01c04 100644 --- a/data/json/uncraft/ammo/700nx.json +++ b/data/json/uncraft/ammo/700nx.json @@ -10,7 +10,7 @@ [ [ "lead", 14 ] ], [ [ "700nx_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], - [ [ "gunpowder", 38 ] ], + [ [ "gunpowder_large_rifle", 38 ] ], [ [ "copper", 9 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] diff --git a/data/json/uncraft/ammo/762x25.json b/data/json/uncraft/ammo/762x25.json index 7bb8b8435bba1..e29c5675386f1 100644 --- a/data/json/uncraft/ammo/762x25.json +++ b/data/json/uncraft/ammo/762x25.json @@ -5,7 +5,7 @@ "type": "uncraft", "using": [ [ "ammo_762_25", 1 ] ], "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 2 ] ], [ [ "gunpowder", 4 ] ] ] + "components": [ [ [ "lead", 2 ] ], [ [ "gunpowder_pistol", 4 ] ] ] }, { "result": "762_25hot", @@ -13,7 +13,7 @@ "type": "uncraft", "using": [ [ "ammo_762_25", 1 ] ], "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 2 ] ], [ [ "gunpowder", 5 ] ] ] + "components": [ [ [ "lead", 2 ] ], [ [ "gunpowder_pistol", 5 ] ] ] }, { "result": "762_25typeP", @@ -21,6 +21,6 @@ "type": "uncraft", "using": [ [ "ammo_762_25", 1 ] ], "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 2 ] ], [ [ "gunpowder", 5 ] ] ] + "components": [ [ [ "lead", 2 ] ], [ [ "gunpowder_pistol", 5 ] ] ] } ] diff --git a/data/json/uncraft/ammo/762x39.json b/data/json/uncraft/ammo/762x39.json index dff9f0b6bb674..a77ec4aa891b1 100644 --- a/data/json/uncraft/ammo/762x39.json +++ b/data/json/uncraft/ammo/762x39.json @@ -6,7 +6,13 @@ "difficulty": 5, "time": "5 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 5 ] ], [ [ "762_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], [ [ "gunpowder", 7 ] ], [ [ "copper", 5 ] ] ], + "components": [ + [ [ "lead", 5 ] ], + [ [ "762_casing", 1 ] ], + [ [ "lgrifle_primer", 1 ] ], + [ [ "gunpowder_rifle", 7 ] ], + [ [ "copper", 5 ] ] + ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] }, { @@ -16,7 +22,13 @@ "difficulty": 5, "time": "5 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 5 ] ], [ [ "762_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], [ [ "gunpowder", 8 ] ], [ [ "copper", 5 ] ] ], + "components": [ + [ [ "lead", 5 ] ], + [ [ "762_casing", 1 ] ], + [ [ "lgrifle_primer", 1 ] ], + [ [ "gunpowder_rifle", 8 ] ], + [ [ "copper", 5 ] ] + ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] } ] diff --git a/data/json/uncraft/ammo/762x51.json b/data/json/uncraft/ammo/762x51.json index ff1acdd9e7b0e..0298b6f588eb0 100644 --- a/data/json/uncraft/ammo/762x51.json +++ b/data/json/uncraft/ammo/762x51.json @@ -10,7 +10,7 @@ [ [ "lead", 6 ] ], [ [ "762_51_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], - [ [ "gunpowder", 10 ] ], + [ [ "gunpowder_large_rifle", 10 ] ], [ [ "copper", 6 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] @@ -26,7 +26,7 @@ [ [ "incendiary", 6 ] ], [ [ "762_51_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], - [ [ "gunpowder", 10 ] ], + [ [ "gunpowder_large_rifle", 10 ] ], [ [ "copper", 6 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] diff --git a/data/json/uncraft/ammo/762x54.json b/data/json/uncraft/ammo/762x54.json index 2a6a899ee8f7e..357ee2d591789 100644 --- a/data/json/uncraft/ammo/762x54.json +++ b/data/json/uncraft/ammo/762x54.json @@ -10,7 +10,7 @@ [ [ "lead", 3 ] ], [ [ "762R_casing", 1 ] ], [ [ "lgrifle_primer", 1 ] ], - [ [ "gunpowder", 8 ] ], + [ [ "gunpowder_large_rifle", 8 ] ], [ [ "copper", 10 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] diff --git a/data/json/uncraft/ammo/9mm.json b/data/json/uncraft/ammo/9mm.json index aca38159006e1..2d300f54c9081 100644 --- a/data/json/uncraft/ammo/9mm.json +++ b/data/json/uncraft/ammo/9mm.json @@ -5,7 +5,7 @@ "type": "uncraft", "using": [ [ "ammo_9mm", 1 ] ], "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 2 ] ], [ [ "gunpowder", 3 ] ] ] + "components": [ [ [ "lead", 2 ] ], [ [ "gunpowder_pistol", 3 ] ] ] }, { "result": "9mmP", @@ -13,7 +13,7 @@ "type": "uncraft", "using": [ [ "ammo_9mm", 1 ] ], "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 2 ] ], [ [ "gunpowder", 4 ] ] ] + "components": [ [ [ "lead", 2 ] ], [ [ "gunpowder_pistol", 4 ] ] ] }, { "result": "9mmP2", @@ -21,7 +21,7 @@ "type": "uncraft", "using": [ [ "ammo_9mm", 1 ] ], "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 2 ] ], [ [ "gunpowder", 5 ] ] ] + "components": [ [ [ "lead", 2 ] ], [ [ "gunpowder_pistol", 5 ] ] ] }, { "result": "9mmfmj", @@ -29,6 +29,6 @@ "type": "uncraft", "using": [ [ "ammo_9mm", 1 ] ], "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 2 ] ], [ [ "gunpowder", 3 ] ] ] + "components": [ [ [ "lead", 2 ] ], [ [ "gunpowder_pistol", 3 ] ] ] } ] diff --git a/data/json/uncraft/ammo/9x18mm.json b/data/json/uncraft/ammo/9x18mm.json index 870af31ad4661..9b9a144a2c01a 100644 --- a/data/json/uncraft/ammo/9x18mm.json +++ b/data/json/uncraft/ammo/9x18mm.json @@ -6,7 +6,7 @@ "difficulty": 5, "time": "5 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 2 ] ], [ [ "9x18mm_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder", 3 ] ] ], + "components": [ [ [ "lead", 2 ] ], [ [ "9x18mm_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder_pistol", 3 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] }, { @@ -16,7 +16,7 @@ "difficulty": 5, "time": "5 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "lead", 2 ] ], [ [ "9x18mm_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder", 5 ] ] ], + "components": [ [ [ "lead", 2 ] ], [ [ "9x18mm_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder_pistol", 5 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] }, { @@ -30,7 +30,7 @@ [ [ "lead", 2 ] ], [ [ "9x18mm_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], - [ [ "gunpowder", 3 ] ], + [ [ "gunpowder_pistol", 3 ] ], [ [ "copper", 2 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] diff --git a/data/json/uncraft/ammo/shot.json b/data/json/uncraft/ammo/shot.json index 6d4153075aade..e36133224349b 100644 --- a/data/json/uncraft/ammo/shot.json +++ b/data/json/uncraft/ammo/shot.json @@ -6,7 +6,7 @@ "difficulty": 5, "time": "1 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "shot_hull", 1 ] ], [ [ "shotgun_primer", 1 ] ], [ [ "gunpowder", 6 ] ], [ [ "lead", 10 ] ] ], + "components": [ [ [ "shot_hull", 1 ] ], [ [ "shotgun_primer", 1 ] ], [ [ "gunpowder_shotgun", 6 ] ], [ [ "lead", 10 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] }, { @@ -16,7 +16,7 @@ "difficulty": 5, "time": "1 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "shot_hull", 1 ] ], [ [ "shotgun_primer", 1 ] ], [ [ "gunpowder", 3 ] ], [ [ "rubber_slug", 1 ] ] ], + "components": [ [ [ "shot_hull", 1 ] ], [ [ "shotgun_primer", 1 ] ], [ [ "gunpowder_shotgun", 3 ] ], [ [ "rubber_slug", 1 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] }, { @@ -26,7 +26,7 @@ "difficulty": 5, "time": "1 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "shot_hull", 1 ] ], [ [ "shotgun_primer", 1 ] ], [ [ "gunpowder", 3 ] ], [ [ "lead", 10 ] ] ], + "components": [ [ [ "shot_hull", 1 ] ], [ [ "shotgun_primer", 1 ] ], [ [ "gunpowder_shotgun", 3 ] ], [ [ "lead", 10 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] }, { @@ -36,7 +36,7 @@ "difficulty": 5, "time": "1 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "shot_hull", 1 ] ], [ [ "shotgun_primer", 1 ] ], [ [ "gunpowder", 3 ] ], [ [ "magnesium", 5 ] ] ], + "components": [ [ [ "shot_hull", 1 ] ], [ [ "shotgun_primer", 1 ] ], [ [ "gunpowder_shotgun", 3 ] ], [ [ "magnesium", 5 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] }, { @@ -46,7 +46,7 @@ "difficulty": 5, "time": "1 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "shot_hull", 1 ] ], [ [ "shotgun_primer", 1 ] ], [ [ "gunpowder", 6 ] ], [ [ "combatnail", 10 ] ] ], + "components": [ [ [ "shot_hull", 1 ] ], [ [ "shotgun_primer", 1 ] ], [ [ "gunpowder_shotgun", 6 ] ], [ [ "combatnail", 10 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] }, { @@ -57,7 +57,7 @@ "time": "50 s", "//": "A little more carefully...", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "shot_hull", 1 ] ], [ [ "shotgun_primer", 1 ] ], [ [ "gunpowder", 3 ] ], [ [ "chem_rdx", 1 ] ] ], + "components": [ [ [ "shot_hull", 1 ] ], [ [ "shotgun_primer", 1 ] ], [ [ "gunpowder_shotgun", 3 ] ], [ [ "chem_rdx", 1 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] }, { @@ -67,7 +67,7 @@ "difficulty": 5, "time": "1 s", "qualities": [ { "id": "PULL", "level": 1 } ], - "components": [ [ [ "shot_hull", 1 ] ], [ [ "shotgun_primer", 1 ] ], [ [ "gunpowder", 6 ] ], [ [ "lead", 20 ] ] ], + "components": [ [ [ "shot_hull", 1 ] ], [ [ "shotgun_primer", 1 ] ], [ [ "gunpowder_shotgun", 6 ] ], [ [ "lead", 20 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] } ] diff --git a/data/mods/CRT_EXPANSION/constructions/crt_constructions.json b/data/mods/CRT_EXPANSION/constructions/crt_constructions.json index 39185bb094d08..dcf35d50ee5a6 100644 --- a/data/mods/CRT_EXPANSION/constructions/crt_constructions.json +++ b/data/mods/CRT_EXPANSION/constructions/crt_constructions.json @@ -4,7 +4,7 @@ "description": "Cut Grass", "category": "OTHER", "required_skills": [ [ "survival", 0 ] ], - "time": 6, + "time": "6 m", "byproducts": [ { "item": "withered", "charges": [ 1, 3 ] } ], "pre_terrain": "t_grass_long", "post_terrain": "t_grass", @@ -15,7 +15,7 @@ "description": "Cut Grass", "category": "OTHER", "required_skills": [ [ "survival", 0 ] ], - "time": 6, + "time": "6 m", "byproducts": [ { "item": "withered", "charges": [ 1, 3 ] } ], "pre_terrain": "t_grass_tall", "post_terrain": "t_grass", @@ -26,7 +26,7 @@ "description": "Cut Grass", "category": "OTHER", "required_skills": [ [ "survival", 0 ] ], - "time": 6, + "time": "6 m", "qualities": [ [ { "id": "DIG", "level": 1 } ] ], "byproducts": [ { "item": "withered", "charges": [ 2, 3 ] } ], "pre_terrain": "t_grass", @@ -37,7 +37,7 @@ "description": "Cut Grass", "category": "OTHER", "required_skills": [ [ "survival", 0 ] ], - "time": 12, + "time": "9 m", "qualities": [ [ { "id": "DIG", "level": 1 } ] ], "byproducts": [ { "item": "withered_bundle", "charges": [ 2, 3 ] } ], "pre_terrain": "t_grass_long", @@ -48,7 +48,7 @@ "description": "Cut Grass", "category": "OTHER", "required_skills": [ [ "survival", 0 ] ], - "time": 12, + "time": "9 m", "qualities": [ [ { "id": "DIG", "level": 1 } ] ], "byproducts": [ { "item": "withered_bundle", "charges": [ 3, 4 ] } ], "pre_terrain": "t_grass_tall", @@ -59,7 +59,7 @@ "description": "Cut Grass", "category": "OTHER", "required_skills": [ [ "survival", 0 ] ], - "time": 6, + "time": "6 m", "qualities": [ [ { "id": "DIG", "level": 1 } ] ], "byproducts": [ { "item": "withered", "charges": [ 1, 2 ] } ], "pre_terrain": "t_grass_dead", @@ -70,7 +70,7 @@ "description": "Cut Grass", "category": "OTHER", "required_skills": [ [ "survival", 0 ] ], - "time": 6, + "time": "6 m", "qualities": [ [ { "id": "DIG", "level": 1 } ] ], "byproducts": [ { "item": "withered", "charges": [ 1, 1 ] } ], "pre_terrain": "t_grass_golf", @@ -81,7 +81,7 @@ "description": "Cut Grass", "category": "OTHER", "required_skills": [ [ "survival", 0 ] ], - "time": 6, + "time": "6 m", "qualities": [ [ { "id": "DIG", "level": 1 } ] ], "byproducts": [ { "item": "withered", "charges": [ 1, 1 ] } ], "pre_terrain": "t_grass_white", @@ -92,7 +92,7 @@ "description": "Chop Tree Trunk Into Logs", "category": "FARM_WOOD", "required_skills": [ [ "survival", 2 ] ], - "time": 50, + "time": "50 m", "qualities": [ [ { "id": "AXE", "level": 2 }, { "id": "SAW_W", "level": 1 } ] ], "byproducts": [ { "item": "log", "count": [ 2, 3 ] } ], "pre_terrain": "t_trunk", @@ -103,7 +103,7 @@ "description": "Dig a Pit", "category": "DIG", "required_skills": [ [ "survival", 0 ] ], - "time": 20, + "time": "20 m", "qualities": [ [ { "id": "DIG", "level": 2 } ] ], "pre_terrain": "t_dirt", "post_terrain": "t_pit_shallow" @@ -113,7 +113,7 @@ "description": "Dig a Pit", "category": "DIG", "required_skills": [ [ "survival", 1 ] ], - "time": 30, + "time": "15 m", "qualities": [ [ { "id": "DIG", "level": 2 } ] ], "pre_terrain": "t_pit_shallow", "post_terrain": "t_pit" @@ -123,7 +123,7 @@ "description": "Makeshift Wall", "category": "OTHER", "required_skills": [ [ "survival", 2 ] ], - "time": 30, + "time": "45 m", "qualities": [ [ { "id": "DIG", "level": 1 } ], [ { "id": "SAW_W", "level": 1 } ] ], "components": [ [ [ "stick", 6 ], [ "2x4", 3 ] ], diff --git a/data/mods/CRT_EXPANSION/constructions/crt_terrain.json b/data/mods/CRT_EXPANSION/constructions/crt_terrain.json index 1f1454cfb6723..d78a576abb040 100644 --- a/data/mods/CRT_EXPANSION/constructions/crt_terrain.json +++ b/data/mods/CRT_EXPANSION/constructions/crt_terrain.json @@ -3,7 +3,7 @@ "type": "terrain", "id": "t_wall_stick", "name": "stick wall", - "description": "A cheap wall of planks and sticks with a log pillar to keep it together. It is capable of supporting an upper level or roof. Dirt and stones make the wall secure. Somewhat flammable.", + "description": "A cheap mish mash of planks and sticks with a log pillar that keeps it together. It is capable of supporting an upper level or roof. Dirt and stones make the wall secure. Somewhat flammable.", "symbol": "LINE_OXOX", "color": "brown_white", "move_cost": 0, @@ -16,9 +16,9 @@ "sound_fail": "krick!", "ter_set": "t_null", "items": [ - { "item": "stick", "count": [ 0, 2 ] }, + { "item": "stick", "count": [ 0, 1 ] }, { "item": "pebble", "charges": [ 1, 5 ] }, - { "item": "splinter", "count": [ 1, 4 ] } + { "item": "splinter", "count": [ 1, 6 ] } ] } } diff --git a/data/mods/CRT_EXPANSION/items/crt_armor.json b/data/mods/CRT_EXPANSION/items/crt_armor.json index 773c2bbe09962..fae3fbac5dd85 100644 --- a/data/mods/CRT_EXPANSION/items/crt_armor.json +++ b/data/mods/CRT_EXPANSION/items/crt_armor.json @@ -3,7 +3,7 @@ "id": "crt_mask", "type": "ARMOR", "category": "armor", - "name": "C.R.I.T face mask", + "name": "CRIT face mask", "description": "This is the C.R.I.T standard issue face mask, lined with kevlar for extra protection. A few filters provide decent enviromental safety, but it was not intended for extended use. It has a basic integrated HUD.", "weight": 5000, "volume": 4, @@ -19,13 +19,13 @@ "material_thickness": 2, "environmental_protection": 10, "qualities": [ [ "GLARE", 1 ] ], - "flags": [ "WATERPROOF", "STURDY", "SUN_GLASSES", "VARSIZE", "GAS_PROOF", "WATCH", "THERMOMETER" ] + "flags": [ "WATERPROOF", "STURDY", "SUN_GLASSES", "VARSIZE", "WATCH", "THERMOMETER" ] }, { "id": "crt_boots", "copy-from": "crt_la_boots", "type": "ARMOR", - "name": "pair of C.R.I.T boots", + "name": "pair of CRIT boots", "description": "C.R.I.T standard-issue boots. Next-gen gels keep feet comfortable and hygenic during long-term missions while absorbing shock and heat from outside-sources. Superalloy mesh and rubber offer quite a bit of chemical protection as well. Decently heavy though", "color": "dark_gray", "weight": 1500, @@ -39,8 +39,8 @@ "id": "crt_la_boots", "type": "ARMOR", "category": "armor", - "name": "pair of C.R.I.T LA boots", - "name_plural": "pairs of C.R.I.T LA boots", + "name": "pair of CRIT LA boots", + "name_plural": "pairs of CRIT LA boots", "description": "C.R.I.T skeletonized boots. Based off of C.R.I.T boots, the light-armor variant was created for missions in warmer climates. The LA boots keep most of the old features of the standard issue boots but trade in protection for easier movement.", "weight": 1060, "volume": 6, @@ -62,7 +62,8 @@ "id": "crt_gloves", "copy-from": "gloves_tactical", "type": "ARMOR", - "name": "pair of C.R.I.T fingertip-less gloves", + "name": "pair of CRIT fingertip-less gloves", + "name_plural": "pairs of CRIT fingertip-less gloves", "description": "C.R.I.T standard-issue gloves. Made with superalloy mesh for those with gene-modding and/or mutations while still allowing greater manipulation of items and moderate protection.", "encumbrance": 12, "coverage": 85, @@ -75,7 +76,8 @@ "id": "crt_gloves_liner", "copy-from": "crt_gloves", "type": "ARMOR", - "name": "pair of C.R.I.T fingertip-less liners", + "name": "pair of CRIT fingertip-less liners", + "name_plural": "pairs of CRIT fingertip-less liners", "description": "C.R.I.T standard-issue glove liners. Made with neroprene and rubber mesh for warmth and fingertip-less for those with gene-modding and/or mutations while still allowing greater manipulation of items and moderate protection.", "encumbrance": 3, "coverage": 85, @@ -88,7 +90,7 @@ "id": "crt_backpack", "copy-from": "molle_pack", "type": "ARMOR", - "name": "C.R.I.T backpack", + "name": "CRIT backpack", "description": "C.R.I.T standard-issue pack. Based on the MOLLE backpack's design, this smaller pack strikes a fine balance between storage space and encumbrance and allows a larger weapon to be holstered, drawing and holstering is still rather awkward even with the magnetized clips, but practice helps.", "color": "dark_gray", "storage": 36, @@ -102,8 +104,8 @@ "id": "crt_chestrig", "copy-from": "chestrig", "type": "ARMOR", - "name": "C.R.I.T chestrig", - "description": "C.R.I.T standard-issue chestrig, has mesh and MOLLE loops for gear and slots for light-armor padding.", + "name": "CRIT chestrig", + "description": "C.R.I.T standard-issue chestrig, has mesh and MOLLE loops for gear and slots with light-armor padding.", "color": "dark_gray", "material": [ "kevlar", "plastic" ], "flags": [ "STURDY", "WATER_FRIENDLY", "ALLOWS_NATURAL_ATTACKS" ] @@ -112,7 +114,8 @@ "id": "crt_legguard", "copy-from": "legguard_hard", "type": "ARMOR", - "name": "C.R.I.T leg guards", + "name": "pair of CRIT leg guards", + "name_plural": "pairs of CRIT leg guards", "description": "C.R.I.T standard-issue leg armor. Simple design and durable material allows for easy movement and the padding keeps the legs safe and warm in colder conditions.", "color": "dark_gray", "material": [ "superalloy", "rubber", "neoprene" ], @@ -127,7 +130,7 @@ "id": "crt_armguard", "type": "ARMOR", "category": "armor", - "name": "pair of C.R.I.T arm guards", + "name": "pair of CRIT arm guards", "name_plural": "pairs of C.R.I.T arm guards", "description": "A pair of arm guards made from superalloy molded upon neoprene, and then insulated with rubber. They are sturdy and will block attacks, but they are ridiculously heavy.", "weight": 1820, @@ -149,7 +152,7 @@ "id": "crt_belt", "copy-from": "survivor_belt_notools", "type": "ARMOR", - "name": "C.R.I.T web belt", + "name": "CRIT web belt", "description": "C.R.I.T standard-issue belt. Keeps your trousers up and your weapons on your hip.", "color": "dark_gray", "material": [ "leather", "brass" ], @@ -159,8 +162,8 @@ "id": "crt_iduster", "type": "ARMOR", "category": "armor", - "name": "C.R.I.T infantry duster", - "description": "A thick full-length duster coat with rubber insulation. Mildly encumbering, but rather protective against any anti-infantry electrical discharges from the robots. Has several pockets for storage.", + "name": "CRIT infantry duster", + "description": "A thick full-length duster coat with rubber insulation. More than mildly encumbering, but rather protective against any anti-infantry electrical discharges from the robots. Has several pockets for storage.", "weight": 2120, "volume": 23, "price": 25500, @@ -181,7 +184,7 @@ "id": "ds_monitor", "type": "TOOL_ARMOR", "category": "armor", - "name": "C.R.I.T S-I G.E.A.R", + "name": "CRIT S-I G.E.A.R", "description": "C.R.I.T standard issue General Engineering Assistance Rig. Plugged into your spinal cord, this device improves your overall physique and provides basic information on your surroundings.", "weight": 500, "volume": 0, @@ -196,20 +199,20 @@ "artifact_data": { "charge_type": "ARTC_NULL", "effects_worn": [ "AEP_ALL_UP" ] }, "material_thickness": 10, "environmental_protection": 0, - "flags": [ "ONLY_ONE", "TRADER_AVOID", "BELTED" ] + "flags": [ "ONLY_ONE", "TRADER_AVOID", "BELTED", "NO_TAKEOFF" ] }, { "id": "ds_armor", "type": "ARMOR", "category": "armor", - "name": "R&D Engineering Suit", + "name": "CRIT Engineering Suit", "description": "An airtight, flexible suit of woven composite fibers complete with segmented plates of armor. A complex system digitizes items in an individual pocket universe for storage while built in joint-torsion ratchets generate the neccessary energy required to power the interface.", "weight": 13460, "volume": 57, "price": 900000000, "to_hit": -5, "bashing": 8, - "material": [ "steel", "nomex", "kevlar" ], + "material": [ "superalloy", "nomex", "kevlar" ], "symbol": "[", "color": "light_gray", "covers": [ "HEAD", "EYES", "MOUTH", "TORSO", "LEGS", "ARMS", "HANDS", "FEET" ], @@ -218,7 +221,7 @@ "warmth": 15, "storage": 50, "material_thickness": 3, - "environmental_protection": 13, + "environmental_protection": 18, "use_action": "WEATHER_TOOL", "flags": [ "ELECTRIC_IMMUNE", "GAS_PROOF", "VARSIZE", "OVERSIZE", "STURDY", "ONLY_ONE", "WATERPROOF", "CLIMATE_CONTROL" ] }, @@ -226,7 +229,7 @@ "id": "crt_aarmor", "type": "ARMOR", "category": "armor", - "name": "C.R.I.T Armored Anomaly Suit", + "name": "CRIT Armored Anomaly Suit", "description": "A relatively simple suit of armor. A suit of woven composite fibers combined with a cleansuit core and strategically placed segmented kevlar plates keep the suit light-weight and the one wearing it alive while offering superb resistance to the elements and ambient radiation. ", "weight": 11460, "volume": 45, @@ -248,7 +251,7 @@ { "id": "crt_legrig", "type": "ARMOR", - "name": "C.R.I.T drop leg pouch", + "name": "CRIT drop leg pouch", "name_plural": "C.R.I.T drop leg pouches", "description": "A set of pouches that can be worn on the thighs using buckled straps. This variety is more compact and is favored by the C.R.I.T for its ease of use.", "weight": 255, @@ -268,7 +271,7 @@ "id": "crt_earmor", "type": "ARMOR", "category": "armor", - "name": "C.R.I.T Enforcer armor assembly", + "name": "CRIT Enforcer armor assembly", "description": "A series of plates, guards and buckles which assemble into a suit of sturdy body-armor which usually goes over other armor. Overlapping steel plates on top of kevlar plates cover vast expanses as the armor juts off in places so it can deflect attacks. Built with the idea that comfort is less important than safety, this heavy suit is difficult to move about in but highly protective. Various adjustable conectors such as straps and clips hold it together.", "weight": 21460, "volume": 45, @@ -291,8 +294,8 @@ "id": "crt_earmor_boots", "type": "ARMOR", "category": "armor", - "name": "pair of C.R.I.T Enforcer docks", - "name_plural": "pairs of C.R.I.T Enforcer docks", + "name": "pair of CRIT Enforcer docks", + "name_plural": "pairs of CRIT Enforcer docks", "description": "C.R.I.T Enforcer docks. Metal plates vaguely molded into the shape of oversized feet which clamp down onto your owm footwear keep your feet out of harms way. It looks terrible and feels clunky unlike most of C.R.I.T's designs, but they do seem to be worth using if you were to be in the middle of a warzone.", "weight": 2060, "volume": 6, @@ -314,7 +317,7 @@ "id": "crt_sarmor", "type": "ARMOR", "category": "armor", - "name": "C.R.I.T Soldier Suit", + "name": "CRIT Soldier Suit", "description": "A suit of modern body-armor. Strategically placed superalloy plates keep the suit's weight minimal while kevlar plates other areas and a lining of soft neoprene pads areas for extra comfort. Most importantly, this can be worn comfortably under other armor.", "weight": 5439, "volume": 25, @@ -335,7 +338,7 @@ "id": "crt_warmor", "type": "ARMOR", "category": "armor", - "name": "C.R.I.T Lone Wolf Series Armor", + "name": "CRIT Lone Wolf Series Armor", "description": "A matte black suit of outdated and bulky looking plate armor fitted onto a soft kevlar body-suit. Retrofitted with new armor improvements, this heavy armor will definitely protect you from practically anything. Just make sure you can actually walk with it on though.", "weight": 42563, "volume": 50, diff --git a/data/mods/CRT_EXPANSION/items/crt_gun.json b/data/mods/CRT_EXPANSION/items/crt_gun.json index bc3a113cbcd82..2987c3a465846 100644 --- a/data/mods/CRT_EXPANSION/items/crt_gun.json +++ b/data/mods/CRT_EXPANSION/items/crt_gun.json @@ -2,8 +2,8 @@ { "id": "crt_laser_pistol", "type": "GUN", - "name": "C.R.I.T .5 LP", - "description": "Experimental low power sidearm under development in C.R.I.T R&D, the .5 LP is a relatively weak but accurate laser pistol. The double-barrel design compensates for the lack of raw power and yet the gun manages to be relatively easy to aim and lightweight due to the superalloy construction.", + "name": "CRIT .5 LP", + "description": "Experimental low power sidearm under development in C.R.I.T R&D, the .5 LP is a relatively weak but accurate laser pistol. The double-barrel design compensates for the lack of raw power and yet the gun manages to be relatively easy to aim and lightweight due to the superalloy construction.", "weight": 650, "volume": 3, "price": 1000000, @@ -11,9 +11,9 @@ "bashing": 3, "material": [ "superalloy", "plastic" ], "symbol": "(", - "color": "cyan", + "color": "red", "skill": "pistol", - "range": 22, + "range": 20, "ranged_damage": 6, "pierce": 10, "dispersion": 150, @@ -38,8 +38,8 @@ { "id": "crt_laser_gatling", "type": "GUN", - "name": "C.R.I.T Chain Laser", - "description": "A tried and true favorite from the bowels of R&D hell. Based off of a researcher's video on three taped-together .5 LPs on a hand held power drill, this gun is a relatively light weapon for the amount of UPS and destruction it can cause.", + "name": "CRIT Chain Laser", + "description": "A tried and true favorite from the bowels of R&D hell. Based off of a researcher's video on three taped-together .5 LPs on a hand held power drill, this gun is a relatively light weapon for the amount of UPS it eats and destruction it can cause.", "weight": 2650, "volume": 10, "price": 1000000, @@ -49,17 +49,44 @@ "symbol": "(", "color": "cyan", "skill": "launcher", - "range": 25, - "ranged_damage": { "damage_type": "heat", "amount": 8 }, + "range": 30, + "ranged_damage": 9, "pierce": 8, - "dispersion": 150, + "dispersion": 45, "durability": 9, "loudness": 28, "ups_charges": 10, "reload": 220, "modes": [ [ "DEFAULT", "burst", 12 ] ], + "valid_mod_locations": [ [ "accessories", 1 ], [ "emitter", 1 ], [ "grip", 1 ], [ "lens", 1 ], [ "rail", 1 ], [ "sights", 1 ], [ "stock", 1 ] ], + "ammo_effects": [ "LASER", "INCENDIARY" ], + "flags": [ "NEVER_JAMS", "NO_UNLOAD" ] + }, + { + "id": "crt_laser_carbine", + "type": "GUN", + "name": "CRIT Laser Carbine", + "description": "A short-barrel lightweight laser gun developed by C.R.I.T R&D. Mainly developed to test out a new breakthrough in laser weapons.", + "weight": 2150, + "volume": 8, + "price": 1100000, + "to_hit": -1, + "bashing": 8, + "material": [ "steel", "plastic" ], + "symbol": "(", + "color": "blue", + "skill": "smg", + "range": 25, + "ranged_damage": 13, + "pierce": 9, + "dispersion": 15, + "durability": 8, + "modes": [ [ "DEFAULT", "semi-auto", 1 ] ], + "loudness": 12, + "ups_charges": 20, + "reload": 0, "valid_mod_locations": [ - [ "accessories", 1 ], + [ "accessories", 4 ], [ "emitter", 1 ], [ "grip", 1 ], [ "lens", 1 ], @@ -72,27 +99,27 @@ "flags": [ "NEVER_JAMS", "NO_UNLOAD" ] }, { - "id": "crt_laser_carbine", + "id": "crt_energy_rifle", "type": "GUN", - "name": "C.R.I.T Laser Carbine", - "description": "A lightweight laser gun developed by C.R.I.T R&D. Mainly developed to test out a new breakthrough in laser weapons.", - "weight": 2150, - "volume": 8, - "price": 1100000, + "name": "CRIT Energy Rifle", + "description": "A heavy energy gun developed by C.R.I.T R&D. Mainly developed to test out a new breakthrough in hybrid weaponry.", + "weight": 5150, + "volume": 10, + "price": 1800000, "to_hit": -1, - "bashing": 8, + "bashing": 10, "material": [ "steel", "plastic" ], "symbol": "(", "color": "magenta", - "skill": "smg", - "range": 28, - "ranged_damage": 12, - "pierce": 14, - "dispersion": 150, + "skill": "rifle", + "range": 35, + "ranged_damage": { "damage_type": "heat", "amount": 25 }, + "pierce": 13, + "dispersion": 20, "durability": 8, - "modes": [ [ "DEFAULT", "semi-auto", 1 ], [ "BURST", "3 rd.", 3 ] ], - "loudness": 12, - "ups_charges": 22, + "modes": [ [ "DEFAULT", "semi-auto", 1 ] ], + "loudness": 20, + "ups_charges": 30, "reload": 0, "valid_mod_locations": [ [ "accessories", 4 ], @@ -107,10 +134,36 @@ "ammo_effects": [ "LASER", "INCENDIARY" ], "flags": [ "NEVER_JAMS", "NO_UNLOAD" ] }, + { + "id": "crt_cqb_si", + "type": "GUN", + "name": "CRIT CQB Standard Issue", + "description": "A simple combination gun. This military-grade semi-auto carbine couples the mid-range versatility of the 9mm with the power of the 12 gauge shotgun. To further compliment the CQB aspect, the stock is built to amplify the user's force and the rugged construction with tonfa-like grip can handle bashing in enemy heads. An integrated magazine makes it a pain to reload, but keeps your clip from ejecting accidently.", + "weight": 1650, + "volume": 3, + "price": 1000000, + "to_hit": 2, + "bashing": 12, + "material": [ "superalloy", "steel" ], + "symbol": "(", + "color": "yellow", + "skill": "smg", + "range": 2, + "ranged_damage": -2, + "dispersion": 150, + "durability": 10, + "loudness": 30, + "ammo": "9mm", + "clip_size": 18, + "reload": 150, + "built_in_mods": [ "crt_cqb_si_shotgun" ], + "valid_mod_locations": [ [ "accessories", 1 ], [ "grip", 1 ], [ "underbarrel", 1 ] ], + "flags": [ "NEVER_JAMS", "FIRE_TWOHAND", "RELOAD_ONE" ] + }, { "id": "crt_fire_glove", "type": "GUN", - "name": "C.R.I.T Fire Glove", + "name": "CRIT Fire Glove", "description": "Experimental CQB weapon system under development in C.R.I.T R&D.", "weight": 650, "volume": 3, @@ -139,7 +192,7 @@ [ "stock", 1 ], [ "underbarrel", 1 ] ], - "ammo_effects": [ "STREAM", "INCENDIARY", "EXPLODE" ], + "ammo_effects": [ "STREAM", "INCENDIARY" ], "flags": [ "NEVER_JAMS", "NO_UNLOAD", "UNARMED_WEAPON", "DURABLE_MELEE" ] }, { @@ -149,14 +202,14 @@ "symbol": "(", "color": "light_gray", "name": "pellet gun", - "description": "A surprisingly powerful airgun that can reliably hunt small game. The small lead or alloy pellets that can be chambered provide it decent powet in every shot. It's fairly accurate and can be somewhat as damaging as a .22 short, but the break action charging system requires some arm strength to load a pellet.", + "description": "A surprisingly powerful airgun that can reliably hunt small game. The small lead or alloy pellets that can be chambered provide it decent power in every shot. It's fairly accurate and can be somewhat as damaging as a .22 short, but the break action charging system requires some arm strength to load a pellet.", "price": 9900, "//": "You can get a decent Ruger .177 at walmart for $99", "material": [ "steel", "plastic" ], "flags": [ "STR_RELOAD" ], "skill": "rifle", "ammo": "pellets", - "weight": 4023, + "weight": 5023, "volume": 8, "bashing": 10, "to_hit": -1, @@ -222,7 +275,7 @@ "clip_size": 25, "reload": 200, "valid_mod_locations": [ [ "accessories", 1 ], [ "grip", 1 ], [ "sights", 1 ] ], - "ammo_effects": [ "EXPLOSIVE", "FRAG" ], + "ammo_effects": [ "FRAG" ], "flags": [ "NEVER_JAMS" ] }, { @@ -279,7 +332,7 @@ "reload": 15, "modes": [ [ "BURST", "3 rd.", 3 ] ], "valid_mod_locations": [ [ "accessories", 1 ], [ "grip", 1 ], [ "sights", 1 ], [ "stock", 1 ] ], - "ammo_effects": [ "NOGIB", "BEANBAG", "EXPLOSIVE" ], + "ammo_effects": [ "NOGIB", "BEANBAG" ], "flags": [ "NEVER_JAMS" ] }, { diff --git a/data/mods/CRT_EXPANSION/items/crt_gunmods.json b/data/mods/CRT_EXPANSION/items/crt_gunmods.json index 3ea4322333c4d..f067150dae787 100644 --- a/data/mods/CRT_EXPANSION/items/crt_gunmods.json +++ b/data/mods/CRT_EXPANSION/items/crt_gunmods.json @@ -11,11 +11,29 @@ "symbol": ":", "color": "light_red", "location": "underbarrel", - "mod_targets": [ "pistol", "rifle", "smg", "shotgun" ], + "mod_targets": [ "pistol", "rifle", "smg" ], "gun_data": { "ammo": "signal_flare", "skill": "launcher", "dispersion": 250, "durability": 8, "clip_size": 1 }, "dispersion_modifier": 30, "flags": [ "NEVER_JAMS", "RELOAD_EJECT" ] }, + { + "id": "crt_cqb_si_shotgun", + "type": "GUNMOD", + "name": "CQB SI shotgun", + "description": "The integrated underbarrel shotgun of this gun which holds a single shot. It's irremovable.", + "weight": 2600, + "volume": 0, + "price": 95000, + "to_hit": -1, + "material": "steel", + "symbol": ":", + "color": "light_red", + "location": "underbarrel", + "mod_targets": [ "smg" ], + "gun_data": { "ammo": "shot", "skill": "shotgun", "range": 3, "dispersion": 345, "durability": 10, "clip_size": 1 }, + "dispersion_modifier": 15, + "flags": [ "IRREMOVABLE", "RELOAD_ONE", "RELOAD_EJECT" ] + }, { "id": "bthk_stock", "type": "GUNMOD", diff --git a/data/mods/CRT_EXPANSION/items/crt_item_groups.json b/data/mods/CRT_EXPANSION/items/crt_item_groups.json index 79474f9f889ce..bcd3ddd984065 100644 --- a/data/mods/CRT_EXPANSION/items/crt_item_groups.json +++ b/data/mods/CRT_EXPANSION/items/crt_item_groups.json @@ -11,6 +11,12 @@ "//": "Military specification gunmods found only at military sites.", "items": [ [ "flare_gmod", 25 ] ] }, + { + "type": "item_group", + "id": "guns_energy", + "//": "Assorted factory crafted energy weapons.", + "items": [ { "item": "crt_laser_pistol", "prob": 5 }, { "item": "crt_laser_carbine", "prob": 10 } ] + }, { "id": "clothing_soldier_set", "type": "item_group", @@ -38,7 +44,8 @@ [ "crt_gasmask", 3 ], [ "crt_em_vest", 3 ], [ "flare_gmod", 10 ], - [ "crt_backpack", 8 ] + [ "crt_backpack", 8 ], + [ "crt_laser_pistol", 1 ] ] } ] diff --git a/data/mods/CRT_EXPANSION/items/crt_toolarmor.json b/data/mods/CRT_EXPANSION/items/crt_toolarmor.json index 647c5edda72bd..4c3a6d330fb57 100644 --- a/data/mods/CRT_EXPANSION/items/crt_toolarmor.json +++ b/data/mods/CRT_EXPANSION/items/crt_toolarmor.json @@ -3,14 +3,14 @@ "id": "crt_gasmask", "type": "TOOL_ARMOR", "category": "armor", - "name": "C.R.I.T gasmask (off)", + "name": "CRIT gasmask (off)", "description": "This is the C.R.I.T Spec Ops modified gasmask, fitted with top-of-the-line electronics and lined with kevlar for extra protection in order to keep one's head where it should be. Various filters and other high tech wizardry allow for enhanced oxygen intake and safety even under bombardment. It has an integrated HUD and the option to turn it on for more features.", "weight": 5000, "volume": 4, "price": 2500000, "to_hit": 1, "max_charges": 200, - "initial_charges": 25, + "initial_charges": 200, "use_action": { "type": "transform", "msg": "C.R.T HUD booting up...", @@ -35,7 +35,7 @@ "id": "crt_gasmask_on", "type": "TOOL_ARMOR", "category": "armor", - "name": "C.R.I.T gasmask (on)", + "name": "CRIT gasmask (on)", "description": "This is the C.R.I.T Spec Ops modified gasmask. It is currently on and draining power for the HUD, low-level nightvision and other protective elements.", "weight": 5000, "volume": 4, @@ -51,9 +51,9 @@ "color": "light_green", "covers": [ "EYES", "MOUTH" ], "coverage": 100, - "encumbrance": 20, - "warmth": 50, - "artifact_data": { "charge_type": "ARTC_SOLAR", "effects_worn": [ "AEP_ALL_UP" ] }, + "encumbrance": 5, + "warmth": 75, + "artifact_data": { "charge_type": "ARTC_SOLAR", "effects_worn": [ "AEP_ALL_UP", "AEP_INT_DOWN" ] }, "material_thickness": 2, "environmental_protection": 20, "qualities": [ [ "GLARE", 2 ] ], @@ -77,8 +77,8 @@ "id": "crt_em_vest", "type": "TOOL_ARMOR", "category": "armor", - "name": "C.R.I.T EM vest (off)", - "description": "The C.R.I.T Spec Ops Enhanced Movement vest is embedded with high-tech filaments and reactive servos which protects its wearer and assists in movement at the cost high power usage. It is commonly worn by C.R.I.T Spec Ops for its ease of use and manuverability. Turn it on for extra protection and movement.", + "name": "CRIT EM vest (off)", + "description": "The C.R.I.T Spec Ops Enhanced Movement vest is embedded with high-tech filaments and reactive servos which protects its wearer and assists in movement at the cost high power usage. It is commonly worn by C.R.I.T Spec Ops for its ease of use and manuverability. Turn it on for suit mode, extra protection and movement.", "weight": 10000, "volume": 25, "price": 7000000, @@ -88,8 +88,8 @@ "symbol": "[", "color": "light_gray", "covers": [ "TORSO" ], - "max_charges": 250, - "initial_charges": 25, + "max_charges": 300, + "initial_charges": 300, "charges_per_use": 1, "use_action": { "type": "transform", @@ -112,8 +112,8 @@ "id": "crt_em_vest_on", "type": "TOOL_ARMOR", "category": "armor", - "name": "C.R.I.T EM vest (on)", - "description": "The C.R.I.T Spec Ops Enhanced Movement vest is embedded with high-tech filaments, reactive servos and a generator which pumps a crystallized liquid that protects its wearer from most heavy combat situations at the cost of high power usage. It is commonly worn by C.R.I.T Spec Ops. This vest is currently in suit form and draining your UPS power at high rates.", + "name": "CRIT EM vest (on)", + "description": "The C.R.I.T Spec Ops Enhanced Movement vest is embedded with high-tech filaments, reactive servos and a generator which pumps a crystallized liquid that protects its wearer from most heavy combat situations at the cost of extreme power usage. It is commonly worn by C.R.I.T Spec Ops. This vest is currently in suit form and draining your UPS power at high rates.", "weight": 10000, "volume": 25, "price": 7000000, @@ -126,19 +126,19 @@ "coverage": 100, "encumbrance": 5, "storage": 10, - "warmth": 60, + "warmth": 75, "material_thickness": 6, "environmental_protection": 16, - "max_charges": 250, + "max_charges": 300, "initial_charges": 0, - "turns_per_charge": 1, + "turns_per_charge": 0.5, "revert_to": "crt_em_vest", "use_action": { "type": "transform", "menu_text": "Turn off armor", "msg": "C.R.I.T E.M powering off...", "target": "crt_em_vest" }, "artifact_data": { "charge_type": "ARTC_SOLAR", "effects_carried": [ "AEP_ALL_UP" ], "effects_wielded": [ "AEP_ALL_UP" ], - "effects_worn": [ "AEP_ALL_UP", "AEP_SPEED_UP" ] + "effects_worn": [ "AEP_ALL_UP", "AEP_INT_DOWN", "AEP_SPEED_UP" ] }, "flags": [ "WATERPROOF", @@ -157,7 +157,7 @@ "id": "crt_helmet", "copy-from": "helmet_army", "type": "TOOL_ARMOR", - "name": "C.R.I.T helmet (off)", + "name": "CRIT helmet (off)", "description": "C.R.T standard-issue helmet. Protects the noggin and has a stretch of insulated steel mesh for neck warmth and protection.", "color": "light_gray", "material": [ "kevlar", "hardsteel" ], @@ -180,7 +180,7 @@ "id": "crt_helmet_on", "copy-from": "helmet_army", "type": "TOOL_ARMOR", - "name": "C.R.I.T helmet (on)", + "name": "CRIT helmet (on)", "description": "C.R.I.T standard-issue helmet. Protects the noggin and has a stretch of insulated steel mesh for neck warmth and protection. A tactically dim flashlight is attatched to the side. This light is currently on and drawing power.", "color": "light_gray", "material": [ "kevlar", "hardsteel" ], @@ -201,7 +201,7 @@ "warmth": 20, "revert_to": "crt_helmet", "max_charges": 100, - "initial_charges": 100, + "initial_charges": 0, "charges_per_use": 1, "turns_per_charge": 20, "ammo": "battery", @@ -211,12 +211,37 @@ "id": "crt_canteen", "copy-from": "canteen", "type": "ARMOR", - "name": "C.R.I.T canteen", + "name": "CRIT canteen", "description": "A simple, durable steel canteen that can heat up food with built in plutonium heating elements.", "color": "dark_gray", "material": "hardsteel", "material_thickness": 1, "qualities": [ [ "BOIL", 1 ], [ "CONTAIN", 1 ] ], "use_action": "HOTPLATE" + }, + { + "id": "bandana_wet", + "type": "ARMOR", + "name": "wet bandana", + "description": "A dampened cotton bandana, worn over the mouth for a extra protection from dust and other contaminants.", + "weight": 42, + "volume": 1, + "price": 600, + "to_hit": -1, + "material": [ "cotton" ], + "symbol": "[", + "color": "blue", + "covers": [ "MOUTH" ], + "coverage": 95, + "encumbrance": 7, + "warmth": 0, + "material_thickness": 1, + "environmental_protection": 3, + "revert_to": "bandana", + "max_charges": 60, + "initial_charges": 50, + "charges_per_use": 1, + "turns_per_charge": 5, + "flags": [ "WET" ] } ] diff --git a/data/mods/CRT_EXPANSION/items/crt_tools.json b/data/mods/CRT_EXPANSION/items/crt_tools.json index c331f167d2661..eecba95753f2a 100644 --- a/data/mods/CRT_EXPANSION/items/crt_tools.json +++ b/data/mods/CRT_EXPANSION/items/crt_tools.json @@ -2,8 +2,8 @@ { "id": "crt_mess_kit", "type": "TOOL", - "name": "C.R.I.T mess kit", - "description": "C.R.I.T standard-issue mess kit designed for ease of transport. Based off of the normal military mess kit, but made to be telescopic, the parts are made from a thin sheet of a stainless superalloy composite and are insulated with ceramic. Sadly, this compact reimagining loses much of its battery life but does have a rather small solar panel installed. Also comes with an absurdly small integrated fpoon and knife spatula set!", + "name": "CRIT mess kit", + "description": "C.R.I.T standard-issue mess kit designed for ease of transport. Based off of the normal military mess kit, but made to be telescopic, the parts are made from a thin sheet of a stainless superalloy composite and are insulated with ceramic. Sadly, this compact reimagining loses much of its battery life but does have a rather small (useless) solar panel installed. Also comes with an absurdly small integrated fpoon and knife spatula set!", "weight": 850, "volume": 3, "price": 6500, @@ -26,17 +26,16 @@ "copy-from": "diveknife", "type": "TOOL", "category": "weapons", - "name": "C.R.I.T service knife", - "description": "C.R.I.T standard-issue knife. Has a knuckleduster guard and a small, hooked pry bar at the bottom for opening simple things and bashing in heads. Matte black finish helps it avoid flash in dim-light situations and tanto tip allows for light-armor penetration. Blade length allows for pretty decent reach as well. Something makes you feel... connected to the knife.", + "name": "CRIT service knife", + "description": "C.R.I.T standard-issue knife. Has a knuckleduster guard and a small, hooked pry bar at the bottom for opening simple things and bashing in heads. Matte black finish helps it avoid flash in dim-light situations and tanto tip allows for light-armor penetration. Blade length allows for decent reach.", "color": "dark_gray", "material": [ "hardsteel" ], - "artifact_data": { "charge_type": "ARTC_NULL", "effects_wielded": [ "AEP_SAP_LIFE" ] }, "weight": 350, "volume": 3, "price": 20000, "damage": { "damage_type": "cold", "amount": 100 }, - "cutting": 7, - "bashing": 5, + "cutting": 8, + "bashing": 3, "to_hit": 2, "durability": 15, "symbol": ";", @@ -49,12 +48,11 @@ "id": "crt_knuckledusters", "type": "TOOL", "category": "weapons", - "name": "C.R.I.T Knuckledusters", - "description": "C.R.I.T CQB knuckledusters. Not too different from any normal pair, but the .", + "name": "CRIT Knuckledusters", + "description": "C.R.I.T CQB knuckledusters. Not too different from any normal pair other than weight.", "color": "dark_gray", "material": [ "hardsteel" ], - "artifact_data": { "charge_type": "ARTC_NULL", "effects_wielded": [ "AEP_SAP_LIFE" ] }, - "weight": 350, + "weight": 550, "volume": 3, "price": 20000, "bashing": 10, @@ -68,14 +66,11 @@ "id": "sword_crt", "type": "TOOL", "category": "weapons", - "name": "C.R.I.T Reso-blade", + "name": "CRIT Reso-blade", "description": "C.R.I.T melee weapon. Alien runes adorn the carbon steel blade. The blade oddly lacks sharpness, and yet upon closer oberservation, a hum of energy thrums from within.", "color": "dark_gray", "material": [ "hardsteel" ], - "artifact_data": { - "charge_type": "ARTC_NULL", - "effects_wielded": [ "AEP_DEX_UP", "AEP_SPEED_UP", "AEP_SPEED_UP", "AEP_SPEED_UP", "AEP_SAP_LIFE" ] - }, + "artifact_data": { "charge_type": "ARTC_NULL", "effects_wielded": [ "AEP_DEX_UP", "AEP_SPEED_UP", "AEP_SPEED_UP" ] }, "weight": 2500, "volume": 10, "price": 20000000, @@ -112,14 +107,14 @@ "AEP_SAP_LIFE" ] }, - "weight": 55000, - "volume": 30, + "weight": 50000, + "volume": 20, "price": 20000000, "cutting": 80, "bashing": 95, "to_hit": 5, "symbol": ";", - "qualities": [ [ "PRY", 1 ] ], + "qualities": [ [ "PRY", 2 ] ], "use_action": "CROWBAR", "flags": [ "UNBREAKABLE_MELEE" ], "techniques": [ "WBLOCK_3", "tec_feint", "tec_counter", "BERSERK", "DSBI", "DSINERTIAL" ] @@ -129,7 +124,7 @@ "id": "crt_hatchet", "symbol": ";", "color": "light_gray", - "name": "C.R.I.T hatchet", + "name": "CRIT hatchet", "description": "An incredibly sharp, heavy duty, one-handed hatchet. Makes a great melee weapon, and is useful both for chopping things and for use as a hammer.", "price": 2500, "price_postapoc": 5000, @@ -147,7 +142,7 @@ { "id": "crt_etool", "type": "TOOL", - "name": "C.R.I.T entrenching tool", + "name": "CRIT entrenching tool", "description": "C.R.I.T standard-issue collapsible spade. A built in vibration system that is powered by the user's movement allows the smaller spade to clear soil like a larger shovel.", "weight": 578, "volume": 3, @@ -159,21 +154,20 @@ "techniques": [ "CHOP", "SHOVE", "SMASH" ], "symbol": "/", "color": "dark_gray", - "qualities": [ [ "DIG", 3 ], [ "BUTCHER", -15 ], [ "COOK", 1 ] ], + "qualities": [ [ "DIG", 3 ], [ "BUTCHER", -20 ], [ "COOK", 1 ] ], "flags": [ "DURABLE_MELEE", "NEEDS_UNFOLD", "BELT_CLIP" ] }, { "id": "crt_nstick", "type": "TOOL", - "name": "C.R.I.T night stick", - "description": "C.R.I.T standard issue guard tonfa. The length allows for great reach and the domed tip allows for greater impact than a cylinder style baton. Blood seems to soak into the length...", + "name": "CRIT night stick", + "description": "C.R.I.T standard issue guard tonfa. The length allows for great reach and the domed tip allows for greater impact than a cylinder style baton.", "weight": 1028, "volume": 5, "price": 4000, "to_hit": 2, - "bashing": 16, + "bashing": 10, "material": [ "hardsteel", "plastic", "rubber" ], - "artifact_data": { "charge_type": "ARTC_NULL", "effects_wielded": [ "AEP_SAP_LIFE" ] }, "techniques": [ "WBLOCK_3", "tec_break", "UHAND", "SMASH", "INERTIAL" ], "symbol": "/", "color": "dark_gray", diff --git a/data/mods/CRT_EXPANSION/martial/CRT_Bladework.json b/data/mods/CRT_EXPANSION/martial/CRT_Bladework.json index 7f805abf3a0a1..7c683e2dbf5ca 100644 --- a/data/mods/CRT_EXPANSION/martial/CRT_Bladework.json +++ b/data/mods/CRT_EXPANSION/martial/CRT_Bladework.json @@ -17,43 +17,32 @@ "type": "martial_art", "id": "style_crt_blade", "name": "C.R.I.T Blade-work", - "description": "An offensive style that is centered around rapid slashes and prodding. Each attack landed increases your speed by 3 and offers other combat bonuses", + "description": "An offensive style that is centered around rapid slashes and prodding. Each attack landed increases combat ability", "initiate": [ "Initiate blade-work.", "%s initiates blade-work." ], - "arm_block": 3, + "arm_block": 99, "leg_block": 99, "static_buffs": [ { "id": "crt_blade_static", "name": "C.R.I.T Calculation", - "description": "DEX provides accuracy and minor cut and stab damage with slight piercing capability.", + "description": "Increased accuracy along with minor cut and stab damage with piercing capability.", "unarmed_allowed": true, - "flat_bonuses": [ - [ "damage", "stab", "dex", 0.15 ], - [ "damage", "cut", "dex", 0.5 ], - [ "arpen", "stab", "dex", 0.1 ], - [ "arpen", "cut", "dex", 0.2 ], - [ "hit", "dex", 0.3 ] - ] + "melee_allowed": true, + "min_unarmed": 2, + "flat_bonuses": [ [ "damage", "stab", 1 ], [ "damage", "cut", 1 ], [ "arpen", "stab", 1 ], [ "arpen", "cut", 1 ] ] } ], "onhit_buffs": [ { "id": "crt_blade_hit_buff", "name": "C.R.I.T Intensity", - "description": "+3 Atk Speed and other small bonuses per stack. Bash damage decreases by 10 percent per stack. Max of 10 stacks", + "description": "Additional DMG, and Arpen per stack. Max of 5 stacks", "unarmed_allowed": false, - "min_unarmed": 1, - "buff_duration": 10, - "max_stacks": 10, - "flat_bonuses": [ - [ "hit", "dex", 0.015 ], - [ "damage", "bash", -0.1 ], - [ "damage", "stab", "dex", 0.0075 ], - [ "damage", "cut", "dex", 0.015 ], - [ "arpen", "cut", "dex", 0.005 ], - [ "movecost", "dex", -0.075 ], - [ "movecost", -3 ] - ] + "melee_allowed": true, + "min_unarmed": 3, + "buff_duration": 1, + "max_stacks": 4, + "flat_bonuses": [ [ "damage", "stab", 0.25 ], [ "damage", "cut", 0.5 ], [ "arpen", "cut", 1 ] ] } ], "techniques": [ "tec_crt_blade_normal", "tec_crt_blade_rapid", "tec_crt_blade_precise", "tec_crt_blade_arpen", "tec_feint" ], @@ -68,6 +57,13 @@ "knife_steak", "knife_trench", "knife_folding", + "knife_paring", + "knife_carving", + "knife_vegetable_cleaver", + "knife_meat_cleaver", + "knife_bread", + "knife_chef", + "knife_butcher", "makeshift_knife", "primitive_knife", "pockknife", @@ -85,10 +81,9 @@ "min_unarmed": 1, "min_melee": 1, "unarmed_allowed": true, + "melee_allowed": true, "mult_bonuses": [ [ "damage", "bash", 0.8 ], [ "damage", "cut", 0.7 ], [ "damage", "stab", 0.6 ] ], - "flat_bonuses": [ [ "damage", "stab", "dex", 0.15 ], [ "damage", "cut", "dex", 0.2 ], [ "movecost", "dex", -0.5 ] ], - "messages": [ "You release a blinding slash at %s", " slashes at %s" ], - "stun_dur": 0.05 + "messages": [ "You release a blindingly fast slash at %s", " slashes at %s" ] }, { "type": "technique", @@ -97,10 +92,9 @@ "min_unarmed": 2, "min_melee": 2, "unarmed_allowed": true, - "mult_bonuses": [ [ "movecost", 0.65 ], [ "damage", "bash", 0.55 ], [ "damage", "cut", 0.6 ], [ "damage", "stab", 0.55 ] ], - "flat_bonuses": [ [ "damage", "stab", "dex", 0.01 ], [ "damage", "cut", "dex", 0.015 ], [ "movecost", "dex", -0.45 ] ], - "messages": [ "You swiftly jab your weapon into %s joints", " swiftly jabs their weapon into %s" ], - "stun_dur": 0.15 + "melee_allowed": true, + "mult_bonuses": [ [ "movecost", 0.77 ], [ "damage", "bash", 0.55 ], [ "damage", "cut", 0.66 ], [ "damage", "stab", 0.88 ] ], + "messages": [ "You swiftly jab your weapon at %s", " swiftly jabs their weapon at %s" ] }, { "type": "technique", @@ -109,11 +103,11 @@ "min_unarmed": 3, "min_melee": 3, "unarmed_allowed": true, + "melee_allowed": true, "mult_bonuses": [ [ "movecost", 0.8 ], [ "damage", "bash", 0.66 ], [ "damage", "cut", 1.05 ], [ "damage", "stab", 1.0 ] ], - "flat_bonuses": [ [ "damage", "stab", "dex", 0.1 ], [ "damage", "cut", "dex", 0.5 ], [ "movecost", "dex", -0.2 ] ], "crit_tec": true, - "messages": [ "You steady your hand and release a piercing jab at %s", " releases a piercing jab at %s" ], - "stun_dur": 1.5 + "messages": [ "You release a debilitating swipe at %s", " releases a debilitating swipe at %s" ], + "down_dur": 2 }, { "type": "technique", @@ -123,20 +117,19 @@ "min_melee": 5, "weighting": 2, "unarmed_allowed": true, + "melee_allowed": true, "mult_bonuses": [ - [ "movecost", 0.95 ], - [ "damage", "bash", 0.2 ], + [ "damage", "bash", 0.5 ], [ "damage", "cut", 1.1 ], - [ "arpen", "stab", "dex", 0.15 ], [ "damage", "stab", 1.1 ], - [ "arpen", "cut", "dex", 0.3 ] + [ "arpen", "stab", 0.25 ], + [ "arpen", "cut", 0.5 ] ], - "flat_bonuses": [ [ "damage", "stab", "dex", 0.25 ], [ "damage", "cut", "dex", 0.35 ], [ "movecost", "dex", -0.5 ] ], "crit_tec": true, "messages": [ "You envision the tension of a fully drawn bow and then launch a piercing blow on %s's top half", " lands a piercing blow on %s's face" ], - "stun_dur": 0.25 + "stun_dur": 2 } ] diff --git a/data/mods/CRT_EXPANSION/martial/CRT_EnforcementBuff.json b/data/mods/CRT_EXPANSION/martial/CRT_EnforcementBuff.json index 22b1eee3c1653..5f5ebb72b93fd 100644 --- a/data/mods/CRT_EXPANSION/martial/CRT_EnforcementBuff.json +++ b/data/mods/CRT_EXPANSION/martial/CRT_EnforcementBuff.json @@ -18,17 +18,17 @@ "id": "style_crt_enforcement", "name": "C.R.I.T Enforcement", "description": "A defensive style that is centered around stunning swings, knockback and grounding enemies. Each attack landed increases your armor by 0.125 and offers other combat bonuses based on stats.", - "initiate": [ "Initiate enforcement.", "%s initiates enforcement." ], + "initiate": [ "You ready yourself to stand your ground.", "%s draws a line in the sand." ], "arm_block": 2, "leg_block": 10, "static_buffs": [ { "id": "crt_enforcement_static", "name": "C.R.I.T Guard", - "description": "+1 armor. STR provides accuracy and minor bash damage and arpen.", + "description": "+1 armor. STR provides accuracy and minor bash arpen.", "unarmed_allowed": true, + "melee_allowed": true, "flat_bonuses": [ - [ "damage", "bash", "str", 0.15 ], [ "arpen", "bash", "str", 0.15 ], [ "armor", "bash", 1 ], [ "armor", "cut", 1 ], @@ -40,26 +40,25 @@ "onhit_buffs": [ { "id": "crt_enforcement_hit_buff", - "name": "C.R.I.T Endurance", - "description": "+0.05 armor, +0.1 bash and other small bonuses per stack. Max of 10 stacks", + "name": "C.R.I.T Buildup", + "description": "+0.05 armor and other small bonuses per stack. Max of 10 stacks", "unarmed_allowed": true, + "melee_allowed": true, "min_unarmed": 1, "buff_duration": 10, "max_stacks": 10, "flat_bonuses": [ - [ "damage", "bash", 0.05 ], - [ "damage", "bash", "str", 0.05 ], + [ "damage", "bash", "str", 0.01 ], [ "armor", "bash", 0.05 ], [ "armor", "cut", 0.05 ], [ "armor", "stab", 0.05 ], [ "armor", "bash", "str", 0.15 ], [ "armor", "cut", "str", 0.125 ], - [ "armor", "stab", "str", 0.1 ], - [ "movecost", "str", -0.05 ] + [ "armor", "stab", "str", 0.075 ] ] } ], - "techniques": [ "tec_crt_enforcement_normal", "tec_crt_enforcement_rapid", "tec_crt_enforcement_brutal", "tec_feint" ], + "techniques": [ "tec_crt_enforcement_normal", "tec_crt_enforcement_rapid", "tec_crt_enforcement_brutal" ], "weapons": [ "knife_crt", "crt_nstick", @@ -87,38 +86,38 @@ { "type": "technique", "id": "tec_crt_enforcement_normal", - "name": "Blindside", + "name": "Harsh Reprimand", "min_unarmed": 1, "min_melee": 1, "unarmed_allowed": true, - "mult_bonuses": [ [ "damage", "bash", 0.75 ], [ "damage", "cut", 0.15 ], [ "damage", "stab", 0.35 ] ], - "flat_bonuses": [ [ "damage", "bash", "str", 0.35 ], [ "movecost", "str", -1 ] ], - "messages": [ "You thwap %s's face", " smashes in %s's face" ], - "stun_dur": 0.35, - "knockback_dist": 1 + "melee_allowed": true, + "mult_bonuses": [ [ "damage", "bash", 1 ], [ "damage", "cut", 1 ], [ "damage", "stab", 1 ] ], + "flat_bonuses": [ [ "damage", "bash", "str", 0.15 ], [ "movecost", "str", -0.7 ] ], + "messages": [ "You clock %s's in a weak spot to knock em down", " smashes in %s's face" ], + "down_dur": 1 }, { "type": "technique", "id": "tec_crt_enforcement_rapid", - "name": "Unrelenting Smackos", - "min_unarmed": 2, + "name": "Forced Compliance", + "min_unarmed": 3, "min_melee": 2, "unarmed_allowed": true, - "mult_bonuses": [ [ "movecost", 1.0 ], [ "damage", "bash", 1.0 ], [ "damage", "cut", 0.1 ], [ "damage", "stab", 0.15 ] ], - "flat_bonuses": [ [ "damage", "bash", "str", 0.2 ], [ "movecost", "str", -2 ] ], - "messages": [ "You swiftly swipe your weapon's tip at %s", " swiftly jabs their weapon into %s" ], - "stun_dur": 0.05, - "down_dur": 0.2 + "melee_allowed": true, + "mult_bonuses": [ [ "movecost", 1.04 ], [ "damage", "bash", 1 ], [ "damage", "cut", 1.05 ], [ "damage", "stab", 1.05 ] ], + "flat_bonuses": [ [ "arpen", "bash", "str", 0.2 ], [ "movecost", "str", -1.2 ] ], + "messages": [ "You swiftly swipe your weapon's tip at %s", " swiftly jabs their weapon into %s" ] }, { "type": "technique", "id": "tec_crt_enforcement_brutal", "name": "Roomsweeper", - "min_unarmed": 3, + "min_unarmed": 4, "min_melee": 3, "unarmed_allowed": true, + "melee_allowed": true, "mult_bonuses": [ [ "movecost", 1.35 ], [ "damage", "bash", 1.15 ], [ "damage", "cut", 1.05 ], [ "damage", "stab", 1.0 ] ], - "flat_bonuses": [ [ "damage", "bash", "str", 0.5 ], [ "damage", "cut", "str", 0.25 ], [ "movecost", "str", -1.5 ] ], + "flat_bonuses": [ [ "arpen", "bash", "str", 0.5 ], [ "damage", "cut", "str", 0.25 ], [ "movecost", "str", -1.5 ] ], "crit_tec": true, "messages": [ "You steady your arm and release a crushing blow at %s", " releases a crushing blow at %s" ], "stun_dur": 3, diff --git a/data/mods/CRT_EXPANSION/martial/CRT_MeleeBuffs.json b/data/mods/CRT_EXPANSION/martial/CRT_MeleeBuffs.json index c6613d8d7e2a5..c59d6fdf2bc79 100644 --- a/data/mods/CRT_EXPANSION/martial/CRT_MeleeBuffs.json +++ b/data/mods/CRT_EXPANSION/martial/CRT_MeleeBuffs.json @@ -18,7 +18,7 @@ "id": "MARTIAL_CRT", "name": "C.R.I.T Melee Training", "points": 3, - "description": "You have received some defensive training. For every hit you land, gain various miniscule combat bonuses that scale off of your stats.", + "description": "You have received defensive training. For every hit you land, gain various miniscule combat bonuses that scale off of your stats.", "starting_trait": true, "initial_ma_styles": [ "style_crt_cqb", "style_crt_blade", "style_crt_enforcement" ], "valid": false @@ -27,7 +27,7 @@ "type": "martial_art", "id": "style_crt_cqb", "name": "C.R.I.T CQB", - "description": "A defensive style centered around rapid paralyzing strikes and piercing jabs. Each attack landed increases your speed by 0.5 along with a slew of combat bonuses. 25 percent bash damage.", + "description": "A style centered around rapid strikes and piercing jabs. Each attack landed adds a plethora of combat bonuses. 25 percent bash damage.", "initiate": [ "Initiate CQB.", "%s initiates CQB." ], "arm_block": 3, "leg_block": 6, @@ -35,68 +35,43 @@ { "id": "crt_cqb_static", "name": "C.R.I.T Initiative", - "description": "DEX provides dodge ability, accuracy and minor cut /stab damage with slight piercing capability. 25 Percent Bash Damage that slightly increases per hit stack.", + "description": "DEX provides dodge ability, accuracy and minor cut / stab damage with slight piercing capability. 50 Percent Bash Damage.", "unarmed_allowed": true, + "melee_allowed": true, "flat_bonuses": [ - [ "damage", "stab", "dex", 0.25 ], - [ "damage", "cut", "dex", 0.25 ], - [ "arpen", "stab", "dex", 0.1 ], - [ "arpen", "cut", "dex", 0.05 ], - [ "dodge", "dex", 0.05 ], - [ "hit", "dex", 0.3 ], - [ "movecost", "dex", -0.6 ] + [ "damage", "stab", "dex", 0.15 ], + [ "damage", "cut", "dex", 0.05 ], + [ "arpen", "stab", "dex", 0.25 ], + [ "arpen", "cut", "dex", 0.15 ], + [ "dodge", "dex", 0.1 ], + [ "hit", "dex", 0.15 ] ], - "mult_bonuses": [ [ "damage", "bash", 0.25 ] ] + "mult_bonuses": [ [ "damage", "bash", 0.5 ] ] } ], "onhit_buffs": [ { "id": "crt_cqb_hit_buff", "name": "C.R.I.T Tenacity", - "description": "+0.5 Atk Speed and other small bonuses based on DEX per stack. Max of 100 stacks", + "description": "+Atk Speed and other small bonuses based on DEX per stack. Max of 5 stacks", "unarmed_allowed": true, + "melee_allowed": true, "min_unarmed": 1, - "buff_duration": 100, - "max_stacks": 100, - "flat_bonuses": [ - [ "hit", "dex", 0.015 ], - [ "damage", "bash", "dex", 0.0125 ], - [ "damage", "stab", "dex", 0.025 ], - [ "damage", "cut", "dex", 0.0125 ], - [ "arpen", "stab", "dex", 0.005 ], - [ "arpen", "stab", "dex", 0.005 ], - [ "dodge", "dex", 0.01 ], - [ "movecost", "dex", -0.125 ], - [ "movecost", -0.5 ] - ] + "buff_duration": 2, + "max_stacks": 10, + "flat_bonuses": [ [ "movecost", "dex", -0.05 ], [ "movecost", 0.1 ], [ "damage", "stab", 0.1 ] ], + "mult_bonuses": [ [ "damage", "stab", 1.075 ], [ "damage", "cut", 1.02 ], [ "arpen", "stab", 1.01 ], [ "dodge", 1.02 ] ] } ], - "techniques": [ "tec_crt_cqb_normal", "tec_crt_cqb_rapid", "tec_crt_cqb_precise", "tec_crt_cqb_arpen", "tec_feint" ], - "weapons": [ - "sword_crt", - "blade_crt", - "knife_crt", - "knife_combat", - "knife_hunting", - "knife_rambo", - "knife_rm42", - "knife_steak", - "knife_swissarmy", - "knife_trench", - "knife_butter", - "knife_folding", - "makeshift_knife", - "primitive_knife", - "pockknife", - "copper_knife", - "diveknife", - "kris", - "switchblade", - "honey_scraper", - "fork", - "glass_shiv", - "scissors" - ] + "techniques": [ + "tec_crt_cqb_normal", + "tec_crt_cqb_rapid", + "tec_crt_cqb_rapid_wp", + "tec_crt_cqb_precise", + "tec_crt_cqb_arpen", + "tec_feint" + ], + "weapons": [ "knife_butter", "honey_scraper", "fork", "glass_shiv", "scissors" ] }, { "type": "technique", @@ -104,28 +79,40 @@ "name": "Measured Footwork", "min_unarmed": 1, "unarmed_allowed": true, - "mult_bonuses": [ [ "movecost", 0.85 ], [ "damage", "bash", 0.8 ], [ "damage", "cut", 1.0 ], [ "damage", "stab", 1.1 ] ], + "melee_allowed": false, + "mult_bonuses": [ [ "movecost", 0.85 ], [ "damage", "bash", 0.8 ], [ "damage", "cut", 1.025 ], [ "damage", "stab", 1.05 ] ], "flat_bonuses": [ [ "damage", "stab", "dex", 0.2 ], [ "damage", "cut", "dex", 0.1 ], [ "movecost", "dex", -0.15 ] ], - "messages": [ "You quickly batter %s", " batters %s" ], - "stun_dur": 0.1 + "messages": [ "You quickly dig your fingers into %s", " digs their fingers into %s" ] }, { "type": "technique", "id": "tec_crt_cqb_rapid", "name": "Rapid Burst", - "min_unarmed": 2, + "min_unarmed": 3, "unarmed_allowed": true, + "melee_allowed": true, "mult_bonuses": [ [ "movecost", 0.7 ], [ "damage", "bash", 0.66 ], [ "damage", "cut", 0.7 ], [ "damage", "stab", 0.8 ] ], "flat_bonuses": [ [ "damage", "stab", "dex", 0.015 ], [ "damage", "cut", "dex", 0.0125 ], [ "movecost", "dex", -0.35 ] ], - "messages": [ "You swiftly impale your fingers into %s joints", " swiftly impales their fingers into %s" ], - "stun_dur": 0.05 + "messages": [ "You swiftly impale your fingers into %s joints", " swiftly impales their fingers into %s" ] + }, + { + "type": "technique", + "id": "tec_crt_cqb_rapid_wp", + "name": "Joint Pain", + "min_melee": 3, + "unarmed_allowed": false, + "melee_allowed": true, + "mult_bonuses": [ [ "movecost", 0.8 ], [ "damage", "bash", 0.5 ], [ "damage", "cut", 0.66 ], [ "damage", "stab", 0.75 ] ], + "flat_bonuses": [ [ "damage", "stab", "dex", 0.015 ], [ "damage", "cut", "dex", 0.0125 ], [ "movecost", "dex", -0.35 ] ], + "messages": [ "You explosively jab your weapon at %s joints", " explosively jabs at %s" ] }, { "type": "technique", "id": "tec_crt_cqb_precise", "name": "Rapid Jab", - "min_unarmed": 3, + "min_unarmed": 4, "unarmed_allowed": true, + "melee_allowed": true, "mult_bonuses": [ [ "movecost", 0.8 ], [ "damage", "bash", 0.66 ], [ "damage", "cut", 1.1 ], [ "damage", "stab", 1.25 ] ], "flat_bonuses": [ [ "damage", "stab", "dex", 0.2 ], [ "damage", "cut", "dex", 0.01 ], [ "movecost", "dex", -0.2 ] ], "crit_tec": true, @@ -139,6 +126,7 @@ "min_unarmed": 5, "weighting": 2, "unarmed_allowed": true, + "melee_allowed": true, "mult_bonuses": [ [ "movecost", 0.9 ], [ "damage", "bash", 0.2 ], @@ -150,10 +138,10 @@ "flat_bonuses": [ [ "damage", "stab", "dex", 0.5 ], [ "damage", "cut", "dex", 0.25 ], [ "movecost", "dex", -0.5 ] ], "crit_tec": true, "messages": [ - "You envision a tempest in your hand and then land a piercing blow on %s's top half", + "You envision a gathering tempest in and then release it's energy on %s's top half", " lands a piercing blow on %s's face" ], "stun_dur": 1, - "down_dur": 1.25 + "down_dur": 2 } ] diff --git a/data/mods/CRT_EXPANSION/martial/crt_gun_techniques.json b/data/mods/CRT_EXPANSION/martial/crt_gun_techniques.json new file mode 100644 index 0000000000000..c6e3a52c72920 --- /dev/null +++ b/data/mods/CRT_EXPANSION/martial/crt_gun_techniques.json @@ -0,0 +1,32 @@ +[ + { + "type": "technique", + "id": "Pistol Whip", + "name": "HOOK", + "min_melee": 2, + "melee_allowed": true, + "mult_bonuses": [ [ "movecost", 0.95 ], [ "damage", "bash", 0.88 ], [ "damage", "cut", 0.66 ], [ "damage", "stab", 0.66 ] ], + "flat_bonuses": [ [ "movecost", "per", -0.25 ] ], + "stun_dur": 2, + "messages": [ "Your pistol whip sends %s careening", " smacks %s" ], + "description": "95% moves, 88% Bash, 66% Cut, 66% Stab, Down two turns, STR (C) greatly reduces action cost" + }, + { + "type": "technique", + "id": "INERTIAL", + "name": "Crowd Control", + "min_melee": 2, + "melee_allowed": true, + "knockback_dist": 1, + "mult_bonuses": [ [ "movecost", 0.6 ], [ "damage", "bash", 0.5 ], [ "damage", "cut", 0.5 ], [ "damage", "stab", 0.5 ] ], + "flat_bonuses": [ + [ "movecost", "str", -1.0 ], + [ "damage", "bash", "per", 0.15 ], + [ "damage", "stab", "per", 0.1 ], + [ "damage", "cut", "per", 0.1 ] + ], + "messages": [ "Your swing the stock of your weapon at %s", " strikes at %s" ], + "aoe": "wide", + "description": "60% moves, 50% damage, wide arc, STR (S) dramatically reduces action cost, and adds a (C) damage bonus, min 4 melee" + } +] diff --git a/data/mods/CRT_EXPANSION/martial/dragonslayertechn.json b/data/mods/CRT_EXPANSION/martial/dragonslayertechn.json index af5437118bd9d..44c2b458ccf62 100644 --- a/data/mods/CRT_EXPANSION/martial/dragonslayertechn.json +++ b/data/mods/CRT_EXPANSION/martial/dragonslayertechn.json @@ -4,6 +4,8 @@ "id": "BERSERK", "name": "BERSERK", "min_melee": 1, + "unarmed_allowed": false, + "melee_allowed": true, "mult_bonuses": [ [ "movecost", 0.3 ], [ "damage", "bash", 0.77 ], [ "damage", "cut", 0.77 ], [ "damage", "stab", 0.77 ] ], "flat_bonuses": [ [ "movecost", "str", -10 ], diff --git a/data/mods/CRT_EXPANSION/martial/generaltechn.json b/data/mods/CRT_EXPANSION/martial/generaltechn.json index f9aa1fb808407..68e857686ef48 100644 --- a/data/mods/CRT_EXPANSION/martial/generaltechn.json +++ b/data/mods/CRT_EXPANSION/martial/generaltechn.json @@ -17,14 +17,14 @@ "unarmed_allowed": true, "melee_allowed": true, "knockback_dist": 1, - "mult_bonuses": [ [ "movecost", 0.75 ], [ "damage", "bash", 0.6 ], [ "damage", "cut", 0.6 ], [ "damage", "stab", 0.6 ] ], + "mult_bonuses": [ [ "movecost", 0.6 ], [ "damage", "bash", 0.5 ], [ "damage", "cut", 0.5 ], [ "damage", "stab", 0.5 ] ], "flat_bonuses": [ [ "movecost", "str", -1.0 ], [ "damage", "bash", "str", 0.1 ], [ "damage", "stab", "str", 0.1 ], [ "damage", "cut", "str", 0.1 ] ], - "messages": [ "Your momentum causes your weapon to strike %s", " inertially strikes %s" ], + "messages": [ "Your momentum causes your weapon to glance off of %s", " inertially strikes %s" ], "aoe": "wide", "description": "75% moves, 60% damage, wide arc, STR (S) dramatically reduces action cost, and adds a (C) damage bonus, min 4 melee" }, @@ -36,7 +36,7 @@ "unarmed_allowed": true, "melee_allowed": true, "crit_tec": true, - "mult_bonuses": [ [ "movecost", 1.15 ], [ "damage", "bash", 1.05 ], [ "damage", "cut", 1.25 ], [ "damage", "stab", 1.05 ] ], + "mult_bonuses": [ [ "movecost", 1.18 ], [ "damage", "bash", 1.05 ], [ "damage", "cut", 1.25 ], [ "damage", "stab", 1.05 ] ], "flat_bonuses": [ [ "movecost", "dex", -0.2 ], [ "movecost", "per", -0.125 ], @@ -45,7 +45,7 @@ [ "damage", "stab", "per", 0.15 ] ], "messages": [ "You draw back your arm and release a well placed chop %s", " chops %s" ], - "description": "Crit only, 115% move cost, 105% Bash, 105% Stab, 125% Cut, DEX (D) and PER (E) reduces action cost and increases overall (B) damage, min 2 melee" + "description": "Crit only, 118% move cost, 105% Bash and Stab, 125% Cut, DEX (D) and PER (E) reduces action cost and increases overall (B) damage, min 2 melee" }, { "type": "technique", @@ -55,7 +55,7 @@ "unarmed_allowed": true, "melee_allowed": true, "crit_tec": true, - "mult_bonuses": [ [ "movecost", 1.1 ], [ "damage", "bash", 1.2 ], [ "damage", "cut", 1.1 ], [ "damage", "stab", 1.05 ] ], + "mult_bonuses": [ [ "movecost", 1.18 ], [ "damage", "bash", 1.2 ], [ "damage", "cut", 1.1 ], [ "damage", "stab", 1.05 ] ], "flat_bonuses": [ [ "movecost", "dex", -0.2 ], [ "movecost", "str", -0.125 ], @@ -79,7 +79,7 @@ "flat_bonuses": [ [ "movecost", "str", -0.8 ] ], "messages": [ "You lunge forward with all your weight and swing upwards at %s", - " swings upwards with all their weight %s" + " swings upwards with all their weight at %s" ], "description": "Crit only, 120% moves, 125% damage, Stun for 1.5 turns, STR (A) dramatically reduces action cost, min melee 1" }, @@ -104,10 +104,10 @@ "unarmed_allowed": false, "melee_allowed": true, "knockback_dist": 2, - "mult_bonuses": [ [ "movecost", 0.65 ], [ "damage", "bash", 1.1 ], [ "damage", "cut", 0 ], [ "damage", "stab", 1.1 ] ], + "mult_bonuses": [ [ "movecost", 0.75 ], [ "damage", "bash", 1.1 ], [ "damage", "cut", 0 ], [ "damage", "stab", 1.1 ] ], "flat_bonuses": [ [ "movecost", "str", -0.3 ], [ "movecost", "dex", -0.15 ] ], "messages": [ "You quickly shove %s out of the way with your weapon", " quickly shoves %s" ], - "description": "65% moves, no cut damage, 110% Bash and Stab damage, knockback 2 tiles, STR (B) and DEX (C) reduce action cost, min melee 1" + "description": "75% moves, no cut damage, 110% Bash and Stab damage, knockback 2 tiles, STR (B) and DEX (C) reduce action cost, min melee 1" }, { "type": "technique", diff --git a/data/mods/CRT_EXPANSION/martial/stabtechn.json b/data/mods/CRT_EXPANSION/martial/stabtechn.json index 2692a11e0a5f9..df168194afa8a 100644 --- a/data/mods/CRT_EXPANSION/martial/stabtechn.json +++ b/data/mods/CRT_EXPANSION/martial/stabtechn.json @@ -10,7 +10,7 @@ "weighting": 1, "mult_bonuses": [ [ "damage", "stab", 1.1 ] ], "flat_bonuses": [ [ "damage", "stab", "str", 0.1 ], [ "damage", "stab", "per", 0.2 ] ], - "messages": [ "You lean forward and stab at %s", " stabs into %s flesh" ], + "messages": [ "You step forward and stab at %s", " stabs into %s flesh" ], "description": "110% Stab damage, STR (E) and PER (D) provides bonus damage, min 1 melee" }, { diff --git a/data/mods/CRT_EXPANSION/modinfo.json b/data/mods/CRT_EXPANSION/modinfo.json index 8406903f81898..728e1c34b38d9 100644 --- a/data/mods/CRT_EXPANSION/modinfo.json +++ b/data/mods/CRT_EXPANSION/modinfo.json @@ -5,7 +5,7 @@ "name": "C.R.I.T Expansion Mod", "authors": [ "Soupster89" ], "maintainers": [ "Soupster89" ], - "description": "Adds new professions, guns, gunmods, enemies, materials, martial arts, melees/tools and weapon techniques.", + "description": "Adds a plethora of content: professions, guns/mods, WIP enemies, mutations, martial arts, melee weapons, and some QOL changes such as plants fromm cutting grass.", "category": "content", "dependencies": [ "dda" ] } diff --git a/data/mods/CRT_EXPANSION/monsters/crt_monster.json b/data/mods/CRT_EXPANSION/monsters/crt_monster.json index ae394e397a0a9..e10af6549cdf6 100644 --- a/data/mods/CRT_EXPANSION/monsters/crt_monster.json +++ b/data/mods/CRT_EXPANSION/monsters/crt_monster.json @@ -3,7 +3,7 @@ "id": "mon_slasher", "type": "MONSTER", "name": "Slasher Necromorph", - "description": "A horrifically twisted human body. Two massive blades have burst through its hands which are poised above its head endlessly as it stalks about with terrifying purpose.", + "description": "A horrifically twisted human body. Two massive, bladed appendages have burst through its shoulders where they are poised above its head as it stalks about with terrifying purpose.", "default_faction": "zombie", "categories": [ "CLASSIC" ], "species": [ "ZOMBIE", "HUMAN" ], @@ -42,6 +42,49 @@ "FILTHY" ] }, + { + "id": "mon_slasher_weak", + "type": "MONSTER", + "name": "Weak Slasher Necromorph", + "description": "A horrifically mutilated human body. Two scrawny blades have freshly bursted through its hand to deal with prey and the haunting visage of a jawless maw and a gaping wound in its forehead sends chills down your spine. The awkward steps it takes slows it down greatly.", + "default_faction": "zombie", + "categories": [ "CLASSIC" ], + "species": [ "ZOMBIE", "HUMAN" ], + "volume": "62500 ml", + "weight": 81500, + "hp": 100, + "speed": 60, + "material": [ "flesh" ], + "symbol": "N", + "color": "light_red", + "aggression": 100, + "morale": 100, + "melee_skill": 4, + "melee_dice": 3, + "melee_dice_sides": 3, + "melee_cut": 7, + "vision_night": 7, + "harvest": "zombie", + "special_attacks": [ { "type": "bite", "cooldown": 5 }, [ "GRAB", 7 ], [ "scratch", 10 ] ], + "death_drops": "default_zombie_death_drops", + "death_function": [ "NORMAL" ], + "burn_into": "mon_zombie_scorched", + "flags": [ + "SEES", + "HEARS", + "SMELLS", + "STUMBLES", + "WARM", + "BASHES", + "GROUP_BASH", + "POISON", + "BLEED", + "NO_BREATHE", + "REVIVES", + "PUSH_MON", + "FILTHY" + ] + }, { "id": "mon_waster", "type": "MONSTER", diff --git a/data/mods/CRT_EXPANSION/monsters/crt_monstergroups.json b/data/mods/CRT_EXPANSION/monsters/crt_monstergroups.json new file mode 100644 index 0000000000000..6c7422978b5fa --- /dev/null +++ b/data/mods/CRT_EXPANSION/monsters/crt_monstergroups.json @@ -0,0 +1,130 @@ +[ + { + "type": "monstergroup", + "name": "GROUP_NECROMORPH", + "default": "mon_slasher_weak", + "monsters": [ + { "monster": "mon_slasher_weak", "freq": 300, "cost_multiplier": 0, "pack_size": [ 2, 4 ] }, + { "monster": "mon_waster", "freq": 50, "cost_multiplier": 3 }, + { "monster": "mon_slasher", "freq": 100, "cost_multiplier": 0, "pack_size": [ 1, 2 ] } + ] + }, + { + "type": "monstergroup", + "name": "GROUP_LAB", + "default": "mon_zombie_scientist", + "monsters": [ + { "monster": "mon_blob_small", "freq": 25, "cost_multiplier": 0, "pack_size": [ 1, 4 ] }, + { "monster": "mon_zombie", "freq": 200, "cost_multiplier": 0, "pack_size": [ 1, 3 ] }, + { "monster": "mon_zombie_fat", "freq": 100, "cost_multiplier": 0, "pack_size": [ 1, 3 ] }, + { "monster": "mon_zombie_tough", "freq": 100, "cost_multiplier": 2, "pack_size": [ 1, 3 ] }, + { "monster": "mon_zombie_crawler", "freq": 100, "cost_multiplier": 0 }, + { "monster": "mon_zombie_labsecurity", "freq": 400, "cost_multiplier": 2, "pack_size": [ 1, 3 ] }, + { "monster": "mon_zombie_scientist", "freq": 500, "cost_multiplier": 1 }, + { "monster": "mon_zombie_scientist", "freq": 200, "cost_multiplier": 1, "pack_size": [ 1, 5 ] }, + { "monster": "mon_zombie_technician", "freq": 100, "cost_multiplier": 2 }, + { "monster": "mon_zombie_thorny", "freq": 50, "cost_multiplier": 5 }, + { "monster": "mon_zombie_hazmat", "freq": 100, "cost_multiplier": 0 }, + { "monster": "mon_science_bot", "freq": 50, "cost_multiplier": 15 }, + { "monster": "mon_manhack", "freq": 200, "cost_multiplier": 0 }, + { "monster": "mon_manhack", "freq": 45, "cost_multiplier": 0, "pack_size": [ 2, 3 ] }, + { "monster": "mon_mutant_experimental", "freq": 50, "cost_multiplier": 3 }, + { "monster": "mon_nakedmolerat_giant", "freq": 45, "cost_multiplier": 3 }, + { "monster": "mon_skitterbot", "freq": 85, "cost_multiplier": 0 }, + { "monster": "mon_skitterbot", "freq": 85, "cost_multiplier": 0, "pack_size": [ 2, 3 ] }, + { "monster": "mon_skitterbot", "freq": 1, "cost_multiplier": 0, "pack_size": [ 8, 12 ] }, + { "monster": "mon_secubot", "freq": 1, "cost_multiplier": 10 }, + { "monster": "mon_zombie_bio_op", "freq": 50, "cost_multiplier": 5 }, + { "monster": "mon_zombie_armored", "freq": 5, "cost_multiplier": 5 }, + { "monster": "mon_zombie_electric", "freq": 50, "cost_multiplier": 3 }, + { "monster": "mon_zombie_necro", "freq": 15, "cost_multiplier": 15 }, + { "monster": "mon_zombie_brute_shocker", "freq": 10, "cost_multiplier": 5 }, + { "monster": "mon_slasher_weak", "freq": 75, "cost_multiplier": 3, "pack_size": [ 2, 4 ] }, + { "monster": "mon_waster", "freq": 50, "cost_multiplier": 3 }, + { "monster": "mon_slasher", "freq": 100, "cost_multiplier": 0, "pack_size": [ 1, 2 ] } + ] + }, + { + "type": "monstergroup", + "name": "GROUP_LAB_SURFACE", + "default": "mon_zombie_scientist", + "monsters": [ + { "monster": "mon_zombie_labsecurity", "freq": 400, "cost_multiplier": 2, "pack_size": [ 1, 3 ] }, + { "monster": "mon_zombie_scientist", "freq": 600, "cost_multiplier": 1 }, + { "monster": "mon_zombie_scientist", "freq": 400, "cost_multiplier": 1, "pack_size": [ 1, 5 ] }, + { "monster": "mon_zombie_technician", "freq": 100, "cost_multiplier": 2 }, + { "monster": "mon_zombie_hazmat", "freq": 200, "cost_multiplier": 1 }, + { "monster": "mon_zombie_necro", "freq": 15, "cost_multiplier": 5 }, + { "monster": "mon_zombie_electric", "freq": 50, "cost_multiplier": 2 }, + { "monster": "mon_science_bot", "freq": 80, "cost_multiplier": 5 }, + { "monster": "mon_secubot", "freq": 1, "cost_multiplier": 5 }, + { "monster": "mon_zombie", "freq": 100, "cost_multiplier": 1, "pack_size": [ 1, 3 ] }, + { "monster": "mon_zombie_fat", "freq": 20, "cost_multiplier": 1, "pack_size": [ 1, 3 ] }, + { "monster": "mon_zombie_tough", "freq": 40, "cost_multiplier": 2, "pack_size": [ 1, 3 ] }, + { "monster": "mon_zombie_brute", "freq": 10, "cost_multiplier": 5 }, + { "monster": "mon_zombie_crawler", "freq": 50, "cost_multiplier": 1 }, + { "monster": "mon_manhack", "freq": 200, "cost_multiplier": 1 }, + { "monster": "mon_manhack", "freq": 45, "cost_multiplier": 1, "pack_size": [ 2, 3 ] }, + { "monster": "mon_mutant_experimental", "freq": 3, "cost_multiplier": 1 }, + { "monster": "mon_skitterbot", "freq": 85, "cost_multiplier": 1 }, + { "monster": "mon_skitterbot", "freq": 85, "cost_multiplier": 1, "pack_size": [ 2, 3 ] }, + { "monster": "mon_skitterbot", "freq": 10, "cost_multiplier": 1, "pack_size": [ 8, 12 ] }, + { "monster": "mon_blob_small", "freq": 10, "cost_multiplier": 1, "pack_size": [ 1, 4 ] }, + { "monster": "mon_zombie_bio_op", "freq": 50, "cost_multiplier": 5 }, + { "monster": "mon_zombie_armored", "freq": 5, "cost_multiplier": 5 }, + { "monster": "mon_zombie_brute_shocker", "freq": 5, "cost_multiplier": 5 } + ] + }, + { + "type": "monstergroup", + "name": "GROUP_LAB_SECURITY", + "default": "mon_zombie_labsecurity", + "monsters": [ + { "monster": "mon_zombie_labsecurity", "freq": 700, "cost_multiplier": 2 }, + { "monster": "mon_science_bot", "freq": 50, "cost_multiplier": 4 }, + { "monster": "mon_manhack", "freq": 200, "cost_multiplier": 0 }, + { "monster": "mon_manhack", "freq": 45, "cost_multiplier": 0, "pack_size": [ 2, 3 ] }, + { "monster": "mon_skitterbot", "freq": 85, "cost_multiplier": 0 }, + { "monster": "mon_skitterbot", "freq": 85, "cost_multiplier": 0, "pack_size": [ 2, 3 ] }, + { "monster": "mon_skitterbot", "freq": 1, "cost_multiplier": 0, "pack_size": [ 8, 12 ] }, + { "monster": "mon_turret", "freq": 85, "cost_multiplier": 0 }, + { "monster": "mon_secubot", "freq": 1, "cost_multiplier": 10 }, + { "monster": "mon_zombie_bio_op", "freq": 50, "cost_multiplier": 5 }, + { "monster": "mon_zombie_armored", "freq": 5, "cost_multiplier": 8 }, + { "monster": "mon_zombie_electric", "freq": 50, "cost_multiplier": 3 }, + { "monster": "mon_zombie_necro", "freq": 15, "cost_multiplier": 15 }, + { "monster": "mon_zombie_brute_shocker", "freq": 10, "cost_multiplier": 5 }, + { "monster": "mon_twitcher", "freq": 20, "cost_multiplier": 6 }, + { "monster": "mon_waster", "freq": 200, "cost_multiplier": 4 }, + { "monster": "mon_leaper", "freq": 150, "cost_multiplier": 3, "pack_size": [ 1, 2 ] } + ] + }, + { + "type": "monstergroup", + "name": "GROUP_LAB_FEMA", + "default": "mon_zombie_scientist", + "//": "Mostly scientists, lab personnel and regular zombies.", + "monsters": [ + { "monster": "mon_zombie", "freq": 75, "cost_multiplier": 0 }, + { "monster": "mon_zombie_fat", "freq": 75, "cost_multiplier": 0 }, + { "monster": "mon_zombie_tough", "freq": 75, "cost_multiplier": 2 }, + { "monster": "mon_zombie_crawler", "freq": 75, "cost_multiplier": 0 }, + { "monster": "mon_zombie_labsecurity", "freq": 200, "cost_multiplier": 2, "pack_size": [ 1, 2 ] }, + { "monster": "mon_zombie_scientist", "freq": 200, "cost_multiplier": 1, "pack_size": [ 1, 3 ] }, + { "monster": "mon_zombie_technician", "freq": 100, "cost_multiplier": 2 }, + { "monster": "mon_zombie_hazmat", "freq": 100, "cost_multiplier": 0 }, + { "monster": "mon_zombie_electric", "freq": 10, "cost_multiplier": 3 }, + { "monster": "mon_zombie_brute", "freq": 5, "cost_multiplier": 5 }, + { "monster": "mon_zombie_brute_shocker", "freq": 5, "cost_multiplier": 5 } + ] + }, + { + "type": "monstergroup", + "name": "GROUP_LAB_CYBORG", + "default": "mon_broken_cyborg", + "monsters": [ + { "monster": "mon_prototype_cyborg", "freq": 400, "cost_multiplier": 0 }, + { "monster": "mon_twitcher", "freq": 10, "cost_multiplier": 5 } + ] + } +] diff --git a/data/mods/CRT_EXPANSION/mutations/crt_mutatinoc.json b/data/mods/CRT_EXPANSION/mutations/crt_mutatinoc.json index c98a56097d359..cbcfeeb462795 100644 --- a/data/mods/CRT_EXPANSION/mutations/crt_mutatinoc.json +++ b/data/mods/CRT_EXPANSION/mutations/crt_mutatinoc.json @@ -22,7 +22,10 @@ "description": "Aside from your appearances, your movements are incredibly graceful and allow you to seemingly glide through every task.", "thresheq": [ "THRESH_VAMP" ], "category": [ "VAMP" ], - "stealth_modifier": 5 + "stealth_modifier": 5, + "noise_modifier": 0.2, + "movecost_modifier": 0.9, + "attackcost_modifier": 0.9 }, { "type": "mutation", @@ -36,6 +39,6 @@ "prereqs": [ "BEAUTIFUL" ], "cancels": [ "BIRD_EYE", "LIZ_EYE", "FEL_EYE", "URSINE_EYE", "COMPOUND_EYES", "ELFAEYES" ], "category": [ "VAMP" ], - "social_modifiers": { "lie": 1, "persuade": 7, "intimidate": 1 } + "social_modifiers": { "lie": 5, "persuade": 10, "intimidate": 1 } } ] diff --git a/data/mods/CRT_EXPANSION/mutations/crt_mutations.json b/data/mods/CRT_EXPANSION/mutations/crt_mutations.json deleted file mode 100644 index 459651bc59b6c..0000000000000 --- a/data/mods/CRT_EXPANSION/mutations/crt_mutations.json +++ /dev/null @@ -1,1186 +0,0 @@ -[ - { - "type": "mutation", - "id": "THRESH_VAMP", - "name": "Night Walker", - "points": 1, - "description": "Emerge from the grave of the old world, and become the night once again.", - "//": "Parallel reference to Woken Furies quote from the Altered Carbon series and song.", - "valid": false, - "purifiable": false, - "threshold": true - }, - { - "type": "mutation", - "id": "UNSTABLE", - "name": "Genetically Unstable", - "points": -2, - "mixed_effect": true, - "description": "Your DNA has been damaged in a way that causes you to continually develop more mutations.", - "changes_to": [ "CHAOTIC" ], - "category": [ "SLIME", "MEDICAL", "CHIMERA", "VAMP" ] - }, - { - "type": "mutation", - "id": "HISS", - "name": "Hissing Voice", - "mixed_effect": true, - "points": -1, - "description": "You hiss when speaking. Persuading NPCs will be more difficult, but threatening them will be easier.", - "category": [ "LIZARD", "RAPTOR", "VAMP" ], - "social_modifiers": { "persuade": -20, "lie": -10, "intimidate": 10 } - }, - { - "type": "mutation", - "id": "FLEET", - "name": "Fleet-Footed", - "points": 2, - "description": "You can move more quickly than most, resulting in a 15% speed bonus on sure footing.", - "starting_trait": true, - "changes_to": [ "FLEET2" ], - "category": [ "SPIDER", "MOUSE", "VAMP" ], - "types": [ "RUNNING" ] - }, - { - "type": "mutation", - "id": "BADTEMPER", - "name": "Bad Temper", - "points": -2, - "description": "Things just keep getting you down. You tend to be unhappy, and it takes some doing to cheer you up.", - "starting_trait": true, - "cancels": [ "OPTIMISTIC" ], - "category": [ "URSINE", "LIZARD", "CHIMERA", "VAMP" ] - }, - { - "type": "mutation", - "id": "INSOMNIA", - "name": "Insomniac", - "points": -2, - "description": "You have a hard time falling asleep, even under the best circumstances!", - "starting_trait": true, - "valid": false, - "category": [ "MEDICAL", "VAMP" ], - "cancels": [ "EASYSLEEPER" ] - }, - { - "type": "mutation", - "id": "THINSKIN", - "name": "Thin-Skinned", - "points": -1, - "description": "Your skin is fragile. Cutting damage is slightly increased for you.", - "starting_trait": true, - "category": [ "VAMP" ], - "cancels": [ "THICKSKIN" ], - "armor": [ { "parts": "ALL", "cut": -1 } ] - }, - { - "type": "mutation", - "id": "LIGHTWEIGHT", - "name": "Lightweight", - "points": -1, - "description": "Alcohol and drugs go straight to your head. You suffer the negative effects of these for longer.", - "starting_trait": true, - "category": [ "MEDICAL", "VAMP" ], - "cancels": [ "DRUNKEN", "TOLERANCE" ] - }, - { - "type": "mutation", - "id": "NARCOLEPTIC", - "name": "Narcoleptic", - "points": -3, - "description": "You randomly fall asleep without any reason.", - "starting_trait": true, - "valid": false, - "category": [ "MEDICAL", "VAMP" ] - }, - { - "type": "mutation", - "id": "JITTERY", - "name": "Jittery", - "points": -3, - "description": "During moments of great stress or under the effects of stimulants, you may find your hands shaking uncontrollably, severely reducing your dexterity.", - "starting_trait": true, - "valid": false, - "category": [ "MEDICAL", "MOUSE", "VAMP" ] - }, - { - "type": "mutation", - "id": "MOODSWINGS", - "name": "Mood Swings", - "points": -1, - "description": "Your morale will shift up and down at random, often dramatically.", - "starting_trait": true, - "valid": false, - "category": [ "MEDICAL", "VAMP" ] - }, - { - "type": "mutation", - "id": "WEAKSTOMACH", - "name": "Weak Stomach", - "points": -1, - "description": "You are more likely to throw up from food poisoning, alcohol, etc.", - "starting_trait": true, - "category": [ "VAMP" ], - "changes_to": [ "NAUSEA" ], - "cancels": [ "STRONGSTOMACH" ] - }, - { - "type": "mutation", - "id": "CHEMIMBALANCE", - "name": "Chemical Imbalance", - "points": -2, - "description": "You suffer from a minor chemical imbalance, whether mental or physical. Minor changes to your internal chemistry will manifest themselves on occasion, such as hunger, sleepiness, narcotic effects, etc.", - "starting_trait": true, - "category": [ "SLIME", "MEDICAL", "CHIMERA", "ELFA", "VAMP" ] - }, - { - "type": "mutation", - "id": "GOODHEARING", - "name": "Good Hearing", - "points": 1, - "description": "Your hearing is better than average, and you can hear distant sounds more easily.", - "starting_trait": true, - "category": [ "ALPHA", "MOUSE", "VAMP" ], - "cancels": [ "BADHEARING" ] - }, - { - "type": "mutation", - "id": "OUTDOORSMAN", - "name": "Outdoorsman", - "points": 1, - "description": "You are accustomed to being exposed to the elements. This decreases morale penalties for being wet.", - "starting_trait": true, - "category": [ "VAMP" ], - "valid": false, - "wet_protection": [ - { "part": "HEAD", "ignored": 6 }, - { "part": "LEG_L", "ignored": 8 }, - { "part": "LEG_R", "ignored": 8 }, - { "part": "FOOT_L", "ignored": 2 }, - { "part": "FOOT_R", "ignored": 2 }, - { "part": "ARM_L", "ignored": 8 }, - { "part": "ARM_R", "ignored": 8 }, - { "part": "HAND_L", "ignored": 12 }, - { "part": "HAND_R", "ignored": 12 }, - { "part": "TORSO", "ignored": 10 } - ] - }, - { - "type": "mutation", - "id": "PARKOUR", - "name": "Parkour Expert", - "points": 2, - "description": "You're skilled at clearing obstacles; terrain like railings or counters are as easy for you to move on as solid ground.", - "starting_trait": true, - "category": [ "VAMP" ], - "valid": false, - "cancels": [ "BADKNEES" ] - }, - { - "type": "mutation", - "id": "GOODCARDIO", - "name": "Indefatigable", - "points": 2, - "description": "Whether due to exercise and good diet, or due to a natural propensity to physical endurance, you tire due to physical exertion much less readily than others. Your maximum stamina is 25% higher than usual.", - "starting_trait": true, - "valid": false, - "cancels": [ "BADCARDIO" ], - "changes_to": [ "GOODCARDIO2" ], - "category": [ "FISH", "LUPINE", "MOUSE", "INSECT", "VAMP" ] - }, - { - "type": "mutation", - "id": "RADIOGENIC", - "name": "Radiogenic", - "points": 3, - "description": "Your system has adapted to radiation. While irradiated, you will actually heal slowly, converting the radiation into hit points.", - "category": [ "SLIME", "MEDICAL", "VAMP" ] - }, - { - "type": "mutation", - "id": "INFRESIST", - "name": "Infection Resistant", - "points": 2, - "description": "Your immune system is particularly good at resisting infections. You have an increased chance for bad wounds and infections to heal on their own, and only suffer reduced penalties from them.", - "starting_trait": true, - "changes_to": [ "INFIMMUNE" ], - "category": [ "TROGLOBITE", "RAT", "MEDICAL", "VAMP" ] - }, - { - "type": "mutation", - "id": "INFIMMUNE", - "name": "Infection Immune", - "points": 3, - "description": "Your bloodstream has developed antibiotic properties. Your wounds will never become infected.", - "prereqs": [ "DISRESISTANT" ], - "prereqs2": [ "INFRESIST" ], - "category": [ "MEDICAL", "VAMP" ] - }, - { - "type": "mutation", - "id": "PARAIMMUNE", - "name": "Parasite Immune", - "points": 1, - "description": "Your body is unusually inhospitable to parasitic lifeforms. You will never become infested with internal parasites.", - "prereqs": [ "DISRESISTANT" ], - "prereqs2": [ "INFRESIST" ], - "category": [ "ELFA", "CHIMERA", "MEDICAL", "SLIME", "VAMP" ] - }, - { - "type": "mutation", - "id": "BENDY1", - "name": "Stretchy Limbs", - "points": 1, - "visibility": 1, - "description": "Your limbs seem to have a little more 'give' to them. +1 Dexterity.", - "changes_to": [ "BENDY2" ], - "threshreq": [ "THRESH_SLIME", "THRESH_ELFA", "THRESH_VAMP" ], - "category": [ "SLIME", "ELFA", "VAMP" ], - "passive_mods": { "dex_mod": 1 } - }, - { - "type": "mutation", - "id": "QUICK", - "name": "Quick", - "points": 3, - "description": "You're just generally quick! You get a 10% bonus to action points.", - "starting_trait": true, - "category": [ "FISH", "BIRD", "INSECT", "TROGLOBITE", "CHIMERA", "RAPTOR", "MOUSE", "VAMP" ] - }, - { - "type": "mutation", - "id": "EASYSLEEPER", - "name": "Accomplished Sleeper", - "points": 1, - "description": "You have always been able to fall asleep easily, even when sleeping in less than ideal circumstances.", - "changes_to": [ "EASYSLEEPER2" ], - "starting_trait": true, - "valid": false, - "cancels": [ "INSOMNIA" ], - "category": [ "MOUSE", "INSECT", "VAMP" ] - }, - { - "type": "mutation", - "id": "TOUGH", - "name": "Tough", - "points": 2, - "description": "It takes a lot to bring you down! You get a 20% bonus to all hit points.", - "starting_trait": true, - "valid": false, - "cancels": [ "FLIMSY", "FLIMSY2", "FLIMSY3", "GLASSJAW" ], - "changes_to": [ "TOUGH2" ], - "social_modifiers": { "intimidate": 2 }, - "hp_modifier": 0.2 - }, - { - "type": "mutation", - "id": "TOUGH2", - "name": "Durable", - "points": 3, - "description": "You can shrug off almost anything! You get a 30% bonus to all hit points.", - "valid": false, - "cancels": [ "FLIMSY", "FLIMSY2", "FLIMSY3", "GLASSJAW" ], - "prereqs": [ "TOUGH" ], - "changes_to": [ "TOUGH3" ], - "social_modifiers": { "intimidate": 3 }, - "hp_modifier": 0.3 - }, - { - "type": "mutation", - "id": "SLEEPY", - "name": "Sleepy", - "points": -1, - "description": "You need sleep more often, but still spend most of your time awake.", - "changes_to": [ "SLEEPY2", "MET_RAT" ], - "starting_trait": true, - "types": [ "SLEEP" ], - "category": [ "BEAST", "CHIMERA", "MOUSE", "VAMP" ], - "fatigue_modifier": 0.333, - "fatigue_regen_modifier": 0.333 - }, - { - "type": "mutation", - "id": "STRONGBACK", - "name": "Strong Back", - "points": 2, - "description": "You are capable of carrying far more than someone with similar strength could. Your maximum weight carried is increased by 35%.", - "starting_trait": true, - "category": [ "VAMP" ], - "valid": false, - "cancels": [ "BADBACK" ] - }, - { - "type": "mutation", - "id": "FASTLEARNER", - "name": "Fast Learner", - "points": 3, - "description": "You have a flexible mind, allowing you to learn skills much faster than others. Note that this only applies to real-world experience, not to skill gain from other sources like books.", - "starting_trait": true, - "category": [ "VAMP" ], - "valid": false, - "cancels": [ "SLOWLEARNER" ] - }, - { - "type": "mutation", - "id": "GOODMEMORY", - "name": "Good Memory", - "points": 3, - "description": "You have a an exceptional memory, and find it easy to remember things. Your skills will erode slightly slower than usual, and you can remember more terrain.", - "starting_trait": true, - "category": [ "VAMP" ], - "valid": false, - "cancels": [ "FORGETFUL" ] - }, - { - "type": "mutation", - "id": "DEFT", - "name": "Deft", - "points": 1, - "description": "While you're not any better at melee combat, you are better at recovering from a miss, and will be able to attempt another strike faster.", - "starting_trait": true, - "category": [ "BIRD", "BEAST", "RAPTOR", "MOUSE", "VAMP" ] - }, - { - "type": "mutation", - "id": "FLIMSY", - "name": "Flimsy", - "points": -4, - "description": "Your body can't take much abuse. Its maximum HP is 25% lower than usual and you heal slightly slower. Stacks with Glass Jaw.", - "starting_trait": true, - "valid": false, - "social_modifiers": { "intimidate": -2 }, - "cancels": [ "TOUGH", "TOUGH2", "TOUGH3" ], - "category": [ "MOUSE", "VAMP" ], - "changes_to": [ "FLIMSY2" ], - "hp_modifier": -0.25 - }, - { - "type": "mutation", - "id": "TERRIFYING", - "name": "Terrifying", - "points": 1, - "description": "There's something about you that creatures find frightening, and they are more likely to try to flee.", - "starting_trait": true, - "category": [ "BEAST", "INSECT", "CHIMERA", "VAMP" ], - "social_modifiers": { "intimidate": 15 } - }, - { - "type": "mutation", - "id": "DISRESISTANT", - "name": "Disease Resistant", - "points": 1, - "description": "It's very unlikely that you will catch ambient diseases like a cold or the flu.", - "starting_trait": true, - "changes_to": [ "DISIMMUNE" ], - "category": [ "CATTLE", "RAT", "MEDICAL", "VAMP" ] - }, - { - "type": "mutation", - "id": "SELFAWARE", - "name": "Self-Aware", - "points": 1, - "description": "You get to see your exact amount of HP remaining and health, instead of only having a vague idea of whether you're in good condition or not.", - "starting_trait": true, - "valid": false, - "active": true, - "category": [ "MEDICAL", "VAMP" ] - }, - { - "type": "mutation", - "id": "INCONSPICUOUS", - "name": "Inconspicuous", - "points": 1, - "description": "While sleeping or staying still, it is less likely that monsters will wander close to you.", - "category": [ "VAMP" ], - "social_modifiers": { "lie": 2 }, - "valid": false - }, - { - "type": "mutation", - "id": "STYLISH", - "name": "Stylish", - "points": 2, - "description": "Practicality is far less important than style. Your morale is improved by wearing fashionable and attractive clothing.", - "starting_trait": true, - "category": [ "VAMP" ], - "valid": false - }, - { - "type": "mutation", - "id": "EAGLEEYED", - "//": "Can't change the ID as that breaks save-compatibility.", - "name": "Scout", - "points": 1, - "description": "You're an excellent navigator and your ability to spot distant landmarks is unmatched. Your sight radius on the overmap extends beyond the normal range.", - "valid": false, - "starting_trait": true, - "category": [ "MOUSE", "VAMP" ], - "cancels": [ "MYOPIC", "UNOBSERVANT" ] - }, - { - "type": "mutation", - "id": "MYOPIC", - "name": "Near-Sighted", - "points": -2, - "description": "Without your glasses, your seeing radius is severely reduced! However, while wearing glasses this trait has no effect, and you are guaranteed to start with a pair.", - "starting_trait": true, - "cancels": [ "URSINE_EYE", "EAGLEEYED" ], - "category": [ "BEAST", "TROGLOBITE", "VAMP" ] - }, - { - "type": "mutation", - "id": "CANNIBAL", - "name": "Cannibal", - "points": 1, - "description": "For your whole life you've been forbidden from indulging in your peculiar tastes. Now the world's ended, and you'll be damned if anyone is going to tell you that you can't eat people.", - "starting_trait": true, - "category": [ "VAMP" ], - "valid": false, - "cancels": [ "VEGETARIAN" ], - "flags": [ "CANNIBAL" ] - }, - { - "type": "mutation", - "id": "PSYCHOPATH", - "name": "Psychopath", - "points": 2, - "description": "You don't experience guilt like others do. Even when you know your actions are wrong, you just don't care.", - "category": [ "VAMP" ], - "starting_trait": true, - "valid": false, - "social_modifiers": { "intimidate": 5 }, - "cancels": [ "PACIFIST" ], - "flags": [ "CANNIBAL" ] - }, - { - "type": "mutation", - "id": "WEAKSCENT", - "name": "Weak Scent", - "points": 1, - "description": "Your scent is quite weak. Animals that track your scent will do so with more difficulty.", - "starting_trait": true, - "category": [ "ALPHA", "VAMP" ], - "types": [ "SCENT" ] - }, - { - "type": "mutation", - "id": "LIAR", - "name": "Skilled Liar", - "points": 1, - "description": "You have no qualms about bending the truth, and have practically no tells. Telling lies and otherwise bluffing will be much easier for you.", - "starting_trait": true, - "category": [ "VAMP" ], - "cancels": [ "TRUTHTELLER" ], - "social_modifiers": { "lie": 40 } - }, - { - "type": "mutation", - "id": "WAKEFUL", - "name": "Less Sleep", - "points": 1, - "description": "You need less sleep than the average person.", - "changes_to": [ "WAKEFUL2" ], - "types": [ "SLEEP" ], - "starting_trait": true, - "category": [ "ALPHA", "ELFA", "VAMP" ], - "fatigue_modifier": -0.15 - }, - { - "type": "mutation", - "id": "WAKEFUL2", - "name": "Very Little Sleep", - "points": 3, - "description": "You don't sleep often. But when you do, you need very little of it.", - "valid": false, - "types": [ "SLEEP" ], - "prereqs": [ "WAKEFUL" ], - "changes_to": [ "WAKEFUL3" ], - "threshreq": [ "THRESH_ALPHA", "THRESH_ELFA", "THRESH_VAMP" ], - "category": [ "ALPHA", "ELFA", "VAMP" ], - "fatigue_modifier": -0.25 - }, - { - "type": "mutation", - "id": "PRETTY", - "name": "Pretty", - "points": 1, - "ugliness": -2, - "description": "You are a sight to behold. NPCs who care about such thing will react more kindly to you.", - "starting_trait": true, - "category": [ "ALPHA", "FELINE", "LUPINE", "VAMP" ], - "cancels": [ "UGLY", "DEFORMED", "DEFORMED2", "DEFORMED3" ], - "changes_to": [ "BEAUTIFUL" ] - }, - { - "type": "mutation", - "id": "BEAUTIFUL", - "name": "Beautiful", - "points": 2, - "visibility": -4, - "ugliness": -4, - "description": "You're a real head-turner. Some people will react well to your appearance, and most people have an easier time trusting you.", - "category": [ "VAMP" ], - "cancels": [ "UGLY", "DEFORMED", "DEFORMED2", "DEFORMED3" ], - "prereqs": [ "PRETTY" ], - "changes_to": [ "BEAUTIFUL2" ] - }, - { - "type": "mutation", - "id": "BEAUTIFUL2", - "name": "Very Beautiful", - "points": 3, - "visibility": -7, - "ugliness": -7, - "description": "You are a vision of beauty. Some people will react very well to your looks, and most people will trust you immediately.", - "category": [ "VAMP" ], - "cancels": [ "UGLY", "DEFORMED", "DEFORMED2", "DEFORMED3" ], - "prereqs": [ "BEAUTIFUL" ], - "changes_to": [ "BEAUTIFUL3" ] - }, - { - "type": "mutation", - "id": "BEAUTIFUL3", - "name": "Glorious", - "points": 4, - "visibility": -10, - "ugliness": -10, - "description": "You are incredibly beautiful. People cannot help themselves for your charms, and will do whatever they can to please you.", - "cancels": [ "UGLY", "DEFORMED", "DEFORMED2", "DEFORMED3" ], - "prereqs": [ "BEAUTIFUL2" ], - "category": [ "ELFA", "VAMP" ] - }, - { - "type": "mutation", - "id": "LIGHTSTEP", - "name": "Light Step", - "points": 1, - "description": "You make less noise while walking. You're also less likely to set off traps.", - "starting_trait": true, - "category": [ "BIRD", "ELFA", "FELINE", "VAMP" ], - "cancels": [ "CLUMSY" ] - }, - { - "type": "mutation", - "id": "DEBUG_SILENT", - "name": "Silent Movement", - "points": 6, - "valid": false, - "description": "You know how to move completely silently.", - "threshreq": [ "THRESH_VAMP" ], - "category": [ "VAMP" ] - }, - { - "type": "mutation", - "id": "SLOWHEALER2", - "name": "Poor Healer", - "points": -4, - "description": "Your health recovery through sleeping is severely impaired and causes you to recover only a third of usual HP over time.", - "starting_trait": true, - "category": [ "VAMP" ], - "valid": false, - "purifiable": false, - "types": [ "HEALING" ], - "healing_resting": -0.66 - }, - { - "type": "mutation", - "id": "HEAVYSLEEPER", - "name": "Heavy Sleeper", - "points": -1, - "description": "You're quite the heavy sleeper. Noises are unlikely to wake you up.", - "changes_to": [ "HEAVYSLEEPER2" ], - "starting_trait": true, - "category": [ "INSECT", "PLANT", "MEDICAL", "LUPINE", "VAMP" ] - }, - { - "type": "mutation", - "id": "HEAVYSLEEPER2", - "name": "Very Heavy Sleeper", - "points": -2, - "description": "You could probably sleep through a firefight.", - "valid": false, - "prereqs": [ "HEAVYSLEEPER" ], - "category": [ "BEAST", "LUPINE", "VAMP" ] - }, - { - "type": "mutation", - "id": "ANIMALDISCORD", - "name": "Animal Discord", - "points": -1, - "description": "Most animals don't like you, and aggressive animals are more likely to attack you. This only applies to natural animals such as woodland creatures.", - "starting_trait": true, - "cancels": [ "ANIMALEMPATH" ], - "changes_to": [ "ANIMALDISCORD2" ], - "category": [ "LUPINE", "BEAST", "RAPTOR", "INSECT", "VAMP" ] - }, - { - "type": "mutation", - "id": "ANIMALDISCORD2", - "name": "Prey Animal", - "points": -3, - "description": "Natural animals like dogs and wolves see you as prey or a threat, and are liable to attack you on sight.", - "cancels": [ "ANIMALEMPATH" ], - "prereqs": [ "ANIMALDISCORD" ], - "category": [ "MOUSE", "VAMP" ] - }, - { - "type": "mutation", - "id": "NIGHTVISION", - "name": "Night Vision", - "points": 2, - "description": "You possess natural night vision, and can see further in the dark than most. Activate to toggle NV-visible areas on or off.", - "starting_trait": true, - "changes_to": [ "NIGHTVISION2" ], - "cancels": [ "ELFA_NV", "ELFA_FNV", "FEL_NV", "URSINE_EYE" ], - "category": [ "BIRD", "CATTLE", "INSECT", "VAMP" ], - "active": true, - "starts_active": true - }, - { - "type": "mutation", - "id": "NIGHTVISION2", - "name": "High Night Vision", - "points": 4, - "description": "You can see incredibly well in the dark! Activate to toggle NV-visible areas on or off.", - "prereqs": [ "NIGHTVISION" ], - "changes_to": [ "NIGHTVISION3" ], - "cancels": [ "ELFA_NV", "ELFA_FNV", "FEL_NV", "URSINE_EYE" ], - "category": [ "FISH", "BEAST", "INSECT", "RAT", "CHIMERA", "LUPINE", "MOUSE", "VAMP" ], - "active": true, - "starts_active": true - }, - { - "type": "mutation", - "id": "NIGHTVISION3", - "name": "Full Night Vision", - "points": 6, - "description": "You can see in pitch blackness as if you were wearing night-vision goggles. Activate to toggle NV-visible areas on or off.", - "prereqs": [ "NIGHTVISION2" ], - "leads_to": [ "INFRARED" ], - "cancels": [ "ELFA_NV", "ELFA_FNV", "FEL_NV", "URSINE_EYE" ], - "category": [ "FISH", "TROGLOBITE", "SPIDER", "VAMP" ], - "active": true, - "starts_active": true - }, - { - "type": "mutation", - "id": "ELFAEYES", - "name": "Fey Eyes", - "points": 1, - "description": "Your eyes have turned...green. It's tough to tell the exact shade as it seems to shift. The effect is ...pleasant.", - "leads_to": [ "ELFA_NV" ], - "valid": false, - "cancels": [ "BIRD_EYE", "LIZ_EYE", "FEL_EYE", "URSINE_EYE", "COMPOUND_EYES" ], - "category": [ "ELFA", "VAMP" ], - "social_modifiers": { "lie": 5, "persuade": 5, "intimidate": -5 } - }, - { - "type": "mutation", - "id": "FASTHEALER", - "name": "Fast Healer", - "points": 2, - "description": "You heal faster when sleeping and will even recover small amount of HP when not sleeping.", - "starting_trait": true, - "types": [ "HEALING" ], - "changes_to": [ "FASTHEALER2", "REGEN_LIZ" ], - "category": [ "MEDICAL", "VAMP" ], - "healing_awake": 0.2, - "healing_resting": 0.5 - }, - { - "type": "mutation", - "id": "FASTHEALER2", - "name": "Very Fast Healer", - "points": 4, - "description": "Your flesh regenerates slowly, and you will regain HP even when not sleeping.", - "types": [ "HEALING" ], - "prereqs": [ "FASTHEALER" ], - "changes_to": [ "REGEN" ], - "category": [ "PLANT", "VAMP" ], - "healing_awake": 0.66, - "healing_resting": 0.5 - }, - { - "type": "mutation", - "id": "REGEN", - "name": "Regeneration", - "points": 6, - "description": "Your flesh regenerates from wounds incredibly quickly.", - "types": [ "HEALING" ], - "prereqs": [ "FASTHEALER2" ], - "category": [ "SLIME", "TROGLOBITE", "VAMP" ], - "healing_awake": 2.0, - "healing_resting": 1.5 - }, - { - "type": "mutation", - "id": "FANGS", - "name": "Fangs", - "points": 2, - "visibility": 2, - "ugliness": 2, - "description": "Your teeth have grown into two-inch-long fangs, allowing you to make an extra attack when conditions favor it.", - "types": [ "TEETH" ], - "changes_to": [ "SABER_TEETH", "SHARKTEETH" ], - "category": [ "LIZARD", "FISH", "LUPINE", "FELINE", "CHIMERA", "VAMP" ], - "attacks": [ - { - "attack_text_u": "You sink your fangs into %s", - "attack_text_npc": "%1$s sinks their fangs into %2$s", - "blocker_mutations": [ "MUZZLE", "MUZZLE_LONG", "MUZZLE_RAT" ], - "body_part": "MOUTH", - "chance": 20, - "base_damage": { "damage_type": "stab", "amount": 20 } - }, - { - "attack_text_u": "You sink your fangs into %s", - "attack_text_npc": "%1$s sinks their fangs into %2$s", - "required_mutations": [ "MUZZLE" ], - "body_part": "MOUTH", - "chance": 18, - "base_damage": { "damage_type": "stab", "amount": 20 } - }, - { - "attack_text_u": "You sink your fangs into %s", - "attack_text_npc": "%1$s sinks their fangs into %2$s", - "required_mutations": [ "MUZZLE_LONG" ], - "body_part": "MOUTH", - "chance": 15, - "base_damage": { "damage_type": "stab", "amount": 20 } - }, - { - "attack_text_u": "You sink your fangs into %s", - "attack_text_npc": "%1$s sinks their fangs into %2$s", - "required_mutations": [ "MUZZLE_RAT" ], - "body_part": "MOUTH", - "chance": 19, - "base_damage": { "damage_type": "stab", "amount": 20 } - } - ] - }, - { - "type": "mutation", - "id": "LIGHT_BONES", - "name": "Light Bones", - "points": 2, - "description": "Your bones are very light. This enables you to move and attack 10% faster, but also reduces your carrying weight by 20% and makes bashing attacks hurt a little more.", - "category": [ "MOUSE", "VAMP" ], - "changes_to": [ "HOLLOW_BONES" ] - }, - { - "type": "mutation", - "id": "NAILS", - "name": "Long Fingernails", - "points": 1, - "visibility": 1, - "description": "Your fingernails are long and sharp. If you aren't wearing gloves, your unarmed attacks deal a minor amount of cutting damage.", - "types": [ "CLAWS" ], - "changes_to": [ "CLAWS", "TALONS" ], - "cancels": [ "ARM_TENTACLES", "ARM_TENTACLES_4", "ARM_TENTACLES_8" ], - "category": [ "RAPTOR", "VAMP" ] - }, - { - "type": "mutation", - "id": "CLAWS", - "name": "Claws", - "points": 2, - "visibility": 3, - "ugliness": 2, - "description": "You have claws on the ends of your fingers. If you aren't wearing gloves, your unarmed attacks deal a minor amount of cutting damage.", - "types": [ "CLAWS" ], - "prereqs": [ "NAILS" ], - "changes_to": [ "CLAWS_RETRACT", "CLAWS_RAT" ], - "cancels": [ "ARM_TENTACLES", "ARM_TENTACLES_4", "ARM_TENTACLES_8" ], - "category": [ "BEAST", "RAT", "URSINE", "VAMP" ] - }, - { - "type": "mutation", - "id": "CLAWS_RETRACT", - "name": "Retractable Claws", - "points": 2, - "ugliness": 1, - "description": "You have claws on the ends of your fingers, and can extend or retract them as desired. Gloves will still get in the way, though.", - "types": [ "CLAWS" ], - "prereqs": [ "CLAWS" ], - "cancels": [ "ARM_TENTACLES", "ARM_TENTACLES_4", "ARM_TENTACLES_8" ], - "category": [ "FELINE", "VAMP" ], - "active": true, - "cost": 0 - }, - { - "type": "mutation", - "id": "MUT_TOUGH", - "name": "Resilient", - "points": 2, - "description": "You can survive injuries that would incapacitate humans: you get a 20% bonus to all hit points. Stacks with Tough, etc.", - "social_modifiers": { "intimidate": 2 }, - "prereqs": [ "LARGE_OK", "HUGE_OK", "STR_UP_3", "STR_UP_4", "MASOCHIST_MED" ], - "threshreq": [ "THRESH_URSINE", "THRESH_CATTLE", "THRESH_CHIMERA", "THRESH_MEDICAL", "THRESH_LIZARD", "THRESH_BEAST", "THRESH_VAMP" ], - "cancels": [ "FLIMSY", "FLIMSY2", "FLIMSY3", "GLASSJAW" ], - "changes_to": [ "MUT_TOUGH2" ], - "category": [ "URSINE", "CATTLE", "CHIMERA", "BEAST", "LIZARD", "MEDICAL", "VAMP" ], - "hp_modifier_secondary": 0.2 - }, - { - "type": "mutation", - "id": "MUT_TOUGH2", - "name": "Solidly Built", - "points": 3, - "description": "Not much scares you. You get a 30% bonus to all hit points. Stacks with Tough, etc.", - "social_modifiers": { "intimidate": 3 }, - "valid": false, - "prereqs": [ "MUT_TOUGH" ], - "threshreq": [ "THRESH_URSINE", "THRESH_CATTLE", "THRESH_CHIMERA", "THRESH_MEDICAL", "THRESH_VAMP" ], - "cancels": [ "FLIMSY", "FLIMSY2", "FLIMSY3", "GLASSJAW" ], - "changes_to": [ "MUT_TOUGH3" ], - "category": [ "URSINE", "CATTLE", "CHIMERA", "MEDICAL", "VAMP" ], - "hp_modifier_secondary": 0.3 - }, - { - "type": "mutation", - "id": "PAINREC1", - "name": "Pain Recovery", - "points": 3, - "description": "You recover from pain slightly faster than normal.", - "changes_to": [ "PAINREC2" ], - "category": [ "VAMP" ] - }, - { - "type": "mutation", - "id": "PAINREC2", - "name": "Quick Pain Recovery", - "points": 5, - "description": "You recover from pain faster than normal.", - "prereqs": [ "PAINREC1" ], - "changes_to": [ "PAINREC3" ] - }, - { - "type": "mutation", - "id": "PAINREC3", - "name": "Very Quick Pain Recovery", - "points": 8, - "description": "You recover from pain much faster than normal.", - "prereqs": [ "PAINREC2" ], - "category": [ "MEDICAL" ] - }, - { - "type": "mutation", - "id": "NOPAIN", - "name": "Deadened", - "points": 2, - "description": "Nothing hurts any more. Those bites tickle and the wounds itch a bit, but that's it.", - "valid": false, - "purifiable": false, - "prereqs": [ "MASOCHIST", "PAINRESIST" ], - "prereqs2": [ "PAINREC3" ], - "cancels": [ "MORE_PAIN", "MORE_PAIN2", "MORE_PAIN3" ], - "threshreq": [ "THRESH_MEDICAL", "THRESH_VAMP" ], - "//": "MASOCHIST_MED, CENOBITE, and NOPAIN don't cancel each other. By design. Poor painless people...", - "category": [ "MEDICAL", "VAMP" ] - }, - { - "type": "mutation", - "id": "PAINRESIST", - "name": "Pain Resistant", - "points": 2, - "description": "You have a high tolerance for pain.", - "starting_trait": true, - "valid": false, - "cancels": [ "MORE_PAIN", "MORE_PAIN2", "MORE_PAIN3" ], - "category": [ "MEDICAL", "VAMP" ] - }, - { - "type": "mutation", - "id": "MORE_PAIN", - "name": "Pain Sensitive", - "points": -2, - "description": "For some reason things always seem to hurt you more. Pain dealt to you is increased by 25%.", - "starting_trait": true, - "//": "The MORE_PAIN mutations will always increase the pain you receive by at least 1.", - "cancels": [ "PAINRESIST", "NOPAIN" ], - "category": [ "VAMP" ], - "changes_to": [ "MORE_PAIN2" ] - }, - { - "type": "mutation", - "id": "MORE_PAIN2", - "name": "Hyperalgesia", - "points": -3, - "description": "Your body experiences pain out of proportion to the physical causes. Pain dealt to you is increased by 50%.", - "prereqs": [ "MORE_PAIN" ], - "cancels": [ "PAINRESIST", "NOPAIN" ], - "category": [ "VAMP" ], - "changes_to": [ "MORE_PAIN3" ] - }, - { - "type": "mutation", - "id": "PRED1", - "name": "Culler", - "points": 2, - "description": "You've had a revelation: by killing the weaker creatures, who would only die anyway, you preserve resources for those better able to survive. You are less bothered by death of others: their own weakness invited these fates upon them.", - "purifiable": false, - "changes_to": [ "PRED2" ], - "prereqs": [ "CARNIVORE" ], - "threshreq": [ - "THRESH_BEAST", - "THRESH_RAPTOR", - "THRESH_CHIMERA", - "THRESH_LUPINE", - "THRESH_FELINE", - "THRESH_URSINE", - "THRESH_LIZARD", - "THRESH_SPIDER", - "THRESH_VAMP" - ], - "cancels": [ "PACIFIST" ], - "category": [ "BEAST", "RAPTOR", "CHIMERA", "LUPINE", "FELINE", "URSINE", "LIZARD", "SPIDER", "VAMP" ] - }, - { - "type": "mutation", - "id": "PRED2", - "name": "Hunter", - "points": 3, - "description": "Your brain has a lot more in common with predatory animal than a human, making it easier to control misplaced reactions to death of your prey. Additionally, combat skills, which you use to hunt, are easier to learn and maintain.", - "social_modifiers": { "intimidate": 3 }, - "purifiable": false, - "prereqs": [ "CARNIVORE", "THRESH_URSINE" ], - "prereqs2": [ "PRED1" ], - "changes_to": [ "PRED3" ], - "threshreq": [ - "THRESH_BEAST", - "THRESH_RAPTOR", - "THRESH_CHIMERA", - "THRESH_LUPINE", - "THRESH_FELINE", - "THRESH_URSINE", - "THRESH_LIZARD", - "THRESH_SPIDER", - "THRESH_VAMP" - ], - "cancels": [ "PACIFIST" ], - "category": [ "BEAST", "RAPTOR", "CHIMERA", "LUPINE", "FELINE", "URSINE", "LIZARD", "SPIDER", "VAMP" ] - }, - { - "type": "mutation", - "id": "STR_UP", - "name": "Strong", - "points": 1, - "description": "Your muscles are a little stronger. Strength + 1", - "changes_to": [ "STR_UP_2" ], - "category": [ "INSECT", "ELFA", "RAPTOR", "VAMP" ], - "passive_mods": { "str_mod": 1 } - }, - { - "type": "mutation", - "id": "STR_UP_2", - "name": "Very Strong", - "points": 2, - "description": "Your muscles are stronger. Strength + 2", - "prereqs": [ "STR_UP" ], - "changes_to": [ "STR_UP_3", "STR_ALPHA" ], - "category": [ "LIZARD", "CATTLE", "PLANT", "ALPHA", "VAMP" ], - "passive_mods": { "str_mod": 2 } - }, - { - "type": "mutation", - "id": "DEX_UP_2", - "name": "Very Dextrous", - "points": 2, - "description": "You are nimbler. Dexterity + 2", - "prereqs": [ "DEX_UP" ], - "changes_to": [ "DEX_UP_3" ], - "category": [ "LIZARD", "SPIDER", "CHIMERA", "RAPTOR", "MOUSE", "VAMP" ], - "passive_mods": { "dex_mod": 2 } - }, - { - "type": "mutation", - "id": "DEX_UP_3", - "name": "Extremely Dextrous", - "points": 3, - "description": "You are nimble and quick. Dexterity + 4", - "prereqs": [ "DEX_UP_2" ], - "changes_to": [ "DEX_UP_4" ], - "category": [ "BIRD", "ELFA", "FELINE", "VAMP" ], - "passive_mods": { "dex_mod": 4 } - }, - { - "type": "mutation", - "id": "INT_UP", - "name": "Smart", - "points": 1, - "description": "You are a little smarter. Intelligence + 1", - "changes_to": [ "INT_UP_2", "INT_ALPHA", "INT_SLIME" ], - "category": [ "SLIME", "ALPHA", "VAMP" ], - "passive_mods": { "int_mod": 1 } - }, - { - "type": "mutation", - "id": "PER_UP_2", - "name": "Very Perceptive", - "points": 2, - "description": "Your senses are keener. Perception + 2", - "prereqs": [ "PER_UP" ], - "changes_to": [ "PER_UP_3", "PER_ALPHA" ], - "category": [ "ALPHA", "CHIMERA", "VAMP" ], - "passive_mods": { "per_mod": 2 } - }, - { - "type": "mutation", - "id": "DEFORMED", - "name": "Deformed", - "points": -2, - "visibility": 4, - "ugliness": 4, - "description": "You're minorly deformed. Some people will react badly to your appearance.", - "cancels": [ "PRETTY", "BEAUTIFUL", "BEAUTIFUL2", "BEAUTIFUL3" ], - "prereqs": [ "UGLY" ], - "changes_to": [ "DEFORMED2" ], - "category": [ "FISH", "CATTLE", "INSECT", "CEPHALOPOD", "FELINE", "LUPINE", "VAMP" ] - }, - { - "type": "mutation", - "id": "HOLLOW_BONES", - "name": "Hollow Bones", - "points": 1, - "mixed_effect": true, - "description": "You have Avian Bone Syndrome--your bones are nearly hollow. Your body is very light as a result, enabling you to move and attack 20% faster, but also frail; you can carry 40% less, and bashing attacks injure you more.", - "prereqs": [ "LIGHT_BONES" ], - "category": [ "BIRD", "SLIME", "ELFA", "VAMP" ] - }, - { - "type": "mutation", - "id": "VOMITOUS", - "name": "Vomitous", - "points": -3, - "description": "You have a major digestive disorder. Though it causes you to vomit frequently, you have found that you can trigger your vomit reflex on demand, too.", - "prereqs": [ "NAUSEA" ], - "changes_to": [ "EATPOISON" ], - "category": [ "SLIME", "RAT", "MEDICAL", "ELFA", "VAMP" ], - "active": true - }, - { - "type": "mutation", - "id": "HUNGER", - "name": "Fast Metabolism", - "points": -2, - "description": "You require more food than most people, but recover stamina slightly faster.", - "starting_trait": true, - "types": [ "METABOLISM" ], - "changes_to": [ "HUNGER2", "MET_RAT" ], - "category": [ "RAT", "ALPHA", "MEDICAL", "ELFA", "BEAST", "SLIME", "RAPTOR", "CHIMERA", "MOUSE", "VAMP" ], - "metabolism_modifier": 0.5, - "stamina_regen_modifier": 0.1 - }, - { - "type": "mutation", - "id": "THIRST2", - "name": "Very Thirsty", - "points": -3, - "description": "Ugh, out of water already? You need about twice the fluids of an average human.", - "prereqs": [ "THIRST" ], - "changes_to": [ "THIRST3" ], - "cancels": [ "NO_THIRST" ], - "category": [ "FISH", "SLIME", "CEPHALOPOD", "VAMP" ], - "thirst_modifier": 1.0 - }, - { - "type": "mutation", - "id": "THIRST3", - "name": "Extremely Thirsty", - "points": -5, - "description": "You dry out seriously quickly, requiring three times as much liquid to stay hydrated.", - "category": [ "VAMP" ], - "cancels": [ "NO_THIRST" ], - "prereqs": [ "THIRST2" ], - "thirst_modifier": 2.0 - }, - { - "type": "mutation", - "id": "ROT1", - "name": "Weakening", - "points": -2, - "bodytemp_modifiers": [ -250, -250 ], - "description": "You feel as though you are slowly weakening and your body heals slower.", - "types": [ "HEALING" ], - "changes_to": [ "ROT2" ], - "category": [ "ELFA", "VAMP" ], - "healing_awake": -0.002, - "healing_resting": -0.25 - }, - { - "type": "mutation", - "id": "ROT2", - "name": "Deterioration", - "points": -8, - "bodytemp_modifiers": [ -750, -750 ], - "description": "Your body is very slowly wasting away.", - "types": [ "HEALING" ], - "prereqs": [ "ROT1" ], - "changes_to": [ "ROT3" ], - "category": [ "CHIMERA", "VAMP" ], - "healing_awake": -0.02 - }, - { - "type": "mutation", - "id": "PALE", - "name": "Pale Skin", - "points": 0, - "visibility": 3, - "ugliness": 1, - "description": "Your skin is rather pale.", - "changes_to": [ "ALBINO" ], - "leads_to": [ "TROGLO" ], - "category": [ "LUPINE", "VAMP" ] - }, - { - "type": "mutation", - "id": "ALBINO", - "name": "Albino", - "points": -1, - "description": "You lack skin pigmentation due to a genetic problem. You sunburn extremely easily, and typically use an umbrella and a sunglasses when going out in the sun.", - "starting_trait": true, - "changes_to": [ "SUNBURN" ], - "category": [ "TROGLOBITE", "MOUSE", "VAMP" ] - }, - { - "type": "mutation", - "id": "SUNBURN", - "name": "Solar Sensitivity", - "points": -3, - "description": "Your skin simply cannot handle ultraviolet radiation, such as sunlight. It will seriously burn you.", - "prereqs": [ "ALBINO" ], - "prereqs2": [ "TROGLO2", "TROGLO3" ], - "category": [ "TROGLOBITE", "VAMP" ] - }, - { - "type": "mutation", - "id": "TROGLO", - "name": "Light Sensitive", - "points": -2, - "description": "Sunlight makes you uncomfortable. If you are outdoors and the weather is Sunny, you suffer -1 to all stats.", - "cancels": [ "SUNLIGHT_DEPENDENT" ], - "changes_to": [ "TROGLO2" ], - "category": [ "LIZARD", "BEAST", "INSECT", "SLIME", "SPIDER", "VAMP" ] - }, - { - "type": "mutation", - "id": "TROGLO2", - "name": "Very Light Sensitive", - "points": -3, - "description": "Sunlight makes you very uncomfortable. If you are outdoors during the day, you suffer -1 to all stats; -2 if the weather is Sunny.", - "cancels": [ "SUNLIGHT_DEPENDENT" ], - "prereqs": [ "TROGLO" ], - "changes_to": [ "TROGLO3" ], - "category": [ "RAT", "VAMP" ] - }, - { - "type": "mutation", - "id": "TROGLO3", - "name": "Troglobite", - "points": -5, - "description": "Sunlight makes you extremely uncomfortable, resulting in large penalties to all stats.", - "cancels": [ "SUNLIGHT_DEPENDENT" ], - "prereqs": [ "TROGLO2" ], - "category": [ "TROGLOBITE", "VAMP" ] - } -] diff --git a/data/mods/CRT_EXPANSION/mutations/crt_vamp_mutations.json b/data/mods/CRT_EXPANSION/mutations/crt_vamp_mutations.json index 459651bc59b6c..752072aeeb082 100644 --- a/data/mods/CRT_EXPANSION/mutations/crt_vamp_mutations.json +++ b/data/mods/CRT_EXPANSION/mutations/crt_vamp_mutations.json @@ -10,26 +10,6 @@ "purifiable": false, "threshold": true }, - { - "type": "mutation", - "id": "UNSTABLE", - "name": "Genetically Unstable", - "points": -2, - "mixed_effect": true, - "description": "Your DNA has been damaged in a way that causes you to continually develop more mutations.", - "changes_to": [ "CHAOTIC" ], - "category": [ "SLIME", "MEDICAL", "CHIMERA", "VAMP" ] - }, - { - "type": "mutation", - "id": "HISS", - "name": "Hissing Voice", - "mixed_effect": true, - "points": -1, - "description": "You hiss when speaking. Persuading NPCs will be more difficult, but threatening them will be easier.", - "category": [ "LIZARD", "RAPTOR", "VAMP" ], - "social_modifiers": { "persuade": -20, "lie": -10, "intimidate": 10 } - }, { "type": "mutation", "id": "FLEET", @@ -39,99 +19,8 @@ "starting_trait": true, "changes_to": [ "FLEET2" ], "category": [ "SPIDER", "MOUSE", "VAMP" ], - "types": [ "RUNNING" ] - }, - { - "type": "mutation", - "id": "BADTEMPER", - "name": "Bad Temper", - "points": -2, - "description": "Things just keep getting you down. You tend to be unhappy, and it takes some doing to cheer you up.", - "starting_trait": true, - "cancels": [ "OPTIMISTIC" ], - "category": [ "URSINE", "LIZARD", "CHIMERA", "VAMP" ] - }, - { - "type": "mutation", - "id": "INSOMNIA", - "name": "Insomniac", - "points": -2, - "description": "You have a hard time falling asleep, even under the best circumstances!", - "starting_trait": true, - "valid": false, - "category": [ "MEDICAL", "VAMP" ], - "cancels": [ "EASYSLEEPER" ] - }, - { - "type": "mutation", - "id": "THINSKIN", - "name": "Thin-Skinned", - "points": -1, - "description": "Your skin is fragile. Cutting damage is slightly increased for you.", - "starting_trait": true, - "category": [ "VAMP" ], - "cancels": [ "THICKSKIN" ], - "armor": [ { "parts": "ALL", "cut": -1 } ] - }, - { - "type": "mutation", - "id": "LIGHTWEIGHT", - "name": "Lightweight", - "points": -1, - "description": "Alcohol and drugs go straight to your head. You suffer the negative effects of these for longer.", - "starting_trait": true, - "category": [ "MEDICAL", "VAMP" ], - "cancels": [ "DRUNKEN", "TOLERANCE" ] - }, - { - "type": "mutation", - "id": "NARCOLEPTIC", - "name": "Narcoleptic", - "points": -3, - "description": "You randomly fall asleep without any reason.", - "starting_trait": true, - "valid": false, - "category": [ "MEDICAL", "VAMP" ] - }, - { - "type": "mutation", - "id": "JITTERY", - "name": "Jittery", - "points": -3, - "description": "During moments of great stress or under the effects of stimulants, you may find your hands shaking uncontrollably, severely reducing your dexterity.", - "starting_trait": true, - "valid": false, - "category": [ "MEDICAL", "MOUSE", "VAMP" ] - }, - { - "type": "mutation", - "id": "MOODSWINGS", - "name": "Mood Swings", - "points": -1, - "description": "Your morale will shift up and down at random, often dramatically.", - "starting_trait": true, - "valid": false, - "category": [ "MEDICAL", "VAMP" ] - }, - { - "type": "mutation", - "id": "WEAKSTOMACH", - "name": "Weak Stomach", - "points": -1, - "description": "You are more likely to throw up from food poisoning, alcohol, etc.", - "starting_trait": true, - "category": [ "VAMP" ], - "changes_to": [ "NAUSEA" ], - "cancels": [ "STRONGSTOMACH" ] - }, - { - "type": "mutation", - "id": "CHEMIMBALANCE", - "name": "Chemical Imbalance", - "points": -2, - "description": "You suffer from a minor chemical imbalance, whether mental or physical. Minor changes to your internal chemistry will manifest themselves on occasion, such as hunger, sleepiness, narcotic effects, etc.", - "starting_trait": true, - "category": [ "SLIME", "MEDICAL", "CHIMERA", "ELFA", "VAMP" ] + "types": [ "RUNNING" ], + "movecost_flatground_modifier": 0.85 }, { "type": "mutation", @@ -140,41 +29,9 @@ "points": 1, "description": "Your hearing is better than average, and you can hear distant sounds more easily.", "starting_trait": true, - "category": [ "ALPHA", "MOUSE", "VAMP" ], - "cancels": [ "BADHEARING" ] - }, - { - "type": "mutation", - "id": "OUTDOORSMAN", - "name": "Outdoorsman", - "points": 1, - "description": "You are accustomed to being exposed to the elements. This decreases morale penalties for being wet.", - "starting_trait": true, - "category": [ "VAMP" ], - "valid": false, - "wet_protection": [ - { "part": "HEAD", "ignored": 6 }, - { "part": "LEG_L", "ignored": 8 }, - { "part": "LEG_R", "ignored": 8 }, - { "part": "FOOT_L", "ignored": 2 }, - { "part": "FOOT_R", "ignored": 2 }, - { "part": "ARM_L", "ignored": 8 }, - { "part": "ARM_R", "ignored": 8 }, - { "part": "HAND_L", "ignored": 12 }, - { "part": "HAND_R", "ignored": 12 }, - { "part": "TORSO", "ignored": 10 } - ] - }, - { - "type": "mutation", - "id": "PARKOUR", - "name": "Parkour Expert", - "points": 2, - "description": "You're skilled at clearing obstacles; terrain like railings or counters are as easy for you to move on as solid ground.", - "starting_trait": true, - "category": [ "VAMP" ], - "valid": false, - "cancels": [ "BADKNEES" ] + "category": [ "ALPHA", "MOUSE", "ELFA" ], + "cancels": [ "BADHEARING" ], + "hearing_modifier": 1.25 }, { "type": "mutation", @@ -186,150 +43,45 @@ "valid": false, "cancels": [ "BADCARDIO" ], "changes_to": [ "GOODCARDIO2" ], - "category": [ "FISH", "LUPINE", "MOUSE", "INSECT", "VAMP" ] + "category": [ "FISH", "LUPINE", "MOUSE", "INSECT", "VAMP" ], + "max_stamina_modifier": 1.25 }, { "type": "mutation", - "id": "RADIOGENIC", - "name": "Radiogenic", - "points": 3, - "description": "Your system has adapted to radiation. While irradiated, you will actually heal slowly, converting the radiation into hit points.", - "category": [ "SLIME", "MEDICAL", "VAMP" ] - }, - { - "type": "mutation", - "id": "INFRESIST", - "name": "Infection Resistant", + "id": "FASTHEALER", + "name": "Fast Healer", "points": 2, - "description": "Your immune system is particularly good at resisting infections. You have an increased chance for bad wounds and infections to heal on their own, and only suffer reduced penalties from them.", - "starting_trait": true, - "changes_to": [ "INFIMMUNE" ], - "category": [ "TROGLOBITE", "RAT", "MEDICAL", "VAMP" ] - }, - { - "type": "mutation", - "id": "INFIMMUNE", - "name": "Infection Immune", - "points": 3, - "description": "Your bloodstream has developed antibiotic properties. Your wounds will never become infected.", - "prereqs": [ "DISRESISTANT" ], - "prereqs2": [ "INFRESIST" ], - "category": [ "MEDICAL", "VAMP" ] - }, - { - "type": "mutation", - "id": "PARAIMMUNE", - "name": "Parasite Immune", - "points": 1, - "description": "Your body is unusually inhospitable to parasitic lifeforms. You will never become infested with internal parasites.", - "prereqs": [ "DISRESISTANT" ], - "prereqs2": [ "INFRESIST" ], - "category": [ "ELFA", "CHIMERA", "MEDICAL", "SLIME", "VAMP" ] - }, - { - "type": "mutation", - "id": "BENDY1", - "name": "Stretchy Limbs", - "points": 1, - "visibility": 1, - "description": "Your limbs seem to have a little more 'give' to them. +1 Dexterity.", - "changes_to": [ "BENDY2" ], - "threshreq": [ "THRESH_SLIME", "THRESH_ELFA", "THRESH_VAMP" ], - "category": [ "SLIME", "ELFA", "VAMP" ], - "passive_mods": { "dex_mod": 1 } - }, - { - "type": "mutation", - "id": "QUICK", - "name": "Quick", - "points": 3, - "description": "You're just generally quick! You get a 10% bonus to action points.", + "description": "You heal faster when sleeping and will even recover a small amount of HP when not sleeping.", "starting_trait": true, - "category": [ "FISH", "BIRD", "INSECT", "TROGLOBITE", "CHIMERA", "RAPTOR", "MOUSE", "VAMP" ] - }, - { - "type": "mutation", - "id": "EASYSLEEPER", - "name": "Accomplished Sleeper", - "points": 1, - "description": "You have always been able to fall asleep easily, even when sleeping in less than ideal circumstances.", - "changes_to": [ "EASYSLEEPER2" ], - "starting_trait": true, - "valid": false, - "cancels": [ "INSOMNIA" ], - "category": [ "MOUSE", "INSECT", "VAMP" ] + "types": [ "HEALING" ], + "changes_to": [ "FASTHEALER2", "REGEN_LIZ" ], + "category": [ "MEDICAL", "VAMP" ], + "healing_awake": 0.2, + "healing_resting": 0.5 }, { "type": "mutation", - "id": "TOUGH", - "name": "Tough", + "id": "PAINRESIST", + "name": "Pain Resistant", "points": 2, - "description": "It takes a lot to bring you down! You get a 20% bonus to all hit points.", + "description": "You have a high tolerance for pain.", "starting_trait": true, "valid": false, - "cancels": [ "FLIMSY", "FLIMSY2", "FLIMSY3", "GLASSJAW" ], - "changes_to": [ "TOUGH2" ], - "social_modifiers": { "intimidate": 2 }, - "hp_modifier": 0.2 - }, - { - "type": "mutation", - "id": "TOUGH2", - "name": "Durable", - "points": 3, - "description": "You can shrug off almost anything! You get a 30% bonus to all hit points.", - "valid": false, - "cancels": [ "FLIMSY", "FLIMSY2", "FLIMSY3", "GLASSJAW" ], - "prereqs": [ "TOUGH" ], - "changes_to": [ "TOUGH3" ], - "social_modifiers": { "intimidate": 3 }, - "hp_modifier": 0.3 - }, - { - "type": "mutation", - "id": "SLEEPY", - "name": "Sleepy", - "points": -1, - "description": "You need sleep more often, but still spend most of your time awake.", - "changes_to": [ "SLEEPY2", "MET_RAT" ], - "starting_trait": true, - "types": [ "SLEEP" ], - "category": [ "BEAST", "CHIMERA", "MOUSE", "VAMP" ], - "fatigue_modifier": 0.333, - "fatigue_regen_modifier": 0.333 + "cancels": [ "MORE_PAIN", "MORE_PAIN2", "MORE_PAIN3" ], + "category": [ "MEDICAL", "VAMP" ] }, { "type": "mutation", - "id": "STRONGBACK", - "name": "Strong Back", + "id": "NIGHTVISION", + "name": "Night Vision", "points": 2, - "description": "You are capable of carrying far more than someone with similar strength could. Your maximum weight carried is increased by 35%.", - "starting_trait": true, - "category": [ "VAMP" ], - "valid": false, - "cancels": [ "BADBACK" ] - }, - { - "type": "mutation", - "id": "FASTLEARNER", - "name": "Fast Learner", - "points": 3, - "description": "You have a flexible mind, allowing you to learn skills much faster than others. Note that this only applies to real-world experience, not to skill gain from other sources like books.", - "starting_trait": true, - "category": [ "VAMP" ], - "valid": false, - "cancels": [ "SLOWLEARNER" ] - }, - { - "type": "mutation", - "id": "GOODMEMORY", - "name": "Good Memory", - "points": 3, - "description": "You have a an exceptional memory, and find it easy to remember things. Your skills will erode slightly slower than usual, and you can remember more terrain.", + "description": "You possess natural night vision, and can see further in the dark than most. Activate to toggle NV-visible areas on or off.", "starting_trait": true, - "category": [ "VAMP" ], - "valid": false, - "cancels": [ "FORGETFUL" ] + "changes_to": [ "NIGHTVISION2" ], + "cancels": [ "ELFA_NV", "ELFA_FNV", "FEL_NV", "URSINE_EYE" ], + "category": [ "BIRD", "CATTLE", "INSECT", "VAMP" ], + "active": true, + "starts_active": true }, { "type": "mutation", @@ -340,20 +92,6 @@ "starting_trait": true, "category": [ "BIRD", "BEAST", "RAPTOR", "MOUSE", "VAMP" ] }, - { - "type": "mutation", - "id": "FLIMSY", - "name": "Flimsy", - "points": -4, - "description": "Your body can't take much abuse. Its maximum HP is 25% lower than usual and you heal slightly slower. Stacks with Glass Jaw.", - "starting_trait": true, - "valid": false, - "social_modifiers": { "intimidate": -2 }, - "cancels": [ "TOUGH", "TOUGH2", "TOUGH3" ], - "category": [ "MOUSE", "VAMP" ], - "changes_to": [ "FLIMSY2" ], - "hp_modifier": -0.25 - }, { "type": "mutation", "id": "TERRIFYING", @@ -366,66 +104,14 @@ }, { "type": "mutation", - "id": "DISRESISTANT", - "name": "Disease Resistant", - "points": 1, - "description": "It's very unlikely that you will catch ambient diseases like a cold or the flu.", - "starting_trait": true, - "changes_to": [ "DISIMMUNE" ], - "category": [ "CATTLE", "RAT", "MEDICAL", "VAMP" ] - }, - { - "type": "mutation", - "id": "SELFAWARE", - "name": "Self-Aware", - "points": 1, - "description": "You get to see your exact amount of HP remaining and health, instead of only having a vague idea of whether you're in good condition or not.", - "starting_trait": true, - "valid": false, - "active": true, - "category": [ "MEDICAL", "VAMP" ] - }, - { - "type": "mutation", - "id": "INCONSPICUOUS", - "name": "Inconspicuous", - "points": 1, - "description": "While sleeping or staying still, it is less likely that monsters will wander close to you.", - "category": [ "VAMP" ], - "social_modifiers": { "lie": 2 }, - "valid": false - }, - { - "type": "mutation", - "id": "STYLISH", - "name": "Stylish", - "points": 2, - "description": "Practicality is far less important than style. Your morale is improved by wearing fashionable and attractive clothing.", - "starting_trait": true, - "category": [ "VAMP" ], - "valid": false - }, - { - "type": "mutation", - "id": "EAGLEEYED", - "//": "Can't change the ID as that breaks save-compatibility.", - "name": "Scout", + "id": "LIGHTSTEP", + "name": "Light Step", "points": 1, - "description": "You're an excellent navigator and your ability to spot distant landmarks is unmatched. Your sight radius on the overmap extends beyond the normal range.", - "valid": false, - "starting_trait": true, - "category": [ "MOUSE", "VAMP" ], - "cancels": [ "MYOPIC", "UNOBSERVANT" ] - }, - { - "type": "mutation", - "id": "MYOPIC", - "name": "Near-Sighted", - "points": -2, - "description": "Without your glasses, your seeing radius is severely reduced! However, while wearing glasses this trait has no effect, and you are guaranteed to start with a pair.", + "description": "You make less noise while walking. You're also less likely to set off traps.", "starting_trait": true, - "cancels": [ "URSINE_EYE", "EAGLEEYED" ], - "category": [ "BEAST", "TROGLOBITE", "VAMP" ] + "category": [ "BIRD", "ELFA", "FELINE", "VAMP" ], + "cancels": [ "CLUMSY" ], + "noise_modifier": 0.4 }, { "type": "mutation", @@ -434,22 +120,9 @@ "points": 1, "description": "For your whole life you've been forbidden from indulging in your peculiar tastes. Now the world's ended, and you'll be damned if anyone is going to tell you that you can't eat people.", "starting_trait": true, - "category": [ "VAMP" ], "valid": false, "cancels": [ "VEGETARIAN" ], - "flags": [ "CANNIBAL" ] - }, - { - "type": "mutation", - "id": "PSYCHOPATH", - "name": "Psychopath", - "points": 2, - "description": "You don't experience guilt like others do. Even when you know your actions are wrong, you just don't care.", "category": [ "VAMP" ], - "starting_trait": true, - "valid": false, - "social_modifiers": { "intimidate": 5 }, - "cancels": [ "PACIFIST" ], "flags": [ "CANNIBAL" ] }, { @@ -462,50 +135,13 @@ "category": [ "ALPHA", "VAMP" ], "types": [ "SCENT" ] }, - { - "type": "mutation", - "id": "LIAR", - "name": "Skilled Liar", - "points": 1, - "description": "You have no qualms about bending the truth, and have practically no tells. Telling lies and otherwise bluffing will be much easier for you.", - "starting_trait": true, - "category": [ "VAMP" ], - "cancels": [ "TRUTHTELLER" ], - "social_modifiers": { "lie": 40 } - }, - { - "type": "mutation", - "id": "WAKEFUL", - "name": "Less Sleep", - "points": 1, - "description": "You need less sleep than the average person.", - "changes_to": [ "WAKEFUL2" ], - "types": [ "SLEEP" ], - "starting_trait": true, - "category": [ "ALPHA", "ELFA", "VAMP" ], - "fatigue_modifier": -0.15 - }, - { - "type": "mutation", - "id": "WAKEFUL2", - "name": "Very Little Sleep", - "points": 3, - "description": "You don't sleep often. But when you do, you need very little of it.", - "valid": false, - "types": [ "SLEEP" ], - "prereqs": [ "WAKEFUL" ], - "changes_to": [ "WAKEFUL3" ], - "threshreq": [ "THRESH_ALPHA", "THRESH_ELFA", "THRESH_VAMP" ], - "category": [ "ALPHA", "ELFA", "VAMP" ], - "fatigue_modifier": -0.25 - }, { "type": "mutation", "id": "PRETTY", "name": "Pretty", "points": 1, "ugliness": -2, - "description": "You are a sight to behold. NPCs who care about such thing will react more kindly to you.", + "description": "You are a sight to behold. NPCs who care about such things will react more kindly to you.", "starting_trait": true, "category": [ "ALPHA", "FELINE", "LUPINE", "VAMP" ], "cancels": [ "UGLY", "DEFORMED", "DEFORMED2", "DEFORMED3" ], @@ -513,128 +149,60 @@ }, { "type": "mutation", - "id": "BEAUTIFUL", - "name": "Beautiful", - "points": 2, - "visibility": -4, - "ugliness": -4, - "description": "You're a real head-turner. Some people will react well to your appearance, and most people have an easier time trusting you.", - "category": [ "VAMP" ], - "cancels": [ "UGLY", "DEFORMED", "DEFORMED2", "DEFORMED3" ], - "prereqs": [ "PRETTY" ], - "changes_to": [ "BEAUTIFUL2" ] - }, - { - "type": "mutation", - "id": "BEAUTIFUL2", - "name": "Very Beautiful", - "points": 3, - "visibility": -7, - "ugliness": -7, - "description": "You are a vision of beauty. Some people will react very well to your looks, and most people will trust you immediately.", - "category": [ "VAMP" ], - "cancels": [ "UGLY", "DEFORMED", "DEFORMED2", "DEFORMED3" ], - "prereqs": [ "BEAUTIFUL" ], - "changes_to": [ "BEAUTIFUL3" ] - }, - { - "type": "mutation", - "id": "BEAUTIFUL3", - "name": "Glorious", - "points": 4, - "visibility": -10, - "ugliness": -10, - "description": "You are incredibly beautiful. People cannot help themselves for your charms, and will do whatever they can to please you.", - "cancels": [ "UGLY", "DEFORMED", "DEFORMED2", "DEFORMED3" ], - "prereqs": [ "BEAUTIFUL2" ], - "category": [ "ELFA", "VAMP" ] - }, - { - "type": "mutation", - "id": "LIGHTSTEP", - "name": "Light Step", - "points": 1, - "description": "You make less noise while walking. You're also less likely to set off traps.", + "id": "INSOMNIA", + "name": "Insomniac", + "points": -2, + "description": "You have a hard time falling asleep, even under the best circumstances!", "starting_trait": true, - "category": [ "BIRD", "ELFA", "FELINE", "VAMP" ], - "cancels": [ "CLUMSY" ] - }, - { - "type": "mutation", - "id": "DEBUG_SILENT", - "name": "Silent Movement", - "points": 6, "valid": false, - "description": "You know how to move completely silently.", - "threshreq": [ "THRESH_VAMP" ], - "category": [ "VAMP" ] + "category": [ "MEDICAL", "VAMP" ], + "cancels": [ "EASYSLEEPER" ] }, { "type": "mutation", - "id": "SLOWHEALER2", - "name": "Poor Healer", - "points": -4, - "description": "Your health recovery through sleeping is severely impaired and causes you to recover only a third of usual HP over time.", + "id": "THINSKIN", + "name": "Thin-Skinned", + "points": -1, + "description": "Your skin is fragile. Cutting damage is slightly increased for you.", "starting_trait": true, + "cancels": [ "THICKSKIN" ], "category": [ "VAMP" ], - "valid": false, - "purifiable": false, - "types": [ "HEALING" ], - "healing_resting": -0.66 + "armor": [ { "parts": "ALL", "cut": -1 } ] }, { "type": "mutation", - "id": "HEAVYSLEEPER", - "name": "Heavy Sleeper", + "id": "WEAKSTOMACH", + "name": "Weak Stomach", "points": -1, - "description": "You're quite the heavy sleeper. Noises are unlikely to wake you up.", - "changes_to": [ "HEAVYSLEEPER2" ], + "description": "You are more likely to throw up from food poisoning, alcohol, etc.", "starting_trait": true, - "category": [ "INSECT", "PLANT", "MEDICAL", "LUPINE", "VAMP" ] - }, - { - "type": "mutation", - "id": "HEAVYSLEEPER2", - "name": "Very Heavy Sleeper", - "points": -2, - "description": "You could probably sleep through a firefight.", - "valid": false, - "prereqs": [ "HEAVYSLEEPER" ], - "category": [ "BEAST", "LUPINE", "VAMP" ] + "changes_to": [ "NAUSEA" ], + "category": [ "VAMP" ], + "cancels": [ "STRONGSTOMACH" ] }, { "type": "mutation", - "id": "ANIMALDISCORD", - "name": "Animal Discord", + "id": "ALBINO", + "name": "Albino", "points": -1, - "description": "Most animals don't like you, and aggressive animals are more likely to attack you. This only applies to natural animals such as woodland creatures.", + "description": "You lack skin pigmentation due to a genetic problem. You sunburn extremely easily, and typically use an umbrella and sunglasses when going out in the sun.", "starting_trait": true, - "cancels": [ "ANIMALEMPATH" ], - "changes_to": [ "ANIMALDISCORD2" ], - "category": [ "LUPINE", "BEAST", "RAPTOR", "INSECT", "VAMP" ] - }, - { - "type": "mutation", - "id": "ANIMALDISCORD2", - "name": "Prey Animal", - "points": -3, - "description": "Natural animals like dogs and wolves see you as prey or a threat, and are liable to attack you on sight.", - "cancels": [ "ANIMALEMPATH" ], - "prereqs": [ "ANIMALDISCORD" ], - "category": [ "MOUSE", "VAMP" ] + "changes_to": [ "SUNBURN" ], + "category": [ "TROGLOBITE", "MOUSE", "VAMP" ] }, { "type": "mutation", - "id": "NIGHTVISION", - "name": "Night Vision", - "points": 2, - "description": "You possess natural night vision, and can see further in the dark than most. Activate to toggle NV-visible areas on or off.", + "id": "FLIMSY", + "name": "Flimsy", + "points": -4, + "description": "Your body can't take much abuse. Its maximum HP is 25% lower than usual and you heal slightly slower. Stacks with Glass Jaw.", "starting_trait": true, - "changes_to": [ "NIGHTVISION2" ], - "cancels": [ "ELFA_NV", "ELFA_FNV", "FEL_NV", "URSINE_EYE" ], - "category": [ "BIRD", "CATTLE", "INSECT", "VAMP" ], - "active": true, - "starts_active": true + "valid": false, + "social_modifiers": { "intimidate": -2 }, + "cancels": [ "TOUGH", "TOUGH2", "TOUGH3" ], + "category": [ "MOUSE", "ELFA", "VAMP" ], + "changes_to": [ "FLIMSY2" ], + "hp_modifier": -0.25 }, { "type": "mutation", @@ -662,56 +230,6 @@ "active": true, "starts_active": true }, - { - "type": "mutation", - "id": "ELFAEYES", - "name": "Fey Eyes", - "points": 1, - "description": "Your eyes have turned...green. It's tough to tell the exact shade as it seems to shift. The effect is ...pleasant.", - "leads_to": [ "ELFA_NV" ], - "valid": false, - "cancels": [ "BIRD_EYE", "LIZ_EYE", "FEL_EYE", "URSINE_EYE", "COMPOUND_EYES" ], - "category": [ "ELFA", "VAMP" ], - "social_modifiers": { "lie": 5, "persuade": 5, "intimidate": -5 } - }, - { - "type": "mutation", - "id": "FASTHEALER", - "name": "Fast Healer", - "points": 2, - "description": "You heal faster when sleeping and will even recover small amount of HP when not sleeping.", - "starting_trait": true, - "types": [ "HEALING" ], - "changes_to": [ "FASTHEALER2", "REGEN_LIZ" ], - "category": [ "MEDICAL", "VAMP" ], - "healing_awake": 0.2, - "healing_resting": 0.5 - }, - { - "type": "mutation", - "id": "FASTHEALER2", - "name": "Very Fast Healer", - "points": 4, - "description": "Your flesh regenerates slowly, and you will regain HP even when not sleeping.", - "types": [ "HEALING" ], - "prereqs": [ "FASTHEALER" ], - "changes_to": [ "REGEN" ], - "category": [ "PLANT", "VAMP" ], - "healing_awake": 0.66, - "healing_resting": 0.5 - }, - { - "type": "mutation", - "id": "REGEN", - "name": "Regeneration", - "points": 6, - "description": "Your flesh regenerates from wounds incredibly quickly.", - "types": [ "HEALING" ], - "prereqs": [ "FASTHEALER2" ], - "category": [ "SLIME", "TROGLOBITE", "VAMP" ], - "healing_awake": 2.0, - "healing_resting": 1.5 - }, { "type": "mutation", "id": "FANGS", @@ -722,7 +240,7 @@ "description": "Your teeth have grown into two-inch-long fangs, allowing you to make an extra attack when conditions favor it.", "types": [ "TEETH" ], "changes_to": [ "SABER_TEETH", "SHARKTEETH" ], - "category": [ "LIZARD", "FISH", "LUPINE", "FELINE", "CHIMERA", "VAMP" ], + "category": [ "LIZARD", "FISH", "LUPINE", "FELINE", "CHIMERA" ], "attacks": [ { "attack_text_u": "You sink your fangs into %s", @@ -758,15 +276,6 @@ } ] }, - { - "type": "mutation", - "id": "LIGHT_BONES", - "name": "Light Bones", - "points": 2, - "description": "Your bones are very light. This enables you to move and attack 10% faster, but also reduces your carrying weight by 20% and makes bashing attacks hurt a little more.", - "category": [ "MOUSE", "VAMP" ], - "changes_to": [ "HOLLOW_BONES" ] - }, { "type": "mutation", "id": "NAILS", @@ -777,370 +286,18 @@ "types": [ "CLAWS" ], "changes_to": [ "CLAWS", "TALONS" ], "cancels": [ "ARM_TENTACLES", "ARM_TENTACLES_4", "ARM_TENTACLES_8" ], - "category": [ "RAPTOR", "VAMP" ] - }, - { - "type": "mutation", - "id": "CLAWS", - "name": "Claws", - "points": 2, - "visibility": 3, - "ugliness": 2, - "description": "You have claws on the ends of your fingers. If you aren't wearing gloves, your unarmed attacks deal a minor amount of cutting damage.", - "types": [ "CLAWS" ], - "prereqs": [ "NAILS" ], - "changes_to": [ "CLAWS_RETRACT", "CLAWS_RAT" ], - "cancels": [ "ARM_TENTACLES", "ARM_TENTACLES_4", "ARM_TENTACLES_8" ], - "category": [ "BEAST", "RAT", "URSINE", "VAMP" ] - }, - { - "type": "mutation", - "id": "CLAWS_RETRACT", - "name": "Retractable Claws", - "points": 2, - "ugliness": 1, - "description": "You have claws on the ends of your fingers, and can extend or retract them as desired. Gloves will still get in the way, though.", - "types": [ "CLAWS" ], - "prereqs": [ "CLAWS" ], - "cancels": [ "ARM_TENTACLES", "ARM_TENTACLES_4", "ARM_TENTACLES_8" ], - "category": [ "FELINE", "VAMP" ], - "active": true, - "cost": 0 - }, - { - "type": "mutation", - "id": "MUT_TOUGH", - "name": "Resilient", - "points": 2, - "description": "You can survive injuries that would incapacitate humans: you get a 20% bonus to all hit points. Stacks with Tough, etc.", - "social_modifiers": { "intimidate": 2 }, - "prereqs": [ "LARGE_OK", "HUGE_OK", "STR_UP_3", "STR_UP_4", "MASOCHIST_MED" ], - "threshreq": [ "THRESH_URSINE", "THRESH_CATTLE", "THRESH_CHIMERA", "THRESH_MEDICAL", "THRESH_LIZARD", "THRESH_BEAST", "THRESH_VAMP" ], - "cancels": [ "FLIMSY", "FLIMSY2", "FLIMSY3", "GLASSJAW" ], - "changes_to": [ "MUT_TOUGH2" ], - "category": [ "URSINE", "CATTLE", "CHIMERA", "BEAST", "LIZARD", "MEDICAL", "VAMP" ], - "hp_modifier_secondary": 0.2 - }, - { - "type": "mutation", - "id": "MUT_TOUGH2", - "name": "Solidly Built", - "points": 3, - "description": "Not much scares you. You get a 30% bonus to all hit points. Stacks with Tough, etc.", - "social_modifiers": { "intimidate": 3 }, - "valid": false, - "prereqs": [ "MUT_TOUGH" ], - "threshreq": [ "THRESH_URSINE", "THRESH_CATTLE", "THRESH_CHIMERA", "THRESH_MEDICAL", "THRESH_VAMP" ], - "cancels": [ "FLIMSY", "FLIMSY2", "FLIMSY3", "GLASSJAW" ], - "changes_to": [ "MUT_TOUGH3" ], - "category": [ "URSINE", "CATTLE", "CHIMERA", "MEDICAL", "VAMP" ], - "hp_modifier_secondary": 0.3 - }, - { - "type": "mutation", - "id": "PAINREC1", - "name": "Pain Recovery", - "points": 3, - "description": "You recover from pain slightly faster than normal.", - "changes_to": [ "PAINREC2" ], - "category": [ "VAMP" ] - }, - { - "type": "mutation", - "id": "PAINREC2", - "name": "Quick Pain Recovery", - "points": 5, - "description": "You recover from pain faster than normal.", - "prereqs": [ "PAINREC1" ], - "changes_to": [ "PAINREC3" ] - }, - { - "type": "mutation", - "id": "PAINREC3", - "name": "Very Quick Pain Recovery", - "points": 8, - "description": "You recover from pain much faster than normal.", - "prereqs": [ "PAINREC2" ], - "category": [ "MEDICAL" ] - }, - { - "type": "mutation", - "id": "NOPAIN", - "name": "Deadened", - "points": 2, - "description": "Nothing hurts any more. Those bites tickle and the wounds itch a bit, but that's it.", - "valid": false, - "purifiable": false, - "prereqs": [ "MASOCHIST", "PAINRESIST" ], - "prereqs2": [ "PAINREC3" ], - "cancels": [ "MORE_PAIN", "MORE_PAIN2", "MORE_PAIN3" ], - "threshreq": [ "THRESH_MEDICAL", "THRESH_VAMP" ], - "//": "MASOCHIST_MED, CENOBITE, and NOPAIN don't cancel each other. By design. Poor painless people...", - "category": [ "MEDICAL", "VAMP" ] - }, - { - "type": "mutation", - "id": "PAINRESIST", - "name": "Pain Resistant", - "points": 2, - "description": "You have a high tolerance for pain.", - "starting_trait": true, - "valid": false, - "cancels": [ "MORE_PAIN", "MORE_PAIN2", "MORE_PAIN3" ], - "category": [ "MEDICAL", "VAMP" ] - }, - { - "type": "mutation", - "id": "MORE_PAIN", - "name": "Pain Sensitive", - "points": -2, - "description": "For some reason things always seem to hurt you more. Pain dealt to you is increased by 25%.", - "starting_trait": true, - "//": "The MORE_PAIN mutations will always increase the pain you receive by at least 1.", - "cancels": [ "PAINRESIST", "NOPAIN" ], - "category": [ "VAMP" ], - "changes_to": [ "MORE_PAIN2" ] - }, - { - "type": "mutation", - "id": "MORE_PAIN2", - "name": "Hyperalgesia", - "points": -3, - "description": "Your body experiences pain out of proportion to the physical causes. Pain dealt to you is increased by 50%.", - "prereqs": [ "MORE_PAIN" ], - "cancels": [ "PAINRESIST", "NOPAIN" ], - "category": [ "VAMP" ], - "changes_to": [ "MORE_PAIN3" ] - }, - { - "type": "mutation", - "id": "PRED1", - "name": "Culler", - "points": 2, - "description": "You've had a revelation: by killing the weaker creatures, who would only die anyway, you preserve resources for those better able to survive. You are less bothered by death of others: their own weakness invited these fates upon them.", - "purifiable": false, - "changes_to": [ "PRED2" ], - "prereqs": [ "CARNIVORE" ], - "threshreq": [ - "THRESH_BEAST", - "THRESH_RAPTOR", - "THRESH_CHIMERA", - "THRESH_LUPINE", - "THRESH_FELINE", - "THRESH_URSINE", - "THRESH_LIZARD", - "THRESH_SPIDER", - "THRESH_VAMP" - ], - "cancels": [ "PACIFIST" ], - "category": [ "BEAST", "RAPTOR", "CHIMERA", "LUPINE", "FELINE", "URSINE", "LIZARD", "SPIDER", "VAMP" ] - }, - { - "type": "mutation", - "id": "PRED2", - "name": "Hunter", - "points": 3, - "description": "Your brain has a lot more in common with predatory animal than a human, making it easier to control misplaced reactions to death of your prey. Additionally, combat skills, which you use to hunt, are easier to learn and maintain.", - "social_modifiers": { "intimidate": 3 }, - "purifiable": false, - "prereqs": [ "CARNIVORE", "THRESH_URSINE" ], - "prereqs2": [ "PRED1" ], - "changes_to": [ "PRED3" ], - "threshreq": [ - "THRESH_BEAST", - "THRESH_RAPTOR", - "THRESH_CHIMERA", - "THRESH_LUPINE", - "THRESH_FELINE", - "THRESH_URSINE", - "THRESH_LIZARD", - "THRESH_SPIDER", - "THRESH_VAMP" - ], - "cancels": [ "PACIFIST" ], - "category": [ "BEAST", "RAPTOR", "CHIMERA", "LUPINE", "FELINE", "URSINE", "LIZARD", "SPIDER", "VAMP" ] - }, - { - "type": "mutation", - "id": "STR_UP", - "name": "Strong", - "points": 1, - "description": "Your muscles are a little stronger. Strength + 1", - "changes_to": [ "STR_UP_2" ], - "category": [ "INSECT", "ELFA", "RAPTOR", "VAMP" ], - "passive_mods": { "str_mod": 1 } - }, - { - "type": "mutation", - "id": "STR_UP_2", - "name": "Very Strong", - "points": 2, - "description": "Your muscles are stronger. Strength + 2", - "prereqs": [ "STR_UP" ], - "changes_to": [ "STR_UP_3", "STR_ALPHA" ], - "category": [ "LIZARD", "CATTLE", "PLANT", "ALPHA", "VAMP" ], - "passive_mods": { "str_mod": 2 } - }, - { - "type": "mutation", - "id": "DEX_UP_2", - "name": "Very Dextrous", - "points": 2, - "description": "You are nimbler. Dexterity + 2", - "prereqs": [ "DEX_UP" ], - "changes_to": [ "DEX_UP_3" ], - "category": [ "LIZARD", "SPIDER", "CHIMERA", "RAPTOR", "MOUSE", "VAMP" ], - "passive_mods": { "dex_mod": 2 } - }, - { - "type": "mutation", - "id": "DEX_UP_3", - "name": "Extremely Dextrous", - "points": 3, - "description": "You are nimble and quick. Dexterity + 4", - "prereqs": [ "DEX_UP_2" ], - "changes_to": [ "DEX_UP_4" ], - "category": [ "BIRD", "ELFA", "FELINE", "VAMP" ], - "passive_mods": { "dex_mod": 4 } - }, - { - "type": "mutation", - "id": "INT_UP", - "name": "Smart", - "points": 1, - "description": "You are a little smarter. Intelligence + 1", - "changes_to": [ "INT_UP_2", "INT_ALPHA", "INT_SLIME" ], - "category": [ "SLIME", "ALPHA", "VAMP" ], - "passive_mods": { "int_mod": 1 } - }, - { - "type": "mutation", - "id": "PER_UP_2", - "name": "Very Perceptive", - "points": 2, - "description": "Your senses are keener. Perception + 2", - "prereqs": [ "PER_UP" ], - "changes_to": [ "PER_UP_3", "PER_ALPHA" ], - "category": [ "ALPHA", "CHIMERA", "VAMP" ], - "passive_mods": { "per_mod": 2 } - }, - { - "type": "mutation", - "id": "DEFORMED", - "name": "Deformed", - "points": -2, - "visibility": 4, - "ugliness": 4, - "description": "You're minorly deformed. Some people will react badly to your appearance.", - "cancels": [ "PRETTY", "BEAUTIFUL", "BEAUTIFUL2", "BEAUTIFUL3" ], - "prereqs": [ "UGLY" ], - "changes_to": [ "DEFORMED2" ], - "category": [ "FISH", "CATTLE", "INSECT", "CEPHALOPOD", "FELINE", "LUPINE", "VAMP" ] + "category": [ "RAPTOR" ] }, { "type": "mutation", - "id": "HOLLOW_BONES", - "name": "Hollow Bones", + "id": "POISONOUS", + "name": "Venomous", "points": 1, - "mixed_effect": true, - "description": "You have Avian Bone Syndrome--your bones are nearly hollow. Your body is very light as a result, enabling you to move and attack 20% faster, but also frail; you can carry 40% less, and bashing attacks injure you more.", - "prereqs": [ "LIGHT_BONES" ], - "category": [ "BIRD", "SLIME", "ELFA", "VAMP" ] - }, - { - "type": "mutation", - "id": "VOMITOUS", - "name": "Vomitous", - "points": -3, - "description": "You have a major digestive disorder. Though it causes you to vomit frequently, you have found that you can trigger your vomit reflex on demand, too.", - "prereqs": [ "NAUSEA" ], - "changes_to": [ "EATPOISON" ], - "category": [ "SLIME", "RAT", "MEDICAL", "ELFA", "VAMP" ], - "active": true - }, - { - "type": "mutation", - "id": "HUNGER", - "name": "Fast Metabolism", - "points": -2, - "description": "You require more food than most people, but recover stamina slightly faster.", - "starting_trait": true, - "types": [ "METABOLISM" ], - "changes_to": [ "HUNGER2", "MET_RAT" ], - "category": [ "RAT", "ALPHA", "MEDICAL", "ELFA", "BEAST", "SLIME", "RAPTOR", "CHIMERA", "MOUSE", "VAMP" ], - "metabolism_modifier": 0.5, - "stamina_regen_modifier": 0.1 - }, - { - "type": "mutation", - "id": "THIRST2", - "name": "Very Thirsty", - "points": -3, - "description": "Ugh, out of water already? You need about twice the fluids of an average human.", - "prereqs": [ "THIRST" ], - "changes_to": [ "THIRST3" ], - "cancels": [ "NO_THIRST" ], - "category": [ "FISH", "SLIME", "CEPHALOPOD", "VAMP" ], - "thirst_modifier": 1.0 - }, - { - "type": "mutation", - "id": "THIRST3", - "name": "Extremely Thirsty", - "points": -5, - "description": "You dry out seriously quickly, requiring three times as much liquid to stay hydrated.", - "category": [ "VAMP" ], - "cancels": [ "NO_THIRST" ], - "prereqs": [ "THIRST2" ], - "thirst_modifier": 2.0 - }, - { - "type": "mutation", - "id": "ROT1", - "name": "Weakening", - "points": -2, - "bodytemp_modifiers": [ -250, -250 ], - "description": "You feel as though you are slowly weakening and your body heals slower.", - "types": [ "HEALING" ], - "changes_to": [ "ROT2" ], - "category": [ "ELFA", "VAMP" ], - "healing_awake": -0.002, - "healing_resting": -0.25 - }, - { - "type": "mutation", - "id": "ROT2", - "name": "Deterioration", - "points": -8, - "bodytemp_modifiers": [ -750, -750 ], - "description": "Your body is very slowly wasting away.", - "types": [ "HEALING" ], - "prereqs": [ "ROT1" ], - "changes_to": [ "ROT3" ], - "category": [ "CHIMERA", "VAMP" ], - "healing_awake": -0.02 - }, - { - "type": "mutation", - "id": "PALE", - "name": "Pale Skin", - "points": 0, - "visibility": 3, - "ugliness": 1, - "description": "Your skin is rather pale.", - "changes_to": [ "ALBINO" ], - "leads_to": [ "TROGLO" ], - "category": [ "LUPINE", "VAMP" ] - }, - { - "type": "mutation", - "id": "ALBINO", - "name": "Albino", - "points": -1, - "description": "You lack skin pigmentation due to a genetic problem. You sunburn extremely easily, and typically use an umbrella and a sunglasses when going out in the sun.", - "starting_trait": true, - "changes_to": [ "SUNBURN" ], - "category": [ "TROGLOBITE", "MOUSE", "VAMP" ] + "description": "Your body produces a potent venom. Cutting or stabbing attacks from mutations have a chance to poison your target.", + "prereqs": [ "POISRESIST" ], + "leads_to": [ "EATPOISON" ], + "changes_to": [ "POISONOUS2" ], + "category": [ "SLIME", "TROGLOBITE", "SPIDER", "VAMP" ] }, { "type": "mutation", @@ -1151,36 +308,5 @@ "prereqs": [ "ALBINO" ], "prereqs2": [ "TROGLO2", "TROGLO3" ], "category": [ "TROGLOBITE", "VAMP" ] - }, - { - "type": "mutation", - "id": "TROGLO", - "name": "Light Sensitive", - "points": -2, - "description": "Sunlight makes you uncomfortable. If you are outdoors and the weather is Sunny, you suffer -1 to all stats.", - "cancels": [ "SUNLIGHT_DEPENDENT" ], - "changes_to": [ "TROGLO2" ], - "category": [ "LIZARD", "BEAST", "INSECT", "SLIME", "SPIDER", "VAMP" ] - }, - { - "type": "mutation", - "id": "TROGLO2", - "name": "Very Light Sensitive", - "points": -3, - "description": "Sunlight makes you very uncomfortable. If you are outdoors during the day, you suffer -1 to all stats; -2 if the weather is Sunny.", - "cancels": [ "SUNLIGHT_DEPENDENT" ], - "prereqs": [ "TROGLO" ], - "changes_to": [ "TROGLO3" ], - "category": [ "RAT", "VAMP" ] - }, - { - "type": "mutation", - "id": "TROGLO3", - "name": "Troglobite", - "points": -5, - "description": "Sunlight makes you extremely uncomfortable, resulting in large penalties to all stats.", - "cancels": [ "SUNLIGHT_DEPENDENT" ], - "prereqs": [ "TROGLO2" ], - "category": [ "TROGLOBITE", "VAMP" ] } ] diff --git a/data/mods/CRT_EXPANSION/mutations/crt_wendigo_mutations.json b/data/mods/CRT_EXPANSION/mutations/crt_wendigo_mutations.json index ff219fbe0a562..bc1b1fa63156d 100644 --- a/data/mods/CRT_EXPANSION/mutations/crt_wendigo_mutations.json +++ b/data/mods/CRT_EXPANSION/mutations/crt_wendigo_mutations.json @@ -22,6 +22,60 @@ "category": [ "WENDIGO" ], "stealth_modifier": 15 }, + { + "type": "mutation", + "id": "ANIMALEMPATH", + "name": "Animal Empathy", + "points": 1, + "description": "Peaceful animals will not run away from you, and even aggressive animals are less likely to attack. This only applies to natural animals such as woodland creatures.", + "starting_trait": true, + "category": [ "BEAST", "ELFA", "VAMP", "WENDIGO" ], + "changes_to": [ "ANIMALEMPATH2" ], + "cancels": [ "ANIMALDISCORD" ] + }, + { + "type": "mutation", + "id": "ANIMALEMPATH2", + "name": "Animal Kinship", + "points": 2, + "description": "Something about your presence is calming to animals, and they will treat you with innate trust. This only applies to natural animals such as woodland creatures.", + "category": [ "ELFA", "VAMP", "WENDIGO" ], + "prereqs": [ "ANIMALEMPATH" ], + "cancels": [ "ANIMALDISCORD" ] + }, + { + "type": "mutation", + "id": "SMELLY", + "name": "Strong Scent", + "points": -1, + "description": "Your scent is particularly strong. It's not offensive to humans, but animals that track your scent will do so more easily.", + "starting_trait": true, + "changes_to": [ "SMELLY2" ], + "types": [ "SCENT" ], + "category": [ "FELINE", "LUPINE", "MOUSE", "WENDIGO" ] + }, + { + "type": "mutation", + "id": "PHEROMONE_MAMMAL", + "name": "Mammal Pheromones", + "points": 2, + "description": "Your body produces low-level pheromones which put mammals at ease. They will be less likely to attack or flee from you.", + "prereqs": [ "SMELLY2" ], + "types": [ "SCENT" ], + "category": [ "BEAST", "CATTLE", "WENDIGO" ] + }, + { + "type": "mutation", + "id": "REGEN", + "name": "Regeneration", + "points": 6, + "description": "Your flesh regenerates from wounds incredibly quickly.", + "types": [ "HEALING" ], + "prereqs": [ "FASTHEALER2" ], + "category": [ "SLIME", "TROGLOBITE", "WENDIGO" ], + "healing_awake": 2.0, + "healing_resting": 1.5 + }, { "type": "mutation", "id": "SLASHERS", @@ -34,7 +88,7 @@ "purifiable": false, "threshreq": [ "THRESH_WENDIGO" ], "category": [ "WENDIGO" ], - "social_modifiers": { "intimidate": 15 }, + "social_modifiers": { "intimidate": 30 }, "attacks": [ { "attack_text_u": "You tear into %s with your blades", diff --git a/data/mods/CRT_EXPANSION/mutations/vamp_mut_cat.json b/data/mods/CRT_EXPANSION/mutations/vamp_mut_cat.json index b2f9e0582df94..4fadba1373ec8 100644 --- a/data/mods/CRT_EXPANSION/mutations/vamp_mut_cat.json +++ b/data/mods/CRT_EXPANSION/mutations/vamp_mut_cat.json @@ -5,7 +5,7 @@ "name": "Vampire", "threshold_mut": "THRESH_VAMP", "mutagen_message": "Nearby shadows seem to bend towards you for a moment and then reality warps back into place.", - "iv_message": "You twitch and pant randomly as your desire to slake your thirst becomes overwhelming.", + "iv_message": "You twitch and pant randomly as your desire to slake your inhuman thirst becomes overwhelming.", "iv_min_mutations": 1, "iv_additional_mutations": 2, "iv_additional_mutations_chance": 3, diff --git a/data/mods/CRT_EXPANSION/readme/README.md b/data/mods/CRT_EXPANSION/readme/README.md index 8f13e015f538e..2b8063692979c 100644 --- a/data/mods/CRT_EXPANSION/readme/README.md +++ b/data/mods/CRT_EXPANSION/readme/README.md @@ -1,11 +1,11 @@ # C.R.T Expansion mod pack The core mod of the CRT Expansion mod pack, it currently adds an armor set, mildly OP gas mask and transforming vest, some gun mods, a new melee/tool and a new material. The items also use a lot of higher end materials such as superalloy, rubber (the "new" material), the lesser used hardsteel and also neoprene. -This mod also adds 6 new classes to CDDA: the C.R.I.T Medic, C.R.I.T Commanding Officer, C.R.I.T Automatic Rifleman, C.R.I.T Grunt, C.R.I.T NCO, C.R.I.T ROTC member, and finally the highly feared (OP) C.R.I.T Spec Ops. +This mod also adds a few new classes to CDDA. To name a few: the C.R.I.T Medic, C.R.I.T Commanding Officer, C.R.I.T Automatic Rifleman, C.R.I.T Grunt, C.R.I.T NCO, C.R.I.T ROTC member, and also the highly feared (OP) C.R.I.T Spec Ops. -I tried to keep the professions revolving around slightly upgraded army gear and as "balanced" as possible except for the C.R.T Spec Ops which is for trying out the new items and being stupid powerful. +I tried to keep the professions revolving around slightly upgraded army gear and as "balanced" as possible except for the C.R.T Spec Ops which is for trying out the new items and being stupid powerful and the Juggernaught for being a Juggernaught. -I can't fix some things like the toolmods attatching to the vest and gasmask, but that doesn't hurt the game and it's just more of a cheap way to progress instead of getting a UPS, even though it still drinks a ton of power. +I can't fix some things like the toolmods attatching to the vest and gasmask, but that doesn't hurt the game (my mod already breaks it) and it's more of a cheap way to progress instead of getting a UPS, even though it still drinks a ton of power. @@ -24,4 +24,4 @@ More techniques, more play styles. Tries to open up melee and offer more than "d I tried to keep the damage balanced and also added scaling damage and movecosts to make it so certain attacks or weapons carry different risks. -Anyways, have fun and report any bugs you find. \ No newline at end of file +Anyways, have fun and report any bugs you find. diff --git a/data/mods/CRT_EXPANSION/scenarios/crt_classes.json b/data/mods/CRT_EXPANSION/scenarios/crt_classes.json index 4aba6df6fd6cd..aa6e6cda6a3e4 100644 --- a/data/mods/CRT_EXPANSION/scenarios/crt_classes.json +++ b/data/mods/CRT_EXPANSION/scenarios/crt_classes.json @@ -2,18 +2,18 @@ { "type": "profession", "ident": "crt_rotc", - "name": "C.R.I.T ROTC Member", - "description": "You were training ahead of time to become a C.R.I.T officer in the upcoming war. Your call to arms arrived dead on arrival and already plastered in the all-too vibrant gore of your squadmates. In the midst of panic, you snatched up what you could and bugged out before you joined the still-moving remnants of your friends. Now it's up to your wits and years of training to keep you alive in this Cataclysm.", + "name": "CRIT ROTC Member", + "description": "You were training ahead of time to become a C.R.I.T officer in the upcoming war. Your call to arms arrived dead on arrival and already plastered in the all-too vibrant gore of your squadmates. In the midst of panic, you bugged out lest you join the remnants of your friends. Now it's up to your wits and short years of training to keep you alive in this Cataclysm.", "points": 7, "traits": [ "MARTIAL_CRT" ], "skills": [ { "level": 2, "name": "gun" }, { "level": 2, "name": "rifle" }, - { "level": 3, "name": "stabbing" }, - { "level": 3, "name": "melee" }, - { "level": 2, "name": "survival" }, - { "level": 2, "name": "firstaid" }, - { "level": 2, "name": "swimming" } + { "level": 1, "name": "stabbing" }, + { "level": 1, "name": "melee" }, + { "level": 1, "name": "survival" }, + { "level": 1, "name": "firstaid" }, + { "level": 1, "name": "swimming" } ], "items": { "both": { @@ -31,8 +31,8 @@ { "type": "profession", "ident": "crt_dude", - "name": "C.R.I.T Janitor", - "description": "*Sigh* Your life has been a wreck. Hopping place to place you finally found a job at C.R.I.T... as a janitor of sorts. The pay was good and you at least got to see some pretty cool stuff. After all non essential personel were purged (as in you, because you merely cleaned stuff or were the errand boy and were not privy to anything remotely important) you found yourself stuck with nothing but the uniform they gave you and your equipment.", + "name": "CRIT Janitor", + "description": "*Sigh* Your life has been a wreck. Hopping place to place you finally found a job at C.R.I.T... as a janitor of sorts. The pay was good and you got some sneak-peeks on some pretty cool stuff. After all non-essential personel were purged you found yourself stuck with nothing but the uniform they gave you and your job's sign-bonus equipment.", "points": 6, "skills": [ { "level": 2, "name": "tailor" }, @@ -68,15 +68,15 @@ { "type": "profession", "ident": "crt_nco", - "name": "C.R.I.T NCO", - "description": "You were a senior NCO, relaying orders to your squad was an everyday task. When the cataclysm struck, your expertise helped save everyone time and time again until it all fell to chaos.", + "name": "CRIT NCO", + "description": "You were a senior NCO, relaying orders to your squad was an everyday task. When the cataclysm struck, your expertise helped save everyone time and time again until it all fell apart.", "points": 10, "traits": [ "MARTIAL_CRT" ], "skills": [ { "level": 2, "name": "gun" }, { "level": 2, "name": "rifle" }, - { "level": 2, "name": "stabbing" }, - { "level": 3, "name": "speech" }, + { "level": 1, "name": "melee" }, + { "level": 4, "name": "speech" }, { "level": 1, "name": "survival" }, { "level": 1, "name": "firstaid" }, { "level": 1, "name": "barter" } @@ -103,7 +103,6 @@ ], "entries": [ { "item": "ear_plugs", "custom-flags": [ "no_auto_equip" ] }, - { "item": "sleeping_bag", "custom-flags": [ "no_auto_equip" ] }, { "item": "knife_crt", "container-item": "sheath" }, { "item": "m4a1", "ammo-item": "223", "contents-item": [ "grip", "holo_sight" ] }, { "item": "stanag30", "ammo-item": "223", "count": 1 } @@ -116,8 +115,8 @@ { "type": "profession", "ident": "crt_rifleman", - "name": "C.R.I.T Grunt", - "description": "You were part of the infantry; first to hit the ground running, clear a forward operating base for use and then come back to relax peacefully with your squadmates. Those days ended when the cataclysm reared its ugly head. The infected tore through your lines like wet paper when the otherworldy abominations arived. Now alone and fleeing, will you have what it takes to survive or is this hellish landcape just a macabre metaphor of death's row?", + "name": "CRIT Grunt", + "description": "You were part of the infantry; first to hit the ground running, clear a FOB and then come back to relax with your squad. Those days ended when the cataclysm reared its ugly head. Your lines were torn through like wet paper when the otherworldy abominations arived. Now fleeing for your life, will you have what it takes to survive or is this hellish landcape your resting place?", "points": 8, "traits": [ "MARTIAL_CRT" ], "skills": [ { "level": 3, "name": "gun" }, { "level": 3, "name": "rifle" }, { "level": 1, "name": "stabbing" } ], @@ -144,7 +143,6 @@ ], "entries": [ { "item": "ear_plugs", "custom-flags": [ "no_auto_equip" ] }, - { "item": "sleeping_bag", "custom-flags": [ "no_auto_equip" ] }, { "item": "knife_rm42", "container-item": "sheath" }, { "item": "scar_h", "ammo-item": "308", "contents-item": "shoulder_strap" }, { "item": "scarhmag", "ammo-item": "308", "count": 2 } @@ -157,13 +155,13 @@ { "type": "profession", "ident": "crt_medic", - "name": "C.R.I.T Combat Medic", - "description": "You were a combat medic taught how to engage an anomaly. However, your main focus was the burden that was keeping your squadmates in one piece. For weeks, you crossed through hell and back to ensure this true mission was fufilled. During a one-sided firefight between the undead and the rogue ai that has now run rampant through government robots, you were singled out and overtaken. Forced to flee without your comrades in tow, will you have what it takes to survive or will your unforgivable sin come back to haunt you?", + "name": "CRIT Combat Medic", + "description": "You were the team nerd. A combat medic taught on how to engage strange anomalies. However, your main focus was keeping your squadmates in one piece. For weeks, you slogged through hell and back and ensured that everyone made it. Caught in between a tide of the undead and the crossfire of apparently rogue government robots, you were left stranded as a distraction. Forced to flee, will you have what it takes to survive or will you join the horde to haunt them for their cardinal sin?", "points": 8, "traits": [ "MARTIAL_CRT" ], "skills": [ - { "level": 2, "name": "gun" }, - { "level": 2, "name": "pistol" }, + { "level": 1, "name": "gun" }, + { "level": 1, "name": "pistol" }, { "level": 3, "name": "firstaid" }, { "level": 2, "name": "speech" }, { "level": 1, "name": "survival" } @@ -204,11 +202,11 @@ { "type": "profession", "ident": "crt_saw", - "name": "C.R.I.T Automatic Rifleman", - "description": "You were assigned the billet of specializing in creating dead zones and providing supressing fire. When the cataclysm struck, your trusty m240 couldn't keep the veritable tide of undead from overtaking your squad. Now alone and fleeing, will you have what it takes to survive or is this hellish landcape something you just can't suppress?", + "name": "CRIT Automatic Rifleman", + "description": "You were assigned the billet of specializing in creating dead zones and providing support fire. When the cataclysm struck, your trusty LMG couldn't keep the veritable tide of undead from overtaking your squad. Now running with all the strength your body can muster, will you have what it takes to survive or is this hellish landcape something you just can't suppress?", "points": 10, "traits": [ "MARTIAL_CRT" ], - "skills": [ { "level": 2, "name": "gun" }, { "level": 3, "name": "rifle" }, { "level": 2, "name": "pistol" } ], + "skills": [ { "level": 3, "name": "gun" }, { "level": 3, "name": "rifle" }, { "level": 1, "name": "pistol" } ], "items": { "both": { "ammo": 100, @@ -233,8 +231,8 @@ { "item": "ear_plugs", "custom-flags": [ "no_auto_equip" ] }, { "item": "sleeping_bag", "custom-flags": [ "no_auto_equip" ] }, { "item": "knife_combat", "container-item": "sheath" }, - { "item": "ds_pulse_rifle", "ammo-item": "pulsesb", "contents-item": [ "shoulder_strap", "bipod" ] }, - { "item": "belt308", "ammo-item": "308", "count": 2 }, + { "item": "l_lmg_223", "ammo-item": "223" }, + { "item": "lw223bigmag", "count": 1 }, { "item": "m9", "ammo-item": "9mm", "container-item": "holster" }, { "item": "m9mag", "ammo-item": "9mm", "count": 2 } ] @@ -246,8 +244,8 @@ { "type": "profession", "ident": "crt_officer", - "name": "C.R.I.T Commanding Officer", - "description": "As a top-ranking CO, you didn't see much in the way of combat other than when you felt like it. but your charisma and sharp intellect helped you climb up the ranks and provide support to allies in need. Now that everything went down the drain, will it help you again?", + "name": "CRIT Commanding Officer", + "description": "As a top-ranking CO, you didn't see much in the way of combat other than when you felt like it. Your charisma and sharp intellect helped you climb up the ranks and provided support to allies in need. Now that everything went down the drain, will it help you again?", "points": 9, "traits": [ "MARTIAL_CRT" ], "skills": [ @@ -290,34 +288,24 @@ { "type": "profession", "ident": "crt_guard", - "name": "C.R.I.T Enforcer", - "description": "STR 12 recommended. You were a guard granted the authority of a U.S Marshal. Others ribbed at you and joked about you being nothing more than a mall cop with a fancy badge. Knowingly, you laughed it off as they were merely jealous of what you could do and have been doing undercover as your double stood in at base. While you mainly spent time at base, you honed your skills and got special implants to do your job easier at the low low cost of serving as a \"guard\" forever. Time to do your job, albeit mission parameters look like they've expanded quite a bit.", + "name": "CRIT Enforcer", + "description": "STR 10 recommended. You were a granted the authority of a U.S Marshal. As a guard, others joked that you were nothing more than a mall cop with a fancy badge. Knowingly, you laughed it off as the you donned on your equipment and deployed. While you mainly spent time at base, you honed your skills and recieved special implants to do your job easier at the low low cost of serving as a \"guard\" forever. Time to do your job, mission parameters look like they've expanded quite a bit though.", "traits": [ "MARTIAL_CRT", "PROF_FED" ], - "CBMs": [ - "bio_razors", - "bio_sunglasses", - "bio_ears", - "bio_speed", - "bio_str_enhancer", - "bio_torsionratchet", - "bio_power_storage" - ], + "CBMs": [ "bio_razors", "bio_sunglasses", "bio_ears", "bio_speed", "bio_str_enhancer" ], "points": 12, "skills": [ { "level": 3, "name": "gun" }, { "level": 3, "name": "pistol" }, { "level": 4, "name": "bashing" }, - { "level": 4, "name": "dodge" }, + { "level": 2, "name": "dodge" }, { "level": 4, "name": "melee" }, - { "level": 4, "name": "unarmed" }, + { "level": 2, "name": "unarmed" }, { "level": 2, "name": "speech" } ], "items": { "both": { "ammo": 100, "items": [ - "crt_helmet", - "crt_helmet_liner", "crt_mask", "crt_earmor", "crt_sarmor", @@ -330,6 +318,7 @@ "crt_boots", "two_way_radio", "crt_nstick", + "badge_marshal", "lighter" ], "entries": [ @@ -347,8 +336,8 @@ { "type": "profession", "ident": "crt_juggernaught", - "name": "C.R.I.T Lone Wolf", - "description": "STR 14 recommended. You are fully armored badass granted the full authority of a U.S Marshal. Sent in as the one man army capable of handling anything, you stalked into a warzone and laid out entire battalions by yourself, be it through cunning strategy or brute force. Time to hang them all.", + "name": "CRIT Lone Wolf", + "description": "STR 10 recommended. You are fully armored badass granted the full authority of a U.S Marshal. Sent in as the one man army capable of handling anything. Dropped into warzones, you singlehandedly laid out entire battalions by yourself. Time to hang them all.", "traits": [ "MARTIAL_CRT", "PROF_FED" ], "CBMs": [ "bio_weight", @@ -365,21 +354,14 @@ "bio_speed", "bio_str_enhancer", "bio_dex_enhancer", - "bio_int_enhancer", - "bio_membrane", - "bio_lockpick", - "bio_heat_absorb", - "bio_furnace", "bio_tattoo_led", "bio_eye_optic", "bio_targeting", - "bio_alarm", "bio_eye_enhancer", - "bio_solar", "bio_carbon", "bio_power_storage_mkII" ], - "points": 12, + "points": 20, "skills": [ { "level": 10, "name": "gun" }, { "level": 10, "name": "launcher" }, @@ -408,6 +390,7 @@ "two_way_radio", "crt_laser_gatling", "crt_nstick", + "badge_marshal", "lighter" ], "entries": [ @@ -426,9 +409,9 @@ { "type": "profession", "ident": "crt", - "name": "C.R.I.T Spec Ops", + "name": "CRIT Spec Ops", "description": "STR 10 recommended. You were an elite member of the Catastrophe Response/Research & Investigation Team. A looming spectre which responded to secular threats which allowed your faction to leap decades in front of other world powers. Your squad was the first to be deployed into the New England region, ground zero, to contain the impending outbreak and gain information to relay back to command. Good luck soldier.", - "traits": [ "MARTIAL_CRT" ], + "traits": [ "MARTIAL_CRT", "PROF_FED" ], "CBMs": [ "bio_razors", "bio_sunglasses", @@ -438,16 +421,15 @@ "bio_dex_enhancer", "bio_power_storage_mkII" ], - "points": 12, + "points": 18, "skills": [ { "level": 3, "name": "gun" }, { "level": 3, "name": "pistol" }, - { "level": 4, "name": "stabbing" }, - { "level": 4, "name": "bashing" }, - { "level": 4, "name": "cutting" }, - { "level": 4, "name": "dodge" }, - { "level": 4, "name": "melee" }, - { "level": 4, "name": "unarmed" }, + { "level": 3, "name": "stabbing" }, + { "level": 1, "name": "cutting" }, + { "level": 2, "name": "dodge" }, + { "level": 3, "name": "melee" }, + { "level": 3, "name": "unarmed" }, { "level": 2, "name": "survival" } ], "items": { @@ -476,12 +458,11 @@ "mre_veggy_box", "crt_mess_kit", "lighter", + "badge_marshal", "crt_etool" ], "entries": [ { "item": "sleeping_bag", "custom-flags": [ "no_auto_equip" ] }, - { "item": "crt_la_boots", "custom-flags": [ "no_auto_equip" ] }, - { "item": "crt_mask", "custom-flags": [ "no_auto_equip" ] }, { "item": "water_clean", "ammo-item": "water_clean", "container-item": "crt_canteen" }, { "item": "knife_crt", "container-item": "crt_belt" }, { "item": "knife_swissarmy", "container-item": "sheath" }, @@ -501,7 +482,7 @@ { "type": "profession", "ident": "crt_exile", - "name": "C.R.I.T Survivalist", + "name": "CRIT Survivalist", "description": "You were an elite recon of the C.R.I.T. You were hailed as a top survivalist after being stuck for weeks behind enemy lines and having to survive with nothing but some rocks, sticks and plants. However, after a few too many drinks (20) at the local bar and getting into a fight (knocking them out) with one of your commanding officers during a drunken bout you were stripped of your rank and sent off into the forests with your current gear to run a trial by survival. After an hour of scouting about in the forest for a good shelter, your radio rang and you were briefed over the fact that the world was suddenly ending. Of course, no one has time to pick your sorry ass up, so cheers. Staying away from drinks might be a good idea; at least you got some real tools this time!", "traits": [ "MARTIAL_CRT", "DRUNKEN", "ADDICTIVE" ], "points": 12, @@ -558,7 +539,7 @@ { "type": "profession", "ident": "crt_normie", - "name": "C.R.I.T Recruit", + "name": "CRIT Recruit", "description": "You were scheduled for some survival training in New England when the Cataclysm broke out and your instructor never showed up for the next lesson. Now stuck in the quarantine zone with your standard issue training equipment, you wish you had a better gun. Looks like you'll definitely learn a thing or two about survival though!", "traits": [ "MARTIAL_CRT" ], "points": 6, @@ -605,7 +586,7 @@ { "type": "profession", "ident": "crt_employee", - "name": "C.R.I.T Employee", + "name": "CRIT Employee", "description": "Like many others, you had requested to join the C.R.I.T organization's admin-offices to escape from bitter memories and past traumas after valiantly protecting your comrades for years. After you completed the readjustment program, your skills may have rusted considerably since your last deployment to battle, but the drilled muscle memories have not worn away. As your comrades' screams once again ring in your ears and repressed memories of abhorrent nature resurface, can you find it within yourself to overcome the looming terror which paralyzes you?", "traits": [ "MARTIAL_CRT", "SPIRITUAL", "SCHIZOPHRENIC", "JITTERY" ], "points": 6, @@ -647,7 +628,7 @@ { "type": "profession", "ident": "crt_engineer", - "name": "C.R.I.T Engineer", + "name": "CRIT Engineer", "description": "You were scheduled to fix the several of the lab facilities in New England and show other researchers the new weapons you were working on. When the Cataclysm broke out, it made it so testing was easier to do, but then again nothing seems to making that much sense. Time to bug-out!", "traits": [ "MARTIAL_CRT" ], "points": 12, @@ -693,7 +674,7 @@ { "type": "profession", "ident": "crt_vamp", - "name": "C.R.I.T Night Walker", + "name": "CRIT Night Walker", "description": "Your base in New England fell to the unholy onslaught of the Cataclysm. However, as a a top researcher in the R&D department, you had chosen to slowly mutate yourself into something more than human. Even if the concotion was less than perfect, your old flimsy body feels empowered. With the new flesh that is now your own, bare your fangs and fight until the next dawn.", "traits": [ "MARTIAL_CRT", @@ -716,7 +697,6 @@ "STRONGBACK", "FLIMSY", "SELFAWARE", - "INCONSPICUOUS", "MYOPIC", "CANNIBAL", "LIAR", @@ -736,17 +716,8 @@ "THIRST2", "SUNBURN" ], - "points": 12, - "skills": [ - { "level": 1, "name": "stabbing" }, - { "level": 1, "name": "cutting" }, - { "level": 3, "name": "dodge" }, - { "level": 3, "name": "melee" }, - { "level": 3, "name": "unarmed" }, - { "level": 5, "name": "cooking" }, - { "level": 3, "name": "fabrication" }, - { "level": 3, "name": "electronics" } - ], + "points": 16, + "skills": [ { "level": 5, "name": "cooking" }, { "level": 3, "name": "fabrication" }, { "level": 3, "name": "electronics" } ], "items": { "both": { "ammo": 100, diff --git a/data/mods/CRT_EXPANSION/scenarios/crt_scenarios.json b/data/mods/CRT_EXPANSION/scenarios/crt_scenarios.json index 1bbe36c01c1e8..edd39b307413e 100644 --- a/data/mods/CRT_EXPANSION/scenarios/crt_scenarios.json +++ b/data/mods/CRT_EXPANSION/scenarios/crt_scenarios.json @@ -1,23 +1,4 @@ [ - { - "type": "scenario", - "ident": "heli_crash", - "copy-from": "heli_crash", - "extend": { - "professions": [ - "crt_rotc", - "crt_rifleman", - "crt_medic", - "crt_saw", - "crt_nco", - "crt_officer", - "crt_normie", - "crt_employee", - "crt_vamp", - "crt" - ] - } - }, { "type": "scenario", "ident": "lab_chal", diff --git a/data/mods/Generic_Guns/gg_ammo_blacklist.json b/data/mods/Generic_Guns/gg_ammo_blacklist.json index cdbc32e294b9d..0064aea46ab60 100644 --- a/data/mods/Generic_Guns/gg_ammo_blacklist.json +++ b/data/mods/Generic_Guns/gg_ammo_blacklist.json @@ -2,7 +2,7 @@ { "type": "ITEM_BLACKLIST", "items": [ - "10mm", + "10mm_fmj", "120mm_HEAT", "12mm", "20x66_beanbag", @@ -20,7 +20,7 @@ "22_fmj", "22_lr", "22_ratshot", - "270", + "270win_jsp", "3006", "3006_incendiary", "3006fmj", @@ -78,10 +78,10 @@ "9x18mm", "9x18mmP2", "9x18mmfmj", - "reloaded_10mm", + "reloaded_10mm_fmj", "reloaded_22_lr", "reloaded_22_fmj", - "reloaded_270", + "reloaded_270win_jsp", "reloaded_3006", "reloaded_3006_incendiary", "reloaded_3006fmj", diff --git a/data/mods/Generic_Guns/gg_guns_override.json b/data/mods/Generic_Guns/gg_guns_override.json index 3d7ad66c7a9ec..455c405ae0a99 100644 --- a/data/mods/Generic_Guns/gg_guns_override.json +++ b/data/mods/Generic_Guns/gg_guns_override.json @@ -64,7 +64,8 @@ "name": "pump action shotgun", "description": "A pump-action single-barreled shotgun. It holds six shells in an internal tubular magazine", "clip_size": 6, - "reload": 100 + "reload": 100, + "magazines": [ [ "shot", [ "shot_speedloader6" ] ] ] }, { "id": "m1014", diff --git a/data/mods/Generic_Guns/gg_magazines_blacklist.json b/data/mods/Generic_Guns/gg_magazines_blacklist.json index bc912cce0eb6f..2510be942ab96 100644 --- a/data/mods/Generic_Guns/gg_magazines_blacklist.json +++ b/data/mods/Generic_Guns/gg_magazines_blacklist.json @@ -74,6 +74,7 @@ "ruger1022mag", "saiga10mag", "saiga30mag", + "shot_speedloader8", "sig40mag", "sigp230mag", "skorpion61mag", diff --git a/data/mods/Magiclysm/items/spell_scrolls.json b/data/mods/Magiclysm/items/spell_scrolls.json index 40d2cc22985b2..87d390461b68a 100644 --- a/data/mods/Magiclysm/items/spell_scrolls.json +++ b/data/mods/Magiclysm/items/spell_scrolls.json @@ -550,7 +550,7 @@ "type": "GENERIC", "copy-from": "spell_scroll", "id": "spell_scroll_synaptic_stimulation", - "name": "Scroll of Laze", + "name": "Scroll of Synaptic Stimulation", "description": "This spell stimulates the synapses in your brain beyond normal processing speeds, giving you a large boost in mental processing capability, including enhancing your reflexes, speed, and raw intellectual power. Use responsibly!", "use_action": { "type": "learn_spell", "spells": [ "synaptic_stimulation" ] } }, diff --git a/data/mods/Magiclysm/traits/mutation.json b/data/mods/Magiclysm/traits/mutation.json index c78ebf88a3641..a6f375f9dbe32 100644 --- a/data/mods/Magiclysm/traits/mutation.json +++ b/data/mods/Magiclysm/traits/mutation.json @@ -57,7 +57,7 @@ "cancels": [ "MANA_ADD1", "MANA_ADD2", "MANA_ADD3" ], "changes_to": [ "MANA_SUB2" ], "types": [ "MANA_ADD" ], - "mana_modifier": 500 + "mana_modifier": -500 }, { "type": "mutation", @@ -69,7 +69,7 @@ "changes_to": [ "MANA_SUB3" ], "types": [ "MANA_ADD" ], "prereqs": [ "MANA_SUB1" ], - "mana_modifier": 1000 + "mana_modifier": -1000 }, { "type": "mutation", @@ -80,7 +80,7 @@ "cancels": [ "MANA_ADD1", "MANA_ADD2", "MANA_ADD3" ], "types": [ "MANA_ADD" ], "prereqs": [ "MANA_SUB2" ], - "mana_modifier": 2000 + "mana_modifier": -2000 }, { "type": "mutation", diff --git a/data/mods/Mutant_NPCs/trait_groups.json b/data/mods/Mutant_NPCs/trait_groups.json index 22e4e9593d650..c8b08a0792f54 100644 --- a/data/mods/Mutant_NPCs/trait_groups.json +++ b/data/mods/Mutant_NPCs/trait_groups.json @@ -918,7 +918,6 @@ { "trait": "SCHIZOPHRENIC", "prob": 10 }, { "trait": "SQUEAMISH", "prob": 10 }, { "trait": "TRIGGERHAPPY", "prob": 10 }, - { "trait": "INCONSPICUOUS", "prob": 10 }, { "group": "Appearance_demographics", "prob": 100 } ] } diff --git a/data/mods/fast_healing/meds.json b/data/mods/fast_healing/meds.json index 44957fb20e05b..330f61ff7201c 100644 --- a/data/mods/fast_healing/meds.json +++ b/data/mods/fast_healing/meds.json @@ -11,7 +11,7 @@ "type": "COMESTIBLE", "copy-from": "antibiotics", "name": "antibiotics", - "plural_name": "antibiotics", + "name_plural": "antibiotics", "use_action": "STRONG_ANTIBIOTIC" } ] diff --git a/data/motd/en.motd b/data/motd/en.motd index 27b7dbf607129..172c271c2b224 100644 --- a/data/motd/en.motd +++ b/data/motd/en.motd @@ -12,7 +12,7 @@ Join the discussion on forums and chats: * Discourse: https://discourse.cataclysmdda.org/ -* Discord: https://discord.gg/jFEc7Yp +* Discord: https://discord.gg/jFEc7Yp * IRC: #CataclysmDDA at freenode.net * Reddit (unofficial): https://www.reddit.com/r/cataclysmdda/ diff --git a/data/motd/zh_CN.motd b/data/motd/zh_CN.motd index fe18a7603b026..90b90c809a115 100644 --- a/data/motd/zh_CN.motd +++ b/data/motd/zh_CN.motd @@ -1,19 +1,60 @@ # 列数 <= 78 -# Longer lines will be automatically folded +# 超过最大列数的文本会被换行显示 ############################################################################## -当前版本 0.C(代号 Cooper)的主要更新內容: -* 加入了怪物互斗系统。 -* 枪炮瞄准系统进行了大检修。 -* 改进了回转炮台控制面板。 -* 玩家能够在游戏中改造服装。 -* 新增大量可自制物品,主要有食品、服装、炸药、陶器以及金属制品。 -* 重新设计了可激活物品的使用菜单。 -* 改进了服装搭配与累赘系统。 -* 大幅度提高了处理大量物品时的效率。 -* 向下兼容 0.A 和 0.B 两个版本的存档。 - -若要了解该游戏的最新消息和讨论,请浏览以下网页: -主页:https://cataclysmdda.org -百科:https://cddawiki.chezzo.com/cdda_wiki - -在游戏中你可以通过帮助菜单查看游戏设置。(?2) + 相关链接: + +* 游戏主页: https://cataclysmdda.org +* 游戏百科: https://cddawiki.chezzo.com/cdda_wiki + +* 通过以下链接报告Bug,提出建议或者关注研发进度: + https://github.com/CleverRaven/Cataclysm-DDA/issues + 或者发电子邮件至: kevin.granade@gmail.com + +加入论坛讨论或聊天频道: +* Discourse: https://discourse.cataclysmdda.org/ +* Discord: https://discord.gg/jFEc7Yp +* IRC: #CataclysmDDA at freenode.net +* Reddit (非官方): https://www.reddit.com/r/cataclysmdda/ + +游戏主页上有更多的相关链接。 + +在游戏内你可以通过 ESC 键打开设置菜单。 + +****************************************************************************** + 关于实验版本的免责声明: +****************************************************************************** +问:实验版本是什么? +答:实验版是游戏质量把关的第二道防线,也是对通过第一道把关的新游戏内容进行发 +布、测试和平衡的前沿阵地。需要注意的是,如果你选择使用最新的实验版本,你相当于 +在通过测试新内容来参与到开发当中,因为这些新内容可能会包含Bug和未完成的功能。 + +问:为什么要有实验版本? +答:你可以把它想象成一个Alpha/Beta测试版本——Bug和未完成的内容必然在这种版本中存 +在。由于持续集成开发(CI)的频繁性,实验版本总是处于半成品状态。实验版本是用于寻 +找Bug和打磨功能的沙盒。各种大小功能都随时被加入到实验版本中以检查其稳定性和平 +衡性。正因如此,实验版本并不能保证平衡性和稳定性。实际上,实验版本没有任何质量 +保证。 + +问:那实验版本能玩吗? +答:当然。但是虽然实验版本总体上是稳定的,其稳定性并不能完全得到保证,因为有些 +功能可能会以未完成的状态加入,这是一方面。另一方面,新功能可能带来Bug,甚至严 +重到导致游戏崩溃或者存档损坏。这种严重Bug一般很少,但是由于游戏的复杂性,最初 +的质量把关可能存在不足,而人类是非常容易出错的。这也是为什么需要实验版本的原 +因。 + +问:那我该玩什么版本,实验版本还是稳定版本? +答:玩实验版本的好处是可以立刻体验到最新内容,而坏处是恶性Bug可能让你前功尽弃。 +游戏有稳定版本,所以你可以自己选择是否玩实验版本。在此说明,如果你要玩实验版 +本,请做好自行承担一切不良后果的准备。你可以备份存档文件来预防恶性Bug。有时候 +最好的方法是在大型更新发布后等待几天,直到新功能稳定后或恶性Bug修好后再进行更 +新。 + +问:还有其它注意事项吗? +答:有的。记住你看到的或将要看到的所有更新都可能进一步更改。所有功能,包括新功 +能,都处于开发状态,并且可能在游戏开发过程中变化。并且,同上所述,实验版本没有 +任何保证,无论是平衡性还是稳定性。 + +问:我感觉实验版本风险太高了怎么办? +答:如果你不能接受玩实验版本的风险,你可以玩游戏的稳定版。如果你愿意承担风险, +就请尽情享受实验版本新添加的内容。你也可以参与到实验版的开发当中:报告Bug,提 +出建议,甚至自己添加新的内容到这款游戏当中。祝好运。 diff --git a/doc/JSON_INFO.md b/doc/JSON_INFO.md index 2c4911e9d1fc3..05aaff21d1a20 100644 --- a/doc/JSON_INFO.md +++ b/doc/JSON_INFO.md @@ -1,6 +1,7 @@ -# JSON file contents +# Introduction +This document describes the contents of the json files used in Cataclysm: Dark days ahead. You are probably reading this if you want to add or change content of Catacysm: Dark days ahead and need to learn more about what to find where and what each file and property does. -## File descriptions +# File descriptions Here's a quick summary of what each of the JSON files contain, broken down by folder. ## `data/json/` @@ -130,7 +131,24 @@ Groups of vehicle definitions with self-explanatory names of files: | vans_busses.json | vehicles.json -# Raw JS +# Generic properties and formatting +This section describes properties and formatting that are applied to all of the JSON files. + +## Generic properties +A few properties are applicable to most if not all json files and do not need to be described for each json file. These properties are: + +| Identifier | Description +|--- |--- +| type | The type of object this json entry is describing. Setting this entry to 'armor' for example means the game will expect properties specific to armor in that entry. Also ties in with 'copy-from' (see below), if you want to inherit properties of another object, it must be of the same tipe. +| [copy-from](https://github.com/CleverRaven/Cataclysm-DDA/tree/master/doc/JSON_INHERITANCE.md) | The identifier of the item you wish to copy properties from. This allows you to make an exact copy of an item __of the same type__ and only provide entries that should change from the item you copied from. +| [extends](https://github.com/CleverRaven/Cataclysm-DDA/tree/master/doc/JSON_INHERITANCE.md) | Modders can add an "extends" field to their definition to append entries to a list instead of overriding the entire list. +| [delete](https://github.com/CleverRaven/Cataclysm-DDA/tree/master/doc/JSON_INHERITANCE.md) | Modders can also add a "delete" field that removes elements from lists instead of overriding the entire list. +| [abstract](https://github.com/CleverRaven/Cataclysm-DDA/tree/master/doc/JSON_INHERITANCE.md) | Creates an abstract item (an item that does not end up in the game and solely exists in the json to be copied-from. Use this _instead of_ 'id'. + + + +## Formatting +When editing JSON files make sure you apply the correct formatting as shown below. ### Time duration @@ -145,7 +163,7 @@ Examples: - " +1 day -23 hours 50m " `(1*24*60 - 23*60 + 50 == 110 minutes)` - "1 turn 1 minutes 9 turns" (1 minute and 10 seconds because 1 turn is 1 second) -### All Files +### Other formatting ```C++ "//" : "comment", // Preferred method of leaving comments inside json files. @@ -159,6 +177,13 @@ Some json strings are extracted for translation, for example item names, descrip Currently, only some JSON values support this syntax (see [here](https://github.com/CleverRaven/Cataclysm-DDA/blob/master/doc/TRANSLATING.md#translation) for a list of supported values). If you want other json strings to support this format, look at `translations.h|cpp` and migrate the corresponding code to it. Changes to `extract_json_strings.py` might also be needed, as with the new syntax "name" would be a `dict`, which may break unmigrated script. + +# Description and content of each JSON file +This section describes each json file and their contents. Each json has their own unique properties that are not shared with other Json files (for example 'chapters' property used in books does not apply to armor). This will make sure properties are only described and used within the context of the appropriate JSON file. + + +## `data/json/` JSONs + ### Bionics | Identifier | Description diff --git a/doc/JSON_INHERITANCE.md b/doc/JSON_INHERITANCE.md new file mode 100644 index 0000000000000..ee53b72e8d6bf --- /dev/null +++ b/doc/JSON_INHERITANCE.md @@ -0,0 +1,94 @@ +# JSON Inheritance +To reduce duplication in the JSON data it is possible for some types to inherit from an existing type. + +## Examples +In the following condensed example ```556``` ammo is derived from ```223``` ammo via ```copy-from```: +``` +"id": "556", +"copy-from": "223", +"type": "AMMO", +"name": "5.56 NATO M855A1", +"description": "5.56x45mm ammunition with a 62gr FMJ bullet...", +"price": 3500, +"relative": { + "damage": -2, + "pierce": 4, +}, +"extend": { "effects": [ "NEVER_MISFIRES" ] } +``` +The following rules apply to the above example: + +* Missing fields have the same value as the parent + +* Fields explicitly specified replace those of the parent type. The above example replaces ```name```, ```description``` and ```price```. + +* Numeric values may be specified ```relative``` to the parent. For example ```556``` has less ```damage``` but more ```pierce``` than ```223``` and will maintain this relationship if the definition for ```223``` is changed. + +* Flags can be added via ```extend```. For example ```556``` is military ammo and gains the ```NEVER_MISFIRES``` ammo effect. Any existing flags specified from ```223``` are preserved. + +* The entry you copied from must be of the same ```type``` as the item you added or changed (not all types are supported, see 'support' below) + +Reloaded ammo is derived from the factory equivalent but with a 10% penalty to ```damage``` and ```dispersion``` and a chance to misfire: + +``` +"id": "reloaded_556", +"copy-from": "556", +"type": "AMMO", +"name": "reloaded 5.56 NATO", +"proportional": { + "damage": 0.9, + "dispersion": 1.1 +}, +"extend": { "effects": [ "RECYCLED" ] }, +"delete": { "effects": [ "NEVER_MISFIRES" ] } +``` +The following additional rules apply to the above example: + +Chained inheritance is possible; for example ```reloaded_556``` inherits from ```556``` which is itself derived from ```223``` + +Numeric values may be specified ```proportional``` to the parent by via a decimal factor where ```0.5``` is 50% and ```2.0``` is 200%. + +Flags can be deleted via ```delete```. It is not an error if the deleted flag does not exist in the parent. + +It is possible to define an ```abstract``` type that exists only for other types to inherit from and cannot itself be used in game. In the following condensed example ```magazine_belt``` provides values common to all implemented ammo belts: +``` +"abstract": "magazine_belt", +"type": "MAGAZINE", +"name": "Ammo belt", +"description": "An ammo belt consisting of metal linkages which disintegrate upon firing.", +"rigid": false, +"armor_data": { + "covers": [ "TORSO" ], + ... +}, +"flags": [ "MAG_BELT", "MAG_DESTROY" ] +``` +The following additional rules apply to the above example: + +Missing mandatory fields do not result in errors as the ```abstract``` type is discarded after JSON loading completes + +Missing optional fields are set to the usual defaults for that type + +## Support +The following types currently support inheritance: +``` +GENERIC +AMMO +GUN +GUNMOD +MAGAZINE +TOOL (but not TOOL_ARMOR) +COMESTIBLE +BOOK +ENGINE +``` + +To find out if a types supports copy-from, you need to know if it has implemented generic_factory. To find out if this is the case, do the following: +* Open [init.cpp](https://github.com/CleverRaven/Cataclysm-DDA/tree/master/src/init.cpp) +* Find the line that mentions your type, for example `add( "gate", &gates::load );` +* Copy the load function, in this case it would be *gates::load* +* Use this in [the search bar on github](https://github.com/CleverRaven/Cataclysm-DDA/search?q=%22gates%3A%3Aload%22&unscoped_q=%22gates%3A%3Aload%22&type=Code) to find the file that contains *gates::load* +* In the search results you find [gates.cpp](https://github.com/CleverRaven/Cataclysm-DDA/tree/master/src/gates.cpp). open it. +* In gates.cpp, find the generic_factory line, it looks like this: `generic_factory gates_data( "gate type", "handle", "other_handles" );` +* Since the generic_factory line is present, you can now conclude that it supports copy-from. +* If you don't find generic_factoy present, it does not support copy-from, as is the case for type vitamin (repeat the above steps and find that [vitamin.cpp](https://github.com/CleverRaven/Cataclysm-DDA/tree/master/src/vitamin.cpp) does not contain generic_factoy) diff --git a/doc/MARTIALART_JSON.md b/doc/MARTIALART_JSON.md index 1ea018d07b799..e11b6dbc78ed6 100644 --- a/doc/MARTIALART_JSON.md +++ b/doc/MARTIALART_JSON.md @@ -52,6 +52,7 @@ "knockback_follow": 1, // Attacker will follow target if they are knocked back "stun_dur": 2, // Duration that target is stunned for "down_dur": 2, // Duration that target is downed for +"side_switch": true, // Technique moves the target behind user "disarms": true, // This technique can disarm the opponent "grab_break": true, // This technique may break a grab against the user "aoe": "spin", // This technique has an area-of-effect; doesn't work against solo targets diff --git a/doc/NPCs.md b/doc/NPCs.md index 12d389e6dda2c..b0192abb88cd2 100644 --- a/doc/NPCs.md +++ b/doc/NPCs.md @@ -430,6 +430,7 @@ Effect | Description `u_lose_var`, `npc_lose_var`: `var_name`, `type: type_str`, `context: context_str` | Your character or the NPC will clear any stored variable that has the same `var_name`, `type_str`, and `context_str`. `barber_hair` | Opens a menu allowing the player to choose a new hair style. `barber_beard` | Opens a menu allowing the player to choose a new beard style. +`u_learn_recipe: recipe_string` | Your character will learn and memorize the recipe `recipe_string`. #### Trade / Items @@ -564,6 +565,7 @@ Condition | Type | Description `"u_has_weapon"`
`"npc_has_weapon"` | simple string | `true` if the player character or NPC is wielding a weapon. `"u_driving"`
`"npc_driving"` | simple string | `true` if the player character or NPC is operating a vehicle. Note NPCs cannot currently operate vehicles. `"u_has_skill"`
`"npc_has_skill"` | dictionary | `u_has_skill` or `npc_has_skill` must be a dictionary with a `skill` string and a `level` int.
`true` if the player character or NPC has at least the value of `level` in `skill`. +`"u_know_recipe"` | string | `true` if the player character knows the recipe specified in `u_know_recipe`. It only counts as known if it is actually memorized--holding a book with the recipe in it will not count. #### Player Only conditions diff --git a/doc/TRANSLATING.md b/doc/TRANSLATING.md index 858f1ae819507..bd4304ec581c0 100644 --- a/doc/TRANSLATING.md +++ b/doc/TRANSLATING.md @@ -250,6 +250,11 @@ new syntax "name" would be a `dict`, which may break unmigrated script. | Mutation names/descriptions | NPC class names/descriptions | Tool quality names +| Skill names/descriptions +| Bionic names/descriptions +| Terrain bash sound descriptions +| Trap-vehicle collision sound descriptions +| Vehicle part names/descriptions ### Recommendations diff --git a/gfx/ChestHole16Tileset/tile_config.json b/gfx/ChestHole16Tileset/tile_config.json index 1b2d04648db63..dc4af572f4a8f 100644 --- a/gfx/ChestHole16Tileset/tile_config.json +++ b/gfx/ChestHole16Tileset/tile_config.json @@ -50771,15 +50771,7 @@ "rotates": false }, { - "id": "shotgun_trap", - "fg": 2602 - }, - { - "id": "tr_shotgun_2", - "fg": 2602 - }, - { - "id": "tr_shotgun_1", + "id": [ "shotgun_trap", "tr_shotgun_2", "tr_shotgun_2_1", "tr_shotgun_1" ], "fg": 2602 }, { diff --git a/gfx/ChestHole32Tileset/tile_config.json b/gfx/ChestHole32Tileset/tile_config.json index 056db30eaa68d..08db2f278a4c2 100644 --- a/gfx/ChestHole32Tileset/tile_config.json +++ b/gfx/ChestHole32Tileset/tile_config.json @@ -50746,15 +50746,7 @@ "rotates": false }, { - "id": "shotgun_trap", - "fg": 2602 - }, - { - "id": "tr_shotgun_2", - "fg": 2602 - }, - { - "id": "tr_shotgun_1", + "id": [ "shotgun_trap", "tr_shotgun_2", "tr_shotgun_2_1", "tr_shotgun_1" ], "fg": 2602 }, { diff --git a/gfx/ChestHole32Tileset_iso/tile_config.json b/gfx/ChestHole32Tileset_iso/tile_config.json index 03a72f6cb20db..0767f33344999 100644 --- a/gfx/ChestHole32Tileset_iso/tile_config.json +++ b/gfx/ChestHole32Tileset_iso/tile_config.json @@ -12635,8 +12635,8 @@ "rotates": false }, { - "fg": 2602, - "id": ["shotgun_trap", "tr_shotgun_2", "tr_shotgun_1"] + "id": [ "shotgun_trap", "tr_shotgun_2", "tr_shotgun_2_1", "tr_shotgun_1" ], + "fg": 2602 }, { "fg": 2603, diff --git a/gfx/ChestHoleTileset/tile_config.json b/gfx/ChestHoleTileset/tile_config.json index 29de6d6c160f5..68bd997e02897 100644 --- a/gfx/ChestHoleTileset/tile_config.json +++ b/gfx/ChestHoleTileset/tile_config.json @@ -50781,15 +50781,7 @@ "rotates": false }, { - "id": "shotgun_trap", - "fg": 2602 - }, - { - "id": "tr_shotgun_2", - "fg": 2602 - }, - { - "id": "tr_shotgun_1", + "id": [ "shotgun_trap", "tr_shotgun_2", "tr_shotgun_2_1", "tr_shotgun_1" ], "fg": 2602 }, { diff --git a/gfx/HitButton_iso/tile_config.json b/gfx/HitButton_iso/tile_config.json index 4680583be6405..519f635a39b3c 100644 --- a/gfx/HitButton_iso/tile_config.json +++ b/gfx/HitButton_iso/tile_config.json @@ -5113,7 +5113,7 @@ "fg": 1591 }, { - "id": ["rm20", "rm120c", "pipe_combination_gun", "blunderbuss", "shotgun_sawn", "shotgun_s", "shotgun_d", "remington_870", "mossberg_500", "ksg", "m1014", "saiga_12", "l_def_12", "revolver_shotgun", "pipe_shotgun", "pipe_double_shotgun", "pipe_shotgunsawn", "bigun", "abzats", "shotgun_trap", "tr_shotgun_1", "tr_shotgun_2" ], + "id": ["rm20", "rm120c", "pipe_combination_gun", "blunderbuss", "shotgun_sawn", "shotgun_s", "shotgun_d", "remington_870", "mossberg_500", "ksg", "m1014", "saiga_12", "l_def_12", "revolver_shotgun", "pipe_shotgun", "pipe_double_shotgun", "pipe_shotgunsawn", "bigun", "abzats", "shotgun_trap", "tr_shotgun_1", "tr_shotgun_2", "tr_shotgun_2_1" ], "fg": 1592 }, { diff --git a/gfx/HoderTileset/tile_config.json b/gfx/HoderTileset/tile_config.json index 224e08a55bb13..d6782cfa2311f 100644 --- a/gfx/HoderTileset/tile_config.json +++ b/gfx/HoderTileset/tile_config.json @@ -1899,13 +1899,7 @@ "rotates":false }, { - "id":"tr_shotgun_2", - "fg":1403, - "bg":191, - "rotates":false - }, - { - "id":"tr_shotgun_1", + "id": [ "tr_shotgun_2", "tr_shotgun_2_1", "tr_shotgun_1" ], "fg":1403, "bg":191, "rotates":false diff --git a/gfx/MSX++DeadPeopleEdition/tile_config.json b/gfx/MSX++DeadPeopleEdition/tile_config.json index c29fa213b4f72..a6ab8034f0037 100644 --- a/gfx/MSX++DeadPeopleEdition/tile_config.json +++ b/gfx/MSX++DeadPeopleEdition/tile_config.json @@ -88310,11 +88310,7 @@ "rotates": false }, { - "id": "tr_shotgun_2", - "fg": 3932 - }, - { - "id": "tr_shotgun_1", + "id": [ "tr_shotgun_2", "tr_shotgun_2_1", "tr_shotgun_1" ], "fg": 3932 }, { @@ -130112,4 +130108,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/gfx/MShock24TilesetModded/tile_config.json b/gfx/MShock24TilesetModded/tile_config.json index 0ac7cbbd7a8b8..79a48a8d6300a 100644 --- a/gfx/MShock24TilesetModded/tile_config.json +++ b/gfx/MShock24TilesetModded/tile_config.json @@ -22751,11 +22751,7 @@ "rotates": false }, { - "id": "tr_shotgun_2", - "fg": 2851 - }, - { - "id": "tr_shotgun_1", + "id": [ "tr_shotgun_2", "tr_shotgun_2_1", "tr_shotgun_1" ], "fg": 2851 }, { diff --git a/gfx/MShock32TilesetModded/tile_config.json b/gfx/MShock32TilesetModded/tile_config.json index 4f7fc06ff839d..99dc8bd4e8689 100644 --- a/gfx/MShock32TilesetModded/tile_config.json +++ b/gfx/MShock32TilesetModded/tile_config.json @@ -22751,11 +22751,7 @@ "rotates": false }, { - "id": "tr_shotgun_2", - "fg": 2851 - }, - { - "id": "tr_shotgun_1", + "id": [ "tr_shotgun_2", "tr_shotgun_2_1", "tr_shotgun_1" ], "fg": 2851 }, { diff --git a/gfx/MshockXotto+/tile_config.json b/gfx/MshockXotto+/tile_config.json index 42ef5d2a80d3f..fa82013d2cccd 100644 --- a/gfx/MshockXotto+/tile_config.json +++ b/gfx/MshockXotto+/tile_config.json @@ -35400,11 +35400,7 @@ "rotates": false }, { - "id": "tr_shotgun_2", - "fg": 3932 - }, - { - "id": "tr_shotgun_1", + "id": [ "tr_shotgun_2", "tr_shotgun_2_1", "tr_shotgun_1" ], "fg": 3932 }, { diff --git a/gfx/RetroDaysTileset/tile_config.json b/gfx/RetroDaysTileset/tile_config.json index be09303ffddea..a83745e07b88d 100644 --- a/gfx/RetroDaysTileset/tile_config.json +++ b/gfx/RetroDaysTileset/tile_config.json @@ -1,145 +1,40 @@ { "tile_info": [ - { - "height": 10, - "width": 10, - "pixelscale": 2 - } + { "height": 10, "width": 10, "pixelscale": 2 } ], "tiles-new": [ { "file": "tiles.png", "tiles": [ - { - "id": [ - "nothing", - "tr_ledge" - ], - "fg": 0 - }, - { - "id": [ - "t_hole", - "lighting_hidden" - ], - "fg": 1, - "rotates": false - }, - { - "id": "lighting_lowlight_dark", - "fg": 2, - "rotates": false - }, - { - "id": "lighting_lowlight_light", - "fg": 3, - "rotates": false - }, - { - "id": "lighting_boomered_dark", - "fg": 4, - "rotates": false - }, - { - "id": "lighting_boomered_light", - "fg": 5, - "rotates": false - }, - { - "id": "animation_line", - "fg": 6 - }, - { - "id": "animation_hit", - "fg": 7 - }, - { - "id": "fd_dazzling", - "fg": 8, - "rotates": false - }, - { - "id": [ - "fd_hot_air1", - "fd_hot_air2", - "fd_hot_air3", - "fd_hot_air4" - ], - "fg": 9, - "rotates": false - }, - { - "id": [ - "t_open_air", - "t_open_air_rooved" - ], - "fg": 10, - "rotates": false - }, - { - "id": "fd_spotlight", - "fg": 11, - "rotates": false - }, - { - "id": [ - "highlight", - "line_target", - "line_trail", - "cursor" - ], - "fg": 12 - }, - { - "id": "highlight_item", - "fg": 13, - "rotates": false - }, - { - "id": "unknown", - "fg": 14, - "rotates": false - }, - { - "id": "footstep", - "fg": 15, - "rotates": false - }, - { - "id": "infrared_creature", - "fg": 16, - "rotates": false - }, + { "id": [ "nothing", "tr_ledge" ], "fg": 0 }, + { "id": [ "t_hole", "lighting_hidden" ], "fg": 1, "rotates": false }, + { "id": "lighting_lowlight_dark", "fg": 2, "rotates": false }, + { "id": "lighting_lowlight_light", "fg": 3, "rotates": false }, + { "id": "lighting_boomered_dark", "fg": 4, "rotates": false }, + { "id": "lighting_boomered_light", "fg": 5, "rotates": false }, + { "id": "animation_line", "fg": 6 }, + { "id": "animation_hit", "fg": 7 }, + { "id": "fd_dazzling", "fg": 8, "rotates": false }, + { "id": [ "fd_hot_air1", "fd_hot_air2", "fd_hot_air3", "fd_hot_air4" ], "fg": 9, "rotates": false }, + { "id": [ "t_open_air", "t_open_air_rooved" ], "fg": 10, "rotates": false }, + { "id": "fd_spotlight", "fg": 11, "rotates": false }, + { "id": [ "highlight", "line_target", "line_trail", "cursor" ], "fg": 12 }, + { "id": "highlight_item", "fg": 13, "rotates": false }, + { "id": "unknown", "fg": 14, "rotates": false }, + { "id": "footstep", "fg": 15, "rotates": false }, + { "id": "infrared_creature", "fg": 16, "rotates": false }, { "id": "explosion", "fg": 17, "rotates": false, "multitile": true, "additional_tiles": [ - { - "id": "center", - "fg": 17 - }, - { - "id": "corner", - "fg": 18 - }, - { - "id": "edge", - "fg": 17 - }, - { - "id": "end_piece", - "fg": 17 - }, - { - "id": "t_connection", - "fg": 17 - }, - { - "id": "unconnected", - "fg": 17 - } + { "id": "center", "fg": 17 }, + { "id": "corner", "fg": 18 }, + { "id": "edge", "fg": 17 }, + { "id": "end_piece", "fg": 17 }, + { "id": "t_connection", "fg": 17 }, + { "id": "unconnected", "fg": 17 } ] }, { @@ -148,30 +43,12 @@ "rotates": false, "multitile": true, "additional_tiles": [ - { - "id": "center", - "fg": 19 - }, - { - "id": "corner", - "fg": 20 - }, - { - "id": "edge", - "fg": 19 - }, - { - "id": "end_piece", - "fg": 19 - }, - { - "id": "t_connection", - "fg": 19 - }, - { - "id": "unconnected", - "fg": 19 - } + { "id": "center", "fg": 19 }, + { "id": "corner", "fg": 20 }, + { "id": "edge", "fg": 19 }, + { "id": "end_piece", "fg": 19 }, + { "id": "t_connection", "fg": 19 }, + { "id": "unconnected", "fg": 19 } ] }, { @@ -180,21833 +57,7708 @@ "rotates": false, "multitile": true, "additional_tiles": [ - { - "id": "center", - "fg": 21 - }, - { - "id": "corner", - "fg": 22 - }, - { - "id": "edge", - "fg": 21 - }, - { - "id": "end_piece", - "fg": 21 - }, - { - "id": "t_connection", - "fg": 21 - }, - { - "id": "unconnected", - "fg": 21 - } - ] + { "id": "center", "fg": 21 }, + { "id": "corner", "fg": 22 }, + { "id": "edge", "fg": 21 }, + { "id": "end_piece", "fg": 21 }, + { "id": "t_connection", "fg": 21 }, + { "id": "unconnected", "fg": 21 } + ] + }, + { "id": "fd_laser", "fg": 23 }, + { "id": [ "animation_bullet_shrapnel", "animation_bullet_normal" ], "fg": 24 }, + { "id": "fd_plasma", "fg": 25 }, + { "id": "weather_rain_drop", "fg": 26 }, + { "id": "weather_acid_drop", "fg": 27 }, + { "id": "weather_snowflake", "fg": 28 }, + { "id": [ "t_water_moving_dp", "t_swater_dp", "t_water_dp" ], "fg": 29, "rotates": false }, + { "id": [ "t_water_moving_sh", "t_swater_sh", "t_water_pool", "t_water_sh" ], "fg": 30, "rotates": false }, + { "id": [ "t_slime", "t_sewage" ], "fg": 31, "rotates": false }, + { "id": [ "tr_lava", "t_lava" ], "fg": 32, "rotates": false }, + { "id": "t_sludge", "fg": 33, "rotates": false }, + { "id": "t_tar", "fg": 34, "rotates": false }, + { "id": [ "t_dirtfloor", "t_dirt" ], "fg": 35, "rotates": false }, + { "id": "t_dirt_season_winter", "fg": 36, "rotates": false }, + { "id": "t_searth_test", "fg": 37, "rotates": false }, + { "id": "t_sand", "fg": 38, "rotates": false }, + { "id": "t_clay", "fg": 39, "rotates": false }, + { "id": "t_woodchips", "fg": 40, "rotates": false }, + { "id": "f_ash", "fg": 41, "rotates": false }, + { "id": [ "fd_rubble", "f_rubble_rock" ], "fg": 42, "rotates": false }, + { "id": "f_rubble", "fg": 43, "rotates": false }, + { "id": [ "t_sidewalk_bg_dp", "t_sidewalk" ], "fg": 44, "rotates": false }, + { "id": [ "t_pavement_bg_dp", "t_pavement" ], "fg": 45, "rotates": false }, + { "id": [ "t_pavement_y_bg_dp", "t_pavement_y" ], "fg": 46, "rotates": false }, + { "id": "t_rock_floor", "fg": 47, "rotates": false }, + { + "id": [ "t_concrete_floor", "t_flat_roof", "t_strconc_floor", "t_thconc_floor", "t_railroad_rubble", "t_concrete" ], + "fg": 48, + "rotates": false }, + { "id": "t_thconc_floor_olight", "fg": 49, "rotates": false }, + { "id": [ "t_scrap_floor", "t_junk_floor", "t_metal_floor" ], "fg": 50, "rotates": false }, + { "id": "f_wreckage", "fg": 51, "rotates": false }, + { "id": [ "t_linoleum_gray", "t_strconc_floor_halfway" ], "fg": 52, "rotates": false }, + { "id": [ "t_floor_red", "t_carpet_red" ], "fg": 53, "rotates": false }, + { "id": [ "t_carpet_yellow", "t_floor_waxed_y" ], "fg": 54, "rotates": false }, + { "id": "t_floor_waxed", "fg": 55, "rotates": false }, + { "id": [ "f_tatami", "f_skin_groundsheet" ], "fg": 56, "rotates": false }, + { "id": "t_floor_primitive", "fg": 57, "rotates": false }, { - "id": "fd_laser", - "fg": 23 + "id": [ "f_groundsheet", "f_fema_groundsheet", "f_large_groundsheet", "f_center_groundsheet" ], + "fg": 58, + "rotates": false }, + { "id": [ "t_floor_green", "t_carpet_green" ], "fg": 59, "rotates": false }, + { "id": "t_floor_blue", "fg": 60, "rotates": false }, + { "id": "t_floor", "fg": 61, "rotates": false }, + { "id": "t_carpet_purple", "fg": 62, "rotates": false }, + { "id": "t_elevator", "fg": 63, "rotates": false }, + { "id": [ "t_skylight", "t_linoleum_white", "t_paper_floor", "f_canvas_floor" ], "fg": 64, "rotates": false }, + { "id": [ "t_claymound", "t_dirtmoundfloor", "t_dirtmound" ], "fg": 65, "rotates": false }, + { "id": "t_sandmound", "fg": 66, "rotates": false }, + { "id": [ "t_grass", "t_grass_season_spring" ], "fg": 67, "rotates": false }, + { "id": "t_grass_season_summer", "fg": 68, "rotates": false }, + { "id": "t_grass_season_autumn", "fg": 69, "rotates": false }, + { "id": "t_grass_season_winter", "fg": 70, "rotates": false }, + { "id": [ "t_fungus", "t_grass_white" ], "fg": 71, "rotates": false }, + { "id": [ "t_grass_long", "t_grass_long_season_spring" ], "fg": 72, "rotates": false }, + { "id": "t_grass_long_season_summer", "fg": 73, "rotates": false }, + { "id": "t_grass_long_season_autumn", "fg": 74, "rotates": false }, + { "id": "t_grass_long_season_winter", "fg": 75, "rotates": false }, + { "id": [ "t_grass_tall", "t_grass_tall_season_spring" ], "fg": 76, "rotates": false }, + { "id": "t_grass_tall_summer", "fg": 77, "rotates": false }, + { "id": "t_grass_tall_season_autumn", "fg": 78, "rotates": false }, + { "id": "t_grass_tall_season_winter", "fg": 79, "rotates": false }, + { "id": [ "t_underbrush_season_spring", "t_underbrush" ], "fg": 80, "rotates": false }, + { "id": "t_underbrush_season_summer", "fg": 81, "rotates": false }, + { "id": "t_underbrush_season_autumn", "fg": 82, "rotates": false }, + { "id": "t_underbrush_season_winter", "fg": 83, "rotates": false }, + { "id": "mon_minecraft", "fg": 84, "rotates": false }, + { "id": "mon_minecraft_charged", "fg": 85, "rotates": false }, + { "id": "mon_minecraft_season_winter", "fg": 86, "rotates": false }, + { "id": "mon_minecraft_charged_season_winter", "fg": 87, "rotates": false }, { "id": [ - "animation_bullet_shrapnel", - "animation_bullet_normal" + "t_underbrush_harvested_spring", + "t_underbrush_harvested_spring_season_spring", + "t_underbrush_harvested_summer", + "t_underbrush_harvested_summer_season_spring", + "t_underbrush_harvested_autumn", + "t_underbrush_harvested_autumn_season_spring", + "t_underbrush_harvested_winter", + "t_underbrush_harvested_winter_season_spring" ], - "fg": 24 - }, - { - "id": "fd_plasma", - "fg": 25 - }, - { - "id": "weather_rain_drop", - "fg": 26 - }, - { - "id": "weather_acid_drop", - "fg": 27 - }, - { - "id": "weather_snowflake", - "fg": 28 + "fg": 88, + "rotates": false }, { "id": [ - "t_water_moving_dp", - "t_swater_dp", - "t_water_dp" + "t_underbrush_harvested_spring_season_summer", + "t_underbrush_harvested_summer_season_summer", + "t_underbrush_harvested_autumn_season_summer", + "t_underbrush_harvested_winter_season_summer" ], - "fg": 29, + "fg": 89, "rotates": false }, { "id": [ - "t_water_moving_sh", - "t_swater_sh", - "t_water_pool", - "t_water_sh" + "t_underbrush_harvested_spring_season_autumn", + "t_underbrush_harvested_summer_season_autumn", + "t_underbrush_harvested_autumn_season_autumn", + "t_underbrush_harvested_winter_season_autumn" ], - "fg": 30, + "fg": 90, "rotates": false }, { "id": [ - "t_slime", - "t_sewage" + "t_underbrush_harvested_spring_season_winter", + "t_underbrush_harvested_summer_season_winter", + "t_underbrush_harvested_autumn_season_winter" ], - "fg": 31, + "fg": 91, "rotates": false }, + { "id": "t_underbrush_harvested_winter_season_winter", "fg": 92, "rotates": false }, { "id": [ - "tr_lava", - "t_lava" + "t_shrub", + "t_shrub_season_spring", + "t_shrub_peanut", + "t_shrub_peanut_season_spring", + "t_shrub_peanut_harvested", + "t_shrub_peanut_harvested_season_spring" ], - "fg": 32, + "fg": 93, "rotates": false }, { - "id": "t_sludge", - "fg": 33, + "id": [ "t_shrub_peanut_season_summer", "t_shrub_peanut_harvested_season_summer", "t_shrub_season_summer" ], + "fg": 94, "rotates": false }, { - "id": "t_tar", - "fg": 34, + "id": [ "t_shrub_season_autumn", "t_shrub_peanut_season_autumn", "t_shrub_peanut_harvested_season_autumn" ], + "fg": 95, "rotates": false }, { "id": [ - "t_dirtfloor", - "t_dirt" + "t_shrub_peanut_season_winter", + "t_shrub_peanut_harvested_season_winter", + "t_shrub_blueberry_season_winter", + "t_shrub_strawberry_season_winter", + "t_shrub_season_winter" ], - "fg": 35, - "rotates": false - }, - { - "id": "t_dirt_season_winter", - "fg": 36, - "rotates": false - }, - { - "id": "t_searth_test", - "fg": 37, - "rotates": false - }, - { - "id": "t_sand", - "fg": 38, - "rotates": false - }, - { - "id": "t_clay", - "fg": 39, + "fg": 96, "rotates": false }, { - "id": "t_woodchips", - "fg": 40, + "id": [ "t_shrub_strawberry_harvested", "t_shrub_strawberry_season_spring", "t_shrub_strawberry_season_autumn" ], + "fg": 97, "rotates": false }, + { "id": "t_shrub_strawberry", "fg": 98, "rotates": false }, { - "id": "f_ash", - "fg": 41, + "id": [ "t_shrub_blueberry_harvested", "t_shrub_blueberry_season_spring", "t_shrub_blueberry_season_autumn" ], + "fg": 99, "rotates": false }, + { "id": "t_shrub_blueberry", "fg": 100, "rotates": false }, + { "id": "t_shrub_fungal", "fg": 101, "rotates": false }, + { "id": [ "t_tree_young", "t_tree_young_season_spring" ], "fg": 102, "rotates": false }, + { "id": "t_tree_young_season_summer", "fg": 103, "rotates": false }, + { "id": "t_tree_young_season_autumn", "fg": 104, "rotates": false }, + { "id": "t_tree_fungal_young", "fg": 105, "rotates": false }, + { "id": "t_tree_young_season_winter", "fg": 106, "rotates": false }, + { "id": "t_tree_fungal", "fg": 107, "rotates": false }, + { "id": [ "t_tree_cherry", "t_tree_plum" ], "fg": 108, "rotates": false }, { "id": [ - "fd_rubble", - "f_rubble_rock" + "t_tree_season_autumn", + "t_tree_harvested_season_autumn", + "t_tree_cherry_season_autumn", + "t_tree_plum_season_autumn", + "t_tree_peach_season_autumn", + "t_tree_apricot_season_autumn" ], - "fg": 42, + "fg": 109, "rotates": false }, + { "id": [ "t_tree_peach", "t_tree_apricot" ], "fg": 110, "rotates": false }, + { "id": [ "t_tree_peach_harvested", "t_tree_apricot_harvested" ], "fg": 111, "rotates": false }, { - "id": "f_rubble", - "fg": 43, + "id": [ "t_tree_harvested", "t_tree_season_summer", "t_tree_harvested_season_summer", "t_tree_harvested_season_spring" ], + "fg": 112, "rotates": false }, { "id": [ - "t_sidewalk_bg_dp", - "t_sidewalk" + "t_tree_season_spring", + "t_tree", + "t_tree_apple_season_summer", + "t_tree_pear_season_summer", + "t_tree_apple_harvested", + "t_tree_pear_harvested" ], - "fg": 44, + "fg": 113, "rotates": false }, + { "id": [ "t_tree_apple", "t_tree_pear" ], "fg": 114, "rotates": false }, + { "id": "t_marloss_tree", "fg": 115, "rotates": false }, { "id": [ - "t_pavement_bg_dp", - "t_pavement" + "t_tree_cherry_season_spring", + "t_tree_plum_season_spring", + "t_tree_cherry_harvested", + "t_tree_plum_harvested", + "t_tree_apple_season_spring", + "t_tree_pear_season_spring", + "t_tree_peach_season_spring", + "t_tree_apricot_season_spring" ], - "fg": 45, + "fg": 116, "rotates": false }, + { "id": "t_tree_maple_season_autumn", "fg": 117, "rotates": false }, { "id": [ - "t_pavement_y_bg_dp", - "t_pavement_y" + "t_tree_blackjack_season_autumn", + "t_tree_hickory_season_autumn", + "t_tree_hickory_harvested_season_autumn", + "t_tree_almond_season_autumn", + "t_tree_almond_harvested_season_autumn", + "t_tree_pecan_season_autumn", + "t_tree_pecan_harvested_season_autumn" ], - "fg": 46, - "rotates": false - }, - { - "id": "t_rock_floor", - "fg": 47, + "fg": 118, "rotates": false }, { "id": [ - "t_concrete_floor", - "t_flat_roof", - "t_strconc_floor", - "t_thconc_floor", - "t_railroad_rubble", - "t_concrete" + "t_tree_blackjack_season_spring", + "t_tree_hickory_season_spring", + "t_tree_hickory", + "t_tree_hickory_harvested_season_spring", + "t_tree_hickory_harvested", + "t_tree_maple_season_spring", + "t_tree_maple", + "t_tree_almond_season_spring", + "t_tree_almond", + "t_tree_almond_harvested_season_spring", + "t_tree_almond_harvested", + "t_tree_pecan_season_spring", + "t_tree_pecan", + "t_tree_pecan_harvested_season_spring", + "t_tree_pecan_harvested" ], - "fg": 48, - "rotates": false - }, - { - "id": "t_thconc_floor_olight", - "fg": 49, + "fg": 119, "rotates": false }, { "id": [ - "t_scrap_floor", - "t_junk_floor", - "t_metal_floor" + "t_tree_hickory_season_summer", + "t_tree_hickory_harvested_season_summer", + "t_tree_almond_season_summer", + "t_tree_almond_harvested_season_summer", + "t_tree_pecan_season_summer", + "t_tree_pecan_harvested_season_summer", + "t_tree_maple_season_summer", + "t_tree_blackjack" ], - "fg": 50, - "rotates": false - }, - { - "id": "f_wreckage", - "fg": 51, + "fg": 120, "rotates": false }, + { "id": "t_tree_maple_tapped_season_autumn", "fg": 121, "rotates": false }, + { "id": "t_tree_maple_tapped_season_summer", "fg": 122, "rotates": false }, + { "id": [ "t_tree_maple_tapped", "t_tree_maple_tapped_season_spring" ], "fg": 123, "rotates": false }, + { "id": "mon_treent_green", "fg": 124, "rotates": false }, + { "id": "t_tree_birch_harvested_season_autumn", "fg": 125, "rotates": false }, + { "id": "t_tree_birch_season_autumn", "fg": 126, "rotates": false }, + { "id": "t_tree_birch_season_summer", "fg": 127, "rotates": false }, + { "id": "t_tree_birch_harvested_season_summer", "fg": 128, "rotates": false }, + { "id": [ "t_tree_birch_season_spring", "t_tree_birch" ], "fg": 129, "rotates": false }, + { "id": [ "t_tree_birch_harvested_season_spring", "t_tree_birch_harvested" ], "fg": 130, "rotates": false }, + { "id": "t_tree_willow_season_autumn", "fg": 131, "rotates": false }, + { "id": "t_tree_willow_harvested_season_autumn", "fg": 132, "rotates": false }, + { "id": "t_tree_willow_season_summer", "fg": 133, "rotates": false }, + { "id": [ "t_tree_willow_season_spring", "t_tree_willow" ], "fg": 134, "rotates": false }, + { "id": [ "t_tree_willow_harvested_season_spring", "t_tree_willow_harvested" ], "fg": 135, "rotates": false }, + { "id": "t_tree_willow_harvested_season_summer", "fg": 136, "rotates": false }, + { "id": "t_tree_pine", "fg": 137, "rotates": false }, + { "id": "t_tree_deadpine", "fg": 138, "rotates": false }, { "id": [ - "t_linoleum_gray", - "t_strconc_floor_halfway" + "t_tree_hickory_dead", + "t_tree_blackjack_harvested_season_spring", + "t_tree_blackjack_harvested_season_summer", + "t_tree_blackjack_harvested_season_autumn", + "mon_treent" ], - "fg": 52, + "fg": 139, "rotates": false }, + { "id": "t_tree_dead", "fg": 140, "rotates": false }, + { "id": "t_tree_deadpine_season_winter", "fg": 141, "rotates": false }, + { "id": "t_tree_pine_season_winter", "fg": 142, "rotates": false }, { "id": [ - "t_floor_red", - "t_carpet_red" + "t_tree_blackjack_harvested_season_winter", + "mon_treent_season_winter", + "mon_treent_green_season_winter", + "t_tree_hickory_dead_season_winter" ], - "fg": 53, + "fg": 143, "rotates": false }, { "id": [ - "t_carpet_yellow", - "t_floor_waxed_y" + "t_tree_harvested_season_winter", + "t_tree_cherry_season_winter", + "t_tree_plum_season_winter", + "t_tree_apple_season_winter", + "t_tree_pear_season_winter", + "t_tree_peach_season_winter", + "t_tree_apricot_season_winter", + "t_tree_apple_harvested_season_winter", + "t_tree_apricot_harvested_season_winter", + "t_tree_cherry_harvested_season_winter", + "t_tree_peach_harvested_season_winter", + "t_tree_pear_harvested_season_winter", + "t_tree_plum_harvested_season_winter", + "t_tree_season_winter" ], - "fg": 54, - "rotates": false - }, - { - "id": "t_floor_waxed", - "fg": 55, + "fg": 144, "rotates": false }, { "id": [ - "f_tatami", - "f_skin_groundsheet" + "t_tree_birch_harvested_season_winter", + "t_tree_hickory_season_winter", + "t_tree_hickory_harvested_season_winter", + "t_tree_almond_season_winter", + "t_tree_almond_harvested_season_winter", + "t_tree_pecan_season_winter", + "t_tree_pecan_harvested_season_winter", + "t_tree_maple_season_winter", + "t_tree_willow_season_winter", + "t_tree_blackjack_season_winter" ], - "fg": 56, + "fg": 145, "rotates": false }, + { "id": "t_tree_birch_season_winter", "fg": 146, "rotates": false }, + { "id": "t_tree_willow_harvested_season_winter", "fg": 147, "rotates": false }, + { "id": "t_tree_dead_season_winter", "fg": 148, "rotates": false }, + { "id": "t_tree_maple_tapped_season_winter", "fg": 149, "rotates": false }, + { "id": "t_trunk", "fg": 150, "rotates": false }, + { "id": "t_stump", "fg": 151, "rotates": false }, + { "id": "t_marloss", "fg": 152, "rotates": false }, + { "id": "t_fungus_mound", "fg": 153, "rotates": false }, + { "id": "t_fungus_floor_sup", "fg": 154, "rotates": false }, { - "id": "t_floor_primitive", - "fg": 57, - "rotates": false + "id": "vp_cargo_bag", + "fg": 154, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, + { "id": "t_fungus_floor_out", "fg": 156, "rotates": false }, + { "id": "t_fungus_floor_in", "fg": 157, "rotates": false }, + { "id": [ "t_fungus_wall_transformed", "t_fungus_wall" ], "fg": 158, "rotates": false }, { - "id": [ - "f_groundsheet", - "f_fema_groundsheet", - "f_large_groundsheet", - "f_center_groundsheet" - ], - "fg": 58, - "rotates": false + "id": "tr_goo", + "fg": 159, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 160 }, + { "id": "corner", "fg": 161 }, + { "id": "edge", "fg": 162 }, + { "id": "end_piece", "fg": 163 }, + { "id": "t_connection", "fg": 164 }, + { "id": "unconnected", "fg": 159 } + ] }, + { "id": [ "t_pit_foxhole", "tr_sinkhole" ], "fg": 165, "rotates": false }, { - "id": [ - "t_floor_green", - "t_carpet_green" - ], - "fg": 59, - "rotates": false + "id": "t_pit_shallow", + "fg": 166, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 167 }, + { "id": "corner", "fg": 168 }, + { "id": "edge", "fg": 169 }, + { "id": "end_piece", "fg": 170 }, + { "id": "t_connection", "fg": 171 }, + { "id": "unconnected", "fg": 166 } + ] }, { - "id": "t_floor_blue", - "fg": 60, - "rotates": false - }, - { - "id": "t_floor", - "fg": 61, - "rotates": false + "id": [ "tr_pit", "t_pit" ], + "fg": 165, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 172 }, + { "id": "corner", "fg": 173 }, + { "id": "edge", "fg": 174 }, + { "id": "end_piece", "fg": 175 }, + { "id": "t_connection", "fg": 176 }, + { "id": "unconnected", "fg": 165 } + ] }, { - "id": "t_carpet_purple", - "fg": 62, - "rotates": false + "id": [ "t_pit_spiked", "tr_spike_pit" ], + "fg": 177, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 178 }, + { "id": "corner", "fg": 179 }, + { "id": "edge", "fg": 180 }, + { "id": "end_piece", "fg": 181 }, + { "id": "t_connection", "fg": 182 }, + { "id": "unconnected", "fg": 177 } + ] }, { - "id": "t_elevator", - "fg": 63, - "rotates": false + "id": [ "tr_glass_pit", "t_pit_glass" ], + "fg": 183, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 184 }, + { "id": "corner", "fg": 185 }, + { "id": "edge", "fg": 186 }, + { "id": "end_piece", "fg": 187 }, + { "id": "t_connection", "fg": 188 }, + { "id": "unconnected", "fg": 183 } + ] }, { - "id": [ - "t_skylight", - "t_linoleum_white", - "t_paper_floor", - "f_canvas_floor" - ], - "fg": 64, - "rotates": false + "id": "t_pit_corpsed", + "fg": 189, + "bg": 194, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "center", "bg": 194 }, + { "id": "corner", "fg": 190, "bg": 194 }, + { "id": "edge", "fg": 191, "bg": 194 }, + { "id": "end_piece", "fg": 192, "bg": 194 }, + { "id": "t_connection", "fg": 193, "bg": 194 }, + { "id": "unconnected", "fg": 189, "bg": 194 } + ] }, { - "id": [ - "t_claymound", - "t_dirtmoundfloor", - "t_dirtmound" - ], - "fg": 65, - "rotates": false + "id": "f_rubble_landfill", + "fg": 189, + "bg": 195, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "center", "bg": 195 }, + { "id": "corner", "fg": 190, "bg": 195 }, + { "id": "edge", "fg": 191, "bg": 195 }, + { "id": "end_piece", "fg": 192, "bg": 195 }, + { "id": "t_connection", "fg": 193, "bg": 195 }, + { "id": "unconnected", "fg": 189, "bg": 195 } + ] }, { - "id": "t_sandmound", - "fg": 66, - "rotates": false + "id": "f_rubble_landfill_season_winter", + "fg": 189, + "bg": 196, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "center", "bg": 196 }, + { "id": "corner", "fg": 190, "bg": 196 }, + { "id": "edge", "fg": 191, "bg": 196 }, + { "id": "end_piece", "fg": 192, "bg": 196 }, + { "id": "t_connection", "fg": 193, "bg": 196 }, + { "id": "unconnected", "fg": 189, "bg": 196 } + ] }, + { "id": [ "t_pit_glass_covered", "t_pit_spiked_covered", "t_pit_covered" ], "fg": 197, "rotates": false }, { - "id": [ - "t_grass", - "t_grass_season_spring" - ], - "fg": 67, - "rotates": false - }, + "id": "t_sandbox", + "fg": 198, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 199 }, + { "id": "corner", "fg": 200 }, + { "id": "edge", "fg": 201 }, + { "id": "end_piece", "fg": 202 }, + { "id": "t_connection", "fg": 203 }, + { "id": "unconnected", "fg": 198 } + ] + }, + { "id": "t_wax", "fg": 204, "rotates": false }, + { "id": "t_floor_wax", "fg": 205, "rotates": false }, + { "id": "t_golf_hole", "fg": 206, "rotates": false }, + { "id": "t_rock_red", "fg": 207, "rotates": false }, + { "id": "t_rock_green", "fg": 208, "rotates": false }, + { "id": "t_rock_blue", "fg": 209, "rotates": false }, + { "id": "t_rock", "fg": 210, "rotates": false }, + { "id": "t_rock_smooth", "fg": 211, "rotates": false }, + { "id": "t_fault", "fg": 212, "rotates": false }, + { "id": "t_paper", "fg": 213, "rotates": false }, + { "id": "t_stairs_up", "fg": 214, "rotates": false }, + { "id": "t_stairs_down", "fg": 215, "rotates": false }, + { "id": "t_slope_up", "fg": 216, "rotates": false }, + { "id": "t_slope_down", "fg": 217, "rotates": false }, + { "id": "t_low_stairs_begin", "fg": 218, "rotates": false }, + { "id": "t_low_stairs_end", "fg": 219, "rotates": false }, + { "id": "t_manhole", "fg": 220, "rotates": false }, + { "id": [ "manhole_cover", "t_manhole_cover" ], "fg": 221, "rotates": false }, + { "id": "t_ladder_up", "fg": 222, "rotates": false }, + { "id": "t_ladder_down", "fg": 223, "rotates": false }, + { "id": "f_ladder", "fg": 224, "rotates": false }, { - "id": "t_grass_season_summer", - "fg": 68, - "rotates": false + "id": "vp_travois", + "fg": 224, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 225 } ] }, + { "id": "t_rope_up", "fg": 226, "rotates": false }, { - "id": "t_grass_season_autumn", - "fg": 69, - "rotates": false + "id": "t_root_wall", + "fg": 227, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 228 }, + { "id": "corner", "fg": 229 }, + { "id": "edge", "fg": 227 }, + { "id": "end_piece", "fg": 230 }, + { "id": "t_connection", "fg": 231 }, + { "id": "unconnected", "fg": 227 } + ] }, { - "id": "t_grass_season_winter", - "fg": 70, - "rotates": false + "id": "t_improvised_fence", + "fg": 232, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 233 }, + { "id": "corner", "fg": 234 }, + { "id": "edge", "fg": 232 }, + { "id": "end_piece", "fg": 235 }, + { "id": "t_connection", "fg": 236 }, + { "id": "unconnected", "fg": 232 } + ] }, { - "id": [ - "t_fungus", - "t_grass_white" - ], - "fg": 71, - "rotates": false + "id": "t_fence_rope", + "fg": 227, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 233 }, + { "id": "corner", "fg": 234 }, + { "id": "edge", "fg": 227 }, + { "id": "end_piece", "fg": 235 }, + { "id": "t_connection", "fg": 236 }, + { "id": "unconnected", "fg": 227 } + ] }, + { "id": "t_fence_post", "fg": 237, "rotates": false }, { - "id": [ - "t_grass_long", - "t_grass_long_season_spring" - ], - "fg": 72, - "rotates": false + "id": "vp_spike_wood", + "fg": 237, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 225 } ] }, { - "id": "t_grass_long_season_summer", - "fg": 73, - "rotates": false + "id": [ "t_fence_h", "t_fence_v", "t_fence" ], + "fg": 238, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 239 }, + { "id": "corner", "fg": [ 240, 241, 242, 238 ] }, + { "id": "edge", "fg": [ 243, 244, 243, 244 ] }, + { "id": "end_piece", "fg": [ 243, 244, 245, 238 ] }, + { "id": "t_connection", "fg": [ 244, 241, 239, 242 ] }, + { "id": "unconnected", "fg": 238 } + ] }, + { "id": "t_fencegate_c", "fg": [ 246, 247, 246, 247 ], "rotates": true }, + { "id": "t_fencegate_o", "fg": [ 248, 249, 248, 249 ], "rotates": true }, + { "id": "t_palisade", "fg": [ 250, 251, 250, 251 ], "rotates": true }, + { "id": "t_palisade_gate", "fg": [ 252, 253, 252, 253 ], "rotates": true }, + { "id": "t_palisade_gate_o", "fg": [ 254, 255, 254, 255 ], "rotates": true }, + { "id": "t_portcullis", "fg": 256, "rotates": false }, + { "id": [ "t_support_s", "t_chainfence_posts" ], "fg": 257, "rotates": false }, { - "id": "t_grass_long_season_autumn", - "fg": 74, - "rotates": false + "id": "t_iron_fence", + "fg": 258, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 259 }, + { "id": "corner", "fg": 260 }, + { "id": "edge", "fg": 258 }, + { "id": "end_piece", "fg": 261 }, + { "id": "t_connection", "fg": 262 }, + { "id": "unconnected", "fg": 258 } + ] }, { - "id": "t_grass_long_season_winter", - "fg": 75, - "rotates": false + "id": [ "t_chainfence_v", "t_chainfence", "t_chainfence_h", "t_fence_wire" ], + "fg": 263, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 259 }, + { "id": "corner", "fg": 260 }, + { "id": "edge", "fg": 263 }, + { "id": "end_piece", "fg": 261 }, + { "id": "t_connection", "fg": 262 }, + { "id": "unconnected", "fg": 263 } + ] }, { - "id": [ - "t_grass_tall", - "t_grass_tall_season_spring" - ], - "fg": 76, - "rotates": false + "id": "t_fence_barbed", + "fg": 264, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 259 }, + { "id": "corner", "fg": 265 }, + { "id": "edge", "fg": 264 }, + { "id": "end_piece", "fg": 266 }, + { "id": "t_connection", "fg": 267 }, + { "id": "unconnected", "fg": 264 } + ] }, + { "id": "t_iron_fence_posts", "fg": 268, "rotates": false }, + { "id": "t_chaingate_o", "fg": 269, "rotates": false }, + { "id": "t_chaingate_c", "fg": 270, "rotates": false }, + { "id": "t_chaingate_l", "fg": 271, "rotates": false }, { - "id": "t_grass_tall_summer", - "fg": 77, - "rotates": false + "id": [ "t_reb_cage", "t_bars" ], + "fg": 272, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 273 }, + { "id": "corner", "fg": 274 }, + { "id": "edge", "fg": 275 }, + { "id": "end_piece", "fg": 275 }, + { "id": "t_connection", "fg": 276 }, + { "id": "unconnected", "fg": 272 } + ] }, { - "id": "t_grass_tall_season_autumn", - "fg": 78, - "rotates": false + "id": "t_window_bars", + "fg": 275, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 273 }, + { "id": "corner", "fg": 274 }, + { "id": "edge", "fg": 275 }, + { "id": "end_piece", "fg": 275 }, + { "id": "t_connection", "fg": 276 }, + { "id": "unconnected", "fg": 275 } + ] }, + { "id": [ "t_ov_reb_cage", "t_ov_smreb_cage", "t_metal" ], "fg": 277, "rotates": false }, { - "id": "t_grass_tall_season_winter", - "fg": 79, - "rotates": false + "id": "t_wall_wattle_half", + "fg": 278, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 279 }, + { "id": "corner", "fg": 280 }, + { "id": "edge", "fg": 281 }, + { "id": "end_piece", "fg": 282 }, + { "id": "t_connection", "fg": 283 }, + { "id": "unconnected", "fg": 278 } + ] }, { - "id": [ - "t_underbrush_season_spring", - "t_underbrush" - ], - "fg": 80, - "rotates": false + "id": [ "t_wall_half", "t_wall_log_half" ], + "fg": 284, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 285 }, + { "id": "corner", "fg": 286 }, + { "id": "edge", "fg": 287 }, + { "id": "end_piece", "fg": 288 }, + { "id": "t_connection", "fg": 289 }, + { "id": "unconnected", "fg": 284 } + ] }, { - "id": "t_underbrush_season_summer", - "fg": 81, - "rotates": false + "id": [ "t_scrap_wall_halfway", "t_junk_palisade" ], + "fg": 290, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 291 }, + { "id": "corner", "fg": 292 }, + { "id": "edge", "fg": 293 }, + { "id": "end_piece", "fg": 294 }, + { "id": "t_connection", "fg": 295 }, + { "id": "unconnected", "fg": 290 } + ] }, { - "id": "t_underbrush_season_autumn", - "fg": 82, - "rotates": false + "id": [ "t_brick_wall_halfway", "f_sandbag_half" ], + "fg": 296, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 297 }, + { "id": "corner", "fg": 298 }, + { "id": "edge", "fg": 299 }, + { "id": "end_piece", "fg": 300 }, + { "id": "t_connection", "fg": 301 }, + { "id": "unconnected", "fg": 296 } + ] }, { - "id": "t_underbrush_season_winter", - "fg": 83, - "rotates": false + "id": [ "t_rock_wall_half", "t_sconc_wall_halfway", "t_strconc_wall_halfway" ], + "fg": 302, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 303 }, + { "id": "corner", "fg": 304 }, + { "id": "edge", "fg": 305 }, + { "id": "end_piece", "fg": 306 }, + { "id": "t_connection", "fg": 307 }, + { "id": "unconnected", "fg": 302 } + ] }, { - "id": "mon_minecraft", - "fg": 84, - "rotates": false + "id": "t_concrete_wall", + "fg": 308, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 309 }, + { "id": "corner", "fg": 310 }, + { "id": "edge", "fg": 311 }, + { "id": "end_piece", "fg": 312 }, + { "id": "t_connection", "fg": 313 }, + { "id": "unconnected", "fg": 308 } + ] }, + { "id": [ "t_sliding_concrete_wall_c", "t_secretdoor_concrete_wall_c" ], "fg": 311, "rotates": true }, + { "id": "t_secretdoor_concrete_wall_o", "fg": 314, "rotates": true }, { - "id": "mon_minecraft_charged", - "fg": 85, - "rotates": false + "id": [ "t_railing_h", "t_railing_v", "t_guardrail_bg_dp", "t_railing" ], + "fg": 315, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 315 }, + { "id": "corner", "fg": 316 }, + { "id": "edge", "fg": 317 }, + { "id": "end_piece", "fg": 318 }, + { "id": "t_connection", "fg": 319 }, + { "id": "unconnected", "fg": 320 } + ] }, { - "id": "mon_minecraft_season_winter", - "fg": 86, - "rotates": false + "id": [ "t_glass_railing", "t_glass_railing_h", "t_glass_railing_v" ], + "fg": 321, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 321 }, + { "id": "corner", "fg": 322 }, + { "id": "edge", "fg": 323 }, + { "id": "end_piece", "fg": 324 }, + { "id": "t_connection", "fg": 325 }, + { "id": "unconnected", "fg": 326 } + ] }, { - "id": "mon_minecraft_charged_season_winter", - "fg": 87, - "rotates": false + "id": "t_metal_railing", + "fg": 327, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 327 }, + { "id": "corner", "fg": 328 }, + { "id": "edge", "fg": 329 }, + { "id": "end_piece", "fg": 330 }, + { "id": "t_connection", "fg": 331 }, + { "id": "unconnected", "fg": 332 } + ] }, { "id": [ - "t_underbrush_harvested_spring", - "t_underbrush_harvested_spring_season_spring", - "t_underbrush_harvested_summer", - "t_underbrush_harvested_summer_season_spring", - "t_underbrush_harvested_autumn", - "t_underbrush_harvested_autumn_season_spring", - "t_underbrush_harvested_winter", - "t_underbrush_harvested_winter_season_spring" + "t_railroad_track", + "t_railroad_track_h", + "t_railroad_track_v", + "t_railroad_track_d", + "t_railroad_track_d1", + "t_railroad_track_d2" ], - "fg": 88, - "rotates": false + "fg": 333, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 333 }, + { "id": "corner", "fg": [ 334, 335, 336, 337 ] }, + { "id": "edge", "fg": 338 }, + { "id": "end_piece", "fg": 338 }, + { "id": "t_connection", "fg": 339 }, + { "id": "unconnected", "fg": 338 } + ] }, + { "id": "t_railroad_track_on_tie", "fg": 340 }, { - "id": [ - "t_underbrush_harvested_spring_season_summer", - "t_underbrush_harvested_summer_season_summer", - "t_underbrush_harvested_autumn_season_summer", - "t_underbrush_harvested_winter_season_summer" - ], - "fg": 89, - "rotates": false + "id": [ "t_railroad_tie_h", "t_railroad_tie_v", "t_railroad_tie" ], + "fg": 341, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "edge", "fg": 342 } ] }, { - "id": [ - "t_underbrush_harvested_spring_season_autumn", - "t_underbrush_harvested_summer_season_autumn", - "t_underbrush_harvested_autumn_season_autumn", - "t_underbrush_harvested_winter_season_autumn" - ], - "fg": 90, - "rotates": false + "id": [ "t_wall_log", "t_wall_wood" ], + "fg": 343, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 344 }, + { "id": "corner", "fg": 345 }, + { "id": "edge", "fg": 346 }, + { "id": "end_piece", "fg": 347 }, + { "id": "t_connection", "fg": 348 }, + { "id": "unconnected", "fg": 343 } + ] }, { - "id": [ - "t_underbrush_harvested_spring_season_winter", - "t_underbrush_harvested_summer_season_winter", - "t_underbrush_harvested_autumn_season_winter" - ], - "fg": 91, - "rotates": false + "id": [ "t_wall_wood_chipped", "t_wall_log_chipped" ], + "fg": 349, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 350 }, + { "id": "corner", "fg": 351 }, + { "id": "edge", "fg": 352 }, + { "id": "end_piece", "fg": 353 }, + { "id": "t_connection", "fg": 354 }, + { "id": "unconnected", "fg": 349 } + ] }, { - "id": "t_underbrush_harvested_winter_season_winter", - "fg": 92, - "rotates": false + "id": [ "t_wall_wood_broken", "t_wall_log_broken" ], + "fg": 355, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 356 }, + { "id": "corner", "fg": 357 }, + { "id": "edge", "fg": 358 }, + { "id": "end_piece", "fg": 358 }, + { "id": "t_connection", "fg": 356 }, + { "id": "unconnected", "fg": 355 } + ] }, { - "id": [ - "t_shrub", - "t_shrub_season_spring", - "t_shrub_peanut", - "t_shrub_peanut_season_spring", - "t_shrub_peanut_harvested", - "t_shrub_peanut_harvested_season_spring" - ], - "fg": 93, - "rotates": false + "id": [ "t_scrap_wall", "t_junk_wall", "t_wall_metal" ], + "fg": 359, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 360 }, + { "id": "corner", "fg": 361 }, + { "id": "edge", "fg": 362 }, + { "id": "end_piece", "fg": 363 }, + { "id": "t_connection", "fg": 364 }, + { "id": "unconnected", "fg": 359 } + ] }, { - "id": [ - "t_shrub_peanut_season_summer", - "t_shrub_peanut_harvested_season_summer", - "t_shrub_season_summer" - ], - "fg": 94, - "rotates": false + "id": "t_wall_r", + "fg": 365, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 366 }, + { "id": "corner", "fg": 367 }, + { "id": "edge", "fg": 368 }, + { "id": "end_piece", "fg": 369 }, + { "id": "t_connection", "fg": 370 }, + { "id": "unconnected", "fg": 365 } + ] }, { - "id": [ - "t_shrub_season_autumn", - "t_shrub_peanut_season_autumn", - "t_shrub_peanut_harvested_season_autumn" - ], - "fg": 95, - "rotates": false + "id": "t_wall_y", + "fg": 371, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 372 }, + { "id": "corner", "fg": 373 }, + { "id": "edge", "fg": 374 }, + { "id": "end_piece", "fg": 375 }, + { "id": "t_connection", "fg": 376 }, + { "id": "unconnected", "fg": 371 } + ] }, { - "id": [ - "t_shrub_peanut_season_winter", - "t_shrub_peanut_harvested_season_winter", - "t_shrub_blueberry_season_winter", - "t_shrub_strawberry_season_winter", - "t_shrub_season_winter" - ], - "fg": 96, - "rotates": false + "id": "t_brick_wall", + "fg": 377, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 378 }, + { "id": "corner", "fg": 379 }, + { "id": "edge", "fg": 380 }, + { "id": "end_piece", "fg": 381 }, + { "id": "t_connection", "fg": 382 }, + { "id": "unconnected", "fg": 377 } + ] }, + { "id": [ "t_sliding_brick_wall_c", "t_secretdoor_brick_wall_c" ], "fg": 380, "rotates": true }, + { "id": "t_secretdoor_brick_wall_o", "fg": 383, "rotates": true }, { - "id": [ - "t_shrub_strawberry_harvested", - "t_shrub_strawberry_season_spring", - "t_shrub_strawberry_season_autumn" - ], - "fg": 97, - "rotates": false + "id": "f_sandbag_wall", + "fg": 384, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 385 }, + { "id": "corner", "fg": 386 }, + { "id": "edge", "fg": 387 }, + { "id": "end_piece", "fg": 388 }, + { "id": "t_connection", "fg": 389 }, + { "id": "unconnected", "fg": 384 } + ] }, { - "id": "t_shrub_strawberry", - "fg": 98, - "rotates": false + "id": "t_wall_wattle", + "fg": 390, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 391 }, + { "id": "corner", "fg": 392 }, + { "id": "edge", "fg": 393 }, + { "id": "end_piece", "fg": 394 }, + { "id": "t_connection", "fg": 395 }, + { "id": "unconnected", "fg": 390 } + ] }, + { "id": "t_wall_wattle_broken", "fg": 396, "rotates": true }, { - "id": [ - "t_shrub_blueberry_harvested", - "t_shrub_blueberry_season_spring", - "t_shrub_blueberry_season_autumn" - ], - "fg": 99, - "rotates": false + "id": "t_wall_g", + "fg": 397, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 398 }, + { "id": "corner", "fg": 399 }, + { "id": "edge", "fg": 400 }, + { "id": "end_piece", "fg": 401 }, + { "id": "t_connection", "fg": 402 }, + { "id": "unconnected", "fg": 397 } + ] }, { - "id": "t_shrub_blueberry", - "fg": 100, - "rotates": false + "id": "t_wall_b", + "fg": 403, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 404 }, + { "id": "corner", "fg": 405 }, + { "id": "edge", "fg": 406 }, + { "id": "end_piece", "fg": 407 }, + { "id": "t_connection", "fg": 408 }, + { "id": "unconnected", "fg": 403 } + ] }, { - "id": "t_shrub_fungal", - "fg": 101, - "rotates": false + "id": "t_wall_p", + "fg": 409, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 410 }, + { "id": "corner", "fg": 411 }, + { "id": "edge", "fg": 412 }, + { "id": "end_piece", "fg": 413 }, + { "id": "t_connection", "fg": 414 }, + { "id": "unconnected", "fg": 409 } + ] }, { - "id": [ - "t_tree_young", - "t_tree_young_season_spring" - ], - "fg": 102, - "rotates": false + "id": [ "t_wall", "t_wall_w" ], + "fg": 415, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 416 }, + { "id": "corner", "fg": 417 }, + { "id": "edge", "fg": 418 }, + { "id": "end_piece", "fg": 419 }, + { "id": "t_connection", "fg": 420 }, + { "id": "unconnected", "fg": 415 } + ] }, + { "id": [ "t_secretdoor_wall_c", "t_sliding_wall_c", "t_secretdoor_onetime" ], "fg": 418, "rotates": true }, + { "id": [ "t_sliding_wall_o", "t_secretdoor_wall_o" ], "fg": 421, "rotates": true }, { - "id": "t_tree_young_season_summer", - "fg": 103, - "rotates": false + "id": [ "t_rock_wall", "t_sconc_wall", "t_strconc_wall" ], + "fg": 422, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 423 }, + { "id": "corner", "fg": 424 }, + { "id": "edge", "fg": 425 }, + { "id": "end_piece", "fg": 426 }, + { "id": "t_connection", "fg": 427 }, + { "id": "unconnected", "fg": 422 } + ] }, { - "id": "t_tree_young_season_autumn", - "fg": 104, - "rotates": false + "id": [ "t_gutter", "t_gutter_north", "t_gutter_east", "t_gutter_south", "t_gutter_west" ], + "fg": 428, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 429 }, + { "id": "corner", "fg": 430 }, + { "id": "edge", "fg": 431 }, + { "id": "end_piece", "fg": 432 }, + { "id": "t_connection", "fg": 433 }, + { "id": "unconnected", "fg": 428 } + ] }, { - "id": "t_tree_fungal_young", - "fg": 105, - "rotates": false + "id": "t_gutter_drop", + "fg": 434, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 435 }, + { "id": "corner", "fg": 436 }, + { "id": "edge", "fg": 437 }, + { "id": "end_piece", "fg": 438 }, + { "id": "t_connection", "fg": 439 }, + { "id": "unconnected", "fg": 434 } + ] }, + { "id": "t_gutter_downspout", "fg": 440, "rotates": true }, { - "id": "t_tree_young_season_winter", - "fg": 106, - "rotates": false + "id": "t_window_bars_alarm", + "fg": 441, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 442 }, + { "id": "corner", "fg": 443 }, + { "id": "edge", "fg": 444 }, + { "id": "end_piece", "fg": 445 }, + { "id": "t_connection", "fg": 446 }, + { "id": "unconnected", "fg": 441 } + ] }, { - "id": "t_tree_fungal", - "fg": 107, - "rotates": false + "id": "t_reinforced_glass_shutter", + "fg": 447, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 448 }, + { "id": "corner", "fg": 449 }, + { "id": "edge", "fg": 450 }, + { "id": "end_piece", "fg": 451 }, + { "id": "t_connection", "fg": 452 }, + { "id": "unconnected", "fg": 447 } + ] }, { - "id": [ - "t_tree_cherry", - "t_tree_plum" - ], - "fg": 108, - "rotates": false + "id": "t_reinforced_glass_shutter_open", + "fg": 453, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 454 }, + { "id": "corner", "fg": 455 }, + { "id": "edge", "fg": 456 }, + { "id": "end_piece", "fg": 457 }, + { "id": "t_connection", "fg": 458 }, + { "id": "unconnected", "fg": 453 } + ] }, { - "id": [ - "t_tree_season_autumn", - "t_tree_harvested_season_autumn", - "t_tree_cherry_season_autumn", - "t_tree_plum_season_autumn", - "t_tree_peach_season_autumn", - "t_tree_apricot_season_autumn" - ], - "fg": 109, - "rotates": false + "id": "t_reinforced_glass", + "fg": 459, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 460 }, + { "id": "corner", "fg": 461 }, + { "id": "edge", "fg": 462 }, + { "id": "end_piece", "fg": 463 }, + { "id": "t_connection", "fg": 464 }, + { "id": "unconnected", "fg": 459 } + ] }, { - "id": [ - "t_tree_peach", - "t_tree_apricot" - ], - "fg": 110, - "rotates": false + "id": [ "t_wall_glass_alarm", "t_window", "t_window_alarm", "t_wall_glass" ], + "fg": 465, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 466 }, + { "id": "corner", "fg": 467 }, + { "id": "edge", "fg": 468 }, + { "id": "end_piece", "fg": 469 }, + { "id": "t_connection", "fg": 470 }, + { "id": "unconnected", "fg": 465 } + ] }, { "id": [ - "t_tree_peach_harvested", - "t_tree_apricot_harvested" + "t_door_glass_frosted_c", + "t_door_glass_lab_c", + "t_door_glass_frosted_lab_c", + "t_door_glass_red_c", + "t_door_glass_green_c", + "t_door_glass_white_c", + "t_door_glass_gray_c", + "t_door_glass_c" ], - "fg": 111, - "rotates": false + "fg": 471, + "rotates": true }, { "id": [ - "t_tree_harvested", - "t_tree_season_summer", - "t_tree_harvested_season_summer", - "t_tree_harvested_season_spring" + "t_door_glass_frosted_o", + "t_door_glass_lab_o", + "t_door_glass_frosted_lab_o", + "t_door_glass_red_o", + "t_door_glass_green_o", + "t_door_glass_white_o", + "t_door_glass_gray_o", + "t_door_glass_o" ], - "fg": 112, - "rotates": false + "fg": 472, + "rotates": true }, { - "id": [ - "t_tree_season_spring", - "t_tree", - "t_tree_apple_season_summer", - "t_tree_pear_season_summer", - "t_tree_apple_harvested", - "t_tree_pear_harvested" - ], - "fg": 113, - "rotates": false + "id": "t_window_stained_red", + "fg": 473, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "t_connection", "fg": 474 } ] }, { - "id": [ - "t_tree_apple", - "t_tree_pear" - ], - "fg": 114, - "rotates": false + "id": "t_window_stained_green", + "fg": 475, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "t_connection", "fg": 476 } ] }, { - "id": "t_marloss_tree", - "fg": 115, - "rotates": false + "id": "t_window_domestic", + "fg": 477, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "t_connection", "fg": 478 } ] }, { - "id": [ - "t_tree_cherry_season_spring", - "t_tree_plum_season_spring", - "t_tree_cherry_harvested", - "t_tree_plum_harvested", - "t_tree_apple_season_spring", - "t_tree_pear_season_spring", - "t_tree_peach_season_spring", - "t_tree_apricot_season_spring" - ], - "fg": 116, - "rotates": false + "id": "t_window_open", + "fg": 479, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "t_connection", "fg": 480 } ] }, { - "id": "t_tree_maple_season_autumn", - "fg": 117, - "rotates": false + "id": "t_window_stained_blue", + "fg": 481, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "t_connection", "fg": 482 } ] }, { - "id": [ - "t_tree_blackjack_season_autumn", - "t_tree_hickory_season_autumn", - "t_tree_hickory_harvested_season_autumn", - "t_tree_almond_season_autumn", - "t_tree_almond_harvested_season_autumn", - "t_tree_pecan_season_autumn", - "t_tree_pecan_harvested_season_autumn" - ], - "fg": 118, - "rotates": false + "id": "t_window_no_curtains", + "fg": 483, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "t_connection", "fg": 484 } ] }, { - "id": [ - "t_tree_blackjack_season_spring", - "t_tree_hickory_season_spring", - "t_tree_hickory", - "t_tree_hickory_harvested_season_spring", - "t_tree_hickory_harvested", - "t_tree_maple_season_spring", - "t_tree_maple", - "t_tree_almond_season_spring", - "t_tree_almond", - "t_tree_almond_harvested_season_spring", - "t_tree_almond_harvested", - "t_tree_pecan_season_spring", - "t_tree_pecan", - "t_tree_pecan_harvested_season_spring", - "t_tree_pecan_harvested" - ], - "fg": 119, - "rotates": false + "id": "t_window_no_curtains_open", + "fg": 485, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "t_connection", "fg": 486 } ] + }, + { "id": "t_window_no_curtains_taped", "fg": 487, "rotates": false }, + { "id": [ "t_window_taped", "t_window_domestic_taped", "t_window_alarm_taped" ], "fg": 488, "rotates": false }, + { "id": "t_window_reinforced", "fg": 489, "rotates": false }, + { "id": "t_window_boarded", "fg": 490, "rotates": false }, + { "id": "t_window_enhanced", "fg": 491, "rotates": false }, + { "id": "t_window_reinforced_noglass", "fg": 492, "rotates": false }, + { "id": "t_window_boarded_noglass", "fg": 493, "rotates": false }, + { "id": "t_window_enhanced_noglass", "fg": 494, "rotates": false }, + { "id": "t_window_frame", "fg": 495, "rotates": false }, + { "id": [ "t_m_frame", "t_window_empty" ], "fg": 496, "rotates": false }, + { "id": "t_curtains", "fg": 497, "rotates": false }, + { + "id": [ "vp_v_curtain", "vp_aisle_curtain" ], + "fg": 497, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, + { "id": [ "f_curtain", "t_door_curtain_c" ], "fg": 498, "rotates": false }, + { "id": [ "f_curtain_open", "t_door_curtain_o" ], "fg": 499, "rotates": false }, + { "id": "t_glass_roof", "fg": 500, "rotates": false }, { "id": [ - "t_tree_hickory_season_summer", - "t_tree_hickory_harvested_season_summer", - "t_tree_almond_season_summer", - "t_tree_almond_harvested_season_summer", - "t_tree_pecan_season_summer", - "t_tree_pecan_harvested_season_summer", - "t_tree_maple_season_summer", - "t_tree_blackjack" + "t_door_o", + "t_door_lab_o", + "t_door_o_peep", + "t_door_gray_o", + "t_door_red_o", + "t_door_green_o", + "t_door_white_o", + "t_door_frame", + "t_door_lab_frame", + "t_door_gray_frame", + "t_door_red_frame", + "t_door_green_frame", + "t_door_white_frame" ], - "fg": 120, + "fg": 501, "rotates": false }, { - "id": "t_tree_maple_tapped_season_autumn", - "fg": 121, + "id": [ "t_door_c", "t_door_lab_c", "t_door_gray_c", "t_door_red_c", "t_door_green_c", "t_door_white_c" ], + "fg": 502, "rotates": false }, + { "id": [ "t_door_locked", "t_door_locked_alarm", "t_door_locked_interior" ], "fg": 503, "rotates": false }, + { "id": "t_door_locked_peep", "fg": 504, "rotates": false }, + { "id": "t_door_c_peep", "fg": 505, "rotates": false }, { - "id": "t_tree_maple_tapped_season_summer", - "fg": 122, + "id": [ "t_door_b", "t_door_lab_b", "t_door_b_peep", "t_door_gray_b", "t_door_red_b", "t_door_green_b", "t_door_white_b" ], + "fg": 506, "rotates": false }, + { "id": [ "t_door_boarded_peep", "t_door_boarded" ], "fg": 507, "rotates": false }, + { "id": [ "t_door_boarded_damaged_peep", "t_door_boarded_damaged" ], "fg": 508, "rotates": false }, + { "id": "t_door_makeshift_o", "fg": 509, "rotates": false }, + { "id": "t_door_makeshift_c", "fg": 510, "rotates": false }, + { "id": "t_rdoor_o", "fg": 511, "rotates": false }, + { "id": "t_rdoor_c", "fg": 512, "rotates": false }, + { "id": "t_rdoor_b", "fg": 513, "rotates": false }, + { "id": "t_rdoor_boarded", "fg": 514, "rotates": false }, + { "id": "t_rdoor_boarded_damaged", "fg": 515, "rotates": false }, + { "id": [ "t_reinforced_door_glass_o", "t_reinforced_door_glass_lab_o" ], "fg": 516, "rotates": false }, + { "id": [ "t_reinforced_door_glass_lab_c", "t_reinforced_door_glass_c" ], "fg": 517, "rotates": false }, { - "id": [ - "t_tree_maple_tapped", - "t_tree_maple_tapped_season_spring" - ], - "fg": 123, + "id": [ "t_door_metal_o", "t_door_metal_lab_o", "t_door_metal_o_peep", "t_mdoor_frame", "t_mdoor_lab_frame" ], + "fg": 518, "rotates": false }, + { "id": [ "t_door_metal_c", "t_door_metal_lab_c" ], "fg": 519, "rotates": false }, + { "id": [ "t_door_metal_locked", "t_door_metal_pickable" ], "fg": 520, "rotates": false }, + { "id": "t_door_metal_c_peep", "fg": 521, "rotates": false }, + { "id": "t_iron_gate_c", "fg": 522, "rotates": false }, + { "id": "t_iron_gate_l", "fg": 523, "rotates": false }, + { "id": [ "t_door_bar_o", "t_iron_gate_o" ], "fg": 524, "rotates": false }, + { "id": "t_door_bar_c", "fg": 525, "rotates": false }, + { "id": "t_door_bar_locked", "fg": 526, "rotates": false }, + { "id": "t_rootcellar", "fg": 527, "rotates": false }, + { "id": [ "t_dock", "t_sh_bridge" ], "fg": 528, "rotates": false }, + { "id": "t_grate", "fg": 529, "rotates": false }, + { "id": "t_bridge", "fg": 530, "rotates": false }, + { "id": [ "t_riverbridge_dp", "t_pontoon_dp" ], "fg": 531, "rotates": false }, { - "id": "mon_treent_green", - "fg": 124, - "rotates": false + "id": "t_sewage_pipe", + "fg": 532, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 533 }, + { "id": "corner", "fg": 534 }, + { "id": "edge", "fg": 535 }, + { "id": "end_piece", "fg": 536 }, + { "id": "t_connection", "fg": 537 }, + { "id": "unconnected", "fg": 532 } + ] }, { - "id": "t_tree_birch_harvested_season_autumn", - "fg": 125, - "rotates": false + "id": "t_missile", + "fg": 538, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 538 }, + { "id": "corner", "fg": 539 }, + { "id": "edge", "fg": 538 }, + { "id": "end_piece", "fg": 538 }, + { "id": "t_connection", "fg": 540 }, + { "id": "unconnected", "fg": 538 } + ] }, + { "id": "t_missile_exploded", "fg": 155, "rotates": false }, { - "id": "t_tree_birch_season_autumn", - "fg": 126, - "rotates": false + "id": "t_slide", + "fg": 541, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "edge", "fg": 541 }, { "id": "end_piece", "fg": 542 } ] }, { - "id": "t_tree_birch_season_summer", - "fg": 127, - "rotates": false + "id": "t_monkey_bars", + "fg": 543, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "center", "fg": 543 }, { "id": "corner", "fg": 544 }, { "id": "t_connection", "fg": 545 } ] }, + { "id": "t_centrifuge", "fg": 546, "rotates": false }, { - "id": "t_tree_birch_harvested_season_summer", - "fg": 128, - "rotates": false + "id": "t_cvdbody", + "fg": 547, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 548 }, + { "id": "corner", "fg": 549 }, + { "id": "edge", "fg": 550 }, + { "id": "end_piece", "fg": 551 }, + { "id": "t_connection", "fg": 552 }, + { "id": "unconnected", "fg": 547 } + ] }, { - "id": [ - "t_tree_birch_season_spring", - "t_tree_birch" - ], - "fg": 129, - "rotates": false + "id": "t_generator_broken", + "fg": 553, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "corner", "fg": 553 }, { "id": "t_connection", "fg": 554 } ] }, { - "id": [ - "t_tree_birch_harvested_season_spring", - "t_tree_birch_harvested" - ], - "fg": 130, - "rotates": false + "id": "t_conveyor", + "fg": 555, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 555 }, + { "id": "corner", "fg": 556 }, + { "id": "edge", "fg": 555 }, + { "id": "end_piece", "fg": 555 }, + { "id": "t_connection", "fg": 557 }, + { "id": "unconnected", "fg": 555 } + ] }, + { "id": [ "t_palisade_pulley", "t_barndoor" ], "fg": 558, "rotates": false }, { - "id": "t_tree_willow_season_autumn", - "fg": 131, + "id": [ + "t_gates_mech_control", + "t_gates_control_concrete", + "t_gates_control_brick", + "t_gates_mech_control_lab", + "t_gates_control_concrete_lab", + "t_gates_control_brick_lab" + ], + "fg": 559, "rotates": false }, { - "id": "t_tree_willow_harvested_season_autumn", - "fg": 132, + "id": [ "t_switch_even", "t_gates_control_metal", "t_gates_control_metal_lab" ], + "fg": 560, "rotates": false }, - { - "id": "t_tree_willow_season_summer", - "fg": 133, + { "id": "t_switch_gb", "fg": 561, "rotates": false }, + { "id": "t_switch_rb", "fg": 562, "rotates": false }, + { "id": "t_switch_rg", "fg": 563, "rotates": false }, + { "id": "t_machinery_light", "fg": 564, "rotates": false }, + { "id": "t_machinery_old", "fg": 565, "rotates": false }, + { "id": [ "t_machinery_heavy", "t_sewage_pump" ], "fg": 566, "rotates": false }, + { "id": "t_machinery_electronic", "fg": 567, "rotates": false }, + { "id": "f_autodoc", "fg": 568, "rotates": false }, + { "id": "f_robotic_arm", "fg": 569, "rotates": false }, + { "id": "t_ind_assembler", "fg": 570, "rotates": false }, + { "id": "t_ind_drill", "fg": 571, "rotates": false }, + { "id": "t_ind_furnace", "fg": 572, "rotates": false }, + { "id": "t_ind_lathe", "fg": 573, "rotates": false }, + { "id": "t_ind_mixer", "fg": 574, "rotates": false }, + { "id": "t_ind_pipe", "fg": 575, "rotates": false }, + { "id": "t_ind_press", "fg": 576, "rotates": false }, + { "id": "t_elevator_control", "fg": 577, "rotates": false }, + { "id": "t_elevator_control_off", "fg": 578, "rotates": false }, + { "id": "t_diesel_pump", "fg": 579, "rotates": false }, + { "id": "t_gas_pump_a", "fg": 580, "rotates": false }, + { "id": "t_gas_pump", "fg": 581, "rotates": false }, + { "id": "t_diesel_pump_smashed", "fg": 582, "rotates": false }, + { "id": "t_gas_pump_smashed", "fg": 583, "rotates": false }, + { "id": "t_slot_machine", "fg": 584, "rotates": false }, + { "id": "t_atm", "fg": 585, "rotates": false }, + { "id": [ "t_card_science", "t_card_military" ], "fg": 586, "rotates": false }, + { "id": "t_card_reader_broken", "fg": 587, "rotates": false }, + { + "id": [ "t_sliding_concrete_wall_control", "f_aut_gas_console_o", "electronics_controls", "t_console_broken" ], + "fg": 588, "rotates": false }, + { "id": "f_home_furnace", "fg": 589, "rotates": false }, + { "id": "t_cvdmachine", "fg": 590, "rotates": false }, { "id": [ - "t_tree_willow_season_spring", - "t_tree_willow" + "t_radio_controls", + "t_containment_control", + "t_ins_bridge_control", + "t_jaildoor_control", + "t_outs_bridge_control", + "t_reinforced_glass_control" ], - "fg": 134, + "fg": 591, "rotates": false }, + { "id": [ "f_aut_gas_console", "vp_controls_electronic", "t_console" ], "fg": 592, "rotates": false }, + { "id": "t_radio_tower", "fg": 593, "rotates": false }, + { "id": "t_utility_light", "fg": 594, "rotates": false }, + { "id": [ "t_support_l", "t_little_column", "t_column" ], "fg": 595, "rotates": false }, + { "id": "t_column_halfway", "fg": 596, "rotates": true }, + { "id": "f_bookcase", "fg": 597, "rotates": false }, { "id": [ - "t_tree_willow_harvested_season_spring", - "t_tree_willow_harvested" + "t_secretdoor_bookcase_c", + "t_sliding_bookcase_c", + "t_sliding_bookcase_control", + "t_sliding_wall_control", + "t_decoy_bookcase" ], - "fg": 135, + "fg": 598, "rotates": false }, + { "id": "t_secretdoor_bookcase_o", "fg": 599, "rotates": false }, + { "id": [ "f_locker", "t_switchgear_s" ], "fg": 600, "rotates": false }, + { "id": [ "f_fume_hood", "t_switchgear_l" ], "fg": 601, "rotates": false }, + { "id": [ "f_cupboard", "t_sai_box" ], "fg": 602, "rotates": false }, + { "id": [ "f_oven", "t_sai_box_damaged" ], "fg": 603, "rotates": false }, + { "id": "t_station_disc", "fg": 604, "rotates": false }, + { "id": "t_current_trans", "fg": 605, "rotates": false }, + { "id": "t_oil_circ_brkr_l", "fg": 606, "rotates": false }, + { "id": [ "t_potential_trans", "t_oil_circ_brkr_s" ], "fg": 607, "rotates": false }, + { "id": "t_milking_machine", "fg": 608, "rotates": false }, + { "id": "t_water_pump", "fg": 609, "rotates": false }, + { "id": "well_pump", "fg": 610, "rotates": false }, + { "id": "t_pedestal_wyrm", "fg": 611, "rotates": false }, + { "id": "tr_temple_flood", "fg": 612, "rotates": false }, + { "id": "t_pedestal_temple", "fg": 613, "rotates": false }, + { "id": "tr_temple_toggle", "fg": 614, "rotates": false }, + { "id": [ "t_backboard_in", "t_backboard" ], "fg": 615, "rotates": false }, + { "id": "t_vat", "fg": 616, "rotates": false }, + { "id": "t_plut_generator", "fg": 617, "rotates": false }, + { "id": "t_nuclear_reactor", "fg": 618, "rotates": false }, + { "id": [ "mon_hallu_mannequin", "f_mannequin" ], "fg": 619, "rotates": false }, + { "id": [ "f_statue", "t_sliding_brick_wall_control" ], "fg": 620, "rotates": false }, + { "id": "f_target", "fg": 621, "rotates": false }, + { "id": "t_bulk_tank", "fg": 622, "rotates": false }, + { "id": "t_covered_well", "fg": 623, "rotates": false }, + { "id": "vp_external_tank", "fg": 624, "rotates": true }, + { "id": "t_gas_tank", "fg": 625, "rotates": false }, + { "id": [ "55gal_drum", "30gal_drum", "keg", "keg_steel" ], "fg": 626, "rotates": false }, + { "id": [ "wooden_barrel", "f_wood_keg" ], "fg": 627, "rotates": false }, + { "id": "vp_tank_barrel", "fg": 627, "rotates": true }, + { "id": "30gal_barrel", "fg": 628, "rotates": false }, + { "id": "f_forge_rock", "fg": 629, "rotates": false }, + { "id": "f_clay_kiln", "fg": 630, "rotates": false }, + { "id": [ "broketent", "largebroketent" ], "fg": 631, "rotates": false }, + { "id": "damaged_shelter_kit", "fg": 632, "rotates": false }, + { "id": "t_improvised_shelter", "fg": 633, "rotates": false }, + { "id": "shelter_kit", "fg": 634, "rotates": false }, + { "id": [ "tent_kit", "large_tent_kit" ], "fg": 635, "rotates": false }, { - "id": "t_tree_willow_harvested_season_summer", - "fg": 136, - "rotates": false + "id": "f_skin_wall", + "fg": 634, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 636 }, + { "id": "corner", "fg": 637 }, + { "id": "edge", "fg": 638 }, + { "id": "end_piece", "fg": 639 }, + { "id": "t_connection", "fg": 640 }, + { "id": "unconnected", "fg": 634 } + ] }, + { "id": "f_skin_door", "fg": 641, "rotates": false }, + { "id": "f_skin_door_o", "fg": 642, "rotates": false }, { - "id": "t_tree_pine", - "fg": 137, - "rotates": false + "id": [ "f_large_canvas_wall", "f_canvas_wall" ], + "fg": 635, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 643 }, + { "id": "corner", "fg": 644 }, + { "id": "edge", "fg": 645 }, + { "id": "end_piece", "fg": 646 }, + { "id": "t_connection", "fg": 647 }, + { "id": "unconnected", "fg": 635 } + ] }, + { "id": [ "f_large_canvas_door", "f_canvas_door" ], "fg": 648, "rotates": false }, + { "id": [ "f_large_canvas_door_o", "f_canvas_door_o" ], "fg": 649, "rotates": false }, + { "id": "t_leanto", "fg": 650, "rotates": false }, + { "id": "t_tarptent", "fg": 651, "rotates": false }, + { "id": "t_recycler", "fg": 652, "rotates": false }, { - "id": "t_tree_deadpine", - "fg": 138, - "rotates": false + "id": [ "f_recycle_bin", "f_dumpster" ], + "fg": 653, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 654 }, + { "id": "corner", "fg": 655 }, + { "id": "edge", "fg": 656 }, + { "id": "end_piece", "fg": 657 }, + { "id": "t_connection", "fg": 658 }, + { "id": "unconnected", "fg": 653 } + ] }, { - "id": [ - "t_tree_hickory_dead", - "t_tree_blackjack_harvested_season_spring", - "t_tree_blackjack_harvested_season_summer", - "t_tree_blackjack_harvested_season_autumn", - "mon_treent" - ], - "fg": 139, - "rotates": false + "id": "f_pool_table", + "fg": 659, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "corner", "fg": 660 }, { "id": "t_connection", "fg": 659 } ] }, + { "id": [ "tr_cot", "f_fiber_mat" ], "fg": 661, "rotates": false }, + { "id": [ "f_straw_bed", "tr_fur_rollmat" ], "fg": 662, "rotates": false }, + { "id": "tr_rollmat", "fg": 663, "rotates": false }, { - "id": "t_tree_dead", - "fg": 140, - "rotates": false + "id": "vp_bed", + "fg": 663, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, + { "id": "f_makeshift_bed", "fg": 664, "rotates": false }, { - "id": "t_tree_deadpine_season_winter", - "fg": 141, - "rotates": false + "id": "f_bed", + "fg": 664, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 665 }, + { "id": "corner", "fg": 666 }, + { "id": "edge", "fg": 667 }, + { "id": "end_piece", "fg": 668 }, + { "id": "t_connection", "fg": 669 }, + { "id": "unconnected", "fg": 664 } + ] }, { - "id": "t_tree_pine_season_winter", - "fg": 142, - "rotates": false + "id": "f_pillow_fort", + "fg": 670, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 671 }, + { "id": "corner", "fg": [ 672, 673, 674, 675 ] }, + { "id": "edge", "fg": [ 676, 670, 676, 670 ] }, + { "id": "end_piece", "fg": [ 677, 670, 678, 670 ] }, + { "id": "t_connection", "fg": [ 679, 680, 681, 682 ] }, + { "id": "unconnected", "fg": 670 } + ] }, { - "id": [ - "t_tree_blackjack_harvested_season_winter", - "mon_treent_season_winter", - "mon_treent_green_season_winter", - "t_tree_hickory_dead_season_winter" - ], - "fg": 143, - "rotates": false + "id": "f_counter", + "fg": 683, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 684 }, + { "id": "corner", "fg": 685 }, + { "id": "edge", "fg": 686 }, + { "id": "end_piece", "fg": 687 }, + { "id": "t_connection", "fg": 688 }, + { "id": "unconnected", "fg": 683 } + ] }, { - "id": [ - "t_tree_harvested_season_winter", - "t_tree_cherry_season_winter", - "t_tree_plum_season_winter", - "t_tree_apple_season_winter", - "t_tree_pear_season_winter", - "t_tree_peach_season_winter", - "t_tree_apricot_season_winter", - "t_tree_apple_harvested_season_winter", - "t_tree_apricot_harvested_season_winter", - "t_tree_cherry_harvested_season_winter", - "t_tree_peach_harvested_season_winter", - "t_tree_pear_harvested_season_winter", - "t_tree_plum_harvested_season_winter", - "t_tree_season_winter" - ], - "fg": 144, - "rotates": false + "id": "f_desk", + "fg": 689, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 690 }, + { "id": "corner", "fg": 691 }, + { "id": "edge", "fg": 692 }, + { "id": "end_piece", "fg": 693 }, + { "id": "t_connection", "fg": 694 }, + { "id": "unconnected", "fg": 689 } + ] }, + { "id": [ "f_autodoc_couch", "f_sofa" ], "fg": 695, "rotates": false }, { - "id": [ - "t_tree_birch_harvested_season_winter", - "t_tree_hickory_season_winter", - "t_tree_hickory_harvested_season_winter", - "t_tree_almond_season_winter", - "t_tree_almond_harvested_season_winter", - "t_tree_pecan_season_winter", - "t_tree_pecan_harvested_season_winter", - "t_tree_maple_season_winter", - "t_tree_willow_season_winter", - "t_tree_blackjack_season_winter" - ], - "fg": 145, - "rotates": false + "id": "f_table", + "fg": 696, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 697 }, + { "id": "corner", "fg": 698 }, + { "id": "edge", "fg": 699 }, + { "id": "end_piece", "fg": 700 }, + { "id": "t_connection", "fg": 701 }, + { "id": "unconnected", "fg": 696 } + ] }, + { "id": "seat", "fg": 702, "rotates": false }, { - "id": "t_tree_birch_season_winter", - "fg": 146, - "rotates": false + "id": [ "vp_seat", "vp_folding_seat", "vp_reclining_seat" ], + "fg": 702, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": "t_tree_willow_harvested_season_winter", - "fg": 147, - "rotates": false + "id": "vp_seat_wood", + "fg": 703, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 225 } ] }, + { "id": "f_tourist_table", "fg": 704, "rotates": false }, + { "id": "tourist_table", "fg": 705, "rotates": false }, + { "id": "f_shackle", "fg": 706, "rotates": false }, + { "id": "f_shower", "fg": 707, "rotates": false }, + { "id": "f_toilet", "fg": 708, "rotates": false }, + { "id": "f_birdbath", "fg": 709, "rotates": false }, + { "id": "f_sink", "fg": 710, "rotates": false }, + { "id": "f_brazier", "fg": 711, "rotates": false }, + { "id": "brazier", "fg": 712, "rotates": false }, + { "id": "bowl_pewter", "fg": 713, "rotates": false }, + { "id": "ceramic_bowl", "fg": 714, "rotates": false }, + { "id": "bowl_clay", "fg": 715, "rotates": false }, + { "id": "glass_bowl", "fg": 716, "rotates": false }, + { "id": "bowl_plastic", "fg": 717, "rotates": false }, { - "id": "t_tree_dead_season_winter", - "fg": 148, - "rotates": false + "id": "f_bathtub", + "fg": 718, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 719 }, + { "id": "corner", "fg": 720 }, + { "id": "edge", "fg": 721 }, + { "id": "end_piece", "fg": 722 }, + { "id": "t_connection", "fg": 723 }, + { "id": "unconnected", "fg": 718 } + ] }, { - "id": "t_tree_maple_tapped_season_winter", - "fg": 149, - "rotates": false + "id": "vp_blade_vertical", + "fg": 724, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 725 } ] }, + { "id": "tr_blade", "fg": 724, "rotates": true }, + { "id": "f_blade", "fg": 726, "rotates": false }, + { "id": [ "f_cellphone_booster", "f_TV_antenna", "f_spike" ], "fg": 727, "rotates": false }, + { "id": "f_vent_pipe", "fg": 728, "rotates": false }, + { "id": "canister_empty", "fg": 729, "rotates": false }, + { "id": "f_roof_turbine_vent", "fg": 730, "rotates": false }, + { "id": [ "directional_antenna", "f_small_satelitte_dish" ], "fg": 731, "rotates": false }, + { "id": "f_chimney", "fg": 732, "rotates": false }, + { "id": [ "reinforced_solar_panel", "reinforced_solar_panel_v2" ], "fg": 733, "rotates": false }, + { "id": [ "solar_panel", "solar_panel_v2", "solar_panel_v3", "f_solar_unit" ], "fg": 734, "rotates": false }, { - "id": "t_trunk", - "fg": 150, - "rotates": false + "id": [ "vp_reinforced_solar_panel", "vp_reinforced_solar_panel_v2" ], + "fg": 733, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 735 } ] }, { - "id": "t_stump", - "fg": 151, - "rotates": false - }, - { - "id": "t_marloss", - "fg": 152, - "rotates": false - }, + "id": [ "vp_solar_panel", "vp_solar_panel_v2", "vp_solar_panel_v3" ], + "fg": 734, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 736 } ] + }, + { "id": "f_egg_sackws", "fg": 737, "rotates": false }, + { "id": "mon_trapdoor_queen", "fg": 738, "rotates": false }, + { "id": [ "f_egg_sackcs", "mon_trapdoor_egg", "f_egg_sackbw" ], "fg": 739, "rotates": false }, + { "id": "f_egg_sacke", "fg": 740, "rotates": false }, + { "id": "f_boulder_large", "fg": 741, "rotates": false }, + { "id": "f_boulder_medium", "fg": 742, "rotates": false }, + { "id": "f_boulder_small", "fg": 743, "rotates": false }, + { "id": "t_border_rock", "fg": 744, "rotates": false }, + { "id": "f_cattails", "fg": 745, "rotates": false }, + { "id": "f_lilypad", "fg": 746, "rotates": false }, + { "id": "f_flower_tulip", "fg": 747, "rotates": false }, + { "id": "f_dandelion", "fg": 748, "rotates": false }, + { "id": "f_datura", "fg": 749, "rotates": false }, + { "id": "f_bluebell", "fg": 750, "rotates": false }, + { "id": "f_dahlia", "fg": 751, "rotates": false }, + { "id": "f_lily", "fg": 752, "rotates": false }, + { "id": "f_flower_marloss", "fg": 753, "rotates": false }, + { "id": "f_flower_fungal", "fg": 754, "rotates": false }, + { "id": "f_mutpoppy", "fg": 755, "rotates": false }, + { "id": "f_flower_spurge", "fg": 756, "rotates": false }, + { "id": "f_black_eyed_susan", "fg": 757, "rotates": false }, + { "id": "f_sunflower", "fg": 758, "rotates": false }, + { "id": "f_lotus", "fg": 759, "rotates": false }, + { "id": "f_chamomile", "fg": 760, "rotates": false }, { - "id": "t_fungus_mound", - "fg": 153, + "id": [ + "f_mutpoppy_season_winter", + "f_dandelion_season_winter", + "f_flower_spurge_season_winter", + "f_black_eyed_susan_season_winter", + "f_sunflower_season_winter", + "f_datura_season_winter", + "f_bluebell_season_winter", + "f_dahlia_season_winter", + "f_lily_season_winter", + "f_chamomile_season_winter", + "f_lotus_season_winter", + "f_flower_marloss_season_winter", + "f_flower_tulip_season_winter" + ], + "fg": 761, "rotates": false }, + { "id": "f_plant_seed", "fg": 762, "rotates": false }, + { "id": "f_plant_seedling", "fg": 763, "rotates": false }, + { "id": "f_plant_mature", "fg": 764, "rotates": false }, + { "id": "f_plant_harvest", "fg": 765, "rotates": false }, + { "id": "f_indoor_plant_y", "fg": 766, "rotates": false }, + { "id": "f_indoor_plant", "fg": 767, "rotates": false }, + { "id": "f_hay", "fg": 768, "rotates": false }, + { "id": "f_fungal_clump", "fg": 769, "rotates": false }, + { "id": "f_fungal_mass", "fg": 770, "rotates": false }, + { "id": "f_woodstove", "fg": 771, "rotates": false }, { - "id": "t_fungus_floor_sup", - "fg": 154, + "id": [ + "f_kiln_metal_empty", + "fuel_bunker", + "kiln", + "brick_kiln", + "kilnrig", + "char_kiln", + "vp_veh_kiln", + "vp_fuel_bunker", + "f_kiln_empty" + ], + "fg": 772, "rotates": false }, + { "id": [ "f_forge", "char_forge" ], "fg": 773, "rotates": false }, + { "id": [ "f_kiln_metal_full", "kiln_full", "f_kiln_full" ], "fg": 774, "rotates": false }, + { "id": "kiln_done", "fg": 775, "rotates": false }, + { "id": "kiln_lit", "fg": 776, "rotates": false }, + { "id": [ "anvil", "f_anvil" ], "fg": 777, "rotates": false }, + { "id": "f_fireplace", "fg": 778, "rotates": false }, + { "id": "f_firering", "fg": 779, "rotates": false }, + { "id": "metal_butcher_rack", "fg": 780, "rotates": false }, + { "id": "f_metal_butcher_rack", "fg": 781, "rotates": false }, + { "id": "f_butcher_rack", "fg": 782, "rotates": false }, + { "id": "f_smoking_rack", "fg": 783, "rotates": false }, + { "id": [ "f_utility_shelf", "f_rack" ], "fg": 784, "rotates": false }, + { "id": [ "f_filing_cabinet", "f_file_cabinet" ], "fg": 785, "rotates": false }, + { "id": "f_glass_cabinet", "fg": 786, "rotates": false }, + { "id": "f_piano", "fg": 787, "rotates": false }, + { "id": "f_wardrobe", "fg": 788, "rotates": false }, + { "id": "f_dresser", "fg": 789, "rotates": false }, + { "id": "f_rack_coat", "fg": 790, "rotates": false }, + { "id": [ "f_sign", "f_bulletin" ], "fg": 791, "rotates": false }, + { "id": "f_barricade_road", "fg": 792, "rotates": false }, + { "id": "f_lane", "fg": 793, "rotates": true }, + { "id": "f_crate_c", "fg": 794, "rotates": false }, + { "id": "f_crate_o", "fg": 795, "rotates": false }, { - "id": "vp_cargo_bag", - "fg": 154, + "id": "f_bench", + "fg": 796, "rotates": true, "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] + "additional_tiles": [ { "id": "t_connection", "fg": 797 } ] }, + { "id": [ "f_stool", "f_chair" ], "fg": 798, "rotates": false }, + { "id": "f_armchair", "fg": 799, "rotates": false }, + { "id": "f_coffin_c", "fg": 800, "rotates": false }, + { "id": "f_coffin_o", "fg": 801, "rotates": false }, + { "id": "f_slab", "fg": 802, "rotates": false }, + { "id": "f_grave_head", "fg": 803, "rotates": false }, + { "id": "f_grave_monument", "fg": 804, "rotates": false }, + { "id": "f_grave_stone", "fg": 805, "rotates": false }, + { "id": "f_grave_stone_old", "fg": 806, "rotates": false }, + { "id": "f_mailbox", "fg": 807, "rotates": false }, + { "id": "f_air_conditioner", "fg": 808, "rotates": false }, + { "id": "f_water_heater", "fg": 809, "rotates": false }, + { "id": "f_chemical_mixer", "fg": 810, "rotates": false }, { - "id": "t_fungus_floor_out", - "fg": 156, + "id": "vp_washing_machine", + "fg": 811, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 812 } ] + }, + { "id": "washing_machine", "fg": 811, "rotates": false }, + { "id": "f_washer", "fg": 813, "rotates": false }, + { "id": "f_dryer", "fg": 814, "rotates": false }, + { "id": "f_fridge", "fg": 815, "rotates": false }, + { "id": "f_glass_fridge", "fg": 816, "rotates": false }, + { "id": "f_bigmirror", "fg": 817, "rotates": false }, + { "id": "f_bigmirror_b", "fg": 818, "rotates": false }, + { "id": "f_arcade_machine", "fg": 819, "rotates": false }, + { "id": "f_pinball_machine", "fg": 820, "rotates": false }, + { "id": "f_ball_mach", "fg": 689, "rotates": false }, + { "id": "f_ergometer", "fg": 821, "rotates": false }, + { "id": "f_treadmill", "fg": 822, "rotates": false }, + { "id": "f_exercise", "fg": 823, "rotates": false }, + { "id": "f_floor_canvas", "fg": 824, "rotates": false }, + { "id": "f_vending_reinforced", "fg": 825, "rotates": false }, + { "id": "f_vending_c", "fg": 826, "rotates": false }, + { "id": "f_vending_o", "fg": 827, "rotates": false }, + { "id": "f_displaycase", "fg": 828, "rotates": false }, + { "id": "f_displaycase_b", "fg": 829, "rotates": false }, + { "id": [ "still", "f_still" ], "fg": 830, "rotates": false }, + { "id": [ "f_gun_safe_el", "f_gunsafe_ml", "f_safe_c" ], "fg": 831, "rotates": false }, + { "id": [ "f_safe_l", "f_gunsafe_mj" ], "fg": 832, "rotates": false }, + { "id": "f_safe_o", "fg": 833, "rotates": false }, + { "id": "f_trashcan", "fg": 834, "rotates": false }, + { "id": "f_fvat_empty", "fg": 835, "rotates": false }, + { "id": "f_fvat_full", "fg": 836, "rotates": false }, + { "id": "f_dive_block", "fg": 837, "rotates": false }, + { "id": "telepad", "fg": 838, "rotates": false }, + { "id": "tr_telepad", "fg": 839, "rotates": false }, + { "id": "tr_dissector", "fg": 840, "rotates": false }, + { "id": [ "tr_landmine_buried", "tr_beartrap_buried" ], "fg": 841, "rotates": false }, + { "id": "tr_landmine", "fg": 842, "rotates": false }, + { "id": "landmine", "fg": 843, "rotates": false }, + { "id": "tr_boobytrap", "fg": 844, "rotates": false }, + { "id": "boobytrap", "fg": 845, "rotates": false }, + { "id": "tr_bubblewrap", "fg": 846, "rotates": false }, + { "id": "bubblewrap", "fg": 847, "rotates": false }, + { + "id": [ "tr_snake", "tr_glow", "tr_hum", "tr_shadow", "fd_push_items", "tr_drain" ], + "fg": 848, "rotates": false }, + { "id": "tr_beartrap", "fg": 849, "rotates": false }, + { "id": "beartrap", "fg": 850, "rotates": false }, + { "id": [ "caltrops", "tr_caltrops" ], "fg": 851, "rotates": false }, + { "id": "blade_trap", "fg": 852, "rotates": false }, + { "id": [ "tr_light_snare", "tr_heavy_snare", "tr_snare" ], "fg": 853, "rotates": false }, + { "id": [ "heavy_snare_kit", "light_snare_kit" ], "fg": 854, "rotates": false }, + { "id": "snare_trigger", "fg": 855, "rotates": false }, + { "id": "tr_crossbow", "fg": 856, "rotates": false }, + { "id": "crossbow_trap", "fg": 857, "rotates": false }, + { "id": "tr_nailboard", "fg": 858, "rotates": false }, + { "id": "board_trap", "fg": 859, "rotates": false }, + { "id": [ "tr_shotgun_1", "tr_shotgun_2", "tr_shotgun_2_1" ], "fg": 860, "rotates": false }, + { "id": "shotgun_trap", "fg": 861, "rotates": false }, + { "id": "tr_tripwire", "fg": 862, "rotates": false }, + { "id": "tripwire", "fg": 863, "rotates": false }, { - "id": "t_fungus_floor_in", - "fg": 157, + "id": [ + "mag_pistol", + "recipe_caseless", + "recipe_augs", + "recipe_mil_augs", + "textbook_anarch", + "decoy_anarch", + "recipe_elfa", + "decoy_elfa", + "mag_smg", + "novel_pulp", + "novel_satire", + "guidebook", + "holybook_bible2", + "holybook_quran", + "holybook_hadith", + "holybook_tanakh", + "holybook_bible3", + "scots_cookbook", + "holybook_kojiki", + "holybook_havamal" + ], + "fg": 864, "rotates": false }, { "id": [ - "t_fungus_wall_transformed", - "t_fungus_wall" + "novel_thriller", + "novel_sports", + "fairy_tales", + "holybook_talmud", + "holybook_tripitaka", + "holybook_pastafarian", + "holybook_slack", + "holybook_kallisti", + "manual_karate", + "manual_aikido", + "manual_judo", + "manual_tai_chi", + "manual_capoeira", + "manual_krav_maga", + "manual_muay_thai", + "manual_ninjutsu", + "manual_taekwondo", + "manual_zui_quan", + "manual_crane", + "manual_dragon", + "manual_leopard", + "manual_tiger", + "manual_snake", + "manual_centipede", + "manual_scorpion", + "manual_toad", + "manual_lizard", + "manual_venom_snake" ], - "fg": 158, + "fg": 865, "rotates": false }, + { "id": "abdul_necro", "fg": 866, "rotates": false }, { - "id": "tr_goo", - "fg": 159, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 160 - }, - { - "id": "corner", - "fg": 161 - }, - { - "id": "edge", - "fg": 162 - }, - { - "id": "end_piece", - "fg": 163 - }, - { - "id": "t_connection", - "fg": 164 - }, - { - "id": "unconnected", - "fg": 159 - } - ] + "id": [ "mag_cutting", "mag_melee", "manual_melee", "mag_stabbing", "news_regional", "novel_crime2", "novel_war2" ], + "fg": 867, + "rotates": false }, { "id": [ - "t_pit_foxhole", - "tr_sinkhole" + "mag_mechanics", + "textbook_gaswarfare", + "recipe_mininuke_launch", + "recipe_lab_elec", + "phonebook", + "mag_unarmed", + "mag_launcher", + "textbook_speech", + "novel_buddy", + "essay_book", + "101_carpentry", + "radio_book", + "adv_chemistry", + "carpentry_book", + "manual_fabrication", + "textbook_weapwest", + "textbook_fireman", + "holybook_vedas", + "holybook_sutras", + "mag_animecon" ], - "fg": 165, + "fg": 868, "rotates": false }, - { - "id": "t_pit_shallow", - "fg": 166, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 167 - }, - { - "id": "corner", - "fg": 168 - }, - { - "id": "edge", - "fg": 169 - }, - { - "id": "end_piece", - "fg": 170 - }, - { - "id": "t_connection", - "fg": 171 - }, - { - "id": "unconnected", - "fg": 166 - } - ] - }, + { "id": "book_asgard", "fg": 869, "rotates": false }, { "id": [ - "tr_pit", - "t_pit" + "photo_album", + "recipe_bullets", + "recipe_arrows", + "recipe_bows", + "modern_tanner", + "atomic_survival", + "trappers_companion", + "howto_computer", + "manual_launcher", + "manual_archery", + "novel_adventure", + "novel_war", + "novel_western", + "pocket_firstaid", + "pocket_firearms", + "tailor_portfolio", + "family_cookbook" ], - "fg": 165, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 172 - }, - { - "id": "corner", - "fg": 173 - }, - { - "id": "edge", - "fg": 174 - }, - { - "id": "end_piece", - "fg": 175 - }, - { - "id": "t_connection", - "fg": 176 - }, - { - "id": "unconnected", - "fg": 165 - } - ] + "fg": 870, + "rotates": false }, + { "id": "manual_pankration", "fg": 871, "rotates": false }, + { "id": "manual_swordsmanship", "fg": 872, "rotates": false }, { "id": [ - "t_pit_spiked", - "tr_spike_pit" + "recipe_alpha", + "recipe_chimera", + "recipe_serum", + "recipe_creepy", + "recipe_animal", + "recipe_maiar", + "recipe_labchem", + "recipe_raptor", + "holybook_bible1", + "cookbook_sushi", + "holybook_granth", + "holybook_scientology" ], - "fg": 177, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 178 - }, - { - "id": "corner", - "fg": 179 - }, - { - "id": "edge", - "fg": 180 - }, - { - "id": "end_piece", - "fg": 181 - }, - { - "id": "t_connection", - "fg": 182 - }, - { - "id": "unconnected", - "fg": 177 - } - ] + "fg": 873, + "rotates": false }, { "id": [ - "tr_glass_pit", - "t_pit_glass" + "textbook_launcher", + "mag_computer", + "mag_survival", + "fun_survival", + "manual_bashing", + "manual_cutting", + "mag_rifle", + "manual_rifle", + "mag_shotgun", + "manual_shotgun", + "textbook_survival", + "survival_book", + "textbook_traps", + "manual_gun", + "book_archery", + "manual_throw", + "manual_swimming", + "novel_coa", + "novel_samurai", + "tall_tales", + "recipe_fauxfur", + "classic_literature", + "collector_book", + "manual_brawl", + "manual_knives", + "manual_stabbing", + "manual_mechanics", + "manual_survival", + "manual_speech", + "manual_business", + "manual_first_aid", + "pocket_survival", + "manual_computers", + "cookbook", + "cookbook_human", + "cookbook_italian", + "manual_electronics", + "manual_tailor", + "textbook_tailor", + "howto_traps", + "manual_traps", + "manual_carpentry", + "manual_driving", + "textbook_fabrication", + "manual_niten", + "manual_boxing", + "manual_eskrima", + "manual_fencing", + "manual_silat", + "manual_sojutsu" ], - "fg": 183, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 184 - }, - { - "id": "corner", - "fg": 185 - }, - { - "id": "edge", - "fg": 186 - }, - { - "id": "end_piece", - "fg": 187 - }, - { - "id": "t_connection", - "fg": 188 - }, - { - "id": "unconnected", - "fg": 183 - } - ] + "fg": 874, + "rotates": false }, { - "id": "t_pit_corpsed", - "fg": 189, - "bg": 194, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "bg": 194 - }, - { - "id": "corner", - "fg": 190, - "bg": 194 - }, - { - "id": "edge", - "fg": 191, - "bg": 194 - }, - { - "id": "end_piece", - "fg": 192, - "bg": 194 - }, - { - "id": "t_connection", - "fg": 193, - "bg": 194 - }, - { - "id": "unconnected", - "fg": 189, - "bg": 194 - } - ] - }, - { - "id": "f_rubble_landfill", - "fg": 189, - "bg": 195, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "bg": 195 - }, - { - "id": "corner", - "fg": 190, - "bg": 195 - }, - { - "id": "edge", - "fg": 191, - "bg": 195 - }, - { - "id": "end_piece", - "fg": 192, - "bg": 195 - }, - { - "id": "t_connection", - "fg": 193, - "bg": 195 - }, - { - "id": "unconnected", - "fg": 189, - "bg": 195 - } - ] - }, - { - "id": "f_rubble_landfill_season_winter", - "fg": 189, - "bg": 196, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "bg": 196 - }, - { - "id": "corner", - "fg": 190, - "bg": 196 - }, - { - "id": "edge", - "fg": 191, - "bg": 196 - }, - { - "id": "end_piece", - "fg": 192, - "bg": 196 - }, - { - "id": "t_connection", - "fg": 193, - "bg": 196 - }, - { - "id": "unconnected", - "fg": 189, - "bg": 196 - } - ] + "id": [ + "jewelry_book", + "textbook_weapeast", + "recipe_melee", + "recipe_lab_cvd", + "glassblowing_book", + "commune_prospectus", + "necropolis_freq" + ], + "fg": 875, + "rotates": false }, + { "id": "textbook_atomic", "fg": 876, "rotates": false }, { "id": [ - "t_pit_glass_covered", - "t_pit_spiked_covered", - "t_pit_covered" + "advanced_electronics", + "mag_dude", + "textbook_computers", + "computer_science", + "repeater_mod_guide", + "textbook_business", + "textbook_mechanics", + "book_icef", + "textbook_chemistry", + "textbook_carpentry", + "SICP", + "textbook_robots", + "record_weather", + "record_patient", + "record_accounting", + "priest_diary", + "visions_solitude", + "textbook_armschina", + "textbook_biodiesel", + "textbook_armwest", + "holybook_mormon" ], - "fg": 197, - "rotates": false - }, - { - "id": "t_sandbox", - "fg": 198, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 199 - }, - { - "id": "corner", - "fg": 200 - }, - { - "id": "edge", - "fg": 201 - }, - { - "id": "end_piece", - "fg": 202 - }, - { - "id": "t_connection", - "fg": 203 - }, - { - "id": "unconnected", - "fg": 198 - } - ] - }, - { - "id": "t_wax", - "fg": 204, - "rotates": false - }, - { - "id": "t_floor_wax", - "fg": 205, - "rotates": false - }, - { - "id": "t_golf_hole", - "fg": 206, - "rotates": false - }, - { - "id": "t_rock_red", - "fg": 207, - "rotates": false - }, - { - "id": "t_rock_green", - "fg": 208, + "fg": 877, "rotates": false }, + { "id": "dnd_handbook", "fg": 878, "rotates": false }, { - "id": "t_rock_blue", - "fg": 209, + "id": [ + "manual_smg", + "novel_romance", + "novel_spy", + "novel_scifi", + "novel_drama", + "novel_swash", + "novel_fantasy", + "novel_mystery", + "novel_horror", + "novel_tragedy", + "ZSG", + "textbook_armeast", + "brewing_cookbook" + ], + "fg": 879, "rotates": false }, { - "id": "t_rock", - "fg": 210, + "id": [ + "mag_porn", + "mag_traps", + "mag_electronics", + "mag_bashing", + "mag_tv", + "mag_news", + "mag_cars", + "mag_cooking", + "mag_glam", + "mag_beauty", + "mag_carpentry", + "mag_guns", + "mag_archery", + "mag_gaming", + "mag_comic", + "mag_firstaid", + "mag_dodge", + "mag_throwing", + "mag_swimming", + "novel_road", + "child_book", + "novel_erotic", + "poetry_book", + "plays_book", + "mag_tailor", + "mag_fabrication", + "mag_fieldrepair", + "manual_dodge_kid" + ], + "fg": 880, "rotates": false }, { - "id": "t_rock_smooth", - "fg": 211, + "id": [ + "manual_pistol", + "textbook_computer", + "textbook_firstaid", + "booklet_firstaid", + "manual_dodge", + "novel_crime", + "novel_experimental", + "philosophy_book", + "story_book", + "textbook_electronics", + "emergency_book", + "welding_book", + "recipe_medicalmut", + "holybook_upanishads", + "novel_coa2", + "mag_barter" + ], + "fg": 881, "rotates": false }, { - "id": "t_fault", - "fg": 212, + "id": [ + "recipe_atomic_battery", + "paper", + "sarcophagus_access_code", + "flyer", + "survnote", + "file", + "note", + "newest_newspaper", + "many_years_old_newspaper", + "years_old_newspaper", + "one_year_old_newspaper", + "months_old_newspaper", + "weeks_old_newspaper", + "necropolis_leaflet", + "black_box_transcript" + ], + "fg": 882, "rotates": false }, { - "id": "t_paper", - "fg": 213, + "id": [ + "soup_fish", + "soup_chicken", + "soup_mushroom", + "soup_dumplings", + "protein_drink", + "hflesh_drink", + "spider_steak_soup", + "oxygen" + ], + "fg": 883, "rotates": false }, { - "id": "t_stairs_up", - "fg": 214, + "id": [ + "V8", + "wine_cabernet", + "wine_noir", + "bum_wine", + "drink_kalimotxo", + "blood", + "mutagen_jabberblood", + "curry_veggy", + "curry_meat", + "soup_tomato", + "brew_bum_wine", + "taint_tornado", + "mixed_alcohol_strong", + "oxyacetylene" + ], + "fg": 884, "rotates": false }, { - "id": "t_stairs_down", - "fg": 215, + "id": [ + "cooking_oil", + "cooking_oil2", + "protein_shake", + "hflesh_shake_fortified", + "hflesh_shake", + "mead", + "brew_mead", + "dandelion_wine", + "brew_dandelion_wine", + "dandelion_tea", + "drink_beeknees", + "drink_wsour", + "honey_gold", + "mugwort_oil", + "thyme_oil", + "protein_shake_fortified", + "lemonade", + "lamp_oil" + ], + "fg": 885, "rotates": false }, { - "id": "t_slope_up", - "fg": 216, + "id": [ + "wine_chardonnay", + "creamsoda", + "lemonlime", + "bee_balm_tea", + "vinegar", + "brew_vinegar", + "gasoline", + "diesel", + "gas_fungicidal", + "wine_riesling" + ], + "fg": 886, "rotates": false }, { - "id": "t_slope_down", - "fg": 217, + "id": [ "apple_cider", "energy_drink_atomic", "colamdew", "drink_wild_apple", "pine_tea" ], + "fg": 887, "rotates": false }, { - "id": "t_low_stairs_begin", - "fg": 218, + "id": [ "drink_boozeberry", "maple_sap", "wash_rum", "wash_vodka", "cattail_jelly" ], + "fg": 888, "rotates": false }, { - "id": "t_low_stairs_end", - "fg": 219, + "id": [ "energy_drink", "poppysyrup", "iv_purifier", "purple_drink", "cranberry_juice", "pepto" ], + "fg": 889, "rotates": false }, { - "id": "t_manhole", - "fg": 220, + "id": [ "milk", "soup_cullenskink", "brew_milk_curdled", "milk_curdled", "eggnog", "eggnog_spiked" ], + "fg": 890, "rotates": false }, { "id": [ - "manhole_cover", - "t_manhole_cover" + "mutagen", + "mutagen_plant", + "mutagen_insect", + "mutagen_spider", + "mutagen_slime", + "mutagen_fish", + "mutagen_mouse", + "mutagen_rat", + "mutagen_beast", + "mutagen_cattle", + "mutagen_cephalopod", + "mutagen_bird", + "mutagen_lizard", + "mutagen_troglobite", + "mutagen_medical", + "mutagen_chimera", + "mutagen_alpha", + "mutagen_ursine", + "mutagen_feline", + "mutagen_lupine", + "mutagen_elfa", + "mutagen_raptor", + "pine_wine" ], - "fg": 221, - "rotates": false - }, - { - "id": "t_ladder_up", - "fg": 222, - "rotates": false - }, - { - "id": "t_ladder_down", - "fg": 223, + "fg": 891, "rotates": false }, + { "id": [ "oj", "juice", "orangesoda", "triple_sec", "drink_screwdriver" ], "fg": 892, "rotates": false }, { - "id": "f_ladder", - "fg": 224, + "id": [ + "purifier", + "crispycran", + "drink_strawberry_surprise", + "fruit_wine", + "brew_fruit_wine", + "brandy", + "mixed_alcohol_weak", + "sports_drink", + "napalm" + ], + "fg": 893, "rotates": false }, { - "id": "vp_travois", - "fg": 224, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 225 - } - ] + "id": [ + "sewage", + "water_sewage", + "cola", + "rootbeer", + "spezi", + "drink_hobo", + "broth", + "broth_bone", + "broth_human", + "chai_tea", + "hickory_nut_ambrosia", + "soup_meat", + "soup_woods", + "soup_human", + "whiskey", + "single_malt_whiskey", + "irish_coffee", + "drink_rumcola", + "drink_sewerbrew", + "rum", + "tequila", + "long_island", + "beer", + "european_pilsner", + "pale_ale", + "india_pale_ale", + "stout", + "belgian_ale", + "imperial_stout", + "syrup", + "coffee_syrup", + "brew_whiskey", + "hb_beer", + "brew_hb_beer", + "moonshine", + "brew_moonshine", + "molasses", + "tea", + "coffee", + "atomic_coffee", + "cola_meth", + "beet_syrup", + "soysauce", + "milk_coffee", + "milk_tea", + "tea_bark", + "hot_chocolate", + "mex_chocolate", + "wash_moonshine", + "wash_whiskey", + "choc_drink" + ], + "fg": 894, + "rotates": false }, { - "id": "t_rope_up", - "fg": 226, + "id": [ + "soup_veggy", + "herbal_tea", + "iv_mutagen", + "iv_mutagen_plant", + "iv_mutagen_insect", + "iv_mutagen_spider", + "iv_mutagen_slime", + "iv_mutagen_fish", + "iv_mutagen_mouse", + "iv_mutagen_rat", + "iv_mutagen_beast", + "iv_mutagen_ursine", + "iv_mutagen_feline", + "iv_mutagen_lupine", + "iv_mutagen_cattle", + "iv_mutagen_cephalopod", + "iv_mutagen_bird", + "iv_mutagen_lizard", + "iv_mutagen_troglobite", + "iv_mutagen_alpha", + "iv_mutagen_medical", + "iv_mutagen_chimera", + "iv_mutagen_elfa", + "iv_mutagen_raptor", + "brew_pine_wine", + "plut_slurry", + "plut_slurry_dense", + "gas_chloramine" + ], + "fg": 895, "rotates": false }, { - "id": "t_root_wall", - "fg": 227, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 228 - }, - { - "id": "corner", - "fg": 229 - }, - { - "id": "edge", - "fg": 227 - }, - { - "id": "end_piece", - "fg": 230 - }, - { - "id": "t_connection", - "fg": 231 - }, - { - "id": "unconnected", - "fg": 227 - } - ] + "id": [ + "water", + "water_clean", + "water_mineral", + "saline", + "salt_water", + "sweet_water", + "chem_DMSO", + "chem_chloroform", + "chem_phenol", + "chem_glycerol", + "chem_hydrogen_peroxide", + "ether", + "vodka", + "gin", + "brew_rum", + "brew_vodka", + "bleach", + "ammonia", + "fertilizer_liquid", + "water_acid", + "water_acid_weak", + "acid", + "kompot", + "disinfectant", + "lye", + "water_smoke", + "chem_methanol", + "chem_ethanol", + "denat_alcohol", + "chem_acetic_acid", + "chem_acetone", + "chem_hydrogen_peroxide_conc", + "chem_nitric_acid", + "chem_sulphuric_acid", + "chem_formaldehyde" + ], + "fg": 896, + "rotates": false }, - { - "id": "t_improvised_fence", - "fg": 232, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 233 - }, - { - "id": "corner", - "fg": 234 - }, - { - "id": "edge", - "fg": 232 - }, - { - "id": "end_piece", - "fg": 235 - }, - { - "id": "t_connection", - "fg": 236 - }, - { - "id": "unconnected", - "fg": 232 - } - ] + { "id": [ "mintpatties", "basketball", "coconut" ], "fg": 897, "rotates": false }, + { "id": [ "grapefruit", "irradiated_grapefruit", "honey_ant" ], "fg": 898, "rotates": false }, + { "id": [ "melon", "irradiated_melon", "cotton_boll", "egg_locust" ], "fg": 899, "rotates": false }, + { "id": [ "onion", "irradiated_onion" ], "fg": 900, "rotates": false }, + { "id": [ "orange", "irradiated_orange" ], "fg": 901, "rotates": false }, + { "id": [ "peach", "irradiated_peach" ], "fg": 902, "rotates": false }, + { "id": [ "razorclaw_roe", "egg_fish" ], "fg": 903, "rotates": false }, + { "id": [ "spider_egg", "cotton_ball" ], "fg": 904, "rotates": false }, + { "id": "pinecone", "fg": 905, "rotates": false }, + { "id": "marloss_seed", "fg": 906, "rotates": false }, + { "id": "garlic", "fg": 907, "rotates": false }, + { "id": [ "boiled_egg", "egg_reptile", "egg_wasp", "ant_egg" ], "fg": 908, "rotates": false }, + { "id": [ "lemon", "irradiated_lemon" ], "fg": 909, "rotates": false }, + { "id": "potato_baked", "fg": 910, "rotates": false }, + { + "id": [ "potato", "irradiated_potato", "kiwi", "irradiated_kiwi", "egg_bird" ], + "fg": 911, + "rotates": false }, { - "id": "t_fence_rope", - "fg": 227, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 233 - }, - { - "id": "corner", - "fg": 234 - }, - { - "id": "edge", - "fg": 227 - }, - { - "id": "end_piece", - "fg": 235 - }, - { - "id": "t_connection", - "fg": 236 - }, - { - "id": "unconnected", - "fg": 227 - } - ] + "id": [ "watermelon", "irradiated_watermelon", "tool_rocket_candy", "tool_rocket_candy_act" ], + "fg": 912, + "rotates": false }, - { - "id": "t_fence_post", - "fg": 237, + { "id": [ "irradiated_mango", "mango" ], "fg": 913, "rotates": false }, + { "id": [ "papaya", "irradiated_papaya" ], "fg": 914, "rotates": false }, + { "id": [ "irradiated_pomegranate", "pomegranate" ], "fg": 915, "rotates": false }, + { "id": [ "irradiated_tomato", "tomato" ], "fg": 916, "rotates": false }, + { "id": [ "irradiated_apple", "apple" ], "fg": 917, "rotates": false }, + { "id": "mycus_fruit", "fg": 918, "rotates": false }, + { "id": [ "irradiated_apricot", "apricot" ], "fg": 919, "rotates": false }, + { "id": "marloss_berry", "fg": 920, "rotates": false }, + { "id": [ "irradiated_pear", "pear" ], "fg": 921, "rotates": false }, + { "id": [ "irradiated_pumpkin", "pumpkin" ], "fg": 922, "rotates": false }, + { "id": [ "irradiated_cabbage", "cabbage" ], "fg": 923, "rotates": false }, + { "id": [ "lettuce", "irradiated_lettuce" ], "fg": 924, "rotates": false }, + { "id": [ "coal_lump", "coal" ], "fg": 925, "rotates": false }, + { + "id": [ "dandelion_fried", "sunflower", "spurge_flower", "black_eyed_susan_flower", "raw_dandelion" ], + "fg": 926, "rotates": false }, + { "id": [ "bee_balm", "lily_flower", "lotus_flower" ], "fg": 927, "rotates": false }, + { "id": [ "poppy_flower", "tulip_flower" ], "fg": 928, "rotates": false }, + { "id": "bluebell_flower", "fg": 929, "rotates": false }, + { "id": "dahlia_flower", "fg": 930, "rotates": false }, + { "id": [ "small_charcoal", "small_coal" ], "fg": 931, "rotates": false }, + { "id": "steel_chunk", "fg": 932, "rotates": false }, + { "id": "plant_sac", "fg": 933, "rotates": false }, + { "id": [ "seed_mushroom_morel", "fungal_seeds", "seed_mushroom" ], "fg": 934, "rotates": false }, { - "id": "vp_spike_wood", - "fg": 237, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 225 - } - ] + "id": [ "blueberries", "irradiated_blueberries", "blackberries", "irradiated_blackberries" ], + "fg": 935, + "rotates": false }, + { "id": [ "kernels", "seed_corn" ], "fg": 936, "rotates": false }, { "id": [ - "t_fence_h", - "t_fence_v", - "t_fence" + "seed_wheat", + "seed_barley", + "seed_sugar_beet", + "seed_cotton_boll", + "seed_tomato", + "dry_beans", + "beans_cooked", + "pelmeni", + "seed_carrot", + "seed_lettuce", + "oats", + "seed_celery", + "seed_oats", + "seed_cucumber", + "seed_zucchini", + "seed_potato_raw", + "seed_bee_balm", + "seed_blackberries", + "seed_buckwheat", + "seed_canola", + "seed_cranberries", + "seed_dogbane", + "seed_mugwort", + "seed_raspberries", + "seed_raw_dandelion", + "seed_thyme", + "seed_wild_herbs", + "seed_pumpkin", + "macaroni_cooked", + "ravioli", + "mre_ravioli", + "seed_weed", + "seed_chili_pepper" ], - "fg": 238, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 239 - }, - { - "id": "corner", - "fg": [ - 240, - 241, - 242, - 238 - ] - }, - { - "id": "edge", - "fg": [ - 243, - 244, - 243, - 244 - ] - }, - { - "id": "end_piece", - "fg": [ - 243, - 244, - 245, - 238 - ] - }, - { - "id": "t_connection", - "fg": [ - 244, - 241, - 239, - 242 - ] - }, - { - "id": "unconnected", - "fg": 238 - } - ] + "fg": 937, + "rotates": false }, + { "id": [ "veggy", "veggy_wild" ], "fg": 938, "rotates": false }, { - "id": "t_fencegate_c", - "fg": [ - 246, - 247, - 246, - 247 + "id": [ + "veggy_cooked", + "veggy_wild_cooked", + "choco_coffee_beans", + "maltballs", + "acorns", + "datura_seed", + "coffee_bean", + "roasted_coffee_bean", + "seed_broccoli", + "raw_beans", + "hickory_nut_roasted", + "hickory_nut_unshelled", + "seed_cabbage", + "seed_sunflower", + "macaroni_raw", + "seed_onion", + "mre_veggy", + "hickory_nut" ], - "rotates": true + "fg": 939, + "rotates": false }, + { "id": "veggy_tainted", "fg": 940, "rotates": false }, { - "id": "t_fencegate_o", - "fg": [ - 248, - 249, - 248, - 249 - ], - "rotates": true + "id": [ "candy2", "candy3", "neccowafers", "gummy_vitamins", "maple_candy", "candy" ], + "fg": 941, + "rotates": false }, + { "id": [ "irradiated_cranberries", "seed_strawberries", "cranberries" ], "fg": 942, "rotates": false }, { - "id": "t_palisade", - "fg": [ - 250, - 251, - 250, - 251 - ], - "rotates": true + "id": [ "cherries", "irradiated_cherries", "raspberries", "irradiated_raspberries" ], + "fg": 943, + "rotates": false }, + { "id": "ruined_chunks", "fg": 944, "rotates": false }, + { "id": [ "plums", "irradiated_plums" ], "fg": 945, "rotates": false }, + { "id": "seed_blueberries", "fg": 946, "rotates": false }, { - "id": "t_palisade_gate", - "fg": [ - 252, - 253, - 252, - 253 + "id": [ + "can_coconut", + "yoghurt", + "pudding", + "can_chicken", + "horseradish", + "con_milk", + "flour", + "sugar", + "salt", + "meal_bone", + "meal_bone_tainted", + "starch", + "mayonnaise" ], - "rotates": true + "fg": 947, + "rotates": false }, + { "id": "sugar_fried", "fg": 948, "rotates": false }, + { "id": "fungicide", "fg": 949, "rotates": false }, + { "id": "meal_chitin_piece", "fg": 950, "rotates": false }, + { "id": [ "mustard", "honey_bottled", "marloss_gel" ], "fg": 951, "rotates": false }, + { "id": [ "sauce_pesto", "seasoning_italian", "tea_raw", "fertilizer" ], "fg": 952, "rotates": false }, { - "id": "t_palisade_gate_o", - "fg": [ - 254, - 255, - 254, - 255 - ], - "rotates": true + "id": [ "sauce_red", "ketchup", "strawberries_cooked", "fruit_cooked", "jam_fruit" ], + "fg": 953, + "rotates": false }, + { "id": "slime_scrap", "fg": 954, "rotates": false }, + { "id": "blueberries_cooked", "fg": 955, "rotates": false }, + { "id": "fd_blood", "fg": 956, "rotates": false }, + { "id": "fd_blood_veggy", "fg": 957, "rotates": false }, + { "id": [ "fd_blood_invertebrate", "fd_gibs_invertebrate" ], "fg": 958, "rotates": false }, + { "id": [ "fd_blood_insect", "fd_gibs_insect" ], "fg": 959, "rotates": false }, + { "id": "fd_gibs_flesh", "fg": 960, "rotates": false }, + { "id": [ "feces_dog", "feces_cow", "feces_manure" ], "fg": 961, "rotates": false }, + { "id": "feces_bird", "fg": 962, "rotates": false }, { - "id": "t_portcullis", - "fg": 256, + "id": [ + "pepper", + "can_sardine", + "can_herring", + "gunpowder", + "magnesium", + "oxy_powder", + "material_cement", + "chem_aluminium_powder", + "chem_black_powder", + "chem_carbide", + "chem_rocket_fuel", + "chem_thermite", + "chem_zinc_powder", + "incendiary", + "charcoal", + "material_sand", + "ash" + ], + "fg": 963, "rotates": false }, { "id": [ - "t_support_s", - "t_chainfence_posts" + "can_clams", + "can_chowder", + "rehydrated_fish", + "milk_powder", + "dry_rice", + "rice_cooked", + "beansnrice", + "yeast", + "bfipowder", + "morphine", + "sushi_rice", + "coke", + "meth", + "poppy_sleep", + "poppy_pain", + "lye_powder", + "detergent", + "chem_aluminium_sulphate", + "chem_ammonium_nitrate", + "chem_saltpetre", + "chem_rdx", + "material_quicklime", + "chem_hmtd" ], - "fg": 257, + "fg": 964, "rotates": false }, - { - "id": "t_iron_fence", - "fg": 258, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 259 - }, - { - "id": "corner", - "fg": 260 - }, - { - "id": "edge", - "fg": 258 - }, - { - "id": "end_piece", - "fg": 261 - }, - { - "id": "t_connection", - "fg": 262 - }, - { - "id": "unconnected", - "fg": 258 - } - ] - }, { "id": [ - "t_chainfence_v", - "t_chainfence", - "t_chainfence_h", - "t_fence_wire" + "can_beans", + "granola", + "macaroni_helper", + "hobo_helper", + "pork_beans", + "peanutbutter", + "mushroom_cooked", + "deluxe_beans", + "deluxe_veggy_beans", + "deluxe_beansnrice", + "deluxe_veggy_beansnrice", + "acorns_cooked", + "buckwheat", + "buckwheat_cooked", + "heroin", + "tobacco", + "coffee_raw", + "feces_roach", + "material_soil", + "dogfood", + "f_woodchips" ], - "fg": 263, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 259 - }, - { - "id": "corner", - "fg": 260 - }, - { - "id": "edge", - "fg": 263 - }, - { - "id": "end_piece", - "fg": 261 - }, - { - "id": "t_connection", - "fg": 262 - }, - { - "id": "unconnected", - "fg": 263 - } - ] + "fg": 965, + "rotates": false }, { - "id": "t_fence_barbed", - "fg": 264, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 259 - }, - { - "id": "corner", - "fg": 265 - }, - { - "id": "edge", - "fg": 264 - }, - { - "id": "end_piece", - "fg": 266 - }, - { - "id": "t_connection", - "fg": 267 - }, - { - "id": "unconnected", - "fg": 264 - } - ] + "id": [ + "can_corn", + "can_pineapple", + "fertilizer_commercial", + "lemonade_powder", + "powder_eggs", + "cornmeal", + "deluxe_rice", + "deluxe_veggy_rice", + "can_cheese", + "chem_sulphur" + ], + "fg": 966, + "rotates": false }, + { "id": [ "cooked_pumpkin", "dry_mushroom", "dry_mushroom_magic" ], "fg": 967, "rotates": false }, { - "id": "t_iron_fence_posts", - "fg": 268, + "id": [ + "crack", + "dry_fish", + "oatmeal", + "quikclot", + "protein_powder", + "hflesh_powder", + "seasoning_salt", + "pine_nuts", + "cinnamon", + "fried_seeds", + "sauerkraut", + "sauerkraut_onions" + ], + "fg": 968, "rotates": false }, { - "id": "t_chaingate_o", - "fg": 269, + "id": [ "chilly-p", "curry_powder", "can_tomato", "meat_salted", "hflesh_salted" ], + "fg": 969, "rotates": false }, + { "id": "dry_fruit", "fg": 970, "rotates": false }, + { "id": [ "dry_meat", "dry_hflesh" ], "fg": 971, "rotates": false }, + { "id": [ "dry_meat_tainted", "dry_veggy_tainted" ], "fg": 972, "rotates": false }, { - "id": "t_chaingate_c", - "fg": 270, + "id": [ "rehydrated_fruit", "juice_pulp", "can_spam", "can_tuna", "can_salmon", "can_catfood", "chem_anfo", "catfood" ], + "fg": 973, "rotates": false }, { - "id": "t_chaingate_l", - "fg": 271, + "id": [ "rehydrated_meat", "rehydrated_hflesh", "apple_canned", "apple_sugar", "meat_pickled", "human_pickled" ], + "fg": 974, "rotates": false }, + { "id": [ "rehydrated_veggy", "veggy_pickled" ], "fg": 975, "rotates": false }, { "id": [ - "t_reb_cage", - "t_bars" + "chaw", + "dandelion_cooked", + "wild_herbs", + "veggy_salad", + "dried_salad", + "insta_salad", + "veggy_aspic", + "veggy_canned", + "veggy_salted", + "dry_veggy", + "homebrew_antiseptic", + "chem_chromium_oxide" ], - "fg": 272, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 273 - }, - { - "id": "corner", - "fg": 274 - }, - { - "id": "edge", - "fg": 275 - }, - { - "id": "end_piece", - "fg": 275 - }, - { - "id": "t_connection", - "fg": 276 - }, - { - "id": "unconnected", - "fg": 272 - } - ] + "fg": 976, + "rotates": false }, + { "id": [ "irradiated_strawberries", "strawberries" ], "fg": 977, "rotates": false }, + { "id": "meat_scrap_cooked", "fg": 978, "rotates": false }, + { "id": "fish_bait", "fg": 979, "rotates": false }, + { "id": "meat_scrap", "fg": 980, "rotates": false }, { - "id": "t_window_bars", - "fg": 275, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 273 - }, - { - "id": "corner", - "fg": 274 - }, - { - "id": "edge", - "fg": 275 - }, - { - "id": "end_piece", - "fg": 275 - }, - { - "id": "t_connection", - "fg": 276 - }, - { - "id": "unconnected", - "fg": 275 - } - ] + "id": [ "brioche", "toastem", "toastem2", "toastem3", "toasterpastryfrozen", "wastebread", "bread" ], + "fg": 981, + "rotates": false }, { "id": [ - "t_ov_reb_cage", - "t_ov_smreb_cage", - "t_metal" + "pemmican", + "hflesh_pemmican", + "toasterpastry", + "cloutie_dumpling", + "haggis", + "human_haggis", + "unfinished_charcoal", + "fish_smoked" ], - "fg": 277, + "fg": 982, "rotates": false }, { - "id": "t_wall_wattle_half", - "fg": 278, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 279 - }, - { - "id": "corner", - "fg": 280 - }, - { - "id": "edge", - "fg": 281 - }, - { - "id": "end_piece", - "fg": 282 - }, - { - "id": "t_connection", - "fg": 283 - }, - { - "id": "unconnected", - "fg": 278 - } - ] + "id": [ "fish", "lunchmeat", "fruit_leather", "fried_spam", "meat_aspic", "hflesh_aspic", "sashimi" ], + "fg": 983, + "rotates": false }, + { "id": [ "fish_cooked", "fish_pickled", "salted_fish", "wool_staple" ], "fg": 984, "rotates": false }, + { "id": [ "fish_fried", "cornbread", "johnnycake", "noodles_fast" ], "fg": 985, "rotates": false }, + { "id": [ "fish_canned", "lutefisk" ], "fg": 986, "rotates": false }, + { "id": "sweetbread", "fg": 987, "rotates": false }, + { "id": [ "chips2", "chips3", "chips" ], "fg": 988, "rotates": false }, + { "id": [ "popcorn", "popcorn2", "popcorn3" ], "fg": 989, "rotates": false }, + { "id": [ "cereal", "cereal2", "cereal3", "can_peach" ], "fg": 990, "rotates": false }, + { "id": [ "bacon", "fetus" ], "fg": 991, "rotates": false }, + { "id": [ "frozen_dinner", "mre_chicken" ], "fg": 992, "rotates": false }, { - "id": [ - "t_wall_half", - "t_wall_log_half" - ], - "fg": 284, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 285 - }, - { - "id": "corner", - "fg": 286 - }, - { - "id": "edge", - "fg": 287 - }, - { - "id": "end_piece", - "fg": 288 - }, - { - "id": "t_connection", - "fg": 289 - }, - { - "id": "unconnected", - "fg": 284 - } - ] + "id": [ "jerky", "jerky_human", "cooked_dinner", "meat_smoked", "human_smoked", "mre_beef" ], + "fg": 993, + "rotates": false }, + { "id": [ "human_flesh", "meat_canned", "human_canned", "meat" ], "fg": 994, "rotates": false }, + { "id": [ "meat_cooked", "human_cooked", "royal_beef", "spider_steak_cooked" ], "fg": 995, "rotates": false }, + { "id": "meat_tainted", "fg": 996, "rotates": false }, + { "id": "spider_steak", "fg": 997, "rotates": false }, + { "id": "spider_steak_fried", "fg": 998, "rotates": false }, + { "id": [ "stomach_large", "hstomach", "hstomach_large", "stomach" ], "fg": 999, "rotates": false }, { - "id": [ - "t_scrap_wall_halfway", - "t_junk_palisade" - ], - "fg": 290, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 291 - }, - { - "id": "corner", - "fg": 292 - }, - { - "id": "edge", - "fg": 293 - }, - { - "id": "end_piece", - "fg": 294 - }, - { - "id": "t_connection", - "fg": 295 - }, - { - "id": "unconnected", - "fg": 290 - } - ] + "id": [ "stomach_boiled", "hstomach_boiled", "small_stomach_boiled", "small_hstomach_boiled" ], + "fg": 1000, + "rotates": false }, + { "id": "offal_cooked", "fg": 1001, "rotates": false }, + { "id": "offal", "fg": 1002, "rotates": false }, + { "id": "sausage_wasteland", "fg": 1003, "rotates": false }, + { "id": "spider_brain", "fg": 1004, "rotates": false }, + { "id": [ "helmet_bone_megabear", "megabear_skull_clean" ], "fg": 1005, "rotates": false }, + { "id": "megabear_skull_unclean", "fg": 1006, "rotates": false }, + { "id": "e_handcuffs", "fg": 1007, "rotates": false }, + { "id": "onion_rings", "fg": 1008, "rotates": false }, { - "id": [ - "t_brick_wall_halfway", - "f_sandbag_half" - ], - "fg": 296, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 297 - }, - { - "id": "corner", - "fg": 298 - }, - { - "id": "edge", - "fg": 299 - }, - { - "id": "end_piece", - "fg": 300 - }, - { - "id": "t_connection", - "fg": 301 - }, - { - "id": "unconnected", - "fg": 296 - } - ] + "id": [ "deluxe_eggs", "nachos", "nachosc", "nachosm", "nachoshf", "nachosmc", "nachoshc", "chunk_sulfur", "scrambled_eggs" ], + "fg": 1009, + "rotates": false }, + { "id": "fat_tainted", "fg": 1010, "rotates": false }, { - "id": [ - "t_rock_wall_half", - "t_sconc_wall_halfway", - "t_strconc_wall_halfway" - ], - "fg": 302, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 303 - }, - { - "id": "corner", - "fg": 304 - }, - { - "id": "edge", - "fg": 305 - }, - { - "id": "end_piece", - "fg": 306 - }, - { - "id": "t_connection", - "fg": 307 - }, - { - "id": "unconnected", - "fg": 302 - } - ] + "id": [ "onigiri", "seed_garlic", "fat", "material_limestone", "material_rocksalt", "marshmallow" ], + "fg": 1011, + "rotates": false }, - { - "id": "t_concrete_wall", - "fg": 308, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 309 - }, - { - "id": "corner", - "fg": 310 - }, - { - "id": "edge", - "fg": 311 - }, - { - "id": "end_piece", - "fg": 312 - }, - { - "id": "t_connection", - "fg": 313 - }, - { - "id": "unconnected", - "fg": 308 - } - ] + { "id": [ "raw_tainted_fur", "raw_fur" ], "fg": 1012, "rotates": false }, + { "id": "cured_pelt", "fg": 1013, "rotates": false }, + { "id": "tanned_pelt", "fg": 1014, "rotates": false }, + { "id": [ "raw_hleather", "raw_tainted_leather", "raw_leather" ], "fg": 1015, "rotates": false }, + { "id": "cured_hide", "fg": 1016, "rotates": false }, + { "id": "tanned_hide", "fg": 1017, "rotates": false }, + { "id": "tanning_hide", "fg": 1018, "rotates": false }, + { "id": "tanning_pelt", "fg": 1019, "rotates": false }, + { "id": [ "fresh_fries", "fries", "cheese_fries", "fresh_fries_big" ], "fg": 1020, "rotates": false }, + { "id": "powder_candy", "fg": 1021, "rotates": false }, + { "id": [ "spaghetti_raw", "cracklins", "porkstick", "mre_hotdog" ], "fg": 1022, "rotates": false }, + { "id": "straw_pile", "fg": 1023, "rotates": false }, + { "id": "candycigarette", "fg": 1024, "rotates": false }, + { "id": "dogbane", "fg": 1025, "rotates": false }, + { "id": "seed_rhubarb", "fg": 1026, "rotates": false }, + { "id": "canola", "fg": 1027, "rotates": false }, + { "id": [ "irradiated_rhubarb", "rhubarb" ], "fg": 1028, "rotates": false }, + { "id": [ "thyme", "seed_veggy_wild" ], "fg": 1029, "rotates": false }, + { "id": [ "wheat", "barley" ], "fg": 1030, "rotates": false }, + { "id": [ "irradiated_broccoli", "cannabis", "broccoli" ], "fg": 1031, "rotates": false }, + { "id": [ "hops", "celery", "irradiated_celery" ], "fg": 1032, "rotates": false }, + { + "id": [ "dahlia_root", "dahlia_baked", "cattail_rhizome", "hickory_root", "seed_hops" ], + "fg": 1033, + "rotates": false + }, + { "id": [ "mushroom_morel", "morel_cooked", "morel_fried", "mushroom" ], "fg": 1034, "rotates": false }, + { "id": [ "leg", "arm" ], "fg": 1035, "rotates": false }, + { "id": "fchicken", "fg": 1036, "rotates": false }, + { "id": "bone_tainted", "fg": 1037, "rotates": false }, + { "id": [ "bone_human", "bone" ], "fg": 1038, "rotates": false }, + { "id": [ "irradiated_banana", "banana" ], "fg": 1039, "rotates": false }, + { "id": [ "irradiated_carrot", "carrot" ], "fg": 1040, "rotates": false }, + { "id": "chili_pepper", "fg": 1041, "rotates": false }, + { "id": [ "irradiated_grapes", "grapes" ], "fg": 1042, "rotates": false }, + { "id": [ "irradiated_pineapple", "pineapple" ], "fg": 1043, "rotates": false }, + { "id": [ "mugwort", "pine_bough", "tobacco_raw", "weed" ], "fg": 1044, "rotates": false }, + { "id": "sugar_beet", "fg": 1045, "rotates": false }, + { "id": [ "corndogs_cooked", "corndogs_frozen" ], "fg": 1046, "rotates": false }, + { "id": [ "joint", "handrolled_cig" ], "fg": 1047, "rotates": false }, + { + "id": [ "mannwurstgravy", "sausagegravy", "cooked_cattail_stalk", "vibrator" ], + "fg": 1048, + "rotates": false }, { "id": [ - "t_sliding_concrete_wall_c", - "t_secretdoor_concrete_wall_c" + "sausage", + "mre_maplesausage", + "hotdogs_frozen", + "hotdogs_cooked", + "hotdogs_campfire", + "chilidogs", + "chilidogs_human", + "mannwurst", + "currywurst", + "h_currywurst", + "sweet_sausage" ], - "fg": 311, - "rotates": true + "fg": 1049, + "rotates": false }, { - "id": "t_secretdoor_concrete_wall_o", - "fg": 314, - "rotates": true + "id": [ "zucchini", "irradiated_zucchini", "cucumber", "irradiated_cucumber", "cattail_stalk", "stick_fiber", "pickle" ], + "fg": 1050, + "rotates": false + }, + { "id": [ "irradiated_corn", "corn" ], "fg": 1051, "rotates": false }, + { "id": [ "frozen_burrito", "cooked_burrito" ], "fg": 1052, "rotates": false }, + { "id": "cig", "fg": 1053, "rotates": false }, + { "id": "cig_lit", "fg": 1054, "rotates": false }, + { "id": "cig_butt", "fg": 1055, "rotates": false }, + { "id": "cigar", "fg": 1056, "rotates": false }, + { "id": "cigar_lit", "fg": 1057, "rotates": false }, + { "id": "cigar_butt", "fg": 1058, "rotates": false }, + { "id": [ "clay_lump", "clay_boiled", "clay_lump", "chocolate" ], "fg": 1059, "rotates": false }, + { "id": "gum", "fg": 1060, "rotates": false }, + { "id": "nic_gum", "fg": 1061, "rotates": false }, + { "id": [ "tallow", "lard", "caff_gum" ], "fg": 1062, "rotates": false }, + { "id": [ "tallow_tainted", "material_aluminium_ingot" ], "fg": 1063, "rotates": false }, + { "id": [ "hfleshbologna", "bologna" ], "fg": 1064, "rotates": false }, + { "id": "royal_jelly_sap", "fg": 1065, "rotates": false }, + { "id": "royal_jelly", "fg": 1066, "rotates": false }, + { "id": "honeycomb", "fg": 1067, "rotates": false }, + { "id": "wax", "fg": 1068, "rotates": false }, + { "id": [ "sushi_fishroll", "sushi_meatroll", "sushi_veggyroll" ], "fg": 1069, "rotates": false }, + { "id": [ "pie_meat", "pie_human", "pie_maple", "pie" ], "fg": 1070, "rotates": false }, + { "id": "pizza_cheese", "fg": 1071, "rotates": false }, + { "id": [ "pizza_meat", "pizza_human" ], "fg": 1072, "rotates": false }, + { "id": [ "pizza_veggy", "pie_veggy" ], "fg": 1073, "rotates": false }, + { "id": [ "waffles", "fruit_waffles" ], "fg": 1074, "rotates": false }, + { "id": "choc_waffles", "fg": 1075, "rotates": false }, + { "id": [ "biscuit", "flatbread", "tortilla_corn", "cookies" ], "fg": 1076, "rotates": false }, + { "id": [ "grahmcrackers", "hardtack", "frenchtoast", "crackers" ], "fg": 1077, "rotates": false }, + { + "id": [ "sandwich_pbh", "sandwich_cheese_grilled", "sandwich_cheese", "sandwich_honey", "sandwich_pbm", "fish_sandwich" ], + "fg": 1078, + "rotates": false }, + { "id": [ "sandwich_cucumber", "sandwich_veggy" ], "fg": 1079, "rotates": false }, + { "id": [ "sandwich_pbj", "blt", "sandwich_jam" ], "fg": 1080, "rotates": false }, { "id": [ - "t_railing_h", - "t_railing_v", - "t_guardrail_bg_dp", - "t_railing" + "sandwich_t", + "sandwich_human", + "smores", + "sandwich_pb", + "cheeseburgerhuman", + "sandwich_deluxe", + "sandwich_dudeluxe", + "cheeseburger", + "hamburger", + "bobburger", + "sloppyjoe", + "manwich", + "sandwich_sauce", + "spider_steak_sandwich" ], - "fg": 315, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 315 - }, - { - "id": "corner", - "fg": 316 - }, - { - "id": "edge", - "fg": 317 - }, - { - "id": "end_piece", - "fg": 318 - }, - { - "id": "t_connection", - "fg": 319 - }, - { - "id": "unconnected", - "fg": 320 - } - ] + "fg": 1081, + "rotates": false }, + { "id": [ "tiotaco", "quesadilla_cheese", "taco" ], "fg": 1082, "rotates": false }, + { "id": [ "oatmeal_deluxe", "oatmeal_cooked" ], "fg": 1083, "rotates": false }, + { "id": [ "spaghetti_bolognese", "spaghetti_human", "chili", "chili_human" ], "fg": 1084, "rotates": false }, + { "id": "spaghetti_pesto", "fg": 1085, "rotates": false }, + { "id": [ "luigilasagne", "lasagne" ], "fg": 1086, "rotates": false }, + { "id": [ "folding_poncho", "lasagne_raw" ], "fg": 1087, "rotates": false }, + { "id": [ "cheese_hard", "cheese" ], "fg": 1088, "rotates": false }, + { "id": "glazed_tenderloin", "fg": 1089, "rotates": false }, + { "id": [ "fruit_pancakes", "choc_pancakes", "pancakes" ], "fg": 1090, "rotates": false }, + { "id": [ "brownie", "brownie_weed", "cake2" ], "fg": 1091, "rotates": false }, + { "id": [ "jihelucake", "cake3" ], "fg": 1092, "rotates": false }, + { "id": [ "chocpretzels", "pretzels" ], "fg": 1093, "rotates": false }, + { "id": "contacts", "fg": 1094, "rotates": false }, + { "id": "eyedrops", "fg": 1095, "rotates": false }, + { "id": [ "inhaler_stimgas", "inhaler", "inhaler_sewergas" ], "fg": 1096, "rotates": false }, + { "id": "bandages", "fg": 1097, "rotates": false }, + { "id": "medikit", "fg": 1098, "rotates": false }, + { "id": "duct_tape", "fg": 1099, "rotates": false }, + { "id": "medical_tape", "fg": 1100, "rotates": false }, + { "id": "resin_cord", "fg": 1101, "rotates": false }, + { "id": "medical_gauze", "fg": 1102, "rotates": false }, + { "id": "lsd", "fg": 1103, "rotates": false }, + { "id": [ "vitamins", "adderall" ], "fg": 1104, "rotates": false }, + { "id": "caffeine", "fg": 1105, "rotates": false }, + { "id": "thorazine", "fg": 1106, "rotates": false }, + { "id": "xanax", "fg": 1107, "rotates": false }, + { "id": [ "pills_sleep", "prussian_blue", "oxycodone" ], "fg": 1108, "rotates": false }, + { "id": "codeine", "fg": 1109, "rotates": false }, { "id": [ - "t_glass_railing", - "t_glass_railing_h", - "t_glass_railing_v" - ], - "fg": 321, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 321 - }, - { - "id": "corner", - "fg": 322 - }, - { - "id": "edge", - "fg": 323 - }, - { - "id": "end_piece", - "fg": 324 - }, - { - "id": "t_connection", - "fg": 325 - }, - { - "id": "unconnected", - "fg": 326 - } - ] - }, - { - "id": "t_metal_railing", - "fg": 327, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 327 - }, - { - "id": "corner", - "fg": 328 - }, - { - "id": "edge", - "fg": 329 - }, - { - "id": "end_piece", - "fg": 330 - }, - { - "id": "t_connection", - "fg": 331 - }, - { - "id": "unconnected", - "fg": 332 - } - ] - }, - { - "id": [ - "t_railroad_track", - "t_railroad_track_h", - "t_railroad_track_v", - "t_railroad_track_d", - "t_railroad_track_d1", - "t_railroad_track_d2" - ], - "fg": 333, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 333 - }, - { - "id": "corner", - "fg": [ - 334, - 335, - 336, - 337 - ] - }, - { - "id": "edge", - "fg": 338 - }, - { - "id": "end_piece", - "fg": 338 - }, - { - "id": "t_connection", - "fg": 339 - }, - { - "id": "unconnected", - "fg": 338 - } - ] - }, - { - "id": "t_railroad_track_on_tie", - "fg": 340 - }, - { - "id": [ - "t_railroad_tie_h", - "t_railroad_tie_v", - "t_railroad_tie" + "aspirin", + "antifungal", + "antiparasitic", + "pur_tablets", + "iodine", + "tramadol", + "diazepam", + "calcium_tablet", + "weak_antibiotic" ], - "fg": 341, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "edge", - "fg": 342 - } - ] + "fg": 1110, + "rotates": false }, - { - "id": [ - "t_wall_log", - "t_wall_wood" - ], - "fg": 343, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 344 - }, - { - "id": "corner", - "fg": 345 - }, - { - "id": "edge", - "fg": 346 - }, - { - "id": "end_piece", - "fg": 347 - }, - { - "id": "t_connection", - "fg": 348 - }, - { - "id": "unconnected", - "fg": 343 - } - ] + { "id": "prozac", "fg": 1111, "rotates": false }, + { "id": "antibiotics", "fg": 1112, "rotates": false }, + { "id": "nyquil", "fg": 1113, "rotates": false }, + { "id": "dayquil", "fg": 1114, "rotates": false }, + { "id": "panacea", "fg": 1115, "rotates": false }, + { "id": [ "advanced_ecig", "antenna" ], "fg": 1116, "rotates": false }, + { "id": [ "skinny_tie", "ecig" ], "fg": 1117, "rotates": false }, + { "id": "dr_stem_cell", "fg": 1118, "rotates": false }, + { "id": "permanent_marker", "fg": 1119, "rotates": false }, + { "id": [ "berserker_drug", "adrenaline_injector" ], "fg": 1120, "rotates": false }, + { "id": "berserker_drug_act", "fg": 1121, "rotates": false }, + { "id": [ "inj_vitb", "inj_iron" ], "fg": 1122, "rotates": false }, + { "id": [ "offal_canned", "r_paint", "pickles_ferment" ], "fg": 1123, "rotates": false }, + { + "id": [ "offal_pickled", "sauerkraut_ferment", "jar_spider_steak_pickled", "megabear_skull_picked" ], + "fg": 1124, + "rotates": false }, - { - "id": [ - "t_wall_wood_chipped", - "t_wall_log_chipped" - ], - "fg": 349, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 350 - }, - { - "id": "corner", - "fg": 351 - }, - { - "id": "edge", - "fg": 352 - }, - { - "id": "end_piece", - "fg": 353 - }, - { - "id": "t_connection", - "fg": 354 - }, - { - "id": "unconnected", - "fg": 349 - } - ] + { "id": [ "y_paint", "honey_glassed" ], "fg": 1125, "rotates": false }, + { "id": "b_paint", "fg": 1126, "rotates": false }, + { "id": [ "g_paint", "jar_sauerkraut_pickled" ], "fg": 1127, "rotates": false }, + { "id": "p_paint", "fg": 1128, "rotates": false }, + { "id": "w_paint", "fg": 1129, "rotates": false }, + { "id": "jar_pickles_pickled", "fg": 1130, "rotates": false }, + { "id": "hazardous_waste_drum", "fg": 1131, "rotates": false }, + { "id": "can_food", "fg": 1132, "rotates": false }, + { "id": [ "popcan_stove", "can_drink" ], "fg": 1133, "rotates": false }, + { "id": "can_food_unsealed", "fg": 1134, "rotates": false }, + { "id": "can_drink_unsealed", "fg": 1135, "rotates": false }, + { "id": "jar_glass", "fg": 1136, "rotates": false }, + { "id": [ "jar_glass_sealed", "spider_steak_pickled" ], "fg": 1137, "rotates": false }, + { "id": "jar_3l_glass", "fg": 1138, "rotates": false }, + { "id": "jar_3l_glass_sealed", "fg": 1139, "rotates": false }, + { "id": [ "styrofoam_cup", "cup_plastic" ], "fg": 1140, "rotates": false }, + { "id": "cup_plastic_unsealed", "fg": 1141, "rotates": false }, + { "id": "glass", "fg": 1142, "rotates": false }, + { "id": "ceramic_cup", "fg": 1143, "rotates": false }, + { "id": [ "glass_tube_small", "test_tube" ], "fg": 1144, "rotates": false }, + { + "id": [ "rubber_slug", "canister_goo", "bot_fungal_boil", "bot_fungal_boil_egg" ], + "fg": 1145, + "rotates": false }, - { - "id": [ - "t_wall_wood_broken", - "t_wall_log_broken" - ], - "fg": 355, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 356 - }, - { - "id": "corner", - "fg": 357 - }, - { - "id": "edge", - "fg": 358 - }, - { - "id": "end_piece", - "fg": 358 - }, - { - "id": "t_connection", - "fg": 356 - }, - { - "id": "unconnected", - "fg": 355 - } - ] + { "id": "clay_canister", "fg": 1146, "rotates": false }, + { "id": "bottle_folding", "fg": 1147, "rotates": false }, + { "id": "bottle_metal", "fg": 1148, "rotates": false }, + { "id": [ "bottle_twoliter", "bottle_plastic", "bottle_plastic_small" ], "fg": 1149, "rotates": false }, + { "id": "acidbomb_medium", "fg": 1150, "rotates": false }, + { "id": "nail_bomb", "fg": 1151, "rotates": false }, + { "id": "triffid_sap_grenade", "fg": 1152, "rotates": false }, + { "id": "bottle_glass", "fg": 1153, "rotates": false }, + { "id": "fertilizer_chelated", "fg": 1154, "rotates": false }, + { "id": [ "2lcanteen", "canteen_wood", "canteen" ], "fg": 1155, "rotates": false }, + { "id": "flask_hip", "fg": 1156, "rotates": false }, + { "id": "jug_plastic", "fg": 1157, "rotates": false }, + { "id": "jug_clay", "fg": 1158, "rotates": false }, + { "id": "clay_hydria", "fg": 1159, "rotates": false }, + { "id": [ "sac_treated", "sac_empty" ], "fg": 1160, "rotates": false }, + { "id": [ "sac_purse", "sac_purse_ankle", "sac_purse_arm", "sac_purse_leg" ], "fg": 1161, "rotates": false }, + { + "id": [ "waterskin2", "waterskin3", "large_stomach_sealed", "stomach_sealed", "waterskin" ], + "fg": 1162, + "rotates": false }, + { "id": [ "milk_curdling", "milk_curdling2", "milk_curdling3" ], "fg": 1163, "rotates": false }, + { "id": [ "flask_yeast", "flask_glass" ], "fg": 1164, "rotates": false }, + { "id": [ "antidote_posion", "revival_serum", "antidote_badpoison" ], "fg": 1165, "rotates": false }, + { "id": "acidbomb", "fg": 1166, "rotates": false }, { "id": [ - "t_scrap_wall", - "t_junk_wall", - "t_wall_metal" + "solarpack", + "q_solarpack", + "mbag", + "survivor_rucksack", + "survivor_duffel_bag", + "ammo_satchel", + "chestpouch", + "legpouch", + "legpouch_large", + "makeshift_knapsack", + "camelbak" ], - "fg": 359, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 360 - }, - { - "id": "corner", - "fg": 361 - }, - { - "id": "edge", - "fg": 362 - }, - { - "id": "end_piece", - "fg": 363 - }, - { - "id": "t_connection", - "fg": 364 - }, - { - "id": "unconnected", - "fg": 359 - } - ] - }, - { - "id": "t_wall_r", - "fg": 365, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 366 - }, - { - "id": "corner", - "fg": 367 - }, - { - "id": "edge", - "fg": 368 - }, - { - "id": "end_piece", - "fg": 369 - }, - { - "id": "t_connection", - "fg": 370 - }, - { - "id": "unconnected", - "fg": 365 - } - ] - }, - { - "id": "t_wall_y", - "fg": 371, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 372 - }, - { - "id": "corner", - "fg": 373 - }, - { - "id": "edge", - "fg": 374 - }, - { - "id": "end_piece", - "fg": 375 - }, - { - "id": "t_connection", - "fg": 376 - }, - { - "id": "unconnected", - "fg": 371 - } - ] + "fg": 1167, + "rotates": false }, + { "id": [ "backpack", "runner_bag", "slingpack" ], "fg": 1168, "rotates": false }, { - "id": "t_brick_wall", - "fg": 377, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 378 - }, - { - "id": "corner", - "fg": 379 - }, - { - "id": "edge", - "fg": 380 - }, - { - "id": "end_piece", - "fg": 381 - }, - { - "id": "t_connection", - "fg": 382 - }, - { - "id": "unconnected", - "fg": 377 - } - ] + "id": [ "backpack_leather", "survivor_pack", "survivor_runner_pack", "swag_bag" ], + "fg": 1169, + "rotates": false }, + { "id": "duffelbag", "fg": 1170, "rotates": false }, + { "id": [ "fanny", "dive_bag" ], "fg": 1171, "rotates": false }, + { "id": "purse", "fg": 1172, "rotates": false }, + { "id": [ "plastic_shopping_bag", "plastic_bucket" ], "fg": 1173, "rotates": false }, + { "id": "straw_basket", "fg": 1174, "rotates": false }, + { "id": "bucket", "fg": 1175, "rotates": false }, + { "id": "plastic_bag_vac", "fg": 1176, "rotates": false }, { "id": [ - "t_sliding_brick_wall_c", - "t_secretdoor_brick_wall_c" + "bag_canvas", + "bag_canvas_small", + "mre_beef_box", + "mre_veggy_box", + "mre_chicken_box", + "mre_hotdog_box", + "mre_ravioli_box" ], - "fg": 380, - "rotates": true - }, - { - "id": "t_secretdoor_brick_wall_o", - "fg": 383, - "rotates": true - }, - { - "id": "f_sandbag_wall", - "fg": 384, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 385 - }, - { - "id": "corner", - "fg": 386 - }, - { - "id": "edge", - "fg": 387 - }, - { - "id": "end_piece", - "fg": 388 - }, - { - "id": "t_connection", - "fg": 389 - }, - { - "id": "unconnected", - "fg": 384 - } - ] - }, - { - "id": "t_wall_wattle", - "fg": 390, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 391 - }, - { - "id": "corner", - "fg": 392 - }, - { - "id": "edge", - "fg": 393 - }, - { - "id": "end_piece", - "fg": 394 - }, - { - "id": "t_connection", - "fg": 395 - }, - { - "id": "unconnected", - "fg": 390 - } - ] - }, - { - "id": "t_wall_wattle_broken", - "fg": 396, - "rotates": true + "fg": 1177, + "rotates": false }, + { "id": [ "bag_bundle_10", "bag_plastic" ], "fg": 1178, "rotates": false }, + { "id": [ "concrete", "mortar_build" ], "fg": 1179, "rotates": false }, + { "id": "box_cigarette", "fg": 1180, "rotates": false }, + { "id": "box_small", "fg": 1181, "rotates": false }, + { "id": "jerrycan_big", "fg": 1182, "rotates": false }, { - "id": "t_wall_g", - "fg": 397, - "rotates": true, + "id": "vp_tank_medium", + "fg": 1182, + "rotates": false, "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 398 - }, - { - "id": "corner", - "fg": 399 - }, - { - "id": "edge", - "fg": 400 - }, - { - "id": "end_piece", - "fg": 401 - }, - { - "id": "t_connection", - "fg": 402 - }, - { - "id": "unconnected", - "fg": 397 - } - ] + "additional_tiles": [ { "id": "broken", "fg": 1183 } ] }, + { "id": [ "jerrypack", "jerrycan" ], "fg": 1184, "rotates": false }, { - "id": "t_wall_b", - "fg": 403, - "rotates": true, + "id": "vp_tank_small", + "fg": 1184, + "rotates": false, "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 404 - }, - { - "id": "corner", - "fg": 405 - }, - { - "id": "edge", - "fg": 406 - }, - { - "id": "end_piece", - "fg": 407 - }, - { - "id": "t_connection", - "fg": 408 - }, - { - "id": "unconnected", - "fg": 403 - } - ] + "additional_tiles": [ { "id": "broken", "fg": 1183 } ] }, { - "id": "t_wall_p", - "fg": 409, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 410 - }, - { - "id": "corner", - "fg": 411 - }, - { - "id": "edge", - "fg": 412 - }, - { - "id": "end_piece", - "fg": 413 - }, - { - "id": "t_connection", - "fg": 414 - }, - { - "id": "unconnected", - "fg": 409 - } - ] + "id": [ "metal_tank_small", "metal_tank_little", "metal_tank_small", "metal_tank" ], + "fg": 1185, + "rotates": false }, { - "id": [ - "t_wall", - "t_wall_w" - ], - "fg": 415, - "rotates": true, + "id": [ "vp_tank", "vp_tank_little" ], + "fg": 1185, + "rotates": false, "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 416 - }, - { - "id": "corner", - "fg": 417 - }, - { - "id": "edge", - "fg": 418 - }, - { - "id": "end_piece", - "fg": 419 - }, - { - "id": "t_connection", - "fg": 420 - }, - { - "id": "unconnected", - "fg": 415 - } - ] - }, - { - "id": [ - "t_secretdoor_wall_c", - "t_sliding_wall_c", - "t_secretdoor_onetime" - ], - "fg": 418, - "rotates": true - }, - { - "id": [ - "t_sliding_wall_o", - "t_secretdoor_wall_o" - ], - "fg": 421, - "rotates": true + "additional_tiles": [ { "id": "broken", "fg": 1183 } ] }, + { "id": "stamina_vial", "fg": 1186, "rotates": false }, + { "id": [ "hose", "vine_30" ], "fg": 1187, "rotates": false }, + { "id": [ "leather_cat_tail", "fur_cat_tail", "string_6", "string_36" ], "fg": 1188, "rotates": false }, + { "id": [ "wire", "wire_barbed", "chain" ], "fg": 1189, "rotates": false }, + { "id": "spaghetti_cooked", "fg": 1190, "rotates": false }, + { "id": [ "flu_shot", "vaccine_shot" ], "fg": 1191, "rotates": false }, + { "id": "copper_knife", "fg": 1192, "rotates": false }, { "id": [ - "t_rock_wall", - "t_sconc_wall", - "t_strconc_wall" + "knife_steak", + "knife_butcher", + "knife_combat", + "diveknife", + "makeshift_knife", + "primitive_knife", + "knife_trench", + "switchblade", + "kris", + "knife_hunting", + "knife_rambo", + "knife_rm42", + "honey_scraper", + "bio_blade_weapon", + "kris_fake" ], - "fg": 422, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 423 - }, - { - "id": "corner", - "fg": 424 - }, - { - "id": "edge", - "fg": 425 - }, - { - "id": "end_piece", - "fg": 426 - }, - { - "id": "t_connection", - "fg": 427 - }, - { - "id": "unconnected", - "fg": 422 - } - ] + "fg": 1193, + "rotates": false }, + { "id": "glass_shiv", "fg": 1194, "rotates": false }, + { "id": "foil_alum", "fg": 1195, "rotates": false }, + { "id": [ "rolling_paper", "aluminum_foil", "wrapper" ], "fg": 1196, "rotates": false }, + { "id": "grenade_inc_act", "fg": 1197, "rotates": false }, + { "id": "scrambler_act", "fg": 1198, "rotates": false }, + { "id": "EMPbomb_act", "fg": 1199, "rotates": false }, + { "id": [ "flashbang_act", "t_lgtn_arrest" ], "fg": 1200, "rotates": false }, + { "id": "smokebomb_act", "fg": 1201, "rotates": false }, + { "id": "gasbomb_act", "fg": 1202, "rotates": false }, + { "id": "flashbang", "fg": 1203, "rotates": false }, + { "id": "grenade_inc", "fg": 1204, "rotates": false }, + { "id": "scrambler", "fg": 1205, "rotates": false }, + { "id": "EMPbomb", "fg": 1206, "rotates": false }, + { "id": "smokebomb", "fg": 1207, "rotates": false }, + { "id": "gasbomb", "fg": 1208, "rotates": false }, + { "id": "thermos", "fg": 1209, "rotates": false }, + { "id": "vacutainer", "fg": 1210, "rotates": false }, { "id": [ - "t_gutter", - "t_gutter_north", - "t_gutter_east", - "t_gutter_south", - "t_gutter_west" - ], - "fg": 428, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 429 - }, - { - "id": "corner", - "fg": 430 - }, - { - "id": "edge", - "fg": 431 - }, - { - "id": "end_piece", - "fg": 432 - }, - { - "id": "t_connection", - "fg": 433 - }, - { - "id": "unconnected", - "fg": 428 - } - ] - }, - { - "id": "t_gutter_drop", - "fg": 434, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 435 - }, - { - "id": "corner", - "fg": 436 - }, - { - "id": "edge", - "fg": 437 - }, - { - "id": "end_piece", - "fg": 438 - }, - { - "id": "t_connection", - "fg": 439 - }, - { - "id": "unconnected", - "fg": 434 - } - ] - }, - { - "id": "t_gutter_downspout", - "fg": 440, - "rotates": true - }, - { - "id": "t_window_bars_alarm", - "fg": 441, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 442 - }, - { - "id": "corner", - "fg": 443 - }, - { - "id": "edge", - "fg": 444 - }, - { - "id": "end_piece", - "fg": 445 - }, - { - "id": "t_connection", - "fg": 446 - }, - { - "id": "unconnected", - "fg": 441 - } - ] - }, - { - "id": "t_reinforced_glass_shutter", - "fg": 447, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 448 - }, - { - "id": "corner", - "fg": 449 - }, - { - "id": "edge", - "fg": 450 - }, - { - "id": "end_piece", - "fg": 451 - }, - { - "id": "t_connection", - "fg": 452 - }, - { - "id": "unconnected", - "fg": 447 - } - ] - }, - { - "id": "t_reinforced_glass_shutter_open", - "fg": 453, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 454 - }, - { - "id": "corner", - "fg": 455 - }, - { - "id": "edge", - "fg": 456 - }, - { - "id": "end_piece", - "fg": 457 - }, - { - "id": "t_connection", - "fg": 458 - }, - { - "id": "unconnected", - "fg": 453 - } - ] - }, - { - "id": "t_reinforced_glass", - "fg": 459, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 460 - }, - { - "id": "corner", - "fg": 461 - }, - { - "id": "edge", - "fg": 462 - }, - { - "id": "end_piece", - "fg": 463 - }, - { - "id": "t_connection", - "fg": 464 - }, - { - "id": "unconnected", - "fg": 459 - } - ] - }, - { - "id": [ - "t_wall_glass_alarm", - "t_window", - "t_window_alarm", - "t_wall_glass" - ], - "fg": 465, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 466 - }, - { - "id": "corner", - "fg": 467 - }, - { - "id": "edge", - "fg": 468 - }, - { - "id": "end_piece", - "fg": 469 - }, - { - "id": "t_connection", - "fg": 470 - }, - { - "id": "unconnected", - "fg": 465 - } - ] - }, - { - "id": [ - "t_door_glass_frosted_c", - "t_door_glass_lab_c", - "t_door_glass_frosted_lab_c", - "t_door_glass_red_c", - "t_door_glass_green_c", - "t_door_glass_white_c", - "t_door_glass_gray_c", - "t_door_glass_c" - ], - "fg": 471, - "rotates": true - }, - { - "id": [ - "t_door_glass_frosted_o", - "t_door_glass_lab_o", - "t_door_glass_frosted_lab_o", - "t_door_glass_red_o", - "t_door_glass_green_o", - "t_door_glass_white_o", - "t_door_glass_gray_o", - "t_door_glass_o" - ], - "fg": 472, - "rotates": true - }, - { - "id": "t_window_stained_red", - "fg": 473, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "t_connection", - "fg": 474 - } - ] - }, - { - "id": "t_window_stained_green", - "fg": 475, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "t_connection", - "fg": 476 - } - ] - }, - { - "id": "t_window_domestic", - "fg": 477, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "t_connection", - "fg": 478 - } - ] - }, - { - "id": "t_window_open", - "fg": 479, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "t_connection", - "fg": 480 - } - ] - }, - { - "id": "t_window_stained_blue", - "fg": 481, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "t_connection", - "fg": 482 - } - ] - }, - { - "id": "t_window_no_curtains", - "fg": 483, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "t_connection", - "fg": 484 - } - ] - }, - { - "id": "t_window_no_curtains_open", - "fg": 485, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "t_connection", - "fg": 486 - } - ] - }, - { - "id": "t_window_no_curtains_taped", - "fg": 487, - "rotates": false - }, - { - "id": [ - "t_window_taped", - "t_window_domestic_taped", - "t_window_alarm_taped" - ], - "fg": 488, - "rotates": false - }, - { - "id": "t_window_reinforced", - "fg": 489, - "rotates": false - }, - { - "id": "t_window_boarded", - "fg": 490, - "rotates": false - }, - { - "id": "t_window_enhanced", - "fg": 491, - "rotates": false - }, - { - "id": "t_window_reinforced_noglass", - "fg": 492, - "rotates": false - }, - { - "id": "t_window_boarded_noglass", - "fg": 493, - "rotates": false - }, - { - "id": "t_window_enhanced_noglass", - "fg": 494, - "rotates": false - }, - { - "id": "t_window_frame", - "fg": 495, - "rotates": false - }, - { - "id": [ - "t_m_frame", - "t_window_empty" - ], - "fg": 496, - "rotates": false - }, - { - "id": "t_curtains", - "fg": 497, - "rotates": false - }, - { - "id": [ - "vp_v_curtain", - "vp_aisle_curtain" - ], - "fg": 497, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": [ - "f_curtain", - "t_door_curtain_c" - ], - "fg": 498, - "rotates": false - }, - { - "id": [ - "f_curtain_open", - "t_door_curtain_o" - ], - "fg": 499, - "rotates": false - }, - { - "id": "t_glass_roof", - "fg": 500, - "rotates": false - }, - { - "id": [ - "t_door_o", - "t_door_lab_o", - "t_door_o_peep", - "t_door_gray_o", - "t_door_red_o", - "t_door_green_o", - "t_door_white_o", - "t_door_frame", - "t_door_lab_frame", - "t_door_gray_frame", - "t_door_red_frame", - "t_door_green_frame", - "t_door_white_frame" - ], - "fg": 501, - "rotates": false - }, - { - "id": [ - "t_door_c", - "t_door_lab_c", - "t_door_gray_c", - "t_door_red_c", - "t_door_green_c", - "t_door_white_c" - ], - "fg": 502, - "rotates": false - }, - { - "id": [ - "t_door_locked", - "t_door_locked_alarm", - "t_door_locked_interior" - ], - "fg": 503, - "rotates": false - }, - { - "id": "t_door_locked_peep", - "fg": 504, - "rotates": false - }, - { - "id": "t_door_c_peep", - "fg": 505, - "rotates": false - }, - { - "id": [ - "t_door_b", - "t_door_lab_b", - "t_door_b_peep", - "t_door_gray_b", - "t_door_red_b", - "t_door_green_b", - "t_door_white_b" - ], - "fg": 506, - "rotates": false - }, - { - "id": [ - "t_door_boarded_peep", - "t_door_boarded" - ], - "fg": 507, - "rotates": false - }, - { - "id": [ - "t_door_boarded_damaged_peep", - "t_door_boarded_damaged" - ], - "fg": 508, - "rotates": false - }, - { - "id": "t_door_makeshift_o", - "fg": 509, - "rotates": false - }, - { - "id": "t_door_makeshift_c", - "fg": 510, - "rotates": false - }, - { - "id": "t_rdoor_o", - "fg": 511, - "rotates": false - }, - { - "id": "t_rdoor_c", - "fg": 512, - "rotates": false - }, - { - "id": "t_rdoor_b", - "fg": 513, - "rotates": false - }, - { - "id": "t_rdoor_boarded", - "fg": 514, - "rotates": false - }, - { - "id": "t_rdoor_boarded_damaged", - "fg": 515, - "rotates": false - }, - { - "id": [ - "t_reinforced_door_glass_o", - "t_reinforced_door_glass_lab_o" - ], - "fg": 516, - "rotates": false - }, - { - "id": [ - "t_reinforced_door_glass_lab_c", - "t_reinforced_door_glass_c" - ], - "fg": 517, - "rotates": false - }, - { - "id": [ - "t_door_metal_o", - "t_door_metal_lab_o", - "t_door_metal_o_peep", - "t_mdoor_frame", - "t_mdoor_lab_frame" - ], - "fg": 518, - "rotates": false - }, - { - "id": [ - "t_door_metal_c", - "t_door_metal_lab_c" - ], - "fg": 519, - "rotates": false - }, - { - "id": [ - "t_door_metal_locked", - "t_door_metal_pickable" - ], - "fg": 520, - "rotates": false - }, - { - "id": "t_door_metal_c_peep", - "fg": 521, - "rotates": false - }, - { - "id": "t_iron_gate_c", - "fg": 522, - "rotates": false - }, - { - "id": "t_iron_gate_l", - "fg": 523, - "rotates": false - }, - { - "id": [ - "t_door_bar_o", - "t_iron_gate_o" - ], - "fg": 524, - "rotates": false - }, - { - "id": "t_door_bar_c", - "fg": 525, - "rotates": false - }, - { - "id": "t_door_bar_locked", - "fg": 526, - "rotates": false - }, - { - "id": "t_rootcellar", - "fg": 527, - "rotates": false - }, - { - "id": [ - "t_dock", - "t_sh_bridge" - ], - "fg": 528, - "rotates": false - }, - { - "id": "t_grate", - "fg": 529, - "rotates": false - }, - { - "id": "t_bridge", - "fg": 530, - "rotates": false - }, - { - "id": [ - "t_riverbridge_dp", - "t_pontoon_dp" - ], - "fg": 531, - "rotates": false - }, - { - "id": "t_sewage_pipe", - "fg": 532, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 533 - }, - { - "id": "corner", - "fg": 534 - }, - { - "id": "edge", - "fg": 535 - }, - { - "id": "end_piece", - "fg": 536 - }, - { - "id": "t_connection", - "fg": 537 - }, - { - "id": "unconnected", - "fg": 532 - } - ] - }, - { - "id": "t_missile", - "fg": 538, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 538 - }, - { - "id": "corner", - "fg": 539 - }, - { - "id": "edge", - "fg": 538 - }, - { - "id": "end_piece", - "fg": 538 - }, - { - "id": "t_connection", - "fg": 540 - }, - { - "id": "unconnected", - "fg": 538 - } - ] - }, - { - "id": "t_missile_exploded", - "fg": 155, - "rotates": false - }, - { - "id": "t_slide", - "fg": 541, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "edge", - "fg": 541 - }, - { - "id": "end_piece", - "fg": 542 - } - ] - }, - { - "id": "t_monkey_bars", - "fg": 543, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 543 - }, - { - "id": "corner", - "fg": 544 - }, - { - "id": "t_connection", - "fg": 545 - } - ] - }, - { - "id": "t_centrifuge", - "fg": 546, - "rotates": false - }, - { - "id": "t_cvdbody", - "fg": 547, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 548 - }, - { - "id": "corner", - "fg": 549 - }, - { - "id": "edge", - "fg": 550 - }, - { - "id": "end_piece", - "fg": 551 - }, - { - "id": "t_connection", - "fg": 552 - }, - { - "id": "unconnected", - "fg": 547 - } - ] - }, - { - "id": "t_generator_broken", - "fg": 553, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "corner", - "fg": 553 - }, - { - "id": "t_connection", - "fg": 554 - } - ] - }, - { - "id": "t_conveyor", - "fg": 555, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 555 - }, - { - "id": "corner", - "fg": 556 - }, - { - "id": "edge", - "fg": 555 - }, - { - "id": "end_piece", - "fg": 555 - }, - { - "id": "t_connection", - "fg": 557 - }, - { - "id": "unconnected", - "fg": 555 - } - ] - }, - { - "id": [ - "t_palisade_pulley", - "t_barndoor" - ], - "fg": 558, - "rotates": false - }, - { - "id": [ - "t_gates_mech_control", - "t_gates_control_concrete", - "t_gates_control_brick", - "t_gates_mech_control_lab", - "t_gates_control_concrete_lab", - "t_gates_control_brick_lab" - ], - "fg": 559, - "rotates": false - }, - { - "id": [ - "t_switch_even", - "t_gates_control_metal", - "t_gates_control_metal_lab" - ], - "fg": 560, - "rotates": false - }, - { - "id": "t_switch_gb", - "fg": 561, - "rotates": false - }, - { - "id": "t_switch_rb", - "fg": 562, - "rotates": false - }, - { - "id": "t_switch_rg", - "fg": 563, - "rotates": false - }, - { - "id": "t_machinery_light", - "fg": 564, - "rotates": false - }, - { - "id": "t_machinery_old", - "fg": 565, - "rotates": false - }, - { - "id": [ - "t_machinery_heavy", - "t_sewage_pump" - ], - "fg": 566, - "rotates": false - }, - { - "id": "t_machinery_electronic", - "fg": 567, - "rotates": false - }, - { - "id": "f_autodoc", - "fg": 568, - "rotates": false - }, - { - "id": "f_robotic_arm", - "fg": 569, - "rotates": false - }, - { - "id": "t_ind_assembler", - "fg": 570, - "rotates": false - }, - { - "id": "t_ind_drill", - "fg": 571, - "rotates": false - }, - { - "id": "t_ind_furnace", - "fg": 572, - "rotates": false - }, - { - "id": "t_ind_lathe", - "fg": 573, - "rotates": false - }, - { - "id": "t_ind_mixer", - "fg": 574, - "rotates": false - }, - { - "id": "t_ind_pipe", - "fg": 575, - "rotates": false - }, - { - "id": "t_ind_press", - "fg": 576, - "rotates": false - }, - { - "id": "t_elevator_control", - "fg": 577, - "rotates": false - }, - { - "id": "t_elevator_control_off", - "fg": 578, - "rotates": false - }, - { - "id": "t_diesel_pump", - "fg": 579, - "rotates": false - }, - { - "id": "t_gas_pump_a", - "fg": 580, - "rotates": false - }, - { - "id": "t_gas_pump", - "fg": 581, - "rotates": false - }, - { - "id": "t_diesel_pump_smashed", - "fg": 582, - "rotates": false - }, - { - "id": "t_gas_pump_smashed", - "fg": 583, - "rotates": false - }, - { - "id": "t_slot_machine", - "fg": 584, - "rotates": false - }, - { - "id": "t_atm", - "fg": 585, - "rotates": false - }, - { - "id": [ - "t_card_science", - "t_card_military" - ], - "fg": 586, - "rotates": false - }, - { - "id": "t_card_reader_broken", - "fg": 587, - "rotates": false - }, - { - "id": [ - "t_sliding_concrete_wall_control", - "f_aut_gas_console_o", - "electronics_controls", - "t_console_broken" - ], - "fg": 588, - "rotates": false - }, - { - "id": "f_home_furnace", - "fg": 589, - "rotates": false - }, - { - "id": "t_cvdmachine", - "fg": 590, - "rotates": false - }, - { - "id": [ - "t_radio_controls", - "t_containment_control", - "t_ins_bridge_control", - "t_jaildoor_control", - "t_outs_bridge_control", - "t_reinforced_glass_control" - ], - "fg": 591, - "rotates": false - }, - { - "id": [ - "f_aut_gas_console", - "vp_controls_electronic", - "t_console" - ], - "fg": 592, - "rotates": false - }, - { - "id": "t_radio_tower", - "fg": 593, - "rotates": false - }, - { - "id": "t_utility_light", - "fg": 594, - "rotates": false - }, - { - "id": [ - "t_support_l", - "t_little_column", - "t_column" - ], - "fg": 595, - "rotates": false - }, - { - "id": "t_column_halfway", - "fg": 596, - "rotates": true - }, - { - "id": "f_bookcase", - "fg": 597, - "rotates": false - }, - { - "id": [ - "t_secretdoor_bookcase_c", - "t_sliding_bookcase_c", - "t_sliding_bookcase_control", - "t_sliding_wall_control", - "t_decoy_bookcase" - ], - "fg": 598, - "rotates": false - }, - { - "id": "t_secretdoor_bookcase_o", - "fg": 599, - "rotates": false - }, - { - "id": [ - "f_locker", - "t_switchgear_s" - ], - "fg": 600, - "rotates": false - }, - { - "id": [ - "f_fume_hood", - "t_switchgear_l" - ], - "fg": 601, - "rotates": false - }, - { - "id": [ - "f_cupboard", - "t_sai_box" - ], - "fg": 602, - "rotates": false - }, - { - "id": [ - "f_oven", - "t_sai_box_damaged" - ], - "fg": 603, - "rotates": false - }, - { - "id": "t_station_disc", - "fg": 604, - "rotates": false - }, - { - "id": "t_current_trans", - "fg": 605, - "rotates": false - }, - { - "id": "t_oil_circ_brkr_l", - "fg": 606, - "rotates": false - }, - { - "id": [ - "t_potential_trans", - "t_oil_circ_brkr_s" - ], - "fg": 607, - "rotates": false - }, - { - "id": "t_milking_machine", - "fg": 608, - "rotates": false - }, - { - "id": "t_water_pump", - "fg": 609, - "rotates": false - }, - { - "id": "well_pump", - "fg": 610, - "rotates": false - }, - { - "id": "t_pedestal_wyrm", - "fg": 611, - "rotates": false - }, - { - "id": "tr_temple_flood", - "fg": 612, - "rotates": false - }, - { - "id": "t_pedestal_temple", - "fg": 613, - "rotates": false - }, - { - "id": "tr_temple_toggle", - "fg": 614, - "rotates": false - }, - { - "id": [ - "t_backboard_in", - "t_backboard" - ], - "fg": 615, - "rotates": false - }, - { - "id": "t_vat", - "fg": 616, - "rotates": false - }, - { - "id": "t_plut_generator", - "fg": 617, - "rotates": false - }, - { - "id": "t_nuclear_reactor", - "fg": 618, - "rotates": false - }, - { - "id": [ - "mon_hallu_mannequin", - "f_mannequin" - ], - "fg": 619, - "rotates": false - }, - { - "id": [ - "f_statue", - "t_sliding_brick_wall_control" - ], - "fg": 620, - "rotates": false - }, - { - "id": "f_target", - "fg": 621, - "rotates": false - }, - { - "id": "t_bulk_tank", - "fg": 622, - "rotates": false - }, - { - "id": "t_covered_well", - "fg": 623, - "rotates": false - }, - { - "id": "vp_external_tank", - "fg": 624, - "rotates": true - }, - { - "id": "t_gas_tank", - "fg": 625, - "rotates": false - }, - { - "id": [ - "55gal_drum", - "30gal_drum", - "keg", - "keg_steel" - ], - "fg": 626, - "rotates": false - }, - { - "id": [ - "wooden_barrel", - "f_wood_keg" - ], - "fg": 627, - "rotates": false - }, - { - "id": "vp_tank_barrel", - "fg": 627, - "rotates": true - }, - { - "id": "30gal_barrel", - "fg": 628, - "rotates": false - }, - { - "id": "f_forge_rock", - "fg": 629, - "rotates": false - }, - { - "id": "f_clay_kiln", - "fg": 630, - "rotates": false - }, - { - "id": [ - "broketent", - "largebroketent" - ], - "fg": 631, - "rotates": false - }, - { - "id": "damaged_shelter_kit", - "fg": 632, - "rotates": false - }, - { - "id": "t_improvised_shelter", - "fg": 633, - "rotates": false - }, - { - "id": "shelter_kit", - "fg": 634, - "rotates": false - }, - { - "id": [ - "tent_kit", - "large_tent_kit" - ], - "fg": 635, - "rotates": false - }, - { - "id": "f_skin_wall", - "fg": 634, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 636 - }, - { - "id": "corner", - "fg": 637 - }, - { - "id": "edge", - "fg": 638 - }, - { - "id": "end_piece", - "fg": 639 - }, - { - "id": "t_connection", - "fg": 640 - }, - { - "id": "unconnected", - "fg": 634 - } - ] - }, - { - "id": "f_skin_door", - "fg": 641, - "rotates": false - }, - { - "id": "f_skin_door_o", - "fg": 642, - "rotates": false - }, - { - "id": [ - "f_large_canvas_wall", - "f_canvas_wall" - ], - "fg": 635, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 643 - }, - { - "id": "corner", - "fg": 644 - }, - { - "id": "edge", - "fg": 645 - }, - { - "id": "end_piece", - "fg": 646 - }, - { - "id": "t_connection", - "fg": 647 - }, - { - "id": "unconnected", - "fg": 635 - } - ] - }, - { - "id": [ - "f_large_canvas_door", - "f_canvas_door" - ], - "fg": 648, - "rotates": false - }, - { - "id": [ - "f_large_canvas_door_o", - "f_canvas_door_o" - ], - "fg": 649, - "rotates": false - }, - { - "id": "t_leanto", - "fg": 650, - "rotates": false - }, - { - "id": "t_tarptent", - "fg": 651, - "rotates": false - }, - { - "id": "t_recycler", - "fg": 652, - "rotates": false - }, - { - "id": [ - "f_recycle_bin", - "f_dumpster" - ], - "fg": 653, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 654 - }, - { - "id": "corner", - "fg": 655 - }, - { - "id": "edge", - "fg": 656 - }, - { - "id": "end_piece", - "fg": 657 - }, - { - "id": "t_connection", - "fg": 658 - }, - { - "id": "unconnected", - "fg": 653 - } - ] - }, - { - "id": "f_pool_table", - "fg": 659, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "corner", - "fg": 660 - }, - { - "id": "t_connection", - "fg": 659 - } - ] - }, - { - "id": [ - "tr_cot", - "f_fiber_mat" - ], - "fg": 661, - "rotates": false - }, - { - "id": [ - "f_straw_bed", - "tr_fur_rollmat" - ], - "fg": 662, - "rotates": false - }, - { - "id": "tr_rollmat", - "fg": 663, - "rotates": false - }, - { - "id": "vp_bed", - "fg": 663, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "f_makeshift_bed", - "fg": 664, - "rotates": false - }, - { - "id": "f_bed", - "fg": 664, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 665 - }, - { - "id": "corner", - "fg": 666 - }, - { - "id": "edge", - "fg": 667 - }, - { - "id": "end_piece", - "fg": 668 - }, - { - "id": "t_connection", - "fg": 669 - }, - { - "id": "unconnected", - "fg": 664 - } - ] - }, - { - "id": "f_pillow_fort", - "fg": 670, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 671 - }, - { - "id": "corner", - "fg": [ - 672, - 673, - 674, - 675 - ] - }, - { - "id": "edge", - "fg": [ - 676, - 670, - 676, - 670 - ] - }, - { - "id": "end_piece", - "fg": [ - 677, - 670, - 678, - 670 - ] - }, - { - "id": "t_connection", - "fg": [ - 679, - 680, - 681, - 682 - ] - }, - { - "id": "unconnected", - "fg": 670 - } - ] - }, - { - "id": "f_counter", - "fg": 683, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 684 - }, - { - "id": "corner", - "fg": 685 - }, - { - "id": "edge", - "fg": 686 - }, - { - "id": "end_piece", - "fg": 687 - }, - { - "id": "t_connection", - "fg": 688 - }, - { - "id": "unconnected", - "fg": 683 - } - ] - }, - { - "id": "f_desk", - "fg": 689, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 690 - }, - { - "id": "corner", - "fg": 691 - }, - { - "id": "edge", - "fg": 692 - }, - { - "id": "end_piece", - "fg": 693 - }, - { - "id": "t_connection", - "fg": 694 - }, - { - "id": "unconnected", - "fg": 689 - } - ] - }, - { - "id": [ - "f_autodoc_couch", - "f_sofa" - ], - "fg": 695, - "rotates": false - }, - { - "id": "f_table", - "fg": 696, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 697 - }, - { - "id": "corner", - "fg": 698 - }, - { - "id": "edge", - "fg": 699 - }, - { - "id": "end_piece", - "fg": 700 - }, - { - "id": "t_connection", - "fg": 701 - }, - { - "id": "unconnected", - "fg": 696 - } - ] - }, - { - "id": "seat", - "fg": 702, - "rotates": false - }, - { - "id": [ - "vp_seat", - "vp_folding_seat", - "vp_reclining_seat" - ], - "fg": 702, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "vp_seat_wood", - "fg": 703, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 225 - } - ] - }, - { - "id": "f_tourist_table", - "fg": 704, - "rotates": false - }, - { - "id": "tourist_table", - "fg": 705, - "rotates": false - }, - { - "id": "f_shackle", - "fg": 706, - "rotates": false - }, - { - "id": "f_shower", - "fg": 707, - "rotates": false - }, - { - "id": "f_toilet", - "fg": 708, - "rotates": false - }, - { - "id": "f_birdbath", - "fg": 709, - "rotates": false - }, - { - "id": "f_sink", - "fg": 710, - "rotates": false - }, - { - "id": "f_brazier", - "fg": 711, - "rotates": false - }, - { - "id": "brazier", - "fg": 712, - "rotates": false - }, - { - "id": "bowl_pewter", - "fg": 713, - "rotates": false - }, - { - "id": "ceramic_bowl", - "fg": 714, - "rotates": false - }, - { - "id": "bowl_clay", - "fg": 715, - "rotates": false - }, - { - "id": "glass_bowl", - "fg": 716, - "rotates": false - }, - { - "id": "bowl_plastic", - "fg": 717, - "rotates": false - }, - { - "id": "f_bathtub", - "fg": 718, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 719 - }, - { - "id": "corner", - "fg": 720 - }, - { - "id": "edge", - "fg": 721 - }, - { - "id": "end_piece", - "fg": 722 - }, - { - "id": "t_connection", - "fg": 723 - }, - { - "id": "unconnected", - "fg": 718 - } - ] - }, - { - "id": "vp_blade_vertical", - "fg": 724, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 725 - } - ] - }, - { - "id": "tr_blade", - "fg": 724, - "rotates": true - }, - { - "id": "f_blade", - "fg": 726, - "rotates": false - }, - { - "id": [ - "f_cellphone_booster", - "f_TV_antenna", - "f_spike" - ], - "fg": 727, - "rotates": false - }, - { - "id": "f_vent_pipe", - "fg": 728, - "rotates": false - }, - { - "id": "canister_empty", - "fg": 729, - "rotates": false - }, - { - "id": "f_roof_turbine_vent", - "fg": 730, - "rotates": false - }, - { - "id": [ - "directional_antenna", - "f_small_satelitte_dish" - ], - "fg": 731, - "rotates": false - }, - { - "id": "f_chimney", - "fg": 732, - "rotates": false - }, - { - "id": [ - "reinforced_solar_panel", - "reinforced_solar_panel_v2" - ], - "fg": 733, - "rotates": false - }, - { - "id": [ - "solar_panel", - "solar_panel_v2", - "solar_panel_v3", - "f_solar_unit" - ], - "fg": 734, - "rotates": false - }, - { - "id": [ - "vp_reinforced_solar_panel", - "vp_reinforced_solar_panel_v2" - ], - "fg": 733, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 735 - } - ] - }, - { - "id": [ - "vp_solar_panel", - "vp_solar_panel_v2", - "vp_solar_panel_v3" - ], - "fg": 734, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 736 - } - ] - }, - { - "id": "f_egg_sackws", - "fg": 737, - "rotates": false - }, - { - "id": "mon_trapdoor_queen", - "fg": 738, - "rotates": false - }, - { - "id": [ - "f_egg_sackcs", - "mon_trapdoor_egg", - "f_egg_sackbw" - ], - "fg": 739, - "rotates": false - }, - { - "id": "f_egg_sacke", - "fg": 740, - "rotates": false - }, - { - "id": "f_boulder_large", - "fg": 741, - "rotates": false - }, - { - "id": "f_boulder_medium", - "fg": 742, - "rotates": false - }, - { - "id": "f_boulder_small", - "fg": 743, - "rotates": false - }, - { - "id": "t_border_rock", - "fg": 744, - "rotates": false - }, - { - "id": "f_cattails", - "fg": 745, - "rotates": false - }, - { - "id": "f_lilypad", - "fg": 746, - "rotates": false - }, - { - "id": "f_flower_tulip", - "fg": 747, - "rotates": false - }, - { - "id": "f_dandelion", - "fg": 748, - "rotates": false - }, - { - "id": "f_datura", - "fg": 749, - "rotates": false - }, - { - "id": "f_bluebell", - "fg": 750, - "rotates": false - }, - { - "id": "f_dahlia", - "fg": 751, - "rotates": false - }, - { - "id": "f_lily", - "fg": 752, - "rotates": false - }, - { - "id": "f_flower_marloss", - "fg": 753, - "rotates": false - }, - { - "id": "f_flower_fungal", - "fg": 754, - "rotates": false - }, - { - "id": "f_mutpoppy", - "fg": 755, - "rotates": false - }, - { - "id": "f_flower_spurge", - "fg": 756, - "rotates": false - }, - { - "id": "f_black_eyed_susan", - "fg": 757, - "rotates": false - }, - { - "id": "f_sunflower", - "fg": 758, - "rotates": false - }, - { - "id": "f_lotus", - "fg": 759, - "rotates": false - }, - { - "id": "f_chamomile", - "fg": 760, - "rotates": false - }, - { - "id": [ - "f_mutpoppy_season_winter", - "f_dandelion_season_winter", - "f_flower_spurge_season_winter", - "f_black_eyed_susan_season_winter", - "f_sunflower_season_winter", - "f_datura_season_winter", - "f_bluebell_season_winter", - "f_dahlia_season_winter", - "f_lily_season_winter", - "f_chamomile_season_winter", - "f_lotus_season_winter", - "f_flower_marloss_season_winter", - "f_flower_tulip_season_winter" - ], - "fg": 761, - "rotates": false - }, - { - "id": "f_plant_seed", - "fg": 762, - "rotates": false - }, - { - "id": "f_plant_seedling", - "fg": 763, - "rotates": false - }, - { - "id": "f_plant_mature", - "fg": 764, - "rotates": false - }, - { - "id": "f_plant_harvest", - "fg": 765, - "rotates": false - }, - { - "id": "f_indoor_plant_y", - "fg": 766, - "rotates": false - }, - { - "id": "f_indoor_plant", - "fg": 767, - "rotates": false - }, - { - "id": "f_hay", - "fg": 768, - "rotates": false - }, - { - "id": "f_fungal_clump", - "fg": 769, - "rotates": false - }, - { - "id": "f_fungal_mass", - "fg": 770, - "rotates": false - }, - { - "id": "f_woodstove", - "fg": 771, - "rotates": false - }, - { - "id": [ - "f_kiln_metal_empty", - "fuel_bunker", - "kiln", - "brick_kiln", - "kilnrig", - "char_kiln", - "vp_veh_kiln", - "vp_fuel_bunker", - "f_kiln_empty" - ], - "fg": 772, - "rotates": false - }, - { - "id": [ - "f_forge", - "char_forge" - ], - "fg": 773, - "rotates": false - }, - { - "id": [ - "f_kiln_metal_full", - "kiln_full", - "f_kiln_full" - ], - "fg": 774, - "rotates": false - }, - { - "id": "kiln_done", - "fg": 775, - "rotates": false - }, - { - "id": "kiln_lit", - "fg": 776, - "rotates": false - }, - { - "id": [ - "anvil", - "f_anvil" - ], - "fg": 777, - "rotates": false - }, - { - "id": "f_fireplace", - "fg": 778, - "rotates": false - }, - { - "id": "f_firering", - "fg": 779, - "rotates": false - }, - { - "id": "metal_butcher_rack", - "fg": 780, - "rotates": false - }, - { - "id": "f_metal_butcher_rack", - "fg": 781, - "rotates": false - }, - { - "id": "f_butcher_rack", - "fg": 782, - "rotates": false - }, - { - "id": "f_smoking_rack", - "fg": 783, - "rotates": false - }, - { - "id": [ - "f_utility_shelf", - "f_rack" - ], - "fg": 784, - "rotates": false - }, - { - "id": [ - "f_filing_cabinet", - "f_file_cabinet" - ], - "fg": 785, - "rotates": false - }, - { - "id": "f_glass_cabinet", - "fg": 786, - "rotates": false - }, - { - "id": "f_piano", - "fg": 787, - "rotates": false - }, - { - "id": "f_wardrobe", - "fg": 788, - "rotates": false - }, - { - "id": "f_dresser", - "fg": 789, - "rotates": false - }, - { - "id": "f_rack_coat", - "fg": 790, - "rotates": false - }, - { - "id": [ - "f_sign", - "f_bulletin" - ], - "fg": 791, - "rotates": false - }, - { - "id": "f_barricade_road", - "fg": 792, - "rotates": false - }, - { - "id": "f_lane", - "fg": 793, - "rotates": true - }, - { - "id": "f_crate_c", - "fg": 794, - "rotates": false - }, - { - "id": "f_crate_o", - "fg": 795, - "rotates": false - }, - { - "id": "f_bench", - "fg": 796, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "t_connection", - "fg": 797 - } - ] - }, - { - "id": [ - "f_stool", - "f_chair" - ], - "fg": 798, - "rotates": false - }, - { - "id": "f_armchair", - "fg": 799, - "rotates": false - }, - { - "id": "f_coffin_c", - "fg": 800, - "rotates": false - }, - { - "id": "f_coffin_o", - "fg": 801, - "rotates": false - }, - { - "id": "f_slab", - "fg": 802, - "rotates": false - }, - { - "id": "f_grave_head", - "fg": 803, - "rotates": false - }, - { - "id": "f_grave_monument", - "fg": 804, - "rotates": false - }, - { - "id": "f_grave_stone", - "fg": 805, - "rotates": false - }, - { - "id": "f_grave_stone_old", - "fg": 806, - "rotates": false - }, - { - "id": "f_mailbox", - "fg": 807, - "rotates": false - }, - { - "id": "f_air_conditioner", - "fg": 808, - "rotates": false - }, - { - "id": "f_water_heater", - "fg": 809, - "rotates": false - }, - { - "id": "f_chemical_mixer", - "fg": 810, - "rotates": false - }, - { - "id": "vp_washing_machine", - "fg": 811, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 812 - } - ] - }, - { - "id": "washing_machine", - "fg": 811, - "rotates": false - }, - { - "id": "f_washer", - "fg": 813, - "rotates": false - }, - { - "id": "f_dryer", - "fg": 814, - "rotates": false - }, - { - "id": "f_fridge", - "fg": 815, - "rotates": false - }, - { - "id": "f_glass_fridge", - "fg": 816, - "rotates": false - }, - { - "id": "f_bigmirror", - "fg": 817, - "rotates": false - }, - { - "id": "f_bigmirror_b", - "fg": 818, - "rotates": false - }, - { - "id": "f_arcade_machine", - "fg": 819, - "rotates": false - }, - { - "id": "f_pinball_machine", - "fg": 820, - "rotates": false - }, - { - "id": "f_ball_mach", - "fg": 689, - "rotates": false - }, - { - "id": "f_ergometer", - "fg": 821, - "rotates": false - }, - { - "id": "f_treadmill", - "fg": 822, - "rotates": false - }, - { - "id": "f_exercise", - "fg": 823, - "rotates": false - }, - { - "id": "f_floor_canvas", - "fg": 824, - "rotates": false - }, - { - "id": "f_vending_reinforced", - "fg": 825, - "rotates": false - }, - { - "id": "f_vending_c", - "fg": 826, - "rotates": false - }, - { - "id": "f_vending_o", - "fg": 827, - "rotates": false - }, - { - "id": "f_displaycase", - "fg": 828, - "rotates": false - }, - { - "id": "f_displaycase_b", - "fg": 829, - "rotates": false - }, - { - "id": [ - "still", - "f_still" - ], - "fg": 830, - "rotates": false - }, - { - "id": [ - "f_gun_safe_el", - "f_gunsafe_ml", - "f_safe_c" - ], - "fg": 831, - "rotates": false - }, - { - "id": [ - "f_safe_l", - "f_gunsafe_mj" - ], - "fg": 832, - "rotates": false - }, - { - "id": "f_safe_o", - "fg": 833, - "rotates": false - }, - { - "id": "f_trashcan", - "fg": 834, - "rotates": false - }, - { - "id": "f_fvat_empty", - "fg": 835, - "rotates": false - }, - { - "id": "f_fvat_full", - "fg": 836, - "rotates": false - }, - { - "id": "f_dive_block", - "fg": 837, - "rotates": false - }, - { - "id": "telepad", - "fg": 838, - "rotates": false - }, - { - "id": "tr_telepad", - "fg": 839, - "rotates": false - }, - { - "id": "tr_dissector", - "fg": 840, - "rotates": false - }, - { - "id": [ - "tr_landmine_buried", - "tr_beartrap_buried" - ], - "fg": 841, - "rotates": false - }, - { - "id": "tr_landmine", - "fg": 842, - "rotates": false - }, - { - "id": "landmine", - "fg": 843, - "rotates": false - }, - { - "id": "tr_boobytrap", - "fg": 844, - "rotates": false - }, - { - "id": "boobytrap", - "fg": 845, - "rotates": false - }, - { - "id": "tr_bubblewrap", - "fg": 846, - "rotates": false - }, - { - "id": "bubblewrap", - "fg": 847, - "rotates": false - }, - { - "id": [ - "tr_snake", - "tr_glow", - "tr_hum", - "tr_shadow", - "fd_push_items", - "tr_drain" - ], - "fg": 848, - "rotates": false - }, - { - "id": "tr_beartrap", - "fg": 849, - "rotates": false - }, - { - "id": "beartrap", - "fg": 850, - "rotates": false - }, - { - "id": [ - "caltrops", - "tr_caltrops" - ], - "fg": 851, - "rotates": false - }, - { - "id": "blade_trap", - "fg": 852, - "rotates": false - }, - { - "id": [ - "tr_light_snare", - "tr_heavy_snare", - "tr_snare" - ], - "fg": 853, - "rotates": false - }, - { - "id": [ - "heavy_snare_kit", - "light_snare_kit" - ], - "fg": 854, - "rotates": false - }, - { - "id": "snare_trigger", - "fg": 855, - "rotates": false - }, - { - "id": "tr_crossbow", - "fg": 856, - "rotates": false - }, - { - "id": "crossbow_trap", - "fg": 857, - "rotates": false - }, - { - "id": "tr_nailboard", - "fg": 858, - "rotates": false - }, - { - "id": "board_trap", - "fg": 859, - "rotates": false - }, - { - "id": [ - "tr_shotgun_1", - "tr_shotgun_2" - ], - "fg": 860, - "rotates": false - }, - { - "id": "shotgun_trap", - "fg": 861, - "rotates": false - }, - { - "id": "tr_tripwire", - "fg": 862, - "rotates": false - }, - { - "id": "tripwire", - "fg": 863, - "rotates": false - }, - { - "id": [ - "mag_pistol", - "recipe_caseless", - "recipe_augs", - "recipe_mil_augs", - "textbook_anarch", - "decoy_anarch", - "recipe_elfa", - "decoy_elfa", - "mag_smg", - "novel_pulp", - "novel_satire", - "guidebook", - "holybook_bible2", - "holybook_quran", - "holybook_hadith", - "holybook_tanakh", - "holybook_bible3", - "scots_cookbook", - "holybook_kojiki", - "holybook_havamal" - ], - "fg": 864, - "rotates": false - }, - { - "id": [ - "novel_thriller", - "novel_sports", - "fairy_tales", - "holybook_talmud", - "holybook_tripitaka", - "holybook_pastafarian", - "holybook_slack", - "holybook_kallisti", - "manual_karate", - "manual_aikido", - "manual_judo", - "manual_tai_chi", - "manual_capoeira", - "manual_krav_maga", - "manual_muay_thai", - "manual_ninjutsu", - "manual_taekwondo", - "manual_zui_quan", - "manual_crane", - "manual_dragon", - "manual_leopard", - "manual_tiger", - "manual_snake", - "manual_centipede", - "manual_scorpion", - "manual_toad", - "manual_lizard", - "manual_venom_snake" - ], - "fg": 865, - "rotates": false - }, - { - "id": "abdul_necro", - "fg": 866, - "rotates": false - }, - { - "id": [ - "mag_cutting", - "mag_melee", - "manual_melee", - "mag_stabbing", - "news_regional", - "novel_crime2", - "novel_war2" - ], - "fg": 867, - "rotates": false - }, - { - "id": [ - "mag_mechanics", - "textbook_gaswarfare", - "recipe_mininuke_launch", - "recipe_lab_elec", - "phonebook", - "mag_unarmed", - "mag_launcher", - "textbook_speech", - "novel_buddy", - "essay_book", - "101_carpentry", - "radio_book", - "adv_chemistry", - "carpentry_book", - "manual_fabrication", - "textbook_weapwest", - "textbook_fireman", - "holybook_vedas", - "holybook_sutras", - "mag_animecon" - ], - "fg": 868, - "rotates": false - }, - { - "id": "book_asgard", - "fg": 869, - "rotates": false - }, - { - "id": [ - "photo_album", - "recipe_bullets", - "recipe_arrows", - "recipe_bows", - "modern_tanner", - "atomic_survival", - "trappers_companion", - "howto_computer", - "manual_launcher", - "manual_archery", - "novel_adventure", - "novel_war", - "novel_western", - "pocket_firstaid", - "pocket_firearms", - "tailor_portfolio", - "family_cookbook" - ], - "fg": 870, - "rotates": false - }, - { - "id": "manual_pankration", - "fg": 871, - "rotates": false - }, - { - "id": "manual_swordsmanship", - "fg": 872, - "rotates": false - }, - { - "id": [ - "recipe_alpha", - "recipe_chimera", - "recipe_serum", - "recipe_creepy", - "recipe_animal", - "recipe_maiar", - "recipe_labchem", - "recipe_raptor", - "holybook_bible1", - "cookbook_sushi", - "holybook_granth", - "holybook_scientology" - ], - "fg": 873, - "rotates": false - }, - { - "id": [ - "textbook_launcher", - "mag_computer", - "mag_survival", - "fun_survival", - "manual_bashing", - "manual_cutting", - "mag_rifle", - "manual_rifle", - "mag_shotgun", - "manual_shotgun", - "textbook_survival", - "survival_book", - "textbook_traps", - "manual_gun", - "book_archery", - "manual_throw", - "manual_swimming", - "novel_coa", - "novel_samurai", - "tall_tales", - "recipe_fauxfur", - "classic_literature", - "collector_book", - "manual_brawl", - "manual_knives", - "manual_stabbing", - "manual_mechanics", - "manual_survival", - "manual_speech", - "manual_business", - "manual_first_aid", - "pocket_survival", - "manual_computers", - "cookbook", - "cookbook_human", - "cookbook_italian", - "manual_electronics", - "manual_tailor", - "textbook_tailor", - "howto_traps", - "manual_traps", - "manual_carpentry", - "manual_driving", - "textbook_fabrication", - "manual_niten", - "manual_boxing", - "manual_eskrima", - "manual_fencing", - "manual_silat", - "manual_sojutsu" - ], - "fg": 874, - "rotates": false - }, - { - "id": [ - "jewelry_book", - "textbook_weapeast", - "recipe_melee", - "recipe_lab_cvd", - "glassblowing_book", - "commune_prospectus", - "necropolis_freq" - ], - "fg": 875, - "rotates": false - }, - { - "id": "textbook_atomic", - "fg": 876, - "rotates": false - }, - { - "id": [ - "advanced_electronics", - "mag_dude", - "textbook_computers", - "computer_science", - "repeater_mod_guide", - "textbook_business", - "textbook_mechanics", - "book_icef", - "textbook_chemistry", - "textbook_carpentry", - "SICP", - "textbook_robots", - "record_weather", - "record_patient", - "record_accounting", - "priest_diary", - "visions_solitude", - "textbook_armschina", - "textbook_biodiesel", - "textbook_armwest", - "holybook_mormon" - ], - "fg": 877, - "rotates": false - }, - { - "id": "dnd_handbook", - "fg": 878, - "rotates": false - }, - { - "id": [ - "manual_smg", - "novel_romance", - "novel_spy", - "novel_scifi", - "novel_drama", - "novel_swash", - "novel_fantasy", - "novel_mystery", - "novel_horror", - "novel_tragedy", - "ZSG", - "textbook_armeast", - "brewing_cookbook" - ], - "fg": 879, - "rotates": false - }, - { - "id": [ - "mag_porn", - "mag_traps", - "mag_electronics", - "mag_bashing", - "mag_tv", - "mag_news", - "mag_cars", - "mag_cooking", - "mag_glam", - "mag_beauty", - "mag_carpentry", - "mag_guns", - "mag_archery", - "mag_gaming", - "mag_comic", - "mag_firstaid", - "mag_dodge", - "mag_throwing", - "mag_swimming", - "novel_road", - "child_book", - "novel_erotic", - "poetry_book", - "plays_book", - "mag_tailor", - "mag_fabrication", - "mag_fieldrepair", - "manual_dodge_kid" - ], - "fg": 880, - "rotates": false - }, - { - "id": [ - "manual_pistol", - "textbook_computer", - "textbook_firstaid", - "booklet_firstaid", - "manual_dodge", - "novel_crime", - "novel_experimental", - "philosophy_book", - "story_book", - "textbook_electronics", - "emergency_book", - "welding_book", - "recipe_medicalmut", - "holybook_upanishads", - "novel_coa2", - "mag_barter" - ], - "fg": 881, - "rotates": false - }, - { - "id": [ - "recipe_atomic_battery", - "paper", - "sarcophagus_access_code", - "flyer", - "survnote", - "file", - "note", - "newest_newspaper", - "many_years_old_newspaper", - "years_old_newspaper", - "one_year_old_newspaper", - "months_old_newspaper", - "weeks_old_newspaper", - "necropolis_leaflet", - "black_box_transcript" - ], - "fg": 882, - "rotates": false - }, - { - "id": [ - "soup_fish", - "soup_chicken", - "soup_mushroom", - "soup_dumplings", - "protein_drink", - "hflesh_drink", - "spider_steak_soup", - "oxygen" - ], - "fg": 883, - "rotates": false - }, - { - "id": [ - "V8", - "wine_cabernet", - "wine_noir", - "bum_wine", - "drink_kalimotxo", - "blood", - "mutagen_jabberblood", - "curry_veggy", - "curry_meat", - "soup_tomato", - "brew_bum_wine", - "taint_tornado", - "mixed_alcohol_strong", - "oxyacetylene" - ], - "fg": 884, - "rotates": false - }, - { - "id": [ - "cooking_oil", - "cooking_oil2", - "protein_shake", - "hflesh_shake_fortified", - "hflesh_shake", - "mead", - "brew_mead", - "dandelion_wine", - "brew_dandelion_wine", - "dandelion_tea", - "drink_beeknees", - "drink_wsour", - "honey_gold", - "mugwort_oil", - "thyme_oil", - "protein_shake_fortified", - "lemonade", - "lamp_oil" - ], - "fg": 885, - "rotates": false - }, - { - "id": [ - "wine_chardonnay", - "creamsoda", - "lemonlime", - "bee_balm_tea", - "vinegar", - "brew_vinegar", - "gasoline", - "diesel", - "gas_fungicidal", - "wine_riesling" - ], - "fg": 886, - "rotates": false - }, - { - "id": [ - "apple_cider", - "energy_drink_atomic", - "colamdew", - "drink_wild_apple", - "pine_tea" - ], - "fg": 887, - "rotates": false - }, - { - "id": [ - "drink_boozeberry", - "maple_sap", - "wash_rum", - "wash_vodka", - "cattail_jelly" - ], - "fg": 888, - "rotates": false - }, - { - "id": [ - "energy_drink", - "poppysyrup", - "iv_purifier", - "purple_drink", - "cranberry_juice", - "pepto" - ], - "fg": 889, - "rotates": false - }, - { - "id": [ - "milk", - "soup_cullenskink", - "brew_milk_curdled", - "milk_curdled", - "eggnog", - "eggnog_spiked" - ], - "fg": 890, - "rotates": false - }, - { - "id": [ - "mutagen", - "mutagen_plant", - "mutagen_insect", - "mutagen_spider", - "mutagen_slime", - "mutagen_fish", - "mutagen_mouse", - "mutagen_rat", - "mutagen_beast", - "mutagen_cattle", - "mutagen_cephalopod", - "mutagen_bird", - "mutagen_lizard", - "mutagen_troglobite", - "mutagen_medical", - "mutagen_chimera", - "mutagen_alpha", - "mutagen_ursine", - "mutagen_feline", - "mutagen_lupine", - "mutagen_elfa", - "mutagen_raptor", - "pine_wine" - ], - "fg": 891, - "rotates": false - }, - { - "id": [ - "oj", - "juice", - "orangesoda", - "triple_sec", - "drink_screwdriver" - ], - "fg": 892, - "rotates": false - }, - { - "id": [ - "purifier", - "crispycran", - "drink_strawberry_surprise", - "fruit_wine", - "brew_fruit_wine", - "brandy", - "mixed_alcohol_weak", - "sports_drink", - "napalm" - ], - "fg": 893, - "rotates": false - }, - { - "id": [ - "sewage", - "water_sewage", - "cola", - "rootbeer", - "spezi", - "drink_hobo", - "broth", - "broth_bone", - "broth_human", - "chai_tea", - "hickory_nut_ambrosia", - "soup_meat", - "soup_woods", - "soup_human", - "whiskey", - "single_malt_whiskey", - "irish_coffee", - "drink_rumcola", - "drink_sewerbrew", - "rum", - "tequila", - "long_island", - "beer", - "european_pilsner", - "pale_ale", - "india_pale_ale", - "stout", - "belgian_ale", - "imperial_stout", - "syrup", - "coffee_syrup", - "brew_whiskey", - "hb_beer", - "brew_hb_beer", - "moonshine", - "brew_moonshine", - "molasses", - "tea", - "coffee", - "atomic_coffee", - "cola_meth", - "beet_syrup", - "soysauce", - "milk_coffee", - "milk_tea", - "tea_bark", - "hot_chocolate", - "mex_chocolate", - "wash_moonshine", - "wash_whiskey", - "choc_drink" - ], - "fg": 894, - "rotates": false - }, - { - "id": [ - "soup_veggy", - "herbal_tea", - "iv_mutagen", - "iv_mutagen_plant", - "iv_mutagen_insect", - "iv_mutagen_spider", - "iv_mutagen_slime", - "iv_mutagen_fish", - "iv_mutagen_mouse", - "iv_mutagen_rat", - "iv_mutagen_beast", - "iv_mutagen_ursine", - "iv_mutagen_feline", - "iv_mutagen_lupine", - "iv_mutagen_cattle", - "iv_mutagen_cephalopod", - "iv_mutagen_bird", - "iv_mutagen_lizard", - "iv_mutagen_troglobite", - "iv_mutagen_alpha", - "iv_mutagen_medical", - "iv_mutagen_chimera", - "iv_mutagen_elfa", - "iv_mutagen_raptor", - "brew_pine_wine", - "plut_slurry", - "plut_slurry_dense", - "gas_chloramine" - ], - "fg": 895, - "rotates": false - }, - { - "id": [ - "water", - "water_clean", - "water_mineral", - "saline", - "salt_water", - "sweet_water", - "chem_DMSO", - "chem_chloroform", - "chem_phenol", - "chem_glycerol", - "chem_hydrogen_peroxide", - "ether", - "vodka", - "gin", - "brew_rum", - "brew_vodka", - "bleach", - "ammonia", - "fertilizer_liquid", - "water_acid", - "water_acid_weak", - "acid", - "kompot", - "disinfectant", - "lye", - "water_smoke", - "chem_methanol", - "chem_ethanol", - "denat_alcohol", - "chem_acetic_acid", - "chem_acetone", - "chem_hydrogen_peroxide_conc", - "chem_nitric_acid", - "chem_sulphuric_acid", - "chem_formaldehyde" - ], - "fg": 896, - "rotates": false - }, - { - "id": [ - "mintpatties", - "basketball", - "coconut" - ], - "fg": 897, - "rotates": false - }, - { - "id": [ - "grapefruit", - "irradiated_grapefruit", - "honey_ant" - ], - "fg": 898, - "rotates": false - }, - { - "id": [ - "melon", - "irradiated_melon", - "cotton_boll", - "egg_locust" - ], - "fg": 899, - "rotates": false - }, - { - "id": [ - "onion", - "irradiated_onion" - ], - "fg": 900, - "rotates": false - }, - { - "id": [ - "orange", - "irradiated_orange" - ], - "fg": 901, - "rotates": false - }, - { - "id": [ - "peach", - "irradiated_peach" - ], - "fg": 902, - "rotates": false - }, - { - "id": [ - "razorclaw_roe", - "egg_fish" - ], - "fg": 903, - "rotates": false - }, - { - "id": [ - "spider_egg", - "cotton_ball" - ], - "fg": 904, - "rotates": false - }, - { - "id": "pinecone", - "fg": 905, - "rotates": false - }, - { - "id": "marloss_seed", - "fg": 906, - "rotates": false - }, - { - "id": "garlic", - "fg": 907, - "rotates": false - }, - { - "id": [ - "boiled_egg", - "egg_reptile", - "egg_wasp", - "ant_egg" - ], - "fg": 908, - "rotates": false - }, - { - "id": [ - "lemon", - "irradiated_lemon" - ], - "fg": 909, - "rotates": false - }, - { - "id": "potato_baked", - "fg": 910, - "rotates": false - }, - { - "id": [ - "potato", - "irradiated_potato", - "kiwi", - "irradiated_kiwi", - "egg_bird" - ], - "fg": 911, - "rotates": false - }, - { - "id": [ - "watermelon", - "irradiated_watermelon", - "tool_rocket_candy", - "tool_rocket_candy_act" - ], - "fg": 912, - "rotates": false - }, - { - "id": [ - "irradiated_mango", - "mango" - ], - "fg": 913, - "rotates": false - }, - { - "id": [ - "papaya", - "irradiated_papaya" - ], - "fg": 914, - "rotates": false - }, - { - "id": [ - "irradiated_pomegranate", - "pomegranate" - ], - "fg": 915, - "rotates": false - }, - { - "id": [ - "irradiated_tomato", - "tomato" - ], - "fg": 916, - "rotates": false - }, - { - "id": [ - "irradiated_apple", - "apple" - ], - "fg": 917, - "rotates": false - }, - { - "id": "mycus_fruit", - "fg": 918, - "rotates": false - }, - { - "id": [ - "irradiated_apricot", - "apricot" - ], - "fg": 919, - "rotates": false - }, - { - "id": "marloss_berry", - "fg": 920, - "rotates": false - }, - { - "id": [ - "irradiated_pear", - "pear" - ], - "fg": 921, - "rotates": false - }, - { - "id": [ - "irradiated_pumpkin", - "pumpkin" - ], - "fg": 922, - "rotates": false - }, - { - "id": [ - "irradiated_cabbage", - "cabbage" - ], - "fg": 923, - "rotates": false - }, - { - "id": [ - "lettuce", - "irradiated_lettuce" - ], - "fg": 924, - "rotates": false - }, - { - "id": [ - "coal_lump", - "coal" - ], - "fg": 925, - "rotates": false - }, - { - "id": [ - "dandelion_fried", - "sunflower", - "spurge_flower", - "black_eyed_susan_flower", - "raw_dandelion" - ], - "fg": 926, - "rotates": false - }, - { - "id": [ - "bee_balm", - "lily_flower", - "lotus_flower" - ], - "fg": 927, - "rotates": false - }, - { - "id": [ - "poppy_flower", - "tulip_flower" - ], - "fg": 928, - "rotates": false - }, - { - "id": "bluebell_flower", - "fg": 929, - "rotates": false - }, - { - "id": "dahlia_flower", - "fg": 930, - "rotates": false - }, - { - "id": [ - "small_charcoal", - "small_coal" - ], - "fg": 931, - "rotates": false - }, - { - "id": "steel_chunk", - "fg": 932, - "rotates": false - }, - { - "id": "plant_sac", - "fg": 933, - "rotates": false - }, - { - "id": [ - "seed_mushroom_morel", - "fungal_seeds", - "seed_mushroom" - ], - "fg": 934, - "rotates": false - }, - { - "id": [ - "blueberries", - "irradiated_blueberries", - "blackberries", - "irradiated_blackberries" - ], - "fg": 935, - "rotates": false - }, - { - "id": [ - "kernels", - "seed_corn" - ], - "fg": 936, - "rotates": false - }, - { - "id": [ - "seed_wheat", - "seed_barley", - "seed_sugar_beet", - "seed_cotton_boll", - "seed_tomato", - "dry_beans", - "beans_cooked", - "pelmeni", - "seed_carrot", - "seed_lettuce", - "oats", - "seed_celery", - "seed_oats", - "seed_cucumber", - "seed_zucchini", - "seed_potato_raw", - "seed_bee_balm", - "seed_blackberries", - "seed_buckwheat", - "seed_canola", - "seed_cranberries", - "seed_dogbane", - "seed_mugwort", - "seed_raspberries", - "seed_raw_dandelion", - "seed_thyme", - "seed_wild_herbs", - "seed_pumpkin", - "macaroni_cooked", - "ravioli", - "mre_ravioli", - "seed_weed", - "seed_chili_pepper" - ], - "fg": 937, - "rotates": false - }, - { - "id": [ - "veggy", - "veggy_wild" - ], - "fg": 938, - "rotates": false - }, - { - "id": [ - "veggy_cooked", - "veggy_wild_cooked", - "choco_coffee_beans", - "maltballs", - "acorns", - "datura_seed", - "coffee_bean", - "roasted_coffee_bean", - "seed_broccoli", - "raw_beans", - "hickory_nut_roasted", - "hickory_nut_unshelled", - "seed_cabbage", - "seed_sunflower", - "macaroni_raw", - "seed_onion", - "mre_veggy", - "hickory_nut" - ], - "fg": 939, - "rotates": false - }, - { - "id": "veggy_tainted", - "fg": 940, - "rotates": false - }, - { - "id": [ - "candy2", - "candy3", - "neccowafers", - "gummy_vitamins", - "maple_candy", - "candy" - ], - "fg": 941, - "rotates": false - }, - { - "id": [ - "irradiated_cranberries", - "seed_strawberries", - "cranberries" - ], - "fg": 942, - "rotates": false - }, - { - "id": [ - "cherries", - "irradiated_cherries", - "raspberries", - "irradiated_raspberries" - ], - "fg": 943, - "rotates": false - }, - { - "id": "ruined_chunks", - "fg": 944, - "rotates": false - }, - { - "id": [ - "plums", - "irradiated_plums" - ], - "fg": 945, - "rotates": false - }, - { - "id": "seed_blueberries", - "fg": 946, - "rotates": false - }, - { - "id": [ - "can_coconut", - "yoghurt", - "pudding", - "can_chicken", - "horseradish", - "con_milk", - "flour", - "sugar", - "salt", - "meal_bone", - "meal_bone_tainted", - "starch", - "mayonnaise" - ], - "fg": 947, - "rotates": false - }, - { - "id": "sugar_fried", - "fg": 948, - "rotates": false - }, - { - "id": "fungicide", - "fg": 949, - "rotates": false - }, - { - "id": "meal_chitin_piece", - "fg": 950, - "rotates": false - }, - { - "id": [ - "mustard", - "honey_bottled", - "marloss_gel" - ], - "fg": 951, - "rotates": false - }, - { - "id": [ - "sauce_pesto", - "seasoning_italian", - "tea_raw", - "fertilizer" - ], - "fg": 952, - "rotates": false - }, - { - "id": [ - "sauce_red", - "ketchup", - "strawberries_cooked", - "fruit_cooked", - "jam_fruit" - ], - "fg": 953, - "rotates": false - }, - { - "id": "slime_scrap", - "fg": 954, - "rotates": false - }, - { - "id": "blueberries_cooked", - "fg": 955, - "rotates": false - }, - { - "id": "fd_blood", - "fg": 956, - "rotates": false - }, - { - "id": "fd_blood_veggy", - "fg": 957, - "rotates": false - }, - { - "id": [ - "fd_blood_invertebrate", - "fd_gibs_invertebrate" - ], - "fg": 958, - "rotates": false - }, - { - "id": [ - "fd_blood_insect", - "fd_gibs_insect" - ], - "fg": 959, - "rotates": false - }, - { - "id": "fd_gibs_flesh", - "fg": 960, - "rotates": false - }, - { - "id": [ - "feces_dog", - "feces_cow", - "feces_manure" - ], - "fg": 961, - "rotates": false - }, - { - "id": "feces_bird", - "fg": 962, - "rotates": false - }, - { - "id": [ - "pepper", - "can_sardine", - "can_herring", - "gunpowder", - "magnesium", - "oxy_powder", - "material_cement", - "chem_aluminium_powder", - "chem_black_powder", - "chem_carbide", - "chem_rocket_fuel", - "chem_thermite", - "chem_zinc_powder", - "incendiary", - "charcoal", - "material_sand", - "ash" - ], - "fg": 963, - "rotates": false - }, - { - "id": [ - "can_clams", - "can_chowder", - "rehydrated_fish", - "milk_powder", - "dry_rice", - "rice_cooked", - "beansnrice", - "yeast", - "bfipowder", - "morphine", - "sushi_rice", - "coke", - "meth", - "poppy_sleep", - "poppy_pain", - "lye_powder", - "detergent", - "chem_aluminium_sulphate", - "chem_ammonium_nitrate", - "chem_saltpetre", - "chem_rdx", - "material_quicklime", - "chem_hmtd" - ], - "fg": 964, - "rotates": false - }, - { - "id": [ - "can_beans", - "granola", - "macaroni_helper", - "hobo_helper", - "pork_beans", - "peanutbutter", - "mushroom_cooked", - "deluxe_beans", - "deluxe_veggy_beans", - "deluxe_beansnrice", - "deluxe_veggy_beansnrice", - "acorns_cooked", - "buckwheat", - "buckwheat_cooked", - "heroin", - "tobacco", - "coffee_raw", - "feces_roach", - "material_soil", - "dogfood", - "f_woodchips" - ], - "fg": 965, - "rotates": false - }, - { - "id": [ - "can_corn", - "can_pineapple", - "fertilizer_commercial", - "lemonade_powder", - "powder_eggs", - "cornmeal", - "deluxe_rice", - "deluxe_veggy_rice", - "can_cheese", - "chem_sulphur" - ], - "fg": 966, - "rotates": false - }, - { - "id": [ - "cooked_pumpkin", - "dry_mushroom", - "dry_mushroom_magic" - ], - "fg": 967, - "rotates": false - }, - { - "id": [ - "crack", - "dry_fish", - "oatmeal", - "quikclot", - "protein_powder", - "hflesh_powder", - "seasoning_salt", - "pine_nuts", - "cinnamon", - "fried_seeds", - "sauerkraut", - "sauerkraut_onions" - ], - "fg": 968, - "rotates": false - }, - { - "id": [ - "chilly-p", - "curry_powder", - "can_tomato", - "meat_salted", - "hflesh_salted" - ], - "fg": 969, - "rotates": false - }, - { - "id": "dry_fruit", - "fg": 970, - "rotates": false - }, - { - "id": [ - "dry_meat", - "dry_hflesh" - ], - "fg": 971, - "rotates": false - }, - { - "id": [ - "dry_meat_tainted", - "dry_veggy_tainted" - ], - "fg": 972, - "rotates": false - }, - { - "id": [ - "rehydrated_fruit", - "juice_pulp", - "can_spam", - "can_tuna", - "can_salmon", - "can_catfood", - "chem_anfo", - "catfood" - ], - "fg": 973, - "rotates": false - }, - { - "id": [ - "rehydrated_meat", - "rehydrated_hflesh", - "apple_canned", - "apple_sugar", - "meat_pickled", - "human_pickled" - ], - "fg": 974, - "rotates": false - }, - { - "id": [ - "rehydrated_veggy", - "veggy_pickled" - ], - "fg": 975, - "rotates": false - }, - { - "id": [ - "chaw", - "dandelion_cooked", - "wild_herbs", - "veggy_salad", - "dried_salad", - "insta_salad", - "veggy_aspic", - "veggy_canned", - "veggy_salted", - "dry_veggy", - "homebrew_antiseptic", - "chem_chromium_oxide" - ], - "fg": 976, - "rotates": false - }, - { - "id": [ - "irradiated_strawberries", - "strawberries" - ], - "fg": 977, - "rotates": false - }, - { - "id": "meat_scrap_cooked", - "fg": 978, - "rotates": false - }, - { - "id": "fish_bait", - "fg": 979, - "rotates": false - }, - { - "id": "meat_scrap", - "fg": 980, - "rotates": false - }, - { - "id": [ - "brioche", - "toastem", - "toastem2", - "toastem3", - "toasterpastryfrozen", - "wastebread", - "bread" - ], - "fg": 981, - "rotates": false - }, - { - "id": [ - "pemmican", - "hflesh_pemmican", - "toasterpastry", - "cloutie_dumpling", - "haggis", - "human_haggis", - "unfinished_charcoal", - "fish_smoked" - ], - "fg": 982, - "rotates": false - }, - { - "id": [ - "fish", - "lunchmeat", - "fruit_leather", - "fried_spam", - "meat_aspic", - "hflesh_aspic", - "sashimi" - ], - "fg": 983, - "rotates": false - }, - { - "id": [ - "fish_cooked", - "fish_pickled", - "salted_fish", - "wool_staple" - ], - "fg": 984, - "rotates": false - }, - { - "id": [ - "fish_fried", - "cornbread", - "johnnycake", - "noodles_fast" - ], - "fg": 985, - "rotates": false - }, - { - "id": [ - "fish_canned", - "lutefisk" - ], - "fg": 986, - "rotates": false - }, - { - "id": "sweetbread", - "fg": 987, - "rotates": false - }, - { - "id": [ - "chips2", - "chips3", - "chips" - ], - "fg": 988, - "rotates": false - }, - { - "id": [ - "popcorn", - "popcorn2", - "popcorn3" - ], - "fg": 989, - "rotates": false - }, - { - "id": [ - "cereal", - "cereal2", - "cereal3", - "can_peach" - ], - "fg": 990, - "rotates": false - }, - { - "id": [ - "bacon", - "fetus" - ], - "fg": 991, - "rotates": false - }, - { - "id": [ - "frozen_dinner", - "mre_chicken" - ], - "fg": 992, - "rotates": false - }, - { - "id": [ - "jerky", - "jerky_human", - "cooked_dinner", - "meat_smoked", - "human_smoked", - "mre_beef" - ], - "fg": 993, - "rotates": false - }, - { - "id": [ - "human_flesh", - "meat_canned", - "human_canned", - "meat" - ], - "fg": 994, - "rotates": false - }, - { - "id": [ - "meat_cooked", - "human_cooked", - "royal_beef", - "spider_steak_cooked" - ], - "fg": 995, - "rotates": false - }, - { - "id": "meat_tainted", - "fg": 996, - "rotates": false - }, - { - "id": "spider_steak", - "fg": 997, - "rotates": false - }, - { - "id": "spider_steak_fried", - "fg": 998, - "rotates": false - }, - { - "id": [ - "stomach_large", - "hstomach", - "hstomach_large", - "stomach" - ], - "fg": 999, - "rotates": false - }, - { - "id": [ - "stomach_boiled", - "hstomach_boiled", - "small_stomach_boiled", - "small_hstomach_boiled" - ], - "fg": 1000, - "rotates": false - }, - { - "id": "offal_cooked", - "fg": 1001, - "rotates": false - }, - { - "id": "offal", - "fg": 1002, - "rotates": false - }, - { - "id": "sausage_wasteland", - "fg": 1003, - "rotates": false - }, - { - "id": "spider_brain", - "fg": 1004, - "rotates": false - }, - { - "id": [ - "helmet_bone_megabear", - "megabear_skull_clean" - ], - "fg": 1005, - "rotates": false - }, - { - "id": "megabear_skull_unclean", - "fg": 1006, - "rotates": false - }, - { - "id": "e_handcuffs", - "fg": 1007, - "rotates": false - }, - { - "id": "onion_rings", - "fg": 1008, - "rotates": false - }, - { - "id": [ - "deluxe_eggs", - "nachos", - "nachosc", - "nachosm", - "nachoshf", - "nachosmc", - "nachoshc", - "chunk_sulfur", - "scrambled_eggs" - ], - "fg": 1009, - "rotates": false - }, - { - "id": "fat_tainted", - "fg": 1010, - "rotates": false - }, - { - "id": [ - "onigiri", - "seed_garlic", - "fat", - "material_limestone", - "material_rocksalt", - "marshmallow" - ], - "fg": 1011, - "rotates": false - }, - { - "id": [ - "raw_tainted_fur", - "raw_fur" - ], - "fg": 1012, - "rotates": false - }, - { - "id": "cured_pelt", - "fg": 1013, - "rotates": false - }, - { - "id": "tanned_pelt", - "fg": 1014, - "rotates": false - }, - { - "id": [ - "raw_hleather", - "raw_tainted_leather", - "raw_leather" - ], - "fg": 1015, - "rotates": false - }, - { - "id": "cured_hide", - "fg": 1016, - "rotates": false - }, - { - "id": "tanned_hide", - "fg": 1017, - "rotates": false - }, - { - "id": "tanning_hide", - "fg": 1018, - "rotates": false - }, - { - "id": "tanning_pelt", - "fg": 1019, - "rotates": false - }, - { - "id": [ - "fresh_fries", - "fries", - "cheese_fries", - "fresh_fries_big" - ], - "fg": 1020, - "rotates": false - }, - { - "id": "powder_candy", - "fg": 1021, - "rotates": false - }, - { - "id": [ - "spaghetti_raw", - "cracklins", - "porkstick", - "mre_hotdog" - ], - "fg": 1022, - "rotates": false - }, - { - "id": "straw_pile", - "fg": 1023, - "rotates": false - }, - { - "id": "candycigarette", - "fg": 1024, - "rotates": false - }, - { - "id": "dogbane", - "fg": 1025, - "rotates": false - }, - { - "id": "seed_rhubarb", - "fg": 1026, - "rotates": false - }, - { - "id": "canola", - "fg": 1027, - "rotates": false - }, - { - "id": [ - "irradiated_rhubarb", - "rhubarb" - ], - "fg": 1028, - "rotates": false - }, - { - "id": [ - "thyme", - "seed_veggy_wild" - ], - "fg": 1029, - "rotates": false - }, - { - "id": [ - "wheat", - "barley" - ], - "fg": 1030, - "rotates": false - }, - { - "id": [ - "irradiated_broccoli", - "cannabis", - "broccoli" - ], - "fg": 1031, - "rotates": false - }, - { - "id": [ - "hops", - "celery", - "irradiated_celery" - ], - "fg": 1032, - "rotates": false - }, - { - "id": [ - "dahlia_root", - "dahlia_baked", - "cattail_rhizome", - "hickory_root", - "seed_hops" - ], - "fg": 1033, - "rotates": false - }, - { - "id": [ - "mushroom_morel", - "morel_cooked", - "morel_fried", - "mushroom" - ], - "fg": 1034, - "rotates": false - }, - { - "id": [ - "leg", - "arm" - ], - "fg": 1035, - "rotates": false - }, - { - "id": "fchicken", - "fg": 1036, - "rotates": false - }, - { - "id": "bone_tainted", - "fg": 1037, - "rotates": false - }, - { - "id": [ - "bone_human", - "bone" - ], - "fg": 1038, - "rotates": false - }, - { - "id": [ - "irradiated_banana", - "banana" - ], - "fg": 1039, - "rotates": false - }, - { - "id": [ - "irradiated_carrot", - "carrot" - ], - "fg": 1040, - "rotates": false - }, - { - "id": "chili_pepper", - "fg": 1041, - "rotates": false - }, - { - "id": [ - "irradiated_grapes", - "grapes" - ], - "fg": 1042, - "rotates": false - }, - { - "id": [ - "irradiated_pineapple", - "pineapple" - ], - "fg": 1043, - "rotates": false - }, - { - "id": [ - "mugwort", - "pine_bough", - "tobacco_raw", - "weed" - ], - "fg": 1044, - "rotates": false - }, - { - "id": "sugar_beet", - "fg": 1045, - "rotates": false - }, - { - "id": [ - "corndogs_cooked", - "corndogs_frozen" - ], - "fg": 1046, - "rotates": false - }, - { - "id": [ - "joint", - "handrolled_cig" - ], - "fg": 1047, - "rotates": false - }, - { - "id": [ - "mannwurstgravy", - "sausagegravy", - "cooked_cattail_stalk", - "vibrator" - ], - "fg": 1048, - "rotates": false - }, - { - "id": [ - "sausage", - "mre_maplesausage", - "hotdogs_frozen", - "hotdogs_cooked", - "hotdogs_campfire", - "chilidogs", - "chilidogs_human", - "mannwurst", - "currywurst", - "h_currywurst", - "sweet_sausage" - ], - "fg": 1049, - "rotates": false - }, - { - "id": [ - "zucchini", - "irradiated_zucchini", - "cucumber", - "irradiated_cucumber", - "cattail_stalk", - "stick_fiber", - "pickle" - ], - "fg": 1050, - "rotates": false - }, - { - "id": [ - "irradiated_corn", - "corn" - ], - "fg": 1051, - "rotates": false - }, - { - "id": [ - "frozen_burrito", - "cooked_burrito" - ], - "fg": 1052, - "rotates": false - }, - { - "id": "cig", - "fg": 1053, - "rotates": false - }, - { - "id": "cig_lit", - "fg": 1054, - "rotates": false - }, - { - "id": "cig_butt", - "fg": 1055, - "rotates": false - }, - { - "id": "cigar", - "fg": 1056, - "rotates": false - }, - { - "id": "cigar_lit", - "fg": 1057, - "rotates": false - }, - { - "id": "cigar_butt", - "fg": 1058, - "rotates": false - }, - { - "id": [ - "clay_lump", - "clay_boiled", - "clay_lump", - "chocolate" - ], - "fg": 1059, - "rotates": false - }, - { - "id": "gum", - "fg": 1060, - "rotates": false - }, - { - "id": "nic_gum", - "fg": 1061, - "rotates": false - }, - { - "id": [ - "tallow", - "lard", - "caff_gum" - ], - "fg": 1062, - "rotates": false - }, - { - "id": [ - "tallow_tainted", - "material_aluminium_ingot" - ], - "fg": 1063, - "rotates": false - }, - { - "id": [ - "hfleshbologna", - "bologna" - ], - "fg": 1064, - "rotates": false - }, - { - "id": "royal_jelly_sap", - "fg": 1065, - "rotates": false - }, - { - "id": "royal_jelly", - "fg": 1066, - "rotates": false - }, - { - "id": "honeycomb", - "fg": 1067, - "rotates": false - }, - { - "id": "wax", - "fg": 1068, - "rotates": false - }, - { - "id": [ - "sushi_fishroll", - "sushi_meatroll", - "sushi_veggyroll" - ], - "fg": 1069, - "rotates": false - }, - { - "id": [ - "pie_meat", - "pie_human", - "pie_maple", - "pie" - ], - "fg": 1070, - "rotates": false - }, - { - "id": "pizza_cheese", - "fg": 1071, - "rotates": false - }, - { - "id": [ - "pizza_meat", - "pizza_human" - ], - "fg": 1072, - "rotates": false - }, - { - "id": [ - "pizza_veggy", - "pie_veggy" - ], - "fg": 1073, - "rotates": false - }, - { - "id": [ - "waffles", - "fruit_waffles" - ], - "fg": 1074, - "rotates": false - }, - { - "id": "choc_waffles", - "fg": 1075, - "rotates": false - }, - { - "id": [ - "biscuit", - "flatbread", - "tortilla_corn", - "cookies" - ], - "fg": 1076, - "rotates": false - }, - { - "id": [ - "grahmcrackers", - "hardtack", - "frenchtoast", - "crackers" - ], - "fg": 1077, - "rotates": false - }, - { - "id": [ - "sandwich_pbh", - "sandwich_cheese_grilled", - "sandwich_cheese", - "sandwich_honey", - "sandwich_pbm", - "fish_sandwich" - ], - "fg": 1078, - "rotates": false - }, - { - "id": [ - "sandwich_cucumber", - "sandwich_veggy" - ], - "fg": 1079, - "rotates": false - }, - { - "id": [ - "sandwich_pbj", - "blt", - "sandwich_jam" - ], - "fg": 1080, - "rotates": false - }, - { - "id": [ - "sandwich_t", - "sandwich_human", - "smores", - "sandwich_pb", - "cheeseburgerhuman", - "sandwich_deluxe", - "sandwich_dudeluxe", - "cheeseburger", - "hamburger", - "bobburger", - "sloppyjoe", - "manwich", - "sandwich_sauce", - "spider_steak_sandwich" - ], - "fg": 1081, - "rotates": false - }, - { - "id": [ - "tiotaco", - "quesadilla_cheese", - "taco" - ], - "fg": 1082, - "rotates": false - }, - { - "id": [ - "oatmeal_deluxe", - "oatmeal_cooked" - ], - "fg": 1083, - "rotates": false - }, - { - "id": [ - "spaghetti_bolognese", - "spaghetti_human", - "chili", - "chili_human" - ], - "fg": 1084, - "rotates": false - }, - { - "id": "spaghetti_pesto", - "fg": 1085, - "rotates": false - }, - { - "id": [ - "luigilasagne", - "lasagne" - ], - "fg": 1086, - "rotates": false - }, - { - "id": [ - "folding_poncho", - "lasagne_raw" - ], - "fg": 1087, - "rotates": false - }, - { - "id": [ - "cheese_hard", - "cheese" - ], - "fg": 1088, - "rotates": false - }, - { - "id": "glazed_tenderloin", - "fg": 1089, - "rotates": false - }, - { - "id": [ - "fruit_pancakes", - "choc_pancakes", - "pancakes" - ], - "fg": 1090, - "rotates": false - }, - { - "id": [ - "brownie", - "brownie_weed", - "cake2" - ], - "fg": 1091, - "rotates": false - }, - { - "id": [ - "jihelucake", - "cake3" - ], - "fg": 1092, - "rotates": false - }, - { - "id": [ - "chocpretzels", - "pretzels" - ], - "fg": 1093, - "rotates": false - }, - { - "id": "contacts", - "fg": 1094, - "rotates": false - }, - { - "id": "eyedrops", - "fg": 1095, - "rotates": false - }, - { - "id": [ - "inhaler_stimgas", - "inhaler", - "inhaler_sewergas" - ], - "fg": 1096, - "rotates": false - }, - { - "id": "bandages", - "fg": 1097, - "rotates": false - }, - { - "id": "medikit", - "fg": 1098, - "rotates": false - }, - { - "id": "duct_tape", - "fg": 1099, - "rotates": false - }, - { - "id": "medical_tape", - "fg": 1100, - "rotates": false - }, - { - "id": "resin_cord", - "fg": 1101, - "rotates": false - }, - { - "id": "medical_gauze", - "fg": 1102, - "rotates": false - }, - { - "id": "lsd", - "fg": 1103, - "rotates": false - }, - { - "id": [ - "vitamins", - "adderall" - ], - "fg": 1104, - "rotates": false - }, - { - "id": "caffeine", - "fg": 1105, - "rotates": false - }, - { - "id": "thorazine", - "fg": 1106, - "rotates": false - }, - { - "id": "xanax", - "fg": 1107, - "rotates": false - }, - { - "id": [ - "pills_sleep", - "prussian_blue", - "oxycodone" - ], - "fg": 1108, - "rotates": false - }, - { - "id": "codeine", - "fg": 1109, - "rotates": false - }, - { - "id": [ - "aspirin", - "antifungal", - "antiparasitic", - "pur_tablets", - "iodine", - "tramadol", - "diazepam", - "calcium_tablet", - "weak_antibiotic" - ], - "fg": 1110, - "rotates": false - }, - { - "id": "prozac", - "fg": 1111, - "rotates": false - }, - { - "id": "antibiotics", - "fg": 1112, - "rotates": false - }, - { - "id": "nyquil", - "fg": 1113, - "rotates": false - }, - { - "id": "dayquil", - "fg": 1114, - "rotates": false - }, - { - "id": "panacea", - "fg": 1115, - "rotates": false - }, - { - "id": [ - "advanced_ecig", - "antenna" - ], - "fg": 1116, - "rotates": false - }, - { - "id": [ - "skinny_tie", - "ecig" - ], - "fg": 1117, - "rotates": false - }, - { - "id": "dr_stem_cell", - "fg": 1118, - "rotates": false - }, - { - "id": "permanent_marker", - "fg": 1119, - "rotates": false - }, - { - "id": [ - "berserker_drug", - "adrenaline_injector" - ], - "fg": 1120, - "rotates": false - }, - { - "id": "berserker_drug_act", - "fg": 1121, - "rotates": false - }, - { - "id": [ - "inj_vitb", - "inj_iron" - ], - "fg": 1122, - "rotates": false - }, - { - "id": [ - "offal_canned", - "r_paint", - "pickles_ferment" - ], - "fg": 1123, - "rotates": false - }, - { - "id": [ - "offal_pickled", - "sauerkraut_ferment", - "jar_spider_steak_pickled", - "megabear_skull_picked" - ], - "fg": 1124, - "rotates": false - }, - { - "id": [ - "y_paint", - "honey_glassed" - ], - "fg": 1125, - "rotates": false - }, - { - "id": "b_paint", - "fg": 1126, - "rotates": false - }, - { - "id": [ - "g_paint", - "jar_sauerkraut_pickled" - ], - "fg": 1127, - "rotates": false - }, - { - "id": "p_paint", - "fg": 1128, - "rotates": false - }, - { - "id": "w_paint", - "fg": 1129, - "rotates": false - }, - { - "id": "jar_pickles_pickled", - "fg": 1130, - "rotates": false - }, - { - "id": "hazardous_waste_drum", - "fg": 1131, - "rotates": false - }, - { - "id": "can_food", - "fg": 1132, - "rotates": false - }, - { - "id": [ - "popcan_stove", - "can_drink" - ], - "fg": 1133, - "rotates": false - }, - { - "id": "can_food_unsealed", - "fg": 1134, - "rotates": false - }, - { - "id": "can_drink_unsealed", - "fg": 1135, - "rotates": false - }, - { - "id": "jar_glass", - "fg": 1136, - "rotates": false - }, - { - "id": [ - "jar_glass_sealed", - "spider_steak_pickled" - ], - "fg": 1137, - "rotates": false - }, - { - "id": "jar_3l_glass", - "fg": 1138, - "rotates": false - }, - { - "id": "jar_3l_glass_sealed", - "fg": 1139, - "rotates": false - }, - { - "id": [ - "styrofoam_cup", - "cup_plastic" - ], - "fg": 1140, - "rotates": false - }, - { - "id": "cup_plastic_unsealed", - "fg": 1141, - "rotates": false - }, - { - "id": "glass", - "fg": 1142, - "rotates": false - }, - { - "id": "ceramic_cup", - "fg": 1143, - "rotates": false - }, - { - "id": [ - "glass_tube_small", - "test_tube" - ], - "fg": 1144, - "rotates": false - }, - { - "id": [ - "rubber_slug", - "canister_goo", - "bot_fungal_boil", - "bot_fungal_boil_egg" - ], - "fg": 1145, - "rotates": false - }, - { - "id": "clay_canister", - "fg": 1146, - "rotates": false - }, - { - "id": "bottle_folding", - "fg": 1147, - "rotates": false - }, - { - "id": "bottle_metal", - "fg": 1148, - "rotates": false - }, - { - "id": [ - "bottle_twoliter", - "bottle_plastic", - "bottle_plastic_small" - ], - "fg": 1149, - "rotates": false - }, - { - "id": "acidbomb_medium", - "fg": 1150, - "rotates": false - }, - { - "id": "nail_bomb", - "fg": 1151, - "rotates": false - }, - { - "id": "triffid_sap_grenade", - "fg": 1152, - "rotates": false - }, - { - "id": "bottle_glass", - "fg": 1153, - "rotates": false - }, - { - "id": "fertilizer_chelated", - "fg": 1154, - "rotates": false - }, - { - "id": [ - "2lcanteen", - "canteen_wood", - "canteen" - ], - "fg": 1155, - "rotates": false - }, - { - "id": "flask_hip", - "fg": 1156, - "rotates": false - }, - { - "id": "jug_plastic", - "fg": 1157, - "rotates": false - }, - { - "id": "jug_clay", - "fg": 1158, - "rotates": false - }, - { - "id": "clay_hydria", - "fg": 1159, - "rotates": false - }, - { - "id": [ - "sac_treated", - "sac_empty" - ], - "fg": 1160, - "rotates": false - }, - { - "id": [ - "sac_purse", - "sac_purse_ankle", - "sac_purse_arm", - "sac_purse_leg" - ], - "fg": 1161, - "rotates": false - }, - { - "id": [ - "waterskin2", - "waterskin3", - "large_stomach_sealed", - "stomach_sealed", - "waterskin" - ], - "fg": 1162, - "rotates": false - }, - { - "id": [ - "milk_curdling", - "milk_curdling2", - "milk_curdling3" - ], - "fg": 1163, - "rotates": false - }, - { - "id": [ - "flask_yeast", - "flask_glass" - ], - "fg": 1164, - "rotates": false - }, - { - "id": [ - "antidote_posion", - "revival_serum", - "antidote_badpoison" - ], - "fg": 1165, - "rotates": false - }, - { - "id": "acidbomb", - "fg": 1166, - "rotates": false - }, - { - "id": [ - "solarpack", - "q_solarpack", - "mbag", - "survivor_rucksack", - "survivor_duffel_bag", - "ammo_satchel", - "chestpouch", - "legpouch", - "legpouch_large", - "makeshift_knapsack", - "camelbak" - ], - "fg": 1167, - "rotates": false - }, - { - "id": [ - "backpack", - "runner_bag", - "slingpack" - ], - "fg": 1168, - "rotates": false - }, - { - "id": [ - "backpack_leather", - "survivor_pack", - "survivor_runner_pack", - "swag_bag" - ], - "fg": 1169, - "rotates": false - }, - { - "id": "duffelbag", - "fg": 1170, - "rotates": false - }, - { - "id": [ - "fanny", - "dive_bag" - ], - "fg": 1171, - "rotates": false - }, - { - "id": "purse", - "fg": 1172, - "rotates": false - }, - { - "id": [ - "plastic_shopping_bag", - "plastic_bucket" - ], - "fg": 1173, - "rotates": false - }, - { - "id": "straw_basket", - "fg": 1174, - "rotates": false - }, - { - "id": "bucket", - "fg": 1175, - "rotates": false - }, - { - "id": "plastic_bag_vac", - "fg": 1176, - "rotates": false - }, - { - "id": [ - "bag_canvas", - "bag_canvas_small", - "mre_beef_box", - "mre_veggy_box", - "mre_chicken_box", - "mre_hotdog_box", - "mre_ravioli_box" - ], - "fg": 1177, - "rotates": false - }, - { - "id": [ - "bag_bundle_10", - "bag_plastic" - ], - "fg": 1178, - "rotates": false - }, - { - "id": [ - "concrete", - "mortar_build" - ], - "fg": 1179, - "rotates": false - }, - { - "id": "box_cigarette", - "fg": 1180, - "rotates": false - }, - { - "id": "box_small", - "fg": 1181, - "rotates": false - }, - { - "id": "jerrycan_big", - "fg": 1182, - "rotates": false - }, - { - "id": "vp_tank_medium", - "fg": 1182, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 1183 - } - ] - }, - { - "id": [ - "jerrypack", - "jerrycan" - ], - "fg": 1184, - "rotates": false - }, - { - "id": "vp_tank_small", - "fg": 1184, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 1183 - } - ] - }, - { - "id": [ - "metal_tank_small", - "metal_tank_little", - "metal_tank_small", - "metal_tank" - ], - "fg": 1185, - "rotates": false - }, - { - "id": [ - "vp_tank", - "vp_tank_little" - ], - "fg": 1185, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 1183 - } - ] - }, - { - "id": "stamina_vial", - "fg": 1186, - "rotates": false - }, - { - "id": [ - "hose", - "vine_30" - ], - "fg": 1187, - "rotates": false - }, - { - "id": [ - "leather_cat_tail", - "fur_cat_tail", - "string_6", - "string_36" - ], - "fg": 1188, - "rotates": false - }, - { - "id": [ - "wire", - "wire_barbed", - "chain" - ], - "fg": 1189, - "rotates": false - }, - { - "id": "spaghetti_cooked", - "fg": 1190, - "rotates": false - }, - { - "id": [ - "flu_shot", - "vaccine_shot" - ], - "fg": 1191, - "rotates": false - }, - { - "id": "copper_knife", - "fg": 1192, - "rotates": false - }, - { - "id": [ - "knife_steak", - "knife_butcher", - "knife_combat", - "diveknife", - "makeshift_knife", - "primitive_knife", - "knife_trench", - "switchblade", - "kris", - "knife_hunting", - "knife_rambo", - "knife_rm42", - "honey_scraper", - "bio_blade_weapon", - "kris_fake" - ], - "fg": 1193, - "rotates": false - }, - { - "id": "glass_shiv", - "fg": 1194, - "rotates": false - }, - { - "id": "foil_alum", - "fg": 1195, - "rotates": false - }, - { - "id": [ - "rolling_paper", - "aluminum_foil", - "wrapper" - ], - "fg": 1196, - "rotates": false - }, - { - "id": "grenade_inc_act", - "fg": 1197, - "rotates": false - }, - { - "id": "scrambler_act", - "fg": 1198, - "rotates": false - }, - { - "id": "EMPbomb_act", - "fg": 1199, - "rotates": false - }, - { - "id": [ - "flashbang_act", - "t_lgtn_arrest" - ], - "fg": 1200, - "rotates": false - }, - { - "id": "smokebomb_act", - "fg": 1201, - "rotates": false - }, - { - "id": "gasbomb_act", - "fg": 1202, - "rotates": false - }, - { - "id": "flashbang", - "fg": 1203, - "rotates": false - }, - { - "id": "grenade_inc", - "fg": 1204, - "rotates": false - }, - { - "id": "scrambler", - "fg": 1205, - "rotates": false - }, - { - "id": "EMPbomb", - "fg": 1206, - "rotates": false - }, - { - "id": "smokebomb", - "fg": 1207, - "rotates": false - }, - { - "id": "gasbomb", - "fg": 1208, - "rotates": false - }, - { - "id": "thermos", - "fg": 1209, - "rotates": false - }, - { - "id": "vacutainer", - "fg": 1210, - "rotates": false - }, - { - "id": [ - "bio_null", - "bio_power_storage", - "bio_power_storage_mkII", - "bio_batteries", - "bio_metabolics", - "bio_solar", - "bio_torsionratchet", - "bio_furnace", - "bio_ethanol", - "bio_memory", - "bio_ears", - "bio_eye_enhancer", - "bio_dex_enhancer", - "bio_str_enhancer", - "bio_int_enhancer", - "bio_membrane", - "bio_targeting", - "bio_gills", - "bio_purifier", - "bio_climate", - "bio_storage", - "bio_recycler", - "bio_digestion", - "bio_tools", - "bio_shock", - "bio_heat_absorb", - "bio_carbon", - "bio_armor_head", - "bio_armor_torso", - "bio_armor_arms", - "bio_armor_legs", - "bio_flashlight", - "bio_night_vision", - "bio_infrared", - "bio_face_mask", - "bio_ads", - "bio_ods", - "bio_scent_mask", - "bio_scent_vision", - "bio_cloak", - "bio_painkiller", - "bio_nanobots", - "bio_heatsink", - "bio_resonator", - "bio_time_freeze", - "bio_teleport", - "bio_blood_anal", - "bio_blood_filter", - "bio_alarm", - "bio_evap", - "bio_lighter", - "bio_claws", - "bio_blaster", - "bio_laser", - "bio_emp", - "bio_hydraulics", - "bio_water_extractor", - "bio_magnet", - "bio_fingerhack", - "bio_lockpick", - "bio_ground_sonar", - "bio_power_armor_interface", - "bio_power_armor_interface_mkII", - "bio_flashbang", - "bio_railgun", - "bio_probability_travel", - "bio_shockwave", - "bio_chain_lightning", - "bio_night", - "bio_uncanny_dodge", - "bio_dis_shock", - "bio_dis_acid", - "bio_drain", - "bio_noise", - "bio_power_weakness", - "bio_sunglasses", - "bio_speed", - "bio_watch", - "bio_faraday", - "bio_armor_eyes", - "bio_leukocyte", - "bio_geiger", - "bio_radscrubber", - "bio_adrenaline", - "bio_razors", - "bio_blade", - "bio_itchy", - "bio_nostril", - "bio_thumbs", - "bio_spasm", - "bio_shakes", - "bio_leaky", - "bio_sleepy", - "bio_deformity", - "bio_voice", - "bio_pokedeye", - "bio_ankles", - "bio_trip", - "bio_cqb", - "bio_meteorologist", - "bio_ups", - "bio_remote", - "bio_advreactor", - "bio_plut_filter", - "bio_reactor", - "bio_reactor_upgrade", - "bio_stiff", - "bio_eye_optic", - "bio_chest_gun", - "bio_emp_armgun", - "bio_surgical_razor", - "bio_cable" - ], - "fg": 1211, - "rotates": false - }, - { - "id": [ - "control_chip", - "burnt_out_bionic" - ], - "fg": 1212, - "rotates": false - }, - { - "id": [ - "120mm_usable_heat", - "120mm_usable_shot", - "120mm_usable_slug", - "120mm_usable_ap" - ], - "fg": 1213, - "rotates": false - }, - { - "id": "12mm", - "fg": 1214, - "rotates": false - }, - { - "id": [ - "22_fmj", - "22_cb", - "22_ratshot", - "9mm", - "9mmP", - "9mmP2", - "9mmfmj", - "762_25", - "762_25hot", - "762_25typeP", - "reloaded_762_25", - "38_special", - "38_super", - "38_fmj", - "10mm", - "40sw", - "40fmj", - "44magnum", - "44fmj", - "45_acp", - "45_jhp", - "45_super", - "454_Casull", - "500_Magnum", - "57mm", - "46mm", - "762_m43", - "762_m87", - "223", - "556", - "556_incendiary", - "270", - "3006", - "3006fmj", - "3006_incendiary", - "308", - "762_51", - "762_51_incendiary", - "700nx", - "32_acp", - "300_winmag", - "762_54R", - "reloaded_9mm", - "reloaded_9mmP", - "reloaded_9mmP2", - "reloaded_9mmfmj", - "reloaded_38_special", - "reloaded_38_super", - "reloaded_38_fmj", - "reloaded_10mm", - "reloaded_40sw", - "reloaded_40fmj", - "reloaded_44magnum", - "reloaded_44fmj", - "reloaded_45_acp", - "reloaded_45_jhp", - "reloaded_45_super", - "reloaded_454_Casull", - "reloaded_500_Magnum", - "reloaded_57mm", - "reloaded_46mm", - "reloaded_762_m43", - "reloaded_762_m87", - "reloaded_223", - "reloaded_556", - "reloaded_556_incendiary", - "reloaded_270", - "reloaded_3006", - "reloaded_3006_incendiary", - "reloaded_308", - "reloaded_762_51", - "reloaded_762_51_incendiary", - "reloaded_50bmg", - "reloaded_50ss", - "reloaded_50_incendiary", - "reloaded_300_winmag", - "reloaded_32_acp", - "reloaded_700nx", - "reloaded_762_54R", - "reloaded_22_cb", - "reloaded_22_fmj", - "reloaded_22_lr", - "reloaded_22_ratshot", - "545", - "545_ap", - "9x18mm", - "9x18mmfmj", - "9x18mmP2", - "reloaded_545", - "reloaded_545_ap", - "reloaded_9x18mm", - "reloaded_9x18mmfmj", - "reloaded_9x18mmP2", - "reloaded_3006fmj", - "50bmg", - "50ss", - "50_incendiary", - "357sig_fmj", - "357sig_jhp", - "reloaded_357sig_fmj", - "reloaded_357sig_jhp", - "357", - "357_P", - "45_long_colt", - "reloaded_357", - "reloaded_357_P", - "reloaded_45_long_colt", - "22_lr" - ], - "fg": 1215, - "rotates": false - }, - { - "id": [ - "30mm_hei", - "30mm_slug", - "30mm_hedp" - ], - "fg": 1216, - "rotates": false - }, - { - "id": [ - "40mm_frag", - "40mm_incendiary", - "40mm_teargas", - "40mm_smoke", - "40mm_flare", - "40mm_flashbang", - "40mm_shot", - "40mm_flechette", - "reloaded_40mm_flechette", - "66mm_HEAT", - "120mm_HEAT", - "40mm_beanbag", - "84x246mm_he", - "84x246mm_hedp", - "84x246mm_smoke", - "m235tpa", - "40mm_concussive" - ], - "fg": 1217, - "rotates": false - }, - { - "id": [ - "reloaded_5x50dart", - "5x50heavy", - "5x50dart" - ], - "fg": 1218, - "rotates": false - }, - { - "id": [ - "shot_bird", - "shot_00", - "shot_slug", - "shot_he", - "shot_flechette", - "reloaded_shot_bird", - "reloaded_shot_00", - "reloaded_shot_slug", - "reloaded_shot_flechette", - "blun_flechette", - "blun_shot", - "blun_slug", - "reloaded_shot_beanbag", - "shot_scrap", - "shot_scrapbag", - "shot_beanbag", - "generic_no_ammo", - "signal_flare", - "410_birdshot", - "410_scrap", - "410_shot", - "410_slug", - "reloaded_410_birdshot", - "reloaded_410_shot", - "reloaded_410_slug", - "shot_410", - "shot_410_flechette", - "shot_410_flechette_reloaded", - "shot_410_hull", - "shot_410_inc", - "shot_410_inc_reloaded", - "shot_410_reloaded", - "shot_410_slug", - "shot_410_slug_reloaded" - ], - "fg": 1219, - "rotates": false - }, - { - "id": [ - "8mm_bootleg", - "8mm_fmj", - "8mm_jhp", - "8mm_inc", - "8mm_hvp", - "8mm_civilian", - "20x66_shot", - "20x66_flechette", - "20x66_slug", - "20x66_exp", - "20x66_frag", - "20x66_flare", - "20x66_inc", - "20x66_beanbag", - "20x66_bootleg_shot", - "20x66_bootleg_flechette", - "20x66_bootleg_slug", - "8mm_caseless" - ], - "fg": 1220, - "rotates": false - }, - { - "id": [ - "9mm_casing", - "22_casing", - "38_casing", - "40_casing", - "44_casing", - "45_casing", - "454_casing", - "500_casing", - "57mm_casing", - "46mm_casing", - "762_casing", - "223_casing", - "3006_casing", - "308_casing", - "40mm_casing", - "700nx_casing", - "300_casing", - "762R_casing", - "762_25_casing", - "32_casing", - "9x18mm_casing", - "545_casing", - "22_casing_new" - ], - "fg": 1221 - }, - { - "id": [ - "50_casing", - "357sig_casing", - "357_mag_casing", - "45lc_casing" - ], - "fg": 1221, - "rotates": false - }, - { - "id": "acidbomb_large", - "fg": 1222, - "rotates": false - }, - { - "id": "acidbomb_micro", - "fg": 1223, - "rotates": false - }, - { - "id": "acidbomb_small", - "fg": 1224, - "rotates": false - }, - { - "id": [ - "stimpack_ammo", - "ampoule" - ], - "fg": 1225, - "rotates": false - }, - { - "id": [ - "battery", - "laser_capacitor" - ], - "fg": 1226, - "rotates": false - }, - { - "id": [ - "laser_pack", - "reloaded_laser_pack", - "rechargeable_battery", - "rechargeable_battery" - ], - "fg": 1227, - "rotates": false - }, - { - "id": [ - "plasma", - "charge_shot", - "rebreather_filter", - "gasfilter_s", - "gasfilter_m", - "gasfilter_l" - ], - "fg": 1228, - "rotates": false - }, - { - "id": "plut_cell", - "fg": 1229, - "rotates": false - }, - { - "id": "battery_atomic", - "fg": 1230, - "rotates": false - }, - { - "id": [ - "155mm_frag", - "155mm_heat", - "155mm_shot", - "155mm_slug", - "atgm_heat" - ], - "fg": 1231, - "rotates": false - }, - { - "id": "bfg_shell", - "fg": 1232, - "rotates": false - }, - { - "id": [ - "bolt_wood", - "arrow_fire_hardened_fletched", - "arrow_heavy_fire_hardened_fletched" - ], - "fg": 1233, - "rotates": false - }, - { - "id": "arrow_plastic", - "fg": 1234, - "rotates": false - }, - { - "id": [ - "bolt_metal", - "bolt_steel", - "bolt_steel_target", - "bolt_steel_bodkin", - "bolt_explosive", - "arrow_metal", - "arrow_metal_bodkin", - "arrow_metal_sharpened_fletched", - "arrow_metal_target", - "arrow_exploding", - "arrow_flamming" - ], - "fg": 1235, - "rotates": false - }, - { - "id": "arrow_cf", - "fg": 1236, - "rotates": false - }, - { - "id": "bolt_bone", - "fg": 1237, - "rotates": false - }, - { - "id": "arrow_small_game_fletched", - "fg": 1238, - "rotates": false - }, - { - "id": [ - "arrow_wood_heavy", - "arrow_field_point_fletched", - "arrow_heavy_field_point_fletched", - "flamable_arrow", - "arrow_wood" - ], - "fg": 1239, - "rotates": false - }, - { - "id": [ - "dart", - "lawn_dart" - ], - "fg": 1240, - "rotates": false - }, - { - "id": [ - "bomblet_archdemon", - "bomblet_explosive" - ], - "fg": 1241, - "rotates": false - }, - { - "id": [ - "bomblet_archvile", - "bomblet_fire", - "bomblet_vile" - ], - "fg": 1242, - "rotates": false - }, - { - "id": "bomblet_casing", - "fg": 1243, - "rotates": false - }, - { - "id": "bomblet_chickenbot", - "fg": 1244, - "rotates": false - }, - { - "id": "bomblet_frag", - "fg": 1245, - "rotates": false - }, - { - "id": "bomblet_stun", - "fg": 1246, - "rotates": false - }, - { - "id": "bomblet_acid", - "fg": 1247, - "rotates": false - }, - { - "id": "cable", - "fg": 1248, - "rotates": false - }, - { - "id": "chain_link", - "fg": 1249, - "rotates": false - }, - { - "id": [ - "chime_scrap_act", - "chime_scrap" - ], - "fg": 1250, - "rotates": false - }, - { - "id": [ - "scrap_bronze", - "scrap_copper", - "copper" - ], - "fg": 1251, - "rotates": false - }, - { - "id": "gold_small", - "fg": 1252, - "rotates": false - }, - { - "id": [ - "lead", - "silver_small", - "platinum_small", - "bismuth", - "tin", - "scrap" - ], - "fg": 1253, - "rotates": false - }, - { - "id": [ - "electric_primer_large", - "electric_primer" - ], - "fg": 1254, - "rotates": false - }, - { - "id": [ - "spiked_rocket", - "explosive_hm_rocket" - ], - "fg": 1255, - "rotates": false - }, - { - "id": [ - "incendiary_hm_rocket", - "cyber_rocket" - ], - "fg": 1256, - "rotates": false - }, - { - "id": "RPG-7_ammo", - "fg": 1257, - "rotates": false - }, - { - "id": [ - "down_feather", - "feather" - ], - "fg": 1258, - "rotates": false - }, - { - "id": [ - "throwing_knife", - "survival_marker", - "fighter_sting_juice" - ], - "fg": 1259, - "rotates": false - }, - { - "id": "bee_sting", - "fg": 1260, - "rotates": false - }, - { - "id": "fighter_sting", - "fg": 1261, - "rotates": false - }, - { - "id": "wasp_sting", - "fg": 1262, - "rotates": false - }, - { - "id": "flaming_skull", - "fg": 1263, - "rotates": false - }, - { - "id": "bfg_shell_act", - "fg": 1264, - "rotates": false - }, - { - "id": "flaming_ball", - "fg": 1265, - "rotates": false - }, - { - "id": "fletching", - "fg": 1266, - "rotates": false - }, - { - "id": [ - "36navy", - "44army", - "flintlock_shot", - "flintlock_ammo" - ], - "fg": 1267, - "rotates": false - }, - { - "id": [ - "hell_laser_queen", - "hell_laser" - ], - "fg": 1268, - "rotates": true - }, - { - "id": "hell_napalm", - "fg": 1269, - "rotates": false - }, - { - "id": [ - "hell_plasma_c", - "hell_plasma_k", - "hell_plasma_b" - ], - "fg": 1270, - "rotates": false - }, - { - "id": [ - "lance_charge_shot", - "lance_charge" - ], - "fg": 1271, - "rotates": false - }, - { - "id": "material_niter", - "fg": 1272, - "rotates": false - }, - { - "id": [ - "mininuke", - "mininuke_mod" - ], - "fg": 1273, - "rotates": false - }, - { - "id": [ - "chem_hexamine", - "money" - ], - "fg": 1274, - "rotates": false - }, - { - "id": [ - "c_fishspear", - "qiang", - "m_fishspear" - ], - "fg": 1275, - "rotates": false - }, - { - "id": [ - "javelin", - "javelin_copper", - "javelin", - "spear_wood" - ], - "fg": 1276, - "rotates": false - }, - { - "id": [ - "combatnail", - "nail" - ], - "fg": 1277, - "rotates": false - }, - { - "id": "nicotine_liquid", - "fg": 1278, - "rotates": false - }, - { - "id": [ - "marble", - "bearing", - "bb", - "bearing_lead", - "pebble_clay", - "pebble" - ], - "fg": 1279, - "rotates": false - }, - { - "id": [ - "shotgun_primer", - "smpistol_primer", - "lgpistol_primer", - "smrifle_primer", - "lgrifle_primer" - ], - "fg": 1280, - "rotates": false - }, - { - "id": "sinew", - "fg": 1281, - "rotates": false - }, - { - "id": [ - "thread", - "yarn" - ], - "fg": 1282, - "rotates": false - }, - { - "id": "plant_fibre", - "fg": 1283, - "rotates": false - }, - { - "id": [ - "steel_rail", - "rebar_rail" - ], - "fg": 1284, - "rotates": false - }, - { - "id": [ - "blowgun", - "skewer", - "knitting_needles", - "pointy_stick", - "pool_cue", - "digging_stick" - ], - "fg": 1285, - "rotates": false - }, - { - "id": [ - "baton", - "baton-extended" - ], - "fg": 1286, - "rotates": false - }, - { - "id": "shrapnel", - "fg": 1287, - "rotates": false - }, - { - "id": "soap", - "fg": 1288, - "rotates": false - }, - { - "id": "solder_wire", - "fg": 1289, - "rotates": false - }, - { - "id": "throwing_axe", - "fg": 1290, - "rotates": false - }, - { - "id": "throwing_stick", - "fg": 1291, - "rotates": false - }, - { - "id": "triffid_sap", - "fg": 1292, - "rotates": false - }, - { - "id": "atomic_light", - "fg": 1293, - "rotates": false - }, - { - "id": [ - "atomic_light_off", - "baseball" - ], - "fg": 1294, - "rotates": false - }, - { - "id": "lens", - "fg": 1295, - "rotates": false - }, - { - "id": [ - "pool_ball", - "bowling_ball", - "pool_ball" - ], - "fg": 1296, - "rotates": false - }, - { - "id": "vp_atomic_light", - "fg": 1293, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": [ - "rock", - "rock" - ], - "fg": 1297, - "rotates": false - }, - { - "id": "solar_cell", - "fg": 1298, - "rotates": false - }, - { - "id": "sheet_metal_small", - "fg": 1299, - "rotates": false - }, - { - "id": "steel_lump", - "fg": 1300, - "rotates": false - }, - { - "id": [ - "rag", - "chestwrap", - "nomex", - "neoprene", - "tinder" - ], - "fg": 1301, - "rotates": false - }, - { - "id": [ - "chestwrap_wool", - "felt_patch" - ], - "fg": 1302, - "rotates": false - }, - { - "id": "rag_bloody", - "fg": 1303, - "rotates": false - }, - { - "id": [ - "javelin_iron", - "javelin_stone", - "spear_knife", - "pike", - "javelin_iron", - "spear_stone", - "fishspear" - ], - "fg": 1304, - "rotates": false - }, - { - "id": "spear_dory", - "fg": 1305, - "rotates": false - }, - { - "id": [ - "8x40_100_mag", - "8x40_500_mag", - "360_200_mag", - "hk_g80mag", - "5x50_100_mag" - ], - "fg": 1306 - }, - { - "id": [ - "8x40_50_mag", - "20x66_40_mag", - "lw223bigmag", - "5x50_50_mag" - ], - "fg": 1307 - }, - { - "id": [ - "20x66_10_mag", - "stanag10", - "falmag", - "falbigmag", - "g3mag", - "m14mag", - "m1918bigmag", - "m1918mag", - "saiga10mag", - "8x40_10_mag" - ], - "fg": 1308 - }, - { - "id": [ - "mp5bigmag", - "360_400_mag", - "thompson_drum", - "g3bigmag", - "scarhbigmag", - "glock_drum_100rd", - "glock_drum_50rd", - "ppshdrum", - "saiga30mag_410", - "8x40_250_mag" - ], - "fg": 1309 - }, - { - "id": [ - "20x66_20_mag", - "lw223mag", - "stanag30", - "scarhmag", - "akmmag", - "akmbigmag", - "saiga30mag", - "ppshmag", - "saiga10mag_410", - "8x40_25_mag" - ], - "fg": 1310 - }, - { - "id": [ - "ak74mag", - "rpk74mag" - ], - "fg": 1311 - }, - { - "id": "a180mag", - "fg": 1312 - }, - { - "id": "aux_pressurized_tank", - "fg": 1313, - "rotates": false - }, - { - "id": [ - "belt308", - "belt40mm", - "belt50", - "belt30mm", - "belt223" - ], - "fg": 1314 - }, - { - "id": [ - "calicomag", - "fnp90mag" - ], - "fg": 1315 - }, - { - "id": "garandclip", - "fg": 1316 - }, - { - "id": [ - "glockmag", - "glock40mag", - "glock40bigmag", - "lw21mag", - "m9bigmag", - "m9mag", - "usp9mag", - "makarovmag", - "mosquitomag", - "sw22mag", - "ppkmag", - "sigp230mag", - "taurus38mag", - "deaglemag", - "lw12mag", - "m1911bigmag", - "m1911mag", - "usp45mag", - "fn57mag", - "sig40mag", - "tokarevmag", - "glock17_17", - "glock17_22", - "p226mag_15rd_357sig", - "af2011a1mag", - "m1991_38smag", - "glockbigmag" - ], - "fg": 1317 - }, - { - "id": "hd_battery", - "fg": 1318, - "rotates": false - }, - { - "id": "m107a1mag", - "fg": 1319 - }, - { - "id": [ - "ruger1022bigmag", - "mp5mag" - ], - "fg": 1320 - }, - { - "id": [ - "smg_22_mag", - "smg_38_mag", - "smg_40_mag", - "smg_45_mag", - "smg_9mm_mag", - "brute_shot_mag", - "nailmag" - ], - "fg": 1321 - }, - { - "id": "pressurized_tank", - "fg": 1322, - "rotates": false - }, - { - "id": "rm4502", - "fg": 1323, - "rotates": false - }, - { - "id": "rm4504", - "fg": 1324, - "rotates": false - }, - { - "id": [ - "survivor223mag", - "m14smallmag", - "blrmag", - "m2010mag", - "ruger1022mag" - ], - "fg": 1325 - }, - { - "id": [ - "battery_motorbike", - "battery_car", - "medium_storage_battery", - "storage_battery", - "small_storage_battery" - ], - "fg": 1326, - "rotates": false - }, - { - "id": [ - "vp_small_storage_battery", - "vp_medium_storage_battery", - "vp_storage_battery", - "vp_storage_battery_removable", - "vp_battery_motorbike", - "vp_battery_car" - ], - "fg": 1326, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 1183 - } - ] - }, - { - "id": "stanag50", - "fg": 1327 - }, - { - "id": [ - "stenmag", - "survivor9mm_mag", - "uzimag", - "skorpion82mag", - "skorpion61mag", - "mac10mag", - "tdi_mag", - "thompson_bigmag", - "thompson_mag", - "ump45mag", - "hk46mag", - "hk46bigmag", - "tec9mag" - ], - "fg": 1328 - }, - { - "id": "tinyweldtank", - "fg": 1329 - }, - { - "id": "weldtank", - "fg": 1330 - }, - { - "id": [ - "laser_cannon", - "cerberus_laser", - "unbio_blaster_gun" - ], - "fg": 1331, - "rotates": false - }, - { - "id": [ - "flamethrower_simple", - "flamethrower", - "rm451_flamethrower", - "hell_laser_napalm" - ], - "fg": 1332, - "rotates": false - }, - { - "id": [ - "m249", - "30mm_autocannon", - "rm614_lmg", - "rm20", - "rm298", - "m240", - "m60", - "mgl" - ], - "fg": 1333, - "rotates": false - }, - { - "id": "fire_lance", - "fg": 1334, - "rotates": false - }, - { - "id": [ - "fn_p90", - "rm802", - "bigun", - "heavy_rail_rifle", - "rm360_carbine", - "m134", - "tihar", - "helsing", - "watercannon", - "bomblet_launcher_double", - "bomblet_launcher_dualshot", - "bomblet_launcher_rotary", - "bomblet_launcher_single", - "bomblet_launcher_chickenbot" - ], - "fg": 1335, - "rotates": false - }, - { - "id": "airspeargun", - "fg": 1336, - "rotates": false - }, - { - "id": [ - "fn_fal", - "ak74", - "an94", - "ak47" - ], - "fg": 1337, - "rotates": false - }, - { - "id": [ - "hk_g3", - "hk_g36", - "arx160", - "acr", - "ar15", - "m4a1", - "scar_l", - "scar_h", - "m107a1", - "h&k416a5", - "m27iar", - "rm51_assault_rifle" - ], - "fg": 1338, - "rotates": false - }, - { - "id": [ - "tommygun", - "ppsh", - "smg_22", - "smg_38", - "smg_40", - "smg_45", - "smg_9mm", - "american_180" - ], - "fg": 1339, - "rotates": false - }, - { - "id": [ - "sig552", - "needlegun", - "uzi", - "tec9", - "calico", - "hk_mp5", - "mac_10", - "hk_ump45", - "sten", - "skorpion_61", - "skorpion_82", - "hk_mp7", - "rm2000_smg", - "paintballgun" - ], - "fg": 1340, - "rotates": false - }, - { - "id": "atlatl", - "fg": 1341, - "rotates": false - }, - { - "id": [ - "speargun", - "carbine_flintlock_double", - "rifle_flintlock", - "carbine_flintlock", - "rifle_308", - "surv_carbine_223", - "garand", - "m1903", - "rifle_22", - "marlin_9a", - "ruger_1022", - "survivor_special_700", - "rifle_3006", - "browning_blr", - "remington_700", - "sks", - "m1a", - "ruger_mini", - "savage_111f", - "win70", - "weatherby_5", - "mosin91_30", - "mosin44", - "l_long_45", - "bh_m89", - "henry_big_boy", - "colt_lightning", - "levergun_44", - "rifle_223", - "rifle_38", - "rifle_40", - "rifle_44", - "rifle_45", - "bbgun" - ], - "fg": 1342, - "rotates": false - }, - { - "id": "nailrifle", - "fg": 1343, - "rotates": false - }, - { - "id": [ - "rifle_9mm", - "m2010", - "m14ebr", - "rm11b_sniper_rifle", - "mosin44_ebr", - "mosin91_30_ebr", - "cx4", - "l_base_223", - "l_car_223", - "l_mbr_223", - "l_dsr_223", - "l_lmg_223", - "ksub2000", - "rm88_battle_rifle" - ], - "fg": 1344, - "rotates": false - }, - { - "id": "BFG", - "fg": 1345, - "rotates": false - }, - { - "id": "bomblet_launcher_brute", - "fg": 1346, - "rotates": false - }, - { - "id": "chemical_thrower", - "fg": 1347, - "rotates": false - }, - { - "id": [ - "compgreatbow", - "compbow" - ], - "fg": 1348, - "rotates": false - }, - { - "id": "ichaival_replica", - "fg": 1349, - "rotates": false - }, - { - "id": "compositebow", - "fg": 1350, - "rotates": false - }, - { - "id": [ - "shockcannon", - "shockcannon_plut", - "shockcannon_ups", - "emp_gun" - ], - "fg": 1351, - "rotates": false - }, - { - "id": [ - "revolver_shotgun", - "remington_870", - "mossberg_500", - "rm120c", - "m2browning", - "mark19", - "l_def_12", - "m1014", - "m2browning_sawn", - "abzats", - "ksg", - "shotgun_410" - ], - "fg": 1352, - "rotates": false - }, - { - "id": [ - "shotgun_s", - "pipe_shotgun", - "shotgun_d", - "pipe_double_shotgun", - "rebar_rifle", - "doublespeargun", - "blunderbuss", - "combination_gun", - "pipe_combination_gun", - "surv_levershotgun", - "410_pipe_shotgun", - "m6_asw" - ], - "fg": 1353, - "rotates": false - }, - { - "id": "trex_gun", - "fg": 1354, - "rotates": false - }, - { - "id": "flamethrower_crude", - "fg": 1355, - "rotates": false - }, - { - "id": "minispeargun", - "fg": 1356, - "rotates": false - }, - { - "id": [ - "moss_brownie", - "pistol_flintlock", - "2_shot_special", - "lemat_revolver", - "colt_saa", - "410_revolver" - ], - "fg": 1357, - "rotates": false - }, - { - "id": [ - "cop_38", - "sig_mosquito", - "sw_22", - "glock_17", - "glock_19", - "glock_22", - "usp_9mm", - "sw_619", - "taurus_38", - "sig_40", - "sw_610", - "sw_500", - "raging_bull", - "ruger_redhawk", - "deagle_44", - "usp_45", - "m1911", - "fn57", - "hk_ucp", - "tokarev", - "walther_ppk", - "sig_p230", - "l_enforcer_45", - "l_sp_9mm", - "l_mp_9mm", - "l_sp_45", - "l_mp_45", - "l_bak_223", - "l_lookout_9mm", - "surv_hand_cannon", - "surv_six_shooter", - "sw629", - "colt_navy", - "rm99_pistol", - "rm103a_pistol", - "colt_army", - "m9", - "makarov", - "ruger_lcr_22", - "ruger_lcr_38", - "ashot", - "needlepistol", - "p226_357sig", - "af2011a1_38super", - "bond_410", - "m1991a1_38super", - "raging_judge" - ], - "fg": 1358, - "rotates": false - }, - { - "id": "nailgun", - "fg": 1359, - "rotates": false - }, - { - "id": [ - "v29", - "v29_cheap" - ], - "fg": 1360, - "rotates": false - }, - { - "id": [ - "rx12_injector", - "rx11_stimpack" - ], - "fg": 1361, - "rotates": false - }, - { - "id": "wearable_rx12", - "fg": 1362, - "rotates": false - }, - { - "id": "flaregun", - "fg": 1363, - "rotates": false - }, - { - "id": [ - "nx17", - "hk_g80", - "plasma_rifle", - "laser_rifle", - "hell_laser_gun", - "hell_laser_gun_queen", - "coilgun", - "laser_rifle_cheap", - "ftk93" - ], - "fg": 1364, - "rotates": false - }, - { - "id": [ - "saiga_12", - "m1918", - "saiga_410" - ], - "fg": 1365, - "rotates": false - }, - { - "id": [ - "crossbow", - "huge_crossbow", - "rep_crossbow", - "bullet_crossbow", - "crossbow_makeshift", - "hand_crossbow" - ], - "fg": 1366, - "rotates": false - }, - { - "id": [ - "m320", - "rm228", - "triple_launcher_simple", - "launcher_simple" - ], - "fg": 1367, - "rotates": false - }, - { - "id": [ - "m202_flash", - "hell_launcher", - "LAW" - ], - "fg": 1368, - "rotates": false - }, - { - "id": "m3_carlgustav", - "fg": 1369, - "rotates": false - }, - { - "id": "mininuke_launcher", - "fg": 1370, - "rotates": false - }, - { - "id": "RPG", - "fg": 1371, - "rotates": false - }, - { - "id": "m79", - "fg": 1372, - "rotates": false - }, - { - "id": [ - "shortbow", - "recurbow", - "reflexbow", - "longbow", - "hybridbow", - "reflexrecurvebow", - "selfbow" - ], - "fg": 1373, - "rotates": false - }, - { - "id": [ - "ithaca_doom", - "ithaca_doom_dual", - "410_lever" - ], - "fg": 1374, - "rotates": false - }, - { - "id": [ - "pipe__gun_44", - "pipe_shotgunsawn" - ], - "fg": 1375, - "rotates": false - }, - { - "id": "shotgun_sawn", - "fg": 1376, - "rotates": false - }, - { - "id": "sling", - "fg": 1377, - "rotates": false - }, - { - "id": "slingshot", - "fg": 1378, - "rotates": false - }, - { - "id": "steyr_aug", - "fg": 1379, - "rotates": false - }, - { - "id": [ - "atgm_launcher", - "atgm_turret", - "howitzer_gun", - "tank_gun_auto", - "tank_gun_manual", - "tank_gun_rws", - "surv_rocket_launcher" - ], - "fg": 1380, - "rotates": false - }, - { - "id": "TDI", - "fg": 1381, - "rotates": false - }, - { - "id": [ - "retool_45", - "suppressor", - "grip", - "lwfeed", - "barrel_big", - "barrel_small", - "barrel_rifled", - "clip", - "clip2", - "spare_mag", - "brass_catcher", - "stabilizer", - "blowback", - "autofire", - "retool_9mm", - "retool_22", - "retool_57", - "retool_46", - "retool_308", - "retool_223", - "conversion_battle", - "conversion_sniper", - "m203", - "pipe_launcher40mm", - "u_shotgun", - "masterkey", - "gun_crossbow", - "laser_sight", - "improve_sights", - "red_dot_sight", - "holo_sight", - "rifle_scope", - "barrel_ported", - "pistol_grip", - "adjustable_stock", - "pistol_stock", - "crafted_suppressor", - "aux_flamer", - "pistol_bayonet", - "rm121aux", - "rail_laser_sight", - "pistol_scope", - "recoil_stock", - "waterproof_gunmod", - "tuned_mechanism", - "match_trigger", - "bipod", - "m320_mod", - "muzzle_brake", - "shot_suppressor", - "shoulder_strap", - "bow_sight", - "arrowrest", - "bow_stabilizer", - "folding_stock", - "light_grip", - "suppressor_compact", - "beltfeed", - "combination_gun_shotgun", - "combination_gun_shotgun_pipe", - "inter_bayonet", - "ksg_aux_shotgun", - "lemat_revolver_shotgun", - "offset_sights", - "riv_scope", - "riv_suppressor", - "acog_scope", - "autofire_654", - "beam_scatterer", - "electrolaser_conversion", - "high_density_capacitor", - "bomblet_undermod", - "M6_shotgun", - "retool_410", - "makeshift_pistol_bayonet", - "makeshift_sword_bayonet", - "sword_bayonet", - "ugl_buttstock", - "l_car_223_kit", - "l_mbr_223_kit", - "l_dsr_223_kit", - "l_lmg_223_kit", - "mn_classic_kit", - "mn_ebr_kit", - "makeshift_bayonet", - "briefcase_smg" - ], - "fg": 1382, - "rotates": false - }, - { - "id": [ - "small_repairkit", - "large_repairkit", - "misc_repairkit", - "weather_reader", - "briefcase", - "l_HFPack" - ], - "fg": 1383, - "rotates": false - }, - { - "id": [ - "suitcase_l", - "radio_car_box" - ], - "fg": 1384, - "rotates": false - }, - { - "id": "suitcase_m", - "fg": 1385, - "rotates": false - }, - { - "id": [ - "stethoscope", - "wristrocket" - ], - "fg": 1386, - "rotates": false - }, - { - "id": "hygrometer", - "fg": 1387, - "rotates": false - }, - { - "id": [ - "barometer", - "clock" - ], - "fg": 1388, - "rotates": false - }, - { - "id": "vp_vehicle_clock", - "fg": 1388, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "alarmclock", - "fg": 1389, - "rotates": false - }, - { - "id": [ - "blade", - "metal_smoother" - ], - "fg": 1390, - "rotates": false - }, - { - "id": [ - "bwirebat", - "battletorch" - ], - "fg": 1391, - "rotates": false - }, - { - "id": "coffeemaker", - "fg": 1392, - "rotates": false - }, - { - "id": [ - "fan", - "polisher" - ], - "fg": 1393, - "rotates": false - }, - { - "id": [ - "fishing_hook_basic", - "fishing_hook_bone", - "needle_curved" - ], - "fg": 1394, - "rotates": false - }, - { - "id": "copper_ax", - "fg": 1395, - "rotates": false - }, - { - "id": [ - "hatchet", - "ax" - ], - "fg": 1396, - "rotates": false - }, - { - "id": [ - "mace", - "paint_brush" - ], - "fg": 1397, - "rotates": false - }, - { - "id": [ - "pilot_light", - "crude_firestarter" - ], - "fg": 1398, - "rotates": false - }, - { - "id": "pocketwatch", - "fg": 1399, - "rotates": false - }, - { - "id": [ - "processor", - "RAM", - "amplifier", - "transponder", - "receiver", - "radio_repeater_mod", - "circuit", - "radio_mod" - ], - "fg": 1400, - "rotates": false - }, - { - "id": [ - "l-stick", - "skewer_bone" - ], - "fg": 1401, - "rotates": false - }, - { - "id": "l-stick_on", - "fg": 1402, - "rotates": false - }, - { - "id": "q_staff", - "fg": 1403, - "rotates": false - }, - { - "id": [ - "rebar", - "spear_rebar", - "spear_steel", - "spear_pipe", - "flute" - ], - "fg": 1404, - "rotates": false - }, - { - "id": "nailboard", - "fg": 1405, - "rotates": false - }, - { - "id": [ - "jian_inferior", - "sword_forged", - "jian_fake", - "jian" - ], - "fg": 1406, - "rotates": false - }, - { - "id": [ - "wood_smoother", - "tonfa_wood" - ], - "fg": 1407, - "rotates": false - }, - { - "id": "shocktonfa_on", - "fg": 1408, - "rotates": false - }, - { - "id": [ - "tonfa", - "PR24-retracted", - "PR24-extended", - "shocktonfa_off" - ], - "fg": 1409, - "rotates": false - }, - { - "id": "golf_bag", - "fg": 1410, - "rotates": false - }, - { - "id": "LAW_Packed", - "fg": 1411, - "rotates": false - }, - { - "id": [ - "multi_cooker", - "mon_hallu_multicooker", - "safe_box" - ], - "fg": 1412, - "rotates": false - }, - { - "id": [ - "UPS_off", - "UPS_off" - ], - "fg": 1413, - "rotates": false - }, - { - "id": [ - "adv_UPS_off", - "adv_UPS_off" - ], - "fg": 1414, - "rotates": false - }, - { - "id": "airhorn", - "fg": 1415, - "rotates": false - }, - { - "id": "aperture_potato", - "fg": 1416, - "rotates": false - }, - { - "id": [ - "ukulele", - "violin", - "acoustic_guitar", - "banjo" - ], - "fg": 1417, - "rotates": false - }, - { - "id": "violin_golden", - "fg": 1418, - "rotates": false - }, - { - "id": [ - "battleaxe_inferior", - "battleaxe_fake", - "battleaxe" - ], - "fg": 1419, - "rotates": false - }, - { - "id": "battletorch_lit", - "fg": 1420, - "rotates": false - }, - { - "id": "black_box", - "fg": 1421, - "rotates": false - }, - { - "id": "minion_dormant", - "fg": 1422, - "rotates": false - }, - { - "id": "blob_dormant", - "fg": 1423, - "rotates": false - }, - { - "id": "boltcutters", - "fg": 1424, - "rotates": false - }, - { - "id": [ - "bomblet_vile_act", - "bomblet_archvile_act" - ], - "fg": 1425, - "rotates": false - }, - { - "id": "bomblet_chickenbot_act", - "fg": 1426, - "rotates": false - }, - { - "id": "bomblet_stun_act", - "fg": 1427, - "rotates": false - }, - { - "id": "bone_flute", - "fg": 1428, - "rotates": false - }, - { - "id": [ - "zweifire_off", - "broadfire_off" - ], - "fg": 1429, - "rotates": false - }, - { - "id": "sword_crude", - "fg": 1430, - "rotates": false - }, - { - "id": [ - "zweifire_on", - "broadfire_on" - ], - "fg": 1431, - "rotates": false - }, - { - "id": [ - "broadsword_inferior", - "zweihander", - "zweihander_inferior", - "arming_sword", - "arming_sword_inferior", - "longsword", - "longsword_inferior", - "broadsword_fake", - "zweihander_fake", - "arming_sword_fake", - "longsword_fake", - "broadsword" - ], - "fg": 1432, - "rotates": false - }, - { - "id": "sword_wood", - "fg": 1433, - "rotates": false - }, - { - "id": "c4", - "fg": 1434, - "rotates": false - }, - { - "id": "c4armed", - "fg": 1435, - "rotates": false - }, - { - "id": "camera", - "fg": 1436, - "rotates": false - }, - { - "id": "camera_pro", - "fg": 1437, - "rotates": false - }, - { - "id": [ - "candle_smoke", - "candle" - ], - "fg": 1438, - "rotates": false - }, - { - "id": [ - "candle_smoke_lit", - "candle_lit" - ], - "fg": 1439, - "rotates": false - }, - { - "id": [ - "carver_on", - "carver_off" - ], - "fg": 1440, - "rotates": false - }, - { - "id": [ - "gasdiscount_gold", - "cash_card" - ], - "fg": 1441, - "rotates": false - }, - { - "id": [ - "gasdiscount_silver", - "gasdiscount_platinum" - ], - "fg": 1442, - "rotates": false - }, - { - "id": "id_military", - "fg": 1443, - "rotates": false - }, - { - "id": "id_science", - "fg": 1444, - "rotates": false - }, - { - "id": "cattlefodder", - "fg": 1445, - "rotates": false - }, - { - "id": "cell_phone", - "fg": 1446, - "rotates": false - }, - { - "id": "cell_phone_flashlight", - "fg": 1447, - "rotates": false - }, - { - "id": [ - "chainsaw_on", - "elec_chainsaw_off", - "elec_chainsaw_on", - "chainsaw_off" - ], - "fg": 1448, - "rotates": false - }, - { - "id": [ - "combatsaw_off", - "combatsaw_on" - ], - "fg": 1449, - "rotates": false - }, - { - "id": "char_purifier", - "fg": 1450, - "rotates": false - }, - { - "id": [ - "chemistry_set_basic", - "chemistry_set" - ], - "fg": 1451, - "rotates": false - }, - { - "id": [ - "chipper", - "chisel" - ], - "fg": 1452, - "rotates": false - }, - { - "id": "screwdriver", - "fg": 1453, - "rotates": false - }, - { - "id": "screwdriver_set", - "fg": 1454, - "rotates": false - }, - { - "id": "soldering_iron", - "fg": 1455, - "rotates": false - }, - { - "id": [ - "circsaw_on", - "circsaw_off" - ], - "fg": 1456, - "rotates": false - }, - { - "id": "clarinet", - "fg": 1457, - "rotates": false - }, - { - "id": "laptop", - "fg": 1458, - "rotates": false - }, - { - "id": "control_laptop", - "fg": 1459, - "rotates": false - }, - { - "id": "con_mix", - "fg": 1460, - "rotates": false - }, - { - "id": "cordless_drill", - "fg": 1461, - "rotates": false - }, - { - "id": "cow_bell", - "fg": 1462, - "rotates": false - }, - { - "id": "crackpipe", - "fg": 1463, - "rotates": false - }, - { - "id": [ - "makeshift_crowbar", - "halligan", - "crowbar" - ], - "fg": 1464, - "rotates": false - }, - { - "id": "crucible", - "fg": 1465, - "rotates": false - }, - { - "id": "picklocks", - "fg": 1466, - "rotates": false - }, - { - "id": "crude_picklock", - "fg": 1467, - "rotates": false - }, - { - "id": [ - "cs_lajatang_on", - "cs_lajatang_off" - ], - "fg": 1468, - "rotates": false - }, - { - "id": "dao", - "fg": 1469, - "rotates": false - }, - { - "id": "dehydrator", - "fg": 1470, - "rotates": false - }, - { - "id": [ - "whistle", - "dog_whistle" - ], - "fg": 1471, - "rotates": false - }, - { - "id": "dusksword", - "fg": 1472, - "rotates": false - }, - { - "id": "dynamite", - "fg": 1473, - "rotates": false - }, - { - "id": "dynamite_act", - "fg": 1474, - "rotates": false - }, - { - "id": "eink_tablet_pc", - "fg": 1475, - "rotates": false - }, - { - "id": "electrohack", - "fg": 1476, - "rotates": false - }, - { - "id": "elec_hairtrimmer", - "fg": 1477, - "rotates": false - }, - { - "id": "etched_skull", - "fg": 1478, - "rotates": false - }, - { - "id": [ - "sm_extinguisher", - "extinguisher" - ], - "fg": 1479, - "rotates": false - }, - { - "id": "throw_extinguisher", - "fg": 1480, - "rotates": false - }, - { - "id": [ - "tool_black_powder_charge", - "fertilizer_bomb" - ], - "fg": 1481, - "rotates": false - }, - { - "id": [ - "tool_black_powder_charge_act", - "fertilizer_bomb_act" - ], - "fg": 1482, - "rotates": false - }, - { - "id": "firecracker", - "fg": 1483, - "rotates": false - }, - { - "id": "firecracker_act", - "fg": 1484, - "rotates": false - }, - { - "id": "firecracker_pack", - "fg": 1485, - "rotates": false - }, - { - "id": "firecracker_pack_act", - "fg": 1486, - "rotates": false - }, - { - "id": "firekatana_off", - "fg": 1487, - "rotates": false - }, - { - "id": "firekatana_on", - "fg": 1488, - "rotates": false - }, - { - "id": [ - "shishkebab_off", - "firemachete_off" - ], - "fg": 1489, - "rotates": false - }, - { - "id": [ - "shishkebab_on", - "firemachete_on" - ], - "fg": 1490, - "rotates": false - }, - { - "id": "fire_ax", - "fg": 1491, - "rotates": false - }, - { - "id": [ - "fire_drill_large", - "fire_drill" - ], - "fg": 1492, - "rotates": false - }, - { - "id": "fishing_rod_professional", - "fg": 1493, - "rotates": false - }, - { - "id": "fishing_rod_basic", - "fg": 1494, - "rotates": false - }, - { - "id": [ - "heavy_flashlight", - "reading_light", - "flashlight" - ], - "fg": 1495, - "rotates": false - }, - { - "id": [ - "heavy_flashlight_on", - "reading_light_on", - "flashlight_on" - ], - "fg": 1496, - "rotates": false - }, - { - "id": "flint_steel", - "fg": 1497, - "rotates": false - }, - { - "id": [ - "v_planter_item", - "v_planter_item_advanced", - "v_plow_item", - "v_reaper_item", - "v_reaper_item_advanced", - "v_scoop_item", - "folding_bicycle" - ], - "fg": 1498, - "rotates": false - }, - { - "id": "food_processor", - "fg": 1499, - "rotates": false - }, - { - "id": "char_smoker", - "fg": 1500, - "rotates": false - }, - { - "id": "forge", - "fg": 1501, - "rotates": false - }, - { - "id": "tr_metal_funnel", - "fg": 1502, - "rotates": false - }, - { - "id": "tr_funnel", - "fg": 1503, - "rotates": false - }, - { - "id": "tr_makeshift_funnel", - "fg": 1504, - "rotates": false - }, - { - "id": [ - "tr_raincatcher", - "t_raincatcher" - ], - "fg": 1505, - "rotates": false - }, - { - "id": "tr_leather_funnel", - "fg": 1506, - "rotates": false - }, - { - "id": "vp_funnel", - "fg": 1503, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "vp_makeshift_funnel", - "fg": 1504, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "vp_leather_funnel", - "fg": 1506, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "vp_metal_funnel", - "fg": 1502, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "leather_funnel", - "fg": 1507, - "rotates": false - }, - { - "id": "makeshift_funnel", - "fg": 1508, - "rotates": false - }, - { - "id": "metal_funnel", - "fg": 1509, - "rotates": false - }, - { - "id": "funnel", - "fg": 1510, - "rotates": false - }, - { - "id": "teleporter", - "fg": 1511, - "rotates": false - }, - { - "id": "geiger_off", - "fg": 1512, - "rotates": false - }, - { - "id": "geiger_on", - "fg": 1513, - "rotates": false - }, - { - "id": "glowstick_dead", - "fg": 1514, - "rotates": false - }, - { - "id": "glowstick_lit", - "fg": 1515, - "rotates": false - }, - { - "id": "glowstick", - "fg": 1516, - "rotates": false - }, - { - "id": "granade", - "fg": 1517, - "rotates": false - }, - { - "id": "granade_act", - "fg": 1518, - "rotates": false - }, - { - "id": "grenade", - "fg": 1519, - "rotates": false - }, - { - "id": "grenade_act", - "fg": 1520, - "rotates": false - }, - { - "id": "saw", - "fg": 1521, - "rotates": false - }, - { - "id": "hacksaw", - "fg": 1522, - "rotates": false - }, - { - "id": "hammer", - "fg": 1523, - "rotates": false - }, - { - "id": "handflare", - "fg": 1524, - "rotates": false - }, - { - "id": "handflare_act", - "fg": 1525, - "rotates": false - }, - { - "id": "handflare_lit", - "fg": 1526, - "rotates": false - }, - { - "id": "hand_drill", - "fg": 1527, - "rotates": false - }, - { - "id": "hand_pump", - "fg": 1528, - "rotates": false - }, - { - "id": "heatpack_used", - "fg": 1529, - "rotates": false - }, - { - "id": "vp_vehicle_scoop", - "fg": 1529, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "vp_plow", - "fg": 1530, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 1531 - } - ] - }, - { - "id": "heatpack", - "fg": 1532, - "rotates": false - }, - { - "id": [ - "hobo_stove", - "esbit_stove" - ], - "fg": 1533, - "rotates": false - }, - { - "id": "hobo_stove_on", - "fg": 1534, - "rotates": false - }, - { - "id": "hoe", - "fg": 1535, - "rotates": false - }, - { - "id": [ - "horn_car", - "horn_big", - "beeper", - "chimes", - "horn_bicycle" - ], - "fg": 1536, - "rotates": false - }, - { - "id": [ - "gasoline_cooker", - "oil_cooker", - "hotplate" - ], - "fg": 1537, - "rotates": false - }, - { - "id": "inflatable_boat", - "fg": 1538, - "rotates": false - }, - { - "id": [ - "jack_makeshift", - "jack_small", - "jack" - ], - "fg": 1539, - "rotates": false - }, - { - "id": [ - "elec_jackhammer", - "jackhammer" - ], - "fg": 1540, - "rotates": false - }, - { - "id": [ - "jumper_cable_heavy", - "jumper_cable" - ], - "fg": 1541, - "rotates": false - }, - { - "id": [ - "katana_inferior", - "tanto", - "wakizashi", - "wakizashi_inferior", - "kukri", - "cutlass", - "cutlass_inferior", - "nodachi", - "scimitar", - "scimitar_inferior", - "cavalry_sabre", - "katana_fake", - "wakizashi_fake", - "cutlass_fake", - "nodachi_fake", - "scimitar_fake", - "cavalry_sabre_fake", - "katana" - ], - "fg": 1542, - "rotates": false - }, - { - "id": "bokken", - "fg": 1543, - "rotates": false - }, - { - "id": "kevlar_harness", - "fg": 1544, - "rotates": false - }, - { - "id": "ceramic_armor", - "fg": 1545, - "rotates": false - }, - { - "id": "kevlar_plate", - "fg": 1546, - "rotates": false - }, - { - "id": "khopesh", - "fg": 1547, - "rotates": false - }, - { - "id": [ - "multitool", - "knife_swissarmy" - ], - "fg": 1548, - "rotates": false - }, - { - "id": "pockknife", - "fg": 1549, - "rotates": false - }, - { - "id": "laevateinn_replica", - "fg": 1550, - "rotates": false - }, - { - "id": "lighter", - "fg": 1551, - "rotates": false - }, - { - "id": "lightstrip", - "fg": 1552, - "rotates": false - }, - { - "id": "lightstrip_inactive", - "fg": 1553, - "rotates": false - }, - { - "id": "link_sheet", - "fg": 1554, - "rotates": false - }, - { - "id": "lobotomizer", - "fg": 1555, - "rotates": false - }, - { - "id": [ - "survivor_machete", - "machete" - ], - "fg": 1556, - "rotates": false - }, - { - "id": [ - "pan", - "waffleiron" - ], - "fg": 1557, - "rotates": false - }, - { - "id": "magnifying_glass", - "fg": 1558, - "rotates": false - }, - { - "id": "makeshift_axe", - "fg": 1559, - "rotates": false - }, - { - "id": "makeshift_machete", - "fg": 1560, - "rotates": false - }, - { - "id": "matchbomb", - "fg": 1561, - "rotates": false - }, - { - "id": "matchbomb_act", - "fg": 1562, - "rotates": false - }, - { - "id": "matches", - "fg": 1563, - "rotates": true - }, - { - "id": "mininuke_act", - "fg": 1564, - "rotates": false - }, - { - "id": "mold_plastic", - "fg": 1565, - "rotates": false - }, - { - "id": [ - "molotov_micro", - "molotov" - ], - "fg": 1566, - "rotates": false - }, - { - "id": [ - "molotov_micro_act", - "molotov_lit" - ], - "fg": 1567, - "rotates": false - }, - { - "id": "mop", - "fg": 1568, - "rotates": false - }, - { - "id": "mortar_pestle", - "fg": 1569, - "rotates": false - }, - { - "id": "mp3", - "fg": 1570, - "rotates": false - }, - { - "id": "mp3_on", - "fg": 1571, - "rotates": false - }, - { - "id": "needle_wood", - "fg": 1572, - "rotates": false - }, - { - "id": "needle_bone", - "fg": 1573, - "rotates": false - }, - { - "id": "radio", - "fg": 1574, - "rotates": false - }, - { - "id": "noise_emitter", - "fg": 1575, - "rotates": false - }, - { - "id": "radio_on", - "fg": 1576, - "rotates": false - }, - { - "id": "noise_emitter_on", - "fg": 1577, - "rotates": false - }, - { - "id": [ - "smart_lamp", - "gasoline_lantern", - "electric_lantern", - "oxylamp", - "atomic_lamp_off", - "oil_lamp" - ], - "fg": 1578, - "rotates": false - }, - { - "id": [ - "smart_lamp_on", - "gasoline_lantern_on", - "electric_lantern_on", - "oxylamp_on", - "oil_lamp_on" - ], - "fg": 1579, - "rotates": false - }, - { - "id": "atomic_lamp", - "fg": 1580, - "rotates": false - }, - { - "id": "vp_atomic_lamp", - "fg": 1580, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": [ - "smoxygen_tank", - "scuba_tank", - "scuba_tank_on", - "small_scuba_tank", - "small_scuba_tank_on", - "oxygen_tank" - ], - "fg": 1581, - "rotates": false - }, - { - "id": "pet_carrier", - "fg": 1582, - "rotates": false - }, - { - "id": "pheromone", - "fg": 1583, - "rotates": false - }, - { - "id": [ - "iceaxe", - "pickaxe" - ], - "fg": 1584, - "rotates": false - }, - { - "id": [ - "tool_rdx_sand_bomb", - "pipebomb" - ], - "fg": 1585, - "rotates": false - }, - { - "id": [ - "tool_rdx_sand_bomb_act", - "pipebomb_act" - ], - "fg": 1586, - "rotates": false - }, - { - "id": "pipe_glass", - "fg": 1587, - "rotates": false - }, - { - "id": "pipe_tobacco", - "fg": 1588, - "rotates": false - }, - { - "id": "plastic_chunk", - "fg": 1589, - "rotates": false - }, - { - "id": "pokeball", - "fg": 1590, - "rotates": false - }, - { - "id": "portable_game", - "fg": 1591, - "rotates": false - }, - { - "id": "portal", - "fg": 1592, - "rotates": false - }, - { - "id": "press", - "fg": 1593, - "rotates": false - }, - { - "id": [ - "primitive_adze", - "hand_axe", - "primitive_axe" - ], - "fg": 1594, - "rotates": false - }, - { - "id": [ - "makeshift_hammer", - "primitive_hammer" - ], - "fg": 1595, - "rotates": false - }, - { - "id": [ - "makeshift_shovel", - "primitive_shovel" - ], - "fg": 1596, - "rotates": false - }, - { - "id": "puller", - "fg": 1597, - "rotates": false - }, - { - "id": [ - "remotevehcontrol", - "radiocontrol" - ], - "fg": 1598, - "rotates": false - }, - { - "id": "radio_car", - "fg": 1599, - "rotates": false - }, - { - "id": "radio_car_on", - "fg": 1600, - "rotates": false - }, - { - "id": [ - "rapier_fake", - "fencing_foil", - "fencing_epee", - "fencing_sabre", - "estoc", - "estoc_fake", - "rapier" - ], - "fg": 1601, - "rotates": false - }, - { - "id": "ref_lighter", - "fg": 1602, - "rotates": false - }, - { - "id": "ref_lighter_dare", - "fg": 1603, - "rotates": false - }, - { - "id": "ref_lighter_on", - "fg": 1604, - "rotates": false - }, - { - "id": "rocket_core", - "fg": 1605, - "rotates": false - }, - { - "id": "rocket_core_act", - "fg": 1606, - "rotates": false - }, - { - "id": "clay_quern", - "fg": 1607, - "rotates": false - }, - { - "id": "rock_quern", - "fg": 1608, - "rotates": false - }, - { - "id": "scalpel", - "fg": 1609, - "rotates": false - }, - { - "id": "scissors", - "fg": 1610, - "rotates": false - }, - { - "id": "scythe", - "fg": 1611, - "rotates": false - }, - { - "id": [ - "tailors_kit", - "sewing_kit" - ], - "fg": 1612, - "rotates": false - }, - { - "id": [ - "shavingkit", - "survivor_shavingkit" - ], - "fg": 1613, - "rotates": false - }, - { - "id": "i_staff", - "fg": 1614, - "rotates": false - }, - { - "id": "shock_staff", - "fg": 1615, - "rotates": false - }, - { - "id": [ - "e_tool", - "g_shovel", - "e_tool_chinese", - "shovel" - ], - "fg": 1616, - "rotates": false - }, - { - "id": "sickle", - "fg": 1617, - "rotates": false - }, - { - "id": "smoke_machine", - "fg": 1618, - "rotates": false - }, - { - "id": "smoke_machine_act", - "fg": 1619, - "rotates": false - }, - { - "id": "smoke_machine_unpreped", - "fg": 1620, - "rotates": false - }, - { - "id": "spess_chunk", - "fg": 1621 - }, - { - "id": "spray_can", - "fg": 1622, - "rotates": false - }, - { - "id": "stepladder", - "fg": 1623, - "rotates": false - }, - { - "id": "survivor_hairtrimmer", - "fg": 1624, - "rotates": false - }, - { - "id": "survivor_scope", - "fg": 1625, - "rotates": false - }, - { - "id": "swage", - "fg": 1626, - "rotates": false - }, - { - "id": "sword_xiphos", - "fg": 1627, - "rotates": false - }, - { - "id": "syringe", - "fg": 1628, - "rotates": false - }, - { - "id": [ - "creepy_doll", - "talking_doll" - ], - "fg": 1629, - "rotates": false - }, - { - "id": "straw_doll", - "fg": 1630, - "rotates": false - }, - { - "id": "teddy", - "fg": 1631, - "rotates": false - }, - { - "id": "tazer", - "fg": 1632, - "rotates": false - }, - { - "id": "thermometer", - "fg": 1633, - "rotates": false - }, - { - "id": "tinderbox", - "fg": 1634, - "rotates": false - }, - { - "id": "tinderbox_on", - "fg": 1635, - "rotates": false - }, - { - "id": [ - "pliers", - "tongs" - ], - "fg": 1636, - "rotates": false - }, - { - "id": "toolbox", - "fg": 1637, - "rotates": false - }, - { - "id": [ - "tool_rdx_charge", - "tool_anfo_charge" - ], - "fg": 1638, - "rotates": false - }, - { - "id": [ - "tool_rdx_charge_act", - "tool_anfo_charge_act" - ], - "fg": 1639, - "rotates": false - }, - { - "id": [ - "gasbomb_makeshift", - "tool_black_powder_bomb" - ], - "fg": 1640, - "rotates": false - }, - { - "id": [ - "gasbomb_makeshift_act", - "tool_black_powder_bomb_act" - ], - "fg": 1641, - "rotates": false - }, - { - "id": "torch", - "fg": 1642, - "rotates": false - }, - { - "id": "torch_lit", - "fg": 1643, - "rotates": false - }, - { - "id": "triffid_sap_grenade_act", - "fg": 1644, - "rotates": false - }, - { - "id": "triffid_sap_thrown", - "fg": 1645, - "rotates": false - }, - { - "id": [ - "trimmer_on", - "trimmer_off" - ], - "fg": 1646, - "rotates": false - }, - { - "id": [ - "tuba", - "trumpet" - ], - "fg": 1647, - "rotates": false - }, - { - "id": "two_way_radio", - "fg": 1648, - "rotates": false - }, - { - "id": [ - "makeshift_sealer", - "battery_ups", - "magazine_battery_mod", - "stereo", - "vac_sealer" - ], - "fg": 1649, - "rotates": false - }, - { - "id": "spiral_stone", - "fg": 1650, - "rotates": false - }, - { - "id": "vortex_stone", - "fg": 1651, - "rotates": false - }, - { - "id": "washboard", - "fg": 1652, - "rotates": false - }, - { - "id": [ - "oxy_torch", - "welder" - ], - "fg": 1653, - "rotates": false - }, - { - "id": "welder_crude", - "fg": 1654, - "rotates": false - }, - { - "id": "whistle_multitool", - "fg": 1655, - "rotates": false - }, - { - "id": [ - "badge_deputy", - "badge_marshal", - "badge_detective", - "badge_cybercop", - "badge_swat" - ], - "fg": 1656, - "rotates": false - }, - { - "id": [ - "rad_badge", - "wrapped_rad_badge" - ], - "fg": 1657, - "rotates": false - }, - { - "id": "wrench", - "fg": 1658, - "rotates": false - }, - { - "id": "xacto", - "fg": 1659, - "rotates": false - }, - { - "id": [ - "fish_trap", - "water_purifier" - ], - "fg": 1660, - "rotates": false - }, - { - "id": "vp_water_purifier", - "fg": 1660, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 1661 - } - ] - }, - { - "id": "vp_minireactor", - "fg": 1662, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 1183 - } - ] - }, - { - "id": "minireactor", - "fg": 1662, - "rotates": false - }, - { - "id": [ - "double_plutonium_core", - "it_battery_mount", - "battery_compartment" - ], - "fg": 1663, - "rotates": false - }, - { - "id": [ - "rm13_armor_on", - "armor_lightplate", - "cuirass_lightplate", - "armor_lorica", - "armor_plate", - "entry_suit", - "chainmail_suit", - "motorbike_armor", - "shark_suit", - "shark_suit_faraday", - "chainmail_hauberk", - "rm13_armor" - ], - "fg": 1664, - "rotates": false - }, - { - "id": "armor_bone", - "fg": 1665, - "rotates": false - }, - { - "id": "armor_chitin", - "fg": 1666, - "rotates": false - }, - { - "id": [ - "armor_larmor", - "armor_blarmor", - "touring_suit", - "armor_lamellar" - ], - "fg": 1667, - "rotates": false - }, - { - "id": "bookplate", - "fg": 1668, - "rotates": false - }, - { - "id": "football_armor", - "fg": 1669, - "rotates": false - }, - { - "id": "swat_armor", - "fg": 1670, - "rotates": false - }, - { - "id": [ - "mask_ski_loose", - "thermal_mask", - "thermal_mask_on", - "balclava", - "mask_ski" - ], - "fg": 1671, - "rotates": false - }, - { - "id": "f_leather_tarp", - "fg": 1672, - "rotates": false - }, - { - "id": "leather_tarp", - "fg": 1673, - "rotates": false - }, - { - "id": [ - "emer_blanket", - "generic_folded_vehicle" - ], - "fg": 1674, - "rotates": false - }, - { - "id": "p_carpet", - "fg": 1675, - "rotates": false - }, - { - "id": "r_carpet", - "fg": 1676, - "rotates": false - }, - { - "id": "y_carpet", - "fg": 1677, - "rotates": false - }, - { - "id": "fiber_mat", - "fg": 1678, - "rotates": false - }, - { - "id": "g_carpet", - "fg": 1679, - "rotates": false - }, - { - "id": "fur_rollmat", - "fg": 1680, - "rotates": false - }, - { - "id": "rollmat", - "fg": 1681, - "rotates": false - }, - { - "id": "cot", - "fg": 1682, - "rotates": false - }, - { - "id": "electric_blanket", - "fg": 1683, - "rotates": false - }, - { - "id": "emer_blanket_on", - "fg": 1684, - "rotates": false - }, - { - "id": "towel", - "fg": 1685, - "rotates": false - }, - { - "id": "towel_soiled", - "fg": 1686, - "rotates": false - }, - { - "id": [ - "blanket", - "down_blanket", - "towel_wet" - ], - "fg": 1687, - "rotates": false - }, - { - "id": "sleeping_bag", - "fg": 1688, - "rotates": false - }, - { - "id": "snuggie", - "fg": 1689, - "rotates": false - }, - { - "id": [ - "fur_blanket", - "sleeping_bag_fur" - ], - "fg": 1690, - "rotates": false - }, - { - "id": "electric_blanket_on", - "fg": 1691, - "rotates": false - }, - { - "id": "american_flag", - "fg": 1692, - "rotates": false - }, - { - "id": [ - "thermal_socks_on", - "cleats", - "tabi_dress", - "wetsuit_booties", - "nomex_socks", - "boots_h20survivor", - "thermal_socks" - ], - "fg": 1693, - "rotates": false - }, - { - "id": "clownshoes", - "fg": 1694, - "rotates": false - }, - { - "id": [ - "socks", - "tabi_gi", - "socks_bowling", - "sockmitts" - ], - "fg": 1695, - "rotates": false - }, - { - "id": [ - "socks_wool", - "geta" - ], - "fg": 1696, - "rotates": false - }, - { - "id": [ - "blazer", - "jacket_windbreaker" - ], - "fg": 1697, - "rotates": false - }, - { - "id": [ - "coat_rain", - "bunker_coat", - "folding_poncho_on" - ], - "fg": 1698, - "rotates": false - }, - { - "id": [ - "coat_winter", - "jacket_leather_red" - ], - "fg": 1699, - "rotates": false - }, - { - "id": [ - "jacket_jean", - "jacket_evac" - ], - "fg": 1700, - "rotates": false - }, - { - "id": "jacket_leather", - "fg": 1701, - "rotates": false - }, - { - "id": [ - "jacket_light", - "cassock" - ], - "fg": 1702, - "rotates": false - }, - { - "id": [ - "keikogi", - "kariginu", - "kimono", - "kittel", - "thawb", - "coat_lab", - "jacket_chef", - "beekeeping_suit", - "fencing_jacket", - "winter_jacket_army" - ], - "fg": 1703, - "rotates": false - }, - { - "id": [ - "peacoat", - "gambeson" - ], - "fg": 1704, - "rotates": false - }, - { - "id": [ - "cowboy_hat", - "fedora" - ], - "fg": 1705, - "rotates": false - }, - { - "id": [ - "hairpin", - "distaff_spindle" - ], - "fg": 1706, - "rotates": false - }, - { - "id": "fc_hairpin", - "fg": 1707, - "rotates": false - }, - { - "id": [ - "powered_earmuffs_on", - "hat_noise_cancelling", - "powered_earmuffs" - ], - "fg": 1708, - "rotates": false - }, - { - "id": [ - "helmet_riot_raised", - "tac_fullhelmet", - "helmet_riot" - ], - "fg": 1709, - "rotates": false - }, - { - "id": [ - "helmet_football", - "headgear" - ], - "fg": 1710, - "rotates": false - }, - { - "id": "keffiyeh", - "fg": 1711, - "rotates": false - }, - { - "id": [ - "mask_filter", - "mask_filter" - ], - "fg": 1712, - "rotates": false - }, - { - "id": [ - "mask_gas_xl", - "mask_survivor", - "mask_survivorxl", - "mask_hsurvivor", - "mask_lsurvivor", - "mask_bunker", - "mask_bunker_on", - "mask_wsurvivor", - "mask_wsurvivorxl", - "mask_fsurvivor", - "mask_fsurvivorxl", - "mask_h20survivor", - "mask_h20survivor_on", - "mask_h20survivorxl", - "mask_h20survivorxl_on", - "rebreather", - "rebreather_on", - "rebreather_xl", - "rebreather_xl_on", - "mask_gas" - ], - "fg": 1713, - "rotates": false - }, - { - "id": [ - "q_solarpack_on", - "solarpack_on" - ], - "fg": 1714, - "rotates": false - }, - { - "id": "copper_bracelet", - "fg": 1715, - "rotates": false - }, - { - "id": "gold_bracelet", - "fg": 1716, - "rotates": false - }, - { - "id": [ - "silver_bracelet", - "rad_monitor" - ], - "fg": 1717, - "rotates": false - }, - { - "id": [ - "bowhat", - "porkpie" - ], - "fg": 1718, - "rotates": false - }, - { - "id": [ - "straw_hat", - "hat_sombrero", - "straw_fedora" - ], - "fg": 1719, - "rotates": false - }, - { - "id": "tarp", - "fg": 1720, - "rotates": false - }, - { - "id": [ - "vest", - "waistcoat", - "sleeveless_trenchcoat", - "chainmail_vest", - "sleeveless_duster", - "vest_leather_mod", - "cloak" - ], - "fg": 1721, - "rotates": false - }, - { - "id": "cloak_fur", - "fg": 1722, - "rotates": false - }, - { - "id": [ - "vest_leather", - "sleeveless_trenchcoat_leather", - "sleeveless_trenchcoat_fur", - "sleeveless_trenchcoat_survivor", - "sleeveless_duster_fur", - "sleeveless_duster_leather", - "sleeveless_duster_survivor", - "cloak_leather", - "jedi_cloak" - ], - "fg": 1723, - "rotates": false - }, - { - "id": "optical_cloak", - "fg": 1724, - "rotates": false - }, - { - "id": "cloak_wool", - "fg": 1725, - "rotates": false - }, - { - "id": "holo_cloak", - "fg": 1726, - "rotates": false - }, - { - "id": "vest_leather_zuicide_short", - "fg": 1727, - "rotates": false - }, - { - "id": "vest_leather_zuicide_short_active", - "fg": 1728, - "rotates": false - }, - { - "id": "flotation_vest_ms", - "fg": 1729, - "rotates": false - }, - { - "id": "flotation_vest", - "fg": 1730, - "rotates": false - }, - { - "id": "tux", - "fg": 1731, - "rotates": false - }, - { - "id": [ - "thermal_suit_on", - "thermal_outfit", - "thermal_outfit_on", - "wetsuit", - "nomex_suit", - "stillsuit", - "thermal_suit" - ], - "fg": 1732, - "rotates": false - }, - { - "id": "armor_samurai", - "fg": 1733, - "rotates": false - }, - { - "id": "bondage_suit", - "fg": 1734, - "rotates": false - }, - { - "id": [ - "clown_suit", - "karate_gi", - "judo_gi" - ], - "fg": 1735, - "rotates": false - }, - { - "id": "dinosuit", - "fg": 1736, - "rotates": false - }, - { - "id": [ - "hazmat_suit", - "cleansuit", - "subsuit_xl" - ], - "fg": 1737, - "rotates": false - }, - { - "id": [ - "jumpsuit", - "jumpsuit_xl" - ], - "fg": 1738, - "rotates": false - }, - { - "id": [ - "union_suit", - "wool_suit" - ], - "fg": 1739, - "rotates": false - }, - { - "id": [ - "wetsuit_spring", - "halter_top", - "tunic_rag" - ], - "fg": 1740, - "rotates": false - }, - { - "id": [ - "thermal_gloves_on", - "wetsuit_gloves", - "nomex_gloves", - "gloves_fsurvivor", - "gloves_h20survivor", - "gloves_hsurvivor", - "gloves_plate", - "megaarmor_gloves_1", - "thermal_gloves" - ], - "fg": 1741, - "rotates": false - }, - { - "id": [ - "fire_gauntlets", - "gloves_survivor", - "gloves_xlsurvivor" - ], - "fg": 1742, - "rotates": false - }, - { - "id": [ - "gauntlets_bone", - "beekeeping_gloves" - ], - "fg": 1743, - "rotates": false - }, - { - "id": [ - "gloves_leather", - "gauntlets_larmor", - "gloves_work" - ], - "fg": 1744, - "rotates": false - }, - { - "id": [ - "gloves_liner", - "gloves_wraps", - "winter_gloves_army", - "long_glove_white", - "gloves_golf" - ], - "fg": 1745, - "rotates": false - }, - { - "id": "gloves_lsurvivor", - "fg": 1746, - "rotates": false - }, - { - "id": "gloves_medical", - "fg": 1747, - "rotates": false - }, - { - "id": "gloves_rubber", - "fg": 1748, - "rotates": false - }, - { - "id": [ - "gloves_winter", - "gloves_wsurvivor" - ], - "fg": 1749, - "rotates": false - }, - { - "id": "gloves_wool", - "fg": 1750, - "rotates": false - }, - { - "id": [ - "gloves_wraps_wool", - "gloves_light", - "gauntlets_chitin", - "gloves_bag" - ], - "fg": 1751, - "rotates": false - }, - { - "id": [ - "mittens", - "boxing_gloves" - ], - "fg": 1752, - "rotates": false - }, - { - "id": [ - "survivor_light", - "wearable_light" - ], - "fg": 1753, - "rotates": false - }, - { - "id": [ - "wearable_light_on", - "survivor_light_on" - ], - "fg": 1754, - "rotates": false - }, - { - "id": "megaarmor_torso_3_act", - "fg": 1755, - "rotates": false - }, - { - "id": "megaarmor_torso_3", - "fg": 1756, - "rotates": false - }, - { - "id": "bagpipes", - "fg": 1757, - "rotates": false - }, - { - "id": "binoculars", - "fg": 1758, - "rotates": false - }, - { - "id": "game_watch", - "fg": 1759, - "rotates": false - }, - { - "id": [ - "goggles_nv_on", - "goggles_ir", - "goggles_ir_on", - "goggles_nv" - ], - "fg": 1760, - "rotates": false - }, - { - "id": "harmonica_holder", - "fg": 1761, - "rotates": false - }, - { - "id": "miner_hat", - "fg": 1762, - "rotates": false - }, - { - "id": "miner_hat_on", - "fg": 1763, - "rotates": false - }, - { - "id": "ref_lighter_string", - "fg": 1764, - "rotates": false - }, - { - "id": [ - "sac_purse_clean_water_ankle", - "sac_purse_clean_water_arm", - "sac_purse_clean_water_leg", - "sac_purse_clean_water" - ], - "fg": 1765, - "rotates": false - }, - { - "id": "saxophone", - "fg": 1766, - "rotates": false - }, - { - "id": [ - "scarf_long", - "knit_scarf", - "long_knit_scarf", - "knit_scarf_loose", - "long_knit_scarf_loose", - "long_patchwork_scarf", - "long_patchwork_scarf_loose", - "patchwork_scarf", - "patchwork_scarf_loose", - "scarf_long_loose", - "scarf_loose", - "scarf" - ], - "fg": 1767, - "rotates": false - }, - { - "id": [ - "scarf_fur", - "scarf_fur_long", - "scarf_fur_long_loose", - "scarf_fur_loose" - ], - "fg": 1768, - "rotates": false - }, - { - "id": "10gal_hat", - "fg": 1769, - "rotates": false - }, - { - "id": [ - "anbc_suit", - "aep_suit" - ], - "fg": 1770, - "rotates": false - }, - { - "id": [ - "hsurvivor_suit", - "fsurvivor_suit", - "h20survivor_suit" - ], - "fg": 1771, - "rotates": false - }, - { - "id": "lsurvivor_suit", - "fg": 1772, - "rotates": false - }, - { - "id": [ - "survivor_suit", - "xlsurvivor_suit" - ], - "fg": 1773, - "rotates": false - }, - { - "id": [ - "wolfsuit", - "armor_farmor" - ], - "fg": 1774, - "rotates": false - }, - { - "id": "wsurvivor_suit", - "fg": 1775, - "rotates": false - }, - { - "id": "fishing_waders", - "fg": 1776, - "rotates": false - }, - { - "id": "apron_leather", - "fg": 1777, - "rotates": false - }, - { - "id": "armguard_chitin", - "fg": 1778, - "rotates": false - }, - { - "id": [ - "armguard_hard", - "armguard_paper", - "legguard_hard", - "legguard_paper" - ], - "fg": 1779, - "rotates": false - }, - { - "id": [ - "armguard_soft", - "chainmail_arms", - "armguard_metal", - "legguard_metal", - "chainmail_legs", - "armguard_lightplate", - "legguard_lightplate" - ], - "fg": 1780, - "rotates": false - }, - { - "id": [ - "arm_splint", - "leg_splint", - "2byarm_guard", - "2byshin_guard", - "vambrace_larmor", - "armguard_larmor", - "armguard_larmor_mod" - ], - "fg": 1781, - "rotates": false - }, - { - "id": [ - "arm_warmers", - "leg_warmers", - "leg_warmers_f", - "leg_warmers_xl", - "leg_warmers_xlf" - ], - "fg": 1782, - "rotates": false - }, - { - "id": "megaarmor_armguards_1", - "fg": 1783, - "rotates": false - }, - { - "id": "armguard_bone", - "fg": 1784, - "rotates": false - }, - { - "id": "armor_cuirass", - "fg": 1785, - "rotates": false - }, - { - "id": [ - "armor_plarmor", - "jacket_leather_mod", - "armor_scrapsuit" - ], - "fg": 1786, - "rotates": false - }, - { - "id": "army_top", - "fg": 1787, - "rotates": false - }, - { - "id": "bandana", - "fg": 1788, - "rotates": false - }, - { - "id": [ - "bandolier_rifle", - "bandolier_shotgun", - "bandolier_pistol" - ], - "fg": 1789, - "rotates": false - }, - { - "id": "bandolier_wrist", - "fg": 1790, - "rotates": false - }, - { - "id": "brooch", - "fg": 1791, - "rotates": false - }, - { - "id": [ - "tieclip", - "collarpin" - ], - "fg": 1792, - "rotates": false - }, - { - "id": "barrette", - "fg": 1793, - "rotates": false - }, - { - "id": [ - "helmet_scavenger", - "beekeeping_hood" - ], - "fg": 1794, - "rotates": false - }, - { - "id": "helmet_chitin", - "fg": 1795, - "rotates": false - }, - { - "id": "helmet_plate", - "fg": 1796, - "rotates": false - }, - { - "id": [ - "beret_wool", - "beret" - ], - "fg": 1797, - "rotates": false - }, - { - "id": [ - "bra", - "sports_bra", - "bikini_top" - ], - "fg": 1798, - "rotates": false - }, - { - "id": [ - "bikini_top_fur", - "fur_cat_ears" - ], - "fg": 1799, - "rotates": false - }, - { - "id": "bikini_top_leather", - "fg": 1800, - "rotates": false - }, - { - "id": "bindle", - "fg": 1801, - "rotates": false - }, - { - "id": "bondage_mask", - "fg": 1802, - "rotates": false - }, - { - "id": [ - "boots_larmor", - "boots" - ], - "fg": 1803, - "rotates": false - }, - { - "id": "boots_bone", - "fg": 1804, - "rotates": false - }, - { - "id": "boots_chitin", - "fg": 1805, - "rotates": false - }, - { - "id": [ - "boots_combat", - "boots_lsurvivor" - ], - "fg": 1806, - "rotates": false - }, - { - "id": "boots_hiking", - "fg": 1807, - "rotates": false - }, - { - "id": [ - "boots_plate", - "boots_fsurvivor", - "boots_hsurvivor", - "motorbike_boots", - "megaarmor_boots_1" - ], - "fg": 1808, - "rotates": false - }, - { - "id": [ - "boots_rubber", - "boots_bunker" - ], - "fg": 1809, - "rotates": false - }, - { - "id": [ - "boots_winter", - "boots_wsurvivor" - ], - "fg": 1810, - "rotates": false - }, - { - "id": [ - "sholster", - "bootstrap" - ], - "fg": 1811, - "rotates": false - }, - { - "id": "boots_fur", - "fg": 1812, - "rotates": false - }, - { - "id": [ - "boots_survivor", - "boots_xlsurvivor", - "boots_steel" - ], - "fg": 1813, - "rotates": false - }, - { - "id": "jeans", - "fg": 1814, - "rotates": false - }, - { - "id": "long_underpants", - "fg": 1815, - "rotates": false - }, - { - "id": [ - "pants", - "tights", - "technician_pants_gray", - "motorbike_pants", - "hakama_gi" - ], - "fg": 1816, - "rotates": false - }, - { - "id": [ - "pants_cargo", - "pants_survivor", - "lsurvivor_pants" - ], - "fg": 1817, - "rotates": false - }, - { - "id": [ - "pants_leather", - "breeches" - ], - "fg": 1818, - "rotates": false - }, - { - "id": [ - "pants_ski", - "jeans_red" - ], - "fg": 1819, - "rotates": false - }, - { - "id": [ - "striped_pants", - "zubon_gi", - "fencing_pants", - "winter_pants_army" - ], - "fg": 1820, - "rotates": false - }, - { - "id": "bunker_pants", - "fg": 1821, - "rotates": false - }, - { - "id": "case_violin", - "fg": 1822, - "rotates": false - }, - { - "id": "chaps_leather", - "fg": 1823, - "rotates": false - }, - { - "id": [ - "survivor_vest", - "chestrig" - ], - "fg": 1824, - "rotates": false - }, - { - "id": "chestwrap_fur", - "fg": 1825, - "rotates": false - }, - { - "id": "robe", - "fg": 1826, - "rotates": false - }, - { - "id": [ - "coat_fur_sf", - "coat_fur" - ], - "fg": 1827, - "rotates": false - }, - { - "id": "gold_ear", - "fg": 1828, - "rotates": false - }, - { - "id": "silver_ear", - "fg": 1829, - "rotates": false - }, - { - "id": "copper_ear", - "fg": 1830, - "rotates": false - }, - { - "id": "corset", - "fg": 1831, - "rotates": false - }, - { - "id": "cowl_wool", - "fg": 1832, - "rotates": false - }, - { - "id": [ - "crown_golden_survivor", - "crown_golden" - ], - "fg": 1833, - "rotates": false - }, - { - "id": [ - "lsurvivor_armor", - "dragonskin" - ], - "fg": 1834, - "rotates": false - }, - { - "id": [ - "kevlar", - "makeshift_kevlar" - ], - "fg": 1835, - "rotates": false - }, - { - "id": [ - "modularvest", - "modularvestsuper", - "modularveststeel", - "modularvestceramic", - "modularvestkevlar", - "modularvesthard" - ], - "fg": 1836, - "rotates": false - }, - { - "id": [ - "sundress", - "sleeveless_tunic", - "tunic", - "gown", - "dress" - ], - "fg": 1837, - "rotates": false - }, - { - "id": [ - "striped_shirt", - "dress_shirt" - ], - "fg": 1838, - "rotates": false - }, - { - "id": "long_undertop", - "fg": 1839, - "rotates": false - }, - { - "id": "postman_shirt", - "fg": 1840, - "rotates": false - }, - { - "id": [ - "sheriffshirt", - "longshirt" - ], - "fg": 1841, - "rotates": false - }, - { - "id": "dress_wedding", - "fg": 1842, - "rotates": false - }, - { - "id": "dump_pouch", - "fg": 1843, - "rotates": false - }, - { - "id": "ear_plugs", - "fg": 1844, - "rotates": false - }, - { - "id": "glasses_bal", - "fg": 1845, - "rotates": false - }, - { - "id": "goggles_ski", - "fg": 1846, - "rotates": false - }, - { - "id": [ - "goggles_welding", - "survivor_goggles", - "iggaak" - ], - "fg": 1847, - "rotates": false - }, - { - "id": "eclipse_glasses", - "fg": 1848, - "rotates": false - }, - { - "id": [ - "knee_pads", - "elbow_pads" - ], - "fg": 1849, - "rotates": false - }, - { - "id": "glasses_safety", - "fg": 1850, - "rotates": false - }, - { - "id": "fancy_sunglasses", - "fg": 1851, - "rotates": false - }, - { - "id": "flag_shirt", - "fg": 1852, - "rotates": false - }, - { - "id": "flintlock_pouch", - "fg": 1853, - "rotates": false - }, - { - "id": [ - "lowtops", - "golf_shoes", - "footrags", - "footrags_wool", - "socks_bag", - "flip_flops" - ], - "fg": 1854, - "rotates": false - }, - { - "id": [ - "mocassins", - "leathersandals", - "bastsandals", - "clogs", - "footrags_fur", - "footrags_leather", - "straw_sandals", - "slippers" - ], - "fg": 1855, - "rotates": false - }, - { - "id": "shoes_bowling", - "fg": 1856, - "rotates": false - }, - { - "id": [ - "sneakers", - "dance_shoes", - "shoes_birchbark", - "dress_shoes" - ], - "fg": 1857, - "rotates": false - }, - { - "id": [ - "leather_collar", - "locket_lucy", - "fur_collar" - ], - "fg": 1858, - "rotates": false - }, - { - "id": [ - "glasses_eye", - "fitover_sunglasses" - ], - "fg": 1859, - "rotates": false - }, - { - "id": "glasses_reading", - "fg": 1860, - "rotates": false - }, - { - "id": "sunglasses", - "fg": 1861, - "rotates": false - }, - { - "id": "glasses_bifocal", - "fg": 1862, - "rotates": false - }, - { - "id": "glasses_monocle", - "fg": 1863, - "rotates": false - }, - { - "id": [ - "gloves_fingerless_mod", - "gloves_wraps_fur", - "gloves_wraps_leather", - "gloves_fingerless" - ], - "fg": 1864, - "rotates": false - }, - { - "id": "gloves_fur", - "fg": 1865, - "rotates": false - }, - { - "id": "gloves_tactical", - "fg": 1866, - "rotates": false - }, - { - "id": "glove_jackson", - "fg": 1867, - "rotates": false - }, - { - "id": "goggles_swim", - "fg": 1868, - "rotates": false - }, - { - "id": [ - "diamond_dental_grill", - "gold_dental_grill" - ], - "fg": 1869, - "rotates": false - }, - { - "id": [ - "sf_watch", - "gold_watch" - ], - "fg": 1870, - "rotates": false - }, - { - "id": [ - "wristwatch", - "diving_watch" - ], - "fg": 1871, - "rotates": false - }, - { - "id": [ - "bandolier_bomblet", - "grenade_pouch" - ], - "fg": 1872, - "rotates": false - }, - { - "id": [ - "helmet_netting", - "hat_boonie" - ], - "fg": 1873, - "rotates": false - }, - { - "id": [ - "hat_hard", - "firehelmet", - "hat_hard_hooded" - ], - "fg": 1874, - "rotates": false - }, - { - "id": [ - "helmet_skid", - "pot_helmet", - "tinfoil_hat" - ], - "fg": 1875, - "rotates": false - }, - { - "id": "hat_chef", - "fg": 1876, - "rotates": false - }, - { - "id": [ - "tricorne", - "eboshi", - "hat_cotton" - ], - "fg": 1877, - "rotates": false - }, - { - "id": "hat_knit", - "fg": 1878, - "rotates": false - }, - { - "id": "hat_fur", - "fg": 1879, - "rotates": false - }, - { - "id": "hat_hooded", - "fg": 1880, - "rotates": false - }, - { - "id": "hat_hunting", - "fg": 1881, - "rotates": false - }, - { - "id": [ - "thigh_high_boots", - "heels" - ], - "fg": 1882, - "rotates": false - }, - { - "id": [ - "helmet_bike", - "maid_hat", - "kufi" - ], - "fg": 1883, - "rotates": false - }, - { - "id": [ - "helmet_survivor", - "helmet_xlsurvivor", - "kippah" - ], - "fg": 1884, - "rotates": false - }, - { - "id": [ - "tac_helmet", - "helmet_hsurvivor", - "hat_newsboy" - ], - "fg": 1885, - "rotates": false - }, - { - "id": "helmet_army", - "fg": 1886, - "rotates": false - }, - { - "id": "helmet_larmor", - "fg": 1887, - "rotates": false - }, - { - "id": [ - "helmet_liner", - "helmet_nomad", - "veil_wedding" - ], - "fg": 1888, - "rotates": false - }, - { - "id": "helmet_ball", - "fg": 1889, - "rotates": false - }, - { - "id": "helmet_barbute", - "fg": 1890, - "rotates": false - }, - { - "id": "hat_ball", - "fg": 1891, - "rotates": false - }, - { - "id": "postman_hat", - "fg": 1892, - "rotates": false - }, - { - "id": "hat_golf", - "fg": 1893, - "rotates": false - }, - { - "id": "helmet_bone", - "fg": 1894, - "rotates": false - }, - { - "id": "helmet_conical", - "fg": 1895, - "rotates": false - }, - { - "id": "helmet_corinthian", - "fg": 1896, - "rotates": false - }, - { - "id": "helmet_galea", - "fg": 1897, - "rotates": false - }, - { - "id": "helmet_kabuto", - "fg": 1898, - "rotates": false - }, - { - "id": [ - "nomex_hood", - "wetsuit_hood", - "hood_fsurvivor", - "hood_h20survivor", - "fencing_mask", - "chainmail_hood", - "helmet_motor" - ], - "fg": 1899, - "rotates": false - }, - { - "id": "helmet_nasal", - "fg": 1900, - "rotates": false - }, - { - "id": [ - "back_holster", - "XL_holster", - "holster" - ], - "fg": 1901, - "rotates": false - }, - { - "id": [ - "wool_hoodie", - "hoodie" - ], - "fg": 1902, - "rotates": false - }, - { - "id": "hood_rain", - "fg": 1903, - "rotates": false - }, - { - "id": [ - "hood_survivor", - "hood_xlsurvivor" - ], - "fg": 1904, - "rotates": false - }, - { - "id": "hood_wsurvivor", - "fg": 1905, - "rotates": false - }, - { - "id": "hood_lsurvivor", - "fg": 1906, - "rotates": false - }, - { - "id": "hot_pants_fur", - "fg": 1907, - "rotates": false - }, - { - "id": "hot_pants_leather", - "fg": 1908, - "rotates": false - }, - { - "id": [ - "trunks", - "boy_shorts", - "boxer_shorts", - "boxer_briefs" - ], - "fg": 1909, - "rotates": false - }, - { - "id": "hot_pants", - "fg": 1910, - "rotates": false - }, - { - "id": [ - "duster_fur", - "trenchcoat_fur" - ], - "fg": 1911, - "rotates": false - }, - { - "id": [ - "trenchcoat", - "duster", - "greatcoat" - ], - "fg": 1912, - "rotates": false - }, - { - "id": [ - "trenchcoat_leather", - "trenchcoat_survivor", - "duster_survivor", - "armor_nomad", - "duster_leather" - ], - "fg": 1913, - "rotates": false - }, - { - "id": "house_coat", - "fg": 1914, - "rotates": false - }, - { - "id": [ - "armor_scavenger", - "jacket_army" - ], - "fg": 1915, - "rotates": false - }, - { - "id": "jacket_flannel", - "fg": 1916, - "rotates": false - }, - { - "id": "jersey", - "fg": 1917, - "rotates": false - }, - { - "id": "judo_belt_blue", - "fg": 1918, - "rotates": false - }, - { - "id": "judo_belt_brown", - "fg": 1919, - "rotates": false - }, - { - "id": "judo_belt_green", - "fg": 1920, - "rotates": false - }, - { - "id": "judo_belt_orange", - "fg": 1921, - "rotates": false - }, - { - "id": "judo_belt_white", - "fg": 1922, - "rotates": false - }, - { - "id": "judo_belt_yellow", - "fg": 1923, - "rotates": false - }, - { - "id": "judo_belt_black", - "fg": 1924, - "rotates": false - }, - { - "id": [ - "boots_western", - "knee_high_boots" - ], - "fg": 1925, - "rotates": false - }, - { - "id": [ - "stockings", - "stockings_tent_legs", - "stockings_tent_arms", - "leggings" - ], - "fg": 1926, - "rotates": false - }, - { - "id": [ - "fireman_belt", - "leather_belt" - ], - "fg": 1927, - "rotates": false - }, - { - "id": "leather_cat_ears", - "fg": 1928, - "rotates": false - }, - { - "id": "ragpouch", - "fg": 1929, - "rotates": false - }, - { - "id": "leather_pouch", - "fg": 1930, - "rotates": false - }, - { - "id": "legguard_bronze", - "fg": 1931, - "rotates": false - }, - { - "id": "legrig", - "fg": 1932, - "rotates": false - }, - { - "id": "polo_shirt", - "fg": 1933, - "rotates": false - }, - { - "id": [ - "tshirt", - "undershirt", - "tshirt_text", - "technician_shirt_gray" - ], - "fg": 1934, - "rotates": false - }, - { - "id": "linuxtshirt", - "fg": 1935, - "rotates": false - }, - { - "id": [ - "loincloth_wool", - "briefs", - "panties", - "bikini_bottom", - "loincloth" - ], - "fg": 1936, - "rotates": false - }, - { - "id": "loincloth_leather", - "fg": 1937, - "rotates": false - }, - { - "id": "loincloth_fur", - "fg": 1938, - "rotates": false - }, - { - "id": "maid_dress", - "fg": 1939, - "rotates": false - }, - { - "id": "makeshift_sling", - "fg": 1940, - "rotates": false - }, - { - "id": "mask_bal", - "fg": 1941, - "rotates": false - }, - { - "id": "mask_dust", - "fg": 1942, - "rotates": false - }, - { - "id": [ - "mask_guy_fawkes", - "mask_hockey" - ], - "fg": 1943, - "rotates": false - }, - { - "id": "mask_rioter", - "fg": 1944, - "rotates": false - }, - { - "id": "megaarmor_head_1", - "fg": 1945, - "rotates": false - }, - { - "id": "megaarmor_leggings_1", - "fg": 1946, - "rotates": false - }, - { - "id": "megaarmor_torso_1", - "fg": 1947, - "rotates": false - }, - { - "id": "megaarmor_torso_2", - "fg": 1948, - "rotates": false - }, - { - "id": "mouthpiece", - "fg": 1949, - "rotates": false - }, - { - "id": "nanoskirt", - "fg": 1950, - "rotates": false - }, - { - "id": [ - "locket", - "holy_symbol_wood", - "necklace" - ], - "fg": 1951, - "rotates": false - }, - { - "id": "pearl_collar", - "fg": 1952, - "rotates": false - }, - { - "id": [ - "small_relic", - "holy_symbol" - ], - "fg": 1953, - "rotates": false - }, - { - "id": [ - "blindfold", - "obi_gi" - ], - "fg": 1954, - "rotates": false - }, - { - "id": "pants_checkered", - "fg": 1955, - "rotates": false - }, - { - "id": "pants_army", - "fg": 1956, - "rotates": false - }, - { - "id": "pants_fur", - "fg": 1957, - "rotates": false - }, - { - "id": [ - "helmet_lobster", - "pickelhaube" - ], - "fg": 1958, - "rotates": false - }, - { - "id": "basket_laundry", - "fg": 1959, - "rotates": false - }, - { - "id": "poncho", - "fg": 1960, - "rotates": false - }, - { - "id": [ - "shorts", - "under_armor_shorts" - ], - "fg": 1961, - "rotates": false - }, - { - "id": "shorts_cargo", - "fg": 1962, - "rotates": false - }, - { - "id": [ - "shorts_denim", - "b_shorts" - ], - "fg": 1963, - "rotates": false - }, - { - "id": "postman_shorts", - "fg": 1964, - "rotates": false - }, - { - "id": [ - "depowered_armor", - "power_armor_basic" - ], - "fg": 1965, - "rotates": false - }, - { - "id": "power_armor_frame", - "fg": 1966, - "rotates": false - }, - { - "id": "power_armor_heavy", - "fg": 1967, - "rotates": false - }, - { - "id": [ - "depowered_helmet", - "power_armor_helmet_basic" - ], - "fg": 1968, - "rotates": false - }, - { - "id": "power_armor_helmet_heavy", - "fg": 1969, - "rotates": false - }, - { - "id": "power_armor_helmet_light", - "fg": 1970, - "rotates": false - }, - { - "id": "power_armor_light", - "fg": 1971, - "rotates": false - }, - { - "id": [ - "quiver_birchbark", - "sheath", - "bootsheath", - "quiver" - ], - "fg": 1972, - "rotates": false - }, - { - "id": [ - "quiver_large_birchbark", - "scabbard", - "bscabbard", - "baldric", - "quiver_large" - ], - "fg": 1973, - "rotates": false - }, - { - "id": [ - "diamond_ring", - "ring" - ], - "fg": 1974, - "rotates": false - }, - { - "id": [ - "rollerskates", - "roller_blades" - ], - "fg": 1975, - "rotates": false - }, - { - "id": [ - "molle_pack", - "gobag", - "rucksack" - ], - "fg": 1976, - "rotates": false - }, - { - "id": [ - "chestwrap_leather", - "leather" - ], - "fg": 1977, - "rotates": false - }, - { - "id": [ - "v_curtain_item", - "sheet" - ], - "fg": 1978, - "rotates": false - }, - { - "id": [ - "fur", - "tanbark", - "birchbark", - "willowbark" - ], - "fg": 1979, - "rotates": false - }, - { - "id": "shield_buckler", - "fg": 1980, - "rotates": false - }, - { - "id": "shield_heater", - "fg": 1981, - "rotates": false - }, - { - "id": "shield_hoplon", - "fg": 1982, - "rotates": false - }, - { - "id": "shield_kite", - "fg": 1983, - "rotates": false - }, - { - "id": "shield_round", - "fg": 1984, - "rotates": false - }, - { - "id": "shield_scutum", - "fg": 1985, - "rotates": false - }, - { - "id": "shield_wooden", - "fg": 1986, - "rotates": false - }, - { - "id": "shield_wooden_large", - "fg": 1987, - "rotates": false - }, - { - "id": [ - "kilt", - "skirt" - ], - "fg": 1988, - "rotates": false - }, - { - "id": "skirt_leather", - "fg": 1989, - "rotates": false - }, - { - "id": "suit", - "fg": 1990, - "rotates": false - }, - { - "id": [ - "swat_shield_act", - "swat_shield" - ], - "fg": 1991, - "rotates": false - }, - { - "id": "sweatshirt", - "fg": 1992, - "rotates": false - }, - { - "id": "sweater", - "fg": 1993, - "rotates": false - }, - { - "id": "swim_fins", - "fg": 1994, - "rotates": false - }, - { - "id": [ - "camisole", - "tank_top" - ], - "fg": 1995, - "rotates": false - }, - { - "id": [ - "under_armor", - "kevlar_tee" - ], - "fg": 1996, - "rotates": false - }, - { - "id": [ - "survivor_belt", - "survivor_belt_notools", - "tool_belt" - ], - "fg": 1997, - "rotates": false - }, - { - "id": "tophat", - "fg": 1998, - "rotates": false - }, - { - "id": "turban", - "fg": 1999, - "rotates": false - }, - { - "id": [ - "puck", - "ear_spool" - ], - "fg": 2000, - "rotates": false - }, - { - "id": "120mm_casing", - "fg": 2001, - "rotates": false - }, - { - "id": "155mm_casing", - "fg": 2002, - "rotates": false - }, - { - "id": "30mm_casing", - "fg": 2003, - "rotates": false - }, - { - "id": "exploding_arrow_warhead", - "fg": 2004, - "rotates": false - }, - { - "id": [ - "5x50_hull", - "410_hull", - "shot_hull" - ], - "fg": 2005 - }, - { - "id": "1st_aid", - "fg": 2006, - "rotates": false - }, - { - "id": "golf_tee", - "fg": 2007, - "rotates": false - }, - { - "id": "plastic_pot_flower", - "fg": 2008, - "rotates": false - }, - { - "id": "clay_pot_flower", - "fg": 2009, - "rotates": false - }, - { - "id": "2x4", - "fg": 2010, - "rotates": false - }, - { - "id": [ - "chitin_plate", - "alloy_plate", - "alloy_sheet" - ], - "fg": 2011, - "rotates": false - }, - { - "id": "hard_plate", - "fg": 2012, - "rotates": false - }, - { - "id": "mil_plate", - "fg": 2013, - "rotates": false - }, - { - "id": [ - "steel_plate", - "bone_plate" - ], - "fg": 2014, - "rotates": false - }, - { - "id": "wood_plate", - "fg": 2015, - "rotates": false - }, - { - "id": [ - "ammolink30mm", - "ammolink40mm", - "ammolink50", - "ammolink223", - "ammolink308", - "ammolink" - ], - "fg": 2016 - }, - { - "id": "arachnotron_guts", - "fg": 2017, - "rotates": false - }, - { - "id": "atomic_coffeepot", - "fg": 2018, - "rotates": false - }, - { - "id": "golf_ball", - "fg": 2019, - "rotates": false - }, - { - "id": "bat_metal", - "fg": 2020, - "rotates": false - }, - { - "id": "bat", - "fg": 2021, - "rotates": false - }, - { - "id": "battletorch_done", - "fg": 2022, - "rotates": false - }, - { - "id": "biollante_bud", - "fg": 2023, - "rotates": false - }, - { - "id": "bluebell_bud", - "fg": 2024, - "rotates": false - }, - { - "id": [ - "dahlia_bud", - "poppy_bud" - ], - "fg": 2025, - "rotates": false - }, - { - "id": [ - "knuckle_katar", - "knuckle_nail", - "bagh_nakha", - "bio_claws_weapon" - ], - "fg": 2026, - "rotates": false - }, - { - "id": [ - "wasp_glue", - "wasp_glue_super", - "bone_glue" - ], - "fg": 2027, - "rotates": false - }, - { - "id": "superglue", - "fg": 2028, - "rotates": false - }, - { - "id": "bowling_axe", - "fg": 2029, - "rotates": false - }, - { - "id": "bowling_pin", - "fg": 2030, - "rotates": false - }, - { - "id": "brick", - "fg": 2031, - "rotates": false - }, - { - "id": [ - "carding_paddles", - "broom" - ], - "fg": 2032, - "rotates": false - }, - { - "id": "bullwhip", - "fg": 2033, - "rotates": false - }, - { - "id": "candlestick", - "fg": 2034, - "rotates": false - }, - { - "id": "cane", - "fg": 2035, - "rotates": false - }, - { - "id": [ - "cantilever_small", - "cantilever_medium" - ], - "fg": 2036, - "rotates": false - }, - { - "id": [ - "vp_crane_medium", - "vp_crane_small" - ], - "fg": 2036, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "cargo_lock", - "fg": 2037, - "rotates": false - }, - { - "id": "glass_plate", - "fg": 2038, - "rotates": false - }, - { - "id": "tin_plate", - "fg": 2039, - "rotates": false - }, - { - "id": "ceramic_plate", - "fg": 2040, - "rotates": false - }, - { - "id": [ - "material_shrd_limestone", - "ceramic_shard" - ], - "fg": 2041, - "rotates": false - }, - { - "id": "knuckle_brass", - "fg": 2042, - "rotates": false - }, - { - "id": "knuckle_steel", - "fg": 2043, - "rotates": false - }, - { - "id": "cestus", - "fg": 2044, - "rotates": false - }, - { - "id": "chitin_piece", - "fg": 2045, - "rotates": false - }, - { - "id": "teapot", - "fg": 2046, - "rotates": false - }, - { - "id": "clay_teapot", - "fg": 2047, - "rotates": false - }, - { - "id": [ - "circsaw_blade", - "clockworks" - ], - "fg": 2048, - "rotates": false - }, - { - "id": "mon_blood_sacrifice", - "fg": 2049, - "rotates": false - }, - { - "id": "corpse", - "fg": 2050, - "rotates": false - }, - { - "id": "cudgel", - "fg": 2051, - "rotates": false - }, - { - "id": "pipe", - "fg": 2052, - "rotates": false - }, - { - "id": "cu_pipe", - "fg": 2053, - "rotates": false - }, - { - "id": "diamond", - "fg": 2054, - "rotates": false - }, - { - "id": [ - "drivebelt_makeshift", - "drivebelt" - ], - "fg": 2055, - "rotates": false - }, - { - "id": "element", - "fg": 2056, - "rotates": false - }, - { - "id": [ - "filter_air_makeshift", - "filter_air" - ], - "fg": 2057, - "rotates": false - }, - { - "id": [ - "filter_liquid_makeshift", - "filter_liquid" - ], - "fg": 2058 - }, - { - "id": "fish_bowl", - "fg": 2059, - "rotates": false - }, - { - "id": "frame", - "fg": 2060, - "rotates": false - }, - { - "id": [ - "frame_wood", - "frame_wood_light", - "foldwoodframe" - ], - "fg": 2061, - "rotates": false - }, - { - "id": "hdframe", - "fg": 2062, - "rotates": false - }, - { - "id": [ - "xlframe", - "foldframe" - ], - "fg": 2063, - "rotates": false - }, - { - "id": "folding_basket", - "fg": 2064, - "rotates": false - }, - { - "id": "football", - "fg": 2065, - "rotates": false - }, - { - "id": [ - "spork", - "foon", - "fork" - ], - "fg": 2066, - "rotates": false - }, - { - "id": "glass_macuahuitl", - "fg": 2067, - "rotates": false - }, - { - "id": "glass_shard", - "fg": 2068, - "rotates": false - }, - { - "id": [ - "reinforced_glass_sheet", - "reinforced_glass_pane" - ], - "fg": 2069, - "rotates": false - }, - { - "id": "glass_sheet", - "fg": 2070, - "rotates": false - }, - { - "id": "glass_tinted", - "fg": 2071, - "rotates": false - }, - { - "id": "glowplug", - "fg": 2072, - "rotates": false - }, - { - "id": "golf_club", - "fg": 2073, - "rotates": false - }, - { - "id": "grapnel", - "fg": 2074, - "rotates": false - }, - { - "id": "gungnir_replica", - "fg": 2075, - "rotates": false - }, - { - "id": "hammer_sledge", - "fg": 2076, - "rotates": false - }, - { - "id": "handflare_dead", - "fg": 2077, - "rotates": false - }, - { - "id": "hand_paddles", - "fg": 2078, - "rotates": false - }, - { - "id": "hockey_stick", - "fg": 2079, - "rotates": false - }, - { - "id": "ji", - "fg": 2080, - "rotates": false - }, - { - "id": "joint_lit", - "fg": 2081, - "rotates": false - }, - { - "id": "joint_roach", - "fg": 2082, - "rotates": false - }, - { - "id": "knife_butter", - "fg": 2083, - "rotates": false - }, - { - "id": "lajatang", - "fg": 2084, - "rotates": false - }, - { - "id": "lawnmower", - "fg": 2085, - "rotates": false - }, - { - "id": "light_bulb", - "fg": 2086, - "rotates": false - }, - { - "id": "log", - "fg": 2087, - "rotates": false - }, - { - "id": [ - "glaive", - "halberd", - "halberd_fake", - "naginata", - "makeshift_halberd" - ], - "fg": 2088, - "rotates": false - }, - { - "id": "mess_tin", - "fg": 2089, - "rotates": false - }, - { - "id": "television", - "fg": 2090, - "rotates": false - }, - { - "id": "microwave", - "fg": 2091, - "rotates": false - }, - { - "id": "mjolnir_replica", - "fg": 2092, - "rotates": false - }, - { - "id": [ - "mobile_memory_card_used", - "mobile_memory_card_encrypted", - "mobile_memory_card_science", - "mobile_memory_card" - ], - "fg": 2093, - "rotates": false - }, - { - "id": "money_bundle", - "fg": 2094, - "rotates": false - }, - { - "id": [ - "mjolnir", - "morningstar" - ], - "fg": 2095, - "rotates": false - }, - { - "id": [ - "homewrecker", - "nailbat" - ], - "fg": 2096, - "rotates": false - }, - { - "id": "nuclear_waste", - "fg": 2097, - "rotates": false - }, - { - "id": "nuclear_fuel", - "fg": 2098, - "rotates": false - }, - { - "id": "pallet_lifter", - "fg": 2099, - "rotates": false - }, - { - "id": [ - "can_sealer", - "pastaextruder" - ], - "fg": 2100, - "rotates": false - }, - { - "id": "peephole", - "fg": 2101, - "rotates": false - }, - { - "id": "petrified_eye", - "fg": 2102, - "rotates": false - }, - { - "id": [ - "down_pillow", - "pillow" - ], - "fg": 2103, - "rotates": false - }, - { - "id": "bodypillow", - "fg": 2104, - "rotates": false - }, - { - "id": "pipe_solid", - "fg": 2105, - "rotates": false - }, - { - "id": "pipe_solid_spear", - "fg": 2106, - "rotates": false - }, - { - "id": [ - "spear_forked", - "pitchfork" - ], - "fg": 2107, - "rotates": false - }, - { - "id": [ - "clay_watercont", - "survivor_mess_kit", - "crucible_clay", - "clay_pot" - ], - "fg": 2108, - "rotates": false - }, - { - "id": [ - "charcoal_cooker", - "rock_pot", - "pot_makeshift", - "pot_canning", - "pressure_cooker", - "f_standing_tank" - ], - "fg": 2109, - "rotates": false - }, - { - "id": [ - "mess_kit", - "mil_mess_kit" - ], - "fg": 2110, - "rotates": false - }, - { - "id": "pot_makeshift_copper", - "fg": 2111, - "rotates": false - }, - { - "id": "pot_copper", - "fg": 2112, - "rotates": false - }, - { - "id": "pot", - "fg": 2113, - "rotates": false - }, - { - "id": [ - "pot_xlhelmet", - "pot_helmet" - ], - "fg": 2114, - "rotates": false - }, - { - "id": [ - "e_scrap", - "power_supply" - ], - "fg": 2115, - "rotates": false - }, - { - "id": "pump_complex", - "fg": 2116, - "rotates": false - }, - { - "id": "punch_dagger", - "fg": 2117, - "rotates": false - }, - { - "id": "razor_blade", - "fg": 2118, - "rotates": false - }, - { - "id": [ - "survivormap", - "militarymap", - "restaurantmap", - "touristmap", - "trailmap", - "roadmap" - ], - "fg": 2119, - "rotates": false - }, - { - "id": "rock_sock", - "fg": 2120, - "rotates": false - }, - { - "id": [ - "rope_6", - "rope_makeshift_30", - "rope_makeshift_6", - "rope_30" - ], - "fg": 2121, - "rotates": false - }, - { - "id": "sharp_rock", - "fg": 2122, - "rotates": false - }, - { - "id": "sharp_toothbrush", - "fg": 2123, - "rotates": false - }, - { - "id": [ - "lead_plate", - "sheet_metal" - ], - "fg": 2124, - "rotates": false - }, - { - "id": "sheet_metal_lit", - "fg": 2125, - "rotates": false - }, - { - "id": "small_lcd_screen", - "fg": 2126, - "rotates": false - }, - { - "id": "spear_survivor", - "fg": 2127, - "rotates": false - }, - { - "id": "spear_copper", - "fg": 2128, - "rotates": false - }, - { - "id": "spike", - "fg": 2129, - "rotates": false - }, - { - "id": "spiked_plate", - "fg": 2130, - "rotates": false - }, - { - "id": "splinter", - "fg": 2131, - "rotates": false - }, - { - "id": "spoon", - "fg": 2132, - "rotates": false - }, - { - "id": "spring", - "fg": 2133, - "rotates": false - }, - { - "id": "vp_muffler", - "fg": 2134, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "vp_seatbelt", - "fg": 2134, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2135 - } - ] - }, - { - "id": "stick_long", - "fg": 2136, - "rotates": false - }, - { - "id": "stick", - "fg": 2137, - "rotates": false - }, - { - "id": "sword_nail", - "fg": 2138, - "rotates": false - }, - { - "id": "toaster", - "fg": 2139, - "rotates": false - }, - { - "id": "torch_done", - "fg": 2140, - "rotates": false - }, - { - "id": "tree_spile", - "fg": 2141, - "rotates": false - }, - { - "id": [ - "teleumbrella", - "umbrella" - ], - "fg": 2142, - "rotates": false - }, - { - "id": "usb_drive", - "fg": 2143, - "rotates": false - }, - { - "id": "warhammer", - "fg": 2144, - "rotates": false - }, - { - "id": "water_faucet", - "fg": 2145, - "rotates": false - }, - { - "id": "withered", - "fg": 2146, - "rotates": false - }, - { - "id": [ - "mon_generator", - "generator_7500w" - ], - "fg": 2147, - "rotates": false - }, - { - "id": "mirror", - "fg": 2148, - "rotates": false - }, - { - "id": "bundle_wool", - "fg": 2149, - "rotates": false - }, - { - "id": "bundle_leather", - "fg": 2150, - "rotates": false - }, - { - "id": "bundle_rag", - "fg": 2151, - "rotates": false - }, - { - "id": "scythe_war", - "fg": 2152, - "rotates": false - }, - { - "id": "fd_bees", - "fg": 2153, - "rotates": false - }, - { - "id": "tr_portal", - "fg": 2154, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 2155 - }, - { - "id": "corner", - "fg": 2156 - }, - { - "id": "edge", - "fg": 2157 - }, - { - "id": "end_piece", - "fg": 2158 - }, - { - "id": "t_connection", - "fg": 2159 - }, - { - "id": "unconnected", - "fg": 2154 - } - ] - }, - { - "id": "fd_web", - "fg": 2160, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 2161 - }, - { - "id": "corner", - "fg": 2162 - }, - { - "id": "edge", - "fg": 2163 - }, - { - "id": "end_piece", - "fg": 2164 - }, - { - "id": "t_connection", - "fg": 2165 - }, - { - "id": "unconnected", - "fg": 2160 - } - ] - }, - { - "id": "fd_slime", - "fg": 2166, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 2167 - }, - { - "id": "corner", - "fg": 2168 - }, - { - "id": "edge", - "fg": 2169 - }, - { - "id": "end_piece", - "fg": 2170 - }, - { - "id": "t_connection", - "fg": 2171 - }, - { - "id": "unconnected", - "fg": 2166 - } - ] - }, - { - "id": "fd_sludge", - "fg": 2172, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 2173 - }, - { - "id": "corner", - "fg": 2174 - }, - { - "id": "edge", - "fg": 2175 - }, - { - "id": "end_piece", - "fg": 2176 - }, - { - "id": "t_connection", - "fg": 2177 - }, - { - "id": "unconnected", - "fg": 2172 - } - ] - }, - { - "id": "fd_acid_vent", - "fg": 2178, - "rotates": false - }, - { - "id": "fd_acid", - "fg": 2179, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 2180 - }, - { - "id": "corner", - "fg": 2181 - }, - { - "id": "edge", - "fg": 2182 - }, - { - "id": "end_piece", - "fg": 2183 - }, - { - "id": "t_connection", - "fg": 2184 - }, - { - "id": "unconnected", - "fg": 2179 - } - ] - }, - { - "id": [ - "fd_bile", - "fd_gibs_veggy", - "fd_sap" - ], - "fg": 2185, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 2186 - }, - { - "id": "corner", - "fg": 2187 - }, - { - "id": "edge", - "fg": 2188 - }, - { - "id": "end_piece", - "fg": 2189 - }, - { - "id": "t_connection", - "fg": 2190 - }, - { - "id": "unconnected", - "fg": 2185 - } - ] - }, - { - "id": "fd_shock_vent", - "fg": 2191, - "rotates": false - }, - { - "id": "fd_electricity", - "fg": 2192, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 2193 - }, - { - "id": "corner", - "fg": 2194 - }, - { - "id": "edge", - "fg": 2195 - }, - { - "id": "end_piece", - "fg": 2196 - }, - { - "id": "t_connection", - "fg": 2197 - }, - { - "id": "unconnected", - "fg": 2192 - } - ] - }, - { - "id": "fd_fire_vent", - "fg": 2198, - "rotates": false - }, - { - "id": "animation_bullet_flame", - "fg": 2199 - }, - { - "id": "fd_incendiary", - "fg": 2199, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 2200 - }, - { - "id": "corner", - "fg": 2201 - }, - { - "id": "edge", - "fg": 2202 - }, - { - "id": "end_piece", - "fg": 2203 - }, - { - "id": "t_connection", - "fg": 2204 - }, - { - "id": "unconnected", - "fg": 2199 - } - ] - }, - { - "id": [ - "fd_flame_burst", - "fd_fire" - ], - "fg": 2205, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 2200 - }, - { - "id": "corner", - "fg": 2201 - }, - { - "id": "edge", - "fg": 2202 - }, - { - "id": "end_piece", - "fg": 2203 - }, - { - "id": "t_connection", - "fg": 2204 - }, - { - "id": "unconnected", - "fg": 2205 - } - ] - }, - { - "id": "fd_fungicidal_gas", - "fg": 2206, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 2207 - }, - { - "id": "corner", - "fg": 2208 - }, - { - "id": "edge", - "fg": 2209 - }, - { - "id": "end_piece", - "fg": 2210 - }, - { - "id": "t_connection", - "fg": 2211 - }, - { - "id": "unconnected", - "fg": 2206 - } - ] - }, - { - "id": "fd_gas_vent", - "fg": 2212, - "rotates": false - }, - { - "id": [ - "fd_toxic_gas", - "fd_nuke_gas" - ], - "fg": 2213, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 2214 - }, - { - "id": "corner", - "fg": 2215 - }, - { - "id": "edge", - "fg": 2216 - }, - { - "id": "end_piece", - "fg": 2217 - }, - { - "id": "t_connection", - "fg": 2218 - }, - { - "id": "unconnected", - "fg": 2213 - } - ] - }, - { - "id": "fd_fungal_haze", - "fg": 2219, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 2220 - }, - { - "id": "corner", - "fg": 2221 - }, - { - "id": "edge", - "fg": 2222 - }, - { - "id": "end_piece", - "fg": 2223 - }, - { - "id": "t_connection", - "fg": 2224 - }, - { - "id": "unconnected", - "fg": 2219 - } - ] - }, - { - "id": [ - "fd_fatigue", - "fd_relax_gas" - ], - "fg": 2225, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 2226 - }, - { - "id": "corner", - "fg": 2227 - }, - { - "id": "edge", - "fg": 2228 - }, - { - "id": "end_piece", - "fg": 2229 - }, - { - "id": "t_connection", - "fg": 2230 - }, - { - "id": "unconnected", - "fg": 2225 - } - ] - }, - { - "id": [ - "fd_cigsmoke", - "fd_weedsmoke", - "fd_methsmoke", - "fd_cracksmoke" - ], - "fg": 2231, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 2232 - }, - { - "id": "corner", - "fg": 2233 - }, - { - "id": "edge", - "fg": 2234 - }, - { - "id": "end_piece", - "fg": 2235 - }, - { - "id": "t_connection", - "fg": 2236 - }, - { - "id": "unconnected", - "fg": 2231 - } - ] - }, - { - "id": "f_smoking_rack_active", - "fg": 2237, - "rotates": false - }, - { - "id": [ - "fd_smoke", - "fd_tear_gas" - ], - "fg": 2237, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "center", - "fg": 2238 - }, - { - "id": "corner", - "fg": 2239 - }, - { - "id": "edge", - "fg": 2240 - }, - { - "id": "end_piece", - "fg": 2241 - }, - { - "id": "t_connection", - "fg": 2242 - }, - { - "id": "unconnected", - "fg": 2237 - } - ] - }, - { - "id": "vp_xlframe_cover", - "fg": 2243, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 725 - } - ] - }, - { - "id": "vp_xlframe_vertical", - "fg": 275, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 725 - } - ] - }, - { - "id": "vp_xlframe_vertical_2", - "fg": 2244, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 725 - } - ] - }, - { - "id": [ - "vp_folding_frame", - "vp_xlframe_horizontal" - ], - "fg": 2245, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 725 - } - ] - }, - { - "id": "vp_xlframe_horizontal_2", - "fg": 2246, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 725 - } - ] - }, - { - "id": "vp_xlframe_cross", - "fg": 273, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 725 - } - ] - }, - { - "id": "vp_xlframe_nw", - "fg": 274, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 725 - } - ] - }, - { - "id": "vp_xlframe_sw", - "fg": 2247, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 725 - } - ] - }, - { - "id": "vp_xlframe_se", - "fg": 2248, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 725 - } - ] - }, - { - "id": "vp_xlframe_ne", - "fg": 2249, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 725 - } - ] - }, - { - "id": [ - "vp_halfboard_cover", - "vp_frame_cover" - ], - "fg": 2250, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "vp_frame_handle", - "fg": 2250, - "rotates": true - }, - { - "id": "vp_frame_vertical", - "fg": 2251, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "vp_frame_vertical_2", - "fg": 2252, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "vp_frame_horizontal", - "fg": 2253, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "vp_frame_horizontal_2", - "fg": 2254, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "vp_frame_cross", - "fg": 2255, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "vp_frame_nw", - "fg": 2256, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "vp_frame_sw", - "fg": 2257, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "vp_frame_se", - "fg": 2258, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "vp_frame_ne", - "fg": 2259, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": [ - "vp_frame_wood_cover", - "vp_frame_wood_handle", - "vp_frame_wood_light_cover", - "vp_frame_wood_light_handle" - ], - "fg": 2260, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 225 - } - ] - }, - { - "id": "vp_folding_wooden_frame", - "fg": 2261, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 225 - } - ] - }, - { - "id": [ - "vp_frame_wood_light_vertical", - "vp_frame_wood_vertical" - ], - "fg": 2262, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 225 - } - ] - }, - { - "id": [ - "vp_frame_wood_light_vertical_2", - "vp_frame_wood_vertical_2" - ], - "fg": 2263, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 225 - } - ] - }, - { - "id": [ - "vp_frame_wood_light_horizontal", - "vp_frame_wood_horizontal" - ], - "fg": 2264, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 225 - } - ] - }, - { - "id": [ - "vp_frame_wood_light_horizontal_2", - "vp_frame_wood_horizontal_2" - ], - "fg": 2265, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 225 - } - ] - }, - { - "id": [ - "vp_frame_wood_light_cross", - "vp_frame_wood_cross" - ], - "fg": 2266, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 225 - } - ] - }, - { - "id": [ - "vp_frame_wood_light_nw", - "vp_frame_wood_nw" - ], - "fg": 2267, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 225 - } - ] - }, - { - "id": [ - "vp_frame_wood_light_sw", - "vp_frame_wood_sw" - ], - "fg": 2268, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 225 - } - ] - }, - { - "id": [ - "vp_frame_wood_light_se", - "vp_frame_wood_se" - ], - "fg": 2269, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 225 - } - ] - }, - { - "id": [ - "vp_frame_wood_light_ne", - "vp_frame_wood_ne" - ], - "fg": 2270, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 225 - } - ] - }, - { - "id": "vp_hdframe_cover", - "fg": 2271, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2272 - } - ] - }, - { - "id": "vp_hdframe_vertical", - "fg": 2273, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2272 - } - ] - }, - { - "id": "vp_hdframe_vertical_2", - "fg": 2274, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2272 - } - ] - }, - { - "id": "vp_hdframe_horizontal", - "fg": 2275, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2272 - } - ] - }, - { - "id": "vp_hdframe_horizontal_2", - "fg": 2276, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2272 - } - ] - }, - { - "id": "vp_hdframe_cross", - "fg": 2277, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2272 - } - ] - }, - { - "id": "vp_hdframe_nw", - "fg": 2278, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2272 - } - ] - }, - { - "id": "vp_hdframe_sw", - "fg": 2279, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2272 - } - ] - }, - { - "id": "vp_hdframe_se", - "fg": 2280, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2272 - } - ] - }, - { - "id": "vp_hdframe_ne", - "fg": 2281, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2272 - } - ] - }, - { - "id": [ - "vp_door_opaque", - "vp_door_internal", - "vp_door" - ], - "fg": 2282, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2283 - }, - { - "id": "open", - "fg": 2284 - } - ] - }, - { - "id": "vp_fdoor", - "fg": 2282, - "rotates": false - }, - { - "id": [ - "vp_door_trunk", - "vp_hatch", - "vp_door_shutter", - "vp_door_sliding" - ], - "fg": 2285, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2286 - }, - { - "id": "open", - "fg": 2287 - } - ] - }, - { - "id": "vp_hatch_opaque", - "fg": 2285, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "open", - "fg": 2287 - } - ] - }, - { - "id": [ - "vp_door_wood", - "vp_door_wood_opaque" - ], - "fg": 2288, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2289 - }, - { - "id": "open", - "fg": 2290 - } - ] - }, - { - "id": [ - "vp_hdhatch", - "vp_hdhatch_opaque" - ], - "fg": 2291, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2292 - }, - { - "id": "open", - "fg": 2293 - } - ] - }, - { - "id": "boat_board", - "fg": 2294, - "rotates": false - }, - { - "id": "vp_boat_board", - "fg": 2295, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 225 - }, - { - "id": "center", - "fg": 2296 - }, - { - "id": "corner", - "fg": 2297 - }, - { - "id": "edge", - "fg": 2298 - }, - { - "id": "end_piece", - "fg": 2298 - }, - { - "id": "t_connection", - "fg": 2299 - }, - { - "id": "unconnected", - "fg": 2295 - } - ] - }, - { - "id": "hd_steel_drum", - "fg": 2300, - "rotates": true - }, - { - "id": "vp_roller_drum", - "fg": 2301, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": [ - "wheel_metal", - "wheel" - ], - "fg": 2302, - "rotates": false - }, - { - "id": "wheel_wood", - "fg": 2303, - "rotates": false - }, - { - "id": [ - "vp_wheel_bicycle_steerable", - "vp_wheel_bicycle" - ], - "fg": 2304, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2305 - } - ] - }, - { - "id": "vp_wheel_wheelchair", - "fg": 2306, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2305 - } - ] - }, - { - "id": "vp_wheel_caster", - "fg": 2307, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2305 - } - ] - }, - { - "id": "vp_wheel_wood", - "fg": 2303, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 225 - } - ] - }, - { - "id": [ - "vp_wheel", - "vp_wheel_steerable", - "vp_metal_wheel" - ], - "fg": 2302, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2305 - } - ] - }, - { - "id": [ - "wheel_wide", - "wheel_wide_or" - ], - "fg": 2308, - "rotates": false - }, - { - "id": [ - "vp_wheel_armor", - "vp_wheel_armor_steerable" - ], - "fg": 2309, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2305 - } - ] - }, - { - "id": [ - "vp_wheel_wide", - "vp_wheel_wide_steerable" - ], - "fg": 2308, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2305 - } - ] - }, - { - "id": "wheel_armor", - "fg": 2309, - "rotates": false - }, - { - "id": [ - "wheel_bicycle_or", - "wheel_motorbike", - "wheel_motorbike_or", - "wheel_slick", - "wheel_bicycle" - ], - "fg": 2310, - "rotates": false - }, - { - "id": [ - "vp_wheel_unicycle", - "vp_wheel_motorbike", - "vp_wheel_motorbike_steerable" - ], - "fg": 2310, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2305 - } - ] - }, - { - "id": [ - "wheel_barrow", - "wheel_small" - ], - "fg": 2311, - "rotates": true - }, - { - "id": [ - "vp_wheel_small", - "vp_wheel_small_steerable", - "vp_wheel_barrow" - ], - "fg": 2311, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2305 - } - ] - }, - { - "id": "vp_wheel_wood_b", - "fg": 2312, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 225 - } - ] - }, - { - "id": "wheel_wood_b", - "fg": 2312, - "rotates": false - }, - { - "id": "wheel_caster", - "fg": 2313, - "rotates": false - }, - { - "id": "wheel_wheelchair", - "fg": 2314, - "rotates": false - }, - { - "id": "vp_hand_rims", - "fg": 2315, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 1183 - } - ] - }, - { - "id": "hand_rims", - "fg": 2315, - "rotates": false - }, - { - "id": "vp_hand_paddles", - "fg": 2316, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 225 - } - ] - }, - { - "id": "foot_crank", - "fg": 2317, - "rotates": false - }, - { - "id": [ - "vp_engine_motor", - "vp_foot_pedals" - ], - "fg": 2250, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 1183 - } - ] - }, - { - "id": [ - "v12_diesel", - "1cyl_combustion", - "1cyl_combustion_small", - "v2_combustion", - "i4_combustion", - "v6_combustion", - "v8_combustion", - "v12_combustion", - "i6_diesel", - "v6_diesel", - "v8_diesel" - ], - "fg": 2318, - "rotates": false - }, - { - "id": [ - "vp_engine_1cyl", - "vp_engine_1cyl_small", - "vp_engine_vtwin", - "vp_engine_inline4", - "vp_engine_v6", - "vp_engine_v8", - "vp_engine_v12", - "vp_diesel_engine_v12", - "vp_engine_electric", - "vp_engine_electric_large", - "vp_engine_electric_small", - "vp_engine_electric_enhanced", - "vp_diesel_engine_i6", - "vp_diesel_engine_v6", - "vp_diesel_engine_v8" - ], - "fg": 2318, - "rotates": true - }, - { - "id": "vp_door_motor", - "fg": 2319, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "tr_engine", - "fg": 2320, - "rotates": false - }, - { - "id": [ - "motor_large", - "motor_small", - "motor_enhanced", - "alternator_bicycle", - "alternator_motorbike", - "alternator_car", - "alternator_truck", - "motor" - ], - "fg": 2321, - "rotates": false - }, - { - "id": [ - "vp_alternator_bicycle", - "vp_alternator_motorbike", - "vp_alternator_car", - "vp_alternator_truck" - ], - "fg": 2321, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 1183 - } - ] - }, - { - "id": [ - "vp_veh_table", - "vp_veh_table_wood" - ], - "fg": 2322, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 225 - } - ] - }, - { - "id": "v_table", - "fg": 2322, - "rotates": false - }, - { - "id": "inflatable_airbag", - "fg": 2323, - "rotates": false - }, - { - "id": "inflatable_section", - "fg": 2324, - "rotates": false - }, - { - "id": "vehicle_dashboard", - "fg": 2325, - "rotates": false - }, - { - "id": "basket", - "fg": 2326, - "rotates": false - }, - { - "id": [ - "vp_box", - "vp_folding wood box", - "vp_wood box", - "vp_basketsm", - "vp_basketsm_external" - ], - "fg": 2327, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 225 - } - ] - }, - { - "id": [ - "vp_basketlg", - "vp_basketlg_folding", - "vp_basketlg_external" - ], - "fg": 2326, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "bike_basket", - "fg": 2327, - "rotates": false - }, - { - "id": [ - "vp_cargo_space", - "vp_cargo_space_external" - ], - "fg": 2328, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "vp_trunk", - "fg": 2329, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 225 - } - ] - }, - { - "id": "cargo_rack", - "fg": 2328, - "rotates": false - }, - { - "id": "drive_by_wire_controls", - "fg": 2330, - "rotates": false - }, - { - "id": "robot_controls", - "fg": 2331, - "rotates": false - }, - { - "id": "vp_robot_controls", - "fg": 2331, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "vp_controls", - "fg": 2332, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "vp_drive_by_wire_controls", - "fg": 2330, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 1183 - } - ] - }, - { - "id": "vehicle_controls", - "fg": 2332, - "rotates": false - }, - { - "id": [ - "vp_fridge_cargo", - "fridge_cargo" - ], - "fg": 2333, - "rotates": false - }, - { - "id": "vp_veh_forge", - "fg": 2334, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 812 - } - ] - }, - { - "id": "vp_water_faucet", - "fg": 2335, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 812 - } - ] - }, - { - "id": "forgerig", - "fg": 2334, - "rotates": false - }, - { - "id": "muffler", - "fg": 2336, - "rotates": false - }, - { - "id": "vp_chemlab", - "fg": 2337, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 812 - } - ] - }, - { - "id": "chemlab", - "fg": 2337, - "rotates": false - }, - { - "id": [ - "car_headlight", - "wide_headlight_reinforced", - "car_wide_headlight", - "headlight_reinforced" - ], - "fg": 2338, - "rotates": true - }, - { - "id": "floodlight", - "fg": 2338, - "rotates": false - }, - { - "id": "vp_headlight_reinforced", - "fg": 2339, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": [ - "vp_horn_car", - "vp_horn_big", - "vp_beeper", - "vp_chimes" - ], - "fg": 2340, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": [ - "vp_head_light", - "vp_headlight", - "vp_floodlight" - ], - "fg": 2338, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "vp_kitchen_unit", - "fg": 2341, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 812 - } - ] - }, - { - "id": "kitchen_unit", - "fg": 2341, - "rotates": false - }, - { - "id": "light_emergency_red", - "fg": 2342, - "rotates": false - }, - { - "id": "omnicamera", - "fg": 2343, - "rotates": false - }, - { - "id": "vp_light_blue", - "fg": 2344, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "vp_light_red", - "fg": 2342, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 1183 - } - ] - }, - { - "id": "vp_omnicam", - "fg": 2343, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 1183 - } - ] - }, - { - "id": "light_emergency_blue", - "fg": 2344, - "rotates": false - }, - { - "id": "minifreezer", - "fg": 2345, - "rotates": false - }, - { - "id": "vp_minifridge", - "fg": 2346, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 812 - } - ] - }, - { - "id": "vp_minifreezer", - "fg": 2345, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 812 - } - ] - }, - { - "id": "minifridge", - "fg": 2346, - "rotates": false - }, - { - "id": "vp_recharge_station", - "fg": 2347, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 812 - } - ] - }, - { - "id": "recharge_station", - "fg": 2347, - "rotates": false - }, - { - "id": "vp_tracker", - "fg": 2348, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "vp_vehicle_alarm", - "fg": 2348, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 1183 - } - ] - }, - { - "id": "veh_tracker", - "fg": 2348, - "rotates": false - }, - { - "id": "craftrig", - "fg": 2349, - "rotates": true - }, - { - "id": "vp_welding_rig", - "fg": 2350, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 812 - } - ] - }, - { - "id": "vp_craft_rig", - "fg": 2349, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 812 - } - ] - }, - { - "id": "weldrig", - "fg": 2350, - "rotates": false - }, - { - "id": "vp_saddle", - "fg": 2351, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "saddle", - "fg": 2351, - "rotates": false - }, - { - "id": "vp_cam_control", - "fg": 2352, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 1183 - } - ] - }, - { - "id": "camera_control", - "fg": 2352, - "rotates": false - }, - { - "id": "w_table", - "fg": 2353, - "rotates": false - }, - { - "id": [ - "vp_inboard_mirror", - "vp_wing_mirror" - ], - "fg": 2354, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "vp_horn_bicycle", - "fg": 2355, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "vp_inflatable_airbag", - "fg": 2356, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2272 - }, - { - "id": "center", - "fg": 2357 - }, - { - "id": "corner", - "fg": 2358 - }, - { - "id": "edge", - "fg": 2359 - }, - { - "id": "end_piece", - "fg": 2359 - }, - { - "id": "t_connection", - "fg": 2360 - }, - { - "id": "unconnected", - "fg": 2356 - } - ] - }, - { - "id": "vp_inflatable_section", - "fg": 2361, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2272 - }, - { - "id": "center", - "fg": 2362 - }, - { - "id": "corner", - "fg": 2363 - }, - { - "id": "edge", - "fg": 2364 - }, - { - "id": "end_piece", - "fg": 2364 - }, - { - "id": "t_connection", - "fg": 2365 - }, - { - "id": "unconnected", - "fg": 2361 - } - ] - }, - { - "id": [ - "vp_fxlhalfboard_vertical", - "vp_board_vertical", - "vp_clothboard_vertical", - "vp_cloth_halfboard_vertical", - "vp_xlhalfboard_vertical", - "vp_halfboard_vertical" - ], - "fg": 2366, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": [ - "vp_fxlhalfboard_vertical_2", - "vp_xlhalfboard_vertical_2", - "vp_halfboard_vertical_2", - "vp_cloth_halfboard_vertical_2" - ], - "fg": 2367, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": [ - "vp_fxlhalfboard_horizontal", - "vp_clothboard_horizontal", - "vp_cloth_halfboard_horizontal", - "vp_xlhalfboard_horizontal", - "vp_halfboard_horizontal", - "vp_board_horizontal" - ], - "fg": 2368, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": [ - "vp_fxlhalfboard_horizontal_2", - "vp_xlhalfboard_horizontal_2", - "vp_halfboard_horizontal_2", - "vp_cloth_halfboard_horizontal_2" - ], - "fg": 2369, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "vp_halfboard_cross", - "fg": 2370, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": [ - "vp_fxlhalfboard_nw", - "vp_clothboard_nw", - "vp_cloth_halfboard_nw", - "vp_xlhalfboard_nw", - "vp_halfboard_nw", - "vp_board_nw" - ], - "fg": 2371, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": [ - "vp_fxlhalfboard_sw", - "vp_clothboard_sw", - "vp_cloth_halfboard_sw", - "vp_xlhalfboard_sw", - "vp_halfboard_sw", - "vp_board_sw" - ], - "fg": 2372, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": [ - "vp_fxlhalfboard_se", - "vp_clothboard_se", - "vp_cloth_halfboard_se", - "vp_xlhalfboard_se", - "vp_halfboard_se", - "vp_board_se" - ], - "fg": 2373, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": [ - "vp_fxlhalfboard_ne", - "vp_clothboard_ne", - "vp_cloth_halfboard_ne", - "vp_xlhalfboard_ne", - "vp_halfboard_ne", - "vp_board_ne" - ], - "fg": 2374, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": [ - "vp_hdboard_vertical", - "vp_hdhalfboard_vertical" - ], - "fg": 2375, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2272 - } - ] - }, - { - "id": "vp_hdhalfboard_vertical_2", - "fg": 2376, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2272 - } - ] - }, - { - "id": [ - "vp_hdboard_horizontal", - "vp_hdhalfboard_horizontal" - ], - "fg": 2377, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2272 - } - ] - }, - { - "id": "vp_hdhalfboard_horizontal_2", - "fg": 2378, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2272 - } - ] - }, - { - "id": [ - "vp_hdboard_nw", - "vp_hdhalfboard_nw" - ], - "fg": 2379, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2272 - } - ] - }, - { - "id": [ - "vp_hdboard_sw", - "vp_hdhalfboard_sw" - ], - "fg": 2380, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2272 - } - ] - }, - { - "id": [ - "vp_hdboard_se", - "vp_hdhalfboard_se" - ], - "fg": 2381, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2272 - } - ] - }, - { - "id": [ - "vp_hdboard_ne", - "vp_hdhalfboard_ne" - ], - "fg": 2382, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2272 - } - ] - }, - { - "id": [ - "vp_woodboard_vertical", - "vp_woodhalfboard_vertical" - ], - "fg": 2383, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 225 - } - ] - }, - { - "id": "vp_woodhalfboard_vertical_2", - "fg": 2384, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 225 - } - ] - }, - { - "id": [ - "vp_woodboard_horizontal", - "vp_woodhalfboard_horizontal" - ], - "fg": 2385, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 225 - } - ] - }, - { - "id": "vp_woodhalfboard_horizontal_2", - "fg": 2386, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 225 - } - ] - }, - { - "id": [ - "vp_woodboard_nw", - "vp_woodhalfboard_nw" - ], - "fg": 2387, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 225 - } - ] - }, - { - "id": [ - "vp_woodboard_sw", - "vp_woodhalfboard_sw" - ], - "fg": 2388, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 225 - } - ] - }, - { - "id": [ - "vp_woodboard_se", - "vp_woodhalfboard_se" - ], - "fg": 2389, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 225 - } - ] - }, - { - "id": [ - "vp_woodboard_ne", - "vp_woodhalfboard_ne" - ], - "fg": 2390, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 225 - } - ] - }, - { - "id": "vp_stowboard_vertical", - "fg": 2391, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "vp_stowboard_horizontal", - "fg": 2392, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "vp_stowboard_nw", - "fg": 2393, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "vp_stowboard_sw", - "fg": 2394, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "vp_stowboard_se", - "fg": 2395, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "vp_stowboard_ne", - "fg": 2396, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "vp_hdstowboard_vertical", - "fg": 2397, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2272 - } - ] - }, - { - "id": "vp_hdstowboard_horizontal", - "fg": 2398, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2272 - } - ] - }, - { - "id": "vp_hdstowboard_nw", - "fg": 2399, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2272 - } - ] - }, - { - "id": "vp_hdstowboard_sw", - "fg": 2400, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2272 - } - ] - }, - { - "id": "vp_hdstowboard_se", - "fg": 2401, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2272 - } - ] - }, - { - "id": "vp_hdstowboard_ne", - "fg": 2402, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2272 - } - ] - }, - { - "id": "vp_aisle_vertical", - "fg": 2403, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "vp_aisle_horizontal", - "fg": 2404, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "vp_wooden_aisle_vertical", - "fg": 2405, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 225 - } - ] - }, - { - "id": "vp_wooden_aisle_horizontal", - "fg": 2406, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 225 - } - ] - }, - { - "id": [ - "vp_aisle_lights", - "vp_lit_aisle_vertical" - ], - "fg": 2407, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "vp_lit_aisle_horizontal", - "fg": 2408, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "vp_trunk_floor", - "fg": 2409, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": [ - "vp_roof_cloth", - "vp_roof_wood", - "vp_roof" - ], - "fg": 2410, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": "vp_hdroof", - "fg": 2411, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": [ - "vp_jumper_cable_heavy", - "vp_jumper_cable" - ], - "fg": 2412, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": [ - "vp_mounted_m1918", - "vp_flamethrower" - ], - "fg": 2413, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": [ - "vp_mounted_rm298", - "vp_mounted_rm614" - ], - "fg": 2414, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 155 - } - ] - }, - { - "id": [ - "vp_tow_launcher", - "vp_tow_turret" - ], - "fg": 2413, - "rotates": true - }, - { - "id": [ - "vp_fusion_gun", - "vp_laser_rifle" - ], - "fg": 2415, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2416 - } - ] - }, - { - "id": [ - "vp_mounted_browning", - "vp_mounted_mk19", - "vp_mounted_abzats" - ], - "fg": 2417, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2272 - } - ] - }, - { - "id": [ - "vp_m249", - "vp_mounted_m240", - "vp_mounted_m60", - "vp_mounted_m134" - ], - "fg": 2418, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 1661 - } - ] - }, - { - "id": [ - "vp_plasmagun", - "vp_plasma_gun" - ], - "fg": 2419, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 1661 - } - ] - }, - { - "id": [ - "vp_mounted_howitzer", - "vp_mounted_tank_auto", - "vp_mounted_tank_manual", - "vp_mounted_tank_rws", - "vp_m240", - "vp_m60" - ], - "fg": 2417, - "rotates": true - }, - { - "id": "vp_mounted_30mm_autocannon", - "fg": 2414, - "rotates": true - }, - { - "id": [ - "vp_watercannon", - "vp_shockcannon_mounted" - ], - "fg": 2419, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 1531 - } - ] - }, - { - "id": "vp_bfg_mounted", - "fg": 2420, - "rotates": true - }, - { - "id": "vp_blade_horizontal", - "fg": 2421, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 725 - } - ] - }, - { - "id": "vp_cargo_lock", - "fg": 2422, - "rotates": false - }, - { - "id": "vp_crane_tiny", - "fg": 2423, - "rotates": true - }, - { - "id": "vp_storage_battery_mount", - "fg": 2424, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 1183 - } - ] - }, - { - "id": "vp_generator_7500w", - "fg": 2425, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 1183 - } - ] - }, - { - "id": "vp_external_tank_small", - "fg": 2426, - "rotates": true - }, - { - "id": "vp_forklift_fork", - "fg": 2427, - "rotates": true - }, - { - "id": "vp_stereo", - "fg": 2428, - "rotates": false, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 812 - } - ] - }, - { - "id": [ - "vp_reaper_advanced", - "vp_reaper" - ], - "fg": 2429, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 1661 - } - ] - }, - { - "id": "vp_plating_hard", - "fg": 2430, - "rotates": true - }, - { - "id": "vp_plating_military", - "fg": 2431, - "rotates": true - }, - { - "id": [ - "vp_plating_steel", - "vp_plating_chitin" - ], - "fg": 2432, - "rotates": true - }, - { - "id": "vp_plating_superalloy", - "fg": 2433, - "rotates": true - }, - { - "id": "vp_plating_wood", - "fg": 2434, - "rotates": true - }, - { - "id": "vp_plating_bone", - "fg": 2435, - "rotates": true - }, - { - "id": "vp_plating_spiked", - "fg": 2436, - "rotates": true - }, - { - "id": "vp_reinforced_windshield", - "fg": 2437, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2438 - } - ] - }, - { - "id": "vp_seatbelt_heavyduty", - "fg": 2439, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2135 - } - ] - }, - { - "id": [ - "vp_seed_drill_advanced", - "vp_seed_drill" - ], - "fg": 2440, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 1531 - } - ] - }, - { - "id": "vp_spike", - "fg": 2441, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 725 - } - ] - }, - { - "id": "vp_windshield", - "fg": 2442, - "rotates": true, - "multitile": true, - "additional_tiles": [ - { - "id": "broken", - "fg": 2438 - } - ] - }, - { - "id": "mon_flashbang_hack", - "fg": 2443, - "rotates": false - }, - { - "id": "bot_flashbang_hack", - "fg": 2444, - "rotates": false - }, - { - "id": "broken_flashbang_hack", - "fg": 2445, - "rotates": false - }, - { - "id": "mon_gasbomb_hack", - "fg": 2446, - "rotates": false - }, - { - "id": "bot_gasbomb_hack", - "fg": 2447, - "rotates": false - }, - { - "id": "broken_gasbomb_hack", - "fg": 2448, - "rotates": false - }, - { - "id": "mon_EMP_hack", - "fg": 2449, - "rotates": false - }, - { - "id": "bot_EMP_hack", - "fg": 2450, - "rotates": false - }, - { - "id": "broken_EMP_hack", - "fg": 2451, - "rotates": false - }, - { - "id": "mon_grenade_hack", - "fg": 2452, - "rotates": false - }, - { - "id": "bot_grenade_hack", - "fg": 2453, - "rotates": false - }, - { - "id": "broken_grenade_hack", - "fg": 2454, - "rotates": false - }, - { - "id": "mon_c4_hack", - "fg": 2455, - "rotates": false - }, - { - "id": "bot_c4_hack", - "fg": 2456, - "rotates": false - }, - { - "id": "broken_c4_hack", - "fg": 2457, - "rotates": false - }, - { - "id": "mon_manhack", - "fg": 2458, - "rotates": false - }, - { - "id": "bot_manhack", - "fg": 2459, - "rotates": false - }, - { - "id": "broken_manhack", - "fg": 2460, - "rotates": false - }, - { - "id": "mon_manhack_fire", - "fg": 2461, - "rotates": false - }, - { - "id": "bot_manhack_fire", - "fg": 2462, - "rotates": false - }, - { - "id": "broken_manhack_fire", - "fg": 2463, - "rotates": false - }, - { - "id": "mon_manhack_missile", - "fg": 2464, - "rotates": false - }, - { - "id": "bot_manhack_missile", - "fg": 2465, - "rotates": false - }, - { - "id": "manhack_firebomb", - "fg": 2466, - "rotates": false - }, - { - "id": "manhack_firebomb_act", - "fg": 2467, - "rotates": false - }, - { - "id": "mon_mininuke_hack", - "fg": 2468, - "rotates": false - }, - { - "id": "bot_mininuke_hack", - "fg": 2469, - "rotates": false - }, - { - "id": "broken_mininuke_hack", - "fg": 2470, - "rotates": false - }, - { - "id": "mon_broken_cyborg", - "fg": 2471, - "rotates": false - }, - { - "id": "mon_prototype_cyborg", - "fg": 2472, - "rotates": false - }, - { - "id": "mon_chickenbot", - "fg": 2473, - "rotates": false - }, - { - "id": "mon_copbot", - "fg": 2474, - "rotates": false - }, - { - "id": "broken_copbot", - "fg": 2475, - "rotates": false - }, - { - "id": "mon_cyborg_cop", - "fg": 2476, - "rotates": false - }, - { - "id": "mon_cyborg_guard", - "fg": 2477, - "rotates": false - }, - { - "id": "mon_eyebot", - "fg": 2478, - "rotates": false - }, - { - "id": "broken_eyebot", - "fg": 2479, - "rotates": false - }, - { - "id": "mon_hazmatbot", - "fg": 2480, - "rotates": false - }, - { - "id": "mon_turret", - "fg": 2481, - "rotates": false - }, - { - "id": "bot_turret", - "fg": 2482, - "rotates": false - }, - { - "id": "mon_turret_rifle", - "fg": 2483, - "rotates": false - }, - { - "id": "bot_rifleturret", - "fg": 2484, - "rotates": false - }, - { - "id": "mon_turret_shockcannon", - "fg": 2485, - "rotates": false - }, - { - "id": "bot_turret_shockcannon", - "fg": 2486, - "rotates": false - }, - { - "id": "mon_laserturret", - "fg": 2487, - "rotates": false - }, - { - "id": "bot_laserturret", - "fg": 2488, - "rotates": false - }, - { - "id": "mon_turret_bmg", - "fg": 2489, - "rotates": false - }, - { - "id": "mon_turret_searchlight", - "fg": 2490, - "rotates": false - }, - { - "id": "mon_science_bot", - "fg": 2491, - "rotates": false - }, - { - "id": "bot_science_bot", - "fg": 2492, - "rotates": false - }, - { - "id": "broken_science_bot", - "fg": 2493, - "rotates": false - }, - { - "id": "mon_molebot", - "fg": 2494, - "rotates": false - }, - { - "id": "broken_molebot", - "fg": 2495, - "rotates": false - }, - { - "id": "mon_riotbot", - "fg": 2496, - "rotates": false - }, - { - "id": "broken_riotbot", - "fg": 2497, - "rotates": false - }, - { - "id": "mon_dispatch", - "fg": 2498, - "rotates": false - }, - { - "id": "bot_dispatch", - "fg": 2499, - "rotates": false - }, - { - "id": "broken_dispatch", - "fg": 2500, - "rotates": false - }, - { - "id": "mon_dispatch_military", - "fg": 2501, - "rotates": false - }, - { - "id": "bot_dispatch_military", - "fg": 2502, - "rotates": false - }, - { - "id": "broken_dispatch_military", - "fg": 2503, - "rotates": false - }, - { - "id": "mon_robot_drone", - "fg": 2504, - "rotates": false - }, - { - "id": "bot_robot_drone", - "fg": 2505, - "rotates": false - }, - { - "id": "broken_robot_drone", - "fg": 2506, - "rotates": false - }, - { - "id": "mon_secubot", - "fg": 2507, - "rotates": false - }, - { - "id": "bot_antimateriel", - "fg": 2508, - "rotates": false - }, - { - "id": "mon_skitterbot", - "fg": 2509, - "rotates": false - }, - { - "id": "bot_skitterbot", - "fg": 2510, - "rotates": false - }, - { - "id": "broken_skitterbot", - "fg": 2511, - "rotates": false - }, - { - "id": "mon_tankbot", - "fg": 2512, - "rotates": false - }, - { - "id": "broken_tankbot", - "fg": 2513, - "rotates": false - }, - { - "id": "mon_w11b20b4", - "fg": 2514, - "rotates": false - }, - { - "id": "mon_w11h10", - "fg": 2515, - "rotates": false - }, - { - "id": "mon_w12b10", - "fg": 2516, - "rotates": false - }, - { - "id": "mon_w12n10", - "fg": 2517, - "rotates": false - }, - { - "id": "mon_w11b10", - "fg": 2518, - "rotates": false - }, - { - "id": "mon_generator_SCINET", - "fg": 2519, - "rotates": false - }, - { - "id": [ - "bot_cyberdemon", - "bot_hell_baron", - "bot_hell_knight", - "bot_imp", - "bot_imp_black", - "bot_lostsoul", - "bot_mancubus", - "bot_mechaspider", - "bot_rat", - "bot_revenant", - "bot_spider_trapdoor_giant", - "bot_spider_trapdoor_giant_guardian", - "bot_spider_web_omega", - "bot_spider_web_s", - "bot_trapdoor_s", - "bot_pinky", - "bot_acidic_pk", - "bot_blind", - "bot_cacodemon_revive", - "bot_cherub", - "bot_cherub_fly", - "bot_churl_revive", - "bot_grabber", - "bot_hell_knight_revive", - "bot_hollow", - "bot_imp_revive", - "bot_pinky_revive", - "bot_shady", - "bot_thing_head", - "bot_thing_spider", - "bot_tripod", - "bot_cacodemon" - ], - "fg": 2520, - "rotates": false - }, - { - "id": "mon_doom_archdemon", - "fg": 2521, - "rotates": false - }, - { - "id": [ - "mon_doom_archvile_2", - "mon_doom_archvile_3", - "mon_doom_archvile_4", - "mon_doom_archvile_5", - "mon_doom_archvile" - ], - "fg": 2522, - "rotates": false - }, - { - "id": "mon_doom_archvile_queen", - "fg": 2523, - "rotates": false - }, - { - "id": [ - "mon_hell_knight_revive", - "mon_hell_knight" - ], - "fg": 2524, - "rotates": false - }, - { - "id": "mon_hell_baron", - "fg": 2525, - "rotates": false - }, - { - "id": "mon_cyberdemon", - "fg": 2526, - "rotates": false - }, - { - "id": "mon_mechaspider_queen", - "fg": 2527, - "rotates": false - }, - { - "id": "mon_mechaspider", - "fg": 2528, - "rotates": false - }, - { - "id": "broken_mechaspider", - "fg": 2529, - "rotates": false - }, - { - "id": [ - "mon_cacodemon_revive", - "mon_cacodemon" - ], - "fg": 2530, - "rotates": false - }, - { - "id": "mon_mancubus", - "fg": 2531, - "rotates": false - }, - { - "id": "mon_revenant", - "fg": 2532, - "rotates": false - }, - { - "id": "mon_tripod", - "fg": 2533, - "rotates": false - }, - { - "id": "broken_tripod", - "fg": 2534, - "rotates": false - }, - { - "id": [ - "mon_imp_revive", - "mon_imp" - ], - "fg": 2535, - "rotates": false - }, - { - "id": "mon_imp_black", - "fg": 2536, - "rotates": false - }, - { - "id": [ - "mon_pinky_revive", - "mon_pinky" - ], - "fg": 2537, - "rotates": false - }, - { - "id": "mon_lostsoul", - "fg": 2538, - "rotates": false - }, - { - "id": "mon_lostsoul_mount", - "fg": 2539, - "rotates": false - }, - { - "id": [ - "mon_cherub_fly", - "mon_cherub" - ], - "fg": 2540, - "rotates": false - }, - { - "id": [ - "mon_doom_churl", - "mon_doom_churl_revive" - ], - "fg": 2541, - "rotates": false - }, - { - "id": "mon_doom_slave", - "fg": 2542, - "rotates": false - }, - { - "id": "mon_doom_cur", - "fg": 2543, - "rotates": false - }, - { - "id": "mon_doom_sacrifice", - "fg": 2544, - "rotates": false - }, - { - "id": "mon_soulcube", - "fg": 2545, - "rotates": false - }, - { - "id": [ - "broken_soulcube", - "soulcube" - ], - "fg": 2546, - "rotates": false - }, - { - "id": "soulcube_on", - "fg": 2547, - "rotates": false - }, - { - "id": "soulcube_charging", - "fg": 2548, - "rotates": false - }, - { - "id": "mon_shoggoth", - "fg": 2549, - "rotates": false - }, - { - "id": "mon_flying_polyp", - "fg": 2550, - "rotates": false - }, - { - "id": "mon_legion", - "fg": 2551, - "rotates": false - }, - { - "id": "mon_mi_go_fly", - "fg": 2552, - "rotates": false - }, - { - "id": "mon_mi_go_terminal", - "fg": 2553, - "rotates": false - }, - { - "id": "mon_mi_go", - "fg": 2554, - "rotates": false - }, - { - "id": "mon_thing", - "fg": 2555, - "rotates": false - }, - { - "id": "mon_thing_head", - "fg": 2556, - "rotates": false - }, - { - "id": "mon_thing_spider", - "fg": 2557, - "rotates": false - }, - { - "id": "mon_thing_swamp", - "fg": 2558, - "rotates": false - }, - { - "id": "mon_gozu", - "fg": 2559, - "rotates": false - }, - { - "id": "mon_headless_dog_thing", - "fg": 2560, - "rotates": false - }, - { - "id": "mon_darkman", - "fg": 2561, - "rotates": false - }, - { - "id": "mon_shadow", - "fg": 2562, - "rotates": false - }, - { - "id": "mon_blank", - "fg": 2563, - "rotates": false - }, - { - "id": "mon_nuculais", - "fg": 2564, - "rotates": false - }, - { - "id": "mon_horror_dusk_queen", - "fg": 2565, - "rotates": false - }, - { - "id": "mon_horror_dusk", - "fg": 2566, - "rotates": false - }, - { - "id": "mon_hunting_horror", - "fg": 2567, - "rotates": false - }, - { - "id": "mon_flaming_eye", - "fg": 2568, - "rotates": false - }, - { - "id": "mon_stemcell_nether", - "fg": 2569, - "rotates": false - }, - { - "id": "mon_amigara_horror", - "fg": 2570, - "rotates": false - }, - { - "id": "mon_vortex", - "fg": 2571, - "rotates": false - }, - { - "id": "mon_twisted_body", - "fg": 2572, - "rotates": false - }, - { - "id": "mon_flesh_angel", - "fg": 2573, - "rotates": false - }, - { - "id": "mon_charred_nightmare", - "fg": 2574, - "rotates": false - }, - { - "id": "mon_crawler", - "fg": 2575, - "rotates": false - }, - { - "id": "debug_mon", - "fg": 2576, - "rotates": false - }, - { - "id": [ - "mon_jabberwock_pk", - "mon_jabberwock" - ], - "fg": 2577, - "rotates": false - }, - { - "id": "mon_human_snail", - "fg": 2578, - "rotates": false - }, - { - "id": [ - "mon_irradiated_wanderer_2", - "mon_irradiated_wanderer_3", - "mon_irradiated_wanderer_4", - "mon_irradiated_wanderer_1" - ], - "fg": 2579, - "rotates": false - }, - { - "id": "mon_marloss_man", - "fg": 2580, - "rotates": false - }, - { - "id": "mon_furvivor", - "fg": 2581, - "rotates": false - }, - { - "id": [ - "mon_furvivor_glock", - "mon_furvivor_pk", - "mon_furvivor_shotgun", - "mon_furvivor_smg", - "mon_furvivor_deagle" - ], - "fg": 2582, - "rotates": false - }, - { - "id": "mon_cult_slave", - "fg": 2583, - "rotates": false - }, - { - "id": "mon_hologram", - "fg": 2584, - "rotates": false - }, - { - "id": [ - "mon_shia", - "mon_zombie_jackson" - ], - "fg": 2585, - "rotates": false - }, - { - "id": "mon_chud", - "fg": 2586, - "rotates": false - }, - { - "id": "mon_dementia", - "fg": 2587, - "rotates": false - }, - { - "id": "mon_hallu_mom", - "fg": 2588, - "rotates": false - }, - { - "id": "mon_one_eye", - "fg": 2589, - "rotates": false - }, - { - "id": "mon_ratman_ninja", - "fg": 2590, - "rotates": false - }, - { - "id": "mon_rat_king", - "fg": 2591, - "rotates": false - }, - { - "id": "mon_leonardo", - "fg": 2592, - "rotates": false - }, - { - "id": "mon_michelangelo", - "fg": 2593, - "rotates": false - }, - { - "id": "mon_raphael", - "fg": 2594, - "rotates": false - }, - { - "id": "mon_donatello", - "fg": 2595, - "rotates": false - }, - { - "id": "mon_cult_churl", - "fg": 2596, - "rotates": false - }, - { - "id": "mon_bear_mega_mating", - "fg": 2597, - "rotates": false - }, - { - "id": "mon_bear_mega", - "fg": 2598, - "rotates": false - }, - { - "id": "mon_zombie_bear_mega", - "fg": 2599, - "rotates": false - }, - { - "id": "mon_bear_mega_kid", - "fg": 2600, - "rotates": false - }, - { - "id": "mon_bear_mega_baby", - "fg": 2601, - "rotates": false - }, - { - "id": [ - "mon_bear_pk", - "mon_bear_weak", - "mon_bear" - ], - "fg": 2602, - "rotates": false - }, - { - "id": [ - "mon_bear_smoky", - "mon_bear_smoky_pk" - ], - "fg": 2603, - "rotates": false - }, - { - "id": "mon_zombear", - "fg": 2604, - "rotates": false - }, - { - "id": "mon_bobcat", - "fg": 2605, - "rotates": false - }, - { - "id": [ - "mon_cougar_pk", - "mon_cougar_weak", - "mon_cougar" - ], - "fg": 2606, - "rotates": false - }, - { - "id": "mon_fougar", - "fg": 2607, - "rotates": false - }, - { - "id": "mon_zougar", - "fg": 2608, - "rotates": false - }, - { - "id": "mon_cat", - "fg": 2609, - "rotates": false - }, - { - "id": "mon_wolf", - "fg": 2610, - "rotates": false - }, - { - "id": "mon_folf", - "fg": 2611, - "rotates": false - }, - { - "id": "mon_zolf", - "fg": 2612, - "rotates": false - }, - { - "id": "mon_zolf_shady", - "fg": 2613, - "rotates": false - }, - { - "id": "mon_zolf_scorched", - "fg": 2614, - "rotates": false - }, - { - "id": [ - "mon_dog_bcollie", - "mon_dog_boxer", - "mon_dog_gshepherd", - "mon_dog_gpyrenees", - "mon_dog_rottweiler", - "mon_dog_auscattle", - "mon_dog_thing", - "mon_dog_large", - "mon_dog" - ], - "fg": 2615, - "rotates": false - }, - { - "id": [ - "mon_dog_bull", - "mon_dog_bull_pup", - "mon_dog_pitbullmix", - "mon_dog_pitbullmix_pup", - "mon_dog_beagle", - "mon_dog_beagle_pup", - "mon_dog_bcollie_pup", - "mon_dog_boxer_pup", - "mon_dog_chihuahua", - "mon_dog_chihuahua_pup", - "mon_dog_dachshund", - "mon_dog_dachshund_pup", - "mon_dog_gshepherd_pup", - "mon_dog_gpyrenees_pup", - "mon_dog_rottweiler_pup", - "mon_dog_auscattle_pup", - "mon_dog_pup" - ], - "fg": 2616, - "rotates": false - }, - { - "id": [ - "mon_coyote_wolf", - "mon_coyote_small", - "mon_coyote" - ], - "fg": 2617, - "rotates": false - }, - { - "id": "mon_coyote_wolf_zerg", - "fg": 2618, - "rotates": false - }, - { - "id": "mon_fox_red", - "fg": 2619, - "rotates": false - }, - { - "id": "mon_fox_gray", - "fg": 2620, - "rotates": false - }, - { - "id": "mon_pig_saber", - "fg": 2621, - "rotates": false - }, - { - "id": "mon_pig", - "fg": 2622, - "rotates": false - }, - { - "id": "mon_fungus_pig", - "fg": 2623, - "rotates": false - }, - { - "id": "mon_zombie_pig", - "fg": 2624, - "rotates": false - }, - { - "id": [ - "mon_moose_pk", - "mon_moose_weak", - "mon_moose" + "bio_null", + "bio_power_storage", + "bio_power_storage_mkII", + "bio_batteries", + "bio_metabolics", + "bio_solar", + "bio_torsionratchet", + "bio_furnace", + "bio_ethanol", + "bio_memory", + "bio_ears", + "bio_eye_enhancer", + "bio_dex_enhancer", + "bio_str_enhancer", + "bio_int_enhancer", + "bio_membrane", + "bio_targeting", + "bio_gills", + "bio_purifier", + "bio_climate", + "bio_storage", + "bio_recycler", + "bio_digestion", + "bio_tools", + "bio_shock", + "bio_heat_absorb", + "bio_carbon", + "bio_armor_head", + "bio_armor_torso", + "bio_armor_arms", + "bio_armor_legs", + "bio_flashlight", + "bio_night_vision", + "bio_infrared", + "bio_face_mask", + "bio_ads", + "bio_ods", + "bio_scent_mask", + "bio_scent_vision", + "bio_cloak", + "bio_painkiller", + "bio_nanobots", + "bio_heatsink", + "bio_resonator", + "bio_time_freeze", + "bio_teleport", + "bio_blood_anal", + "bio_blood_filter", + "bio_alarm", + "bio_evap", + "bio_lighter", + "bio_claws", + "bio_blaster", + "bio_laser", + "bio_emp", + "bio_hydraulics", + "bio_water_extractor", + "bio_magnet", + "bio_fingerhack", + "bio_lockpick", + "bio_ground_sonar", + "bio_power_armor_interface", + "bio_power_armor_interface_mkII", + "bio_flashbang", + "bio_railgun", + "bio_probability_travel", + "bio_shockwave", + "bio_chain_lightning", + "bio_night", + "bio_uncanny_dodge", + "bio_dis_shock", + "bio_dis_acid", + "bio_drain", + "bio_noise", + "bio_power_weakness", + "bio_sunglasses", + "bio_speed", + "bio_watch", + "bio_faraday", + "bio_armor_eyes", + "bio_leukocyte", + "bio_geiger", + "bio_radscrubber", + "bio_adrenaline", + "bio_razors", + "bio_blade", + "bio_itchy", + "bio_nostril", + "bio_thumbs", + "bio_spasm", + "bio_shakes", + "bio_leaky", + "bio_sleepy", + "bio_deformity", + "bio_voice", + "bio_pokedeye", + "bio_ankles", + "bio_trip", + "bio_cqb", + "bio_meteorologist", + "bio_ups", + "bio_remote", + "bio_advreactor", + "bio_plut_filter", + "bio_reactor", + "bio_reactor_upgrade", + "bio_stiff", + "bio_eye_optic", + "bio_chest_gun", + "bio_emp_armgun", + "bio_surgical_razor", + "bio_cable" ], - "fg": 2625, - "rotates": false - }, - { - "id": "mon_foose", - "fg": 2626, - "rotates": false - }, - { - "id": "mon_zoose", - "fg": 2627, - "rotates": false - }, - { - "id": "mon_horse", - "fg": 2628, - "rotates": false - }, - { - "id": "mon_horse_zombie", - "fg": 2629, - "rotates": false - }, - { - "id": "mon_horse_zombie_scorched", - "fg": 2630, - "rotates": false - }, - { - "id": "mon_deer_rutting", - "fg": 2631, - "rotates": false - }, - { - "id": "mon_deer", - "fg": 2632, - "rotates": false - }, - { - "id": "mon_deer_small", - "fg": 2633, - "rotates": false - }, - { - "id": "mon_feer", - "fg": 2634, - "rotates": false - }, - { - "id": "mon_goat", - "fg": 2635, - "rotates": false - }, - { - "id": "mon_sheep", - "fg": 2636, - "rotates": false - }, - { - "id": "mon_cow", - "fg": 2637, + "fg": 1211, "rotates": false }, + { "id": [ "control_chip", "burnt_out_bionic" ], "fg": 1212, "rotates": false }, { - "id": "mon_nakedmolerat_giant", - "fg": 2638, + "id": [ "120mm_usable_heat", "120mm_usable_shot", "120mm_usable_slug", "120mm_usable_ap" ], + "fg": 1213, "rotates": false }, + { "id": "12mm", "fg": 1214, "rotates": false }, { "id": [ - "mon_beaver", - "mon_muskrat", - "mon_chipmunk" - ], - "fg": 2639, - "rotates": false - }, - { - "id": "mon_mole_large", - "fg": 2640, + "22_fmj", + "22_cb", + "22_ratshot", + "9mm", + "9mmP", + "9mmP2", + "9mmfmj", + "762_25", + "762_25hot", + "762_25typeP", + "reloaded_762_25", + "38_special", + "38_super", + "38_fmj", + "10mm", + "40sw", + "40fmj", + "44magnum", + "44fmj", + "45_acp", + "45_jhp", + "45_super", + "454_Casull", + "500_Magnum", + "57mm", + "46mm", + "762_m43", + "762_m87", + "223", + "556", + "556_incendiary", + "270", + "3006", + "3006fmj", + "3006_incendiary", + "308", + "762_51", + "762_51_incendiary", + "700nx", + "32_acp", + "300_winmag", + "762_54R", + "reloaded_9mm", + "reloaded_9mmP", + "reloaded_9mmP2", + "reloaded_9mmfmj", + "reloaded_38_special", + "reloaded_38_super", + "reloaded_38_fmj", + "reloaded_10mm", + "reloaded_40sw", + "reloaded_40fmj", + "reloaded_44magnum", + "reloaded_44fmj", + "reloaded_45_acp", + "reloaded_45_jhp", + "reloaded_45_super", + "reloaded_454_Casull", + "reloaded_500_Magnum", + "reloaded_57mm", + "reloaded_46mm", + "reloaded_762_m43", + "reloaded_762_m87", + "reloaded_223", + "reloaded_556", + "reloaded_556_incendiary", + "reloaded_270", + "reloaded_3006", + "reloaded_3006_incendiary", + "reloaded_308", + "reloaded_762_51", + "reloaded_762_51_incendiary", + "reloaded_50bmg", + "reloaded_50ss", + "reloaded_50_incendiary", + "reloaded_300_winmag", + "reloaded_32_acp", + "reloaded_700nx", + "reloaded_762_54R", + "reloaded_22_cb", + "reloaded_22_fmj", + "reloaded_22_lr", + "reloaded_22_ratshot", + "545", + "545_ap", + "9x18mm", + "9x18mmfmj", + "9x18mmP2", + "reloaded_545", + "reloaded_545_ap", + "reloaded_9x18mm", + "reloaded_9x18mmfmj", + "reloaded_9x18mmP2", + "reloaded_3006fmj", + "50bmg", + "50ss", + "50_incendiary", + "357sig_fmj", + "357sig_jhp", + "reloaded_357sig_fmj", + "reloaded_357sig_jhp", + "357", + "357_P", + "45_long_colt", + "reloaded_357", + "reloaded_357_P", + "reloaded_45_long_colt", + "22_lr" + ], + "fg": 1215, "rotates": false }, + { "id": [ "30mm_hei", "30mm_slug", "30mm_hedp" ], "fg": 1216, "rotates": false }, { "id": [ - "mon_squirrel_red", - "mon_groundhog" + "40mm_frag", + "40mm_incendiary", + "40mm_teargas", + "40mm_smoke", + "40mm_flare", + "40mm_flashbang", + "40mm_shot", + "40mm_flechette", + "reloaded_40mm_flechette", + "66mm_HEAT", + "120mm_HEAT", + "40mm_beanbag", + "84x246mm_he", + "84x246mm_hedp", + "84x246mm_smoke", + "m235tpa", + "40mm_concussive" ], - "fg": 2641, - "rotates": false - }, - { - "id": "mon_squirrel", - "fg": 2642, + "fg": 1217, "rotates": false }, + { "id": [ "reloaded_5x50dart", "5x50heavy", "5x50dart" ], "fg": 1218, "rotates": false }, { "id": [ - "mon_shrew", - "mon_deer_mouse" + "shot_bird", + "shot_00", + "shot_slug", + "shot_he", + "shot_flechette", + "reloaded_shot_bird", + "reloaded_shot_00", + "reloaded_shot_slug", + "reloaded_shot_flechette", + "blun_flechette", + "blun_shot", + "blun_slug", + "reloaded_shot_beanbag", + "shot_scrap", + "shot_scrapbag", + "shot_beanbag", + "generic_no_ammo", + "signal_flare", + "410_birdshot", + "410_scrap", + "410_shot", + "410_slug", + "reloaded_410_birdshot", + "reloaded_410_shot", + "reloaded_410_slug", + "shot_410", + "shot_410_flechette", + "shot_410_flechette_reloaded", + "shot_410_hull", + "shot_410_inc", + "shot_410_inc_reloaded", + "shot_410_reloaded", + "shot_410_slug", + "shot_410_slug_reloaded" ], - "fg": 2643, - "rotates": false - }, - { - "id": "mon_lemming", - "fg": 2644, - "rotates": false - }, - { - "id": "mon_rabbit", - "fg": 2645, - "rotates": false - }, - { - "id": "mon_hare", - "fg": 2646, - "rotates": false - }, - { - "id": "mon_skunk", - "fg": 2647, + "fg": 1219, "rotates": false }, { "id": [ - "mon_opossum", - "mon_raccoon", - "mon_black_rat" + "8mm_bootleg", + "8mm_fmj", + "8mm_jhp", + "8mm_inc", + "8mm_hvp", + "8mm_civilian", + "20x66_shot", + "20x66_flechette", + "20x66_slug", + "20x66_exp", + "20x66_frag", + "20x66_flare", + "20x66_inc", + "20x66_beanbag", + "20x66_bootleg_shot", + "20x66_bootleg_flechette", + "20x66_bootleg_slug", + "8mm_caseless" ], - "fg": 2648, - "rotates": false - }, - { - "id": "mon_otter", - "fg": 2649, + "fg": 1220, "rotates": false }, { "id": [ - "mon_sewer_rat", - "mon_weasel", - "mon_mink" + "9mm_casing", + "22_casing", + "38_casing", + "40_casing", + "44_casing", + "45_casing", + "454_casing", + "500_casing", + "57mm_casing", + "46mm_casing", + "762_casing", + "223_casing", + "3006_casing", + "308_casing", + "40mm_casing", + "700nx_casing", + "300_casing", + "762R_casing", + "762_25_casing", + "32_casing", + "9x18mm_casing", + "545_casing", + "22_casing_new" ], - "fg": 2650, - "rotates": false + "fg": 1221 }, + { "id": [ "50_casing", "357sig_casing", "357_mag_casing", "45lc_casing" ], "fg": 1221, "rotates": false }, + { "id": "acidbomb_large", "fg": 1222, "rotates": false }, + { "id": "acidbomb_micro", "fg": 1223, "rotates": false }, + { "id": "acidbomb_small", "fg": 1224, "rotates": false }, + { "id": [ "stimpack_ammo", "ampoule" ], "fg": 1225, "rotates": false }, + { "id": [ "battery", "laser_capacitor" ], "fg": 1226, "rotates": false }, { - "id": "mon_bat_vampire", - "fg": 2651, + "id": [ "laser_pack", "reloaded_laser_pack", "rechargeable_battery", "rechargeable_battery" ], + "fg": 1227, "rotates": false }, { - "id": "mon_bat", - "fg": 2652, + "id": [ "plasma", "charge_shot", "rebreather_filter", "gasfilter_s", "gasfilter_m", "gasfilter_l" ], + "fg": 1228, "rotates": false }, + { "id": "plut_cell", "fg": 1229, "rotates": false }, + { "id": "battery_atomic", "fg": 1230, "rotates": false }, { - "id": "mon_albino_penguin", - "fg": 2653, + "id": [ "155mm_frag", "155mm_heat", "155mm_shot", "155mm_slug", "atgm_heat" ], + "fg": 1231, "rotates": false }, + { "id": "bfg_shell", "fg": 1232, "rotates": false }, { - "id": "mon_robin", - "fg": 2654, + "id": [ "bolt_wood", "arrow_fire_hardened_fletched", "arrow_heavy_fire_hardened_fletched" ], + "fg": 1233, "rotates": false }, + { "id": "arrow_plastic", "fg": 1234, "rotates": false }, { - "id": "mon_bjay", - "fg": 2655, + "id": [ + "bolt_metal", + "bolt_steel", + "bolt_steel_target", + "bolt_steel_bodkin", + "bolt_explosive", + "arrow_metal", + "arrow_metal_bodkin", + "arrow_metal_sharpened_fletched", + "arrow_metal_target", + "arrow_exploding", + "arrow_flamming" + ], + "fg": 1235, "rotates": false }, + { "id": "arrow_cf", "fg": 1236, "rotates": false }, + { "id": "bolt_bone", "fg": 1237, "rotates": false }, + { "id": "arrow_small_game_fletched", "fg": 1238, "rotates": false }, { - "id": "mon_turkey", - "fg": 2656, + "id": [ "arrow_wood_heavy", "arrow_field_point_fletched", "arrow_heavy_field_point_fletched", "flamable_arrow", "arrow_wood" ], + "fg": 1239, "rotates": false }, - { - "id": "mon_chicken", - "fg": 2657, + { "id": [ "dart", "lawn_dart" ], "fg": 1240, "rotates": false }, + { "id": [ "bomblet_archdemon", "bomblet_explosive" ], "fg": 1241, "rotates": false }, + { "id": [ "bomblet_archvile", "bomblet_fire", "bomblet_vile" ], "fg": 1242, "rotates": false }, + { "id": "bomblet_casing", "fg": 1243, "rotates": false }, + { "id": "bomblet_chickenbot", "fg": 1244, "rotates": false }, + { "id": "bomblet_frag", "fg": 1245, "rotates": false }, + { "id": "bomblet_stun", "fg": 1246, "rotates": false }, + { "id": "bomblet_acid", "fg": 1247, "rotates": false }, + { "id": "cable", "fg": 1248, "rotates": false }, + { "id": "chain_link", "fg": 1249, "rotates": false }, + { "id": [ "chime_scrap_act", "chime_scrap" ], "fg": 1250, "rotates": false }, + { "id": [ "scrap_bronze", "scrap_copper", "copper" ], "fg": 1251, "rotates": false }, + { "id": "gold_small", "fg": 1252, "rotates": false }, + { + "id": [ "lead", "silver_small", "platinum_small", "bismuth", "tin", "scrap" ], + "fg": 1253, "rotates": false }, - { - "id": "mon_duck", - "fg": 2658, + { "id": [ "electric_primer_large", "electric_primer" ], "fg": 1254, "rotates": false }, + { "id": [ "spiked_rocket", "explosive_hm_rocket" ], "fg": 1255, "rotates": false }, + { "id": [ "incendiary_hm_rocket", "cyber_rocket" ], "fg": 1256, "rotates": false }, + { "id": "RPG-7_ammo", "fg": 1257, "rotates": false }, + { "id": [ "down_feather", "feather" ], "fg": 1258, "rotates": false }, + { "id": [ "throwing_knife", "survival_marker", "fighter_sting_juice" ], "fg": 1259, "rotates": false }, + { "id": "bee_sting", "fg": 1260, "rotates": false }, + { "id": "fighter_sting", "fg": 1261, "rotates": false }, + { "id": "wasp_sting", "fg": 1262, "rotates": false }, + { "id": "flaming_skull", "fg": 1263, "rotates": false }, + { "id": "bfg_shell_act", "fg": 1264, "rotates": false }, + { "id": "flaming_ball", "fg": 1265, "rotates": false }, + { "id": "fletching", "fg": 1266, "rotates": false }, + { "id": [ "36navy", "44army", "flintlock_shot", "flintlock_ammo" ], "fg": 1267, "rotates": false }, + { "id": [ "hell_laser_queen", "hell_laser" ], "fg": 1268, "rotates": true }, + { "id": "hell_napalm", "fg": 1269, "rotates": false }, + { "id": [ "hell_plasma_c", "hell_plasma_k", "hell_plasma_b" ], "fg": 1270, "rotates": false }, + { "id": [ "lance_charge_shot", "lance_charge" ], "fg": 1271, "rotates": false }, + { "id": "material_niter", "fg": 1272, "rotates": false }, + { "id": [ "mininuke", "mininuke_mod" ], "fg": 1273, "rotates": false }, + { "id": [ "chem_hexamine", "money" ], "fg": 1274, "rotates": false }, + { "id": [ "c_fishspear", "qiang", "m_fishspear" ], "fg": 1275, "rotates": false }, + { "id": [ "javelin", "javelin_copper", "javelin", "spear_wood" ], "fg": 1276, "rotates": false }, + { "id": [ "combatnail", "nail" ], "fg": 1277, "rotates": false }, + { "id": "nicotine_liquid", "fg": 1278, "rotates": false }, + { "id": [ "marble", "bearing", "bb", "bearing_lead", "pebble_clay", "pebble" ], "fg": 1279, "rotates": false }, + { + "id": [ "shotgun_primer", "smpistol_primer", "lgpistol_primer", "smrifle_primer", "lgrifle_primer" ], + "fg": 1280, "rotates": false }, + { "id": "sinew", "fg": 1281, "rotates": false }, + { "id": [ "thread", "yarn" ], "fg": 1282, "rotates": false }, + { "id": "plant_fibre", "fg": 1283, "rotates": false }, + { "id": [ "steel_rail", "rebar_rail" ], "fg": 1284, "rotates": false }, { - "id": "mon_crow", - "fg": 2659, + "id": [ "blowgun", "skewer", "knitting_needles", "pointy_stick", "pool_cue", "digging_stick" ], + "fg": 1285, "rotates": false }, + { "id": [ "baton", "baton-extended" ], "fg": 1286, "rotates": false }, + { "id": "shrapnel", "fg": 1287, "rotates": false }, + { "id": "soap", "fg": 1288, "rotates": false }, + { "id": "solder_wire", "fg": 1289, "rotates": false }, + { "id": "throwing_axe", "fg": 1290, "rotates": false }, + { "id": "throwing_stick", "fg": 1291, "rotates": false }, + { "id": "triffid_sap", "fg": 1292, "rotates": false }, + { "id": "atomic_light", "fg": 1293, "rotates": false }, + { "id": [ "atomic_light_off", "baseball" ], "fg": 1294, "rotates": false }, + { "id": "lens", "fg": 1295, "rotates": false }, + { "id": [ "pool_ball", "bowling_ball", "pool_ball" ], "fg": 1296, "rotates": false }, { - "id": "mon_gull", - "fg": 2660, - "rotates": false + "id": "vp_atomic_light", + "fg": 1293, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, + { "id": [ "rock", "rock" ], "fg": 1297, "rotates": false }, + { "id": "solar_cell", "fg": 1298, "rotates": false }, + { "id": "sheet_metal_small", "fg": 1299, "rotates": false }, + { "id": "steel_lump", "fg": 1300, "rotates": false }, + { "id": [ "rag", "chestwrap", "nomex", "neoprene", "tinder" ], "fg": 1301, "rotates": false }, + { "id": [ "chestwrap_wool", "felt_patch" ], "fg": 1302, "rotates": false }, + { "id": "rag_bloody", "fg": 1303, "rotates": false }, { - "id": "mon_pidgeon", - "fg": 2661, + "id": [ "javelin_iron", "javelin_stone", "spear_knife", "pike", "javelin_iron", "spear_stone", "fishspear" ], + "fg": 1304, "rotates": false }, + { "id": "spear_dory", "fg": 1305, "rotates": false }, + { "id": [ "8x40_100_mag", "8x40_500_mag", "360_200_mag", "hk_g80mag", "5x50_100_mag" ], "fg": 1306 }, + { "id": [ "8x40_50_mag", "20x66_40_mag", "lw223bigmag", "5x50_50_mag" ], "fg": 1307 }, { "id": [ - "mon_duck_chick", - "mon_chicken_chick" + "20x66_10_mag", + "stanag10", + "falmag", + "falbigmag", + "g3mag", + "m14mag", + "m1918bigmag", + "m1918mag", + "saiga10mag", + "8x40_10_mag" ], - "fg": 2662, - "rotates": false + "fg": 1308 }, { "id": [ - "mon_grouse_chick", - "mon_crow_chick", - "mon_turkey_chick", - "mon_pheasant_chick" + "mp5bigmag", + "360_400_mag", + "thompson_drum", + "g3bigmag", + "scarhbigmag", + "glock_drum_100rd", + "glock_drum_50rd", + "ppshdrum", + "saiga30mag_410", + "8x40_250_mag" ], - "fg": 2663, - "rotates": false - }, - { - "id": "mon_cockatrice_chick", - "fg": 2664, - "rotates": false + "fg": 1309 }, { - "id": "mon_dimorphodon", - "fg": 2665, - "rotates": false + "id": [ + "20x66_20_mag", + "lw223mag", + "stanag30", + "scarhmag", + "akmmag", + "akmbigmag", + "saiga30mag", + "ppshmag", + "saiga10mag_410", + "8x40_25_mag" + ], + "fg": 1310 }, + { "id": [ "ak74mag", "rpk74mag" ], "fg": 1311 }, + { "id": "a180mag", "fg": 1312 }, + { "id": "aux_pressurized_tank", "fg": 1313, "rotates": false }, + { "id": [ "belt308", "belt40mm", "belt50", "belt30mm", "belt223" ], "fg": 1314 }, + { "id": [ "calicomag", "fnp90mag" ], "fg": 1315 }, + { "id": "garandclip", "fg": 1316 }, { - "id": "mon_parasaurolophus", - "fg": 2666, - "rotates": false + "id": [ + "glockmag", + "glock40mag", + "glock40bigmag", + "lw21mag", + "m9bigmag", + "m9mag", + "usp9mag", + "makarovmag", + "mosquitomag", + "sw22mag", + "ppkmag", + "sigp230mag", + "taurus38mag", + "deaglemag", + "lw12mag", + "m1911bigmag", + "m1911mag", + "usp45mag", + "fn57mag", + "sig40mag", + "tokarevmag", + "glock17_17", + "glock17_22", + "p226mag_15rd_357sig", + "af2011a1mag", + "m1991_38smag", + "glockbigmag" + ], + "fg": 1317 }, + { "id": "hd_battery", "fg": 1318, "rotates": false }, + { "id": "m107a1mag", "fg": 1319 }, + { "id": [ "ruger1022bigmag", "mp5mag" ], "fg": 1320 }, { - "id": "mon_spinosaurus", - "fg": 2667, - "rotates": false + "id": [ "smg_22_mag", "smg_38_mag", "smg_40_mag", "smg_45_mag", "smg_9mm_mag", "brute_shot_mag", "nailmag" ], + "fg": 1321 }, + { "id": "pressurized_tank", "fg": 1322, "rotates": false }, + { "id": "rm4502", "fg": 1323, "rotates": false }, + { "id": "rm4504", "fg": 1324, "rotates": false }, + { "id": [ "survivor223mag", "m14smallmag", "blrmag", "m2010mag", "ruger1022mag" ], "fg": 1325 }, { - "id": "mon_stegosaurus", - "fg": 2668, + "id": [ "battery_motorbike", "battery_car", "medium_storage_battery", "storage_battery", "small_storage_battery" ], + "fg": 1326, "rotates": false }, { - "id": "mon_titanis", - "fg": 2669, - "rotates": false + "id": [ + "vp_small_storage_battery", + "vp_medium_storage_battery", + "vp_storage_battery", + "vp_storage_battery_removable", + "vp_battery_motorbike", + "vp_battery_car" + ], + "fg": 1326, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1183 } ] }, + { "id": "stanag50", "fg": 1327 }, { - "id": "mon_allosaurus", - "fg": 2670, - "rotates": false + "id": [ + "stenmag", + "survivor9mm_mag", + "uzimag", + "skorpion82mag", + "skorpion61mag", + "mac10mag", + "tdi_mag", + "thompson_bigmag", + "thompson_mag", + "ump45mag", + "hk46mag", + "hk46bigmag", + "tec9mag" + ], + "fg": 1328 }, + { "id": "tinyweldtank", "fg": 1329 }, + { "id": "weldtank", "fg": 1330 }, + { "id": [ "laser_cannon", "cerberus_laser", "unbio_blaster_gun" ], "fg": 1331, "rotates": false }, { - "id": "mon_ankylosaurus", - "fg": 2671, + "id": [ "flamethrower_simple", "flamethrower", "rm451_flamethrower", "hell_laser_napalm" ], + "fg": 1332, "rotates": false }, { - "id": "mon_eoraptor", - "fg": 2672, + "id": [ "m249", "30mm_autocannon", "rm614_lmg", "rm20", "rm298", "m240", "m60", "mgl" ], + "fg": 1333, "rotates": false }, + { "id": "fire_lance", "fg": 1334, "rotates": false }, { - "id": "mon_gallimimus", - "fg": 2673, + "id": [ + "fn_p90", + "rm802", + "bigun", + "heavy_rail_rifle", + "rm360_carbine", + "m134", + "tihar", + "helsing", + "watercannon", + "bomblet_launcher_double", + "bomblet_launcher_dualshot", + "bomblet_launcher_rotary", + "bomblet_launcher_single", + "bomblet_launcher_chickenbot" + ], + "fg": 1335, "rotates": false }, + { "id": "airspeargun", "fg": 1336, "rotates": false }, + { "id": [ "fn_fal", "ak74", "an94", "ak47" ], "fg": 1337, "rotates": false }, { - "id": "mon_utahraptor", - "fg": 2674, + "id": [ + "hk_g3", + "hk_g36", + "arx160", + "acr", + "ar15", + "m4a1", + "scar_l", + "scar_h", + "m107a1", + "h&k416a5", + "m27iar", + "rm51_assault_rifle" + ], + "fg": 1338, "rotates": false }, { - "id": "mon_compsognathus", - "fg": 2675, + "id": [ "tommygun", "ppsh", "smg_22", "smg_38", "smg_40", "smg_45", "smg_9mm", "american_180" ], + "fg": 1339, "rotates": false }, { - "id": "mon_deinonychus", - "fg": 2676, + "id": [ + "sig552", + "needlegun", + "uzi", + "tec9", + "calico", + "hk_mp5", + "mac_10", + "hk_ump45", + "sten", + "skorpion_61", + "skorpion_82", + "hk_mp7", + "rm2000_smg", + "paintballgun" + ], + "fg": 1340, "rotates": false }, + { "id": "atlatl", "fg": 1341, "rotates": false }, { - "id": "mon_velociraptor", - "fg": 2677, + "id": [ + "speargun", + "carbine_flintlock_double", + "rifle_flintlock", + "carbine_flintlock", + "rifle_308", + "surv_carbine_223", + "garand", + "m1903", + "rifle_22", + "marlin_9a", + "ruger_1022", + "survivor_special_700", + "rifle_3006", + "browning_blr", + "remington_700", + "sks", + "m1a", + "ruger_mini", + "savage_111f", + "win70", + "weatherby_5", + "mosin91_30", + "mosin44", + "l_long_45", + "bh_m89", + "henry_big_boy", + "colt_lightning", + "levergun_44", + "rifle_223", + "rifle_38", + "rifle_40", + "rifle_44", + "rifle_45", + "bbgun" + ], + "fg": 1342, "rotates": false }, + { "id": "nailrifle", "fg": 1343, "rotates": false }, { - "id": "mon_dilophosaurus", - "fg": 2678, + "id": [ + "rifle_9mm", + "m2010", + "m14ebr", + "rm11b_sniper_rifle", + "mosin44_ebr", + "mosin91_30_ebr", + "cx4", + "l_base_223", + "l_car_223", + "l_mbr_223", + "l_dsr_223", + "l_lmg_223", + "ksub2000", + "rm88_battle_rifle" + ], + "fg": 1344, "rotates": false }, + { "id": "BFG", "fg": 1345, "rotates": false }, + { "id": "bomblet_launcher_brute", "fg": 1346, "rotates": false }, + { "id": "chemical_thrower", "fg": 1347, "rotates": false }, + { "id": [ "compgreatbow", "compbow" ], "fg": 1348, "rotates": false }, + { "id": "ichaival_replica", "fg": 1349, "rotates": false }, + { "id": "compositebow", "fg": 1350, "rotates": false }, + { "id": [ "shockcannon", "shockcannon_plut", "shockcannon_ups", "emp_gun" ], "fg": 1351, "rotates": false }, { - "id": "mon_rattlesnake_giant", - "fg": 2679, + "id": [ + "revolver_shotgun", + "remington_870", + "mossberg_500", + "rm120c", + "m2browning", + "mark19", + "l_def_12", + "m1014", + "m2browning_sawn", + "abzats", + "ksg", + "shotgun_410" + ], + "fg": 1352, "rotates": false }, { - "id": "mon_rattlesnake", - "fg": 2680, + "id": [ + "shotgun_s", + "pipe_shotgun", + "shotgun_d", + "pipe_double_shotgun", + "rebar_rifle", + "doublespeargun", + "blunderbuss", + "combination_gun", + "pipe_combination_gun", + "surv_levershotgun", + "410_pipe_shotgun", + "m6_asw" + ], + "fg": 1353, "rotates": false }, + { "id": "trex_gun", "fg": 1354, "rotates": false }, + { "id": "flamethrower_crude", "fg": 1355, "rotates": false }, + { "id": "minispeargun", "fg": 1356, "rotates": false }, { - "id": "mon_shadow_snake", - "fg": 2681, + "id": [ "moss_brownie", "pistol_flintlock", "2_shot_special", "lemat_revolver", "colt_saa", "410_revolver" ], + "fg": 1357, "rotates": false }, { - "id": "mon_sewer_snake", - "fg": 2682, + "id": [ + "cop_38", + "sig_mosquito", + "sw_22", + "glock_17", + "glock_19", + "glock_22", + "usp_9mm", + "sw_619", + "taurus_38", + "sig_40", + "sw_610", + "sw_500", + "raging_bull", + "ruger_redhawk", + "deagle_44", + "usp_45", + "m1911", + "fn57", + "hk_ucp", + "tokarev", + "walther_ppk", + "sig_p230", + "l_enforcer_45", + "l_sp_9mm", + "l_mp_9mm", + "l_sp_45", + "l_mp_45", + "l_bak_223", + "l_lookout_9mm", + "surv_hand_cannon", + "surv_six_shooter", + "sw629", + "colt_navy", + "rm99_pistol", + "rm103a_pistol", + "colt_army", + "m9", + "makarov", + "ruger_lcr_22", + "ruger_lcr_38", + "ashot", + "needlepistol", + "p226_357sig", + "af2011a1_38super", + "bond_410", + "m1991a1_38super", + "raging_judge" + ], + "fg": 1358, "rotates": false }, + { "id": "nailgun", "fg": 1359, "rotates": false }, + { "id": [ "v29", "v29_cheap" ], "fg": 1360, "rotates": false }, + { "id": [ "rx12_injector", "rx11_stimpack" ], "fg": 1361, "rotates": false }, + { "id": "wearable_rx12", "fg": 1362, "rotates": false }, + { "id": "flaregun", "fg": 1363, "rotates": false }, { - "id": "mon_gator", - "fg": 2683, + "id": [ + "nx17", + "hk_g80", + "plasma_rifle", + "laser_rifle", + "hell_laser_gun", + "hell_laser_gun_queen", + "coilgun", + "laser_rifle_cheap", + "ftk93" + ], + "fg": 1364, "rotates": false }, + { "id": [ "saiga_12", "m1918", "saiga_410" ], "fg": 1365, "rotates": false }, { - "id": "mon_frog_giant", - "fg": 2684, + "id": [ "crossbow", "huge_crossbow", "rep_crossbow", "bullet_crossbow", "crossbow_makeshift", "hand_crossbow" ], + "fg": 1366, "rotates": false }, + { "id": [ "m320", "rm228", "triple_launcher_simple", "launcher_simple" ], "fg": 1367, "rotates": false }, + { "id": [ "m202_flash", "hell_launcher", "LAW" ], "fg": 1368, "rotates": false }, + { "id": "m3_carlgustav", "fg": 1369, "rotates": false }, + { "id": "mininuke_launcher", "fg": 1370, "rotates": false }, + { "id": "RPG", "fg": 1371, "rotates": false }, + { "id": "m79", "fg": 1372, "rotates": false }, { - "id": "mon_fish_blinky", - "fg": 2685, + "id": [ "shortbow", "recurbow", "reflexbow", "longbow", "hybridbow", "reflexrecurvebow", "selfbow" ], + "fg": 1373, "rotates": false }, + { "id": [ "ithaca_doom", "ithaca_doom_dual", "410_lever" ], "fg": 1374, "rotates": false }, + { "id": [ "pipe__gun_44", "pipe_shotgunsawn" ], "fg": 1375, "rotates": false }, + { "id": "shotgun_sawn", "fg": 1376, "rotates": false }, + { "id": "sling", "fg": 1377, "rotates": false }, + { "id": "slingshot", "fg": 1378, "rotates": false }, + { "id": "steyr_aug", "fg": 1379, "rotates": false }, { "id": [ - "mon_fish_trout", - "mon_fish_perch", - "mon_fish_salmon", - "mon_fish_sunfish", - "mon_fish_bowfin" + "atgm_launcher", + "atgm_turret", + "howitzer_gun", + "tank_gun_auto", + "tank_gun_manual", + "tank_gun_rws", + "surv_rocket_launcher" ], - "fg": 2686, - "rotates": false - }, - { - "id": "mon_fish_carp", - "fg": 2687, + "fg": 1380, "rotates": false }, + { "id": "TDI", "fg": 1381, "rotates": false }, { "id": [ - "mon_fish_bullhead", - "mon_fish_sbass", - "mon_fish_lbass" + "retool_45", + "suppressor", + "grip", + "lwfeed", + "barrel_big", + "barrel_small", + "barrel_rifled", + "clip", + "clip2", + "spare_mag", + "brass_catcher", + "stabilizer", + "blowback", + "autofire", + "retool_9mm", + "retool_22", + "retool_57", + "retool_46", + "retool_308", + "retool_223", + "conversion_battle", + "conversion_sniper", + "m203", + "pipe_launcher40mm", + "u_shotgun", + "masterkey", + "gun_crossbow", + "laser_sight", + "improve_sights", + "red_dot_sight", + "holo_sight", + "rifle_scope", + "barrel_ported", + "pistol_grip", + "adjustable_stock", + "pistol_stock", + "crafted_suppressor", + "aux_flamer", + "pistol_bayonet", + "rm121aux", + "rail_laser_sight", + "pistol_scope", + "recoil_stock", + "waterproof_gunmod", + "tuned_mechanism", + "match_trigger", + "bipod", + "m320_mod", + "muzzle_brake", + "shot_suppressor", + "shoulder_strap", + "bow_sight", + "arrowrest", + "bow_stabilizer", + "folding_stock", + "light_grip", + "suppressor_compact", + "beltfeed", + "combination_gun_shotgun", + "combination_gun_shotgun_pipe", + "inter_bayonet", + "ksg_aux_shotgun", + "lemat_revolver_shotgun", + "offset_sights", + "riv_scope", + "riv_suppressor", + "acog_scope", + "autofire_654", + "beam_scatterer", + "electrolaser_conversion", + "high_density_capacitor", + "bomblet_undermod", + "M6_shotgun", + "retool_410", + "makeshift_pistol_bayonet", + "makeshift_sword_bayonet", + "sword_bayonet", + "ugl_buttstock", + "l_car_223_kit", + "l_mbr_223_kit", + "l_dsr_223_kit", + "l_lmg_223_kit", + "mn_classic_kit", + "mn_ebr_kit", + "makeshift_bayonet", + "briefcase_smg" ], - "fg": 2688, + "fg": 1382, "rotates": false }, { - "id": [ - "mon_fish_pike", - "mon_fish_bluegill" - ], - "fg": 2689, + "id": [ "small_repairkit", "large_repairkit", "misc_repairkit", "weather_reader", "briefcase", "l_HFPack" ], + "fg": 1383, "rotates": false }, + { "id": [ "suitcase_l", "radio_car_box" ], "fg": 1384, "rotates": false }, + { "id": "suitcase_m", "fg": 1385, "rotates": false }, + { "id": [ "stethoscope", "wristrocket" ], "fg": 1386, "rotates": false }, + { "id": "hygrometer", "fg": 1387, "rotates": false }, + { "id": [ "barometer", "clock" ], "fg": 1388, "rotates": false }, { - "id": "mon_sewer_fish", - "fg": 2690, - "rotates": false + "id": "vp_vehicle_clock", + "fg": 1388, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, + { "id": "alarmclock", "fg": 1389, "rotates": false }, + { "id": [ "blade", "metal_smoother" ], "fg": 1390, "rotates": false }, + { "id": [ "bwirebat", "battletorch" ], "fg": 1391, "rotates": false }, + { "id": "coffeemaker", "fg": 1392, "rotates": false }, + { "id": [ "fan", "polisher" ], "fg": 1393, "rotates": false }, + { "id": [ "fishing_hook_basic", "fishing_hook_bone", "needle_curved" ], "fg": 1394, "rotates": false }, + { "id": "copper_ax", "fg": 1395, "rotates": false }, + { "id": [ "hatchet", "ax" ], "fg": 1396, "rotates": false }, + { "id": [ "mace", "paint_brush" ], "fg": 1397, "rotates": false }, + { "id": [ "pilot_light", "crude_firestarter" ], "fg": 1398, "rotates": false }, + { "id": "pocketwatch", "fg": 1399, "rotates": false }, { - "id": [ - "mon_zhark", - "mon_mutant_carp", - "mon_mutant_salmon" - ], - "fg": 2691, + "id": [ "processor", "RAM", "amplifier", "transponder", "receiver", "radio_repeater_mod", "circuit", "radio_mod" ], + "fg": 1400, "rotates": false }, + { "id": [ "l-stick", "skewer_bone" ], "fg": 1401, "rotates": false }, + { "id": "l-stick_on", "fg": 1402, "rotates": false }, + { "id": "q_staff", "fg": 1403, "rotates": false }, + { "id": [ "rebar", "spear_rebar", "spear_steel", "spear_pipe", "flute" ], "fg": 1404, "rotates": false }, + { "id": "nailboard", "fg": 1405, "rotates": false }, + { "id": [ "jian_inferior", "sword_forged", "jian_fake", "jian" ], "fg": 1406, "rotates": false }, + { "id": [ "wood_smoother", "tonfa_wood" ], "fg": 1407, "rotates": false }, + { "id": "shocktonfa_on", "fg": 1408, "rotates": false }, + { "id": [ "tonfa", "PR24-retracted", "PR24-extended", "shocktonfa_off" ], "fg": 1409, "rotates": false }, + { "id": "golf_bag", "fg": 1410, "rotates": false }, + { "id": "LAW_Packed", "fg": 1411, "rotates": false }, + { "id": [ "multi_cooker", "mon_hallu_multicooker", "safe_box" ], "fg": 1412, "rotates": false }, + { "id": [ "UPS_off", "UPS_off" ], "fg": 1413, "rotates": false }, + { "id": [ "adv_UPS_off", "adv_UPS_off" ], "fg": 1414, "rotates": false }, + { "id": "airhorn", "fg": 1415, "rotates": false }, + { "id": "aperture_potato", "fg": 1416, "rotates": false }, + { "id": [ "ukulele", "violin", "acoustic_guitar", "banjo" ], "fg": 1417, "rotates": false }, + { "id": "violin_golden", "fg": 1418, "rotates": false }, + { "id": [ "battleaxe_inferior", "battleaxe_fake", "battleaxe" ], "fg": 1419, "rotates": false }, + { "id": "battletorch_lit", "fg": 1420, "rotates": false }, + { "id": "black_box", "fg": 1421, "rotates": false }, + { "id": "minion_dormant", "fg": 1422, "rotates": false }, + { "id": "blob_dormant", "fg": 1423, "rotates": false }, + { "id": "boltcutters", "fg": 1424, "rotates": false }, + { "id": [ "bomblet_vile_act", "bomblet_archvile_act" ], "fg": 1425, "rotates": false }, + { "id": "bomblet_chickenbot_act", "fg": 1426, "rotates": false }, + { "id": "bomblet_stun_act", "fg": 1427, "rotates": false }, + { "id": "bone_flute", "fg": 1428, "rotates": false }, + { "id": [ "zweifire_off", "broadfire_off" ], "fg": 1429, "rotates": false }, + { "id": "sword_crude", "fg": 1430, "rotates": false }, + { "id": [ "zweifire_on", "broadfire_on" ], "fg": 1431, "rotates": false }, { "id": [ - "mon_fish_whitefish", - "mon_fish_pickerel", - "mon_fish_pbass" + "broadsword_inferior", + "zweihander", + "zweihander_inferior", + "arming_sword", + "arming_sword_inferior", + "longsword", + "longsword_inferior", + "broadsword_fake", + "zweihander_fake", + "arming_sword_fake", + "longsword_fake", + "broadsword" ], - "fg": 2692, - "rotates": false - }, - { - "id": "mon_fish_flying", - "fg": 2693, - "rotates": false - }, - { - "id": "mon_fish_eel_large", - "fg": 2694, - "rotates": false - }, - { - "id": "mon_fish_eel", - "fg": 2695, - "rotates": false - }, - { - "id": "mon_alpha_razorclaw", - "fg": 2696, + "fg": 1432, "rotates": false }, - { - "id": "mon_razorclaw", - "fg": 2697, + { "id": "sword_wood", "fg": 1433, "rotates": false }, + { "id": "c4", "fg": 1434, "rotates": false }, + { "id": "c4armed", "fg": 1435, "rotates": false }, + { "id": "camera", "fg": 1436, "rotates": false }, + { "id": "camera_pro", "fg": 1437, "rotates": false }, + { "id": [ "candle_smoke", "candle" ], "fg": 1438, "rotates": false }, + { "id": [ "candle_smoke_lit", "candle_lit" ], "fg": 1439, "rotates": false }, + { "id": [ "carver_on", "carver_off" ], "fg": 1440, "rotates": false }, + { "id": [ "gasdiscount_gold", "cash_card" ], "fg": 1441, "rotates": false }, + { "id": [ "gasdiscount_silver", "gasdiscount_platinum" ], "fg": 1442, "rotates": false }, + { "id": "id_military", "fg": 1443, "rotates": false }, + { "id": "id_science", "fg": 1444, "rotates": false }, + { "id": "cattlefodder", "fg": 1445, "rotates": false }, + { "id": "cell_phone", "fg": 1446, "rotates": false }, + { "id": "cell_phone_flashlight", "fg": 1447, "rotates": false }, + { + "id": [ "chainsaw_on", "elec_chainsaw_off", "elec_chainsaw_on", "chainsaw_off" ], + "fg": 1448, "rotates": false }, + { "id": [ "combatsaw_off", "combatsaw_on" ], "fg": 1449, "rotates": false }, + { "id": "char_purifier", "fg": 1450, "rotates": false }, + { "id": [ "chemistry_set_basic", "chemistry_set" ], "fg": 1451, "rotates": false }, + { "id": [ "chipper", "chisel" ], "fg": 1452, "rotates": false }, + { "id": "screwdriver", "fg": 1453, "rotates": false }, + { "id": "screwdriver_set", "fg": 1454, "rotates": false }, + { "id": "soldering_iron", "fg": 1455, "rotates": false }, + { "id": [ "circsaw_on", "circsaw_off" ], "fg": 1456, "rotates": false }, + { "id": "clarinet", "fg": 1457, "rotates": false }, + { "id": "laptop", "fg": 1458, "rotates": false }, + { "id": "control_laptop", "fg": 1459, "rotates": false }, + { "id": "con_mix", "fg": 1460, "rotates": false }, + { "id": "cordless_drill", "fg": 1461, "rotates": false }, + { "id": "cow_bell", "fg": 1462, "rotates": false }, + { "id": "crackpipe", "fg": 1463, "rotates": false }, + { "id": [ "makeshift_crowbar", "halligan", "crowbar" ], "fg": 1464, "rotates": false }, + { "id": "crucible", "fg": 1465, "rotates": false }, + { "id": "picklocks", "fg": 1466, "rotates": false }, + { "id": "crude_picklock", "fg": 1467, "rotates": false }, + { "id": [ "cs_lajatang_on", "cs_lajatang_off" ], "fg": 1468, "rotates": false }, + { "id": "dao", "fg": 1469, "rotates": false }, + { "id": "dehydrator", "fg": 1470, "rotates": false }, + { "id": [ "whistle", "dog_whistle" ], "fg": 1471, "rotates": false }, + { "id": "dusksword", "fg": 1472, "rotates": false }, + { "id": "dynamite", "fg": 1473, "rotates": false }, + { "id": "dynamite_act", "fg": 1474, "rotates": false }, + { "id": "eink_tablet_pc", "fg": 1475, "rotates": false }, + { "id": "electrohack", "fg": 1476, "rotates": false }, + { "id": "elec_hairtrimmer", "fg": 1477, "rotates": false }, + { "id": "etched_skull", "fg": 1478, "rotates": false }, + { "id": [ "sm_extinguisher", "extinguisher" ], "fg": 1479, "rotates": false }, + { "id": "throw_extinguisher", "fg": 1480, "rotates": false }, + { "id": [ "tool_black_powder_charge", "fertilizer_bomb" ], "fg": 1481, "rotates": false }, + { "id": [ "tool_black_powder_charge_act", "fertilizer_bomb_act" ], "fg": 1482, "rotates": false }, + { "id": "firecracker", "fg": 1483, "rotates": false }, + { "id": "firecracker_act", "fg": 1484, "rotates": false }, + { "id": "firecracker_pack", "fg": 1485, "rotates": false }, + { "id": "firecracker_pack_act", "fg": 1486, "rotates": false }, + { "id": "firekatana_off", "fg": 1487, "rotates": false }, + { "id": "firekatana_on", "fg": 1488, "rotates": false }, + { "id": [ "shishkebab_off", "firemachete_off" ], "fg": 1489, "rotates": false }, + { "id": [ "shishkebab_on", "firemachete_on" ], "fg": 1490, "rotates": false }, + { "id": "fire_ax", "fg": 1491, "rotates": false }, + { "id": [ "fire_drill_large", "fire_drill" ], "fg": 1492, "rotates": false }, + { "id": "fishing_rod_professional", "fg": 1493, "rotates": false }, + { "id": "fishing_rod_basic", "fg": 1494, "rotates": false }, + { "id": [ "heavy_flashlight", "reading_light", "flashlight" ], "fg": 1495, "rotates": false }, + { "id": [ "heavy_flashlight_on", "reading_light_on", "flashlight_on" ], "fg": 1496, "rotates": false }, + { "id": "flint_steel", "fg": 1497, "rotates": false }, { "id": [ - "mon_giant_crayfish", - "mon_fish_lobster_giant" + "v_planter_item", + "v_planter_item_advanced", + "v_plow_item", + "v_reaper_item", + "v_reaper_item_advanced", + "v_scoop_item", + "folding_bicycle" ], - "fg": 2698, + "fg": 1498, "rotates": false }, + { "id": "food_processor", "fg": 1499, "rotates": false }, + { "id": "char_smoker", "fg": 1500, "rotates": false }, + { "id": "forge", "fg": 1501, "rotates": false }, + { "id": "tr_metal_funnel", "fg": 1502, "rotates": false }, + { "id": "tr_funnel", "fg": 1503, "rotates": false }, + { "id": "tr_makeshift_funnel", "fg": 1504, "rotates": false }, + { "id": [ "tr_raincatcher", "t_raincatcher" ], "fg": 1505, "rotates": false }, + { "id": "tr_leather_funnel", "fg": 1506, "rotates": false }, { - "id": [ - "mon_fish_lobster", - "mon_fish_crayfish" - ], - "fg": 2699, - "rotates": false + "id": "vp_funnel", + "fg": 1503, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": "mon_spider_jumping_giant_acid", - "fg": 2700, - "rotates": false + "id": "vp_makeshift_funnel", + "fg": 1504, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": "mon_spider_jumping_giant", - "fg": 2701, - "rotates": false + "id": "vp_leather_funnel", + "fg": 1506, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": "mon_spider_jumping", - "fg": 2702, - "rotates": false - }, + "id": "vp_metal_funnel", + "fg": 1502, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] + }, + { "id": "leather_funnel", "fg": 1507, "rotates": false }, + { "id": "makeshift_funnel", "fg": 1508, "rotates": false }, + { "id": "metal_funnel", "fg": 1509, "rotates": false }, + { "id": "funnel", "fg": 1510, "rotates": false }, + { "id": "teleporter", "fg": 1511, "rotates": false }, + { "id": "geiger_off", "fg": 1512, "rotates": false }, + { "id": "geiger_on", "fg": 1513, "rotates": false }, + { "id": "glowstick_dead", "fg": 1514, "rotates": false }, + { "id": "glowstick_lit", "fg": 1515, "rotates": false }, + { "id": "glowstick", "fg": 1516, "rotates": false }, + { "id": "granade", "fg": 1517, "rotates": false }, + { "id": "granade_act", "fg": 1518, "rotates": false }, + { "id": "grenade", "fg": 1519, "rotates": false }, + { "id": "grenade_act", "fg": 1520, "rotates": false }, + { "id": "saw", "fg": 1521, "rotates": false }, + { "id": "hacksaw", "fg": 1522, "rotates": false }, + { "id": "hammer", "fg": 1523, "rotates": false }, + { "id": "handflare", "fg": 1524, "rotates": false }, + { "id": "handflare_act", "fg": 1525, "rotates": false }, + { "id": "handflare_lit", "fg": 1526, "rotates": false }, + { "id": "hand_drill", "fg": 1527, "rotates": false }, + { "id": "hand_pump", "fg": 1528, "rotates": false }, + { "id": "heatpack_used", "fg": 1529, "rotates": false }, { - "id": "mon_spider_trapdoor_giant_guardian", - "fg": 2703, - "rotates": false + "id": "vp_vehicle_scoop", + "fg": 1529, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": [ - "mon_spider_trapdoor_giant", - "mon_spider_trapdoor_giant_pk" - ], - "fg": 2704, - "rotates": false + "id": "vp_plow", + "fg": 1530, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1531 } ] }, + { "id": "heatpack", "fg": 1532, "rotates": false }, + { "id": [ "hobo_stove", "esbit_stove" ], "fg": 1533, "rotates": false }, + { "id": "hobo_stove_on", "fg": 1534, "rotates": false }, + { "id": "hoe", "fg": 1535, "rotates": false }, + { "id": [ "horn_car", "horn_big", "beeper", "chimes", "horn_bicycle" ], "fg": 1536, "rotates": false }, + { "id": [ "gasoline_cooker", "oil_cooker", "hotplate" ], "fg": 1537, "rotates": false }, + { "id": "inflatable_boat", "fg": 1538, "rotates": false }, + { "id": [ "jack_makeshift", "jack_small", "jack" ], "fg": 1539, "rotates": false }, + { "id": [ "elec_jackhammer", "jackhammer" ], "fg": 1540, "rotates": false }, + { "id": [ "jumper_cable_heavy", "jumper_cable" ], "fg": 1541, "rotates": false }, { "id": [ - "mon_spider_trapdoor", - "mon_spider_trapdoor_giant_s" + "katana_inferior", + "tanto", + "wakizashi", + "wakizashi_inferior", + "kukri", + "cutlass", + "cutlass_inferior", + "nodachi", + "scimitar", + "scimitar_inferior", + "cavalry_sabre", + "katana_fake", + "wakizashi_fake", + "cutlass_fake", + "nodachi_fake", + "scimitar_fake", + "cavalry_sabre_fake", + "katana" ], - "fg": 2705, - "rotates": false - }, - { - "id": "mon_spider_web_queen", - "fg": 2706, + "fg": 1542, "rotates": false }, - { - "id": "mon_spider_web_alpha", - "fg": 2707, + { "id": "bokken", "fg": 1543, "rotates": false }, + { "id": "kevlar_harness", "fg": 1544, "rotates": false }, + { "id": "ceramic_armor", "fg": 1545, "rotates": false }, + { "id": "kevlar_plate", "fg": 1546, "rotates": false }, + { "id": "khopesh", "fg": 1547, "rotates": false }, + { "id": [ "multitool", "knife_swissarmy" ], "fg": 1548, "rotates": false }, + { "id": "pockknife", "fg": 1549, "rotates": false }, + { "id": "laevateinn_replica", "fg": 1550, "rotates": false }, + { "id": "lighter", "fg": 1551, "rotates": false }, + { "id": "lightstrip", "fg": 1552, "rotates": false }, + { "id": "lightstrip_inactive", "fg": 1553, "rotates": false }, + { "id": "link_sheet", "fg": 1554, "rotates": false }, + { "id": "lobotomizer", "fg": 1555, "rotates": false }, + { "id": [ "survivor_machete", "machete" ], "fg": 1556, "rotates": false }, + { "id": [ "pan", "waffleiron" ], "fg": 1557, "rotates": false }, + { "id": "magnifying_glass", "fg": 1558, "rotates": false }, + { "id": "makeshift_axe", "fg": 1559, "rotates": false }, + { "id": "makeshift_machete", "fg": 1560, "rotates": false }, + { "id": "matchbomb", "fg": 1561, "rotates": false }, + { "id": "matchbomb_act", "fg": 1562, "rotates": false }, + { "id": "matches", "fg": 1563, "rotates": true }, + { "id": "mininuke_act", "fg": 1564, "rotates": false }, + { "id": "mold_plastic", "fg": 1565, "rotates": false }, + { "id": [ "molotov_micro", "molotov" ], "fg": 1566, "rotates": false }, + { "id": [ "molotov_micro_act", "molotov_lit" ], "fg": 1567, "rotates": false }, + { "id": "mop", "fg": 1568, "rotates": false }, + { "id": "mortar_pestle", "fg": 1569, "rotates": false }, + { "id": "mp3", "fg": 1570, "rotates": false }, + { "id": "mp3_on", "fg": 1571, "rotates": false }, + { "id": "needle_wood", "fg": 1572, "rotates": false }, + { "id": "needle_bone", "fg": 1573, "rotates": false }, + { "id": "radio", "fg": 1574, "rotates": false }, + { "id": "noise_emitter", "fg": 1575, "rotates": false }, + { "id": "radio_on", "fg": 1576, "rotates": false }, + { "id": "noise_emitter_on", "fg": 1577, "rotates": false }, + { + "id": [ "smart_lamp", "gasoline_lantern", "electric_lantern", "oxylamp", "atomic_lamp_off", "oil_lamp" ], + "fg": 1578, "rotates": false }, { - "id": [ - "mon_spider_web_omega", - "mon_spider_web_mu" - ], - "fg": 2708, + "id": [ "smart_lamp_on", "gasoline_lantern_on", "electric_lantern_on", "oxylamp_on", "oil_lamp_on" ], + "fg": 1579, "rotates": false }, + { "id": "atomic_lamp", "fg": 1580, "rotates": false }, { - "id": "mon_spider_web", - "fg": 2709, - "rotates": false + "id": "vp_atomic_lamp", + "fg": 1580, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": "mon_spider_web_s", - "fg": 2710, + "id": [ "smoxygen_tank", "scuba_tank", "scuba_tank_on", "small_scuba_tank", "small_scuba_tank_on", "oxygen_tank" ], + "fg": 1581, "rotates": false }, - { - "id": [ - "mon_spider_wolf_giant", - "mon_spider_wolf_giant_pk" - ], - "fg": 2711, + { "id": "pet_carrier", "fg": 1582, "rotates": false }, + { "id": "pheromone", "fg": 1583, "rotates": false }, + { "id": [ "iceaxe", "pickaxe" ], "fg": 1584, "rotates": false }, + { "id": [ "tool_rdx_sand_bomb", "pipebomb" ], "fg": 1585, "rotates": false }, + { "id": [ "tool_rdx_sand_bomb_act", "pipebomb_act" ], "fg": 1586, "rotates": false }, + { "id": "pipe_glass", "fg": 1587, "rotates": false }, + { "id": "pipe_tobacco", "fg": 1588, "rotates": false }, + { "id": "plastic_chunk", "fg": 1589, "rotates": false }, + { "id": "pokeball", "fg": 1590, "rotates": false }, + { "id": "portable_game", "fg": 1591, "rotates": false }, + { "id": "portal", "fg": 1592, "rotates": false }, + { "id": "press", "fg": 1593, "rotates": false }, + { "id": [ "primitive_adze", "hand_axe", "primitive_axe" ], "fg": 1594, "rotates": false }, + { "id": [ "makeshift_hammer", "primitive_hammer" ], "fg": 1595, "rotates": false }, + { "id": [ "makeshift_shovel", "primitive_shovel" ], "fg": 1596, "rotates": false }, + { "id": "puller", "fg": 1597, "rotates": false }, + { "id": [ "remotevehcontrol", "radiocontrol" ], "fg": 1598, "rotates": false }, + { "id": "radio_car", "fg": 1599, "rotates": false }, + { "id": "radio_car_on", "fg": 1600, "rotates": false }, + { + "id": [ "rapier_fake", "fencing_foil", "fencing_epee", "fencing_sabre", "estoc", "estoc_fake", "rapier" ], + "fg": 1601, "rotates": false }, - { - "id": "mon_spider_wolf", - "fg": 2712, + { "id": "ref_lighter", "fg": 1602, "rotates": false }, + { "id": "ref_lighter_dare", "fg": 1603, "rotates": false }, + { "id": "ref_lighter_on", "fg": 1604, "rotates": false }, + { "id": "rocket_core", "fg": 1605, "rotates": false }, + { "id": "rocket_core_act", "fg": 1606, "rotates": false }, + { "id": "clay_quern", "fg": 1607, "rotates": false }, + { "id": "rock_quern", "fg": 1608, "rotates": false }, + { "id": "scalpel", "fg": 1609, "rotates": false }, + { "id": "scissors", "fg": 1610, "rotates": false }, + { "id": "scythe", "fg": 1611, "rotates": false }, + { "id": [ "tailors_kit", "sewing_kit" ], "fg": 1612, "rotates": false }, + { "id": [ "shavingkit", "survivor_shavingkit" ], "fg": 1613, "rotates": false }, + { "id": "i_staff", "fg": 1614, "rotates": false }, + { "id": "shock_staff", "fg": 1615, "rotates": false }, + { "id": [ "e_tool", "g_shovel", "e_tool_chinese", "shovel" ], "fg": 1616, "rotates": false }, + { "id": "sickle", "fg": 1617, "rotates": false }, + { "id": "smoke_machine", "fg": 1618, "rotates": false }, + { "id": "smoke_machine_act", "fg": 1619, "rotates": false }, + { "id": "smoke_machine_unpreped", "fg": 1620, "rotates": false }, + { "id": "spess_chunk", "fg": 1621 }, + { "id": "spray_can", "fg": 1622, "rotates": false }, + { "id": "stepladder", "fg": 1623, "rotates": false }, + { "id": "survivor_hairtrimmer", "fg": 1624, "rotates": false }, + { "id": "survivor_scope", "fg": 1625, "rotates": false }, + { "id": "swage", "fg": 1626, "rotates": false }, + { "id": "sword_xiphos", "fg": 1627, "rotates": false }, + { "id": "syringe", "fg": 1628, "rotates": false }, + { "id": [ "creepy_doll", "talking_doll" ], "fg": 1629, "rotates": false }, + { "id": "straw_doll", "fg": 1630, "rotates": false }, + { "id": "teddy", "fg": 1631, "rotates": false }, + { "id": "tazer", "fg": 1632, "rotates": false }, + { "id": "thermometer", "fg": 1633, "rotates": false }, + { "id": "tinderbox", "fg": 1634, "rotates": false }, + { "id": "tinderbox_on", "fg": 1635, "rotates": false }, + { "id": [ "pliers", "tongs" ], "fg": 1636, "rotates": false }, + { "id": "toolbox", "fg": 1637, "rotates": false }, + { "id": [ "tool_rdx_charge", "tool_anfo_charge" ], "fg": 1638, "rotates": false }, + { "id": [ "tool_rdx_charge_act", "tool_anfo_charge_act" ], "fg": 1639, "rotates": false }, + { "id": [ "gasbomb_makeshift", "tool_black_powder_bomb" ], "fg": 1640, "rotates": false }, + { "id": [ "gasbomb_makeshift_act", "tool_black_powder_bomb_act" ], "fg": 1641, "rotates": false }, + { "id": "torch", "fg": 1642, "rotates": false }, + { "id": "torch_lit", "fg": 1643, "rotates": false }, + { "id": "triffid_sap_grenade_act", "fg": 1644, "rotates": false }, + { "id": "triffid_sap_thrown", "fg": 1645, "rotates": false }, + { "id": [ "trimmer_on", "trimmer_off" ], "fg": 1646, "rotates": false }, + { "id": [ "tuba", "trumpet" ], "fg": 1647, "rotates": false }, + { "id": "two_way_radio", "fg": 1648, "rotates": false }, + { + "id": [ "makeshift_sealer", "battery_ups", "magazine_battery_mod", "stereo", "vac_sealer" ], + "fg": 1649, "rotates": false }, + { "id": "spiral_stone", "fg": 1650, "rotates": false }, + { "id": "vortex_stone", "fg": 1651, "rotates": false }, + { "id": "washboard", "fg": 1652, "rotates": false }, + { "id": [ "oxy_torch", "welder" ], "fg": 1653, "rotates": false }, + { "id": "welder_crude", "fg": 1654, "rotates": false }, + { "id": "whistle_multitool", "fg": 1655, "rotates": false }, { - "id": "mon_spider_cellar_giant", - "fg": 2713, + "id": [ "badge_deputy", "badge_marshal", "badge_detective", "badge_cybercop", "badge_swat" ], + "fg": 1656, "rotates": false }, + { "id": [ "rad_badge", "wrapped_rad_badge" ], "fg": 1657, "rotates": false }, + { "id": "wrench", "fg": 1658, "rotates": false }, + { "id": "xacto", "fg": 1659, "rotates": false }, + { "id": [ "fish_trap", "water_purifier" ], "fg": 1660, "rotates": false }, { - "id": "mon_spider_cellar_giant_s", - "fg": 2714, - "rotates": false + "id": "vp_water_purifier", + "fg": 1660, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1661 } ] }, { - "id": "mon_spider_widow_giant", - "fg": 2715, - "rotates": false + "id": "vp_minireactor", + "fg": 1662, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1183 } ] }, + { "id": "minireactor", "fg": 1662, "rotates": false }, + { "id": [ "double_plutonium_core", "it_battery_mount", "battery_compartment" ], "fg": 1663, "rotates": false }, { "id": [ - "mon_spider_widow_giant_s", - "mon_spider_widow" + "rm13_armor_on", + "armor_lightplate", + "cuirass_lightplate", + "armor_lorica", + "armor_plate", + "entry_suit", + "chainmail_suit", + "motorbike_armor", + "shark_suit", + "shark_suit_faraday", + "chainmail_hauberk", + "rm13_armor" ], - "fg": 2716, - "rotates": false - }, - { - "id": "mon_dermatik", - "fg": 2717, - "rotates": false - }, - { - "id": "mon_dermatik_larva", - "fg": 2718, - "rotates": false - }, - { - "id": "mon_wasp_queen", - "fg": 2719, - "rotates": false - }, - { - "id": "mon_wasp", - "fg": 2720, + "fg": 1664, "rotates": false }, + { "id": "armor_bone", "fg": 1665, "rotates": false }, + { "id": "armor_chitin", "fg": 1666, "rotates": false }, + { "id": [ "armor_larmor", "armor_blarmor", "touring_suit", "armor_lamellar" ], "fg": 1667, "rotates": false }, + { "id": "bookplate", "fg": 1668, "rotates": false }, + { "id": "football_armor", "fg": 1669, "rotates": false }, + { "id": "swat_armor", "fg": 1670, "rotates": false }, { - "id": "mon_bee_queen", - "fg": 2721, + "id": [ "mask_ski_loose", "thermal_mask", "thermal_mask_on", "balclava", "mask_ski" ], + "fg": 1671, "rotates": false }, - { - "id": "mon_bee_king", - "fg": 2722, + { "id": "f_leather_tarp", "fg": 1672, "rotates": false }, + { "id": "leather_tarp", "fg": 1673, "rotates": false }, + { "id": [ "emer_blanket", "generic_folded_vehicle" ], "fg": 1674, "rotates": false }, + { "id": "p_carpet", "fg": 1675, "rotates": false }, + { "id": "r_carpet", "fg": 1676, "rotates": false }, + { "id": "y_carpet", "fg": 1677, "rotates": false }, + { "id": "fiber_mat", "fg": 1678, "rotates": false }, + { "id": "g_carpet", "fg": 1679, "rotates": false }, + { "id": "fur_rollmat", "fg": 1680, "rotates": false }, + { "id": "rollmat", "fg": 1681, "rotates": false }, + { "id": "cot", "fg": 1682, "rotates": false }, + { "id": "electric_blanket", "fg": 1683, "rotates": false }, + { "id": "emer_blanket_on", "fg": 1684, "rotates": false }, + { "id": "towel", "fg": 1685, "rotates": false }, + { "id": "towel_soiled", "fg": 1686, "rotates": false }, + { "id": [ "blanket", "down_blanket", "towel_wet" ], "fg": 1687, "rotates": false }, + { "id": "sleeping_bag", "fg": 1688, "rotates": false }, + { "id": "snuggie", "fg": 1689, "rotates": false }, + { "id": [ "fur_blanket", "sleeping_bag_fur" ], "fg": 1690, "rotates": false }, + { "id": "electric_blanket_on", "fg": 1691, "rotates": false }, + { "id": "american_flag", "fg": 1692, "rotates": false }, + { + "id": [ "thermal_socks_on", "cleats", "tabi_dress", "wetsuit_booties", "nomex_socks", "boots_h20survivor", "thermal_socks" ], + "fg": 1693, "rotates": false }, + { "id": "clownshoes", "fg": 1694, "rotates": false }, + { "id": [ "socks", "tabi_gi", "socks_bowling", "sockmitts" ], "fg": 1695, "rotates": false }, + { "id": [ "socks_wool", "geta" ], "fg": 1696, "rotates": false }, + { "id": [ "blazer", "jacket_windbreaker" ], "fg": 1697, "rotates": false }, + { "id": [ "coat_rain", "bunker_coat", "folding_poncho_on" ], "fg": 1698, "rotates": false }, + { "id": [ "coat_winter", "jacket_leather_red" ], "fg": 1699, "rotates": false }, + { "id": [ "jacket_jean", "jacket_evac" ], "fg": 1700, "rotates": false }, + { "id": "jacket_leather", "fg": 1701, "rotates": false }, + { "id": [ "jacket_light", "cassock" ], "fg": 1702, "rotates": false }, { "id": [ - "mon_bee_scout", - "mon_bee_soldier", - "mon_bee" + "keikogi", + "kariginu", + "kimono", + "kittel", + "thawb", + "coat_lab", + "jacket_chef", + "beekeeping_suit", + "fencing_jacket", + "winter_jacket_army" ], - "fg": 2723, - "rotates": false - }, - { - "id": "mon_butterfly", - "fg": 2724, - "rotates": false - }, - { - "id": "mon_caterpillar", - "fg": 2725, - "rotates": false - }, - { - "id": "mon_moth", - "fg": 2726, - "rotates": false - }, - { - "id": "mon_dragonfly_giant", - "fg": 2727, + "fg": 1703, "rotates": false }, + { "id": [ "peacoat", "gambeson" ], "fg": 1704, "rotates": false }, + { "id": [ "cowboy_hat", "fedora" ], "fg": 1705, "rotates": false }, + { "id": [ "hairpin", "distaff_spindle" ], "fg": 1706, "rotates": false }, + { "id": "fc_hairpin", "fg": 1707, "rotates": false }, + { "id": [ "powered_earmuffs_on", "hat_noise_cancelling", "powered_earmuffs" ], "fg": 1708, "rotates": false }, + { "id": [ "helmet_riot_raised", "tac_fullhelmet", "helmet_riot" ], "fg": 1709, "rotates": false }, + { "id": [ "helmet_football", "headgear" ], "fg": 1710, "rotates": false }, + { "id": "keffiyeh", "fg": 1711, "rotates": false }, + { "id": [ "mask_filter", "mask_filter" ], "fg": 1712, "rotates": false }, { "id": [ - "mon_frog", - "mon_dragonfly" + "mask_gas_xl", + "mask_survivor", + "mask_survivorxl", + "mask_hsurvivor", + "mask_lsurvivor", + "mask_bunker", + "mask_bunker_on", + "mask_wsurvivor", + "mask_wsurvivorxl", + "mask_fsurvivor", + "mask_fsurvivorxl", + "mask_h20survivor", + "mask_h20survivor_on", + "mask_h20survivorxl", + "mask_h20survivorxl_on", + "rebreather", + "rebreather_on", + "rebreather_xl", + "rebreather_xl_on", + "mask_gas" ], - "fg": 2728, - "rotates": false - }, - { - "id": "mon_mosquito_giant", - "fg": 2729, + "fg": 1713, "rotates": false }, + { "id": [ "q_solarpack_on", "solarpack_on" ], "fg": 1714, "rotates": false }, + { "id": "copper_bracelet", "fg": 1715, "rotates": false }, + { "id": "gold_bracelet", "fg": 1716, "rotates": false }, + { "id": [ "silver_bracelet", "rad_monitor" ], "fg": 1717, "rotates": false }, + { "id": [ "bowhat", "porkpie" ], "fg": 1718, "rotates": false }, + { "id": [ "straw_hat", "hat_sombrero", "straw_fedora" ], "fg": 1719, "rotates": false }, + { "id": "tarp", "fg": 1720, "rotates": false }, { - "id": "mon_locust", - "fg": 2730, + "id": [ "vest", "waistcoat", "sleeveless_trenchcoat", "chainmail_vest", "sleeveless_duster", "vest_leather_mod", "cloak" ], + "fg": 1721, "rotates": false }, + { "id": "cloak_fur", "fg": 1722, "rotates": false }, { - "id": "mon_locust_nymph", - "fg": 2731, + "id": [ + "vest_leather", + "sleeveless_trenchcoat_leather", + "sleeveless_trenchcoat_fur", + "sleeveless_trenchcoat_survivor", + "sleeveless_duster_fur", + "sleeveless_duster_leather", + "sleeveless_duster_survivor", + "cloak_leather", + "jedi_cloak" + ], + "fg": 1723, "rotates": false }, + { "id": "optical_cloak", "fg": 1724, "rotates": false }, + { "id": "cloak_wool", "fg": 1725, "rotates": false }, + { "id": "holo_cloak", "fg": 1726, "rotates": false }, + { "id": "vest_leather_zuicide_short", "fg": 1727, "rotates": false }, + { "id": "vest_leather_zuicide_short_active", "fg": 1728, "rotates": false }, + { "id": "flotation_vest_ms", "fg": 1729, "rotates": false }, + { "id": "flotation_vest", "fg": 1730, "rotates": false }, + { "id": "tux", "fg": 1731, "rotates": false }, { - "id": "mon_fly", - "fg": 2732, + "id": [ "thermal_suit_on", "thermal_outfit", "thermal_outfit_on", "wetsuit", "nomex_suit", "stillsuit", "thermal_suit" ], + "fg": 1732, "rotates": false }, + { "id": "armor_samurai", "fg": 1733, "rotates": false }, + { "id": "bondage_suit", "fg": 1734, "rotates": false }, + { "id": [ "clown_suit", "karate_gi", "judo_gi" ], "fg": 1735, "rotates": false }, + { "id": "dinosuit", "fg": 1736, "rotates": false }, + { "id": [ "hazmat_suit", "cleansuit", "subsuit_xl" ], "fg": 1737, "rotates": false }, + { "id": [ "jumpsuit", "jumpsuit_xl" ], "fg": 1738, "rotates": false }, + { "id": [ "union_suit", "wool_suit" ], "fg": 1739, "rotates": false }, + { "id": [ "wetsuit_spring", "halter_top", "tunic_rag" ], "fg": 1740, "rotates": false }, { - "id": "mon_centipede_giant", - "fg": 2733, + "id": [ + "thermal_gloves_on", + "wetsuit_gloves", + "nomex_gloves", + "gloves_fsurvivor", + "gloves_h20survivor", + "gloves_hsurvivor", + "gloves_plate", + "megaarmor_gloves_1", + "thermal_gloves" + ], + "fg": 1741, "rotates": false }, + { "id": [ "fire_gauntlets", "gloves_survivor", "gloves_xlsurvivor" ], "fg": 1742, "rotates": false }, + { "id": [ "gauntlets_bone", "beekeeping_gloves" ], "fg": 1743, "rotates": false }, + { "id": [ "gloves_leather", "gauntlets_larmor", "gloves_work" ], "fg": 1744, "rotates": false }, { - "id": "mon_plague_vector", - "fg": 2734, + "id": [ "gloves_liner", "gloves_wraps", "winter_gloves_army", "long_glove_white", "gloves_golf" ], + "fg": 1745, "rotates": false }, + { "id": "gloves_lsurvivor", "fg": 1746, "rotates": false }, + { "id": "gloves_medical", "fg": 1747, "rotates": false }, + { "id": "gloves_rubber", "fg": 1748, "rotates": false }, + { "id": [ "gloves_winter", "gloves_wsurvivor" ], "fg": 1749, "rotates": false }, + { "id": "gloves_wool", "fg": 1750, "rotates": false }, { - "id": "mon_skittering_plague", - "fg": 2735, + "id": [ "gloves_wraps_wool", "gloves_light", "gauntlets_chitin", "gloves_bag" ], + "fg": 1751, "rotates": false }, - { - "id": "mon_plague_nymph", - "fg": 2736, + { "id": [ "mittens", "boxing_gloves" ], "fg": 1752, "rotates": false }, + { "id": [ "survivor_light", "wearable_light" ], "fg": 1753, "rotates": false }, + { "id": [ "wearable_light_on", "survivor_light_on" ], "fg": 1754, "rotates": false }, + { "id": "megaarmor_torso_3_act", "fg": 1755, "rotates": false }, + { "id": "megaarmor_torso_3", "fg": 1756, "rotates": false }, + { "id": "bagpipes", "fg": 1757, "rotates": false }, + { "id": "binoculars", "fg": 1758, "rotates": false }, + { "id": "game_watch", "fg": 1759, "rotates": false }, + { "id": [ "goggles_nv_on", "goggles_ir", "goggles_ir_on", "goggles_nv" ], "fg": 1760, "rotates": false }, + { "id": "harmonica_holder", "fg": 1761, "rotates": false }, + { "id": "miner_hat", "fg": 1762, "rotates": false }, + { "id": "miner_hat_on", "fg": 1763, "rotates": false }, + { "id": "ref_lighter_string", "fg": 1764, "rotates": false }, + { + "id": [ "sac_purse_clean_water_ankle", "sac_purse_clean_water_arm", "sac_purse_clean_water_leg", "sac_purse_clean_water" ], + "fg": 1765, "rotates": false }, + { "id": "saxophone", "fg": 1766, "rotates": false }, { "id": [ - "mon_pregnant_giant_cockroach", - "mon_giant_cockroach" + "scarf_long", + "knit_scarf", + "long_knit_scarf", + "knit_scarf_loose", + "long_knit_scarf_loose", + "long_patchwork_scarf", + "long_patchwork_scarf_loose", + "patchwork_scarf", + "patchwork_scarf_loose", + "scarf_long_loose", + "scarf_loose", + "scarf" ], - "fg": 2737, - "rotates": false - }, - { - "id": "mon_giant_cockroach_nymph", - "fg": 2738, + "fg": 1767, "rotates": false }, { - "id": [ - "mon_centipede", - "mon_slug", - "mon_mosquito" - ], - "fg": 2739, + "id": [ "scarf_fur", "scarf_fur_long", "scarf_fur_long_loose", "scarf_fur_loose" ], + "fg": 1768, "rotates": false }, + { "id": "10gal_hat", "fg": 1769, "rotates": false }, + { "id": [ "anbc_suit", "aep_suit" ], "fg": 1770, "rotates": false }, + { "id": [ "hsurvivor_suit", "fsurvivor_suit", "h20survivor_suit" ], "fg": 1771, "rotates": false }, + { "id": "lsurvivor_suit", "fg": 1772, "rotates": false }, + { "id": [ "survivor_suit", "xlsurvivor_suit" ], "fg": 1773, "rotates": false }, + { "id": [ "wolfsuit", "armor_farmor" ], "fg": 1774, "rotates": false }, + { "id": "wsurvivor_suit", "fg": 1775, "rotates": false }, + { "id": "fishing_waders", "fg": 1776, "rotates": false }, + { "id": "apron_leather", "fg": 1777, "rotates": false }, + { "id": "armguard_chitin", "fg": 1778, "rotates": false }, { - "id": "mon_wasp_small", - "fg": 2740, + "id": [ "armguard_hard", "armguard_paper", "legguard_hard", "legguard_paper" ], + "fg": 1779, "rotates": false }, { "id": [ - "mon_pupae_pk", - "mon_pupae" + "armguard_soft", + "chainmail_arms", + "armguard_metal", + "legguard_metal", + "chainmail_legs", + "armguard_lightplate", + "legguard_lightplate" ], - "fg": 2741, + "fg": 1780, "rotates": false }, { - "id": "mon_ant_acid_kwama", - "fg": 2742, + "id": [ + "arm_splint", + "leg_splint", + "2byarm_guard", + "2byshin_guard", + "vambrace_larmor", + "armguard_larmor", + "armguard_larmor_mod" + ], + "fg": 1781, "rotates": false }, { - "id": "mon_ant_queen_firebug", - "fg": 2743, + "id": [ "arm_warmers", "leg_warmers", "leg_warmers_f", "leg_warmers_xl", "leg_warmers_xlf" ], + "fg": 1782, "rotates": false }, - { - "id": "mon_ant_acid_queen", - "fg": 2744, + { "id": "megaarmor_armguards_1", "fg": 1783, "rotates": false }, + { "id": "armguard_bone", "fg": 1784, "rotates": false }, + { "id": "armor_cuirass", "fg": 1785, "rotates": false }, + { "id": [ "armor_plarmor", "jacket_leather_mod", "armor_scrapsuit" ], "fg": 1786, "rotates": false }, + { "id": "army_top", "fg": 1787, "rotates": false }, + { "id": "bandana", "fg": 1788, "rotates": false }, + { "id": [ "bandolier_rifle", "bandolier_shotgun", "bandolier_pistol" ], "fg": 1789, "rotates": false }, + { "id": "bandolier_wrist", "fg": 1790, "rotates": false }, + { "id": "brooch", "fg": 1791, "rotates": false }, + { "id": [ "tieclip", "collarpin" ], "fg": 1792, "rotates": false }, + { "id": "barrette", "fg": 1793, "rotates": false }, + { "id": [ "helmet_scavenger", "beekeeping_hood" ], "fg": 1794, "rotates": false }, + { "id": "helmet_chitin", "fg": 1795, "rotates": false }, + { "id": "helmet_plate", "fg": 1796, "rotates": false }, + { "id": [ "beret_wool", "beret" ], "fg": 1797, "rotates": false }, + { "id": [ "bra", "sports_bra", "bikini_top" ], "fg": 1798, "rotates": false }, + { "id": [ "bikini_top_fur", "fur_cat_ears" ], "fg": 1799, "rotates": false }, + { "id": "bikini_top_leather", "fg": 1800, "rotates": false }, + { "id": "bindle", "fg": 1801, "rotates": false }, + { "id": "bondage_mask", "fg": 1802, "rotates": false }, + { "id": [ "boots_larmor", "boots" ], "fg": 1803, "rotates": false }, + { "id": "boots_bone", "fg": 1804, "rotates": false }, + { "id": "boots_chitin", "fg": 1805, "rotates": false }, + { "id": [ "boots_combat", "boots_lsurvivor" ], "fg": 1806, "rotates": false }, + { "id": "boots_hiking", "fg": 1807, "rotates": false }, + { + "id": [ "boots_plate", "boots_fsurvivor", "boots_hsurvivor", "motorbike_boots", "megaarmor_boots_1" ], + "fg": 1808, "rotates": false }, + { "id": [ "boots_rubber", "boots_bunker" ], "fg": 1809, "rotates": false }, + { "id": [ "boots_winter", "boots_wsurvivor" ], "fg": 1810, "rotates": false }, + { "id": [ "sholster", "bootstrap" ], "fg": 1811, "rotates": false }, + { "id": "boots_fur", "fg": 1812, "rotates": false }, + { "id": [ "boots_survivor", "boots_xlsurvivor", "boots_steel" ], "fg": 1813, "rotates": false }, + { "id": "jeans", "fg": 1814, "rotates": false }, + { "id": "long_underpants", "fg": 1815, "rotates": false }, { - "id": "mon_ant_acid_soldier", - "fg": 2745, + "id": [ "pants", "tights", "technician_pants_gray", "motorbike_pants", "hakama_gi" ], + "fg": 1816, "rotates": false }, - { - "id": "mon_ant_soldier_terminal", - "fg": 2746, + { "id": [ "pants_cargo", "pants_survivor", "lsurvivor_pants" ], "fg": 1817, "rotates": false }, + { "id": [ "pants_leather", "breeches" ], "fg": 1818, "rotates": false }, + { "id": [ "pants_ski", "jeans_red" ], "fg": 1819, "rotates": false }, + { "id": [ "striped_pants", "zubon_gi", "fencing_pants", "winter_pants_army" ], "fg": 1820, "rotates": false }, + { "id": "bunker_pants", "fg": 1821, "rotates": false }, + { "id": "case_violin", "fg": 1822, "rotates": false }, + { "id": "chaps_leather", "fg": 1823, "rotates": false }, + { "id": [ "survivor_vest", "chestrig" ], "fg": 1824, "rotates": false }, + { "id": "chestwrap_fur", "fg": 1825, "rotates": false }, + { "id": "robe", "fg": 1826, "rotates": false }, + { "id": [ "coat_fur_sf", "coat_fur" ], "fg": 1827, "rotates": false }, + { "id": "gold_ear", "fg": 1828, "rotates": false }, + { "id": "silver_ear", "fg": 1829, "rotates": false }, + { "id": "copper_ear", "fg": 1830, "rotates": false }, + { "id": "corset", "fg": 1831, "rotates": false }, + { "id": "cowl_wool", "fg": 1832, "rotates": false }, + { "id": [ "crown_golden_survivor", "crown_golden" ], "fg": 1833, "rotates": false }, + { "id": [ "lsurvivor_armor", "dragonskin" ], "fg": 1834, "rotates": false }, + { "id": [ "kevlar", "makeshift_kevlar" ], "fg": 1835, "rotates": false }, + { + "id": [ "modularvest", "modularvestsuper", "modularveststeel", "modularvestceramic", "modularvestkevlar", "modularvesthard" ], + "fg": 1836, "rotates": false }, - { - "id": "mon_ant_terminal", - "fg": 2747, + { "id": [ "sundress", "sleeveless_tunic", "tunic", "gown", "dress" ], "fg": 1837, "rotates": false }, + { "id": [ "striped_shirt", "dress_shirt" ], "fg": 1838, "rotates": false }, + { "id": "long_undertop", "fg": 1839, "rotates": false }, + { "id": "postman_shirt", "fg": 1840, "rotates": false }, + { "id": [ "sheriffshirt", "longshirt" ], "fg": 1841, "rotates": false }, + { "id": "dress_wedding", "fg": 1842, "rotates": false }, + { "id": "dump_pouch", "fg": 1843, "rotates": false }, + { "id": "ear_plugs", "fg": 1844, "rotates": false }, + { "id": "glasses_bal", "fg": 1845, "rotates": false }, + { "id": "goggles_ski", "fg": 1846, "rotates": false }, + { "id": [ "goggles_welding", "survivor_goggles", "iggaak" ], "fg": 1847, "rotates": false }, + { "id": "eclipse_glasses", "fg": 1848, "rotates": false }, + { "id": [ "knee_pads", "elbow_pads" ], "fg": 1849, "rotates": false }, + { "id": "glasses_safety", "fg": 1850, "rotates": false }, + { "id": "fancy_sunglasses", "fg": 1851, "rotates": false }, + { "id": "flag_shirt", "fg": 1852, "rotates": false }, + { "id": "flintlock_pouch", "fg": 1853, "rotates": false }, + { + "id": [ "lowtops", "golf_shoes", "footrags", "footrags_wool", "socks_bag", "flip_flops" ], + "fg": 1854, "rotates": false }, { "id": [ - "mon_ant_queen", - "mon_ant_queen_young" + "mocassins", + "leathersandals", + "bastsandals", + "clogs", + "footrags_fur", + "footrags_leather", + "straw_sandals", + "slippers" ], - "fg": 2748, + "fg": 1855, "rotates": false }, + { "id": "shoes_bowling", "fg": 1856, "rotates": false }, + { "id": [ "sneakers", "dance_shoes", "shoes_birchbark", "dress_shoes" ], "fg": 1857, "rotates": false }, + { "id": [ "leather_collar", "locket_lucy", "fur_collar" ], "fg": 1858, "rotates": false }, + { "id": [ "glasses_eye", "fitover_sunglasses" ], "fg": 1859, "rotates": false }, + { "id": "glasses_reading", "fg": 1860, "rotates": false }, + { "id": "sunglasses", "fg": 1861, "rotates": false }, + { "id": "glasses_bifocal", "fg": 1862, "rotates": false }, + { "id": "glasses_monocle", "fg": 1863, "rotates": false }, { - "id": "mon_ant_soldier", - "fg": 2749, + "id": [ "gloves_fingerless_mod", "gloves_wraps_fur", "gloves_wraps_leather", "gloves_fingerless" ], + "fg": 1864, "rotates": false }, - { - "id": [ - "mon_ant_soldier_pk", - "mon_ant_soldier_pk_weak" - ], - "fg": 2750, + { "id": "gloves_fur", "fg": 1865, "rotates": false }, + { "id": "gloves_tactical", "fg": 1866, "rotates": false }, + { "id": "glove_jackson", "fg": 1867, "rotates": false }, + { "id": "goggles_swim", "fg": 1868, "rotates": false }, + { "id": [ "diamond_dental_grill", "gold_dental_grill" ], "fg": 1869, "rotates": false }, + { "id": [ "sf_watch", "gold_watch" ], "fg": 1870, "rotates": false }, + { "id": [ "wristwatch", "diving_watch" ], "fg": 1871, "rotates": false }, + { "id": [ "bandolier_bomblet", "grenade_pouch" ], "fg": 1872, "rotates": false }, + { "id": [ "helmet_netting", "hat_boonie" ], "fg": 1873, "rotates": false }, + { "id": [ "hat_hard", "firehelmet", "hat_hard_hooded" ], "fg": 1874, "rotates": false }, + { "id": [ "helmet_skid", "pot_helmet", "tinfoil_hat" ], "fg": 1875, "rotates": false }, + { "id": "hat_chef", "fg": 1876, "rotates": false }, + { "id": [ "tricorne", "eboshi", "hat_cotton" ], "fg": 1877, "rotates": false }, + { "id": "hat_knit", "fg": 1878, "rotates": false }, + { "id": "hat_fur", "fg": 1879, "rotates": false }, + { "id": "hat_hooded", "fg": 1880, "rotates": false }, + { "id": "hat_hunting", "fg": 1881, "rotates": false }, + { "id": [ "thigh_high_boots", "heels" ], "fg": 1882, "rotates": false }, + { "id": [ "helmet_bike", "maid_hat", "kufi" ], "fg": 1883, "rotates": false }, + { "id": [ "helmet_survivor", "helmet_xlsurvivor", "kippah" ], "fg": 1884, "rotates": false }, + { "id": [ "tac_helmet", "helmet_hsurvivor", "hat_newsboy" ], "fg": 1885, "rotates": false }, + { "id": "helmet_army", "fg": 1886, "rotates": false }, + { "id": "helmet_larmor", "fg": 1887, "rotates": false }, + { "id": [ "helmet_liner", "helmet_nomad", "veil_wedding" ], "fg": 1888, "rotates": false }, + { "id": "helmet_ball", "fg": 1889, "rotates": false }, + { "id": "helmet_barbute", "fg": 1890, "rotates": false }, + { "id": "hat_ball", "fg": 1891, "rotates": false }, + { "id": "postman_hat", "fg": 1892, "rotates": false }, + { "id": "hat_golf", "fg": 1893, "rotates": false }, + { "id": "helmet_bone", "fg": 1894, "rotates": false }, + { "id": "helmet_conical", "fg": 1895, "rotates": false }, + { "id": "helmet_corinthian", "fg": 1896, "rotates": false }, + { "id": "helmet_galea", "fg": 1897, "rotates": false }, + { "id": "helmet_kabuto", "fg": 1898, "rotates": false }, + { + "id": [ "nomex_hood", "wetsuit_hood", "hood_fsurvivor", "hood_h20survivor", "fencing_mask", "chainmail_hood", "helmet_motor" ], + "fg": 1899, "rotates": false }, - { - "id": "mon_ant_acid", - "fg": 2751, + { "id": "helmet_nasal", "fg": 1900, "rotates": false }, + { "id": [ "back_holster", "XL_holster", "holster" ], "fg": 1901, "rotates": false }, + { "id": [ "wool_hoodie", "hoodie" ], "fg": 1902, "rotates": false }, + { "id": "hood_rain", "fg": 1903, "rotates": false }, + { "id": [ "hood_survivor", "hood_xlsurvivor" ], "fg": 1904, "rotates": false }, + { "id": "hood_wsurvivor", "fg": 1905, "rotates": false }, + { "id": "hood_lsurvivor", "fg": 1906, "rotates": false }, + { "id": "hot_pants_fur", "fg": 1907, "rotates": false }, + { "id": "hot_pants_leather", "fg": 1908, "rotates": false }, + { "id": [ "trunks", "boy_shorts", "boxer_shorts", "boxer_briefs" ], "fg": 1909, "rotates": false }, + { "id": "hot_pants", "fg": 1910, "rotates": false }, + { "id": [ "duster_fur", "trenchcoat_fur" ], "fg": 1911, "rotates": false }, + { "id": [ "trenchcoat", "duster", "greatcoat" ], "fg": 1912, "rotates": false }, + { + "id": [ "trenchcoat_leather", "trenchcoat_survivor", "duster_survivor", "armor_nomad", "duster_leather" ], + "fg": 1913, "rotates": false }, - { - "id": "mon_ant_male", - "fg": 2752, + { "id": "house_coat", "fg": 1914, "rotates": false }, + { "id": [ "armor_scavenger", "jacket_army" ], "fg": 1915, "rotates": false }, + { "id": "jacket_flannel", "fg": 1916, "rotates": false }, + { "id": "jersey", "fg": 1917, "rotates": false }, + { "id": "judo_belt_blue", "fg": 1918, "rotates": false }, + { "id": "judo_belt_brown", "fg": 1919, "rotates": false }, + { "id": "judo_belt_green", "fg": 1920, "rotates": false }, + { "id": "judo_belt_orange", "fg": 1921, "rotates": false }, + { "id": "judo_belt_white", "fg": 1922, "rotates": false }, + { "id": "judo_belt_yellow", "fg": 1923, "rotates": false }, + { "id": "judo_belt_black", "fg": 1924, "rotates": false }, + { "id": [ "boots_western", "knee_high_boots" ], "fg": 1925, "rotates": false }, + { + "id": [ "stockings", "stockings_tent_legs", "stockings_tent_arms", "leggings" ], + "fg": 1926, "rotates": false }, + { "id": [ "fireman_belt", "leather_belt" ], "fg": 1927, "rotates": false }, + { "id": "leather_cat_ears", "fg": 1928, "rotates": false }, + { "id": "ragpouch", "fg": 1929, "rotates": false }, + { "id": "leather_pouch", "fg": 1930, "rotates": false }, + { "id": "legguard_bronze", "fg": 1931, "rotates": false }, + { "id": "legrig", "fg": 1932, "rotates": false }, + { "id": "polo_shirt", "fg": 1933, "rotates": false }, + { "id": [ "tshirt", "undershirt", "tshirt_text", "technician_shirt_gray" ], "fg": 1934, "rotates": false }, + { "id": "linuxtshirt", "fg": 1935, "rotates": false }, { - "id": "mon_ant", - "fg": 2753, + "id": [ "loincloth_wool", "briefs", "panties", "bikini_bottom", "loincloth" ], + "fg": 1936, "rotates": false }, - { - "id": "mon_fant", - "fg": 2754, + { "id": "loincloth_leather", "fg": 1937, "rotates": false }, + { "id": "loincloth_fur", "fg": 1938, "rotates": false }, + { "id": "maid_dress", "fg": 1939, "rotates": false }, + { "id": "makeshift_sling", "fg": 1940, "rotates": false }, + { "id": "mask_bal", "fg": 1941, "rotates": false }, + { "id": "mask_dust", "fg": 1942, "rotates": false }, + { "id": [ "mask_guy_fawkes", "mask_hockey" ], "fg": 1943, "rotates": false }, + { "id": "mask_rioter", "fg": 1944, "rotates": false }, + { "id": "megaarmor_head_1", "fg": 1945, "rotates": false }, + { "id": "megaarmor_leggings_1", "fg": 1946, "rotates": false }, + { "id": "megaarmor_torso_1", "fg": 1947, "rotates": false }, + { "id": "megaarmor_torso_2", "fg": 1948, "rotates": false }, + { "id": "mouthpiece", "fg": 1949, "rotates": false }, + { "id": "nanoskirt", "fg": 1950, "rotates": false }, + { "id": [ "locket", "holy_symbol_wood", "necklace" ], "fg": 1951, "rotates": false }, + { "id": "pearl_collar", "fg": 1952, "rotates": false }, + { "id": [ "small_relic", "holy_symbol" ], "fg": 1953, "rotates": false }, + { "id": [ "blindfold", "obi_gi" ], "fg": 1954, "rotates": false }, + { "id": "pants_checkered", "fg": 1955, "rotates": false }, + { "id": "pants_army", "fg": 1956, "rotates": false }, + { "id": "pants_fur", "fg": 1957, "rotates": false }, + { "id": [ "helmet_lobster", "pickelhaube" ], "fg": 1958, "rotates": false }, + { "id": "basket_laundry", "fg": 1959, "rotates": false }, + { "id": "poncho", "fg": 1960, "rotates": false }, + { "id": [ "shorts", "under_armor_shorts" ], "fg": 1961, "rotates": false }, + { "id": "shorts_cargo", "fg": 1962, "rotates": false }, + { "id": [ "shorts_denim", "b_shorts" ], "fg": 1963, "rotates": false }, + { "id": "postman_shorts", "fg": 1964, "rotates": false }, + { "id": [ "depowered_armor", "power_armor_basic" ], "fg": 1965, "rotates": false }, + { "id": "power_armor_frame", "fg": 1966, "rotates": false }, + { "id": "power_armor_heavy", "fg": 1967, "rotates": false }, + { "id": [ "depowered_helmet", "power_armor_helmet_basic" ], "fg": 1968, "rotates": false }, + { "id": "power_armor_helmet_heavy", "fg": 1969, "rotates": false }, + { "id": "power_armor_helmet_light", "fg": 1970, "rotates": false }, + { "id": "power_armor_light", "fg": 1971, "rotates": false }, + { "id": [ "quiver_birchbark", "sheath", "bootsheath", "quiver" ], "fg": 1972, "rotates": false }, + { + "id": [ "quiver_large_birchbark", "scabbard", "bscabbard", "baldric", "quiver_large" ], + "fg": 1973, "rotates": false }, - { - "id": "mon_ant_fungus", - "fg": 2755, - "rotates": false + { "id": [ "diamond_ring", "ring" ], "fg": 1974, "rotates": false }, + { "id": [ "rollerskates", "roller_blades" ], "fg": 1975, "rotates": false }, + { "id": [ "molle_pack", "gobag", "rucksack" ], "fg": 1976, "rotates": false }, + { "id": [ "chestwrap_leather", "leather" ], "fg": 1977, "rotates": false }, + { "id": [ "v_curtain_item", "sheet" ], "fg": 1978, "rotates": false }, + { "id": [ "fur", "tanbark", "birchbark", "willowbark" ], "fg": 1979, "rotates": false }, + { "id": "shield_buckler", "fg": 1980, "rotates": false }, + { "id": "shield_heater", "fg": 1981, "rotates": false }, + { "id": "shield_hoplon", "fg": 1982, "rotates": false }, + { "id": "shield_kite", "fg": 1983, "rotates": false }, + { "id": "shield_round", "fg": 1984, "rotates": false }, + { "id": "shield_scutum", "fg": 1985, "rotates": false }, + { "id": "shield_wooden", "fg": 1986, "rotates": false }, + { "id": "shield_wooden_large", "fg": 1987, "rotates": false }, + { "id": [ "kilt", "skirt" ], "fg": 1988, "rotates": false }, + { "id": "skirt_leather", "fg": 1989, "rotates": false }, + { "id": "suit", "fg": 1990, "rotates": false }, + { "id": [ "swat_shield_act", "swat_shield" ], "fg": 1991, "rotates": false }, + { "id": "sweatshirt", "fg": 1992, "rotates": false }, + { "id": "sweater", "fg": 1993, "rotates": false }, + { "id": "swim_fins", "fg": 1994, "rotates": false }, + { "id": [ "camisole", "tank_top" ], "fg": 1995, "rotates": false }, + { "id": [ "under_armor", "kevlar_tee" ], "fg": 1996, "rotates": false }, + { "id": [ "survivor_belt", "survivor_belt_notools", "tool_belt" ], "fg": 1997, "rotates": false }, + { "id": "tophat", "fg": 1998, "rotates": false }, + { "id": "turban", "fg": 1999, "rotates": false }, + { "id": [ "puck", "ear_spool" ], "fg": 2000, "rotates": false }, + { "id": "120mm_casing", "fg": 2001, "rotates": false }, + { "id": "155mm_casing", "fg": 2002, "rotates": false }, + { "id": "30mm_casing", "fg": 2003, "rotates": false }, + { "id": "exploding_arrow_warhead", "fg": 2004, "rotates": false }, + { "id": [ "5x50_hull", "410_hull", "shot_hull" ], "fg": 2005 }, + { "id": "1st_aid", "fg": 2006, "rotates": false }, + { "id": "golf_tee", "fg": 2007, "rotates": false }, + { "id": "plastic_pot_flower", "fg": 2008, "rotates": false }, + { "id": "clay_pot_flower", "fg": 2009, "rotates": false }, + { "id": "2x4", "fg": 2010, "rotates": false }, + { "id": [ "chitin_plate", "alloy_plate", "alloy_sheet" ], "fg": 2011, "rotates": false }, + { "id": "hard_plate", "fg": 2012, "rotates": false }, + { "id": "mil_plate", "fg": 2013, "rotates": false }, + { "id": [ "steel_plate", "bone_plate" ], "fg": 2014, "rotates": false }, + { "id": "wood_plate", "fg": 2015, "rotates": false }, + { + "id": [ "ammolink30mm", "ammolink40mm", "ammolink50", "ammolink223", "ammolink308", "ammolink" ], + "fg": 2016 }, - { - "id": "mon_ant_scrib", - "fg": 2756, + { "id": "arachnotron_guts", "fg": 2017, "rotates": false }, + { "id": "atomic_coffeepot", "fg": 2018, "rotates": false }, + { "id": "golf_ball", "fg": 2019, "rotates": false }, + { "id": "bat_metal", "fg": 2020, "rotates": false }, + { "id": "bat", "fg": 2021, "rotates": false }, + { "id": "battletorch_done", "fg": 2022, "rotates": false }, + { "id": "biollante_bud", "fg": 2023, "rotates": false }, + { "id": "bluebell_bud", "fg": 2024, "rotates": false }, + { "id": [ "dahlia_bud", "poppy_bud" ], "fg": 2025, "rotates": false }, + { "id": [ "knuckle_katar", "knuckle_nail", "bagh_nakha", "bio_claws_weapon" ], "fg": 2026, "rotates": false }, + { "id": [ "wasp_glue", "wasp_glue_super", "bone_glue" ], "fg": 2027, "rotates": false }, + { "id": "superglue", "fg": 2028, "rotates": false }, + { "id": "bowling_axe", "fg": 2029, "rotates": false }, + { "id": "bowling_pin", "fg": 2030, "rotates": false }, + { "id": "brick", "fg": 2031, "rotates": false }, + { "id": [ "carding_paddles", "broom" ], "fg": 2032, "rotates": false }, + { "id": "bullwhip", "fg": 2033, "rotates": false }, + { "id": "candlestick", "fg": 2034, "rotates": false }, + { "id": "cane", "fg": 2035, "rotates": false }, + { "id": [ "cantilever_small", "cantilever_medium" ], "fg": 2036, "rotates": false }, + { + "id": [ "vp_crane_medium", "vp_crane_small" ], + "fg": 2036, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] + }, + { "id": "cargo_lock", "fg": 2037, "rotates": false }, + { "id": "glass_plate", "fg": 2038, "rotates": false }, + { "id": "tin_plate", "fg": 2039, "rotates": false }, + { "id": "ceramic_plate", "fg": 2040, "rotates": false }, + { "id": [ "material_shrd_limestone", "ceramic_shard" ], "fg": 2041, "rotates": false }, + { "id": "knuckle_brass", "fg": 2042, "rotates": false }, + { "id": "knuckle_steel", "fg": 2043, "rotates": false }, + { "id": "cestus", "fg": 2044, "rotates": false }, + { "id": "chitin_piece", "fg": 2045, "rotates": false }, + { "id": "teapot", "fg": 2046, "rotates": false }, + { "id": "clay_teapot", "fg": 2047, "rotates": false }, + { "id": [ "circsaw_blade", "clockworks" ], "fg": 2048, "rotates": false }, + { "id": "mon_blood_sacrifice", "fg": 2049, "rotates": false }, + { "id": "corpse", "fg": 2050, "rotates": false }, + { "id": "cudgel", "fg": 2051, "rotates": false }, + { "id": "pipe", "fg": 2052, "rotates": false }, + { "id": "cu_pipe", "fg": 2053, "rotates": false }, + { "id": "diamond", "fg": 2054, "rotates": false }, + { "id": [ "drivebelt_makeshift", "drivebelt" ], "fg": 2055, "rotates": false }, + { "id": "element", "fg": 2056, "rotates": false }, + { "id": [ "filter_air_makeshift", "filter_air" ], "fg": 2057, "rotates": false }, + { "id": [ "filter_liquid_makeshift", "filter_liquid" ], "fg": 2058 }, + { "id": "fish_bowl", "fg": 2059, "rotates": false }, + { "id": "frame", "fg": 2060, "rotates": false }, + { "id": [ "frame_wood", "frame_wood_light", "foldwoodframe" ], "fg": 2061, "rotates": false }, + { "id": "hdframe", "fg": 2062, "rotates": false }, + { "id": [ "xlframe", "foldframe" ], "fg": 2063, "rotates": false }, + { "id": "folding_basket", "fg": 2064, "rotates": false }, + { "id": "football", "fg": 2065, "rotates": false }, + { "id": [ "spork", "foon", "fork" ], "fg": 2066, "rotates": false }, + { "id": "glass_macuahuitl", "fg": 2067, "rotates": false }, + { "id": "glass_shard", "fg": 2068, "rotates": false }, + { "id": [ "reinforced_glass_sheet", "reinforced_glass_pane" ], "fg": 2069, "rotates": false }, + { "id": "glass_sheet", "fg": 2070, "rotates": false }, + { "id": "glass_tinted", "fg": 2071, "rotates": false }, + { "id": "glowplug", "fg": 2072, "rotates": false }, + { "id": "golf_club", "fg": 2073, "rotates": false }, + { "id": "grapnel", "fg": 2074, "rotates": false }, + { "id": "gungnir_replica", "fg": 2075, "rotates": false }, + { "id": "hammer_sledge", "fg": 2076, "rotates": false }, + { "id": "handflare_dead", "fg": 2077, "rotates": false }, + { "id": "hand_paddles", "fg": 2078, "rotates": false }, + { "id": "hockey_stick", "fg": 2079, "rotates": false }, + { "id": "ji", "fg": 2080, "rotates": false }, + { "id": "joint_lit", "fg": 2081, "rotates": false }, + { "id": "joint_roach", "fg": 2082, "rotates": false }, + { "id": "knife_butter", "fg": 2083, "rotates": false }, + { "id": "lajatang", "fg": 2084, "rotates": false }, + { "id": "lawnmower", "fg": 2085, "rotates": false }, + { "id": "light_bulb", "fg": 2086, "rotates": false }, + { "id": "log", "fg": 2087, "rotates": false }, + { + "id": [ "glaive", "halberd", "halberd_fake", "naginata", "makeshift_halberd" ], + "fg": 2088, "rotates": false }, + { "id": "mess_tin", "fg": 2089, "rotates": false }, + { "id": "television", "fg": 2090, "rotates": false }, + { "id": "microwave", "fg": 2091, "rotates": false }, + { "id": "mjolnir_replica", "fg": 2092, "rotates": false }, { - "id": [ - "mon_ant_larva", - "mon_bee_larvae", - "mon_maggot", - "mon_wasp_larvae" - ], - "fg": 2757, + "id": [ "mobile_memory_card_used", "mobile_memory_card_encrypted", "mobile_memory_card_science", "mobile_memory_card" ], + "fg": 2093, "rotates": false }, - { - "id": "mon_ant_acid_larva", - "fg": 2758, + { "id": "money_bundle", "fg": 2094, "rotates": false }, + { "id": [ "mjolnir", "morningstar" ], "fg": 2095, "rotates": false }, + { "id": [ "homewrecker", "nailbat" ], "fg": 2096, "rotates": false }, + { "id": "nuclear_waste", "fg": 2097, "rotates": false }, + { "id": "nuclear_fuel", "fg": 2098, "rotates": false }, + { "id": "pallet_lifter", "fg": 2099, "rotates": false }, + { "id": [ "can_sealer", "pastaextruder" ], "fg": 2100, "rotates": false }, + { "id": "peephole", "fg": 2101, "rotates": false }, + { "id": "petrified_eye", "fg": 2102, "rotates": false }, + { "id": [ "down_pillow", "pillow" ], "fg": 2103, "rotates": false }, + { "id": "bodypillow", "fg": 2104, "rotates": false }, + { "id": "pipe_solid", "fg": 2105, "rotates": false }, + { "id": "pipe_solid_spear", "fg": 2106, "rotates": false }, + { "id": [ "spear_forked", "pitchfork" ], "fg": 2107, "rotates": false }, + { "id": [ "clay_watercont", "survivor_mess_kit", "crucible_clay", "clay_pot" ], "fg": 2108, "rotates": false }, + { + "id": [ "charcoal_cooker", "rock_pot", "pot_makeshift", "pot_canning", "pressure_cooker", "f_standing_tank" ], + "fg": 2109, "rotates": false }, + { "id": [ "mess_kit", "mil_mess_kit" ], "fg": 2110, "rotates": false }, + { "id": "pot_makeshift_copper", "fg": 2111, "rotates": false }, + { "id": "pot_copper", "fg": 2112, "rotates": false }, + { "id": "pot", "fg": 2113, "rotates": false }, + { "id": [ "pot_xlhelmet", "pot_helmet" ], "fg": 2114, "rotates": false }, + { "id": [ "e_scrap", "power_supply" ], "fg": 2115, "rotates": false }, + { "id": "pump_complex", "fg": 2116, "rotates": false }, + { "id": "punch_dagger", "fg": 2117, "rotates": false }, + { "id": "razor_blade", "fg": 2118, "rotates": false }, { - "id": "mon_slug_giant", - "fg": 2759, + "id": [ "survivormap", "militarymap", "restaurantmap", "touristmap", "trailmap", "roadmap" ], + "fg": 2119, "rotates": false }, + { "id": "rock_sock", "fg": 2120, "rotates": false }, + { "id": [ "rope_6", "rope_makeshift_30", "rope_makeshift_6", "rope_30" ], "fg": 2121, "rotates": false }, + { "id": "sharp_rock", "fg": 2122, "rotates": false }, + { "id": "sharp_toothbrush", "fg": 2123, "rotates": false }, + { "id": [ "lead_plate", "sheet_metal" ], "fg": 2124, "rotates": false }, + { "id": "sheet_metal_lit", "fg": 2125, "rotates": false }, + { "id": "small_lcd_screen", "fg": 2126, "rotates": false }, + { "id": "spear_survivor", "fg": 2127, "rotates": false }, + { "id": "spear_copper", "fg": 2128, "rotates": false }, + { "id": "spike", "fg": 2129, "rotates": false }, + { "id": "spiked_plate", "fg": 2130, "rotates": false }, + { "id": "splinter", "fg": 2131, "rotates": false }, + { "id": "spoon", "fg": 2132, "rotates": false }, + { "id": "spring", "fg": 2133, "rotates": false }, { - "id": "mon_sludge_crawler_queen", - "fg": 2760, - "rotates": false + "id": "vp_muffler", + "fg": 2134, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": "mon_sludge_crawler", - "fg": 2761, - "rotates": false + "id": "vp_seatbelt", + "fg": 2134, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2135 } ] + }, + { "id": "stick_long", "fg": 2136, "rotates": false }, + { "id": "stick", "fg": 2137, "rotates": false }, + { "id": "sword_nail", "fg": 2138, "rotates": false }, + { "id": "toaster", "fg": 2139, "rotates": false }, + { "id": "torch_done", "fg": 2140, "rotates": false }, + { "id": "tree_spile", "fg": 2141, "rotates": false }, + { "id": [ "teleumbrella", "umbrella" ], "fg": 2142, "rotates": false }, + { "id": "usb_drive", "fg": 2143, "rotates": false }, + { "id": "warhammer", "fg": 2144, "rotates": false }, + { "id": "water_faucet", "fg": 2145, "rotates": false }, + { "id": "withered", "fg": 2146, "rotates": false }, + { "id": [ "mon_generator", "generator_7500w" ], "fg": 2147, "rotates": false }, + { "id": "mirror", "fg": 2148, "rotates": false }, + { "id": "bundle_wool", "fg": 2149, "rotates": false }, + { "id": "bundle_leather", "fg": 2150, "rotates": false }, + { "id": "bundle_rag", "fg": 2151, "rotates": false }, + { "id": "scythe_war", "fg": 2152, "rotates": false }, + { "id": "fd_bees", "fg": 2153, "rotates": false }, + { + "id": "tr_portal", + "fg": 2154, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2155 }, + { "id": "corner", "fg": 2156 }, + { "id": "edge", "fg": 2157 }, + { "id": "end_piece", "fg": 2158 }, + { "id": "t_connection", "fg": 2159 }, + { "id": "unconnected", "fg": 2154 } + ] }, { - "id": "mon_dark_wyrm", - "fg": 2762, - "rotates": false + "id": "fd_web", + "fg": 2160, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2161 }, + { "id": "corner", "fg": 2162 }, + { "id": "edge", "fg": 2163 }, + { "id": "end_piece", "fg": 2164 }, + { "id": "t_connection", "fg": 2165 }, + { "id": "unconnected", "fg": 2160 } + ] }, { - "id": "mon_graboid", - "fg": 2763, - "rotates": false + "id": "fd_slime", + "fg": 2166, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2167 }, + { "id": "corner", "fg": 2168 }, + { "id": "edge", "fg": 2169 }, + { "id": "end_piece", "fg": 2170 }, + { "id": "t_connection", "fg": 2171 }, + { "id": "unconnected", "fg": 2166 } + ] }, { - "id": "mon_yugg", - "fg": 2764, - "rotates": false + "id": "fd_sludge", + "fg": 2172, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2173 }, + { "id": "corner", "fg": 2174 }, + { "id": "edge", "fg": 2175 }, + { "id": "end_piece", "fg": 2176 }, + { "id": "t_connection", "fg": 2177 }, + { "id": "unconnected", "fg": 2172 } + ] }, + { "id": "fd_acid_vent", "fg": 2178, "rotates": false }, { - "id": "mon_worm", - "fg": 2765, - "rotates": false + "id": "fd_acid", + "fg": 2179, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2180 }, + { "id": "corner", "fg": 2181 }, + { "id": "edge", "fg": 2182 }, + { "id": "end_piece", "fg": 2183 }, + { "id": "t_connection", "fg": 2184 }, + { "id": "unconnected", "fg": 2179 } + ] }, { - "id": "mon_halfworm", - "fg": 2766, - "rotates": false + "id": [ "fd_bile", "fd_gibs_veggy", "fd_sap" ], + "fg": 2185, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2186 }, + { "id": "corner", "fg": 2187 }, + { "id": "edge", "fg": 2188 }, + { "id": "end_piece", "fg": 2189 }, + { "id": "t_connection", "fg": 2190 }, + { "id": "unconnected", "fg": 2185 } + ] }, + { "id": "fd_shock_vent", "fg": 2191, "rotates": false }, { - "id": "mon_tardigrade", - "fg": 2767, - "rotates": false + "id": "fd_electricity", + "fg": 2192, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2193 }, + { "id": "corner", "fg": 2194 }, + { "id": "edge", "fg": 2195 }, + { "id": "end_piece", "fg": 2196 }, + { "id": "t_connection", "fg": 2197 }, + { "id": "unconnected", "fg": 2192 } + ] }, + { "id": "fd_fire_vent", "fg": 2198, "rotates": false }, + { "id": "animation_bullet_flame", "fg": 2199 }, { - "id": "mon_fardigrade", - "fg": 2768, - "rotates": false + "id": "fd_incendiary", + "fg": 2199, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2200 }, + { "id": "corner", "fg": 2201 }, + { "id": "edge", "fg": 2202 }, + { "id": "end_piece", "fg": 2203 }, + { "id": "t_connection", "fg": 2204 }, + { "id": "unconnected", "fg": 2199 } + ] }, { - "id": [ - "mon_biollante", - "mon_biollante_pk" - ], - "fg": 2769, - "rotates": false + "id": [ "fd_flame_burst", "fd_fire" ], + "fg": 2205, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2200 }, + { "id": "corner", "fg": 2201 }, + { "id": "edge", "fg": 2202 }, + { "id": "end_piece", "fg": 2203 }, + { "id": "t_connection", "fg": 2204 }, + { "id": "unconnected", "fg": 2205 } + ] }, { - "id": "mon_vinebeast_terminal", - "fg": 2770, - "rotates": false + "id": "fd_fungicidal_gas", + "fg": 2206, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2207 }, + { "id": "corner", "fg": 2208 }, + { "id": "edge", "fg": 2209 }, + { "id": "end_piece", "fg": 2210 }, + { "id": "t_connection", "fg": 2211 }, + { "id": "unconnected", "fg": 2206 } + ] }, + { "id": "fd_gas_vent", "fg": 2212, "rotates": false }, { - "id": [ - "mon_vinebeast", - "mon_vinebeast_pk" - ], - "fg": 2771, - "rotates": false + "id": [ "fd_toxic_gas", "fd_nuke_gas" ], + "fg": 2213, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2214 }, + { "id": "corner", "fg": 2215 }, + { "id": "edge", "fg": 2216 }, + { "id": "end_piece", "fg": 2217 }, + { "id": "t_connection", "fg": 2218 }, + { "id": "unconnected", "fg": 2213 } + ] }, { - "id": [ - "mon_creeper_vine_terminal", - "mon_creeper_vine_terminal_pk" - ], - "fg": 2772, + "id": "fd_fungal_haze", + "fg": 2219, "rotates": false, "multitile": true, "additional_tiles": [ - { - "id": "center", - "fg": 2773 - }, - { - "id": "corner", - "fg": 2774 - }, - { - "id": "edge", - "fg": 2775 - }, - { - "id": "end_piece", - "fg": 2776 - }, - { - "id": "t_connection", - "fg": 2777 - }, - { - "id": "unconnected", - "fg": 2772 - } + { "id": "center", "fg": 2220 }, + { "id": "corner", "fg": 2221 }, + { "id": "edge", "fg": 2222 }, + { "id": "end_piece", "fg": 2223 }, + { "id": "t_connection", "fg": 2224 }, + { "id": "unconnected", "fg": 2219 } ] }, { - "id": "mon_finebeast", - "fg": 2778, - "rotates": false + "id": [ "fd_fatigue", "fd_relax_gas" ], + "fg": 2225, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2226 }, + { "id": "corner", "fg": 2227 }, + { "id": "edge", "fg": 2228 }, + { "id": "end_piece", "fg": 2229 }, + { "id": "t_connection", "fg": 2230 }, + { "id": "unconnected", "fg": 2225 } + ] }, { - "id": [ - "mon_creeper_vine_pk", - "mon_creeper_vine" - ], - "fg": 2779, + "id": [ "fd_cigsmoke", "fd_weedsmoke", "fd_methsmoke", "fd_cracksmoke" ], + "fg": 2231, "rotates": false, "multitile": true, "additional_tiles": [ - { - "id": "center", - "fg": 2780 - }, - { - "id": "corner", - "fg": 2781 - }, - { - "id": "edge", - "fg": 2782 - }, - { - "id": "end_piece", - "fg": 2783 - }, - { - "id": "t_connection", - "fg": 2784 - }, - { - "id": "unconnected", - "fg": 2779 - } + { "id": "center", "fg": 2232 }, + { "id": "corner", "fg": 2233 }, + { "id": "edge", "fg": 2234 }, + { "id": "end_piece", "fg": 2235 }, + { "id": "t_connection", "fg": 2236 }, + { "id": "unconnected", "fg": 2231 } ] }, + { "id": "f_smoking_rack_active", "fg": 2237, "rotates": false }, { - "id": "mon_creeper_root", - "fg": 2785, - "rotates": false + "id": [ "fd_smoke", "fd_tear_gas" ], + "fg": 2237, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2238 }, + { "id": "corner", "fg": 2239 }, + { "id": "edge", "fg": 2240 }, + { "id": "end_piece", "fg": 2241 }, + { "id": "t_connection", "fg": 2242 }, + { "id": "unconnected", "fg": 2237 } + ] }, { - "id": "mon_creeper_hub", - "fg": 2786, - "rotates": false + "id": "vp_xlframe_cover", + "fg": 2243, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 725 } ] }, { - "id": "mon_finecraft", - "fg": 2787, - "rotates": false + "id": "vp_xlframe_vertical", + "fg": 275, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 725 } ] }, { - "id": "mon_dionaea", - "fg": 2788, - "rotates": false + "id": "vp_xlframe_vertical_2", + "fg": 2244, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 725 } ] }, { - "id": "mon_fionaea", - "fg": 2789, - "rotates": false + "id": [ "vp_folding_frame", "vp_xlframe_horizontal" ], + "fg": 2245, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 725 } ] }, { - "id": "mon_dionaea_sprout", - "fg": 2790, - "rotates": false + "id": "vp_xlframe_horizontal_2", + "fg": 2246, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 725 } ] }, { - "id": "mon_triffid_heart", - "fg": 2791, - "rotates": false + "id": "vp_xlframe_cross", + "fg": 273, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 725 } ] }, { - "id": "mon_triffid_queen", - "fg": 2792, - "rotates": false + "id": "vp_xlframe_nw", + "fg": 274, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 725 } ] }, { - "id": [ - "mon_triffid_pk", - "mon_triffid" - ], - "fg": 2793, - "rotates": false + "id": "vp_xlframe_sw", + "fg": 2247, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 725 } ] }, { - "id": "mon_triffid_young", - "fg": 2794, - "rotates": false + "id": "vp_xlframe_se", + "fg": 2248, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 725 } ] }, { - "id": "mon_triffid_sprig", - "fg": 2795, - "rotates": false + "id": "vp_xlframe_ne", + "fg": 2249, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 725 } ] }, { - "id": "mon_fungal_fighter", - "fg": 2796, - "rotates": false + "id": [ "vp_halfboard_cover", "vp_frame_cover" ], + "fg": 2250, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, + { "id": "vp_frame_handle", "fg": 2250, "rotates": true }, { - "id": [ - "mon_fungaloid_dormant", - "mon_fungaloid_pk", - "mon_fungaloid" - ], - "fg": 2797, - "rotates": false + "id": "vp_frame_vertical", + "fg": 2251, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": "mon_fungaloid_young", - "fg": 2798, - "rotates": false + "id": "vp_frame_vertical_2", + "fg": 2252, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": "mon_fungal_blossom", - "fg": 2799, - "rotates": false + "id": "vp_frame_horizontal", + "fg": 2253, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": "mon_fungal_tendril", - "fg": 2800, - "rotates": false + "id": "vp_frame_horizontal_2", + "fg": 2254, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": "mon_fungal_wall", - "fg": 2801, - "rotates": false + "id": "vp_frame_cross", + "fg": 2255, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": "mon_fungal_hedgerow", - "fg": 2802, - "rotates": false + "id": "vp_frame_nw", + "fg": 2256, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": [ - "mon_fungus_boil", - "mon_spore" - ], - "fg": 2803, - "rotates": false + "id": "vp_frame_sw", + "fg": 2257, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": "mon_zombie_thorny", - "fg": 2804 + "id": "vp_frame_se", + "fg": 2258, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": "mon_zombie_fiend_shocker", - "fg": 2805, - "rotates": false + "id": "vp_frame_ne", + "fg": 2259, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": [ - "mon_zombie_fiend_pk", - "mon_zombie_fiend" - ], - "fg": 2806, - "rotates": false + "id": [ "vp_frame_wood_cover", "vp_frame_wood_handle", "vp_frame_wood_light_cover", "vp_frame_wood_light_handle" ], + "fg": 2260, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 225 } ] }, { - "id": "mon_zombie_nullfield", - "fg": 2807, - "rotates": false + "id": "vp_folding_wooden_frame", + "fg": 2261, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 225 } ] }, { - "id": "mon_zombie_electric_fungal", - "fg": 2808, - "rotates": false + "id": [ "vp_frame_wood_light_vertical", "vp_frame_wood_vertical" ], + "fg": 2262, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 225 } ] }, { - "id": [ - "mon_zombie_electric_pk", - "mon_zombie_electric" - ], - "fg": 2809, - "rotates": false + "id": [ "vp_frame_wood_light_vertical_2", "vp_frame_wood_vertical_2" ], + "fg": 2263, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 225 } ] }, { - "id": "mon_zombie_scorched_shocker", - "fg": 2810, - "rotates": false + "id": [ "vp_frame_wood_light_horizontal", "vp_frame_wood_horizontal" ], + "fg": 2264, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 225 } ] }, { - "id": "mon_zombie_lord", - "fg": 2811, - "rotates": false + "id": [ "vp_frame_wood_light_horizontal_2", "vp_frame_wood_horizontal_2" ], + "fg": 2265, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 225 } ] }, { - "id": [ - "mon_zombie_master_pk", - "mon_zombie_master" - ], - "fg": 2812, - "rotates": false + "id": [ "vp_frame_wood_light_cross", "vp_frame_wood_cross" ], + "fg": 2266, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 225 } ] }, { - "id": "mon_zombie_scorched_master", - "fg": 2813, - "rotates": false + "id": [ "vp_frame_wood_light_nw", "vp_frame_wood_nw" ], + "fg": 2267, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 225 } ] }, { - "id": [ - "mon_zombie_necro_pk", - "mon_zombie_necro" - ], - "fg": 2814, - "rotates": false + "id": [ "vp_frame_wood_light_sw", "vp_frame_wood_sw" ], + "fg": 2268, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 225 } ] }, { - "id": "mon_zombie_scorched_necro", - "fg": 2815, - "rotates": false + "id": [ "vp_frame_wood_light_se", "vp_frame_wood_se" ], + "fg": 2269, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 225 } ] }, { - "id": "mon_zombie_predator", - "fg": 2816, - "rotates": false + "id": [ "vp_frame_wood_light_ne", "vp_frame_wood_ne" ], + "fg": 2270, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 225 } ] }, { - "id": [ - "mon_zombie_runner_pk", - "mon_zombie_runner" - ], - "fg": 2817, - "rotates": false + "id": "vp_hdframe_cover", + "fg": 2271, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2272 } ] }, { - "id": "mon_zombie_soldier_blackops_2", - "fg": 2818, - "rotates": false + "id": "vp_hdframe_vertical", + "fg": 2273, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2272 } ] }, { - "id": "mon_zombie_soldier_blackops_1", - "fg": 2819, - "rotates": false + "id": "vp_hdframe_vertical_2", + "fg": 2274, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2272 } ] }, { - "id": "mon_zombie_military_pilot", - "fg": 2820, - "rotates": false + "id": "vp_hdframe_horizontal", + "fg": 2275, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2272 } ] }, { - "id": "mon_zombie_flamer", - "fg": 2821, - "rotates": false + "id": "vp_hdframe_horizontal_2", + "fg": 2276, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2272 } ] }, { - "id": "mon_zombie_soldier_acid_1", - "fg": 2822, - "rotates": false + "id": "vp_hdframe_cross", + "fg": 2277, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2272 } ] }, { - "id": "mon_zombie_armored", - "fg": 2823, - "rotates": false + "id": "vp_hdframe_nw", + "fg": 2278, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2272 } ] }, { - "id": "mon_zombie_grenadier", - "fg": 2824, - "rotates": false + "id": "vp_hdframe_sw", + "fg": 2279, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2272 } ] }, { - "id": "mon_zombie_grenadier_elite", - "fg": 2825, - "rotates": false + "id": "vp_hdframe_se", + "fg": 2280, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2272 } ] }, { - "id": "mon_zombie_soldier", - "fg": 2826, - "rotates": false + "id": "vp_hdframe_ne", + "fg": 2281, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2272 } ] }, { - "id": "mon_zombie_soldier_acid_2", - "fg": 2827, - "rotates": false + "id": [ "vp_door_opaque", "vp_door_internal", "vp_door" ], + "fg": 2282, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2283 }, { "id": "open", "fg": 2284 } ] }, + { "id": "vp_fdoor", "fg": 2282, "rotates": false }, { - "id": "mon_zombie_bio_op", - "fg": 2828, - "rotates": false + "id": [ "vp_door_trunk", "vp_hatch", "vp_door_shutter", "vp_door_sliding" ], + "fg": 2285, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2286 }, { "id": "open", "fg": 2287 } ] }, { - "id": "mon_zombie_fireman", - "fg": 2829, - "rotates": false + "id": "vp_hatch_opaque", + "fg": 2285, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "open", "fg": 2287 } ] }, { - "id": "mon_zombie_hazmat", - "fg": 2830, - "rotates": false + "id": [ "vp_door_wood", "vp_door_wood_opaque" ], + "fg": 2288, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2289 }, { "id": "open", "fg": 2290 } ] }, { - "id": "mon_zombie_survivor", - "fg": 2831, - "rotates": false + "id": [ "vp_hdhatch", "vp_hdhatch_opaque" ], + "fg": 2291, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2292 }, { "id": "open", "fg": 2293 } ] }, + { "id": "boat_board", "fg": 2294, "rotates": false }, { - "id": "mon_zombie_cop", - "fg": 2832, - "rotates": false + "id": "vp_boat_board", + "fg": 2295, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "broken", "fg": 225 }, + { "id": "center", "fg": 2296 }, + { "id": "corner", "fg": 2297 }, + { "id": "edge", "fg": 2298 }, + { "id": "end_piece", "fg": 2298 }, + { "id": "t_connection", "fg": 2299 }, + { "id": "unconnected", "fg": 2295 } + ] }, + { "id": "hd_steel_drum", "fg": 2300, "rotates": true }, { - "id": "mon_zombie_scientist", - "fg": 2833, - "rotates": false + "id": "vp_roller_drum", + "fg": 2301, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, + { "id": [ "wheel_metal", "wheel" ], "fg": 2302, "rotates": false }, + { "id": "wheel_wood", "fg": 2303, "rotates": false }, { - "id": "mon_zombie_technician", - "fg": 2834, - "rotates": false + "id": [ "vp_wheel_bicycle_steerable", "vp_wheel_bicycle" ], + "fg": 2304, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2305 } ] }, { - "id": "mon_zombie_labsecurity", - "fg": 2835, - "rotates": false + "id": "vp_wheel_wheelchair", + "fg": 2306, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2305 } ] }, { - "id": "mon_gas_zombie", - "fg": 2837, - "rotates": false + "id": "vp_wheel_caster", + "fg": 2307, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2305 } ] }, { - "id": "mon_zombie_corrosive", - "fg": 2838, - "rotates": false + "id": "vp_wheel_wood", + "fg": 2303, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 225 } ] }, { - "id": "mon_homunculus", - "fg": 2836, - "rotates": false + "id": [ "vp_wheel", "vp_wheel_steerable", "vp_metal_wheel" ], + "fg": 2302, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2305 } ] }, + { "id": [ "wheel_wide", "wheel_wide_or" ], "fg": 2308, "rotates": false }, { - "id": "mon_zombie_kevlar_1", - "fg": 2839, - "rotates": false + "id": [ "vp_wheel_armor", "vp_wheel_armor_steerable" ], + "fg": 2309, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2305 } ] }, { - "id": "mon_zombie_brute_ninja", - "fg": 2840, - "rotates": false + "id": [ "vp_wheel_wide", "vp_wheel_wide_steerable" ], + "fg": 2308, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2305 } ] }, + { "id": "wheel_armor", "fg": 2309, "rotates": false }, { - "id": "mon_zombie_brute_shocker", - "fg": 2841, + "id": [ "wheel_bicycle_or", "wheel_motorbike", "wheel_motorbike_or", "wheel_slick", "wheel_bicycle" ], + "fg": 2310, "rotates": false }, { - "id": "mon_zombie_brute", - "fg": 2842, - "rotates": false + "id": [ "vp_wheel_unicycle", "vp_wheel_motorbike", "vp_wheel_motorbike_steerable" ], + "fg": 2310, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2305 } ] }, + { "id": [ "wheel_barrow", "wheel_small" ], "fg": 2311, "rotates": true }, { - "id": "mon_zombie_brute_grappler", - "fg": 2843, - "rotates": false + "id": [ "vp_wheel_small", "vp_wheel_small_steerable", "vp_wheel_barrow" ], + "fg": 2311, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2305 } ] }, { - "id": "mon_zombie_grappler", - "fg": 2844, - "rotates": false + "id": "vp_wheel_wood_b", + "fg": 2312, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 225 } ] }, + { "id": "wheel_wood_b", "fg": 2312, "rotates": false }, + { "id": "wheel_caster", "fg": 2313, "rotates": false }, + { "id": "wheel_wheelchair", "fg": 2314, "rotates": false }, { - "id": "mon_zombie_grabber", - "fg": 2845, - "rotates": false + "id": "vp_hand_rims", + "fg": 2315, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1183 } ] }, + { "id": "hand_rims", "fg": 2315, "rotates": false }, { - "id": "mon_zombie_mancroc", - "fg": 2846, - "rotates": false + "id": "vp_hand_paddles", + "fg": 2316, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 225 } ] }, + { "id": "foot_crank", "fg": 2317, "rotates": false }, { - "id": "mon_zombie_biter", - "fg": 2847, - "rotates": false + "id": [ "vp_engine_motor", "vp_foot_pedals" ], + "fg": 2250, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1183 } ] }, { - "id": "mon_zombie_anklebiter", - "fg": 2848, + "id": [ + "v12_diesel", + "1cyl_combustion", + "1cyl_combustion_small", + "v2_combustion", + "i4_combustion", + "v6_combustion", + "v8_combustion", + "v12_combustion", + "i6_diesel", + "v6_diesel", + "v8_diesel" + ], + "fg": 2318, "rotates": false }, { "id": [ - "mon_beekeeper", - "mon_beekeeper_pk" + "vp_engine_1cyl", + "vp_engine_1cyl_small", + "vp_engine_vtwin", + "vp_engine_inline4", + "vp_engine_v6", + "vp_engine_v8", + "vp_engine_v12", + "vp_diesel_engine_v12", + "vp_engine_electric", + "vp_engine_electric_large", + "vp_engine_electric_small", + "vp_engine_electric_enhanced", + "vp_diesel_engine_i6", + "vp_diesel_engine_v6", + "vp_diesel_engine_v8" ], - "fg": 2849, - "rotates": false + "fg": 2318, + "rotates": true }, { - "id": "mon_zombie_radbag", - "fg": 2850, - "rotates": false + "id": "vp_door_motor", + "fg": 2319, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, + { "id": "tr_engine", "fg": 2320, "rotates": false }, { "id": [ - "mon_boomer_huge_pk", - "mon_boomer_huge" + "motor_large", + "motor_small", + "motor_enhanced", + "alternator_bicycle", + "alternator_motorbike", + "alternator_car", + "alternator_truck", + "motor" ], - "fg": 2853, - "rotates": false - }, - { - "id": "mon_boomer", - "fg": 2854, + "fg": 2321, "rotates": false }, { - "id": "mon_boomer_fungus", - "fg": 2855, - "rotates": false + "id": [ "vp_alternator_bicycle", "vp_alternator_motorbike", "vp_alternator_car", "vp_alternator_truck" ], + "fg": 2321, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1183 } ] }, { - "id": [ - "mon_zombie_gasbag", - "mon_zombie_gasbag_pk" - ], - "fg": 2856, - "rotates": false + "id": [ "vp_veh_table", "vp_veh_table_wood" ], + "fg": 2322, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 225 } ] }, + { "id": "v_table", "fg": 2322, "rotates": false }, + { "id": "inflatable_airbag", "fg": 2323, "rotates": false }, + { "id": "inflatable_section", "fg": 2324, "rotates": false }, + { "id": "vehicle_dashboard", "fg": 2325, "rotates": false }, + { "id": "basket", "fg": 2326, "rotates": false }, { - "id": [ - "mon_zombie_fat", - "mon_zombie_fat_2", - "mon_zombie_fat_3" - ], - "fg": 2857, - "rotates": false + "id": [ "vp_box", "vp_folding wood box", "vp_wood box", "vp_basketsm", "vp_basketsm_external" ], + "fg": 2327, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 225 } ] }, { - "id": [ - "mon_zombie_smoker_pk", - "mon_zombie_smoker" - ], - "fg": 2851, - "rotates": false + "id": [ "vp_basketlg", "vp_basketlg_folding", "vp_basketlg_external" ], + "fg": 2326, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, + { "id": "bike_basket", "fg": 2327, "rotates": false }, { - "id": "mon_zombie_spitter", - "fg": 2852, - "rotates": false + "id": [ "vp_cargo_space", "vp_cargo_space_external" ], + "fg": 2328, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": "mon_skeleton_brute", - "fg": 2858, - "rotates": false + "id": "vp_trunk", + "fg": 2329, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 225 } ] }, + { "id": "cargo_rack", "fg": 2328, "rotates": false }, + { "id": "drive_by_wire_controls", "fg": 2330, "rotates": false }, + { "id": "robot_controls", "fg": 2331, "rotates": false }, { - "id": "mon_skeleton", - "fg": 2859, - "rotates": false + "id": "vp_robot_controls", + "fg": 2331, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": "mon_skeleton_scorched", - "fg": 2860, - "rotates": false + "id": "vp_controls", + "fg": 2332, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": "mon_zombie_waif", - "fg": 2861, - "rotates": false + "id": "vp_drive_by_wire_controls", + "fg": 2330, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1183 } ] }, + { "id": "vehicle_controls", "fg": 2332, "rotates": false }, + { "id": [ "vp_fridge_cargo", "fridge_cargo" ], "fg": 2333, "rotates": false }, { - "id": "mon_zombie_creepy", - "fg": 2862, - "rotates": false + "id": "vp_veh_forge", + "fg": 2334, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 812 } ] }, { - "id": "mon_zombie_sproglodyte", - "fg": 2863, - "rotates": false + "id": "vp_water_faucet", + "fg": 2335, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 812 } ] }, + { "id": "forgerig", "fg": 2334, "rotates": false }, + { "id": "muffler", "fg": 2336, "rotates": false }, { - "id": "mon_zombie_snotgobbler", - "fg": 2864, - "rotates": false + "id": "vp_chemlab", + "fg": 2337, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 812 } ] }, + { "id": "chemlab", "fg": 2337, "rotates": false }, { - "id": "mon_zombie_screecher", - "fg": 2865, - "rotates": false + "id": [ "car_headlight", "wide_headlight_reinforced", "car_wide_headlight", "headlight_reinforced" ], + "fg": 2338, + "rotates": true }, + { "id": "floodlight", "fg": 2338, "rotates": false }, { - "id": "mon_zombie_shrieker", - "fg": 2866, - "rotates": false + "id": "vp_headlight_reinforced", + "fg": 2339, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": "mon_zombie_shriekling", - "fg": 2867, - "rotates": false + "id": [ "vp_horn_car", "vp_horn_big", "vp_beeper", "vp_chimes" ], + "fg": 2340, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": [ - "mon_zombie_child_scorched_2", - "mon_zombie_child_scorched" - ], - "fg": 2868, - "rotates": false + "id": [ "vp_head_light", "vp_headlight", "vp_floodlight" ], + "fg": 2338, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": [ - "mon_zombie_child_reaver", - "mon_kreck" - ], - "fg": 2869, - "rotates": false + "id": "vp_kitchen_unit", + "fg": 2341, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 812 } ] }, + { "id": "kitchen_unit", "fg": 2341, "rotates": false }, + { "id": "light_emergency_red", "fg": 2342, "rotates": false }, + { "id": "omnicamera", "fg": 2343, "rotates": false }, { - "id": [ - "mon_zombie_child_2", - "mon_zombie_child_3", - "mon_zombie_child_pk", - "mon_zombie_child" - ], - "fg": 2870, - "rotates": false + "id": "vp_light_blue", + "fg": 2344, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": "mon_zombie_child_fungus", - "fg": 2871, - "rotates": false + "id": "vp_light_red", + "fg": 2342, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1183 } ] }, { - "id": [ - "mon_dog_zombie_cop", - "mon_dog_zombie_cop_pk" - ], - "fg": 2872, - "rotates": false + "id": "vp_omnicam", + "fg": 2343, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1183 } ] }, + { "id": "light_emergency_blue", "fg": 2344, "rotates": false }, + { "id": "minifreezer", "fg": 2345, "rotates": false }, { - "id": [ - "mon_dog_zombie_rot", - "mon_dog_zombie_rot_pain", - "mon_dog_zombie_rot_worms" - ], - "fg": 2873, - "rotates": false + "id": "vp_minifridge", + "fg": 2346, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 812 } ] }, { - "id": [ - "mon_dog_skeleton", - "mon_dog_skeleton_pk" - ], - "fg": 2874, - "rotates": false + "id": "vp_minifreezer", + "fg": 2345, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 812 } ] }, + { "id": "minifridge", "fg": 2346, "rotates": false }, { - "id": [ - "mon_zombie_dog", - "mon_zombie_dog_pk", - "mon_zombie_fast" - ], - "fg": 2875, - "rotates": false + "id": "vp_recharge_station", + "fg": 2347, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 812 } ] }, + { "id": "recharge_station", "fg": 2347, "rotates": false }, { - "id": "mon_zombie_hunter", - "fg": 2876, - "rotates": false + "id": "vp_tracker", + "fg": 2348, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": [ - "mon_zombie_crawler_pk", - "mon_zombie_crawler_pk_weak", - "mon_zombie_crawler" - ], - "fg": 2877, - "rotates": false + "id": "vp_vehicle_alarm", + "fg": 2348, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1183 } ] }, + { "id": "veh_tracker", "fg": 2348, "rotates": false }, + { "id": "craftrig", "fg": 2349, "rotates": true }, { - "id": "mon_zombie_crawler_scorched", - "fg": 2878, - "rotates": false + "id": "vp_welding_rig", + "fg": 2350, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 812 } ] }, { - "id": "mon_zombie_cripple", - "fg": 2879, - "rotates": false + "id": "vp_craft_rig", + "fg": 2349, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 812 } ] }, + { "id": "weldrig", "fg": 2350, "rotates": false }, { - "id": [ - "mon_zombie_blind_pk", - "mon_zombie_blind" - ], - "fg": 2880, - "rotates": false + "id": "vp_saddle", + "fg": 2351, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, + { "id": "saddle", "fg": 2351, "rotates": false }, { - "id": "mon_zombie_skull", - "fg": 2881, - "rotates": false + "id": "vp_cam_control", + "fg": 2352, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1183 } ] }, + { "id": "camera_control", "fg": 2352, "rotates": false }, + { "id": "w_table", "fg": 2353, "rotates": false }, { - "id": "mon_gracke", - "fg": 2882, - "rotates": false + "id": [ "vp_inboard_mirror", "vp_wing_mirror" ], + "fg": 2354, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": [ - "mon_zombie_hollow", - "mon_zombie_hollow_pk" - ], - "fg": 2883, - "rotates": false + "id": "vp_horn_bicycle", + "fg": 2355, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": "mon_zombie_ears", - "fg": 2884, - "rotates": false + "id": "vp_inflatable_airbag", + "fg": 2356, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "broken", "fg": 2272 }, + { "id": "center", "fg": 2357 }, + { "id": "corner", "fg": 2358 }, + { "id": "edge", "fg": 2359 }, + { "id": "end_piece", "fg": 2359 }, + { "id": "t_connection", "fg": 2360 }, + { "id": "unconnected", "fg": 2356 } + ] }, { - "id": "mon_zombie_brainless", - "fg": 2885, - "rotates": false + "id": "vp_inflatable_section", + "fg": 2361, + "rotates": true, + "multitile": true, + "additional_tiles": [ + { "id": "broken", "fg": 2272 }, + { "id": "center", "fg": 2362 }, + { "id": "corner", "fg": 2363 }, + { "id": "edge", "fg": 2364 }, + { "id": "end_piece", "fg": 2364 }, + { "id": "t_connection", "fg": 2365 }, + { "id": "unconnected", "fg": 2361 } + ] }, { "id": [ - "mon_zombie_rot_flu", - "mon_zombie_rot_pain", - "mon_zombie_rot_worms", - "mon_zombie_rot_pk", - "mon_zombie_rot_pk_flu", - "mon_zombie_rot_pk_pain", - "mon_zombie_rot_pk_worms", - "mon_zombie_rot" + "vp_fxlhalfboard_vertical", + "vp_board_vertical", + "vp_clothboard_vertical", + "vp_cloth_halfboard_vertical", + "vp_xlhalfboard_vertical", + "vp_halfboard_vertical" ], - "fg": 2886, - "rotates": false - }, - { - "id": "mon_zombie_shady_ghost", - "fg": 2887, - "rotates": false + "fg": 2366, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { "id": [ - "mon_zombie_shady_pk", - "mon_zombie_shady" + "vp_fxlhalfboard_vertical_2", + "vp_xlhalfboard_vertical_2", + "vp_halfboard_vertical_2", + "vp_cloth_halfboard_vertical_2" ], - "fg": 2888, - "rotates": false - }, - { - "id": "mon_zombie_fungus", - "fg": 2889, - "rotates": false + "fg": 2367, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { "id": [ - "mon_zombie_acidic", - "mon_zombie_acidic_pk" + "vp_fxlhalfboard_horizontal", + "vp_clothboard_horizontal", + "vp_cloth_halfboard_horizontal", + "vp_xlhalfboard_horizontal", + "vp_halfboard_horizontal", + "vp_board_horizontal" ], - "fg": 2890, - "rotates": false + "fg": 2368, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { "id": [ - "mon_zombie_tough", - "mon_zombie_tough_2", - "mon_zombie_tough_3" + "vp_fxlhalfboard_horizontal_2", + "vp_xlhalfboard_horizontal_2", + "vp_halfboard_horizontal_2", + "vp_cloth_halfboard_horizontal_2" ], - "fg": 2891, - "rotates": false + "fg": 2369, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": "mon_zombie_scales", - "fg": 2892, - "rotates": false + "id": "vp_halfboard_cross", + "fg": 2370, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { "id": [ - "mon_zombie_swimmer", - "mon_zombie_swimmer_pk" + "vp_fxlhalfboard_nw", + "vp_clothboard_nw", + "vp_cloth_halfboard_nw", + "vp_xlhalfboard_nw", + "vp_halfboard_nw", + "vp_board_nw" ], - "fg": 2893, - "rotates": false - }, - { - "id": "mon_zombie_dancer", - "fg": 2894, - "rotates": false + "fg": 2371, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { "id": [ - "mon_zombie_scorched_pk", - "mon_zombie_scorched" + "vp_fxlhalfboard_sw", + "vp_clothboard_sw", + "vp_cloth_halfboard_sw", + "vp_xlhalfboard_sw", + "vp_halfboard_sw", + "vp_board_sw" ], - "fg": 2895, - "rotates": false + "fg": 2372, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { "id": [ - "mon_zombie_pk", - "mon_zombie_2", - "mon_zombie_3", - "mon_zombie" + "vp_fxlhalfboard_se", + "vp_clothboard_se", + "vp_cloth_halfboard_se", + "vp_xlhalfboard_se", + "vp_halfboard_se", + "vp_board_se" ], - "fg": 2896, - "rotates": false - }, - { - "id": "mon_zanimal_scorched", - "fg": 2897, - "rotates": false - }, - { - "id": "mon_zanimal_skeleton", - "fg": 2898, - "rotates": false - }, - { - "id": "mon_zanimal_skeleton_dead", - "fg": 2899, - "rotates": false + "fg": 2373, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": "mon_blob_brain", - "fg": 2900, - "rotates": false + "id": [ + "vp_fxlhalfboard_ne", + "vp_clothboard_ne", + "vp_cloth_halfboard_ne", + "vp_xlhalfboard_ne", + "vp_halfboard_ne", + "vp_board_ne" + ], + "fg": 2374, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": "mon_breather_hub", - "fg": 2901, - "rotates": false + "id": [ "vp_hdboard_vertical", "vp_hdhalfboard_vertical" ], + "fg": 2375, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2272 } ] }, { - "id": [ - "mon_gelatin", - "mon_blob_large" - ], - "fg": 2902, - "rotates": false + "id": "vp_hdhalfboard_vertical_2", + "fg": 2376, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2272 } ] }, { - "id": "mon_player_blob", - "fg": 2903, - "rotates": false + "id": [ "vp_hdboard_horizontal", "vp_hdhalfboard_horizontal" ], + "fg": 2377, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2272 } ] }, { - "id": "mon_blob", - "fg": 2904, - "rotates": false + "id": "vp_hdhalfboard_horizontal_2", + "fg": 2378, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2272 } ] }, { - "id": "mon_blob_small", - "fg": 2905, - "rotates": false + "id": [ "vp_hdboard_nw", "vp_hdhalfboard_nw" ], + "fg": 2379, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2272 } ] }, { - "id": "mon_breather", - "fg": 2906, - "rotates": false + "id": [ "vp_hdboard_sw", "vp_hdhalfboard_sw" ], + "fg": 2380, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2272 } ] }, { - "id": "player_female", - "fg": 2907, - "rotates": false + "id": [ "vp_hdboard_se", "vp_hdhalfboard_se" ], + "fg": 2381, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2272 } ] }, { - "id": "player_male", - "fg": 2908, - "rotates": false + "id": [ "vp_hdboard_ne", "vp_hdhalfboard_ne" ], + "fg": 2382, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2272 } ] }, { - "id": "npc_female", - "fg": 2909, - "rotates": false + "id": [ "vp_woodboard_vertical", "vp_woodhalfboard_vertical" ], + "fg": 2383, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 225 } ] }, { - "id": "npc_male", - "fg": 2910, - "rotates": false + "id": "vp_woodhalfboard_vertical_2", + "fg": 2384, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 225 } ] }, { - "id": "overlay_mutation_bio_armor_legs", - "fg": 2911 + "id": [ "vp_woodboard_horizontal", "vp_woodhalfboard_horizontal" ], + "fg": 2385, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 225 } ] }, { - "id": "overlay_male_mutation_bio_armor_legs", - "fg": 2912 + "id": "vp_woodhalfboard_horizontal_2", + "fg": 2386, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 225 } ] }, { - "id": "overlay_mutation_bio_armor_torso", - "fg": 2913 + "id": [ "vp_woodboard_nw", "vp_woodhalfboard_nw" ], + "fg": 2387, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 225 } ] }, { - "id": "overlay_male_mutation_bio_armor_torso", - "fg": 2914 + "id": [ "vp_woodboard_sw", "vp_woodhalfboard_sw" ], + "fg": 2388, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 225 } ] }, { - "id": "overlay_mutation_bio_armor_arms", - "fg": 2915 + "id": [ "vp_woodboard_se", "vp_woodhalfboard_se" ], + "fg": 2389, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 225 } ] }, { - "id": "overlay_male_mutation_bio_armor_arms", - "fg": 2916 + "id": [ "vp_woodboard_ne", "vp_woodhalfboard_ne" ], + "fg": 2390, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 225 } ] }, { - "id": "overlay_mutation_bio_armor_head", - "fg": 2917 + "id": "vp_stowboard_vertical", + "fg": 2391, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": "overlay_male_mutation_bio_armor_head", - "fg": 2918 + "id": "vp_stowboard_horizontal", + "fg": 2392, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": "overlay_mutation_bio_blaster", - "fg": 2919 + "id": "vp_stowboard_nw", + "fg": 2393, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": "overlay_male_mutation_bio_blaster", - "fg": 2920 + "id": "vp_stowboard_sw", + "fg": 2394, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": "overlay_mutation_bio_deformity", - "fg": 2921 + "id": "vp_stowboard_se", + "fg": 2395, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": "overlay_male_mutation_bio_deformity", - "fg": 2922 + "id": "vp_stowboard_ne", + "fg": 2396, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": [ - "overlay_mutation_active_bio_scent_vision", - "overlay_mutation_active_bio_blindfold" - ], - "fg": 2923 + "id": "vp_hdstowboard_vertical", + "fg": 2397, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2272 } ] }, { - "id": [ - "overlay_male_mutation_active_bio_scent_vision", - "overlay_male_mutation_active_bio_blindfold" - ], - "fg": 2924 + "id": "vp_hdstowboard_horizontal", + "fg": 2398, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2272 } ] }, { - "id": "overlay_mutation_active_bio_night_vision", - "fg": 2925 + "id": "vp_hdstowboard_nw", + "fg": 2399, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2272 } ] }, { - "id": "overlay_male_mutation_active_bio_night_vision", - "fg": 2926 + "id": "vp_hdstowboard_sw", + "fg": 2400, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2272 } ] }, { - "id": "overlay_mutation_active_bio_infrared", - "fg": 2927 + "id": "vp_hdstowboard_se", + "fg": 2401, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2272 } ] }, { - "id": "overlay_male_mutation_active_bio_infrared", - "fg": 2928 + "id": "vp_hdstowboard_ne", + "fg": 2402, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2272 } ] }, { - "id": "overlay_mutation_THRESH_MARLOSS", - "fg": 2929 + "id": "vp_aisle_vertical", + "fg": 2403, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": "overlay_male_mutation_THRESH_MARLOSS", - "fg": 2930 + "id": "vp_aisle_horizontal", + "fg": 2404, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": "overlay_mutation_THRESH_ALPHA", - "fg": 2931 + "id": "vp_wooden_aisle_vertical", + "fg": 2405, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 225 } ] }, { - "id": "overlay_male_mutation_THRESH_ALPHA", - "fg": 2932 + "id": "vp_wooden_aisle_horizontal", + "fg": 2406, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 225 } ] }, { - "id": "overlay_mutation_THRESH_ELFA", - "fg": 2933 + "id": [ "vp_aisle_lights", "vp_lit_aisle_vertical" ], + "fg": 2407, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": "overlay_male_mutation_THRESH_ELFA", - "fg": 2934 + "id": "vp_lit_aisle_horizontal", + "fg": 2408, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": "overlay_mutation_THRESH_CHIMERA", - "fg": 2935 + "id": "vp_trunk_floor", + "fg": 2409, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": "overlay_mutation_THRESH_BEAST", - "fg": 2936 + "id": [ "vp_roof_cloth", "vp_roof_wood", "vp_roof" ], + "fg": 2410, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": "overlay_male_mutation_THRESH_BEAST", - "fg": 2937 + "id": "vp_hdroof", + "fg": 2411, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": "overlay_mutation_THRESH_FELINE", - "fg": 2938 + "id": [ "vp_jumper_cable_heavy", "vp_jumper_cable" ], + "fg": 2412, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": "overlay_mutation_THRESH_LUPINE", - "fg": 2939 + "id": [ "vp_mounted_m1918", "vp_flamethrower" ], + "fg": 2413, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": "overlay_mutation_THRESH_RAT", - "fg": 2940 + "id": [ "vp_mounted_rm298", "vp_mounted_rm614" ], + "fg": 2414, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, + { "id": [ "vp_tow_launcher", "vp_tow_turret" ], "fg": 2413, "rotates": true }, { - "id": "overlay_mutation_THRESH_MOUSE", - "fg": 2941 + "id": [ "vp_fusion_gun", "vp_laser_rifle" ], + "fg": 2415, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2416 } ] }, { - "id": "overlay_mutation_THRESH_TROGLOBITE", - "fg": 2942 + "id": [ "vp_mounted_browning", "vp_mounted_mk19", "vp_mounted_abzats" ], + "fg": 2417, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2272 } ] }, { - "id": "overlay_male_mutation_THRESH_TROGLOBITE", - "fg": 2943 + "id": [ "vp_m249", "vp_mounted_m240", "vp_mounted_m60", "vp_mounted_m134" ], + "fg": 2418, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1661 } ] }, { - "id": "overlay_mutation_THRESH_BIRD", - "fg": 2944 + "id": [ "vp_plasmagun", "vp_plasma_gun" ], + "fg": 2419, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1661 } ] }, { - "id": "overlay_mutation_THRESH_RAPTOR", - "fg": 2945 + "id": [ "vp_mounted_howitzer", "vp_mounted_tank_auto", "vp_mounted_tank_manual", "vp_mounted_tank_rws", "vp_m240", "vp_m60" ], + "fg": 2417, + "rotates": true }, + { "id": "vp_mounted_30mm_autocannon", "fg": 2414, "rotates": true }, { - "id": "overlay_mutation_THRESH_FISH", - "fg": 2946 + "id": [ "vp_watercannon", "vp_shockcannon_mounted" ], + "fg": 2419, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1531 } ] }, + { "id": "vp_bfg_mounted", "fg": 2420, "rotates": true }, { - "id": "overlay_mutation_THRESH_CEPHALOPOD", - "fg": 2947 + "id": "vp_blade_horizontal", + "fg": 2421, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 725 } ] }, + { "id": "vp_cargo_lock", "fg": 2422, "rotates": false }, + { "id": "vp_crane_tiny", "fg": 2423, "rotates": true }, { - "id": "overlay_male_mutation_THRESH_CEPHALOPOD", - "fg": 2948 + "id": "vp_storage_battery_mount", + "fg": 2424, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1183 } ] }, { - "id": "overlay_mutation_INT_UP_4", - "fg": 2949 + "id": "vp_generator_7500w", + "fg": 2425, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1183 } ] }, + { "id": "vp_external_tank_small", "fg": 2426, "rotates": true }, + { "id": "vp_forklift_fork", "fg": 2427, "rotates": true }, { - "id": "overlay_male_mutation_INT_UP_4", - "fg": 2950 + "id": "vp_stereo", + "fg": 2428, + "rotates": false, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 812 } ] }, { - "id": "overlay_mutation_THRESH_SPIDER", - "fg": 2951 + "id": [ "vp_reaper_advanced", "vp_reaper" ], + "fg": 2429, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1661 } ] }, + { "id": "vp_plating_hard", "fg": 2430, "rotates": true }, + { "id": "vp_plating_military", "fg": 2431, "rotates": true }, + { "id": [ "vp_plating_steel", "vp_plating_chitin" ], "fg": 2432, "rotates": true }, + { "id": "vp_plating_superalloy", "fg": 2433, "rotates": true }, + { "id": "vp_plating_wood", "fg": 2434, "rotates": true }, + { "id": "vp_plating_bone", "fg": 2435, "rotates": true }, + { "id": "vp_plating_spiked", "fg": 2436, "rotates": true }, { - "id": "overlay_male_mutation_THRESH_SPIDER", - "fg": 2952 + "id": "vp_reinforced_windshield", + "fg": 2437, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2438 } ] }, { - "id": "overlay_mutation_THRESH_INSECT", - "fg": 2953 + "id": "vp_seatbelt_heavyduty", + "fg": 2439, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2135 } ] }, { - "id": "overlay_mutation_THRESH_PLANT", - "fg": 2954 + "id": [ "vp_seed_drill_advanced", "vp_seed_drill" ], + "fg": 2440, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 1531 } ] }, { - "id": "overlay_male_mutation_THRESH_PLANT", - "fg": 2955 + "id": "vp_spike", + "fg": 2441, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 725 } ] }, { - "id": [ - "overlay_mutation_FLOWERS", - "overlay_mutation_ROSEBUDS" - ], - "fg": 2956 - }, + "id": "vp_windshield", + "fg": 2442, + "rotates": true, + "multitile": true, + "additional_tiles": [ { "id": "broken", "fg": 2438 } ] + }, + { "id": "mon_flashbang_hack", "fg": 2443, "rotates": false }, + { "id": "bot_flashbang_hack", "fg": 2444, "rotates": false }, + { "id": "broken_flashbang_hack", "fg": 2445, "rotates": false }, + { "id": "mon_gasbomb_hack", "fg": 2446, "rotates": false }, + { "id": "bot_gasbomb_hack", "fg": 2447, "rotates": false }, + { "id": "broken_gasbomb_hack", "fg": 2448, "rotates": false }, + { "id": "mon_EMP_hack", "fg": 2449, "rotates": false }, + { "id": "bot_EMP_hack", "fg": 2450, "rotates": false }, + { "id": "broken_EMP_hack", "fg": 2451, "rotates": false }, + { "id": "mon_grenade_hack", "fg": 2452, "rotates": false }, + { "id": "bot_grenade_hack", "fg": 2453, "rotates": false }, + { "id": "broken_grenade_hack", "fg": 2454, "rotates": false }, + { "id": "mon_c4_hack", "fg": 2455, "rotates": false }, + { "id": "bot_c4_hack", "fg": 2456, "rotates": false }, + { "id": "broken_c4_hack", "fg": 2457, "rotates": false }, + { "id": "mon_manhack", "fg": 2458, "rotates": false }, + { "id": "bot_manhack", "fg": 2459, "rotates": false }, + { "id": "broken_manhack", "fg": 2460, "rotates": false }, + { "id": "mon_manhack_fire", "fg": 2461, "rotates": false }, + { "id": "bot_manhack_fire", "fg": 2462, "rotates": false }, + { "id": "broken_manhack_fire", "fg": 2463, "rotates": false }, + { "id": "mon_manhack_missile", "fg": 2464, "rotates": false }, + { "id": "bot_manhack_missile", "fg": 2465, "rotates": false }, + { "id": "manhack_firebomb", "fg": 2466, "rotates": false }, + { "id": "manhack_firebomb_act", "fg": 2467, "rotates": false }, + { "id": "mon_mininuke_hack", "fg": 2468, "rotates": false }, + { "id": "bot_mininuke_hack", "fg": 2469, "rotates": false }, + { "id": "broken_mininuke_hack", "fg": 2470, "rotates": false }, + { "id": "mon_broken_cyborg", "fg": 2471, "rotates": false }, + { "id": "mon_prototype_cyborg", "fg": 2472, "rotates": false }, + { "id": "mon_chickenbot", "fg": 2473, "rotates": false }, + { "id": "mon_copbot", "fg": 2474, "rotates": false }, + { "id": "broken_copbot", "fg": 2475, "rotates": false }, + { "id": "mon_cyborg_cop", "fg": 2476, "rotates": false }, + { "id": "mon_cyborg_guard", "fg": 2477, "rotates": false }, + { "id": "mon_eyebot", "fg": 2478, "rotates": false }, + { "id": "broken_eyebot", "fg": 2479, "rotates": false }, + { "id": "mon_hazmatbot", "fg": 2480, "rotates": false }, + { "id": "mon_turret", "fg": 2481, "rotates": false }, + { "id": "bot_turret", "fg": 2482, "rotates": false }, + { "id": "mon_turret_rifle", "fg": 2483, "rotates": false }, + { "id": "bot_rifleturret", "fg": 2484, "rotates": false }, + { "id": "mon_turret_shockcannon", "fg": 2485, "rotates": false }, + { "id": "bot_turret_shockcannon", "fg": 2486, "rotates": false }, + { "id": "mon_laserturret", "fg": 2487, "rotates": false }, + { "id": "bot_laserturret", "fg": 2488, "rotates": false }, + { "id": "mon_turret_bmg", "fg": 2489, "rotates": false }, + { "id": "mon_turret_searchlight", "fg": 2490, "rotates": false }, + { "id": "mon_science_bot", "fg": 2491, "rotates": false }, + { "id": "bot_science_bot", "fg": 2492, "rotates": false }, + { "id": "broken_science_bot", "fg": 2493, "rotates": false }, + { "id": "mon_molebot", "fg": 2494, "rotates": false }, + { "id": "broken_molebot", "fg": 2495, "rotates": false }, + { "id": "mon_riotbot", "fg": 2496, "rotates": false }, + { "id": "broken_riotbot", "fg": 2497, "rotates": false }, + { "id": "mon_dispatch", "fg": 2498, "rotates": false }, + { "id": "bot_dispatch", "fg": 2499, "rotates": false }, + { "id": "broken_dispatch", "fg": 2500, "rotates": false }, + { "id": "mon_dispatch_military", "fg": 2501, "rotates": false }, + { "id": "bot_dispatch_military", "fg": 2502, "rotates": false }, + { "id": "broken_dispatch_military", "fg": 2503, "rotates": false }, + { "id": "mon_robot_drone", "fg": 2504, "rotates": false }, + { "id": "bot_robot_drone", "fg": 2505, "rotates": false }, + { "id": "broken_robot_drone", "fg": 2506, "rotates": false }, + { "id": "mon_secubot", "fg": 2507, "rotates": false }, + { "id": "bot_antimateriel", "fg": 2508, "rotates": false }, + { "id": "mon_skitterbot", "fg": 2509, "rotates": false }, + { "id": "bot_skitterbot", "fg": 2510, "rotates": false }, + { "id": "broken_skitterbot", "fg": 2511, "rotates": false }, + { "id": "mon_tankbot", "fg": 2512, "rotates": false }, + { "id": "broken_tankbot", "fg": 2513, "rotates": false }, + { "id": "mon_w11b20b4", "fg": 2514, "rotates": false }, + { "id": "mon_w11h10", "fg": 2515, "rotates": false }, + { "id": "mon_w12b10", "fg": 2516, "rotates": false }, + { "id": "mon_w12n10", "fg": 2517, "rotates": false }, + { "id": "mon_w11b10", "fg": 2518, "rotates": false }, + { "id": "mon_generator_SCINET", "fg": 2519, "rotates": false }, { "id": [ - "overlay_male_mutation_FLOWERS", - "overlay_male_mutation_ROSEBUDS" + "bot_cyberdemon", + "bot_hell_baron", + "bot_hell_knight", + "bot_imp", + "bot_imp_black", + "bot_lostsoul", + "bot_mancubus", + "bot_mechaspider", + "bot_rat", + "bot_revenant", + "bot_spider_trapdoor_giant", + "bot_spider_trapdoor_giant_guardian", + "bot_spider_web_omega", + "bot_spider_web_s", + "bot_trapdoor_s", + "bot_pinky", + "bot_acidic_pk", + "bot_blind", + "bot_cacodemon_revive", + "bot_cherub", + "bot_cherub_fly", + "bot_churl_revive", + "bot_grabber", + "bot_hell_knight_revive", + "bot_hollow", + "bot_imp_revive", + "bot_pinky_revive", + "bot_shady", + "bot_thing_head", + "bot_thing_spider", + "bot_tripod", + "bot_cacodemon" ], - "fg": 2957 + "fg": 2520, + "rotates": false }, + { "id": "mon_doom_archdemon", "fg": 2521, "rotates": false }, { - "id": "overlay_mutation_THRESH_MYCUS", - "fg": 2958 + "id": [ "mon_doom_archvile_2", "mon_doom_archvile_3", "mon_doom_archvile_4", "mon_doom_archvile_5", "mon_doom_archvile" ], + "fg": 2522, + "rotates": false }, - { - "id": "overlay_mutation_THRESH_SLIME", - "fg": 2959 + { "id": "mon_doom_archvile_queen", "fg": 2523, "rotates": false }, + { "id": [ "mon_hell_knight_revive", "mon_hell_knight" ], "fg": 2524, "rotates": false }, + { "id": "mon_hell_baron", "fg": 2525, "rotates": false }, + { "id": "mon_cyberdemon", "fg": 2526, "rotates": false }, + { "id": "mon_mechaspider_queen", "fg": 2527, "rotates": false }, + { "id": "mon_mechaspider", "fg": 2528, "rotates": false }, + { "id": "broken_mechaspider", "fg": 2529, "rotates": false }, + { "id": [ "mon_cacodemon_revive", "mon_cacodemon" ], "fg": 2530, "rotates": false }, + { "id": "mon_mancubus", "fg": 2531, "rotates": false }, + { "id": "mon_revenant", "fg": 2532, "rotates": false }, + { "id": "mon_tripod", "fg": 2533, "rotates": false }, + { "id": "broken_tripod", "fg": 2534, "rotates": false }, + { "id": [ "mon_imp_revive", "mon_imp" ], "fg": 2535, "rotates": false }, + { "id": "mon_imp_black", "fg": 2536, "rotates": false }, + { "id": [ "mon_pinky_revive", "mon_pinky" ], "fg": 2537, "rotates": false }, + { "id": "mon_lostsoul", "fg": 2538, "rotates": false }, + { "id": "mon_lostsoul_mount", "fg": 2539, "rotates": false }, + { "id": [ "mon_cherub_fly", "mon_cherub" ], "fg": 2540, "rotates": false }, + { "id": [ "mon_doom_churl", "mon_doom_churl_revive" ], "fg": 2541, "rotates": false }, + { "id": "mon_doom_slave", "fg": 2542, "rotates": false }, + { "id": "mon_doom_cur", "fg": 2543, "rotates": false }, + { "id": "mon_doom_sacrifice", "fg": 2544, "rotates": false }, + { "id": "mon_soulcube", "fg": 2545, "rotates": false }, + { "id": [ "broken_soulcube", "soulcube" ], "fg": 2546, "rotates": false }, + { "id": "soulcube_on", "fg": 2547, "rotates": false }, + { "id": "soulcube_charging", "fg": 2548, "rotates": false }, + { "id": "mon_shoggoth", "fg": 2549, "rotates": false }, + { "id": "mon_flying_polyp", "fg": 2550, "rotates": false }, + { "id": "mon_legion", "fg": 2551, "rotates": false }, + { "id": "mon_mi_go_fly", "fg": 2552, "rotates": false }, + { "id": "mon_mi_go_terminal", "fg": 2553, "rotates": false }, + { "id": "mon_mi_go", "fg": 2554, "rotates": false }, + { "id": "mon_thing", "fg": 2555, "rotates": false }, + { "id": "mon_thing_head", "fg": 2556, "rotates": false }, + { "id": "mon_thing_spider", "fg": 2557, "rotates": false }, + { "id": "mon_thing_swamp", "fg": 2558, "rotates": false }, + { "id": "mon_gozu", "fg": 2559, "rotates": false }, + { "id": "mon_headless_dog_thing", "fg": 2560, "rotates": false }, + { "id": "mon_darkman", "fg": 2561, "rotates": false }, + { "id": "mon_shadow", "fg": 2562, "rotates": false }, + { "id": "mon_blank", "fg": 2563, "rotates": false }, + { "id": "mon_nuculais", "fg": 2564, "rotates": false }, + { "id": "mon_horror_dusk_queen", "fg": 2565, "rotates": false }, + { "id": "mon_horror_dusk", "fg": 2566, "rotates": false }, + { "id": "mon_hunting_horror", "fg": 2567, "rotates": false }, + { "id": "mon_flaming_eye", "fg": 2568, "rotates": false }, + { "id": "mon_stemcell_nether", "fg": 2569, "rotates": false }, + { "id": "mon_amigara_horror", "fg": 2570, "rotates": false }, + { "id": "mon_vortex", "fg": 2571, "rotates": false }, + { "id": "mon_twisted_body", "fg": 2572, "rotates": false }, + { "id": "mon_flesh_angel", "fg": 2573, "rotates": false }, + { "id": "mon_charred_nightmare", "fg": 2574, "rotates": false }, + { "id": "mon_crawler", "fg": 2575, "rotates": false }, + { "id": "debug_mon", "fg": 2576, "rotates": false }, + { "id": [ "mon_jabberwock_pk", "mon_jabberwock" ], "fg": 2577, "rotates": false }, + { "id": "mon_human_snail", "fg": 2578, "rotates": false }, + { + "id": [ "mon_irradiated_wanderer_2", "mon_irradiated_wanderer_3", "mon_irradiated_wanderer_4", "mon_irradiated_wanderer_1" ], + "fg": 2579, + "rotates": false }, + { "id": "mon_marloss_man", "fg": 2580, "rotates": false }, + { "id": "mon_furvivor", "fg": 2581, "rotates": false }, { - "id": "overlay_male_mutation_THRESH_SLIME", - "fg": 2960 + "id": [ "mon_furvivor_glock", "mon_furvivor_pk", "mon_furvivor_shotgun", "mon_furvivor_smg", "mon_furvivor_deagle" ], + "fg": 2582, + "rotates": false }, + { "id": "mon_cult_slave", "fg": 2583, "rotates": false }, + { "id": "mon_hologram", "fg": 2584, "rotates": false }, + { "id": [ "mon_shia", "mon_zombie_jackson" ], "fg": 2585, "rotates": false }, + { "id": "mon_chud", "fg": 2586, "rotates": false }, + { "id": "mon_dementia", "fg": 2587, "rotates": false }, + { "id": "mon_hallu_mom", "fg": 2588, "rotates": false }, + { "id": "mon_one_eye", "fg": 2589, "rotates": false }, + { "id": "mon_ratman_ninja", "fg": 2590, "rotates": false }, + { "id": "mon_rat_king", "fg": 2591, "rotates": false }, + { "id": "mon_leonardo", "fg": 2592, "rotates": false }, + { "id": "mon_michelangelo", "fg": 2593, "rotates": false }, + { "id": "mon_raphael", "fg": 2594, "rotates": false }, + { "id": "mon_donatello", "fg": 2595, "rotates": false }, + { "id": "mon_cult_churl", "fg": 2596, "rotates": false }, + { "id": "mon_bear_mega_mating", "fg": 2597, "rotates": false }, + { "id": "mon_bear_mega", "fg": 2598, "rotates": false }, + { "id": "mon_zombie_bear_mega", "fg": 2599, "rotates": false }, + { "id": "mon_bear_mega_kid", "fg": 2600, "rotates": false }, + { "id": "mon_bear_mega_baby", "fg": 2601, "rotates": false }, + { "id": [ "mon_bear_pk", "mon_bear_weak", "mon_bear" ], "fg": 2602, "rotates": false }, + { "id": [ "mon_bear_smoky", "mon_bear_smoky_pk" ], "fg": 2603, "rotates": false }, + { "id": "mon_zombear", "fg": 2604, "rotates": false }, + { "id": "mon_bobcat", "fg": 2605, "rotates": false }, + { "id": [ "mon_cougar_pk", "mon_cougar_weak", "mon_cougar" ], "fg": 2606, "rotates": false }, + { "id": "mon_fougar", "fg": 2607, "rotates": false }, + { "id": "mon_zougar", "fg": 2608, "rotates": false }, + { "id": "mon_cat", "fg": 2609, "rotates": false }, + { "id": "mon_wolf", "fg": 2610, "rotates": false }, + { "id": "mon_folf", "fg": 2611, "rotates": false }, + { "id": "mon_zolf", "fg": 2612, "rotates": false }, + { "id": "mon_zolf_shady", "fg": 2613, "rotates": false }, + { "id": "mon_zolf_scorched", "fg": 2614, "rotates": false }, { "id": [ - "overlay_mutation_BENDY2", - "overlay_mutation_BENDY3", - "overlay_mutation_BENDY1" + "mon_dog_bcollie", + "mon_dog_boxer", + "mon_dog_gshepherd", + "mon_dog_gpyrenees", + "mon_dog_rottweiler", + "mon_dog_auscattle", + "mon_dog_thing", + "mon_dog_large", + "mon_dog" ], - "fg": 2961 + "fg": 2615, + "rotates": false }, { "id": [ - "overlay_male_mutation_BENDY2", - "overlay_male_mutation_BENDY3", - "overlay_male_mutation_BENDY1" + "mon_dog_bull", + "mon_dog_bull_pup", + "mon_dog_pitbullmix", + "mon_dog_pitbullmix_pup", + "mon_dog_beagle", + "mon_dog_beagle_pup", + "mon_dog_bcollie_pup", + "mon_dog_boxer_pup", + "mon_dog_chihuahua", + "mon_dog_chihuahua_pup", + "mon_dog_dachshund", + "mon_dog_dachshund_pup", + "mon_dog_gshepherd_pup", + "mon_dog_gpyrenees_pup", + "mon_dog_rottweiler_pup", + "mon_dog_auscattle_pup", + "mon_dog_pup" ], - "fg": 2962 - }, - { - "id": "overlay_mutation_AMORPHOUS", - "fg": 2963 - }, - { - "id": "overlay_male_mutation_AMORPHOUS", - "fg": 2964 - }, - { - "id": "overlay_mutation_PER_SLIME", - "fg": 2965 - }, - { - "id": "overlay_male_mutation_PER_SLIME", - "fg": 2966 - }, - { - "id": "overlay_mutation_PER_SLIME_OK", - "fg": 2967 - } - ] - }, - { - "file": "tiles_20x20.png", - "sprite_width": 20, - "sprite_height": 20, - "sprite_offset_x": -5, - "sprite_offset_y": -10, - "tiles": [ - { - "id": "mon_dragon_dummy", - "fg": 2976, + "fg": 2616, "rotates": false }, - { - "id": "mon_tyrannosaurus", - "fg": 2977, + { "id": [ "mon_coyote_wolf", "mon_coyote_small", "mon_coyote" ], "fg": 2617, "rotates": false }, + { "id": "mon_coyote_wolf_zerg", "fg": 2618, "rotates": false }, + { "id": "mon_fox_red", "fg": 2619, "rotates": false }, + { "id": "mon_fox_gray", "fg": 2620, "rotates": false }, + { "id": "mon_pig_saber", "fg": 2621, "rotates": false }, + { "id": "mon_pig", "fg": 2622, "rotates": false }, + { "id": "mon_fungus_pig", "fg": 2623, "rotates": false }, + { "id": "mon_zombie_pig", "fg": 2624, "rotates": false }, + { "id": [ "mon_moose_pk", "mon_moose_weak", "mon_moose" ], "fg": 2625, "rotates": false }, + { "id": "mon_foose", "fg": 2626, "rotates": false }, + { "id": "mon_zoose", "fg": 2627, "rotates": false }, + { "id": "mon_horse", "fg": 2628, "rotates": false }, + { "id": "mon_horse_zombie", "fg": 2629, "rotates": false }, + { "id": "mon_horse_zombie_scorched", "fg": 2630, "rotates": false }, + { "id": "mon_deer_rutting", "fg": 2631, "rotates": false }, + { "id": "mon_deer", "fg": 2632, "rotates": false }, + { "id": "mon_deer_small", "fg": 2633, "rotates": false }, + { "id": "mon_feer", "fg": 2634, "rotates": false }, + { "id": "mon_goat", "fg": 2635, "rotates": false }, + { "id": "mon_sheep", "fg": 2636, "rotates": false }, + { "id": "mon_cow", "fg": 2637, "rotates": false }, + { "id": "mon_nakedmolerat_giant", "fg": 2638, "rotates": false }, + { "id": [ "mon_beaver", "mon_muskrat", "mon_chipmunk" ], "fg": 2639, "rotates": false }, + { "id": "mon_mole_large", "fg": 2640, "rotates": false }, + { "id": [ "mon_squirrel_red", "mon_groundhog" ], "fg": 2641, "rotates": false }, + { "id": "mon_squirrel", "fg": 2642, "rotates": false }, + { "id": [ "mon_shrew", "mon_deer_mouse" ], "fg": 2643, "rotates": false }, + { "id": "mon_lemming", "fg": 2644, "rotates": false }, + { "id": "mon_rabbit", "fg": 2645, "rotates": false }, + { "id": "mon_hare", "fg": 2646, "rotates": false }, + { "id": "mon_skunk", "fg": 2647, "rotates": false }, + { "id": [ "mon_opossum", "mon_raccoon", "mon_black_rat" ], "fg": 2648, "rotates": false }, + { "id": "mon_otter", "fg": 2649, "rotates": false }, + { "id": [ "mon_sewer_rat", "mon_weasel", "mon_mink" ], "fg": 2650, "rotates": false }, + { "id": "mon_bat_vampire", "fg": 2651, "rotates": false }, + { "id": "mon_bat", "fg": 2652, "rotates": false }, + { "id": "mon_albino_penguin", "fg": 2653, "rotates": false }, + { "id": "mon_robin", "fg": 2654, "rotates": false }, + { "id": "mon_bjay", "fg": 2655, "rotates": false }, + { "id": "mon_turkey", "fg": 2656, "rotates": false }, + { "id": "mon_chicken", "fg": 2657, "rotates": false }, + { "id": "mon_duck", "fg": 2658, "rotates": false }, + { "id": "mon_crow", "fg": 2659, "rotates": false }, + { "id": "mon_gull", "fg": 2660, "rotates": false }, + { "id": "mon_pidgeon", "fg": 2661, "rotates": false }, + { "id": [ "mon_duck_chick", "mon_chicken_chick" ], "fg": 2662, "rotates": false }, + { + "id": [ "mon_grouse_chick", "mon_crow_chick", "mon_turkey_chick", "mon_pheasant_chick" ], + "fg": 2663, "rotates": false }, - { - "id": "mon_triceratops", - "fg": 2978, + { "id": "mon_cockatrice_chick", "fg": 2664, "rotates": false }, + { "id": "mon_dimorphodon", "fg": 2665, "rotates": false }, + { "id": "mon_parasaurolophus", "fg": 2666, "rotates": false }, + { "id": "mon_spinosaurus", "fg": 2667, "rotates": false }, + { "id": "mon_stegosaurus", "fg": 2668, "rotates": false }, + { "id": "mon_titanis", "fg": 2669, "rotates": false }, + { "id": "mon_allosaurus", "fg": 2670, "rotates": false }, + { "id": "mon_ankylosaurus", "fg": 2671, "rotates": false }, + { "id": "mon_eoraptor", "fg": 2672, "rotates": false }, + { "id": "mon_gallimimus", "fg": 2673, "rotates": false }, + { "id": "mon_utahraptor", "fg": 2674, "rotates": false }, + { "id": "mon_compsognathus", "fg": 2675, "rotates": false }, + { "id": "mon_deinonychus", "fg": 2676, "rotates": false }, + { "id": "mon_velociraptor", "fg": 2677, "rotates": false }, + { "id": "mon_dilophosaurus", "fg": 2678, "rotates": false }, + { "id": "mon_rattlesnake_giant", "fg": 2679, "rotates": false }, + { "id": "mon_rattlesnake", "fg": 2680, "rotates": false }, + { "id": "mon_shadow_snake", "fg": 2681, "rotates": false }, + { "id": "mon_sewer_snake", "fg": 2682, "rotates": false }, + { "id": "mon_gator", "fg": 2683, "rotates": false }, + { "id": "mon_frog_giant", "fg": 2684, "rotates": false }, + { "id": "mon_fish_blinky", "fg": 2685, "rotates": false }, + { + "id": [ "mon_fish_trout", "mon_fish_perch", "mon_fish_salmon", "mon_fish_sunfish", "mon_fish_bowfin" ], + "fg": 2686, "rotates": false }, - { - "id": "mon_fungaloid_queen", - "fg": 2979 - }, - { - "id": "mon_fungaloid_seeder", - "fg": 2980 - }, - { - "id": "mon_fungaloid_tower", - "fg": 2981 + { "id": "mon_fish_carp", "fg": 2687, "rotates": false }, + { "id": [ "mon_fish_bullhead", "mon_fish_sbass", "mon_fish_lbass" ], "fg": 2688, "rotates": false }, + { "id": [ "mon_fish_pike", "mon_fish_bluegill" ], "fg": 2689, "rotates": false }, + { "id": "mon_sewer_fish", "fg": 2690, "rotates": false }, + { "id": [ "mon_zhark", "mon_mutant_carp", "mon_mutant_salmon" ], "fg": 2691, "rotates": false }, + { "id": [ "mon_fish_whitefish", "mon_fish_pickerel", "mon_fish_pbass" ], "fg": 2692, "rotates": false }, + { "id": "mon_fish_flying", "fg": 2693, "rotates": false }, + { "id": "mon_fish_eel_large", "fg": 2694, "rotates": false }, + { "id": "mon_fish_eel", "fg": 2695, "rotates": false }, + { "id": "mon_alpha_razorclaw", "fg": 2696, "rotates": false }, + { "id": "mon_razorclaw", "fg": 2697, "rotates": false }, + { "id": [ "mon_giant_crayfish", "mon_fish_lobster_giant" ], "fg": 2698, "rotates": false }, + { "id": [ "mon_fish_lobster", "mon_fish_crayfish" ], "fg": 2699, "rotates": false }, + { "id": "mon_spider_jumping_giant_acid", "fg": 2700, "rotates": false }, + { "id": "mon_spider_jumping_giant", "fg": 2701, "rotates": false }, + { "id": "mon_spider_jumping", "fg": 2702, "rotates": false }, + { "id": "mon_spider_trapdoor_giant_guardian", "fg": 2703, "rotates": false }, + { "id": [ "mon_spider_trapdoor_giant", "mon_spider_trapdoor_giant_pk" ], "fg": 2704, "rotates": false }, + { "id": [ "mon_spider_trapdoor", "mon_spider_trapdoor_giant_s" ], "fg": 2705, "rotates": false }, + { "id": "mon_spider_web_queen", "fg": 2706, "rotates": false }, + { "id": "mon_spider_web_alpha", "fg": 2707, "rotates": false }, + { "id": [ "mon_spider_web_omega", "mon_spider_web_mu" ], "fg": 2708, "rotates": false }, + { "id": "mon_spider_web", "fg": 2709, "rotates": false }, + { "id": "mon_spider_web_s", "fg": 2710, "rotates": false }, + { "id": [ "mon_spider_wolf_giant", "mon_spider_wolf_giant_pk" ], "fg": 2711, "rotates": false }, + { "id": "mon_spider_wolf", "fg": 2712, "rotates": false }, + { "id": "mon_spider_cellar_giant", "fg": 2713, "rotates": false }, + { "id": "mon_spider_cellar_giant_s", "fg": 2714, "rotates": false }, + { "id": "mon_spider_widow_giant", "fg": 2715, "rotates": false }, + { "id": [ "mon_spider_widow_giant_s", "mon_spider_widow" ], "fg": 2716, "rotates": false }, + { "id": "mon_dermatik", "fg": 2717, "rotates": false }, + { "id": "mon_dermatik_larva", "fg": 2718, "rotates": false }, + { "id": "mon_wasp_queen", "fg": 2719, "rotates": false }, + { "id": "mon_wasp", "fg": 2720, "rotates": false }, + { "id": "mon_bee_queen", "fg": 2721, "rotates": false }, + { "id": "mon_bee_king", "fg": 2722, "rotates": false }, + { "id": [ "mon_bee_scout", "mon_bee_soldier", "mon_bee" ], "fg": 2723, "rotates": false }, + { "id": "mon_butterfly", "fg": 2724, "rotates": false }, + { "id": "mon_caterpillar", "fg": 2725, "rotates": false }, + { "id": "mon_moth", "fg": 2726, "rotates": false }, + { "id": "mon_dragonfly_giant", "fg": 2727, "rotates": false }, + { "id": [ "mon_frog", "mon_dragonfly" ], "fg": 2728, "rotates": false }, + { "id": "mon_mosquito_giant", "fg": 2729, "rotates": false }, + { "id": "mon_locust", "fg": 2730, "rotates": false }, + { "id": "mon_locust_nymph", "fg": 2731, "rotates": false }, + { "id": "mon_fly", "fg": 2732, "rotates": false }, + { "id": "mon_centipede_giant", "fg": 2733, "rotates": false }, + { "id": "mon_plague_vector", "fg": 2734, "rotates": false }, + { "id": "mon_skittering_plague", "fg": 2735, "rotates": false }, + { "id": "mon_plague_nymph", "fg": 2736, "rotates": false }, + { "id": [ "mon_pregnant_giant_cockroach", "mon_giant_cockroach" ], "fg": 2737, "rotates": false }, + { "id": "mon_giant_cockroach_nymph", "fg": 2738, "rotates": false }, + { "id": [ "mon_centipede", "mon_slug", "mon_mosquito" ], "fg": 2739, "rotates": false }, + { "id": "mon_wasp_small", "fg": 2740, "rotates": false }, + { "id": [ "mon_pupae_pk", "mon_pupae" ], "fg": 2741, "rotates": false }, + { "id": "mon_ant_acid_kwama", "fg": 2742, "rotates": false }, + { "id": "mon_ant_queen_firebug", "fg": 2743, "rotates": false }, + { "id": "mon_ant_acid_queen", "fg": 2744, "rotates": false }, + { "id": "mon_ant_acid_soldier", "fg": 2745, "rotates": false }, + { "id": "mon_ant_soldier_terminal", "fg": 2746, "rotates": false }, + { "id": "mon_ant_terminal", "fg": 2747, "rotates": false }, + { "id": [ "mon_ant_queen", "mon_ant_queen_young" ], "fg": 2748, "rotates": false }, + { "id": "mon_ant_soldier", "fg": 2749, "rotates": false }, + { "id": [ "mon_ant_soldier_pk", "mon_ant_soldier_pk_weak" ], "fg": 2750, "rotates": false }, + { "id": "mon_ant_acid", "fg": 2751, "rotates": false }, + { "id": "mon_ant_male", "fg": 2752, "rotates": false }, + { "id": "mon_ant", "fg": 2753, "rotates": false }, + { "id": "mon_fant", "fg": 2754, "rotates": false }, + { "id": "mon_ant_fungus", "fg": 2755, "rotates": false }, + { "id": "mon_ant_scrib", "fg": 2756, "rotates": false }, + { "id": [ "mon_ant_larva", "mon_bee_larvae", "mon_maggot", "mon_wasp_larvae" ], "fg": 2757, "rotates": false }, + { "id": "mon_ant_acid_larva", "fg": 2758, "rotates": false }, + { "id": "mon_slug_giant", "fg": 2759, "rotates": false }, + { "id": "mon_sludge_crawler_queen", "fg": 2760, "rotates": false }, + { "id": "mon_sludge_crawler", "fg": 2761, "rotates": false }, + { "id": "mon_dark_wyrm", "fg": 2762, "rotates": false }, + { "id": "mon_graboid", "fg": 2763, "rotates": false }, + { "id": "mon_yugg", "fg": 2764, "rotates": false }, + { "id": "mon_worm", "fg": 2765, "rotates": false }, + { "id": "mon_halfworm", "fg": 2766, "rotates": false }, + { "id": "mon_tardigrade", "fg": 2767, "rotates": false }, + { "id": "mon_fardigrade", "fg": 2768, "rotates": false }, + { "id": [ "mon_biollante", "mon_biollante_pk" ], "fg": 2769, "rotates": false }, + { "id": "mon_vinebeast_terminal", "fg": 2770, "rotates": false }, + { "id": [ "mon_vinebeast", "mon_vinebeast_pk" ], "fg": 2771, "rotates": false }, + { + "id": [ "mon_creeper_vine_terminal", "mon_creeper_vine_terminal_pk" ], + "fg": 2772, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2773 }, + { "id": "corner", "fg": 2774 }, + { "id": "edge", "fg": 2775 }, + { "id": "end_piece", "fg": 2776 }, + { "id": "t_connection", "fg": 2777 }, + { "id": "unconnected", "fg": 2772 } + ] }, + { "id": "mon_finebeast", "fg": 2778, "rotates": false }, { - "id": "mon_skeleton_hulk", - "fg": 2982, + "id": [ "mon_creeper_vine_pk", "mon_creeper_vine" ], + "fg": 2779, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 2780 }, + { "id": "corner", "fg": 2781 }, + { "id": "edge", "fg": 2782 }, + { "id": "end_piece", "fg": 2783 }, + { "id": "t_connection", "fg": 2784 }, + { "id": "unconnected", "fg": 2779 } + ] + }, + { "id": "mon_creeper_root", "fg": 2785, "rotates": false }, + { "id": "mon_creeper_hub", "fg": 2786, "rotates": false }, + { "id": "mon_finecraft", "fg": 2787, "rotates": false }, + { "id": "mon_dionaea", "fg": 2788, "rotates": false }, + { "id": "mon_fionaea", "fg": 2789, "rotates": false }, + { "id": "mon_dionaea_sprout", "fg": 2790, "rotates": false }, + { "id": "mon_triffid_heart", "fg": 2791, "rotates": false }, + { "id": "mon_triffid_queen", "fg": 2792, "rotates": false }, + { "id": [ "mon_triffid_pk", "mon_triffid" ], "fg": 2793, "rotates": false }, + { "id": "mon_triffid_young", "fg": 2794, "rotates": false }, + { "id": "mon_triffid_sprig", "fg": 2795, "rotates": false }, + { "id": "mon_fungal_fighter", "fg": 2796, "rotates": false }, + { "id": [ "mon_fungaloid_dormant", "mon_fungaloid_pk", "mon_fungaloid" ], "fg": 2797, "rotates": false }, + { "id": "mon_fungaloid_young", "fg": 2798, "rotates": false }, + { "id": "mon_fungal_blossom", "fg": 2799, "rotates": false }, + { "id": "mon_fungal_tendril", "fg": 2800, "rotates": false }, + { "id": "mon_fungal_wall", "fg": 2801, "rotates": false }, + { "id": "mon_fungal_hedgerow", "fg": 2802, "rotates": false }, + { "id": [ "mon_fungus_boil", "mon_spore" ], "fg": 2803, "rotates": false }, + { "id": "mon_zombie_thorny", "fg": 2804 }, + { "id": "mon_zombie_fiend_shocker", "fg": 2805, "rotates": false }, + { "id": [ "mon_zombie_fiend_pk", "mon_zombie_fiend" ], "fg": 2806, "rotates": false }, + { "id": "mon_zombie_nullfield", "fg": 2807, "rotates": false }, + { "id": "mon_zombie_electric_fungal", "fg": 2808, "rotates": false }, + { "id": [ "mon_zombie_electric_pk", "mon_zombie_electric" ], "fg": 2809, "rotates": false }, + { "id": "mon_zombie_scorched_shocker", "fg": 2810, "rotates": false }, + { "id": "mon_zombie_lord", "fg": 2811, "rotates": false }, + { "id": [ "mon_zombie_master_pk", "mon_zombie_master" ], "fg": 2812, "rotates": false }, + { "id": "mon_zombie_scorched_master", "fg": 2813, "rotates": false }, + { "id": [ "mon_zombie_necro_pk", "mon_zombie_necro" ], "fg": 2814, "rotates": false }, + { "id": "mon_zombie_scorched_necro", "fg": 2815, "rotates": false }, + { "id": "mon_zombie_predator", "fg": 2816, "rotates": false }, + { "id": [ "mon_zombie_runner_pk", "mon_zombie_runner" ], "fg": 2817, "rotates": false }, + { "id": "mon_zombie_soldier_blackops_2", "fg": 2818, "rotates": false }, + { "id": "mon_zombie_soldier_blackops_1", "fg": 2819, "rotates": false }, + { "id": "mon_zombie_military_pilot", "fg": 2820, "rotates": false }, + { "id": "mon_zombie_flamer", "fg": 2821, "rotates": false }, + { "id": "mon_zombie_soldier_acid_1", "fg": 2822, "rotates": false }, + { "id": "mon_zombie_armored", "fg": 2823, "rotates": false }, + { "id": "mon_zombie_grenadier", "fg": 2824, "rotates": false }, + { "id": "mon_zombie_grenadier_elite", "fg": 2825, "rotates": false }, + { "id": "mon_zombie_soldier", "fg": 2826, "rotates": false }, + { "id": "mon_zombie_soldier_acid_2", "fg": 2827, "rotates": false }, + { "id": "mon_zombie_bio_op", "fg": 2828, "rotates": false }, + { "id": "mon_zombie_fireman", "fg": 2829, "rotates": false }, + { "id": "mon_zombie_hazmat", "fg": 2830, "rotates": false }, + { "id": "mon_zombie_survivor", "fg": 2831, "rotates": false }, + { "id": "mon_zombie_cop", "fg": 2832, "rotates": false }, + { "id": "mon_zombie_scientist", "fg": 2833, "rotates": false }, + { "id": "mon_zombie_technician", "fg": 2834, "rotates": false }, + { "id": "mon_zombie_labsecurity", "fg": 2835, "rotates": false }, + { "id": "mon_gas_zombie", "fg": 2837, "rotates": false }, + { "id": "mon_zombie_corrosive", "fg": 2838, "rotates": false }, + { "id": "mon_homunculus", "fg": 2836, "rotates": false }, + { "id": "mon_zombie_kevlar_1", "fg": 2839, "rotates": false }, + { "id": "mon_zombie_brute_ninja", "fg": 2840, "rotates": false }, + { "id": "mon_zombie_brute_shocker", "fg": 2841, "rotates": false }, + { "id": "mon_zombie_brute", "fg": 2842, "rotates": false }, + { "id": "mon_zombie_brute_grappler", "fg": 2843, "rotates": false }, + { "id": "mon_zombie_grappler", "fg": 2844, "rotates": false }, + { "id": "mon_zombie_grabber", "fg": 2845, "rotates": false }, + { "id": "mon_zombie_mancroc", "fg": 2846, "rotates": false }, + { "id": "mon_zombie_biter", "fg": 2847, "rotates": false }, + { "id": "mon_zombie_anklebiter", "fg": 2848, "rotates": false }, + { "id": [ "mon_beekeeper", "mon_beekeeper_pk" ], "fg": 2849, "rotates": false }, + { "id": "mon_zombie_radbag", "fg": 2850, "rotates": false }, + { "id": [ "mon_boomer_huge_pk", "mon_boomer_huge" ], "fg": 2853, "rotates": false }, + { "id": "mon_boomer", "fg": 2854, "rotates": false }, + { "id": "mon_boomer_fungus", "fg": 2855, "rotates": false }, + { "id": [ "mon_zombie_gasbag", "mon_zombie_gasbag_pk" ], "fg": 2856, "rotates": false }, + { "id": [ "mon_zombie_fat", "mon_zombie_fat_2", "mon_zombie_fat_3" ], "fg": 2857, "rotates": false }, + { "id": [ "mon_zombie_smoker_pk", "mon_zombie_smoker" ], "fg": 2851, "rotates": false }, + { "id": "mon_zombie_spitter", "fg": 2852, "rotates": false }, + { "id": "mon_skeleton_brute", "fg": 2858, "rotates": false }, + { "id": "mon_skeleton", "fg": 2859, "rotates": false }, + { "id": "mon_skeleton_scorched", "fg": 2860, "rotates": false }, + { "id": "mon_zombie_waif", "fg": 2861, "rotates": false }, + { "id": "mon_zombie_creepy", "fg": 2862, "rotates": false }, + { "id": "mon_zombie_sproglodyte", "fg": 2863, "rotates": false }, + { "id": "mon_zombie_snotgobbler", "fg": 2864, "rotates": false }, + { "id": "mon_zombie_screecher", "fg": 2865, "rotates": false }, + { "id": "mon_zombie_shrieker", "fg": 2866, "rotates": false }, + { "id": "mon_zombie_shriekling", "fg": 2867, "rotates": false }, + { "id": [ "mon_zombie_child_scorched_2", "mon_zombie_child_scorched" ], "fg": 2868, "rotates": false }, + { "id": [ "mon_zombie_child_reaver", "mon_kreck" ], "fg": 2869, "rotates": false }, + { + "id": [ "mon_zombie_child_2", "mon_zombie_child_3", "mon_zombie_child_pk", "mon_zombie_child" ], + "fg": 2870, "rotates": false }, + { "id": "mon_zombie_child_fungus", "fg": 2871, "rotates": false }, + { "id": [ "mon_dog_zombie_cop", "mon_dog_zombie_cop_pk" ], "fg": 2872, "rotates": false }, { - "id": "mon_zombie_kevlar_2", - "fg": 2983, + "id": [ "mon_dog_zombie_rot", "mon_dog_zombie_rot_pain", "mon_dog_zombie_rot_worms" ], + "fg": 2873, "rotates": false }, + { "id": [ "mon_dog_skeleton", "mon_dog_skeleton_pk" ], "fg": 2874, "rotates": false }, + { "id": [ "mon_zombie_dog", "mon_zombie_dog_pk", "mon_zombie_fast" ], "fg": 2875, "rotates": false }, + { "id": "mon_zombie_hunter", "fg": 2876, "rotates": false }, { - "id": "mon_zombie_hulk_pk", - "fg": 2984, + "id": [ "mon_zombie_crawler_pk", "mon_zombie_crawler_pk_weak", "mon_zombie_crawler" ], + "fg": 2877, "rotates": false }, + { "id": "mon_zombie_crawler_scorched", "fg": 2878, "rotates": false }, + { "id": "mon_zombie_cripple", "fg": 2879, "rotates": false }, + { "id": [ "mon_zombie_blind_pk", "mon_zombie_blind" ], "fg": 2880, "rotates": false }, + { "id": "mon_zombie_skull", "fg": 2881, "rotates": false }, + { "id": "mon_gracke", "fg": 2882, "rotates": false }, + { "id": [ "mon_zombie_hollow", "mon_zombie_hollow_pk" ], "fg": 2883, "rotates": false }, + { "id": "mon_zombie_ears", "fg": 2884, "rotates": false }, + { "id": "mon_zombie_brainless", "fg": 2885, "rotates": false }, { - "id": "mon_zombie_hulk", - "fg": 2984, + "id": [ + "mon_zombie_rot_flu", + "mon_zombie_rot_pain", + "mon_zombie_rot_worms", + "mon_zombie_rot_pk", + "mon_zombie_rot_pk_flu", + "mon_zombie_rot_pk_pain", + "mon_zombie_rot_pk_worms", + "mon_zombie_rot" + ], + "fg": 2886, "rotates": false }, - { - "id": "overlay_mutation_THRESH_URSINE", - "fg": 2985 - }, - { - "id": "overlay_mutation_THRESH_CATTLE", - "fg": 2986 + { "id": "mon_zombie_shady_ghost", "fg": 2887, "rotates": false }, + { "id": [ "mon_zombie_shady_pk", "mon_zombie_shady" ], "fg": 2888, "rotates": false }, + { "id": "mon_zombie_fungus", "fg": 2889, "rotates": false }, + { "id": [ "mon_zombie_acidic", "mon_zombie_acidic_pk" ], "fg": 2890, "rotates": false }, + { "id": [ "mon_zombie_tough", "mon_zombie_tough_2", "mon_zombie_tough_3" ], "fg": 2891, "rotates": false }, + { "id": "mon_zombie_scales", "fg": 2892, "rotates": false }, + { "id": [ "mon_zombie_swimmer", "mon_zombie_swimmer_pk" ], "fg": 2893, "rotates": false }, + { "id": "mon_zombie_dancer", "fg": 2894, "rotates": false }, + { "id": [ "mon_zombie_scorched_pk", "mon_zombie_scorched" ], "fg": 2895, "rotates": false }, + { "id": [ "mon_zombie_pk", "mon_zombie_2", "mon_zombie_3", "mon_zombie" ], "fg": 2896, "rotates": false }, + { "id": "mon_zanimal_scorched", "fg": 2897, "rotates": false }, + { "id": "mon_zanimal_skeleton", "fg": 2898, "rotates": false }, + { "id": "mon_zanimal_skeleton_dead", "fg": 2899, "rotates": false }, + { "id": "mon_blob_brain", "fg": 2900, "rotates": false }, + { "id": "mon_breather_hub", "fg": 2901, "rotates": false }, + { "id": [ "mon_gelatin", "mon_blob_large" ], "fg": 2902, "rotates": false }, + { "id": "mon_player_blob", "fg": 2903, "rotates": false }, + { "id": "mon_blob", "fg": 2904, "rotates": false }, + { "id": "mon_blob_small", "fg": 2905, "rotates": false }, + { "id": "mon_breather", "fg": 2906, "rotates": false }, + { "id": "player_female", "fg": 2907, "rotates": false }, + { "id": "player_male", "fg": 2908, "rotates": false }, + { "id": "npc_female", "fg": 2909, "rotates": false }, + { "id": "npc_male", "fg": 2910, "rotates": false }, + { "id": "overlay_mutation_bio_armor_legs", "fg": 2911 }, + { "id": "overlay_male_mutation_bio_armor_legs", "fg": 2912 }, + { "id": "overlay_mutation_bio_armor_torso", "fg": 2913 }, + { "id": "overlay_male_mutation_bio_armor_torso", "fg": 2914 }, + { "id": "overlay_mutation_bio_armor_arms", "fg": 2915 }, + { "id": "overlay_male_mutation_bio_armor_arms", "fg": 2916 }, + { "id": "overlay_mutation_bio_armor_head", "fg": 2917 }, + { "id": "overlay_male_mutation_bio_armor_head", "fg": 2918 }, + { "id": "overlay_mutation_bio_blaster", "fg": 2919 }, + { "id": "overlay_male_mutation_bio_blaster", "fg": 2920 }, + { "id": "overlay_mutation_bio_deformity", "fg": 2921 }, + { "id": "overlay_male_mutation_bio_deformity", "fg": 2922 }, + { "id": [ "overlay_mutation_active_bio_scent_vision", "overlay_mutation_active_bio_blindfold" ], "fg": 2923 }, + { + "id": [ "overlay_male_mutation_active_bio_scent_vision", "overlay_male_mutation_active_bio_blindfold" ], + "fg": 2924 }, - { - "id": "overlay_male_mutation_THRESH_CATTLE", - "fg": 2987 + { "id": "overlay_mutation_active_bio_night_vision", "fg": 2925 }, + { "id": "overlay_male_mutation_active_bio_night_vision", "fg": 2926 }, + { "id": "overlay_mutation_active_bio_infrared", "fg": 2927 }, + { "id": "overlay_male_mutation_active_bio_infrared", "fg": 2928 }, + { "id": "overlay_mutation_THRESH_MARLOSS", "fg": 2929 }, + { "id": "overlay_male_mutation_THRESH_MARLOSS", "fg": 2930 }, + { "id": "overlay_mutation_THRESH_ALPHA", "fg": 2931 }, + { "id": "overlay_male_mutation_THRESH_ALPHA", "fg": 2932 }, + { "id": "overlay_mutation_THRESH_ELFA", "fg": 2933 }, + { "id": "overlay_male_mutation_THRESH_ELFA", "fg": 2934 }, + { "id": "overlay_mutation_THRESH_CHIMERA", "fg": 2935 }, + { "id": "overlay_mutation_THRESH_BEAST", "fg": 2936 }, + { "id": "overlay_male_mutation_THRESH_BEAST", "fg": 2937 }, + { "id": "overlay_mutation_THRESH_FELINE", "fg": 2938 }, + { "id": "overlay_mutation_THRESH_LUPINE", "fg": 2939 }, + { "id": "overlay_mutation_THRESH_RAT", "fg": 2940 }, + { "id": "overlay_mutation_THRESH_MOUSE", "fg": 2941 }, + { "id": "overlay_mutation_THRESH_TROGLOBITE", "fg": 2942 }, + { "id": "overlay_male_mutation_THRESH_TROGLOBITE", "fg": 2943 }, + { "id": "overlay_mutation_THRESH_BIRD", "fg": 2944 }, + { "id": "overlay_mutation_THRESH_RAPTOR", "fg": 2945 }, + { "id": "overlay_mutation_THRESH_FISH", "fg": 2946 }, + { "id": "overlay_mutation_THRESH_CEPHALOPOD", "fg": 2947 }, + { "id": "overlay_male_mutation_THRESH_CEPHALOPOD", "fg": 2948 }, + { "id": "overlay_mutation_INT_UP_4", "fg": 2949 }, + { "id": "overlay_male_mutation_INT_UP_4", "fg": 2950 }, + { "id": "overlay_mutation_THRESH_SPIDER", "fg": 2951 }, + { "id": "overlay_male_mutation_THRESH_SPIDER", "fg": 2952 }, + { "id": "overlay_mutation_THRESH_INSECT", "fg": 2953 }, + { "id": "overlay_mutation_THRESH_PLANT", "fg": 2954 }, + { "id": "overlay_male_mutation_THRESH_PLANT", "fg": 2955 }, + { "id": [ "overlay_mutation_FLOWERS", "overlay_mutation_ROSEBUDS" ], "fg": 2956 }, + { "id": [ "overlay_male_mutation_FLOWERS", "overlay_male_mutation_ROSEBUDS" ], "fg": 2957 }, + { "id": "overlay_mutation_THRESH_MYCUS", "fg": 2958 }, + { "id": "overlay_mutation_THRESH_SLIME", "fg": 2959 }, + { "id": "overlay_male_mutation_THRESH_SLIME", "fg": 2960 }, + { "id": [ "overlay_mutation_BENDY2", "overlay_mutation_BENDY3", "overlay_mutation_BENDY1" ], "fg": 2961 }, + { + "id": [ "overlay_male_mutation_BENDY2", "overlay_male_mutation_BENDY3", "overlay_male_mutation_BENDY1" ], + "fg": 2962 }, - { - "id": "overlay_mutation_THRESH_LIZARD", - "fg": 2988 - } + { "id": "overlay_mutation_AMORPHOUS", "fg": 2963 }, + { "id": "overlay_male_mutation_AMORPHOUS", "fg": 2964 }, + { "id": "overlay_mutation_PER_SLIME", "fg": 2965 }, + { "id": "overlay_male_mutation_PER_SLIME", "fg": 2966 }, + { "id": "overlay_mutation_PER_SLIME_OK", "fg": 2967 }, + { "id": "f_planter", "fg": 2968, "rotates": false }, + { "id": "f_planter_seed", "fg": 2969, "rotates": false }, + { "id": "f_planter_seedling", "fg": 2970, "rotates": false }, + { "id": "f_planter_mature", "fg": 2971, "rotates": false }, + { "id": "f_planter_harvest", "fg": 2972, "rotates": false }, + { "id": "vp_autoclave", "fg": 2973, "rotates": false }, + { "id": [ "f_autoclave", "f_autoclave_full" ], "fg": 2974, "rotates": false }, + { "id": "vp_dishwasher", "fg": 2975, "rotates": false }, + { "id": "t_door_gray_o", "fg": 2976, "rotates": false }, + { "id": "t_door_gray_c", "fg": 2977, "rotates": false }, + { "id": "t_door_gray_b", "fg": 2978, "rotates": false }, + { "id": "t_door_red_o", "fg": 2979, "rotates": false }, + { "id": "t_door_red_c", "fg": 2980, "rotates": false }, + { "id": "t_door_red_b", "fg": 2981, "rotates": false }, + { "id": "t_door_green_o", "fg": 2982, "rotates": false }, + { "id": "t_door_green_c", "fg": 2983, "rotates": false }, + { "id": "t_door_green_b", "fg": 2984, "rotates": false }, + { "id": "t_door_white_o", "fg": 2985, "rotates": false }, + { "id": "t_door_white_c", "fg": 2986, "rotates": false }, + { "id": "t_door_white_b", "fg": 2987, "rotates": false } + ] + }, + { + "file": "tiles_20x20.png", + "sprite_width": 20, + "sprite_height": 20, + "sprite_offset_x": -5, + "sprite_offset_y": -10, + "tiles": [ + { "id": "mon_dragon_dummy", "fg": 2992, "rotates": false }, + { "id": "mon_tyrannosaurus", "fg": 2993, "rotates": false }, + { "id": "mon_triceratops", "fg": 2994, "rotates": false }, + { "id": "mon_fungaloid_queen", "fg": 2995 }, + { "id": "mon_fungaloid_seeder", "fg": 2996 }, + { "id": "mon_fungaloid_tower", "fg": 2997 }, + { "id": "mon_skeleton_hulk", "fg": 2998, "rotates": false }, + { "id": "mon_zombie_kevlar_2", "fg": 2999, "rotates": false }, + { "id": "mon_zombie_hulk_pk", "fg": 3000, "rotates": false }, + { "id": "mon_zombie_hulk", "fg": 3000, "rotates": false }, + { "id": "overlay_mutation_THRESH_URSINE", "fg": 3001 }, + { "id": "overlay_mutation_THRESH_CATTLE", "fg": 3002 }, + { "id": "overlay_male_mutation_THRESH_CATTLE", "fg": 3003 }, + { "id": "overlay_mutation_THRESH_LIZARD", "fg": 3004 } ] }, { "file": "fallback.png", - "tiles": [], + "tiles": [ ], "ascii": [ - { - "offset": 0, - "bold": false, - "color": "BLACK" - }, - { - "offset": 256, - "bold": true, - "color": "WHITE" - }, - { - "offset": 512, - "bold": false, - "color": "WHITE" - }, - { - "offset": 768, - "bold": true, - "color": "BLACK" - }, - { - "offset": 1024, - "bold": false, - "color": "RED" - }, - { - "offset": 1280, - "bold": false, - "color": "GREEN" - }, - { - "offset": 1536, - "bold": false, - "color": "BLUE" - }, - { - "offset": 1792, - "bold": false, - "color": "CYAN" - }, - { - "offset": 2048, - "bold": false, - "color": "MAGENTA" - }, - { - "offset": 2304, - "bold": false, - "color": "YELLOW" - }, - { - "offset": 2560, - "bold": true, - "color": "RED" - }, - { - "offset": 2816, - "bold": true, - "color": "GREEN" - }, - { - "offset": 3072, - "bold": true, - "color": "BLUE" - }, - { - "offset": 3328, - "bold": true, - "color": "CYAN" - }, - { - "offset": 3584, - "bold": true, - "color": "MAGENTA" - }, - { - "offset": 3840, - "bold": true, - "color": "YELLOW" - } + { "offset": 0, "bold": false, "color": "BLACK" }, + { "offset": 256, "bold": true, "color": "WHITE" }, + { "offset": 512, "bold": false, "color": "WHITE" }, + { "offset": 768, "bold": true, "color": "BLACK" }, + { "offset": 1024, "bold": false, "color": "RED" }, + { "offset": 1280, "bold": false, "color": "GREEN" }, + { "offset": 1536, "bold": false, "color": "BLUE" }, + { "offset": 1792, "bold": false, "color": "CYAN" }, + { "offset": 2048, "bold": false, "color": "MAGENTA" }, + { "offset": 2304, "bold": false, "color": "YELLOW" }, + { "offset": 2560, "bold": true, "color": "RED" }, + { "offset": 2816, "bold": true, "color": "GREEN" }, + { "offset": 3072, "bold": true, "color": "BLUE" }, + { "offset": 3328, "bold": true, "color": "CYAN" }, + { "offset": 3584, "bold": true, "color": "MAGENTA" }, + { "offset": 3840, "bold": true, "color": "YELLOW" } ] } ], "overlay_ordering": [ - { - "id": "THRESH_MARLOSS", - "order": 400 - }, - { - "id": [ - "bio_armor_legs", - "bio_armor_torso", - "bio_armor_arms" - ], - "order": 500 - }, - { - "id": "bio_armor_head", - "order": 505 - }, - { - "id": "bio_blaster", - "order": 510 - }, - { - "id": "bio_deformity", - "order": 515 - }, - { - "id": [ - "active_bio_blindfold", - "active_bio_scent_vision" - ], - "order": 520 - }, - { - "id": "active_bio_night_vision", - "order": 521 - }, - { - "id": "active_bio_infrared", - "order": 522 - }, + { "id": "THRESH_MARLOSS", "order": 400 }, + { "id": [ "bio_armor_legs", "bio_armor_torso", "bio_armor_arms" ], "order": 500 }, + { "id": "bio_armor_head", "order": 505 }, + { "id": "bio_blaster", "order": 510 }, + { "id": "bio_deformity", "order": 515 }, + { "id": [ "active_bio_blindfold", "active_bio_scent_vision" ], "order": 520 }, + { "id": "active_bio_night_vision", "order": 521 }, + { "id": "active_bio_infrared", "order": 522 }, { "id": [ "THRESH_ALPHA", @@ -22032,33 +7784,9 @@ ], "order": 5000 }, - { - "id": [ - "BENDY1", - "BENDY2", - "BENDY3" - ], - "order": 5100 - }, - { - "id": [ - "AMORPHOUS", - "INT_UP_4", - "FLOWERS", - "ROSEBUDS" - ], - "order": 5200 - }, - { - "id": [ - "PER_SLIME", - "THRESH_ELFA" - ], - "order": 5300 - }, - { - "id": "PER_SLIME_OK", - "order": 5400 - } + { "id": [ "BENDY1", "BENDY2", "BENDY3" ], "order": 5100 }, + { "id": [ "AMORPHOUS", "INT_UP_4", "FLOWERS", "ROSEBUDS" ], "order": 5200 }, + { "id": [ "PER_SLIME", "THRESH_ELFA" ], "order": 5300 }, + { "id": "PER_SLIME_OK", "order": 5400 } ] } diff --git a/gfx/RetroDaysTileset/tiles.png b/gfx/RetroDaysTileset/tiles.png index fc10f3ed26429..fcf7d663667a2 100644 Binary files a/gfx/RetroDaysTileset/tiles.png and b/gfx/RetroDaysTileset/tiles.png differ diff --git a/gfx/tile_config.json b/gfx/tile_config.json index 1e95eb255e9aa..301f10f75bf0e 100644 --- a/gfx/tile_config.json +++ b/gfx/tile_config.json @@ -996,6 +996,10 @@ "id":"tr_shotgun_2", "rotates":false }, + { + "id":"tr_shotgun_2_1", + "rotates":false + }, { "id":"tr_shotgun_1", "rotates":false diff --git a/gfx/tile_config_template.json b/gfx/tile_config_template.json index 8276160cbda33..28f3a318a804e 100644 --- a/gfx/tile_config_template.json +++ b/gfx/tile_config_template.json @@ -1527,6 +1527,13 @@ "rotates":false, "multitile":false }, + { + "id": "tr_shotgun_2_1", + "fg":-1, + "bg":-1, + "rotates":false, + "multitile":false + }, { "id": "tr_shotgun_1", "fg":-1, diff --git a/lang/extract_json_strings.py b/lang/extract_json_strings.py index 36d917f1e78bf..ef2a250c895e3 100755 --- a/lang/extract_json_strings.py +++ b/lang/extract_json_strings.py @@ -156,7 +156,6 @@ def warning_supressed(filename): "TOOLMOD", "TOOL_ARMOR", "tool_quality", - "trap", "tutorial_messages", "VAR_VEH_PART", "vehicle", @@ -569,6 +568,11 @@ def extract_talk_topic(item): for r in item["responses"]: extract_talk_response(r, outfile) +def extract_trap(item): + outfile = get_outfile("trap") + writestr(outfile, item["name"]) + if "vehicle_data" in item and "sound" in item["vehicle_data"]: + writestr(outfile, item["vehicle_data"]["sound"], comment="Trap-vehicle collision message for trap '{}'".format(item["name"])) def extract_missiondef(item): outfile = get_outfile("mission_def") @@ -731,6 +735,7 @@ def extract_ter_furn_transform_messages(item): "recipe_group": extract_recipe_group, "scenario": extract_scenarios, "talk_topic": extract_talk_topic, + "trap": extract_trap, "gate": extract_gate, "vehicle_spawn": extract_vehspawn, "field_type": extract_field_type, @@ -804,7 +809,7 @@ def writestr(filename, string, plural=None, context=None, format_strings=False, # don't write empty strings if not string: return - with open(filename, 'a', encoding="utf-8") as fs: + with open(filename, 'a', encoding="utf-8", newline='\n') as fs: # Append developers comment if comment: tlcomment(fs, comment) @@ -978,7 +983,7 @@ def extract(item, infilename): if "footsteps" in item: writestr(outfile, item["footsteps"], **kwargs) wrote = True - if not wrote: + if not wrote and not "copy-from" in item: if not warning_supressed(infilename): print("WARNING: {}: nothing translatable found in item: {}".format(infilename, item)) diff --git a/lang/update_pot.sh b/lang/update_pot.sh index 8bc2a7d1fa3ba..24c990bfefe97 100755 --- a/lang/update_pot.sh +++ b/lang/update_pot.sh @@ -60,6 +60,17 @@ then exit 1 fi +# convert line endings to unix +if [[ $(uname -s) =~ ^(CYGWIN|MINGW)* ]] +then + echo "> Converting line endings to Unix" + if ! sed -i -e 's/\r$//' lang/po/cataclysm-dda.pot + then + echo "Line ending conversion failed. Aborting." + exit 1 + fi +fi + # Final compilation check echo "> Testing to compile the .pot file" if ! msgfmt -c -o /dev/null lang/po/cataclysm-dda.pot diff --git a/src/activity_handlers.cpp b/src/activity_handlers.cpp index e175743323426..f42e39265849c 100644 --- a/src/activity_handlers.cpp +++ b/src/activity_handlers.cpp @@ -8,6 +8,7 @@ #include #include #include + #include #include #include @@ -130,7 +131,8 @@ activity_handlers::do_turn_functions = { { activity_id( "ACT_PICKUP" ), pickup_do_turn }, { activity_id( "ACT_WEAR" ), wear_do_turn }, { activity_id( "ACT_MULTIPLE_CONSTRUCTION" ), multiple_construction_do_turn }, - { activity_id( "ACT_BLUEPRINT_CONSTRUCTION" ), blueprint_construction_do_turn }, + { activity_id( "ACT_MULTIPLE_FARM" ), multiple_farm_do_turn }, + { activity_id( "ACT_FETCH_REQUIRED" ), fetch_do_turn }, { activity_id( "ACT_BUILD" ), build_do_turn }, { activity_id( "ACT_EAT_MENU" ), eat_menu_do_turn }, { activity_id( "ACT_CONSUME_FOOD_MENU" ), consume_food_menu_do_turn }, @@ -148,6 +150,7 @@ activity_handlers::do_turn_functions = { { activity_id( "ACT_BUTCHER_FULL" ), butcher_do_turn }, { activity_id( "ACT_TRAVELLING" ), travel_do_turn }, { activity_id( "ACT_AUTODRIVE" ), drive_do_turn }, + { activity_id( "ACT_CHURN" ), churn_do_turn }, { activity_id( "ACT_FIELD_DRESS" ), butcher_do_turn }, { activity_id( "ACT_SKIN" ), butcher_do_turn }, { activity_id( "ACT_QUARTER" ), butcher_do_turn }, @@ -157,6 +160,7 @@ activity_handlers::do_turn_functions = { { activity_id( "ACT_CHOP_TREE" ), chop_tree_do_turn }, { activity_id( "ACT_CHOP_LOGS" ), chop_tree_do_turn }, { activity_id( "ACT_CHOP_PLANKS" ), chop_tree_do_turn }, + { activity_id( "ACT_TIDY_UP" ), tidy_up_do_turn }, { activity_id( "ACT_JACKHAMMER" ), jackhammer_do_turn }, { activity_id( "ACT_DIG" ), dig_do_turn }, { activity_id( "ACT_DIG_CHANNEL" ), dig_channel_do_turn }, @@ -194,6 +198,7 @@ activity_handlers::finish_functions = { { activity_id( "ACT_RELOAD" ), reload_finish }, { activity_id( "ACT_START_FIRE" ), start_fire_finish }, { activity_id( "ACT_TRAIN" ), train_finish }, + { activity_id( "ACT_CHURN" ), churn_finish }, { activity_id( "ACT_VEHICLE" ), vehicle_finish }, { activity_id( "ACT_START_ENGINES" ), start_engines_finish }, { activity_id( "ACT_OXYTORCH" ), oxytorch_finish }, @@ -1497,12 +1502,7 @@ void activity_handlers::forage_finish( player_activity *act, player *p ) add_msg( _( "You didn't find anything." ) ); } - ///\EFFECT_INT Intelligence caps survival skill gains from foraging - const int max_forage_skill = p->int_cur / 3 + 1; - ///\EFFECT_SURVIVAL decreases survival skill gain from foraging (NEGATIVE) - const int max_exp = 2 * ( max_forage_skill - p->get_skill_level( skill_survival ) ); - // Award experience for foraging attempt regardless of success - p->practice( skill_survival, rng( 1, max_exp ), max_forage_skill ); + iexamine::practice_survival_while_foraging( p ); act->set_to_null(); } @@ -2097,7 +2097,7 @@ void activity_handlers::start_engines_finish( player_activity *act, player *p ) "Some of the %s's engines start up.", non_muscle_started ), veh->name ); } else if( non_combustion_started > 0 ) { //Non-combustions "engines" started - add_msg( "The %s is ready for movement.", veh->name ); + add_msg( _( "The %s is ready for movement." ), veh->name ); } else { //All of the non-muscle engines failed add_msg( m_bad, ngettext( "The %s's engine fails to start.", @@ -2602,7 +2602,7 @@ void activity_handlers::move_items_do_turn( player_activity *act, player *p ) void activity_handlers::move_loot_do_turn( player_activity *act, player *p ) { - activity_on_turn_move_loot( *act, *p ); + generic_multi_activity_handler( *act, *p ); } void activity_handlers::adv_inventory_do_turn( player_activity *, player *p ) @@ -2885,9 +2885,9 @@ void activity_handlers::operation_do_turn( player_activity *act, player *p ) - values[3]: pl_skill - values[4] and above: occupied body_parts - str_values[0]: install/uninstall - - str_values[1]: cbm name + - str_values[1]: deprecated - str_values[2]: bionic_id - - str_values[3]: upgraded cbm name + - str_values[3]: deprecated - str_values[4]: upgraded cbm bionic_id - str_values[5]: installer name - str_values[6]: bool autodoc @@ -2903,6 +2903,8 @@ void activity_handlers::operation_do_turn( player_activity *act, player *p ) is_autodoc = 6, trait_first = 7 }; + const bionic_id bid( act->str_values[cbm_id] ); + const bionic_id upbid( act->str_values[upgraded_cbm_id] ); const bool autodoc = act->str_values[is_autodoc] == "true"; const bool u_see = p->is_player() ? true : g->u.sees( p->pos() ) && !g->u.has_effect( effect_narcosis ); @@ -2972,9 +2974,9 @@ void activity_handlers::operation_do_turn( player_activity *act, player *p ) add_msg( m_info, _( "The Autodoc attempts to carefully extract the bionic." ) ); } - if( p->has_bionic( bionic_id( act->str_values[cbm_id] ) ) ) { - p->perform_uninstall( bionic_id( act->str_values[cbm_id] ), act->values[0], act->values[1], - act->values[2], act->values[3], act->str_values[cbm_name] ); + if( p->has_bionic( bid ) ) { + p->perform_uninstall( bid, act->values[0], act->values[1], + act->values[2], act->values[3] ); } else { debugmsg( _( "Tried to uninstall %s, but you don't have this bionic installed." ), act->str_values[cbm_id] ); @@ -2986,17 +2988,15 @@ void activity_handlers::operation_do_turn( player_activity *act, player *p ) add_msg( m_info, _( "The Autodoc attempts to carefully insert the bionic." ) ); } - if( bionic_id( act->str_values[cbm_id] ).is_valid() ) { + if( bid.is_valid() ) { std::vector trait_to_rem; if( act->str_values.size() > trait_first + 1 ) { for( size_t i = trait_first; i < act->str_values.size(); i++ ) { trait_to_rem.emplace_back( trait_id( act->str_values[i] ) ); } } - p->perform_install( bionic_id( act->str_values[cbm_id] ), - bionic_id( act->str_values[upgraded_cbm_id] ), act->values[0], act->values[1], act->values[3], - act->str_values[cbm_name], act->str_values[upgraded_cbm_name], act->str_values[installer_name], - trait_to_rem, p->pos() ); + p->perform_install( bid, upbid, act->values[0], act->values[1], act->values[3], + act->str_values[installer_name], trait_to_rem, p->pos() ); } else { debugmsg( _( "%s is no a valid bionic_id" ), act->str_values[cbm_id] ); p->remove_effect( effect_under_op ); @@ -3094,6 +3094,24 @@ static bool character_has_skill_for( const player *p, const construction &con ) } ); } +void activity_handlers::churn_do_turn( player_activity *act, player *p ) +{ + ( void )act; + ( void )p; + p->set_moves( 0 ); +} + +void activity_handlers::churn_finish( player_activity *act, player *p ) +{ + p->add_msg_if_player( _( "You finish churning up the earth here." ) ); + g->m.ter_set( g->m.getlocal( act->placement ), t_dirtmound ); + // Go back to what we were doing before + // could be player zone activity, or could be NPC multi-farming + act->set_to_null(); + p->activity = p->backlog.front(); + p->backlog.pop_front(); +} + void activity_handlers::build_do_turn( player_activity *act, player *p ) { const std::vector &list_constructions = get_constructions(); @@ -3149,100 +3167,24 @@ void activity_handlers::build_do_turn( player_activity *act, player *p ) } } -void activity_handlers::multiple_construction_do_turn( player_activity *act, player *p ) +void activity_handlers::tidy_up_do_turn( player_activity *act, player *p ) { - ( void )act; - const activity_id act_multiple_construction = activity_id( "ACT_MULTIPLE_CONSTRUCTION" ); - tripoint src_loc_start = p->pos(); - // search in a radius around unsorted zone to find corpse spots - std::vector build_spots; - for( tripoint p : g->m.points_in_radius( src_loc_start, 20 ) ) { - partial_con *pc = g->m.partial_con_at( p ); - if( pc ) { - build_spots.push_back( p ); - } - } - // Nuke the current activity, leaving the backlog alone. - p->activity = player_activity(); - - // sort source tiles by distance - for( auto &src_loc : build_spots ) { - if( !g->m.inbounds( src_loc ) ) { - if( !g->m.inbounds( p->pos() ) ) { - // p is implicitly an NPC that has been moved off the map, so reset the activity - // and unload them - p->assign_activity( act_multiple_construction ); - p->set_moves( 0 ); - g->reload_npcs(); - return; - } - std::vector route = route_adjacent( *p, src_loc ); - if( route.empty() ) { - // can't get there, can't do anything, skip it - continue; - } - p->set_destination( route, player_activity( act_multiple_construction ) ); - return; - } - - // skip tiles on fire so as not to try and butcher corpses on fire - // and inaccessible furniture, like filled charcoal kiln - if( g->m.get_field( src_loc, fd_fire ) != nullptr ) { - continue; - } - bool adjacent = false; - for( auto elem : g->m.points_in_radius( src_loc, 1 ) ) { - if( p->pos() == elem ) { - adjacent = true; - break; - } - } - if( !adjacent ) { - std::vector route = route_adjacent( *p, src_loc ); - - // check if we found path to source / adjacent tile - if( route.empty() ) { - add_msg( m_info, _( "%s can't reach the source tile to construct" ), - p->disp_name() ); - return; - } - - // set the destination and restart activity after player arrives there - // we don't need to check for safe mode, - // activity will be restarted only if - // player arrives on destination tile - p->set_destination( route, player_activity( act_multiple_construction ) ); - return; - } - // maybe the construction dissappeared, double check before starting work - partial_con *nc = g->m.partial_con_at( src_loc ); - if( !nc ) { - p->assign_activity( act_multiple_construction ); - return; - } - p->backlog.push_front( act_multiple_construction ); - p->assign_activity( activity_id( "ACT_BUILD" ) ); - p->activity.placement = g->m.getabs( src_loc ); - return; + generic_multi_activity_handler( *act, *p ); +} - } - if( p->moves <= 0 ) { - // Restart activity and break from cycle. - p->assign_activity( act_multiple_construction ); - return; - } +void activity_handlers::multiple_construction_do_turn( player_activity *act, player *p ) +{ + generic_multi_activity_handler( *act, *p ); +} - // If we got here without restarting the activity, it means we're done. - if( p->is_npc() ) { - npc *guy = dynamic_cast( p ); - guy->current_activity_id = activity_id::NULL_ID(); - guy->revert_after_activity(); - } +void activity_handlers::multiple_farm_do_turn( player_activity *act, player *p ) +{ + generic_multi_activity_handler( *act, *p ); } -void activity_handlers::blueprint_construction_do_turn( player_activity *act, player *p ) +void activity_handlers::fetch_do_turn( player_activity *act, player *p ) { - activity_on_turn_blueprint_move( *act, *p ); + generic_multi_activity_handler( *act, *p ); } void activity_handlers::craft_do_turn( player_activity *act, player *p ) @@ -3797,40 +3739,40 @@ static void perform_zone_activity_turn( player *p, } else { // we are at destination already /* Perform action */ tile_action( *p, tile_loc ); - if( p->moves <= 0 ) { return; } } } - add_msg( m_info, finished_msg ); p->activity.set_to_null(); } void activity_handlers::harvest_plot_do_turn( player_activity *, player *p ) { - const auto reject_tile = [p]( const tripoint & tile ) { - return !p->sees( tile ) || !g->m.has_flag_furn( "GROWTH_HARVEST", tile ); + const auto reject_tile = []( const tripoint & tile ) { + return !g->m.has_flag_furn( "GROWTH_HARVEST", tile ); + }; + const auto harvest = [&]( player & p, const tripoint & tile ) { + iexamine::harvest_plant( p, tile, false ); }; perform_zone_activity_turn( p, zone_type_id( "FARM_PLOT" ), reject_tile, - iexamine::harvest_plant, + harvest, _( "You harvested all the plots you could." ) ); } void activity_handlers::till_plot_do_turn( player_activity *, player *p ) { - const auto reject_tile = [p]( const tripoint & tile ) { - return !p->sees( tile ) || !g->m.has_flag( "PLOWABLE", tile ) || g->m.has_furn( tile ); + const auto reject_tile = []( const tripoint & tile ) { + return !g->m.has_flag( "PLOWABLE", tile ) || g->m.has_furn( tile ); }; const auto dig = []( player & p, const tripoint & tile_loc ) { - p.add_msg_if_player( _( "You churn up the earth here." ) ); - p.mod_moves( -300 ); - g->m.ter_set( tile_loc, t_dirtmound ); + p.assign_activity( activity_id( "ACT_CHURN" ), 18000, -1 ); + p.activity.placement = tile_loc; }; perform_zone_activity_turn( p, @@ -3866,7 +3808,7 @@ void activity_handlers::fertilize_plot_do_turn( player_activity *act, player *p const auto reject_tile = [&]( const tripoint & tile ) { check_fertilizer(); ret_val can_fert = iexamine::can_fertilize( *p, tile, fertilizer ); - return !p->sees( tile ) || !can_fert.success(); + return !can_fert.success(); }; const auto fertilize = [&]( player & p, const tripoint & tile ) { @@ -3917,7 +3859,7 @@ void activity_handlers::plant_plot_do_turn( player_activity *, player *p ) // cleanup unwanted tiles (local coords) const auto reject_tiles = [&]( const tripoint & tile ) { - if( !p->sees( tile ) || !g->m.has_flag_ter_or_furn( "PLANTABLE", tile ) || + if( !g->m.has_flag_ter_or_furn( "PLANTABLE", tile ) || g->m.has_items( tile ) ) { return true; } diff --git a/src/activity_handlers.h b/src/activity_handlers.h index 2e96b19083fb3..42c79aa993c67 100644 --- a/src/activity_handlers.h +++ b/src/activity_handlers.h @@ -29,13 +29,32 @@ enum butcher_type : int { DISSECT // dissect a corpse for CBMs }; +enum do_activity_reason : int { + CAN_DO_CONSTRUCTION, // Can do construction. + CAN_DO_FETCH, // Can do fetch - this is usually the default result for fetch task + CAN_DO_PREREQ, // for constructions - cant build the main construction, but can build the pre-req + CAN_DO_PREREQ_2, // Can do the second pre-req deep below the desired one. + NO_COMPONENTS, // can't do the activity there due to lack of components /tools + NO_COMPONENTS_PREREQ, // need components to build the pre-requisite for the actual desired construction + NO_COMPONENTS_PREREQ_2, // need components to the second pre-req deep. + DONT_HAVE_SKILL, // don't have the required skill + NO_ZONE, // There is no required zone anymore + ALREADY_DONE, // the activity is done already ( maybe by someone else ) + UNKNOWN_ACTIVITY, // This is probably an error - got to the end of function with no previous reason + NEEDS_HARVESTING, // For farming - tile is harvestable now. + NEEDS_PLANTING, // For farming - tile can be planted + NEEDS_TILLING, // For farming - tile can be tilled + BLOCKING_TILE // Something has made it's way onto the tile, so the activity cannot proceed +}; + int butcher_time_to_cut( const player &u, const item &corpse_item, butcher_type action ); // activity_item_handling.cpp void activity_on_turn_drop(); void activity_on_turn_move_items( player_activity &act, player &p ); void activity_on_turn_move_loot( player_activity &act, player &p ); -void activity_on_turn_blueprint_move( player_activity &, player &p ); +void generic_multi_activity_handler( player_activity &act, player &p ); +void activity_on_turn_fetch( player_activity &, player *p ); void activity_on_turn_pickup(); void activity_on_turn_wear( player_activity &act, player &p ); void try_fuel_fire( player_activity &act, player &p, bool starting_fire = false ); @@ -50,6 +69,8 @@ enum class item_drop_reason { void put_into_vehicle_or_drop( Character &c, item_drop_reason, const std::list &items ); void put_into_vehicle_or_drop( Character &c, item_drop_reason, const std::list &items, const tripoint &where, bool force_ground = false ); +void drop_on_map( Character &c, item_drop_reason reason, const std::list &items, + const tripoint &where ); namespace activity_handlers { @@ -63,6 +84,7 @@ void drop_do_turn( player_activity *act, player *p ); void stash_do_turn( player_activity *act, player *p ); void pulp_do_turn( player_activity *act, player *p ); void game_do_turn( player_activity *act, player *p ); +void churn_do_turn( player_activity *act, player *p ); void start_fire_do_turn( player_activity *act, player *p ); void vibe_do_turn( player_activity *act, player *p ); void hand_crank_do_turn( player_activity *act, player *p ); @@ -75,8 +97,9 @@ void consume_food_menu_do_turn( player_activity *act, player *p ); void consume_drink_menu_do_turn( player_activity *act, player *p ); void consume_meds_menu_do_turn( player_activity *act, player *p ); void move_items_do_turn( player_activity *act, player *p ); +void multiple_farm_do_turn( player_activity *act, player *p ); void multiple_construction_do_turn( player_activity *act, player *p ); -void blueprint_construction_do_turn( player_activity *act, player *p ); +void fetch_do_turn( player_activity *act, player *p ); void move_loot_do_turn( player_activity *act, player *p ); void travel_do_turn( player_activity *act, player *p ); void drive_do_turn( player_activity *act, player *p ); @@ -90,6 +113,7 @@ void butcher_do_turn( player_activity *act, player *p ); void hacksaw_do_turn( player_activity *act, player *p ); void chop_tree_do_turn( player_activity *act, player *p ); void jackhammer_do_turn( player_activity *act, player *p ); +void tidy_up_do_turn( player_activity *act, player *p ); void dig_do_turn( player_activity *act, player *p ); void build_do_turn( player_activity *act, player *p ); void dig_channel_do_turn( player_activity *act, player *p ); @@ -126,6 +150,7 @@ void start_fire_finish( player_activity *act, player *p ); void train_finish( player_activity *act, player *p ); void vehicle_finish( player_activity *act, player *p ); void start_engines_finish( player_activity *act, player *p ); +void churn_finish( player_activity *act, player *p ); void oxytorch_finish( player_activity *act, player *p ); void cracking_finish( player_activity *act, player *p ); void open_gate_finish( player_activity *act, player * ); diff --git a/src/activity_item_handling.cpp b/src/activity_item_handling.cpp index 34a161fcd7a5a..9a89253f2d254 100644 --- a/src/activity_item_handling.cpp +++ b/src/activity_item_handling.cpp @@ -17,8 +17,8 @@ #include "field.h" #include "fire.h" #include "game.h" -#include "item.h" #include "iuse.h" +#include "iexamine.h" #include "map.h" #include "map_iterator.h" #include "mapdata.h" @@ -43,7 +43,6 @@ #include "inventory.h" #include "line.h" #include "units.h" -#include "type_id.h" #include "flat_set.h" #include "int_id.h" #include "item_location.h" @@ -57,6 +56,8 @@ void cancel_aim_processing(); const efftype_id effect_controlled( "controlled" ); const efftype_id effect_pet( "pet" ); +const zone_type_id z_loot_unsorted( "LOOT_UNSORTED" ); + const trap_str_id tr_firewood_source( "tr_firewood_source" ); const trap_str_id tr_unfinished_construction( "tr_unfinished_construction" ); @@ -77,7 +78,7 @@ using drop_indexes = std::list>; static bool same_type( const std::list &items ) { - return std::all_of( items.begin(), items.end(), [ &items ]( const item & it ) { + return std::all_of( items.begin(), items.end(), [&items]( const item & it ) { return it.type == items.begin()->type; } ); } @@ -234,8 +235,8 @@ static void stash_on_pet( const std::list &items, monster &pet, player *p } } -static void drop_on_map( Character &c, item_drop_reason reason, const std::list &items, - const tripoint &where ) +void drop_on_map( Character &c, item_drop_reason reason, const std::list &items, + const tripoint &where ) { if( items.empty() ) { return; @@ -403,8 +404,8 @@ static std::list convert_to_items( const player &p, const drop_indexes // Implements the "backpack" logic. static std::list reorder_for_dropping( const player &p, const drop_indexes &drop ) { - auto res = convert_to_items( p, drop, -1, -1 ); - auto inv = convert_to_items( p, drop, 0, INT_MAX ); + auto res = convert_to_items( p, drop, -1, -1 ); + auto inv = convert_to_items( p, drop, 0, INT_MAX ); auto worn = convert_to_items( p, drop, INT_MIN, -2 ); // Sort inventory items by volume in ascending order @@ -415,7 +416,7 @@ static std::list reorder_for_dropping( const player &p, const drop_ind for( const auto &wait : worn ) { for( const auto dit : p.get_dependent_worn_items( *wait.it ) ) { const auto iter = std::find_if( worn.begin(), worn.end(), - [ dit ]( const act_item & ait ) { + [dit]( const act_item & ait ) { return ait.it == dit; } ); @@ -674,10 +675,7 @@ void activity_on_turn_pickup() // Otherwise, we are done. if( !keep_going || g->u.activity.targets.empty() ) { g->u.cancel_activity(); - } - - // TODO: Move this to advanced inventory instead of hacking it in here - if( !keep_going ) { + // TODO: Move this to advanced inventory instead of hacking it in here cancel_aim_processing(); } } @@ -856,7 +854,8 @@ static int move_cost( const item &it, const tripoint &src, const tripoint &dest } static void move_item( player &p, item &it, int quantity, const tripoint &src, - const tripoint &dest, vehicle *src_veh, int src_part ) + const tripoint &dest, vehicle *src_veh, int src_part, + activity_id activity_to_restore = activity_id::NULL_ID() ) { item leftovers = it; @@ -873,6 +872,11 @@ static void move_item( player &p, item &it, int quantity, const tripoint &src, // Check that we can pick it up. if( !it.made_of_from_type( LIQUID ) ) { p.mod_moves( -move_cost( it, src, dest ) ); + if( activity_to_restore == activity_id( "ACT_TIDY_UP" ) ) { + it.erase_var( "activity_var" ); + } else if( activity_to_restore == activity_id( "ACT_FETCH_REQUIRED" ) ) { + it.set_var( "activity_var", p.name ); + } put_into_vehicle_or_drop( p, item_drop_reason::deliberate, { it }, dest ); // Remove from map or vehicle. if( src_veh ) { @@ -935,435 +939,1099 @@ static construction check_build_pre( const construction &con ) return pre_con; } -void activity_on_turn_blueprint_move( player_activity &, player &p ) +static bool character_has_skill_for( const player &p, const construction &con ) { - zone_manager &mgr = zone_manager::get_manager(); - - const tripoint abspos = g->m.getabs( p.pos() ); - const std::unordered_set &src_set = mgr.get_near( - zone_type_id( "CONSTRUCTION_BLUEPRINT" ), abspos ); - - const std::vector &src_sorted = get_sorted_tiles_by_distance( abspos, src_set ); - const activity_id act_multiple_construction = activity_id( "ACT_BLUEPRINT_CONSTRUCTION" ); - - // Nuke the current activity, leaving the backlog alone - p.activity = player_activity(); - - // sort source tiles by distance - for( const tripoint &src : src_sorted ) { - const tripoint &src_loc = g->m.getlocal( src ); - // check if somebodies already started it - partial_con *nc = g->m.partial_con_at( src_loc ); - if( nc ) { - continue; - } + return std::all_of( con.required_skills.begin(), con.required_skills.end(), + [&]( const std::pair &pr ) { + return p.get_skill_level( pr.first ) >= pr.second; + } ); +} - if( !g->m.inbounds( src_loc ) ) { - if( !g->m.inbounds( p.pos() ) ) { - // p is implicitly an NPC that has been moved off the map, so reset the activity - // and unload them - p.assign_activity( act_multiple_construction ); - p.set_moves( 0 ); - g->reload_npcs(); - return; +static bool are_requirements_nearby( const std::vector &loot_spots, + const requirement_id &needed_things, const player &p, const activity_id activity_to_restore, + bool in_loot_zones ) +{ + zone_manager &mgr = zone_manager::get_manager(); + inventory temp_inv; + units::volume volume_allowed = p.volume_capacity() - p.volume_carried(); + units::mass weight_allowed = p.weight_capacity() - p.weight_carried(); + const bool check_weight = p.backlog.front().id() == activity_id( "ACT_MULTIPLE_FARM" ) || + activity_to_restore == activity_id( "ACT_MULTIPLE_FARM" ); + for( const tripoint &elem : loot_spots ) { + // if we are searching for things to fetch, we can skip certain thngs. + // if, however they are already near the work spot, then the crafting / inventory fucntions will have their own method to use or discount them. + if( in_loot_zones ) { + // skip tiles in IGNORE zone and tiles on fire + // (to prevent taking out wood off the lit brazier) + // and inaccessible furniture, like filled charcoal kiln + if( mgr.has( zone_type_id( "LOOT_IGNORE" ), g->m.getabs( elem ) ) || + g->m.dangerous_field_at( elem ) || + !g->m.can_put_items_ter_furn( elem ) ) { + continue; } - const std::vector route = route_adjacent( p, src_loc ); - if( route.empty() ) { - // can't get there, can't do anything, skip it + } + for( const auto &elem2 : g->m.i_at( elem ) ) { + if( in_loot_zones && elem2.made_of_from_type( LIQUID ) ) { continue; } - p.set_destination( route, player_activity( act_multiple_construction ) ); - return; + if( check_weight ) { + // this fetch task will need to pick up an item. so check for its weight/volume before setting off. + if( in_loot_zones && ( elem2.volume() > volume_allowed || + elem2.weight() > weight_allowed ) ) { + continue; + } + } + temp_inv += elem2; } - // dont go there if it's dangerous. - bool dangerous_field = false; - for( const std::pair &e : g->m.field_at( src_loc ) ) { - if( p.is_dangerous_field( e.second ) ) { - dangerous_field = true; - break; + if( !in_loot_zones ) { + if( const cata::optional vp = g->m.veh_at( elem ).part_with_feature( "CARGO", + false ) ) { + vehicle &src_veh = vp->vehicle(); + int src_part = vp->part_index(); + for( auto &it : src_veh.get_items( src_part ) ) { + temp_inv += it; + } } } - if( dangerous_field ) { - continue; + } + return needed_things.obj().can_make_with_inventory( temp_inv, is_crafting_component ); +} + +static std::pair can_do_activity_there( const activity_id &act, player &p, + const tripoint &src_loc ) +{ + // see activity_handlers.h cant_do_activity_reason enums + zone_manager &mgr = zone_manager::get_manager(); + std::vector zones; + if( act == activity_id( "ACT_MOVE_LOOT" ) ) { + // skip tiles in IGNORE zone and tiles on fire + // (to prevent taking out wood off the lit brazier) + // and inaccessible furniture, like filled charcoal kiln + if( mgr.has( zone_type_id( "LOOT_IGNORE" ), g->m.getabs( src_loc ) ) || + g->m.get_field( src_loc, fd_fire ) != nullptr || + !g->m.can_put_items_ter_furn( src_loc ) ) { + return std::make_pair( false, BLOCKING_TILE ); + } else { + return std::make_pair( true, CAN_DO_FETCH ); } - // work out if we can build it before we move there. - const std::vector &zones = mgr.get_zones( zone_type_id( "CONSTRUCTION_BLUEPRINT" ), - g->m.getabs( src_loc ) ); - construction built_chosen; - const inventory pre_inv = p.crafting_inventory( src_loc, PICKUP_RANGE - 1 ); + } + if( act == activity_id( "ACT_TIDY_UP" ) ) { + if( mgr.has_near( z_loot_unsorted, g->m.getabs( src_loc ), 60 ) ) { + return std::make_pair( true, CAN_DO_FETCH ); + } + return std::make_pair( false, NO_ZONE ); + } + if( act == activity_id( "ACT_MULTIPLE_CONSTRUCTION" ) ) { + const std::vector &list_constructions = get_constructions(); + zones = mgr.get_zones( zone_type_id( "CONSTRUCTION_BLUEPRINT" ), + g->m.getabs( src_loc ) ); + partial_con *nc = g->m.partial_con_at( src_loc ); + // if theres a partial construction on the tile, then we can work on it, no need to check inventories. + if( nc ) { + const construction &built = list_constructions[nc->id]; + if( !character_has_skill_for( p, built ) ) { + return std::make_pair( false, DONT_HAVE_SKILL ); + } + return std::make_pair( true, CAN_DO_CONSTRUCTION ); + } + construction built_pre; // PICKUP_RANGE -1 because we will be adjacent to the spot when arriving. - bool found_any_pre = false; - + const inventory pre_inv = p.crafting_inventory( src_loc, PICKUP_RANGE - 1 ); for( const zone_data &zone : zones ) { const blueprint_options options = dynamic_cast( zone.get_options() ); const int index = options.get_index(); - const std::vector &list_constructions = get_constructions(); const construction &built = list_constructions[index]; // maybe it's already built? if( !built.post_terrain.empty() ) { if( built.post_is_furniture ) { - furn_id f = furn_id( built.post_terrain ); - if( g->m.furn( src_loc ) == f ) { - break; + if( furn_id( built.post_terrain ) == g->m.furn( src_loc ) ) { + return std::make_pair( false, ALREADY_DONE ); } } else { - ter_id t = ter_id( built.post_terrain ); - if( g->m.ter( src_loc ) == t ) { - break; + if( ter_id( built.post_terrain ) == g->m.ter( src_loc ) ) { + return std::make_pair( false, ALREADY_DONE ); } } } + if( can_construct( built, src_loc ) && player_can_build( p, pre_inv, built ) ) { - found_any_pre = true; - built_chosen = list_constructions[index]; - break; + return std::make_pair( true, CAN_DO_CONSTRUCTION ); } else { + // if both return false, then there is a pre_special requirement that failed. + if( !player_can_build( p, pre_inv, built ) && !can_construct( built, src_loc ) ) { + return std::make_pair( false, NO_ZONE ); + } + auto stuff_there = g->m.i_at( src_loc ); + if( !stuff_there.empty() ) { + return std::make_pair( false, BLOCKING_TILE ); + } + // there are no pre-requisites. + // so we need to potentially fetch components + if( built.pre_terrain.empty() && built.pre_special( src_loc ) ) { + return std::make_pair( false, NO_COMPONENTS ); + } else if( !built.pre_special( src_loc ) ) { + return std::make_pair( false, BLOCKING_TILE ); + } // cant build it // maybe we can build the pre-requisite instead // see if the reason is because of pre-terrain requirement - bool place_okay = true; - if( !built.pre_terrain.empty() ) { - if( built.pre_is_furniture ) { - furn_id f = furn_id( built.pre_terrain ); - place_okay &= g->m.furn( src_loc ) == f; - } else { - ter_id t = ter_id( built.pre_terrain ); - place_okay &= g->m.ter( src_loc ) == t; - } + if( !built.pre_terrain.empty() && ( ( built.pre_is_furniture && + furn_id( built.pre_terrain ) == g->m.furn( src_loc ) ) || ( !built.pre_is_furniture && + ter_id( built.pre_terrain ) == g->m.ter( src_loc ) ) ) ) { + // the pre-req is already built, so the reason is due to lack of tools/components + return std::make_pair( false, NO_COMPONENTS ); } - if( !place_okay ) { - built_chosen = check_build_pre( built ); - // We only got here because the original choice cant be constructed - // Check again, if we still have the same construction, itll fail again. - if( can_construct( built_chosen, src_loc ) && player_can_build( p, pre_inv, built_chosen ) ) { - found_any_pre = true; - break; + built_pre = check_build_pre( built ); + // the pre-terrain requirement is not a possible construction. + if( built_pre.id == built.id ) { + return std::make_pair( false, NO_ZONE ); + } + // so lets check if we can build the pre-req + if( can_construct( built_pre, src_loc ) && player_can_build( p, pre_inv, built_pre ) ) { + return std::make_pair( true, CAN_DO_PREREQ ); + } else { + // Ok we'll go one more pre-req deep - for things like doors and walls that have 3 steps. + construction built_pre_2 = check_build_pre( built_pre ); + if( built_pre.id == built_pre_2.id ) { + //the 2nd pre-req down is not possible to build + return std::make_pair( false, NO_ZONE ); + } + if( can_construct( built_pre, src_loc ) && player_can_build( p, pre_inv, built_pre ) ) { + return std::make_pair( true, CAN_DO_PREREQ_2 ); } + return std::make_pair( false, NO_COMPONENTS_PREREQ_2 ); } - continue; } } - if( !found_any_pre ) { - continue; - } - bool adjacent = false; - for( const tripoint &elem : g->m.points_in_radius( src_loc, 1 ) ) { - if( p.pos() == elem ) { - adjacent = true; - break; + } else if( act == activity_id( "ACT_MULTIPLE_FARM" ) ) { + zones = mgr.get_zones( zone_type_id( "FARM_PLOT" ), + g->m.getabs( src_loc ) ); + for( const zone_data &zone : zones ) { + if( g->m.has_flag_furn( "GROWTH_HARVEST", src_loc ) ) { + // simple work, pulling up plants, nothing else required. + return std::make_pair( true, NEEDS_HARVESTING ); + } else if( g->m.has_flag( "PLOWABLE", src_loc ) && !g->m.has_furn( src_loc ) ) { + if( p.has_quality( quality_id( "DIG" ), 1 ) ) { + // we have a shovel/hoe already, great + return std::make_pair( true, NEEDS_TILLING ); + } else { + // we need a shovel/hoe + return std::make_pair( false, NEEDS_TILLING ); + } + } else if( g->m.has_flag_ter_or_furn( "PLANTABLE", src_loc ) && warm_enough_to_plant( src_loc ) ) { + if( g->m.has_items( src_loc ) ) { + return std::make_pair( false, BLOCKING_TILE ); + } else { + // do we have the required seed on our person? + const auto options = dynamic_cast( zone.get_options() ); + const std::string seed = options.get_seed(); + std::vector seed_inv = p.items_with( []( const item & itm ) { + return itm.is_seed(); + } ); + for( const auto elem : seed_inv ) { + if( elem->typeId() == itype_id( seed ) ) { + return std::make_pair( true, NEEDS_PLANTING ); + } + } + // didnt find the seed, but maybe there are overlapping farm zones + // and another of the zones is for a seed that we have + // so loop again, and return false once all zones done. + } + + } else { + // cant plant, till or harvest + return std::make_pair( false, ALREADY_DONE ); } + } - if( !adjacent ) { - std::vector route = route_adjacent( p, src_loc ); + // looped through all zones, and only got here if its plantable, but have no seeds. + return std::make_pair( false, NEEDS_PLANTING ); + } else if( act == activity_id( "ACT_FETCH_REQUIRED" ) ) { + // we check if its possible to get all the requirements for fetching at two other places. + // 1. before we even assign the fetch activity and; + // 2. when we form the src_set to loop through at the beginning of the fetch activity. + return std::make_pair( true, CAN_DO_FETCH ); + } + // Shouldnt get here because the zones were checked previously. if it does, set enum reason as "no zone" + return std::make_pair( false, NO_ZONE ); +} - // check if we found path to source / adjacent tile - if( route.empty() ) { - add_msg( m_info, _( "%s can't reach the source tile to construct." ), - p.disp_name() ); - return; +static std::vector> requirements_map( player &p ) +{ + const requirement_data things_to_fetch = requirement_id( p.backlog.front().str_values[0] ).obj(); + const activity_id activity_to_restore = p.backlog.front().id(); + // NOLINTNEXTLINE(performance-unnecessary-copy-initialization) + requirement_id things_to_fetch_id = things_to_fetch.id(); + std::vector> req_comps = things_to_fetch.get_components(); + std::vector> tool_comps = things_to_fetch.get_tools(); + std::vector> quality_comps = things_to_fetch.get_qualities(); + const units::volume volume_allowed = p.volume_capacity() - p.volume_carried(); + const units::mass weight_allowed = p.weight_capacity() - p.weight_carried(); + zone_manager &mgr = zone_manager::get_manager(); + const bool pickup_task = p.backlog.front().id() == activity_id( "ACT_MULTIPLE_FARM" ); + // where it is, what it is, how much of it, and how much in total is required of that item. + std::vector> requirement_map; + std::vector> final_map; + std::vector loot_spots; + std::vector already_there_spots; + std::vector combined_spots; + std::map total_map; + for( const auto elem : g->m.points_in_radius( g->m.getlocal( p.backlog.front().placement ), + PICKUP_RANGE - 1 ) ) { + already_there_spots.push_back( elem ); + combined_spots.push_back( elem ); + } + for( const tripoint elem : mgr.get_point_set_loot( g->m.getabs( p.pos() ), 60, p.is_npc() ) ) { + // if there is a loot zone thats already near the work spot, we dont want it to be added twice. + if( std::find( already_there_spots.begin(), already_there_spots.end(), + elem ) != already_there_spots.end() ) { + // construction tasks dont need the loot spot *and* the already_there/cmbined spots both added. + // but a farming task will need to go and fetch the tool no matter if its near the work spot. + // wheras the construction will automaticlaly use whats nearby anyway. + if( pickup_task ) { + loot_spots.push_back( elem ); + } else { + continue; + } + } else { + loot_spots.push_back( elem ); + combined_spots.push_back( elem ); + } + } + // if the requirements arent available, then stop. + if( !are_requirements_nearby( pickup_task ? loot_spots : combined_spots, things_to_fetch_id, p, + activity_to_restore, pickup_task ) ) { + return requirement_map; + } + // if the requirements are already near the work spot and its a construction/crafting task, then no need to fetch anything more. + if( !pickup_task && + are_requirements_nearby( already_there_spots, things_to_fetch_id, p, activity_to_restore, + false ) ) { + return requirement_map; + } + // a vector of every item in every tile that matches any part of the requirements. + // will be filtered for amounts/charges afterwards. + for( tripoint point_elem : pickup_task ? loot_spots : combined_spots ) { + std::map temp_map; + for( auto &stack_elem : g->m.i_at( point_elem ) ) { + for( std::vector &elem : req_comps ) { + for( item_comp &comp_elem : elem ) { + if( comp_elem.type == stack_elem.typeId() ) { + // if its near the work site, we can remove a count from the requirements. + // if two "lines" of the requirement have the same component appearing again + // that is fine, we will choose which "line" to fulfill later, and the decrement will count towards that then. + if( !pickup_task && + std::find( already_there_spots.begin(), already_there_spots.end(), + point_elem ) != already_there_spots.end() ) { + comp_elem.count -= stack_elem.count(); + } + temp_map[stack_elem.typeId()] += stack_elem.count(); + } + } + } + for( std::vector &elem : tool_comps ) { + for( tool_comp &comp_elem : elem ) { + if( comp_elem.type == stack_elem.typeId() ) { + if( !pickup_task && + std::find( already_there_spots.begin(), already_there_spots.end(), + point_elem ) != already_there_spots.end() ) { + comp_elem.count -= stack_elem.count(); + } + temp_map[stack_elem.typeId()] += stack_elem.count(); + } + } } - // set the destination and restart activity after player arrives there - // we don't need to check for safe mode, - // activity will be restarted only if - // player arrives on destination tile - p.set_destination( route, player_activity( act_multiple_construction ) ); - return; + for( std::vector &elem : quality_comps ) { + for( quality_requirement &comp_elem : elem ) { + const quality_id tool_qual = comp_elem.type; + const int qual_level = comp_elem.level; + if( stack_elem.has_quality( tool_qual, qual_level ) ) { + // check for weight/volume if its a task that involves needing a carried tool + // this is a shovel, we can just return this, nothing else is needed. + if( pickup_task && stack_elem.volume() < volume_allowed && + stack_elem.weight() < weight_allowed && + std::find( loot_spots.begin(), loot_spots.end(), point_elem ) != loot_spots.end() ) { + std::vector> ret; + ret.push_back( std::make_tuple( point_elem, stack_elem.typeId(), 1 ) ); + return ret; + } + if( !pickup_task && + std::find( already_there_spots.begin(), already_there_spots.end(), + point_elem ) != already_there_spots.end() ) { + comp_elem.count -= stack_elem.count(); + } + temp_map[stack_elem.typeId()] += stack_elem.count(); + } + } + } } - // if it's too dark to construct there - const bool enough_light = p.fine_detail_vision_mod() <= 4; - if( !enough_light ) { - p.add_msg_if_player( m_info, _( "It is too dark to construct anything." ) ); - return; + for( auto map_elem : temp_map ) { + total_map[map_elem.first] += map_elem.second; + // if its a construction/crafting task, we can discount any items already near the work spot + // we dont need to fetch those, they will be used automatically in the construction. + // a shovel for tilling, for example, however, needs to be picked up, no matter if its near the spot or not. + if( !pickup_task ) { + if( std::find( already_there_spots.begin(), already_there_spots.end(), + point_elem ) != already_there_spots.end() ) { + continue; + } + } + requirement_map.push_back( std::make_tuple( point_elem, map_elem.first, map_elem.second ) ); } - // check if can do the construction now we are actually there - const std::vector &post_zones = mgr.get_zones( zone_type_id( "CONSTRUCTION_BLUEPRINT" ), - g->m.getabs( src_loc ) ); - construction post_built_chosen; - p.invalidate_crafting_inventory(); - const inventory &total_inv = p.crafting_inventory(); - bool found_any = false; - - for( const zone_data &zone : post_zones ) { - const blueprint_options options = dynamic_cast( zone.get_options() ); - const int index = options.get_index(); - const std::vector &list_constructions = get_constructions(); - const construction &built = list_constructions[index]; - // maybe it's already built? - if( !built.post_terrain.empty() ) { - if( built.post_is_furniture ) { - furn_id f = furn_id( built.post_terrain ); - if( g->m.furn( src_loc ) == f ) { + } + // Ok we now have a list of all the items that match the requirements, their points, and a quantity for each one. + // we need to consolidate them, and winnow it down to the minimum required counts, instead of all matching. + for( std::vector &elem : req_comps ) { + bool line_found = false; + for( item_comp &comp_elem : elem ) { + if( line_found || comp_elem.count <= 0 ) { + break; + } + int quantity_required = comp_elem.count; + int item_quantity = 0; + auto it = requirement_map.begin(); + int remainder = 0; + while( it != requirement_map.end() ) { + tripoint pos_here = std::get<0>( *it ); + itype_id item_here = std::get<1>( *it ); + int quantity_here = std::get<2>( *it ); + if( comp_elem.type == item_here ) { + item_quantity += quantity_here; + } + if( item_quantity >= quantity_required ) { + // it's just this spot that can fulfil the requirement on its own + final_map.push_back( std::make_tuple( pos_here, item_here, std::min( quantity_here, + quantity_required ) ) ); + if( quantity_here >= quantity_required ) { + line_found = true; break; + } else { + remainder = quantity_required - quantity_here; } - } else { - ter_id t = ter_id( built.post_terrain ); - if( g->m.ter( src_loc ) == t ) { + break; + } + it++; + } + if( line_found ) { + while( true ) { + // go back over things + if( it == requirement_map.begin() ) { break; } + if( remainder <= 0 ) { + line_found = true; + break; + } + tripoint pos_here2 = std::get<0>( *it ); + itype_id item_here2 = std::get<1>( *it ); + int quantity_here2 = std::get<2>( *it ); + if( comp_elem.type == item_here2 ) { + if( quantity_here2 >= remainder ) { + final_map.push_back( std::make_tuple( pos_here2, item_here2, remainder ) ); + line_found = true; + } else { + final_map.push_back( std::make_tuple( pos_here2, item_here2, remainder ) ); + remainder -= quantity_here2; + } + } + it--; } } - if( can_construct( built, src_loc ) && player_can_build( p, total_inv, built ) ) { - found_any = true; - post_built_chosen = list_constructions[index]; + } + } + for( std::vector &elem : tool_comps ) { + bool line_found = false; + for( tool_comp &comp_elem : elem ) { + if( line_found || comp_elem.count <= 0 ) { break; - } else { - // cant build it - // maybe we can build the pre-requisite instead - // see if the reason is because of pre-terrain requirement - bool place_okay = true; - if( !built.pre_terrain.empty() ) { - if( built.pre_is_furniture ) { - furn_id f = furn_id( built.pre_terrain ); - place_okay &= g->m.furn( src_loc ) == f; + } + int quantity_required = comp_elem.count; + int item_quantity = 0; + auto it = requirement_map.begin(); + int remainder = 0; + while( it != requirement_map.end() ) { + tripoint pos_here = std::get<0>( *it ); + itype_id item_here = std::get<1>( *it ); + int quantity_here = std::get<2>( *it ); + if( comp_elem.type == item_here ) { + item_quantity += quantity_here; + } + if( item_quantity >= quantity_required ) { + // it's just this spot that can fulfil the requirement on its own + final_map.push_back( std::make_tuple( pos_here, item_here, std::min( quantity_here, + quantity_required ) ) ); + if( quantity_here >= quantity_required ) { + line_found = true; + break; } else { - ter_id t = ter_id( built.pre_terrain ); - place_okay &= g->m.ter( src_loc ) == t; + remainder = quantity_required - quantity_here; } + break; } - if( !place_okay ) { - post_built_chosen = check_build_pre( built ); - if( can_construct( post_built_chosen, src_loc ) && - player_can_build( p, total_inv, post_built_chosen ) ) { - found_any = true; + it++; + } + if( line_found ) { + while( true ) { + // go back over things + if( it == requirement_map.begin() ) { break; } + if( remainder <= 0 ) { + line_found = true; + break; + } + tripoint pos_here2 = std::get<0>( *it ); + itype_id item_here2 = std::get<1>( *it ); + int quantity_here2 = std::get<2>( *it ); + if( comp_elem.type == item_here2 ) { + if( quantity_here2 >= remainder ) { + final_map.push_back( std::make_tuple( pos_here2, item_here2, remainder ) ); + line_found = true; + } else { + final_map.push_back( std::make_tuple( pos_here2, item_here2, remainder ) ); + remainder -= quantity_here2; + } + } + it--; } - continue; } } - if( !found_any ) { - continue; + } + for( std::vector &elem : quality_comps ) { + bool line_found = false; + for( quality_requirement &comp_elem : elem ) { + if( line_found || comp_elem.count <= 0 ) { + break; + } + const quality_id tool_qual = comp_elem.type; + const int qual_level = comp_elem.level; + for( auto it = requirement_map.begin(); it != requirement_map.end(); ) { + tripoint pos_here = std::get<0>( *it ); + itype_id item_here = std::get<1>( *it ); + item test_item = item( item_here, 0 ); + if( test_item.has_quality( tool_qual, qual_level ) ) { + // it's just this spot that can fulfil the requirement on its own + final_map.push_back( std::make_tuple( pos_here, item_here, 1 ) ); + line_found = true; + break; + } + it++; + } } - std::list used; - // create the partial construction struct - partial_con pc; - pc.id = built_chosen.id; - pc.counter = 0; - // Set the trap that has the examine function - if( g->m.tr_at( src_loc ).loadid == tr_null ) { - g->m.trap_set( src_loc, tr_unfinished_construction ); - } - // Use up the components - for( const std::vector &it : built_chosen.requirements->get_components() ) { - std::list tmp = p.consume_items( it, 1, is_crafting_component ); - used.splice( used.end(), tmp ); - } - pc.components = used; - g->m.partial_con_set( src_loc, pc ); - for( const std::vector &it : built_chosen.requirements->get_tools() ) { - p.consume_tools( it ); - } - p.backlog.push_front( act_multiple_construction ); - p.assign_activity( activity_id( "ACT_BUILD" ) ); - p.activity.placement = g->m.getabs( src_loc ); - return; } - if( p.moves <= 0 ) { - // Restart activity and break from cycle. - p.assign_activity( act_multiple_construction ); - return; + return final_map; +} + +static bool plant_activity( player &p, const zone_data *zone, const tripoint src_loc ) +{ + const std::string seed = dynamic_cast( zone->get_options() ).get_seed(); + std::vector seed_inv = p.items_with( [seed]( const item & itm ) { + return itm.typeId() == itype_id( seed ); + } ); + // we dont have the required seed, even though we should at this point. + // move onto the next tile, and if need be that will prompt a fetch seeds activity. + if( seed_inv.empty() ) { + return false; } + iexamine::plant_seed( p, src_loc, itype_id( seed ) ); + return true; +} - // If we got here without restarting the activity, it means we're done. - if( p.is_npc() ) { - npc *guy = dynamic_cast( &p ); - guy->current_activity_id = activity_id::NULL_ID(); - guy->revert_after_activity(); +static void construction_activity( player &p, const zone_data *zone, const tripoint src_loc, + do_activity_reason reason, const std::vector &list_constructions, + activity_id activity_to_restore ) +{ + const blueprint_options options = dynamic_cast( zone->get_options() ); + // the actual desired construction + construction built_chosen; + if( reason == CAN_DO_CONSTRUCTION ) { + built_chosen = list_constructions[options.get_index()]; + } else if( reason == CAN_DO_PREREQ ) { + built_chosen = check_build_pre( list_constructions[options.get_index()] ); + } else { + built_chosen = check_build_pre( check_build_pre( list_constructions[options.get_index()] ) ); + } + std::list used; + // create the partial construction struct + partial_con pc; + pc.id = built_chosen.id; + pc.counter = 0; + // Set the trap that has the examine function + if( g->m.tr_at( src_loc ).loadid == tr_null ) { + g->m.trap_set( src_loc, tr_unfinished_construction ); + } + // Use up the components + for( const std::vector &it : built_chosen.requirements->get_components() ) { + std::list tmp = p.consume_items( it, 1, is_crafting_component ); + used.splice( used.end(), tmp ); + } + pc.components = used; + g->m.partial_con_set( src_loc, pc ); + for( const std::vector &it : built_chosen.requirements->get_tools() ) { + p.consume_tools( it ); } + p.backlog.push_front( activity_to_restore ); + p.assign_activity( activity_id( "ACT_BUILD" ) ); + p.activity.placement = g->m.getabs( src_loc ); } -void activity_on_turn_move_loot( player_activity &, player &p ) +static bool tidy_activity( player &p, const tripoint src_loc, activity_id activity_to_restore ) { - const activity_id act_move_loot = activity_id( "ACT_MOVE_LOOT" ); auto &mgr = zone_manager::get_manager(); - if( g->m.check_vehicle_zones( g->get_levz() ) ) { - mgr.cache_vzones(); + tripoint loot_abspos = g->m.getabs( src_loc ); + tripoint loot_src_lot; + if( mgr.has_near( z_loot_unsorted, loot_abspos, 60 ) ) { + const auto &zone_src_set = mgr.get_near( zone_type_id( "LOOT_UNSORTED" ), loot_abspos, 60 ); + const auto &zone_src_sorted = get_sorted_tiles_by_distance( loot_abspos, zone_src_set ); + // Find the nearest unsorted zone to dump objects at + for( auto &src_elem : zone_src_sorted ) { + if( !g->m.can_put_items_ter_furn( g->m.getlocal( src_elem ) ) ) { + continue; + } + loot_src_lot = g->m.getlocal( src_elem ); + break; + } + } + if( loot_src_lot == tripoint_zero ) { + return false; } - const auto abspos = g->m.getabs( p.pos() ); - const auto &src_set = mgr.get_near( zone_type_id( "LOOT_UNSORTED" ), abspos ); + auto items_there = g->m.i_at( src_loc ); + vehicle *dest_veh; + int dest_part; + if( const cata::optional vp = g->m.veh_at( + loot_src_lot ).part_with_feature( "CARGO", + false ) ) { + dest_veh = &vp->vehicle(); + dest_part = vp->part_index(); + } else { + dest_veh = nullptr; + dest_part = -1; + } + for( auto &it : items_there ) { + if( it.has_var( "activity_var" ) && it.get_var( "activity_var", "" ) == p.name ) { + move_item( p, it, it.count(), src_loc, loot_src_lot, dest_veh, dest_part, + activity_to_restore ); + break; + } + } + // we are adjacent to an unsorted zone, we came here to just drop items we are carrying + if( mgr.has( zone_type_id( z_loot_unsorted ), g->m.getabs( src_loc ) ) ) { + for( auto inv_elem : p.inv_dump() ) { + if( inv_elem->has_var( "activity_var" ) ) { + inv_elem->erase_var( "activity_var" ); + p.drop( p.get_item_position( inv_elem ), src_loc ); + } + } + } + return true; +} + +static void fetch_activity( player &p, const tripoint src_loc, activity_id activity_to_restore ) +{ + if( !g->m.can_put_items_ter_furn( g->m.getlocal( p.backlog.front().coords.back() ) ) ) { + return; + } + const std::vector> mental_map_2 = requirements_map( p ); + int pickup_count = 1; + auto items_there = g->m.i_at( src_loc ); + vehicle *src_veh = nullptr; + int src_part = 0; + if( const cata::optional vp = g->m.veh_at( src_loc ).part_with_feature( "CARGO", + false ) ) { + src_veh = &vp->vehicle(); + src_part = vp->part_index(); + } + std::string picked_up; + const units::volume volume_allowed = p.volume_capacity() - p.volume_carried(); + const units::mass weight_allowed = p.weight_capacity() - p.weight_carried(); + // TODO : vehicle_stack and map_stack into one loop. + if( src_veh ) { + for( auto &veh_elem : src_veh->get_items( src_part ) ) { + for( auto elem : mental_map_2 ) { + if( std::get<0>( elem ) == src_loc && veh_elem.typeId() == std::get<1>( elem ) ) { + if( !p.backlog.empty() && p.backlog.front().id() == activity_id( "ACT_MULTIPLE_CONSTRUCTION" ) ) { + move_item( p, veh_elem, veh_elem.count_by_charges() ? std::get<2>( elem ) : 1, src_loc, + g->m.getlocal( p.backlog.front().coords.back() ), src_veh, src_part, activity_to_restore ); + return; + } + } + } + } + } + for( auto it = items_there.begin(); it != items_there.end(); it++ ) { + for( auto elem : mental_map_2 ) { + if( std::get<0>( elem ) == src_loc && it->typeId() == std::get<1>( elem ) ) { + // construction/crafting tasks want the requred item moved near the work spot. + if( !p.backlog.empty() && p.backlog.front().id() == activity_id( "ACT_MULTIPLE_CONSTRUCTION" ) ) { + move_item( p, *it, it->count_by_charges() ? std::get<2>( elem ) : 1, src_loc, + g->m.getlocal( p.backlog.front().coords.back() ), src_veh, src_part, activity_to_restore ); + return; + // other tasks want the tool picked up + } else if( !p.backlog.empty() && p.backlog.front().id() == activity_id( "ACT_MULTIPLE_FARM" ) ) { + if( it->volume() > volume_allowed || it->weight() > weight_allowed ) { + continue; + } + item leftovers = *it; + + if( pickup_count != 1 && it->count_by_charges() ) { + // Reinserting leftovers happens after item removal to avoid stacking issues. + leftovers.charges = it->charges - pickup_count; + if( leftovers.charges > 0 ) { + it->charges = pickup_count; + } + } else { + leftovers.charges = 0; + } + it->set_var( "activity_var", p.name ); + p.i_add( *it ); + picked_up = it->tname(); + items_there.erase( it ); + // If we didn't pick up a whole stack, put the remainder back where it came from. + if( leftovers.charges > 0 ) { + g->m.add_item_or_charges( src_loc, leftovers ); + } + if( p.is_npc() && !picked_up.empty() ) { + if( pickup_count == 1 ) { + add_msg( _( "%1$s picks up a %2$s." ), p.disp_name(), picked_up ); + } else { + add_msg( _( "%s picks up several items." ), p.disp_name() ); + } + } + return; + } + } + } + } +} + +static bool move_loot_activity( player &p, tripoint src_loc, zone_manager &mgr, + activity_id activity_to_restore ) +{ + // the boolean in this pair being true indicates the item is from a vehicle storage space + auto items = std::vector>(); vehicle *src_veh, *dest_veh; int src_part, dest_part; + tripoint src = g->m.getabs( src_loc ); + tripoint abspos = g->m.getabs( p.pos() ); + //Check source for cargo part + //map_stack and vehicle_stack are different types but inherit from item_stack + // TODO: use one for loop + if( const cata::optional vp = g->m.veh_at( src_loc ).part_with_feature( "CARGO", + false ) ) { + src_veh = &vp->vehicle(); + src_part = vp->part_index(); + for( auto &it : src_veh->get_items( src_part ) ) { + items.push_back( std::make_pair( &it, true ) ); + } + } else { + src_veh = nullptr; + src_part = -1; + } + for( auto &it : g->m.i_at( src_loc ) ) { + items.push_back( std::make_pair( &it, false ) ); + } + //Skip items that have already been processed + for( auto it = items.begin() + mgr.get_num_processed( src ); it < items.end(); it++ ) { - // Nuke the current activity, leaving the backlog alone. - p.activity = player_activity(); + mgr.increment_num_processed( src ); + + const auto thisitem = it->first; + + if( thisitem->made_of_from_type( LIQUID ) ) { // skip unpickable liquid + continue; + } + + // Only if it's from a vehicle do we use the vehicle source location information. + vehicle *this_veh = it->second ? src_veh : nullptr; + const int this_part = it->second ? src_part : -1; - // sort source tiles by distance - const auto &src_sorted = get_sorted_tiles_by_distance( abspos, src_set ); + const auto id = mgr.get_near_zone_type_for_item( *thisitem, abspos ); - if( !mgr.is_sorting() ) { - mgr.start_sort( src_sorted ); + // checks whether the item is already on correct loot zone or not + // if it is, we can skip such item, if not we move the item to correct pile + // think empty bag on food pile, after you ate the content + if( !mgr.has( id, src ) ) { + const auto &dest_set = mgr.get_near( id, abspos ); + + for( auto &dest : dest_set ) { + const auto &dest_loc = g->m.getlocal( dest ); + + //Check destination for cargo part + if( const cata::optional vp = g->m.veh_at( dest_loc ).part_with_feature( "CARGO", + false ) ) { + dest_veh = &vp->vehicle(); + dest_part = vp->part_index(); + } else { + dest_veh = nullptr; + dest_part = -1; + } + + // skip tiles with inaccessible furniture, like filled charcoal kiln + if( !g->m.can_put_items_ter_furn( dest_loc ) ) { + continue; + } + + units::volume free_space; + // if there's a vehicle with space do not check the tile beneath + if( dest_veh ) { + free_space = dest_veh->free_volume( dest_part ); + } else { + free_space = g->m.free_volume( dest_loc ); + } + // check free space at destination + if( free_space >= thisitem->volume() ) { + move_item( p, *thisitem, thisitem->count(), src_loc, dest_loc, this_veh, this_part ); + + // moved item away from source so decrement + mgr.decrement_num_processed( src ); + + break; + } + } + if( p.moves <= 0 ) { + // Restart activity and break from cycle. + p.assign_activity( activity_to_restore ); + mgr.end_sort(); + return true; + } + } } + return false; +} - for( auto &src : src_sorted ) { - const auto &src_loc = g->m.getlocal( src ); +static std::string random_string( size_t length ) +{ + auto randchar = []() -> char { + const char charset[] = + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz"; + const size_t max_index = ( sizeof( charset ) - 1 ); + return charset[rand() % max_index]; + }; + std::string str( length, 0 ); + std::generate_n( str.begin(), length, randchar ); + return str; +} + +void generic_multi_activity_handler( player_activity &act, player &p ) +{ + // First get the things that are activity-agnostic. + zone_manager &mgr = zone_manager::get_manager(); + const tripoint abspos = g->m.getabs( p.pos() ); + // NOLINTNEXTLINE(performance-unnecessary-copy-initialization) + activity_id activity_to_restore = act.id(); + const tripoint localpos = p.pos(); + bool dark_capable = false; + // the set of target work spots - potentally after we have fetched required tools. + std::unordered_set src_set; + // we may need a list of all constructions later. + const std::vector &list_constructions = get_constructions(); + // Nuke the current activity, leaving the backlog alone + p.activity = player_activity(); + // now we setup the target spots based on whch activity is occuring + if( activity_to_restore == activity_id( "ACT_MOVE_LOOT" ) ) { + dark_capable = true; + if( g->m.check_vehicle_zones( g->get_levz() ) ) { + mgr.cache_vzones(); + } + src_set = mgr.get_near( zone_type_id( "LOOT_UNSORTED" ), abspos ); + } + if( activity_to_restore == activity_id( "ACT_TIDY_UP" ) ) { + dark_capable = true; + tripoint unsorted_spot; + for( const tripoint elem : g->m.points_in_radius( g->m.getlocal( abspos ), 60 ) ) { + if( mgr.has( zone_type_id( z_loot_unsorted ), g->m.getabs( elem ) ) ) { + // it already has a unsorted loot spot, and therefore dont need to go and pick up items there. + if( unsorted_spot == tripoint_zero ) { + unsorted_spot = elem; + } + continue; + } + for( const auto &stack_elem : g->m.i_at( elem ) ) { + if( stack_elem.has_var( "activity_var" ) && stack_elem.get_var( "activity_var", "" ) == p.name ) { + const furn_t &f = g->m.furn( elem ).obj(); + if( !f.has_flag( "PLANT" ) ) { + src_set.insert( g->m.getabs( elem ) ); + break; + } + } + } + } + if( src_set.empty() && unsorted_spot != tripoint_zero ) { + for( auto inv_elem : p.inv_dump() ) { + if( inv_elem->has_var( "activity_var" ) ) { + // we've gone to tidy up all the thngs lying around, now tidy up the things we picked up. + src_set.insert( g->m.getabs( unsorted_spot ) ); + break; + } + } + } + } + // multiple construction will form a list of targets based on blueprint zones and unfinished constructions + if( activity_to_restore == activity_id( "ACT_MULTIPLE_CONSTRUCTION" ) ) { + src_set = mgr.get_near( zone_type_id( "CONSTRUCTION_BLUEPRINT" ), abspos, 60 ); + for( const tripoint &elem : g->m.points_in_radius( localpos, 40 ) ) { + partial_con *pc = g->m.partial_con_at( elem ); + if( pc ) { + src_set.insert( g->m.getabs( elem ) ); + } + } + // farming activies encompass tilling, planting, harvesting. + } + if( activity_to_restore == activity_id( "ACT_MULTIPLE_FARM" ) ) { + src_set = mgr.get_near( zone_type_id( "FARM_PLOT" ), abspos, 60 ); + // fetch required will always be following on from a previous activity + } + if( activity_to_restore == activity_id( "ACT_FETCH_REQUIRED" ) ) { + dark_capable = true; + // get the right zones for the items in the requirements. + // we previously checked if the items are nearby before we set the fetch task + // but we will check again later, to be sure nothings changed. + std::vector> mental_map = requirements_map( p ); + for( auto elem : mental_map ) { + tripoint elem_point = std::get<0>( elem ); + src_set.insert( g->m.getabs( elem_point ) ); + } + } + // prune the set to remove tiles that are never gonna work out. + for( auto it2 = src_set.begin(); it2 != src_set.end(); ) { + // remove dangerous tiles + tripoint set_pt = g->m.getlocal( *it2 ); + if( g->m.dangerous_field_at( set_pt ) ) { + it2 = src_set.erase( it2 ); + // remove tiles in darkness, if we arent lit-up ourselves + } else if( !dark_capable && p.fine_detail_vision_mod( set_pt ) > 4.0 ) { + it2 = src_set.erase( it2 ); + } else { + ++it2; + } + } + // now we have our final set of points + std::vector src_sorted = get_sorted_tiles_by_distance( abspos, src_set ); + if( activity_to_restore == activity_id( "ACT_MOVE_LOOT" ) ) { + if( !mgr.is_sorting() ) { + mgr.start_sort( src_sorted ); + } + } + // now loop through the work-spot tiles and judge whether its worth travelling to it yet + // or if we need to fetch something first. + for( const tripoint &src : src_sorted ) { + const tripoint &src_loc = g->m.getlocal( src ); if( !g->m.inbounds( src_loc ) ) { if( !g->m.inbounds( p.pos() ) ) { // p is implicitly an NPC that has been moved off the map, so reset the activity // and unload them - p.assign_activity( act_move_loot ); + p.assign_activity( activity_to_restore ); p.set_moves( 0 ); g->reload_npcs(); - mgr.end_sort(); + if( activity_to_restore == activity_id( "ACT_MOVE_LOOT" ) ) { + mgr.end_sort(); + } return; } - std::vector route; - route = g->m.route( p.pos(), src_loc, p.get_pathfinding_settings(), - p.get_path_avoid() ); + const std::vector route = route_adjacent( p, src_loc ); if( route.empty() ) { // can't get there, can't do anything, skip it continue; } - p.set_destination( route, player_activity( act_move_loot ) ); - mgr.end_sort(); + p.set_moves( 0 ); + p.set_destination( route, player_activity( activity_to_restore ) ); return; } - - bool is_adjacent_or_closer = square_dist( p.pos(), src_loc ) <= 1; - - // skip tiles in IGNORE zone and tiles on fire - // (to prevent taking out wood off the lit brazier) - // and inaccessible furniture, like filled charcoal kiln - if( mgr.has( zone_type_id( "LOOT_IGNORE" ), src ) || - g->m.get_field( src_loc, fd_fire ) != nullptr || - !g->m.can_put_items_ter_furn( src_loc ) ) { + std::pair check_can_do = can_do_activity_there( activity_to_restore, p, + src_loc ); + const bool can_do_it = check_can_do.first; + const do_activity_reason reason = check_can_do.second; + const zone_data *zone = mgr.get_zone_at( src ); + const bool needs_to_be_in_zone = activity_to_restore == activity_id( "ACT_FETCH_REQUIRED" ) || + activity_to_restore == activity_id( "ACT_MULTIPLE_FARM" ) || + ( activity_to_restore == activity_id( "ACT_MULTIPLE_CONSTRUCTION" ) && + !g->m.partial_con_at( src_loc ) ); + // some activities require the target tile to be part of a zone. + // tidy up activity dosnt - it wants things that may not be in a zone already - things that may have been left lying around. + if( needs_to_be_in_zone && !zone ) { continue; } - - // the boolean in this pair being true indicates the item is from a vehicle storage space - auto items = std::vector>(); - - //Check source for cargo part - //map_stack and vehicle_stack are different types but inherit from item_stack - // TODO: use one for loop - if( const cata::optional vp = g->m.veh_at( src_loc ).part_with_feature( "CARGO", - false ) ) { - src_veh = &vp->vehicle(); - src_part = vp->part_index(); - for( auto &it : src_veh->get_items( src_part ) ) { - items.push_back( std::make_pair( &it, true ) ); + if( ( !can_do_it ) && ( reason == DONT_HAVE_SKILL || reason == NO_ZONE || reason == ALREADY_DONE || + reason == BLOCKING_TILE || reason == UNKNOWN_ACTIVITY ) ) { + // we can discount this tile, the work can't be done. + if( reason == DONT_HAVE_SKILL ) { + p.add_msg_if_player( m_info, _( "You don't have the skill for this task." ) ); + } else if( reason == BLOCKING_TILE ) { + p.add_msg_if_player( m_info, _( "There is something blocking the location for this task." ) ); + } else { + p.add_msg_if_player( m_info, _( "You cannot do this task there." ) ); } - } else { - src_veh = nullptr; - src_part = -1; - } - for( auto &it : g->m.i_at( src_loc ) ) { - items.push_back( std::make_pair( &it, false ) ); - } - //Skip items that have already been processed - for( auto it = items.begin() + mgr.get_num_processed( src ); it < items.end(); it++ ) { - - mgr.increment_num_processed( src ); - - const auto thisitem = it->first; - - if( thisitem->made_of_from_type( LIQUID ) ) { // skip unpickable liquid - continue; + continue; + } else if( ( !can_do_it ) && ( reason == NO_COMPONENTS || reason == NEEDS_PLANTING || + reason == NEEDS_TILLING ) ) { + // we can do it, but we need to fetch some stuff first + // before we set the task to fetch components - is it even worth it? are the components anywhere? + requirement_id what_we_need; + std::vector loot_zone_spots; + std::vector combined_spots; + for( const tripoint elem : mgr.get_point_set_loot( abspos, 60, p.is_npc() ) ) { + loot_zone_spots.push_back( elem ); + combined_spots.push_back( elem ); } - - // Only if it's from a vehicle do we use the vehicle source location information. - vehicle *this_veh = it->second ? src_veh : nullptr; - const int this_part = it->second ? src_part : -1; - - const auto id = mgr.get_near_zone_type_for_item( *thisitem, abspos ); - - // checks whether the item is already on correct loot zone or not - // if it is, we can skip such item, if not we move the item to correct pile - // think empty bag on food pile, after you ate the content - if( !mgr.has( id, src ) ) { - const auto &dest_set = mgr.get_near( id, abspos, 60, thisitem ); - - for( auto &dest : dest_set ) { - const auto &dest_loc = g->m.getlocal( dest ); - - //Check destination for cargo part - if( const cata::optional vp = g->m.veh_at( dest_loc ).part_with_feature( "CARGO", - false ) ) { - dest_veh = &vp->vehicle(); - dest_part = vp->part_index(); - } else { - dest_veh = nullptr; - dest_part = -1; + for( const tripoint elem : g->m.points_in_radius( src_loc, PICKUP_RANGE - 1 ) ) { + combined_spots.push_back( elem ); + } + if( ( reason == NO_COMPONENTS || reason == NO_COMPONENTS_PREREQ || + reason == NO_COMPONENTS_PREREQ_2 ) && + activity_to_restore == activity_id( "ACT_MULTIPLE_CONSTRUCTION" ) ) { + // its a construction and we need the components. + const blueprint_options options = dynamic_cast( zone->get_options() ); + construction built_chosen; + if( reason == NO_COMPONENTS ) { + built_chosen = list_constructions[options.get_index()]; + } else if( reason == NO_COMPONENTS_PREREQ ) { + built_chosen = check_build_pre( list_constructions[options.get_index()] ); + } else { + built_chosen = check_build_pre( check_build_pre( list_constructions[options.get_index()] ) ); + } + what_we_need = built_chosen.requirements; + } else if( reason == NEEDS_TILLING || reason == NEEDS_PLANTING ) { + std::vector> requirement_comp_vector; + std::vector> quality_comp_vector; + std::vector> tool_comp_vector; + if( reason == NEEDS_TILLING ) { + quality_comp_vector.push_back( std::vector { quality_requirement( quality_id( "DIG" ), 1, 1 ) } ); + } else if( reason == NEEDS_PLANTING ) { + requirement_comp_vector.push_back( std::vector { item_comp( itype_id( dynamic_cast + ( zone->get_options() ).get_seed() ), 1 ) + } ); + } + // ok, we need a shovel/hoe/axe/etc + // this is an activity that only requires this one tool, so we will fetch and wield it. + requirement_data reqs_data = requirement_data( tool_comp_vector, quality_comp_vector, + requirement_comp_vector ); + const std::string ran_str = random_string( 10 ); + const requirement_id req_id( ran_str ); + requirement_data::save_requirement( reqs_data, req_id ); + what_we_need = req_id; + } + bool tool_pickup = reason == NEEDS_TILLING || reason == NEEDS_PLANTING; + // is it even worth fetching anything if there isnt enough nearby? + if( !are_requirements_nearby( tool_pickup ? loot_zone_spots : combined_spots, what_we_need, p, + activity_to_restore, tool_pickup ) ) { + p.add_msg_if_player( m_info, _( "The required items are not available to complete this task." ) ); + continue; + } else { + p.backlog.push_front( activity_to_restore ); + p.assign_activity( activity_id( "ACT_FETCH_REQUIRED" ) ); + p.backlog.front().str_values.push_back( what_we_need.str() ); + p.backlog.front().values.push_back( reason ); + // come back here after succesfully fetching your stuff + std::vector candidates; + if( p.backlog.front().coords.empty() ) { + std::vector local_src_set; + for( const auto elem : src_set ) { + local_src_set.push_back( g->m.getlocal( elem ) ); } - - // skip tiles with inaccessible furniture, like filled charcoal kiln - if( !g->m.can_put_items_ter_furn( dest_loc ) ) { - continue; + std::vector candidates; + for( const auto point_elem : g->m.points_in_radius( src_loc, PICKUP_RANGE - 1 ) ) { + // we dont want to place the components where they could interfere with our ( or someone elses ) construction spots + if( ( std::find( local_src_set.begin(), local_src_set.end(), + point_elem ) != local_src_set.end() ) || !g->m.can_put_items_ter_furn( point_elem ) ) { + continue; + } + candidates.push_back( point_elem ); } - - units::volume free_space; - // if there's a vehicle with space do not check the tile beneath - if( dest_veh ) { - free_space = dest_veh->free_volume( dest_part ); - } else { - free_space = g->m.free_volume( dest_loc ); + if( candidates.empty() ) { + p.activity = player_activity(); + p.backlog.clear(); + return; } - // check free space at destination - if( free_space >= thisitem->volume() ) { - // before we move any item, check if player is at or - // adjacent to the loot source tile - if( !is_adjacent_or_closer ) { - std::vector route; - bool adjacent = false; - - // get either direct route or route to nearest adjacent tile if - // source tile is impassable - if( g->m.passable( src_loc ) ) { - route = g->m.route( p.pos(), src_loc, p.get_pathfinding_settings(), - p.get_path_avoid() ); - } else { - // immpassable source tile (locker etc.), - // get route to nerest adjacent tile instead - route = route_adjacent( p, src_loc ); - adjacent = true; - } - - // check if we found path to source / adjacent tile - if( route.empty() ) { - add_msg( m_info, _( "%s can't reach the source tile. Try to sort out loot without a cart." ), - p.disp_name() ); - mgr.end_sort(); - return; - } - - // shorten the route to adjacent tile, if necessary - if( !adjacent ) { - route.pop_back(); - } - - // set the destination and restart activity after player arrives there - // we don't need to check for safe mode, - // activity will be restarted only if - // player arrives on destination tile - p.set_destination( route, player_activity( act_move_loot ) ); - mgr.end_sort(); - return; - } - move_item( p, *thisitem, thisitem->count(), src_loc, dest_loc, this_veh, this_part ); + p.backlog.front().coords.push_back( g->m.getabs( candidates[std::max( 0, + static_cast( candidates.size() / 2 ) )] ) ); + } + p.backlog.front().placement = src; - // moved item away from source so decrement - mgr.decrement_num_processed( src ); + return; + } + } + if( square_dist( p.pos(), src_loc ) > 1 ) { // not adjacent + std::vector route = route_adjacent( p, src_loc ); - break; - } - } - if( p.moves <= 0 ) { - // Restart activity and break from cycle. - p.assign_activity( act_move_loot ); + // check if we found path to source / adjacent tile + if( route.empty() ) { + if( activity_to_restore == activity_id( "ACT_MOVE_LOOT" ) ) { mgr.end_sort(); - return; } + return; + } + if( p.moves <= 0 ) { + // Restart activity and break from cycle. + p.assign_activity( activity_to_restore ); + return; + } + // set the destination and restart activity after player arrives there + // we don't need to check for safe mode, + // activity will be restarted only if + // player arrives on destination tile + p.set_destination( route, player_activity( activity_to_restore ) ); + return; + } + // something needs to be done, now we are there. + // it was here earlier, in the space of one turn, maybe it got harvested by someone else. + if( reason == NEEDS_HARVESTING && g->m.has_flag_furn( "GROWTH_HARVEST", src_loc ) ) { + iexamine::harvest_plant( p, src_loc, true ); + } else if( reason == NEEDS_TILLING && g->m.has_flag( "PLOWABLE", src_loc ) && + p.has_quality( quality_id( "DIG" ), 1 ) && !g->m.has_furn( src_loc ) ) { + p.assign_activity( activity_id( "ACT_CHURN" ), 18000, -1 ); + p.backlog.push_front( activity_to_restore ); + p.activity.placement = src; + return; + } else if( reason == NEEDS_PLANTING && g->m.has_flag_ter_or_furn( "PLANTABLE", src_loc ) ) { + if( !plant_activity( p, zone, src_loc ) ) { + continue; + } + } else if( reason == CAN_DO_CONSTRUCTION && g->m.partial_con_at( src_loc ) ) { + p.backlog.push_front( activity_to_restore ); + p.assign_activity( activity_id( "ACT_BUILD" ) ); + p.activity.placement = src; + return; + } else if( reason == CAN_DO_CONSTRUCTION || reason == CAN_DO_PREREQ || reason == CAN_DO_PREREQ_2 ) { + construction_activity( p, zone, src_loc, reason, list_constructions, activity_to_restore ); + return; + } else if( reason == CAN_DO_FETCH && activity_to_restore == activity_id( "ACT_TIDY_UP" ) ) { + if( !tidy_activity( p, src_loc, activity_to_restore ) ) { + return; + } + } else if( reason == CAN_DO_FETCH && activity_to_restore == activity_id( "ACT_FETCH_REQUIRED" ) ) { + fetch_activity( p, src_loc, activity_to_restore ); + return; + } else if( reason == CAN_DO_FETCH && activity_to_restore == activity_id( "ACT_MOVE_LOOT" ) ) { + if( move_loot_activity( p, src_loc, mgr, activity_to_restore ) ) { + return; } + continue; } } - - // If we got here without restarting the activity, it means we're done - add_msg( m_info, _( "%s sorted out every item possible." ), p.disp_name() ); - if( p.is_npc() ) { - npc *guy = dynamic_cast( &p ); - guy->current_activity_id = activity_id::NULL_ID(); + if( p.moves <= 0 ) { + // Restart activity and break from cycle. + p.assign_activity( activity_to_restore ); + if( activity_to_restore == activity_id( "ACT_MOVE_LOOT" ) ) { + mgr.end_sort(); + } + return; + } + // if we got here, we need to revert otherwise NPC will be stuck in AI Limbo and have a head explosion. + if( p.backlog.empty() || src_set.empty() ) { + if( p.is_npc() ) { + npc *guy = dynamic_cast( &p ); + guy->revert_after_activity(); + } + // tidy up leftover moved parts and tools left lying near the work spots. + if( activity_to_restore == activity_id( "ACT_MULTIPLE_FARM" ) || + activity_to_restore == activity_id( "ACT_MULTIPLE_CONSTRUCTION" ) ) { + p.assign_activity( activity_id( "ACT_TIDY_UP" ) ); + } else if( activity_to_restore == activity_id( "ACT_MOVE_LOOT" ) ) { + mgr.end_sort(); + } } - mgr.end_sort(); } static cata::optional find_best_fire( diff --git a/src/bionics.cpp b/src/bionics.cpp index 0ae560ada7d4f..056a871b2ae90 100644 --- a/src/bionics.cpp +++ b/src/bionics.cpp @@ -147,10 +147,9 @@ bool bionic_data::is_included( const bionic_id &id ) const return std::find( included_bionics.begin(), included_bionics.end(), id ) != included_bionics.end(); } -bionic_data::bionic_data() +bionic_data::bionic_data() : name( no_translation( "bad bionic" ) ), + description( no_translation( "This bionic was not set up correctly, this is a bug" ) ) { - name = "bad bionic"; - description = "This bionic was not set up correctly, this is a bug"; } static void force_comedown( effect &eff ) @@ -245,10 +244,10 @@ void npc::check_or_use_weapon_cbm( const bionic_id &cbm_id ) bool player::activate_bionic( int b, bool eff_only ) { bionic &bio = ( *my_bionics )[b]; - + const bool mounted = is_mounted(); if( bio.incapacitated_time > 0_turns ) { add_msg( m_info, _( "Your %s is shorting out and can't be activated." ), - bionics[bio.id].name.c_str() ); + bionics[bio.id].name ); return false; } @@ -357,6 +356,10 @@ bool player::activate_bionic( int b, bool eff_only ) mod_moves( -100 ); } else if( bio.id == "bio_time_freeze" ) { + if( mounted ) { + add_msg_if_player( m_info, _( "You cannot activate that while mounted." ) ); + return false; + } mod_moves( power_level ); power_level = 0; add_msg_if_player( m_good, _( "Your speed suddenly increases!" ) ); @@ -372,6 +375,10 @@ bool player::activate_bionic( int b, bool eff_only ) add_effect( effect_teleglow, rng( 5_minutes, 40_minutes ) ); } } else if( bio.id == "bio_teleport" ) { + if( mounted ) { + add_msg_if_player( m_info, _( "You cannot activate that while mounted." ) ); + return false; + } g->teleport(); add_effect( effect_teleglow, 30_minutes ); mod_moves( -100 ); @@ -714,7 +721,7 @@ bool player::deactivate_bionic( int b, bool eff_only ) if( bio.incapacitated_time > 0_turns ) { add_msg( m_info, _( "Your %s is shorting out and can't be deactivated." ), - bionics[bio.id].name.c_str() ); + bionics[bio.id].name ); return false; } @@ -1367,8 +1374,8 @@ bool player::uninstall_bionic( const bionic_id &b_id, player &installer, bool au activity.values.push_back( bionics[b_id].capacity ); activity.values.push_back( pl_skill ); activity.str_values.push_back( "uninstall" ); - activity.str_values.push_back( bionics[b_id].name ); - activity.str_values.push_back( b_id.c_str() ); + activity.str_values.push_back( "" ); + activity.str_values.push_back( b_id.str() ); activity.str_values.push_back( "" ); activity.str_values.push_back( "" ); activity.str_values.push_back( "" ); @@ -1385,20 +1392,20 @@ bool player::uninstall_bionic( const bionic_id &b_id, player &installer, bool au } void player::perform_uninstall( bionic_id bid, int difficulty, int success, int power_lvl, - int pl_skill, std::string cbm_name ) + int pl_skill ) { if( success > 0 ) { if( is_player() ) { add_memorial_log( pgettext( "memorial_male", "Removed bionic: %s." ), pgettext( "memorial_female", "Removed bionic: %s." ), - cbm_name ); + bid.obj().name ); } // until bionics can be flagged as non-removable add_msg_player_or_npc( m_neutral, _( "Your parts are jiggled back into their familiar places." ), _( "'s parts are jiggled back into their familiar places." ) ); - add_msg( m_good, _( "Successfully removed %s." ), cbm_name ); + add_msg( m_good, _( "Successfully removed %s." ), bid.obj().name ); remove_bionic( bid ); // remove power bank provided by bionic @@ -1417,7 +1424,7 @@ void player::perform_uninstall( bionic_id bid, int difficulty, int success, int if( is_player() ) { add_memorial_log( pgettext( "memorial_male", "Failed to remove bionic: %s." ), pgettext( "memorial_female", "Failed to remove bionic: %s." ), - cbm_name ); + bid.obj().name ); } // for chance_of_success calculation, shift skill down to a float between ~0.4 - 30 @@ -1513,6 +1520,9 @@ bool player::can_install_bionics( const itype &type, player &installer, bool aut debugmsg( "Tried to install NULL bionic" ); return false; } + if( is_mounted() ) { + return false; + } int assist_bonus = installer.get_effect_int( effect_assisted ); const bionic_id &bioid = type.bionic->id; @@ -1619,11 +1629,11 @@ bool player::install_bionics( const itype &type, player &installer, bool autodoc activity.values.push_back( bionics[bioid].capacity ); activity.values.push_back( pl_skill ); activity.str_values.push_back( "install" ); - activity.str_values.push_back( bionics[bioid].name ); - activity.str_values.push_back( bioid.c_str() ); + activity.str_values.push_back( "" ); + activity.str_values.push_back( bioid.str() ); if( upbioid ) { - activity.str_values.push_back( bionics[upbioid].name ); - activity.str_values.push_back( upbioid.c_str() ); + activity.str_values.push_back( "" ); + activity.str_values.push_back( upbioid.str() ); } else { activity.str_values.push_back( "" ); activity.str_values.push_back( "" ); @@ -1651,7 +1661,7 @@ bool player::install_bionics( const itype &type, player &installer, bool autodoc } void player::perform_install( bionic_id bid, bionic_id upbid, int difficulty, int success, - int pl_skill, std::string cbm_name, std::string upcbm_name, std::string installer_name, + int pl_skill, std::string installer_name, std::vector trait_to_rem, tripoint patient_pos ) { if( success > 0 ) { @@ -1659,16 +1669,16 @@ void player::perform_install( bionic_id bid, bionic_id upbid, int difficulty, in if( is_player() ) { add_memorial_log( pgettext( "memorial_male", "Installed bionic: %s." ), pgettext( "memorial_female", "Installed bionic: %s." ), - cbm_name ); + bid.obj().name ); } if( upbid != bionic_id( "" ) ) { remove_bionic( upbid ); //~ %1$s - name of the bionic to be upgraded (inferior), %2$s - name of the upgraded bionic (superior). add_msg( m_good, _( "Successfully upgraded %1$s to %2$s." ), - upcbm_name, cbm_name ); + upbid.obj().name, bid.obj().name ); } else { //~ %s - name of the bionic. - add_msg( m_good, _( "Successfully installed %s." ), cbm_name ); + add_msg( m_good, _( "Successfully installed %s." ), bid.obj().name ); } add_bionic( bid ); @@ -1683,7 +1693,7 @@ void player::perform_install( bionic_id bid, bionic_id upbid, int difficulty, in if( is_player() ) { add_memorial_log( pgettext( "memorial_male", "Failed install of bionic: %s." ), pgettext( "memorial_female", "Failed install of bionic: %s." ), - cbm_name ); + bid.obj().name ); } // for chance_of_success calculation, shift skill down to a float between ~0.4 - 30 @@ -2019,8 +2029,8 @@ void load_bionic( JsonObject &jsobj ) bionic_data new_bionic; const bionic_id id( jsobj.get_string( "id" ) ); - new_bionic.name = _( jsobj.get_string( "name" ) ); - new_bionic.description = _( jsobj.get_string( "description" ) ); + jsobj.read( "name", new_bionic.name ); + jsobj.read( "description", new_bionic.description ); new_bionic.power_activate = jsobj.get_int( "act_cost", 0 ); new_bionic.toggled = get_bool_or_flag( jsobj, "toggled", "BIONIC_TOGGLED", false ); diff --git a/src/bionics.h b/src/bionics.h index e2ff94d32bc3b..400fef1eba812 100644 --- a/src/bionics.h +++ b/src/bionics.h @@ -12,6 +12,7 @@ #include "bodypart.h" #include "calendar.h" #include "string_id.h" +#include "translations.h" #include "type_id.h" #include "units.h" @@ -24,8 +25,8 @@ using itype_id = std::string; struct bionic_data { bionic_data(); - std::string name; - std::string description; + translation name; + translation description; /** Power cost on activation */ int power_activate = 0; /** Power cost on deactivation */ diff --git a/src/bionics_ui.cpp b/src/bionics_ui.cpp index 817ab763a05d3..5b2e2de357658 100644 --- a/src/bionics_ui.cpp +++ b/src/bionics_ui.cpp @@ -148,12 +148,12 @@ static void draw_description( const catacurses::window &win, const bionic &bio ) werase( win ); const int width = getmaxx( win ); const std::string poweronly_string = build_bionic_poweronly_string( bio ); - int ypos = fold_and_print( win, point_zero, width, c_white, bio.id->name ); + int ypos = fold_and_print( win, point_zero, width, c_white, "%s", bio.id->name ); if( !poweronly_string.empty() ) { ypos += fold_and_print( win, point( 0, ypos ), width, c_light_gray, _( "Power usage: %s" ), poweronly_string ); } - ypos += 1 + fold_and_print( win, point( 0, ypos ), width, c_light_blue, bio.id->description ); + ypos += 1 + fold_and_print( win, point( 0, ypos ), width, c_light_blue, "%s", bio.id->description ); // TODO: Unhide when enforcing limits if( get_option < bool >( "CBM_SLOTS_ENABLED" ) ) { diff --git a/src/clzones.cpp b/src/clzones.cpp index 1f7280f187f31..c61972b506620 100644 --- a/src/clzones.cpp +++ b/src/clzones.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #include "avatar.h" @@ -19,6 +20,9 @@ #include "json.h" #include "line.h" #include "map.h" +#include "messages.h" +#include "map_iterator.h" +#include "map_selector.h" #include "output.h" #include "string_input_popup.h" #include "translations.h" @@ -586,6 +590,31 @@ std::unordered_set zone_manager::get_point_set( const zone_type_id &ty return type_iter->second; } +std::unordered_set zone_manager::get_point_set_loot( const tripoint &where, + int radius, const faction_id &fac ) const +{ + return get_point_set_loot( where, radius, false, fac ); +} + +std::unordered_set zone_manager::get_point_set_loot( const tripoint &where, + int radius, bool npc_search, const faction_id &fac ) const +{ + ( void )fac; + std::unordered_set res; + for( const tripoint elem : g->m.points_in_radius( g->m.getlocal( where ), radius ) ) { + const zone_data *zone = get_zone_at( g->m.getabs( elem ) ); + // if not a LOOT zone + if( ( !zone ) || ( zone->get_type().str().substr( 0, 4 ) != "LOOT" ) ) { + continue; + } + if( npc_search && ( has( zone_type_id( "NO_NPC_PICKUP" ), elem ) ) ) { + continue; + } + res.insert( elem ); + } + return res; +} + std::unordered_set zone_manager::get_vzone_set( const zone_type_id &type, const faction_id &fac ) const { @@ -757,7 +786,7 @@ cata::optional zone_manager::get_nearest( const zone_type_id &type, co } zone_type_id zone_manager::get_near_zone_type_for_item( const item &it, - const tripoint &where ) const + const tripoint &where, int range ) const { auto cat = it.get_category(); if( has_near( zone_type_id( "LOOT_CUSTOM" ), where ) ) { @@ -767,7 +796,7 @@ zone_type_id zone_manager::get_near_zone_type_for_item( const item &it, } } if( it.has_flag( "FIREWOOD" ) ) { - if( has_near( zone_type_id( "LOOT_WOOD" ), where ) ) { + if( has_near( zone_type_id( "LOOT_WOOD" ), where, range ) ) { return zone_type_id( "LOOT_WOOD" ); } } @@ -778,14 +807,14 @@ zone_type_id zone_manager::get_near_zone_type_for_item( const item &it, if( it_food.is_food() ) { // skip food without comestible, like MREs if( it_food.get_comestible()->comesttype == "DRINK" ) { - if( !preserves && it_food.goes_bad() && has_near( zone_type_id( "LOOT_PDRINK" ), where ) ) { + if( !preserves && it_food.goes_bad() && has_near( zone_type_id( "LOOT_PDRINK" ), where, range ) ) { return zone_type_id( "LOOT_PDRINK" ); - } else if( has_near( zone_type_id( "LOOT_DRINK" ), where ) ) { + } else if( has_near( zone_type_id( "LOOT_DRINK" ), where, range ) ) { return zone_type_id( "LOOT_DRINK" ); } } - if( !preserves && it_food.goes_bad() && has_near( zone_type_id( "LOOT_PFOOD" ), where ) ) { + if( !preserves && it_food.goes_bad() && has_near( zone_type_id( "LOOT_PFOOD" ), where, range ) ) { return zone_type_id( "LOOT_PFOOD" ); } } @@ -808,7 +837,7 @@ zone_type_id zone_manager::get_near_zone_type_for_item( const item &it, return zone_type_id( "LOOT_TOOLS" ); } if( cat.id() == "clothing" ) { - if( it.is_filthy() && has_near( zone_type_id( "LOOT_FCLOTHING" ), where ) ) { + if( it.is_filthy() && has_near( zone_type_id( "LOOT_FCLOTHING" ), where, range ) ) { return zone_type_id( "LOOT_FCLOTHING" ); } return zone_type_id( "LOOT_CLOTHING" ); @@ -850,7 +879,7 @@ zone_type_id zone_manager::get_near_zone_type_for_item( const item &it, return zone_type_id( "LOOT_ARTIFACTS" ); } if( cat.id() == "armor" ) { - if( it.is_filthy() && has_near( zone_type_id( "LOOT_FARMOR" ), where ) ) { + if( it.is_filthy() && has_near( zone_type_id( "LOOT_FARMOR" ), where, range ) ) { return zone_type_id( "LOOT_FARMOR" ); } return zone_type_id( "LOOT_ARMOR" ); @@ -875,6 +904,18 @@ std::vector zone_manager::get_zones( const zone_type_id &type, return zones; } +const zone_data *zone_manager::get_zone_at( const tripoint &where ) const +{ + for( auto it = zones.rbegin(); it != zones.rend(); ++it ) { + const auto &zone = *it; + + if( zone.has_inside( where ) ) { + return &zone; + } + } + return nullptr; +} + const zone_data *zone_manager::get_bottom_zone( const tripoint &where, const faction_id &fac ) const { diff --git a/src/clzones.h b/src/clzones.h index c4935dc50610a..7f085cebdb2ff 100644 --- a/src/clzones.h +++ b/src/clzones.h @@ -381,21 +381,25 @@ class zone_manager bool has_loot_dest_near( const tripoint &where ) const; bool custom_loot_has( const tripoint &where, const item *it ) const; std::unordered_set get_near( const zone_type_id &type, const tripoint &where, - int range = MAX_DISTANCE, const item *it = nullptr, - const faction_id &fac = your_fac ) const; + int range = MAX_DISTANCE, const item *it = nullptr, const faction_id &fac = your_fac ) const; cata::optional get_nearest( const zone_type_id &type, const tripoint &where, - int range = MAX_DISTANCE, - const faction_id &fac = your_fac ) const; - zone_type_id get_near_zone_type_for_item( const item &it, const tripoint &where ) const; + int range = MAX_DISTANCE, const faction_id &fac = your_fac ) const; + zone_type_id get_near_zone_type_for_item( const item &it, const tripoint &where, + int range = MAX_DISTANCE ) const; std::vector get_zones( const zone_type_id &type, const tripoint &where, const faction_id &fac = your_fac ) const; + const zone_data *get_zone_at( const tripoint &where ) const; const zone_data *get_bottom_zone( const tripoint &where, const faction_id &fac = your_fac ) const; cata::optional query_name( const std::string &default_name = "" ) const; cata::optional query_type() const; void swap( zone_data &a, zone_data &b ); void rotate_zones( map &target_map, int turns ); - + // list of tripoints of zones that are loot zones only + std::unordered_set get_point_set_loot( const tripoint &where, int radius, + const faction_id &fac = your_fac ) const; + std::unordered_set get_point_set_loot( const tripoint &where, int radius, + bool npc_search, const faction_id &fac = your_fac ) const; void start_sort( const std::vector &src_sorted ); void end_sort(); bool is_sorting() const; diff --git a/src/condition.cpp b/src/condition.cpp index 9b173a3841100..1d475a58b2c45 100644 --- a/src/condition.cpp +++ b/src/condition.cpp @@ -21,6 +21,7 @@ #include "mission.h" #include "npc.h" #include "overmapbuffer.h" +#include "recipe.h" #include "string_id.h" #include "type_id.h" #include "vehicle.h" @@ -800,6 +801,17 @@ void conditional_t::set_has_skill( JsonObject &jo, const std::string &member, } } +template +void conditional_t::set_u_know_recipe( JsonObject &jo, const std::string &member ) +{ + const std::string &known_recipe_id = jo.get_string( member ); + condition = [known_recipe_id]( const T & d ) { + player *actor = d.alpha; + const recipe &r = recipe_id( known_recipe_id ).obj(); + return actor->knows_recipe( &r ); + }; +} + template conditional_t::conditional_t( JsonObject jo ) { @@ -967,6 +979,8 @@ conditional_t::conditional_t( JsonObject jo ) set_has_skill( jo, "u_has_skill" ); } else if( jo.has_member( "npc_has_skill" ) ) { set_has_skill( jo, "npc_has_skill", is_npc ); + } else if( jo.has_member( "u_know_recipe" ) ) { + set_u_know_recipe( jo, "u_know_recipe" ); } else { for( const std::string &sub_member : dialogue_data::simple_string_conds ) { if( jo.has_string( sub_member ) ) { diff --git a/src/condition.h b/src/condition.h index a31bc7986e38a..17e2487c0f4ba 100644 --- a/src/condition.h +++ b/src/condition.h @@ -43,7 +43,7 @@ const std::unordered_set complex_conds = { { "npc_aim_rule", "npc_engagement_rule", "npc_rule", "npc_override", "npc_cbm_reserve_rule", "npc_cbm_recharge_rule", "days_since_cataclysm", "is_season", "mission_goal", "u_has_var", "npc_has_var", - "u_has_skill", "npc_has_skill" + "u_has_skill", "npc_has_skill", "u_know_recipe" } }; } // namespace dialogue_data @@ -131,6 +131,7 @@ struct conditional_t { void set_has_reason(); void set_is_gender( bool is_male, bool is_npc = false ); void set_has_skill( JsonObject &jo, const std::string &member, bool is_npc = false ); + void set_u_know_recipe( JsonObject &jo, const std::string &member ); bool operator()( const T &d ) const { if( !condition ) { diff --git a/src/construction.cpp b/src/construction.cpp index 6a325daa211b1..dc40eb9f9832b 100644 --- a/src/construction.cpp +++ b/src/construction.cpp @@ -759,7 +759,6 @@ bool can_construct( const construction &con, const tripoint &p ) [&p]( const std::string & flag ) { return g->m.has_flag( flag, p ); } ); - // make sure the construction would actually do something if( !con.post_terrain.empty() ) { if( con.post_is_furniture ) { @@ -936,6 +935,12 @@ void complete_construction( player *p ) // This comes after clearing the activity, in case the function interrupts // activities built.post_special( terp ); + // npcs will automatically resume backlog, players wont. + if( p->is_player() && !p->backlog.empty() && + p->backlog.front().id() == activity_id( "ACT_MULTIPLE_CONSTRUCTION" ) ) { + p->backlog.clear(); + p->assign_activity( activity_id( "ACT_MULTIPLE_CONSTRUCTION" ) ); + } } bool construct::check_empty( const tripoint &p ) diff --git a/src/construction.h b/src/construction.h index c890d6f19d903..6961cb0c9a46a 100644 --- a/src/construction.h +++ b/src/construction.h @@ -79,7 +79,6 @@ struct construction { std::function post_special; // Custom error message display std::function explain_failure; - // Whether it's furniture or terrain bool pre_is_furniture; // Whether it's furniture or terrain diff --git a/src/crafting_gui.cpp b/src/crafting_gui.cpp index 244b97202fbe4..8880659c14e82 100644 --- a/src/crafting_gui.cpp +++ b/src/crafting_gui.cpp @@ -63,7 +63,7 @@ int related_menu_fill( uilist &rmenu, const std::vector> &related_recipes, const recipe_subset &available ); -static std::string get_cat_name( const std::string &prefixed_name ) +static std::string get_cat_unprefixed( const std::string &prefixed_name ) { return prefixed_name.substr( 3, prefixed_name.size() - 3 ); } @@ -80,7 +80,7 @@ void load_recipe_category( JsonObject &jsobj ) if( !is_hidden ) { craft_cat_list.push_back( category ); - const std::string cat_name = get_cat_name( category ); + const std::string cat_name = get_cat_unprefixed( category ); craft_subcat_list[category] = std::vector(); JsonArray subcats = jsobj.get_array( "recipe_subcategories" ); @@ -94,24 +94,25 @@ void load_recipe_category( JsonObject &jsobj ) } } -static std::string get_subcat_name( const std::string &cat, const std::string &prefixed_name ) +static std::string get_subcat_unprefixed( const std::string &cat, const std::string &prefixed_name ) { - std::string prefix = "CSC_" + get_cat_name( cat ) + "_"; + std::string prefix = "CSC_" + get_cat_unprefixed( cat ) + "_"; if( prefixed_name.find( prefix ) == 0 ) { return prefixed_name.substr( prefix.size(), prefixed_name.size() - prefix.size() ); } - return ( prefixed_name == "CSC_ALL" ? _( "ALL" ) : _( "NONCRAFT" ) ); + return prefixed_name == "CSC_ALL" ? translate_marker( "ALL" ) : translate_marker( "NONCRAFT" ); } static void translate_all() { + normalized_names.clear(); for( const auto &cat : craft_cat_list ) { - normalized_names[cat] = _( get_cat_name( cat ) ); + normalized_names[cat] = _( get_cat_unprefixed( cat ) ); for( const auto &subcat : craft_subcat_list[cat] ) { - normalized_names[subcat] = _( get_subcat_name( cat, subcat ) ) ; + normalized_names[subcat] = _( get_subcat_unprefixed( cat, subcat ) ) ; } } } @@ -151,9 +152,8 @@ static int print_items( const recipe &r, const catacurses::window &w, int ypos, const recipe *select_crafting_recipe( int &batch_size ) { - if( normalized_names.empty() ) { - translate_all(); - } + // always re-translate the category names in case the language has changed + translate_all(); const int headHeight = 3; const int subHeadHeight = 2; diff --git a/src/dialogue.h b/src/dialogue.h index f27e65cda9050..c3d10cf4860be 100644 --- a/src/dialogue.h +++ b/src/dialogue.h @@ -121,8 +121,9 @@ struct talk_effect_fun_t { void set_bulk_trade_accept( bool is_trade, bool is_npc = false ); void set_npc_gets_item( bool to_use ); void set_add_mission( std::string mission_id ); - void set_u_buy_monster( const std::string &monster_id, int cost, int count, bool pacified, + void set_u_buy_monster( const std::string &monster_type_id, int cost, int count, bool pacified, const translation &name ); + void set_u_learn_recipe( const std::string &learned_recipe_id ); void operator()( const dialogue &d ) const { if( !function ) { diff --git a/src/effect.cpp b/src/effect.cpp index 893f9a3a4ba91..0c30f9b9df9da 100644 --- a/src/effect.cpp +++ b/src/effect.cpp @@ -487,12 +487,12 @@ std::string effect::disp_name() const if( d_name.empty() ) { return std::string(); } - ret << d_name.translated(); + ret << d_name; } else { if( eff_type->name[0].empty() ) { return std::string(); } - ret << eff_type->name[0].translated(); + ret << eff_type->name[0]; if( intensity > 1 ) { if( eff_type->id == "bandaged" || eff_type->id == "disinfected" ) { ret << " [" << texitify_healing_power( intensity ) << "]"; diff --git a/src/game_inventory.cpp b/src/game_inventory.cpp index 5a0be531ff665..45ff27e63381a 100644 --- a/src/game_inventory.cpp +++ b/src/game_inventory.cpp @@ -524,7 +524,7 @@ class comestible_inventory_preset : public inventory_selector_preset std::vector bids = p.get_bionic_fueled_with( get_consumable_item( loc ) ); if( !bids.empty() ) { bionic_id bid = p.get_most_efficient_bionic( bids ); - cbm_name = bid->name; + cbm_name = bid->name.translated(); } break; } diff --git a/src/handle_action.cpp b/src/handle_action.cpp index 2a6340b6ad239..0f8a3192d921a 100644 --- a/src/handle_action.cpp +++ b/src/handle_action.cpp @@ -883,7 +883,10 @@ static void wait() static void sleep() { player &u = g->u; - + if( u.is_mounted() ) { + u.add_msg_if_player( m_info, _( "You cannot sleep while mounted." ) ); + return; + } uilist as_m; as_m.text = _( "Are you sure you want to sleep?" ); // (Y)es/(S)ave before sleeping/(N)o @@ -920,7 +923,7 @@ static void sleep() const auto &info = bio.info(); if( info.power_over_time > 0 ) { - active.push_back( info.name ); + active.push_back( info.name.translated() ); } } for( auto &mut : u.get_mutations() ) { @@ -1003,6 +1006,7 @@ static void loot() FertilizePlots = 16, HarvestPlots = 32, ConstructPlots = 64, + MultiFarmPlots = 128, }; auto just_one = []( int flags ) { @@ -1029,6 +1033,7 @@ static void loot() flags |= PlantPlots; flags |= FertilizePlots; flags |= HarvestPlots; + flags |= MultiFarmPlots; } flags |= g->check_near_zone( zone_type_id( "CONSTRUCTION_BLUEPRINT" ), u.pos() ) ? ConstructPlots : 0; @@ -1077,6 +1082,10 @@ static void loot() menu.addentry_desc( ConstructPlots, true, 'c', _( "Construct Plots" ), _( "Work on any nearby Blueprint: construction zones" ) ); } + if( flags & MultiFarmPlots ) { + menu.addentry_desc( MultiFarmPlots, true, 'm', _( "Farm Plots" ), + _( "till and plant on any nearby farm plots - auto-fetch seeds and tools" ) ); + } menu.query(); flags = ( menu.ret >= 0 ) ? menu.ret : None; @@ -1112,7 +1121,10 @@ static void loot() u.assign_activity( activity_id( "ACT_HARVEST_PLOT" ) ); break; case ConstructPlots: - u.assign_activity( activity_id( "ACT_BLUEPRINT_CONSTRUCTION" ) ); + u.assign_activity( activity_id( "ACT_MULTIPLE_CONSTRUCTION" ) ); + break; + case MultiFarmPlots: + u.assign_activity( activity_id( "ACT_MULTIPLE_FARM" ) ); break; default: debugmsg( "Unsupported flag" ); diff --git a/src/iexamine.cpp b/src/iexamine.cpp index 197511674f894..d4ca63a801279 100644 --- a/src/iexamine.cpp +++ b/src/iexamine.cpp @@ -1704,6 +1704,8 @@ static bool harvest_common( player &p, const tripoint &examp, bool furn, bool ne p.add_msg_if_player( m_bad, _( "You couldn't harvest anything." ) ); } + iexamine::practice_survival_while_foraging( &p ); + p.mod_moves( -to_moves( rng( 5_seconds, 15_seconds ) ) ); return true; } @@ -1910,15 +1912,21 @@ void iexamine::plant_seed( player &p, const tripoint &examp, const itype_id &see } else { used_seed = p.use_amount( seed_id, 1 ); } - used_seed.front().set_age( 0_turns ); - g->m.add_item_or_charges( examp, used_seed.front() ); - if( g->m.has_flag_furn( "PLANTABLE", examp ) ) { - g->m.furn_set( examp, furn_str_id( g->m.furn( examp )->plant->transform ) ); - } else { - g->m.set( examp, t_dirt, f_plant_seed ); + if( !used_seed.empty() ) { + used_seed.front().set_age( 0_turns ); + if( used_seed.front().has_var( "activity_var" ) ) { + used_seed.front().erase_var( "activity_var" ); + } + g->m.add_item_or_charges( examp, used_seed.front() ); + if( g->m.has_flag_furn( "PLANTABLE", examp ) ) { + g->m.furn_set( examp, furn_str_id( g->m.furn( examp )->plant->transform ) ); + } else { + g->m.set( examp, t_dirt, f_plant_seed ); + } + p.moves -= to_moves( 30_seconds ); + p.add_msg_player_or_npc( _( "You plant some %s." ), _( " plants some %s." ), + item::nname( seed_id ) ); } - p.moves -= to_moves( 30_seconds ); - add_msg( _( "Planted %s." ), item::nname( seed_id ) ); } /** @@ -2015,7 +2023,7 @@ std::list iexamine::get_harvest_items( const itype &type, const int plant_ /** * Actual harvesting of selected plant */ -void iexamine::harvest_plant( player &p, const tripoint &examp ) +void iexamine::harvest_plant( player &p, const tripoint &examp, bool from_activity ) { // Can't use item_stack::only_item() since there might be fertilizer map_stack items = g->m.i_at( examp ); @@ -2069,6 +2077,9 @@ void iexamine::harvest_plant( player &p, const tripoint &examp ) } const int seedCount = std::max( 1, rng( plant_count / 4, plant_count / 2 ) ); for( auto &i : get_harvest_items( type, plant_count, seedCount, true ) ) { + if( from_activity ) { + i.set_var( "activity_var", p.name ); + } g->m.add_item_or_charges( examp, i ); } g->m.furn_set( examp, furn_str_id( g->m.furn( examp )->plant->transform ) ); @@ -5742,3 +5753,13 @@ hack_result iexamine::hack_attempt( player &p ) return HACK_SUCCESS; } } + +void iexamine::practice_survival_while_foraging( player *p ) +{ + ///\EFFECT_INT Intelligence caps survival skill gains from foraging + const int max_forage_skill = p->int_cur / 3 + 1; + ///\EFFECT_SURVIVAL decreases survival skill gain from foraging (NEGATIVE) + const int max_exp = 2 * ( max_forage_skill - p->get_skill_level( skill_survival ) ); + // Award experience for foraging attempt regardless of success + p->practice( skill_survival, rng( 1, max_exp ), max_forage_skill ); +} diff --git a/src/iexamine.h b/src/iexamine.h index 89545f7b343b0..4f17faf1c4b3c 100644 --- a/src/iexamine.h +++ b/src/iexamine.h @@ -131,11 +131,14 @@ std::list get_harvest_items( const itype &type, int plant_count, std::vector get_seed_entries( const std::vector &seed_inv ); int query_seed( const std::vector &seed_entries ); void plant_seed( player &p, const tripoint &examp, const itype_id &seed_id ); -void harvest_plant( player &p, const tripoint &examp ); +void harvest_plant( player &p, const tripoint &examp, bool from_activity = false ); void fertilize_plant( player &p, const tripoint &tile, const itype_id &fertilizer ); itype_id choose_fertilizer( player &p, const std::string &pname, bool ask_player ); ret_val can_fertilize( player &p, const tripoint &tile, const itype_id &fertilizer ); +// Skill training common functions +void practice_survival_while_foraging( player *p ); + } //namespace iexamine using iexamine_function = void ( * )( player &, const tripoint & ); diff --git a/src/inventory.cpp b/src/inventory.cpp index a442167159a48..96bc1da210dcf 100644 --- a/src/inventory.cpp +++ b/src/inventory.cpp @@ -181,6 +181,16 @@ inventory &inventory::operator+= ( const item &rhs ) return *this; } +inventory &inventory::operator+= ( const item_stack &rhs ) +{ + for( const auto &p : rhs ) { + if( !p.made_of( LIQUID ) ) { + add_item( p, true ); + } + } + return *this; +} + inventory inventory::operator+ ( const inventory &rhs ) { return inventory( *this ) += rhs; diff --git a/src/inventory.h b/src/inventory.h index 23f95c9daee7a..f0a42c840ff8e 100644 --- a/src/inventory.h +++ b/src/inventory.h @@ -16,6 +16,7 @@ #include "cata_utility.h" #include "item.h" +#include "item_stack.h" #include "visitable.h" #include "units.h" @@ -104,6 +105,7 @@ class inventory : public visitable inventory &operator+= ( const item &rhs ); inventory &operator+= ( const std::list &rhs ); inventory &operator+= ( const std::vector &rhs ); + inventory &operator+= ( const item_stack &rhs ); inventory operator+ ( const inventory &rhs ); inventory operator+ ( const item &rhs ); inventory operator+ ( const std::list &rhs ); diff --git a/src/item_factory.cpp b/src/item_factory.cpp index ce59b2e894f2b..f91f182a62efa 100644 --- a/src/item_factory.cpp +++ b/src/item_factory.cpp @@ -53,8 +53,6 @@ struct tripoint; using t_string_set = std::set; static t_string_set item_blacklist; -static std::set repair_actions; - static DynamicDataLoader::deferred_json deferred; std::unique_ptr item_controller = std::make_unique(); @@ -2335,6 +2333,8 @@ void Item_factory::clear() repair_tools.clear(); gun_tools.clear(); + misc_tools.clear(); + repair_actions.clear(); frozen = false; } diff --git a/src/item_factory.h b/src/item_factory.h index c37ce0f0c14ff..3c410c8185249 100644 --- a/src/item_factory.h +++ b/src/item_factory.h @@ -375,6 +375,8 @@ class Item_factory // tools that can be used to repair wood/paper/bone/chitin items std::set misc_tools; + + std::set repair_actions; }; #endif diff --git a/src/item_location.cpp b/src/item_location.cpp index 064a67b96166d..df322fa67ba59 100644 --- a/src/item_location.cpp +++ b/src/item_location.cpp @@ -433,6 +433,7 @@ class item_location::impl::item_on_vehicle : public item_location::impl } else { cur.remove_item( *target() ); // item within CARGO } + cur.veh.invalidate_mass(); } }; diff --git a/src/iuse.cpp b/src/iuse.cpp index f60824f4d92c1..1ee3048aa5c83 100644 --- a/src/iuse.cpp +++ b/src/iuse.cpp @@ -840,7 +840,10 @@ int iuse::meditate( player *p, item *it, bool t, const tripoint & ) if( !p || t ) { return 0; } - + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } if( p->has_trait( trait_SPIRITUAL ) ) { const int moves = to_moves( 20_minutes ); p->assign_activity( activity_id( "ACT_MEDITATE" ), moves ); @@ -1680,10 +1683,13 @@ static bool good_fishing_spot( tripoint pos ) int iuse::fishing_rod( player *p, item *it, bool, const tripoint & ) { if( p->is_npc() ) { - // Long actions - NPCs don't like those yet + // Long actions - NPCs don't like those yet. + return 0; + } + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); return 0; } - const cata::optional pnt_ = choose_adjacent( _( "Fish where?" ) ); if( !pnt_ ) { return 0; @@ -1717,7 +1723,10 @@ int iuse::fish_trap( player *p, item *it, bool t, const tripoint &pos ) it->charges = 0; return 0; } - + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } if( p->is_underwater() ) { p->add_msg_if_player( m_info, _( "You can't do that while underwater." ) ); return 0; @@ -1972,12 +1981,12 @@ int iuse::pack_cbm( player *p, item *it, bool, const tripoint & ) const int success = p->get_skill_level( skill_firstaid ) - rng( 0, 6 ); if( success > 0 ) { - add_msg( m_info, _( "You carefully prepare the CBM for sterilization." ) ); + p->add_msg_if_player( m_info, _( "You carefully prepare the CBM for sterilization." ) ); } else { bionic.get_item()->set_flag( "PACKED_FAULTY" ); - add_msg( m_info, _( "You put the CBM in the pouch and close it." ) ); + p->add_msg_if_player( m_info, _( "You put the CBM in the pouch and close it." ) ); if( success == 0 ) { - add_msg( m_bad, _( "You're not sure about the quality of your work." ) ); + p->add_msg_if_player( m_info, _( "You're not sure about the quality of your work." ) ); } } @@ -2038,6 +2047,10 @@ static int cauterize_elec( player &p, item &it ) int iuse::water_purifier( player *p, item *it, bool, const tripoint & ) { + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } auto obj = g->inv_map_splice( []( const item & e ) { return !e.contents.empty() && e.contents.front().typeId() == "water"; }, _( "Purify what?" ), 1, _( "You don't have water to purify." ) ); @@ -2084,7 +2097,7 @@ int iuse::directional_antenna( player *p, item *it, bool, const tripoint & ) // Find the radio station its tuned to (if any) const auto tref = overmap_buffer.find_radio_station( radio.frequency ); if( !tref ) { - add_msg( m_info, _( "You can't find the direction if your radio isn't tuned." ) ); + p->add_msg_if_player( m_info, _( "You can't find the direction if your radio isn't tuned." ) ); return 0; } // Report direction. @@ -2282,6 +2295,10 @@ static bool pry_nails( player &p, const ter_id &type, const tripoint &pnt ) int iuse::hammer( player *p, item *it, bool, const tripoint & ) { + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } // If anyone other than the player wants to use one of these, // they're going to need to figure out how to aim it. const cata::optional pnt_ = choose_adjacent( _( "Pry where?" ) ); @@ -2301,6 +2318,10 @@ int iuse::hammer( player *p, item *it, bool, const tripoint & ) int iuse::crowbar( player *p, item *it, bool, const tripoint &pos ) { + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } // TODO: Make this 3D now that NPCs get to use items tripoint pnt = pos; if( pos == p->pos() ) { @@ -2456,7 +2477,10 @@ int iuse::makemound( player *p, item *it, bool t, const tripoint & ) if( !p || t ) { return 0; } - + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } const cata::optional pnt_ = choose_adjacent( _( "Till soil where?" ) ); if( !pnt_ ) { return 0; @@ -2464,14 +2488,16 @@ int iuse::makemound( player *p, item *it, bool t, const tripoint & ) const tripoint pnt = *pnt_; if( pnt == p->pos() ) { - add_msg( m_info, _( "You think about jumping on a shovel, but then change up your mind." ) ); + p->add_msg_if_player( m_info, + _( "You think about jumping on a shovel, but then change up your mind." ) ); return 0; } if( g->m.has_flag( "PLOWABLE", pnt ) && !g->m.has_flag( "PLANT", pnt ) ) { - p->add_msg_if_player( _( "You churn up the earth here." ) ); - p->mod_moves( -300 ); - g->m.ter_set( pnt, t_dirtmound ); + p->add_msg_if_player( _( "You start churning up the earth here." ) ); + p->assign_activity( activity_id( "ACT_CHURN" ), to_turns( 3_minutes ), + -1, p->get_item_position( it ) ); + p->activity.placement = pnt; return it->type->charges_to_use(); } else { p->add_msg_if_player( _( "You can't churn up this ground." ) ); @@ -2615,7 +2641,10 @@ int iuse::dig( player *p, item *it, bool t, const tripoint & ) if( !p || t ) { return 0; } - + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } const tripoint dig_point = p->pos(); const bool can_dig_here = g->m.has_flag( "DIGGABLE", dig_point ) && @@ -2707,7 +2736,10 @@ int iuse::dig_channel( player *p, item *it, bool t, const tripoint & ) if( !p || t ) { return 0; } - + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } const tripoint dig_point = p->pos(); tripoint north = dig_point + point_north; @@ -2769,7 +2801,10 @@ int iuse::fill_pit( player *p, item *it, bool t, const tripoint & ) if( !p || t ) { return 0; } - + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } const cata::optional pnt_ = choose_adjacent( _( "Fill which pit or mound?" ) ); if( !pnt_ ) { return 0; @@ -2777,7 +2812,7 @@ int iuse::fill_pit( player *p, item *it, bool t, const tripoint & ) const tripoint pnt = *pnt_; if( pnt == p->pos() ) { - add_msg( m_info, _( "You decide not to bury yourself that early." ) ); + p->add_msg_if_player( m_info, _( "You decide not to bury yourself that early." ) ); return 0; } @@ -2816,6 +2851,10 @@ int iuse::fill_pit( player *p, item *it, bool t, const tripoint & ) int iuse::clear_rubble( player *p, item *it, bool, const tripoint & ) { + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } const cata::optional pnt_ = choose_adjacent( _( "Clear rubble where?" ) ); if( !pnt_ ) { return 0; @@ -2845,6 +2884,10 @@ void act_vehicle_siphon( vehicle * ); // veh_interact.cpp int iuse::siphon( player *p, item *it, bool, const tripoint & ) { + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } const cata::optional pnt_ = choose_adjacent( _( "Siphon from where?" ) ); if( !pnt_ ) { return 0; @@ -3065,7 +3108,10 @@ int iuse::jackhammer( player *p, item *it, bool, const tripoint &pos ) if( !p->has_enough_charges( *it, false ) ) { return 0; } - + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } if( p->is_underwater() ) { p->add_msg_if_player( m_info, _( "You can't do that while underwater." ) ); return 0; @@ -3117,7 +3163,10 @@ int iuse::pickaxe( player *p, item *it, bool, const tripoint &pos ) // Long action return 0; } - + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } if( p->is_underwater() ) { p->add_msg_if_player( m_info, _( "You can't do that while underwater." ) ); return 0; @@ -3169,7 +3218,10 @@ int iuse::burrow( player *p, item *it, bool, const tripoint &pos ) // Long action return 0; } - + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } if( p->is_underwater() ) { p->add_msg_if_player( m_info, _( "You can't do that while underwater." ) ); return 0; @@ -3275,7 +3327,10 @@ int iuse::teleport( player *p, item *it, bool, const tripoint & ) // That would be evil return 0; } - + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } if( !it->ammo_sufficient() ) { return 0; } @@ -3343,14 +3398,16 @@ int iuse::throwable_extinguisher_act( player *, item *it, bool, const tripoint & return 0; } if( g->m.get_field( pos, fd_fire ) != nullptr ) { + sounds::sound( pos, 50, sounds::sound_t::combat, _( "Bang!" ), false, "explosion", "small" ); // Reduce the strength of fire (if any) in the target tile. - g->m.mod_field_intensity( pos, fd_fire, 0 - 1 ); + g->m.mod_field_intensity( pos, fd_fire, 0 - 2 ); // Slightly reduce the strength of fire around and in the target tile. for( const tripoint &dest : g->m.points_in_radius( pos, 1 ) ) { if( g->m.passable( dest ) && dest != pos ) { - g->m.mod_field_intensity( dest, fd_fire, 0 - rng( 0, 1 ) ); + g->m.mod_field_intensity( dest, fd_fire, 0 - rng( 0, 2 ) ); } } + it->charges = -1; return 1; } it->active = false; @@ -3366,7 +3423,7 @@ int iuse::granade( player *p, item *it, bool, const tripoint & ) return it->type->charges_to_use(); } -int iuse::granade_act( player *, item *it, bool t, const tripoint &pos ) +int iuse::granade_act( player *p, item *it, bool t, const tripoint &pos ) { if( pos.x == -999 || pos.y == -999 ) { return 0; @@ -3375,8 +3432,8 @@ int iuse::granade_act( player *, item *it, bool t, const tripoint &pos ) // Vol 0 = only heard if you hold it sounds::sound( pos, 0, sounds::sound_t::speech, _( "Merged!" ), true, "speech", it->typeId() ); } else if( it->charges > 0 ) { - add_msg( m_info, _( "You've already pulled the %s's pin, try throwing it instead." ), - it->tname() ); + p->add_msg_if_player( m_info, _( "You've already pulled the %s's pin, try throwing it instead." ), + it->tname() ); return 0; } else { // When that timer runs down... int explosion_radius = 3; @@ -3587,7 +3644,8 @@ int iuse::molotov_lit( player *p, item *it, bool t, const tripoint &pos ) if( pos.x == -999 || pos.y == -999 ) { return 0; } else if( it->charges > 0 ) { - add_msg( m_info, _( "You've already lit the %s, try throwing it instead." ), it->tname() ); + p->add_msg_if_player( m_info, _( "You've already lit the %s, try throwing it instead." ), + it->tname() ); return 0; } else if( p->has_item( *it ) && it->charges == 0 ) { it->charges += 1; @@ -3664,7 +3722,7 @@ int iuse::firecracker( player *p, item *it, bool, const tripoint & ) return it->type->charges_to_use(); } -int iuse::firecracker_act( player *, item *it, bool t, const tripoint &pos ) +int iuse::firecracker_act( player *p, item *it, bool t, const tripoint &pos ) { if( pos.x == -999 || pos.y == -999 ) { return 0; @@ -3672,7 +3730,8 @@ int iuse::firecracker_act( player *, item *it, bool t, const tripoint &pos ) if( t ) { // Simple timer effects sounds::sound( pos, 0, sounds::sound_t::alarm, _( "ssss..." ), true, "misc", "lit_fuse" ); } else if( it->charges > 0 ) { - add_msg( m_info, _( "You've already lit the %s, try throwing it instead." ), it->tname() ); + p->add_msg_if_player( m_info, _( "You've already lit the %s, try throwing it instead." ), + it->tname() ); return 0; } else { // When that timer runs down... sounds::sound( pos, 20, sounds::sound_t::combat, _( "Bang!" ), true, "explosion", "small" ); @@ -3750,6 +3809,10 @@ int iuse::portal( player *p, item *it, bool, const tripoint & ) if( !it->ammo_sufficient() ) { return 0; } + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } tripoint t( p->posx() + rng( -2, 2 ), p->posy() + rng( -2, 2 ), p->posz() ); g->m.trap_set( t, tr_portal ); return it->type->charges_to_use(); @@ -3998,6 +4061,10 @@ int iuse::mp3_on( player *p, item *it, bool t, const tripoint &pos ) int iuse::rpgdie( player *you, item *die, bool, const tripoint & ) { + if( you->is_mounted() ) { + you->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } int num_sides = die->get_var( "die_num_sides", 0 ); if( num_sides == 0 ) { const std::vector sides_options = { 4, 6, 8, 10, 12, 20, 50 }; @@ -4151,13 +4218,16 @@ int iuse::portable_game( player *p, item *it, bool, const tripoint & ) // Long action return 0; } - + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } if( p->is_underwater() ) { p->add_msg_if_player( m_info, _( "You can't do that while underwater." ) ); return 0; } if( p->has_trait( trait_ILLITERATE ) ) { - add_msg( _( "You're illiterate!" ) ); + p->add_msg_if_player( m_info, _( "You're illiterate!" ) ); return 0; } else if( it->ammo_remaining() < 15 ) { p->add_msg_if_player( m_info, _( "The %s's batteries are dead." ), it->tname() ); @@ -4266,7 +4336,10 @@ int iuse::vibe( player *p, item *it, bool, const tripoint & ) // Also, that would be creepy as fuck, seriously return 0; } - + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do... that while mounted." ) ); + return 0; + } if( ( p->is_underwater() ) && ( !( ( p->has_trait( trait_GILLS ) ) || ( p->is_wearing( "rebreather_on" ) ) || ( p->is_wearing( "rebreather_xl_on" ) ) || ( p->is_wearing( "mask_h20survivor_on" ) ) ) ) ) { @@ -4355,7 +4428,10 @@ int iuse::blood_draw( player *p, item *it, bool, const tripoint & ) if( p->is_npc() ) { return 0; // No NPCs for now! } - + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } if( !it->contents.empty() ) { p->add_msg_if_player( m_info, _( "That %s is full!" ), it->tname() ); return 0; @@ -4416,6 +4492,10 @@ int iuse::blood_draw( player *p, item *it, bool, const tripoint & ) //This is just used for robofac_intercom_mission_2 int iuse::mind_splicer( player *p, item *it, bool, const tripoint & ) { + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } for( auto &map_it : g->m.i_at( point( p->posx(), p->posy() ) ) ) { if( map_it.typeId() == "rmi2_corpse" && query_yn( _( "Use the mind splicer kit on the %s?" ), colorize( map_it.tname(), @@ -4443,6 +4523,10 @@ int iuse::mind_splicer( player *p, item *it, bool, const tripoint & ) void iuse::cut_log_into_planks( player &p ) { + if( p.is_mounted() ) { + p.add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return; + } const int moves = to_moves( 20_minutes ); p.add_msg_if_player( _( "You cut the log into planks." ) ); @@ -4455,7 +4539,10 @@ int iuse::lumber( player *p, item *it, bool t, const tripoint & ) if( t ) { return 0; } - + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } // Check if player is standing on any lumber for( auto &i : g->m.i_at( p->pos() ) ) { if( i.typeId() == "log" ) { @@ -4471,7 +4558,7 @@ int iuse::lumber( player *p, item *it, bool t, const tripoint & ) item &cut = p->i_at( pos ); if( cut.is_null() ) { - add_msg( m_info, _( "You do not have that item!" ) ); + p->add_msg_if_player( m_info, _( "You do not have that item!" ) ); return 0; } p->i_rem( &cut ); @@ -4498,7 +4585,10 @@ int iuse::chop_tree( player *p, item *it, bool t, const tripoint & ) if( !p || t ) { return 0; } - + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } const cata::optional pnt_ = choose_adjacent( _( "Chop down which tree?" ) ); if( !pnt_ ) { return 0; @@ -4506,7 +4596,7 @@ int iuse::chop_tree( player *p, item *it, bool t, const tripoint & ) const tripoint pnt = *pnt_; if( pnt == p->pos() ) { - add_msg( m_info, _( "You're not stern enough to shave yourself with THIS." ) ); + p->add_msg_if_player( m_info, _( "You're not stern enough to shave yourself with THIS." ) ); return 0; } @@ -4515,7 +4605,7 @@ int iuse::chop_tree( player *p, item *it, bool t, const tripoint & ) if( g->m.has_flag( "TREE", pnt ) ) { moves = chop_moves( p, it ); } else { - add_msg( m_info, _( "You can't chop down that." ) ); + p->add_msg_if_player( m_info, _( "You can't chop down that." ) ); return 0; } const std::vector helpers = g->u.get_crafting_helpers(); @@ -4534,7 +4624,10 @@ int iuse::chop_logs( player *p, item *it, bool t, const tripoint & ) if( !p || t ) { return 0; } - + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } const cata::optional pnt_ = choose_adjacent( _( "Chop which tree trunk?" ) ); if( !pnt_ ) { return 0; @@ -4547,7 +4640,7 @@ int iuse::chop_logs( player *p, item *it, bool t, const tripoint & ) if( ter == t_trunk || ter == t_stump ) { moves = chop_moves( p, it ); } else { - add_msg( m_info, _( "You can't chop that." ) ); + p->add_msg_if_player( m_info, _( "You can't chop that." ) ); return 0; } const std::vector helpers = g->u.get_crafting_helpers(); @@ -4567,10 +4660,13 @@ int iuse::oxytorch( player *p, item *it, bool, const tripoint & ) // Long action return 0; } - + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } static const quality_id GLARE( "GLARE" ); if( !p->has_quality( GLARE, 2 ) ) { - add_msg( m_info, _( "You need welding goggles to do that." ) ); + p->add_msg_if_player( m_info, _( "You need welding goggles to do that." ) ); return 0; } @@ -4601,7 +4697,7 @@ int iuse::oxytorch( player *p, item *it, bool, const tripoint & ) ter == t_door_bar_locked || ter == t_door_metal_pickable ) { turns = to_turns( 15_seconds ); } else { - add_msg( m_info, _( "You can't cut that." ) ); + p->add_msg_if_player( m_info, _( "You can't cut that." ) ); return 0; } @@ -4609,7 +4705,7 @@ int iuse::oxytorch( player *p, item *it, bool, const tripoint & ) int moves = to_moves( time_duration::from_turns( turns ) ); if( charges > it->ammo_remaining() ) { - add_msg( m_info, _( "Your torch doesn't have enough acetylene to cut that." ) ); + p->add_msg_if_player( m_info, _( "Your torch doesn't have enough acetylene to cut that." ) ); return 0; } @@ -4628,7 +4724,10 @@ int iuse::hacksaw( player *p, item *it, bool t, const tripoint & ) if( !p || t ) { return 0; } - + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } const cata::optional pnt_ = choose_adjacent( _( "Cut up metal where?" ) ); if( !pnt_ ) { return 0; @@ -4637,7 +4736,7 @@ int iuse::hacksaw( player *p, item *it, bool t, const tripoint & ) if( pnt == p->pos() ) { add_msg( m_info, _( "Why would you do that?" ) ); - add_msg( m_info, _( "You're not even chained to a boiler." ) ); + p->add_msg_if_player( m_info, _( "You're not even chained to a boiler." ) ); return 0; } @@ -4654,7 +4753,7 @@ int iuse::hacksaw( player *p, item *it, bool t, const tripoint & ) } else if( ter == t_door_bar_c || ter == t_door_bar_locked || ter == t_bars ) { moves = to_moves( 15_minutes ); } else { - add_msg( m_info, _( "You can't cut that." ) ); + p->add_msg_if_player( m_info, _( "You can't cut that." ) ); return 0; } @@ -4667,6 +4766,10 @@ int iuse::hacksaw( player *p, item *it, bool t, const tripoint & ) int iuse::boltcutters( player *p, item *it, bool, const tripoint & ) { + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } const cata::optional pnt_ = choose_adjacent( _( "Cut up metal where?" ) ); if( !pnt_ ) { return 0; @@ -4690,7 +4793,7 @@ int iuse::boltcutters( player *p, item *it, bool, const tripoint & ) "boltcutters" ); g->m.spawn_item( pnt, "wire", 20 ); } else { - add_msg( m_info, _( "You can't cut that." ) ); + p->add_msg_if_player( m_info, _( "You can't cut that." ) ); return 0; } return it->type->charges_to_use(); @@ -4698,6 +4801,10 @@ int iuse::boltcutters( player *p, item *it, bool, const tripoint & ) int iuse::mop( player *p, item *it, bool, const tripoint & ) { + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } const cata::optional pnt_ = choose_adjacent( _( "Mop where?" ) ); if( !pnt_ ) { return 0; @@ -4710,13 +4817,13 @@ int iuse::mop( player *p, item *it, bool, const tripoint & ) return 0; } if( p->is_blind() ) { - add_msg( _( "You move the mop around, unsure whether it's doing any good." ) ); + p->add_msg_if_player( m_info, _( "You move the mop around, unsure whether it's doing any good." ) ); p->moves -= 15; if( one_in( 3 ) ) { g->m.mop_spills( pnt ); } } else if( g->m.mop_spills( pnt ) ) { - add_msg( _( "You mop up the spill." ) ); + p->add_msg_if_player( m_info, _( "You mop up the spill." ) ); p->moves -= 15; } else { p->add_msg_if_player( m_info, _( "There's nothing to mop there." ) ); @@ -5096,9 +5203,9 @@ int iuse::handle_ground_graffiti( player &p, item *it, const std::string &prefix move_cost = 3 * g->m.graffiti_at( where ).length(); g->m.delete_graffiti( where ); if( grave ) { - add_msg( _( "You blur the inscription on the grave." ) ); + p.add_msg_if_player( m_info, _( "You blur the inscription on the grave." ) ); } else { - add_msg( _( "You manage to get rid of the message on the ground." ) ); + p.add_msg_if_player( m_info, _( "You manage to get rid of the message on the ground." ) ); } } else { add_msg( _( "There isn't anything to erase here." ) ); @@ -5107,9 +5214,9 @@ int iuse::handle_ground_graffiti( player &p, item *it, const std::string &prefix } else { g->m.set_graffiti( where, message ); if( grave ) { - add_msg( _( "You carve an inscription on the grave." ) ); + p.add_msg_if_player( m_info, _( "You carve an inscription on the grave." ) ); } else { - add_msg( _( "You write a message on the ground." ) ); + p.add_msg_if_player( m_info, _( "You write a message on the ground." ) ); } move_cost = 2 * message.length(); } @@ -5149,15 +5256,16 @@ static bool heat_item( player &p ) if( target.has_flag( "EATEN_COLD" ) ) { target.cold_up(); - add_msg( _( "You defrost the food, but don't heat it up, since you enjoy it cold." ) ); + p.add_msg_if_player( m_info, + _( "You defrost the food, but don't heat it up, since you enjoy it cold." ) ); } else { - add_msg( _( "You defrost and heat up the food." ) ); + p.add_msg_if_player( m_info, _( "You defrost and heat up the food." ) ); target.heat_up(); // x2 because we have to defrost and heat move_mod *= 2; } } else { - add_msg( _( "You heat up the food." ) ); + p.add_msg_if_player( m_info, _( "You heat up the food." ) ); target.heat_up(); } p.mod_moves( -move_mod ); // time needed to actually heat up @@ -5190,6 +5298,10 @@ int iuse::heat_food( player *p, item *it, bool, const tripoint & ) int iuse::hotplate( player *p, item *it, bool, const tripoint & ) { + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } if( it->typeId() != "atomic_coffeepot" && ( !it->units_sufficient( *p ) ) ) { p->add_msg_if_player( m_info, _( "The %s's batteries are dead." ), it->tname() ); return 0; @@ -5294,6 +5406,10 @@ int iuse::unfold_generic( player *p, item *it, bool, const tripoint & ) p->add_msg_if_player( m_info, _( "You can't do that while underwater." ) ); return 0; } + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } vehicle *veh = g->m.add_vehicle( vproto_id( "none" ), p->pos().xy(), 0, 0, 0, false ); if( veh == nullptr ) { p->add_msg_if_player( m_info, _( "There's no room to unfold the %s." ), it->tname() ); @@ -5493,6 +5609,10 @@ int iuse::gun_repair( player *p, item *it, bool, const tripoint & ) p->add_msg_if_player( m_info, _( "You can't do that while underwater." ) ); return 0; } + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } /** @EFFECT_MECHANICS >1 allows gun repair */ if( p->get_skill_level( skill_mechanics ) < 2 ) { p->add_msg_if_player( m_info, _( "You need a mechanics skill of 2 to use this repair kit." ) ); @@ -5631,8 +5751,12 @@ int iuse::misc_repair( player *p, item *it, bool, const tripoint & ) p->add_msg_if_player( m_info, _( "You can't do that while underwater." ) ); return 0; } + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } if( p->fine_detail_vision_mod() > 4 ) { - add_msg( m_info, _( "You can't see to repair!" ) ); + p->add_msg_if_player( m_info, _( "You can't see to repair!" ) ); return 0; } /** @EFFECT_FABRICATION >0 allows use of repair kit */ @@ -5745,7 +5869,8 @@ int iuse::robotcontrol( player *p, item *it, bool, const tripoint & ) if( p->has_trait( trait_HYPEROPIC ) && !p->worn_with_flag( "FIX_FARSIGHT" ) && !p->has_effect( effect_contacts ) && !p->has_bionic( bionic_id( "bio_eye_optic" ) ) ) { - add_msg( m_info, _( "You'll need to put on reading glasses before you can see the screen." ) ); + p->add_msg_if_player( m_info, + _( "You'll need to put on reading glasses before you can see the screen." ) ); return 0; } @@ -6096,7 +6221,9 @@ int iuse::einktabletpc( player *p, item *it, bool t, const tripoint &pos ) } return 0; - + } else if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; } else if( !p->is_npc() ) { enum { @@ -6108,12 +6235,13 @@ int iuse::einktabletpc( player *p, item *it, bool t, const tripoint &pos ) return 0; } if( p->has_trait( trait_ILLITERATE ) ) { - add_msg( m_info, _( "You cannot read a computer screen." ) ); + p->add_msg_if_player( m_info, _( "You cannot read a computer screen." ) ); return 0; } if( p->has_trait( trait_HYPEROPIC ) && !p->worn_with_flag( "FIX_FARSIGHT" ) && !p->has_effect( effect_contacts ) && !p->has_bionic( bionic_id( "bio_eye_optic" ) ) ) { - add_msg( m_info, _( "You'll need to put on reading glasses before you can see the screen." ) ); + p->add_msg_if_player( m_info, + _( "You'll need to put on reading glasses before you can see the screen." ) ); return 0; } @@ -6446,11 +6574,11 @@ static std::string colorized_field_description_at( const tripoint &point ) }; static const std::vector>, std::string>> affixes_vec = { - { covered_in_affix_ids, _( " covered in %s" ) }, - { on_affix_ids, _( " on %s" ) }, - { under_affix_ids, _( " under %s" ) }, - { illuminated_by_affix_ids, _( " illuminated by %s" ) } - }; // anything else is "in %s cloud" + { covered_in_affix_ids, translate_marker( " covered in %s" ) }, + { on_affix_ids, translate_marker( " on %s" ) }, + { under_affix_ids, translate_marker( " under %s" ) }, + { illuminated_by_affix_ids, translate_marker( " illuminated by %s" ) } + }; // anything else is "in %s" std::string field_text; const field &field = g->m.field_at( point ); @@ -6463,9 +6591,9 @@ static std::string colorized_field_description_at( const tripoint &point ) } } if( affix.empty() ) { - field_text = string_format( _( " in %s cloud" ), colorize( entry->name(), entry->color() ) ); + field_text = string_format( _( " in %s" ), colorize( entry->name(), entry->color() ) ); } else { - field_text = string_format( affix, colorize( entry->name(), entry->color() ) ); + field_text = string_format( _( affix ), colorize( entry->name(), entry->color() ) ); } } return field_text; @@ -6567,7 +6695,7 @@ static std::string format_object_pair( const std::pair &pair, if( pair.second == 1 ) { return article + pair.first; } else if( pair.second > 1 ) { - return string_format( "%s%i %s", article, pair.second, pair.first ); + return string_format( "%i %s", pair.second, pair.first ); } return std::string(); } @@ -6661,7 +6789,7 @@ static std::string effects_description_for_creature( Creature *const creature, s figure_effects += _( "A bionic LED is glowing softly. " ); } } - if( !figure_effects.empty() ) { // remove last space + if( !figure_effects.empty() && figure_effects.back() == ' ' ) { // remove last space figure_effects.erase( figure_effects.end() - 1 ); } return figure_effects; @@ -6785,6 +6913,7 @@ static object_names_collection enumerate_objects_around_point( const tripoint &p if( create_figure_desc ) { std::vector objects_combined_desc; + int objects_combined_num = 0; std::unordered_map vecs_to_retrieve[4] = { ret_obj.furniture, ret_obj.vehicles, ret_obj.items, ret_obj.terrain }; @@ -6793,6 +6922,7 @@ static object_names_collection enumerate_objects_around_point( const tripoint &p for( const auto &p : vecs_to_retrieve[ i ] ) { objects_combined_desc.push_back( i == 1 ? // vehicle name already includes "the" format_object_pair_no_article( p ) : format_object_pair_article( p ) ); + objects_combined_num += p.second; } } @@ -6810,7 +6940,7 @@ static object_names_collection enumerate_objects_around_point( const tripoint &p // store objects to description_figures_status std::string objects_text = enumerate_as_string( objects_combined_desc ); ret_obj.obj_nearby_text = string_format( ngettext( "Nearby is %s.", "Nearby are %s.", - objects_combined_desc.size() ), objects_text ); + objects_combined_num ), objects_text ); } } return ret_obj; @@ -6997,32 +7127,41 @@ static extended_photo_def photo_def_for_camera_point( const tripoint &aim_point, } } + auto num_of = []( const std::unordered_map &m ) -> int { + int ret = 0; + for( const auto &it : m ) + { + ret += it.second; + } + return ret; + }; + if( !obj_coll.items.empty() ) { std::string obj_list = enumerate_as_string( obj_coll.items.begin(), obj_coll.items.end(), format_object_pair_article ); photo_text += "\n\n" + string_format( ngettext( "There is something lying on the ground: %s.", - "There are some things lying on the ground: %s.", obj_coll.items.size() ), + "There are some things lying on the ground: %s.", num_of( obj_coll.items ) ), obj_list ); } if( !obj_coll.furniture.empty() ) { std::string obj_list = enumerate_as_string( obj_coll.furniture.begin(), obj_coll.furniture.end(), format_object_pair_article ); photo_text += "\n\n" + string_format( ngettext( "Something is visible in the background: %s.", - "Some objects are visible in the background: %s.", obj_coll.furniture.size() ), + "Some objects are visible in the background: %s.", num_of( obj_coll.furniture ) ), obj_list ); } if( !obj_coll.vehicles.empty() ) { std::string obj_list = enumerate_as_string( obj_coll.vehicles.begin(), obj_coll.vehicles.end(), format_object_pair_no_article ); photo_text += "\n\n" + string_format( ngettext( "There is %s parked in the background.", - "There are %s parked in the background.", obj_coll.vehicles.size() ), + "There are %s parked in the background.", num_of( obj_coll.vehicles ) ), obj_list ); } if( !obj_coll.terrain.empty() ) { std::string obj_list = enumerate_as_string( obj_coll.terrain.begin(), obj_coll.terrain.end(), format_object_pair_article ); photo_text += "\n\n" + string_format( ngettext( "There is %s in the background.", - "There are %s in the background.", obj_coll.terrain.size() ), + "There are %s in the background.", num_of( obj_coll.terrain ) ), obj_list ); } @@ -7177,7 +7316,7 @@ static bool show_photo_selection( player &p, item &it, const std::string &var_na size_t index = menu_str.find( p.name ); if( index != std::string::npos ) { - menu_str.replace( index, p.name.length(), "You" ); + menu_str.replace( index, p.name.length(), _( "You" ) ); } descriptions.push_back( extended_photo.description ); @@ -7483,6 +7622,7 @@ int iuse::camera( player *p, item *it, bool, const tripoint & ) int iuse::ehandcuffs( player *p, item *it, bool t, const tripoint &pos ) { + if( t ) { if( g->m.has_flag( "SWIMMABLE", pos.xy() ) ) { @@ -7576,7 +7716,7 @@ int iuse::ehandcuffs( player *p, item *it, bool t, const tripoint &pos ) return it->type->charges_to_use(); } -int iuse::foodperson( player *, item *it, bool t, const tripoint &pos ) +int iuse::foodperson( player *p, item *it, bool t, const tripoint &pos ) { if( t ) { if( calendar::once_every( 1_minutes ) ) { @@ -7590,7 +7730,8 @@ int iuse::foodperson( player *, item *it, bool t, const tripoint &pos ) time_duration shift = time_duration::from_turns( it->magazine_current()->ammo_remaining() * it->type->tool->turns_per_charge ); - add_msg( m_info, _( "Your HUD lights-up: \"Your shift ends in %s\"." ), to_string( shift ) ); + p->add_msg_if_player( m_info, _( "Your HUD lights-up: \"Your shift ends in %s\"." ), + to_string( shift ) ); return 0; } @@ -8012,7 +8153,7 @@ static bool multicooker_hallu( player &p ) m->add_effect( effect_run, 1_turns, num_bp, true ); } } else { - add_msg( m_bad, _( "You're surrounded by aggressive multi-cookers!" ) ); + p.add_msg_if_player( m_info, _( "You're surrounded by aggressive multi-cookers!" ) ); for( auto &point : points ) { if( monster *const m = g->summon_mon( mon_hallu_multicooker, point ) ) { @@ -8127,7 +8268,6 @@ int iuse::multicooker( player *p, item *it, bool t, const tripoint &pos ) { static const std::set multicooked_subcats = { "CSC_FOOD_MEAT", "CSC_FOOD_VEGGI", "CSC_FOOD_PASTA" }; static const int charges_to_start = 50; - if( t ) { if( !it->units_sufficient( *p ) ) { it->active = false; @@ -8181,7 +8321,8 @@ int iuse::multicooker( player *p, item *it, bool t, const tripoint &pos ) } if( p->has_trait( trait_ILLITERATE ) ) { - add_msg( m_info, _( "You cannot read, and don't understand the screen or the buttons!" ) ); + p->add_msg_if_player( m_info, + _( "You cannot read, and don't understand the screen or the buttons!" ) ); return 0; } @@ -8193,7 +8334,8 @@ int iuse::multicooker( player *p, item *it, bool t, const tripoint &pos ) if( p->has_trait( trait_HYPEROPIC ) && !p->worn_with_flag( "FIX_FARSIGHT" ) && !p->has_effect( effect_contacts ) ) { - add_msg( m_info, _( "You'll need to put on reading glasses before you can see the screen." ) ); + p->add_msg_if_player( m_info, + _( "You'll need to put on reading glasses before you can see the screen." ) ); return 0; } @@ -8361,7 +8503,7 @@ int iuse::multicooker( player *p, item *it, bool t, const tripoint &pos ) if( mc_upgrade == choice ) { if( !p->has_morale_to_craft() ) { - add_msg( m_info, _( "Your morale is too low to craft..." ) ); + p->add_msg_if_player( m_info, _( "Your morale is too low to craft..." ) ); return 0; } @@ -8608,6 +8750,10 @@ int iuse::cable_attach( player *p, item *it, bool, const tripoint & ) int iuse::shavekit( player *p, item *it, bool, const tripoint & ) { + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } if( !it->ammo_sufficient() ) { p->add_msg_if_player( _( "You need soap to use this." ) ); } else { @@ -8619,6 +8765,10 @@ int iuse::shavekit( player *p, item *it, bool, const tripoint & ) int iuse::hairkit( player *p, item *it, bool, const tripoint & ) { + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } const int moves = to_moves( 30_minutes ); p->assign_activity( activity_id( "ACT_HAIRCUT" ), moves ); return it->type->charges_to_use(); @@ -8721,6 +8871,10 @@ int iuse::directional_hologram( player *p, item *it, bool, const tripoint &pos ) int iuse::capture_monster_veh( player *p, item *it, bool, const tripoint &pos ) { + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } if( !it->has_flag( "VEHICLE" ) ) { p->add_msg_if_player( m_info, _( "The %s must be installed in a vehicle before being loaded." ), it->tname() ); @@ -8790,6 +8944,10 @@ int item::contain_monster( const tripoint &target ) int iuse::capture_monster_act( player *p, item *it, bool, const tripoint &pos ) { + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot capture a creature mounted." ) ); + return 0; + } if( it->has_var( "contained_name" ) ) { tripoint target; if( g->is_empty( pos ) ) { @@ -8879,7 +9037,10 @@ int iuse::ladder( player *p, item *, bool, const tripoint & ) debugmsg( "Ladder can't be used in non-z-level mode" ); return 0; } - + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } const cata::optional pnt_ = choose_adjacent( _( "Put the ladder where?" ) ); if( !pnt_ ) { return 0; @@ -8911,7 +9072,10 @@ int iuse::wash_soft_items( player *p, item *, bool, const tripoint & ) p->add_msg_if_player( _( "You can't see to do that!" ) ); return 0; } - + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } // Check that player isn't over volume limit as this might cause it to break... this is a hack. // TODO: find a better solution. if( p->volume_capacity() < p->volume_carried() ) { @@ -8929,7 +9093,10 @@ int iuse::wash_hard_items( player *p, item *, bool, const tripoint & ) p->add_msg_if_player( _( "You can't see to do that!" ) ); return 0; } - + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } // Check that player isn't over volume limit as this might cause it to break... this is a hack. // TODO: find a better solution. if( p->volume_capacity() < p->volume_carried() ) { @@ -8961,6 +9128,10 @@ int iuse::wash_all_items( player *p, item *, bool, const tripoint & ) int iuse::wash_items( player *p, bool soft_items, bool hard_items ) { + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } p->inv.restack( *p ); const inventory &crafting_inv = p->crafting_inventory(); @@ -9123,6 +9294,10 @@ int iuse::panacea( player *p, item *it, bool, const tripoint & ) int iuse::craft( player *p, item *it, bool, const tripoint & ) { + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } if( !p->is_wielding( *it ) ) { if( !p->is_armed() || query_yn( "Wield the %s and start working?", it->tname() ) ) { if( !p->wield( *it ) ) { @@ -9167,6 +9342,10 @@ int iuse::craft( player *p, item *it, bool, const tripoint & ) int iuse::disassemble( player *p, item *it, bool, const tripoint & ) { + if( p->is_mounted() ) { + p->add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } if( !p->has_item( *it ) ) { return 0; } diff --git a/src/iuse_actor.cpp b/src/iuse_actor.cpp index bd3484c8c2295..210a2f63c427e 100644 --- a/src/iuse_actor.cpp +++ b/src/iuse_actor.cpp @@ -520,7 +520,10 @@ int unfold_vehicle_iuse::use( player &p, item &it, bool /*t*/, const tripoint &/ p.add_msg_if_player( m_info, _( "You can't do that while underwater." ) ); return 0; } - + if( p.is_mounted() ) { + p.add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } for( const auto &tool : tools_needed ) { // Amount == -1 means need one, but don't consume it. if( !p.has_amount( tool.first, 1 ) ) { @@ -930,6 +933,11 @@ int pick_lock_actor::use( player &p, item &it, bool, const tripoint & ) const return 0; } + if( p.is_mounted() ) { + p.add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } + std::set allowed_ter_id { t_chaingate_l, t_door_locked, @@ -966,6 +974,7 @@ int pick_lock_actor::use( player &p, item &it, bool, const tripoint & ) const if( !pnt_ ) { pnt_ = choose_adjacent( _( "Use your lockpick where?" ) ); } + if( !pnt_ ) { return 0; } @@ -1109,6 +1118,10 @@ void deploy_furn_actor::load( JsonObject &obj ) int deploy_furn_actor::use( player &p, item &it, bool, const tripoint &pos ) const { + if( p.is_mounted() ) { + p.add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } tripoint pnt = pos; if( pos == p.pos() ) { if( const cata::optional pnt_ = choose_adjacent( _( "Deploy where?" ) ) ) { @@ -1771,7 +1784,10 @@ int cauterize_actor::use( player &p, item &it, bool t, const tripoint & ) const if( t ) { return 0; } - + if( p.is_mounted() ) { + p.add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } bool has_disease = p.has_effect( effect_bite ) || p.has_effect( effect_bleed ); bool did_cauterize = false; @@ -1811,6 +1827,9 @@ ret_val cauterize_actor::can_use( const player &p, const item &it, bool, return ret_val::make_failure( _( "You are not bleeding or bitten, there is no need to cauterize yourself." ) ); } + if( p.is_mounted() ) { + return ret_val::make_failure( _( "You cannot cauterize while mounted." ) ); + } if( flame ) { if( !p.has_charges( "fire", 4 ) ) { @@ -1846,7 +1865,10 @@ int enzlave_actor::use( player &p, item &it, bool t, const tripoint & ) const if( t ) { return 0; } - + if( p.is_mounted() ) { + p.add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } auto items = g->m.i_at( point( p.posx(), p.posy() ) ); std::vector corpses; @@ -1965,7 +1987,9 @@ ret_val enzlave_actor::can_use( const player &p, const item &, bool, const return ret_val::make_failure( _( "You need at least %s 1." ), skill_survival->name() ); } - + if( p.is_mounted() ) { + return ret_val::make_failure( _( "You cannot do that while mounted." ) ); + } if( p.get_skill_level( skill_firstaid ) < 1 ) { //~ %s - name of the required skill. return ret_val::make_failure( _( "You need at least %s 1." ), @@ -2147,6 +2171,12 @@ void musical_instrument_actor::load( JsonObject &obj ) int musical_instrument_actor::use( player &p, item &it, bool t, const tripoint & ) const { + if( p.is_mounted() ) { + p.add_msg_player_or_npc( m_bad, _( "You can't play music while mounted." ), + _( " can't play music while mounted." ) ); + it.active = false; + return 0; + } if( p.is_underwater() ) { p.add_msg_player_or_npc( m_bad, _( "You can't play music underwater" ), @@ -2258,6 +2288,9 @@ ret_val musical_instrument_actor::can_use( const player &p, const item &, if( p.is_underwater() ) { return ret_val::make_failure( _( "You can't do that while underwater." ) ); } + if( p.is_mounted() ) { + return ret_val::make_failure( _( "You can't do that while mounted." ) ); + } return ret_val::make_success(); } @@ -2829,6 +2862,13 @@ bool repair_item_actor::can_use_tool( const player &p, const item &tool, bool pr } return false; } + if( p.is_mounted() ) { + if( print_msg ) { + p.add_msg_player_or_npc( m_bad, _( "You can't do that while mounted." ), + _( " can't do that while mounted." ) ); + } + return false; + } if( p.fine_detail_vision_mod() > 4 ) { if( print_msg ) { p.add_msg_if_player( m_info, _( "You can't see to do that!" ) ); @@ -3393,7 +3433,10 @@ int heal_actor::use( player &p, item &it, bool, const tripoint &pos ) const p.add_msg_if_player( m_info, _( "You can't do that while underwater." ) ); return 0; } - + if( p.is_mounted() ) { + p.add_msg_if_player( m_info, _( "You can't do that while mounted." ) ); + return 0; + } if( get_option( "FILTHY_WOUNDS" ) && it.is_filthy() ) { p.add_msg_if_player( m_info, _( "You can't use filthy items for healing." ) ); return 0; @@ -3861,6 +3904,10 @@ int place_trap_actor::use( player &p, item &it, bool, const tripoint & ) const p.add_msg_if_player( m_info, _( "You can't do that while underwater." ) ); return 0; } + if( p.is_mounted() ) { + p.add_msg_if_player( m_info, _( "You can't do that while mounted." ) ); + return 0; + } const cata::optional pos_ = choose_adjacent( string_format( _( "Place %s where?" ), it.tname() ) ); if( !pos_ ) { @@ -4021,7 +4068,9 @@ ret_val install_bionic_actor::can_use( const player &p, const item &it, bo if( !it.is_bionic() ) { return ret_val::make_failure(); } - + if( p.is_mounted() ) { + return ret_val::make_failure( _( "You can't install bionics while mounted." ) ); + } if( !get_option( "MANUAL_BIONIC_INSTALLATION" ) && !p.has_trait( trait_id( "DEBUG_BIONICS" ) ) ) { return ret_val::make_failure( _( "You can't self-install bionics." ) ); @@ -4272,7 +4321,10 @@ void deploy_tent_actor::load( JsonObject &obj ) int deploy_tent_actor::use( player &p, item &it, bool, const tripoint & ) const { int diam = 2 * radius + 1; - + if( p.is_mounted() ) { + p.add_msg_if_player( _( "You cannot do that while mounted." ) ); + return 0; + } const cata::optional dir = choose_direction( string_format( _( "Put up the %s where (%dx%d clear area)?" ), it.tname(), diam, diam ) ); if( !dir ) { @@ -4352,6 +4404,10 @@ void weigh_self_actor::info( const item &, std::vector &dump ) const int weigh_self_actor::use( player &p, item &, bool, const tripoint & ) const { + if( p.is_mounted() ) { + p.add_msg_if_player( m_info, _( "You cannot weigh yourself while mounted." ) ); + return 0; + } // this is a weight, either in kgs or in lbs. double weight = convert_weight( p.get_weight() ); if( weight > convert_weight( max_weight ) ) { @@ -4397,7 +4453,10 @@ int sew_advanced_actor::use( player &p, item &it, bool, const tripoint & ) const if( p.is_npc() ) { return 0; } - + if( p.is_mounted() ) { + p.add_msg_if_player( m_info, _( "You cannot do that while mounted." ) ); + return 0; + } if( p.is_underwater() ) { p.add_msg_if_player( m_info, _( "You can't do that while underwater." ) ); return 0; diff --git a/src/magic.cpp b/src/magic.cpp index 57a8e2037297b..8d4d47ecca8a1 100644 --- a/src/magic.cpp +++ b/src/magic.cpp @@ -1581,7 +1581,7 @@ static void draw_spellbook_info( const spell_type &sp, uilist *menu ) print_colored_text( w, point( menu->pad_left - spell_class.length() - 1, line++ ), yellow, yellow, spell_class ); line++; - line += fold_and_print( w, point( start_x, line ), width, gray, sp.description.translated() ); + line += fold_and_print( w, point( start_x, line ), width, gray, "%s", sp.description ); line++; mvwprintz( w, point( start_x, line ), c_light_gray, string_format( "%s: %d", _( "Difficulty" ), diff --git a/src/map.cpp b/src/map.cpp index 303fffe70e549..175a24faa75b7 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -434,14 +434,33 @@ static bool sees_veh( const Creature &c, vehicle &veh, bool force_recalc ) vehicle *map::move_vehicle( vehicle &veh, const tripoint &dp, const tileray &facing ) { - const bool vertical = dp.z != 0; - if( ( dp.x == 0 && dp.y == 0 && dp.z == 0 ) || - ( abs( dp.x ) > 1 || abs( dp.y ) > 1 || abs( dp.z ) > 1 ) || - ( vertical && ( dp.x != 0 || dp.y != 0 ) ) ) { - debugmsg( "move_vehicle called with %d,%d,%d displacement vector", dp.x, dp.y, dp.z ); + if( dp == tripoint_zero ) { + debugmsg( "Empty displacement vector" ); + return &veh; + } else if( abs( dp.x ) > 1 || abs( dp.y ) > 1 || abs( dp.z ) > 1 ) { + debugmsg( "Invalid displacement vector: %d, %d, %d", dp.x, dp.y, dp.z ); return &veh; } + // Split the movement into horizontal and vertical for easier processing + if( dp.xy() != point_zero && dp.z != 0 ) { + vehicle *const new_pointer = move_vehicle( veh, tripoint( dp.xy(), 0 ), facing ); + if( !new_pointer ) { + return nullptr; + } + + vehicle *const result = move_vehicle( *new_pointer, tripoint( 0, 0, dp.z ), facing ); + if( !result ) { + return nullptr; + } + + result->is_falling = false; + return result; + } + const bool vertical = dp.z != 0; + // Ensured by the splitting above + assert( vertical == ( dp.xy() == point_zero ) ); + const int target_z = dp.z + veh.sm_pos.z; if( target_z < -OVERMAP_DEPTH || target_z > OVERMAP_HEIGHT ) { return &veh; @@ -543,24 +562,6 @@ vehicle *map::move_vehicle( vehicle &veh, const tripoint &dp, const tileray &fac } } - // Now we're gonna handle traps we're standing on (if we're still moving). - if( !vertical && can_move ) { - const auto wheel_indices = veh.wheelcache; // Don't use a reference here, it causes a crash. - for( auto &w : wheel_indices ) { - const tripoint wheel_p = veh.global_part_pos3( w ); - if( one_in( 2 ) && displace_water( wheel_p ) ) { - sounds::sound( wheel_p, 4, sounds::sound_t::movement, _( "splash!" ), false, - "environment", "splash" ); - } - - veh.handle_trap( wheel_p, w ); - if( !has_flag( "SEALED", wheel_p ) ) { - // TODO: Make this value depend on the wheel - smash_items( wheel_p, 5 ); - } - } - } - const int last_turn_dec = 1; if( veh.last_turn < 0 ) { veh.last_turn += last_turn_dec; @@ -606,6 +607,23 @@ vehicle *map::move_vehicle( vehicle &veh, const tripoint &dp, const tileray &fac veh.possibly_recover_from_skid(); } } + // Now we're gonna handle traps we're standing on (if we're still moving). + if( !vertical && can_move ) { + const auto wheel_indices = veh.wheelcache; // Don't use a reference here, it causes a crash. + for( auto &w : wheel_indices ) { + const tripoint wheel_p = veh.global_part_pos3( w ); + if( one_in( 2 ) && displace_water( wheel_p ) ) { + sounds::sound( wheel_p, 4, sounds::sound_t::movement, _( "splash!" ), false, + "environment", "splash" ); + } + + veh.handle_trap( wheel_p, w ); + if( !has_flag( "SEALED", wheel_p ) ) { + // TODO: Make this value depend on the wheel + smash_items( wheel_p, 5 ); + } + } + } // Redraw scene // But only if the vehicle was seen before or after the move if( seen || sees_veh( g->u, veh, true ) ) { @@ -3036,7 +3054,7 @@ static bool furn_is_supported( const map &m, const tripoint &p ) void map::bash_ter_furn( const tripoint &p, bash_params ¶ms ) { - std::string sound; + translation sound; int sound_volume = 0; std::string soundfxid; std::string soundfxvariant; @@ -5389,6 +5407,17 @@ field_entry *map::get_field( const tripoint &p, const field_type_id type ) return current_submap->fld[l.x][l.y].find_field( type ); } +bool map::dangerous_field_at( const tripoint &p ) +{ + for( auto &pr : field_at( p ) ) { + auto &fd = pr.second; + if( fd.is_dangerous() ) { + return true; + } + } + return false; +} + bool map::add_field( const tripoint &p, const field_type_id type, int intensity, const time_duration &age ) { diff --git a/src/map.h b/src/map.h index 610ef9c5b45e4..3156c0ac37065 100644 --- a/src/map.h +++ b/src/map.h @@ -1122,6 +1122,7 @@ class map * @return NULL if there is no such field entry at that place. */ field_entry *get_field( const tripoint &p, field_type_id type ); + bool dangerous_field_at( const tripoint &p ); /** * Add field entry at point, or set intensity if present * @return false if the field could not be created (out of bounds), otherwise true. diff --git a/src/mapdata.cpp b/src/mapdata.cpp index ed5ce64a8901f..08a02ac3f67bc 100644 --- a/src/mapdata.cpp +++ b/src/mapdata.cpp @@ -222,8 +222,10 @@ bool map_bash_info::load( JsonObject &jsobj, const std::string &member, bool is_ bash_below = j.get_bool( "bash_below", false ); - sound = _( j.get_string( "sound", "smash!" ) ); - sound_fail = _( j.get_string( "sound_fail", "thump!" ) ); + sound = translation( "smash!" ); + sound_fail = translation( "thump!" ); + j.read( "sound", sound ); + j.read( "sound_fail", sound_fail ); if( is_furniture ) { furn_set = furn_str_id( j.get_string( "furn_set", "f_null" ) ); diff --git a/src/mapdata.h b/src/mapdata.h index cbad1bf2ee8e3..8554efa6de91e 100644 --- a/src/mapdata.h +++ b/src/mapdata.h @@ -42,8 +42,8 @@ struct map_bash_info { bool destroy_only; // Only used for destroying, not normally bashable bool bash_below; // This terrain is the roof of the tile below it, try to destroy that too std::string drop_group; // item group of items that are dropped when the object is bashed - std::string sound; // sound made on success ('You hear a "smash!"') - std::string sound_fail; // sound made on fail + translation sound; // sound made on success ('You hear a "smash!"') + translation sound_fail; // sound made on fail ter_str_id ter_set; // terrain to set (REQUIRED for terrain)) ter_str_id ter_set_bashed_from_above; // terrain to set if bashed from above (defaults to ter_set) furn_str_id furn_set; // furniture to set (only used by furniture, not terrain) diff --git a/src/martialarts.cpp b/src/martialarts.cpp index 9428556d8457a..4c864c2666d0b 100644 --- a/src/martialarts.cpp +++ b/src/martialarts.cpp @@ -111,6 +111,7 @@ void ma_technique::load( JsonObject &jo, const std::string &src ) optional( jo, was_loaded, "defensive", defensive, false ); optional( jo, was_loaded, "disarms", disarms, false ); + optional( jo, was_loaded, "side_switch", side_switch, false ); optional( jo, was_loaded, "dummy", dummy, false ); optional( jo, was_loaded, "dodge_counter", dodge_counter, false ); optional( jo, was_loaded, "block_counter", block_counter, false ); @@ -478,6 +479,7 @@ ma_technique::ma_technique() crit_tec = false; crit_ok = false; defensive = false; + side_switch = false; // moves the target behind user dummy = false; down_dur = 0; @@ -1175,6 +1177,10 @@ std::string ma_technique::get_description() const dump << _( "* Will only activate on a crit" ) << std::endl; } + if( side_switch ) { + dump << _( "* Moves target behind you" ) << std::endl; + } + if( downed_target ) { dump << _( "* Only works on a downed target" ) << std::endl; } diff --git a/src/martialarts.h b/src/martialarts.h index 7158b68052255..52e38a2aa76cb 100644 --- a/src/martialarts.h +++ b/src/martialarts.h @@ -82,6 +82,7 @@ class ma_technique std::string npc_message; bool defensive; + bool side_switch; // moves the target behind user bool dummy; bool crit_tec; bool crit_ok; diff --git a/src/melee.cpp b/src/melee.cpp index d2dc2875ad07a..5ea751e556047 100644 --- a/src/melee.cpp +++ b/src/melee.cpp @@ -1273,6 +1273,33 @@ void player::perform_technique( const ma_technique &technique, Creature &t, dama } } + if( technique.side_switch ) { + const tripoint b = t.pos(); + int newx; + int newy; + + if( b.x > posx() ) { + newx = posx() - 1; + } else if( b.x < posx() ) { + newx = posx() + 1; + } else { + newx = b.x; + } + + if( b.y > posy() ) { + newy = posy() - 1; + } else if( b.y < posy() ) { + newy = posy() + 1; + } else { + newy = b.y; + } + + const tripoint &dest = tripoint( newx, newy, b.z ); + if( g->is_empty( dest ) ) { + t.setpos( dest ); + } + } + if( technique.stun_dur > 0 ) { t.add_effect( effect_stunned, rng( 1_turns, time_duration::from_turns( technique.stun_dur ) ) ); } diff --git a/src/monattack.cpp b/src/monattack.cpp index 34195f38706fc..6a95f76bfa63b 100644 --- a/src/monattack.cpp +++ b/src/monattack.cpp @@ -2623,6 +2623,10 @@ bool mattack::grab( monster *z ) if( target->has_effect( effect_grabbed ) ) { target->add_msg_if_player( m_info, _( "The %s tries to grab you as well, but you bat it away!" ), z->name() ); + } else if( pl->is_throw_immune() && ( !pl->is_armed() || + pl->style_selected.obj().has_weapon( pl->weapon.typeId() ) ) ) { + target->add_msg_if_player( m_info, _( "The %s tries to grab you..." ), z->name() ); + thrown_by_judo( z ); } else if( pl->has_grab_break_tec() ) { ma_technique tech = pl->get_grab_break_tec(); target->add_msg_player_or_npc( m_info, _( tech.player_message ), _( tech.npc_message ), z->name() ); @@ -4469,8 +4473,10 @@ bool mattack::thrown_by_judo( monster *z ) } // Monster is down, z->add_effect( effect_downed, 5_turns ); + const int min_damage = 10 + foe->get_skill_level( skill_unarmed ); + const int max_damage = 20 + foe->get_skill_level( skill_unarmed ); // Deal moderate damage - const auto damage = rng( 10, 20 ); + const auto damage = rng( min_damage, max_damage ); z->apply_damage( foe, bp_torso, damage ); z->check_dead_state(); } else { @@ -4822,7 +4828,8 @@ bool mattack::bio_op_takedown( monster *z ) } foe->add_effect( effect_downed, 3_turns ); } - } else if( !thrown_by_judo( z ) ) { + } else if( ( !foe->is_armed() || foe->style_selected.obj().has_weapon( foe->weapon.typeId() ) ) && + !thrown_by_judo( z ) ) { // Saved by the tentacle-bracing! :) hit = bp_torso; dam = rng( 3, 9 ); diff --git a/src/monmove.cpp b/src/monmove.cpp index e6116660ea521..b71c0145dd455 100644 --- a/src/monmove.cpp +++ b/src/monmove.cpp @@ -1876,6 +1876,9 @@ void monster::shove_vehicle( const tripoint &remote_destination, veh.skidding = true; veh.velocity = shove_velocity; if( shove_destination != tripoint_zero ) { + if( shove_destination.z != 0 ) { + veh.vertical_velocity = shove_destination.z < 0 ? -shove_velocity : +shove_velocity; + } g->m.move_vehicle( veh, shove_destination, veh.face ); } veh.move = tileray( destination_delta_x, destination_delta_y ); diff --git a/src/monster.cpp b/src/monster.cpp index 56336c6025907..583a28eda2930 100644 --- a/src/monster.cpp +++ b/src/monster.cpp @@ -346,7 +346,7 @@ void monster::try_upgrade( bool pin_time ) return; } - const int current_day = to_days( calendar::turn - time_point( calendar::start_of_cataclysm ) ); + const int current_day = to_days( calendar::turn - calendar::start_of_cataclysm ); //This should only occur when a monster is created or upgraded to a new form if( upgrade_time < 0 ) { upgrade_time = next_upgrade_time(); @@ -359,7 +359,7 @@ void monster::try_upgrade( bool pin_time ) } else { // offset by starting season // @todo revisit this and make it simpler - upgrade_time += to_turn( calendar::start_of_cataclysm ); + upgrade_time += to_days( calendar::start_of_cataclysm - calendar::turn_zero ); } } diff --git a/src/npc.cpp b/src/npc.cpp index c0444daf966b5..5fd4aa3a00b56 100644 --- a/src/npc.cpp +++ b/src/npc.cpp @@ -107,7 +107,7 @@ void starting_clothes( npc &who, const npc_class_id &type, bool male ); void starting_inv( npc &who, const npc_class_id &type ); npc::npc() - : restock( calendar::before_time_starts ) + : restock( calendar::turn_zero ) , companion_mission_time( calendar::before_time_starts ) , companion_mission_time_ret( calendar::before_time_starts ) , last_updated( calendar::turn ) @@ -324,11 +324,6 @@ void npc::randomize( const npc_class_id &type ) int_max = the_class.roll_intelligence(); per_max = the_class.roll_perception(); - if( myclass->get_shopkeeper_items() != "EMPTY_GROUP" ) { - restock = calendar::turn + 3_days; - cash += 100000; - } - for( auto &skill : Skill::skills ) { int level = myclass->roll_skill( skill.ident() ); @@ -1339,7 +1334,7 @@ int npc::max_willing_to_owe() const void npc::shop_restock() { - if( calendar::turn - restock < 3_days ) { + if( ( restock != calendar::turn_zero ) && ( ( calendar::turn - restock ) < 3_days ) ) { return; } diff --git a/src/npcmove.cpp b/src/npcmove.cpp index c67dd6ead244a..2b4611fd6f346 100644 --- a/src/npcmove.cpp +++ b/src/npcmove.cpp @@ -829,7 +829,8 @@ void npc::move() // No items, so follow the player? action = npc_follow_player; } - + // Friendly NPCs who are followers/ doing tasks for the player should never get here. + // This will revert them to a dynamic NPC state. if( action == npc_undecided ) { // Do our long-term action action = long_term_goal_action(); @@ -854,7 +855,6 @@ void npc::move() } add_msg( m_debug, "%s chose action %s.", name, npc_action_name( action ) ); - execute_action( action ); } @@ -3022,12 +3022,12 @@ bool npc::do_player_activity() } /* if the activity is finished, grab any backlog or change the mission */ if( !has_destination() && !activity ) { - add_msg( m_info, _( "%s completed the assigned task." ), disp_name() ); if( !backlog.empty() ) { activity = backlog.front(); backlog.pop_front(); current_activity_id = activity.id(); } else { + add_msg( m_info, string_format( "%s completed the assigned task.", disp_name() ) ); current_activity_id = activity_id::NULL_ID(); revert_after_activity(); // if we loaded after being out of the bubble for a while, we might have more diff --git a/src/npctalk.cpp b/src/npctalk.cpp index d7e15146d5048..e1ffefe48a7fc 100644 --- a/src/npctalk.cpp +++ b/src/npctalk.cpp @@ -44,6 +44,7 @@ #include "npctrade.h" #include "output.h" #include "overmapbuffer.h" +#include "recipe.h" #include "rng.h" #include "skill.h" #include "sounds.h" @@ -2147,6 +2148,15 @@ void talk_effect_fun_t::set_u_buy_monster( const std::string &monster_type_id, i }; } +void talk_effect_fun_t::set_u_learn_recipe( const std::string &learned_recipe_id ) +{ + function = [learned_recipe_id]( const dialogue & d ) { + const recipe &r = recipe_id( learned_recipe_id ).obj(); + d.alpha->learn_recipe( &r ); + popup( _( "You learn how to craft %s." ), r.result_name() ); + }; +} + void talk_effect_t::set_effect_consequence( const talk_effect_fun_t &fun, dialogue_consequence con ) { effects.push_back( fun ); @@ -2351,6 +2361,9 @@ void talk_effect_t::parse_sub_effect( JsonObject jo ) translation name; jo.read( "name", name ); subeffect_fun.set_u_buy_monster( monster_type_id, cost, count, pacified, name ); + } else if( jo.has_string( "u_learn_recipe" ) ) { + const std::string recipe_id = jo.get_string( "u_learn_recipe" ); + subeffect_fun.set_u_learn_recipe( recipe_id ); } else { jo.throw_error( "invalid sub effect syntax :" + jo.str() ); } @@ -2370,7 +2383,7 @@ void talk_effect_t::parse_string_effect( const std::string &effect_id, JsonObjec WRAP( start_trade ), WRAP( sort_loot ), WRAP( do_construction ), - WRAP( do_blueprint_construction ), + WRAP( do_farming ), WRAP( assign_guard ), WRAP( stop_guard ), WRAP( start_camp ), diff --git a/src/npctalk.h b/src/npctalk.h index cf55f7a7b1b0e..47b23b0864607 100644 --- a/src/npctalk.h +++ b/src/npctalk.h @@ -36,7 +36,7 @@ void buy_100_logs( npc & ); void start_trade( npc & ); void sort_loot( npc & ); void do_construction( npc & ); -void do_blueprint_construction( npc & ); +void do_farming( npc & ); void revert_activity( npc & ); void goto_location( npc & ); void assign_base( npc & ); diff --git a/src/npctalk_funcs.cpp b/src/npctalk_funcs.cpp index 0ffdc6bbd5971..0a55756ad277c 100644 --- a/src/npctalk_funcs.cpp +++ b/src/npctalk_funcs.cpp @@ -207,10 +207,10 @@ void talk_function::do_construction( npc &p ) p.set_mission( NPC_MISSION_ACTIVITY ); } -void talk_function::do_blueprint_construction( npc &p ) +void talk_function::do_farming( npc &p ) { p.set_attitude( NPCATT_ACTIVITY ); - p.assign_activity( activity_id( "ACT_BLUEPRINT_CONSTRUCTION" ) ); + p.assign_activity( activity_id( "ACT_MULTIPLE_FARM" ) ); p.set_mission( NPC_MISSION_ACTIVITY ); } @@ -274,6 +274,10 @@ void talk_function::assign_guard( npc &p ) return; } + if( p.has_player_activity() ) { + p.revert_after_activity(); + } + if( p.is_travelling() ) { if( p.has_companion_mission() ) { p.reset_companion_mission(); diff --git a/src/player.cpp b/src/player.cpp index 4b443834bd805..26bf6ffa77439 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -1561,7 +1561,6 @@ int player::run_cost( int base_cost, bool diag ) const if( diag ) { movecost *= 0.7071f; // because everything here assumes 100 is base } - float stamina_modifier; const bool flatground = movecost < 105; // The "FLAT" tag includes soft surfaces, so not a good fit. const bool on_road = flatground && g->m.has_flag( "ROAD", pos() ); @@ -1661,19 +1660,17 @@ int player::run_cost( int base_cost, bool diag ) const } // Both walk and run speed drop to half their maximums as stamina approaches 0. // Convert stamina to a float first to allow for decimal place carrying - stamina_modifier = ( static_cast( stamina ) / get_stamina_max() + 1 ) / 2; - } else { - stamina_modifier = 1.0; - } + float stamina_modifier = ( static_cast( stamina ) / get_stamina_max() + 1 ) / 2; + if( move_mode == PMM_RUN && stamina > 0 ) { + // Rationale: Average running speed is 2x walking speed. (NOT sprinting) + stamina_modifier *= 2.0; + } + if( move_mode == PMM_CROUCH ) { + stamina_modifier *= 0.5; + } + movecost /= stamina_modifier; - if( move_mode == PMM_RUN && stamina > 0 ) { - // Rationale: Average running speed is 2x walking speed. (NOT sprinting) - stamina_modifier *= 2.0; - } - if( move_mode == PMM_CROUCH ) { - stamina_modifier *= 0.5; } - movecost /= stamina_modifier; if( diag ) { movecost *= M_SQRT2; @@ -9736,7 +9733,7 @@ std::string player::is_snuggling() const // 6.0 is LIGHT_AMBIENT_DIM // 7.3 is LIGHT_AMBIENT_MINIMAL, a dark cloudy night, unlit indoors // 11.0 is zero light or blindness -float player::fine_detail_vision_mod() const +float player::fine_detail_vision_mod( const tripoint &p ) const { // PER_SLIME_OK implies you can get enough eyes around the bile // that you can generally see. There still will be the haze, but @@ -9752,7 +9749,8 @@ float player::fine_detail_vision_mod() const float own_light = std::max( 1.0, LIGHT_AMBIENT_LIT - active_light() - 2 ); // Same calculation as above, but with a result 3 lower. - float ambient_light = std::max( 1.0, LIGHT_AMBIENT_LIT - g->m.ambient_light_at( pos() ) + 1.0 ); + float ambient_light = std::max( 1.0, + LIGHT_AMBIENT_LIT - g->m.ambient_light_at( p == tripoint_zero ? pos() : p ) + 1.0 ); return std::min( own_light, ambient_light ); } @@ -10489,6 +10487,8 @@ void player::assign_activity( const player_activity &act, bool allow_resume ) } if( is_npc() ) { npc *guy = dynamic_cast( this ); + guy->set_attitude( NPCATT_ACTIVITY ); + guy->set_mission( NPC_MISSION_ACTIVITY ); guy->current_activity_id = activity.id(); } } diff --git a/src/player.h b/src/player.h index 8db74e89d1f5d..012d63869db4d 100644 --- a/src/player.h +++ b/src/player.h @@ -350,8 +350,7 @@ class player : public Character int skill_level = -1 ); /**Success or failure of installation happens here*/ void perform_install( bionic_id bid, bionic_id upbid, int difficulty, int success, - int pl_skill, - std::string cbm_name, std::string upcbm_name, std::string installer_name, + int pl_skill, std::string installer_name, std::vector trait_to_rem, tripoint patient_pos ); void bionics_install_failure( bionic_id bid, std::string installer, int difficulty, int success, float adjusted_skill, tripoint patient_pos ); @@ -362,8 +361,7 @@ class player : public Character bool uninstall_bionic( const bionic_id &b_id, player &installer, bool autodoc = false, int skill_level = -1 ); /**Succes or failure of removal happens here*/ - void perform_uninstall( bionic_id bid, int difficulty, int success, int power_lvl, int pl_skill, - std::string cbm_name ); + void perform_uninstall( bionic_id bid, int difficulty, int success, int power_lvl, int pl_skill ); /**Used by monster to perform surgery*/ bool uninstall_bionic( const bionic &target_cbm, monster &installer, player &patient, float adjusted_skill, bool autodoc = false ); @@ -1183,8 +1181,10 @@ class player : public Character public: /** Returns a value from 1.0 to 5.0 that acts as a multiplier * for the time taken to perform tasks that require detail vision, - * above 4.0 means these activities cannot be performed. */ - float fine_detail_vision_mod() const; + * above 4.0 means these activities cannot be performed. + * takes pos as a parameter so that remote spots can be judged + * if they will potentially have enough light when player gets there */ + float fine_detail_vision_mod( const tripoint &p = tripoint_zero ) const; /** Used to determine player feedback on item use for the inventory code. * rates usability lower for non-tools (books, etc.) */ @@ -1581,8 +1581,8 @@ class player : public Character bool hauling; player_activity activity; std::list backlog; - int volume; cata::optional destination_point; + int volume; const profession *prof; start_location_id start_location; diff --git a/src/player_display.cpp b/src/player_display.cpp index bd8d02f964b88..ab65e46ea44ab 100644 --- a/src/player_display.cpp +++ b/src/player_display.cpp @@ -536,11 +536,11 @@ static void draw_bionics_tab( const catacurses::window &w_bionics, const catacur for( size_t i = min; i < max; i++ ) { trim_and_print( w_bionics, point( 1, static_cast( 2 + i - min ) ), getmaxx( w_bionics ) - 1, - i == line ? hilite( c_white ) : c_white, bionicslist[i].info().name ); + i == line ? hilite( c_white ) : c_white, "%s", bionicslist[i].info().name ); } if( line < bionicslist.size() ) { // NOLINTNEXTLINE(cata-use-named-point-constants) - fold_and_print( w_info, point( 1, 0 ), FULL_SCREEN_WIDTH - 2, c_white, + fold_and_print( w_info, point( 1, 0 ), FULL_SCREEN_WIDTH - 2, c_white, "%s", bionicslist[line].info().description ); } wrefresh( w_bionics ); @@ -565,7 +565,7 @@ static void draw_bionics_tab( const catacurses::window &w_bionics, const catacur for( size_t i = 0; i < bionicslist.size() && i < bionics_win_size_y - 1; i++ ) { mvwprintz( w_bionics, point( 1, static_cast( i + 2 ) ), c_black, " " ); trim_and_print( w_bionics, point( 1, static_cast( i + 2 ) ), getmaxx( w_bionics ) - 1, - c_white, bionicslist[i].info().name ); + c_white, "%s", bionicslist[i].info().name ); } wrefresh( w_bionics ); line = 0; @@ -982,7 +982,7 @@ static void draw_initial_windows( const catacurses::window &w_stats, you.power_level, you.max_power_level ) ); for( size_t i = 0; i < bionicslist.size() && i < bionics_win_size_y - 1; i++ ) { trim_and_print( w_bionics, point( 1, static_cast( i ) + 2 ), getmaxx( w_bionics ) - 1, c_white, - bionicslist[i].info().name ); + "%s", bionicslist[i].info().name ); } wrefresh( w_bionics ); diff --git a/src/ranged.cpp b/src/ranged.cpp index 9b77b8cbeb49f..b59f97a3a7822 100644 --- a/src/ranged.cpp +++ b/src/ranged.cpp @@ -640,10 +640,15 @@ dealt_projectile_attack player::throw_item( const tripoint &target, const item & proj_effects.insert( "TANGLE" ); } + Creature *critter = g->critter_at( target, true ); + const dispersion_sources dispersion = throwing_dispersion( thrown, critter, + blind_throw_from_pos.has_value() ); + const itype *thrown_type = thrown.type; + // Put the item into the projectile proj.set_drop( std::move( thrown ) ); - if( thrown.has_flag( "CUSTOM_EXPLOSION" ) ) { - proj.set_custom_explosion( thrown.type->explosion ); + if( thrown_type->item_tags.count( "CUSTOM_EXPLOSION" ) ) { + proj.set_custom_explosion( thrown_type->explosion ); } // Throw from the player's position, unless we're blind throwing, in which case @@ -660,9 +665,6 @@ dealt_projectile_attack player::throw_item( const tripoint &target, const item & // This should generally have values below ~20*sqrt(skill_lvl) const float final_xp_mult = range_factor * damage_factor; - Creature *critter = g->critter_at( target, true ); - const dispersion_sources dispersion = throwing_dispersion( thrown, critter, - blind_throw_from_pos.has_value() ); auto dealt_attack = projectile_attack( proj, throw_from, target, dispersion, this ); const double missed_by = dealt_attack.missed_by; diff --git a/src/skill.cpp b/src/skill.cpp index eb26133108005..fb08305aaa92a 100644 --- a/src/skill.cpp +++ b/src/skill.cpp @@ -46,15 +46,15 @@ bool string_id::is_valid() const return &obj() != &invalid_skill; } -Skill::Skill() : Skill( skill_id::NULL_ID(), "nothing", "The zen-most skill there is.", +Skill::Skill() : Skill( skill_id::NULL_ID(), translation( "nothing" ), + translation( "The zen-most skill there is." ), std::set {} ) { } -Skill::Skill( skill_id ident, std::string name, std::string description, - std::set tags ) - : _ident( std::move( ident ) ), _name( std::move( name ) ), - _description( std::move( description ) ), _tags( std::move( tags ) ) +Skill::Skill( const skill_id &ident, const translation &name, const translation &description, + const std::set &tags ) + : _ident( ident ), _name( name ), _description( description ), _tags( tags ) { } @@ -88,8 +88,10 @@ void Skill::load_skill( JsonObject &jsobj ) return s._ident == ident; } ), end( skills ) ); - const Skill sk( ident, _( jsobj.get_string( "name" ) ), _( jsobj.get_string( "description" ) ), - jsobj.get_tags( "tags" ) ); + translation name, desc; + jsobj.read( "name", name ); + jsobj.read( "description", desc ); + const Skill sk( ident, name, desc, jsobj.get_tags( "tags" ) ); if( sk.is_contextual_skill() ) { contextual_skills[sk.ident()] = sk; diff --git a/src/skill.h b/src/skill.h index 886ac0e19322a..c4134f0c3cf49 100644 --- a/src/skill.h +++ b/src/skill.h @@ -10,6 +10,7 @@ #include "calendar.h" #include "string_id.h" +#include "translations.h" #include "type_id.h" class JsonObject; @@ -23,8 +24,8 @@ class Skill friend class string_id; skill_id _ident; - std::string _name; - std::string _description; + translation _name; + translation _description; std::set _tags; // these are not real skills, they depend on context static std::map contextual_skills; @@ -42,17 +43,17 @@ class Skill std::function pred ); Skill(); - Skill( skill_id ident, std::string name, std::string description, - std::set tags ); + Skill( const skill_id &ident, const translation &name, const translation &description, + const std::set &tags ); const skill_id &ident() const { return _ident; } - const std::string &name() const { - return _name; + std::string name() const { + return _name.translated(); } - const std::string &description() const { - return _description; + std::string description() const { + return _description.translated(); } bool operator==( const Skill &b ) const { diff --git a/src/sounds.cpp b/src/sounds.cpp index 42fd1a2e5b7a6..acadb763093c5 100644 --- a/src/sounds.cpp +++ b/src/sounds.cpp @@ -133,6 +133,12 @@ void sounds::sound( const tripoint &p, int vol, sound_t category, const std::str false, id, variant} ) ); } +void sounds::sound( const tripoint &p, int vol, sound_t category, const translation &description, + bool ambient, const std::string &id, const std::string &variant ) +{ + sounds::sound( p, vol, category, description.translated(), ambient, id, variant ); +} + void sounds::add_footstep( const tripoint &p, int volume, int, monster *, const std::string &footstep ) { diff --git a/src/sounds.h b/src/sounds.h index e8fa546cbfe6c..22cd49d04749a 100644 --- a/src/sounds.h +++ b/src/sounds.h @@ -11,6 +11,7 @@ class player; class Creature; class item; class JsonObject; +class translation; struct tripoint; namespace sounds @@ -48,6 +49,9 @@ enum class sound_t : int { void sound( const tripoint &p, int vol, sound_t category, const std::string &description, bool ambient = false, const std::string &id = "", const std::string &variant = "default" ); +void sound( const tripoint &p, int vol, sound_t category, const translation &description, + bool ambient = false, const std::string &id = "", + const std::string &variant = "default" ); /** Functions identical to sound(..., true). */ void ambient_sound( const tripoint &p, int vol, sound_t category, const std::string &description ); /** Creates a list of coordinates at which to draw footsteps. */ diff --git a/src/text_snippets.cpp b/src/text_snippets.cpp index a2d18ea46b126..155d2971170cf 100644 --- a/src/text_snippets.cpp +++ b/src/text_snippets.cpp @@ -30,7 +30,7 @@ void snippet_library::add_snippets_from_json( const std::string &category, JsonA { while( jarr.has_more() ) { if( jarr.test_string() ) { - const std::string text = _( jarr.next_string() ); + const std::string text = jarr.next_string(); add_snippet( category, text ); } else { JsonObject jo = jarr.next_object(); @@ -41,7 +41,7 @@ void snippet_library::add_snippets_from_json( const std::string &category, JsonA void snippet_library::add_snippet_from_json( const std::string &category, JsonObject &jo ) { - const std::string text = _( jo.get_string( "text" ) ); + const std::string text = jo.get_string( "text" ); const int hash = add_snippet( category, text ); if( jo.has_member( "id" ) ) { const std::string id = jo.get_string( "id" ); @@ -99,16 +99,16 @@ int snippet_library::assign( const std::string &category, const unsigned seed ) return it->second; } -const std::string &snippet_library::get( const int index ) const +std::string snippet_library::get( const int index ) const { const std::map::const_iterator chosen_snippet = snippets.find( index ); if( chosen_snippet == snippets.end() ) { return null_string; } - return chosen_snippet->second; + return _( chosen_snippet->second ); } -const std::string &snippet_library::random_from_category( const std::string &cat ) const +std::string snippet_library::random_from_category( const std::string &cat ) const { const auto iters = categories.equal_range( cat ); if( iters.first == iters.second ) { diff --git a/src/text_snippets.h b/src/text_snippets.h index b1ead49238f59..d69d0fc54ec74 100644 --- a/src/text_snippets.h +++ b/src/text_snippets.h @@ -28,10 +28,10 @@ class snippet_library * snippet out of the category is returned (same seed yields same snippet). */ int assign( const std::string &category, unsigned seed ) const; - const std::string &get( int index ) const; + std::string get( int index ) const; bool has_category( const std::string &category ) const; int get_snippet_by_id( const std::string &id ) const; - const std::string &random_from_category( const std::string &cat ) const; + std::string random_from_category( const std::string &cat ) const; std::vector all_ids_from_category( const std::string &cat ) const; /** * Load a single snippet text from the json object. The object should have @@ -56,10 +56,11 @@ class snippet_library * later see add_snippet_from_json). */ // Snippets holds a map from the strings hash to the string. + // The strings stored and used for hashing are untranslated in case the language changes. // This is so the reference to the string remains stable across // changes to the layout and contents of the snippets json file. std::map snippets; - // Key is an arbitrary id string (from json), value is the hash of the snippet. + // Key is an arbitrary id string (from json), value is the hash of the untranslated snippet. std::unordered_map snippets_by_id; // Categories groups snippets by well, category. std::multimap categories; diff --git a/src/trap.cpp b/src/trap.cpp index 3090ad3491820..9b36e07b2f7cd 100644 --- a/src/trap.cpp +++ b/src/trap.cpp @@ -145,9 +145,25 @@ void trap::load( JsonObject &jo, const std::string & ) vehicle_data.damage = jv.get_int( "damage", 0 ); vehicle_data.shrapnel = jv.get_int( "shrapnel", 0 ); vehicle_data.sound_volume = jv.get_int( "sound_volume", 0 ); - vehicle_data.sound = jv.get_string( "sound", "" ); + jv.read( "sound", vehicle_data.sound ); vehicle_data.sound_type = jv.get_string( "sound_type", "" ); vehicle_data.sound_variant = jv.get_string( "sound_variant", "" ); + vehicle_data.spawn_items.clear(); + if( jv.has_array( "spawn_items" ) ) { + JsonArray ja = jv.get_array( "spawn_items" ); + while( ja.has_more() ) { + if( ja.test_object() ) { + JsonObject joitm = ja.next_object(); + vehicle_data.spawn_items.emplace_back( joitm.get_string( "id" ), joitm.get_float( "chance" ) ); + } else { + vehicle_data.spawn_items.emplace_back( ja.next_string(), 1.0 ); + } + } + } + vehicle_data.set_trap = trap_str_id::NULL_ID(); + if( jv.read( "set_trap", vehicle_data.set_trap ) ) { + vehicle_data.remove_trap = false; + } } } @@ -257,6 +273,7 @@ tr_caltrops_glass, tr_tripwire, tr_crossbow, tr_shotgun_2, +tr_shotgun_2_1, tr_shotgun_1, tr_engine, tr_blade, @@ -324,6 +341,7 @@ void trap::finalize() tr_tripwire = trapfind( "tr_tripwire" ); tr_crossbow = trapfind( "tr_crossbow" ); tr_shotgun_2 = trapfind( "tr_shotgun_2" ); + tr_shotgun_2_1 = trapfind( "tr_shotgun_2_1" ); tr_shotgun_1 = trapfind( "tr_shotgun_1" ); tr_engine = trapfind( "tr_engine" ); tr_blade = trapfind( "tr_blade" ); diff --git a/src/trap.h b/src/trap.h index 22383742cfec0..0b34c05487cd3 100644 --- a/src/trap.h +++ b/src/trap.h @@ -11,6 +11,7 @@ #include "color.h" #include "int_id.h" #include "string_id.h" +#include "translations.h" #include "type_id.h" #include "units.h" @@ -63,6 +64,8 @@ void snake( const tripoint &p, Creature *c, item *i ); } // namespace trapfunc struct vehicle_handle_trap_data { + using itype_id = std::string; + bool remove_trap = false; bool do_explosion = false; bool is_falling = false; @@ -70,9 +73,12 @@ struct vehicle_handle_trap_data { int damage = 0; int shrapnel = 0; int sound_volume = 0; - std::string sound; + translation sound; std::string sound_type; std::string sound_variant; + // the double represents the count or chance to spawn. + std::vector> spawn_items; + trap_str_id set_trap = trap_str_id::NULL_ID(); }; using trap_function = std::function; @@ -254,6 +260,7 @@ tr_caltrops_glass, tr_tripwire, tr_crossbow, tr_shotgun_2, +tr_shotgun_2_1, tr_shotgun_1, tr_engine, tr_blade, diff --git a/src/trapfunc.cpp b/src/trapfunc.cpp index a20580e4fed1e..d56b4a489326d 100644 --- a/src/trapfunc.cpp +++ b/src/trapfunc.cpp @@ -443,7 +443,7 @@ void trapfunc::shotgun( const tripoint &p, Creature *c, item * ) if( n != nullptr ) { ///\EFFECT_STR_MAX increases chance of two shots from shotgun trap shots = ( one_in( 8 ) || one_in( 20 - n->str_max ) ? 2 : 1 ); - if( g->m.tr_at( p ).loadid == tr_shotgun_1 ) { + if( g->m.tr_at( p ).loadid != tr_shotgun_2 ) { shots = 1; } ///\EFFECT_DODGE reduces chance of being hit by shotgun trap @@ -505,7 +505,7 @@ void trapfunc::shotgun( const tripoint &p, Creature *c, item * ) break; } shots = ( one_in( 8 ) || one_in( chance ) ? 2 : 1 ); - if( g->m.tr_at( p ).loadid == tr_shotgun_1 ) { + if( g->m.tr_at( p ).loadid != tr_shotgun_2 ) { shots = 1; } if( seen ) { diff --git a/src/veh_type.cpp b/src/veh_type.cpp index fd2527cb5d413..3f16719fffae3 100644 --- a/src/veh_type.cpp +++ b/src/veh_type.cpp @@ -436,12 +436,6 @@ void vpart_info::finalize() DynamicDataLoader::get_instance().load_deferred( deferred ); for( auto &e : vpart_info_all ) { - // if part name specified ensure it is translated - // otherwise the name of the base item will be used - if( !e.second.name_.empty() ) { - e.second.name_ = _( e.second.name_ ); - } - if( e.second.folded_volume > 0_ml ) { e.second.set_flag( "FOLDABLE" ); } @@ -707,9 +701,10 @@ const std::map &vpart_info::all() std::string vpart_info::name() const { if( name_.empty() ) { - name_ = item::nname( item ); // cache on first request + return item::nname( item ); + } else { + return name_.translated(); } - return name_; } int vpart_info::format_description( std::ostringstream &msg, const std::string &format_color, @@ -721,7 +716,7 @@ int vpart_info::format_description( std::ostringstream &msg, const std::string & std::ostringstream long_descrip; if( ! description.empty() ) { - long_descrip << _( description ); + long_descrip << description; } for( const auto &flagid : flags ) { if( flagid == "ALARMCLOCK" || flagid == "WATCH" ) { diff --git a/src/veh_type.h b/src/veh_type.h index c6ed9294e6a1d..9f39e0ae6e33c 100644 --- a/src/veh_type.h +++ b/src/veh_type.h @@ -22,6 +22,7 @@ #include "vehicle.h" #include "requirements.h" #include "point.h" +#include "translations.h" using itype_id = std::string; @@ -173,7 +174,7 @@ class vpart_info int durability = 0; /** A text description of the part as a vehicle part */ - std::string description; + translation description; /** Damage modifier (percentage) used when damaging other entities upon collision */ int dmg_mod = 100; @@ -305,7 +306,7 @@ class vpart_info private: /** Name from vehicle part definition which if set overrides the base item name */ - mutable std::string name_; + translation name_; std::set flags; // flags std::bitset bitflags; // flags checked so often that things slow down due to string cmp diff --git a/src/vehicle_move.cpp b/src/vehicle_move.cpp index 3ecc5045dae30..5c70395299bde 100644 --- a/src/vehicle_move.cpp +++ b/src/vehicle_move.cpp @@ -799,8 +799,10 @@ void vehicle::handle_trap( const tripoint &p, int part ) return; } - if( g->u.sees( p ) ) { - if( g->u.knows_trap( p ) ) { + const bool seen = g->u.sees( p ); + const bool known = g->u.knows_trap( p ); + if( seen ) { + if( known ) { //~ %1$s: name of the vehicle; %2$s: name of the related vehicle part; %3$s: trap name add_msg( m_bad, _( "The %1$s's %2$s runs over %3$s." ), name, parts[ part ].name(), tr.name() ); } else { @@ -808,21 +810,6 @@ void vehicle::handle_trap( const tripoint &p, int part ) } } - if( t == tr_beartrap || t == tr_beartrap_buried ) { - g->m.spawn_item( p, "beartrap" ); - } else if( t == tr_crossbow ) { - g->m.spawn_item( p, "crossbow" ); - g->m.spawn_item( p, "string_6" ); - if( !one_in( 10 ) ) { - g->m.spawn_item( p, "bolt_steel" ); - } - } else if( t == tr_shotgun_2 ) { - g->m.trap_set( p, tr_shotgun_1 ); - } else if( t == tr_shotgun_1 ) { - g->m.spawn_item( p, "shotgun_s" ); - g->m.spawn_item( p, "string_6" ); - } - if( veh_data.chance >= rng( 1, 100 ) ) { if( veh_data.sound_volume > 0 ) { sounds::sound( p, veh_data.sound_volume, sounds::sound_t::combat, veh_data.sound, false, @@ -834,8 +821,32 @@ void vehicle::handle_trap( const tripoint &p, int part ) // Hit the wheel directly since it ran right over the trap. damage_direct( pwh, veh_data.damage ); } + bool still_has_trap = true; if( veh_data.remove_trap || veh_data.do_explosion ) { g->m.remove_trap( p ); + still_has_trap = false; + } + for( const auto &it : veh_data.spawn_items ) { + int cnt = roll_remainder( it.second ); + if( cnt > 0 ) { + g->m.spawn_item( p, it.first, cnt ); + } + } + if( veh_data.set_trap ) { + g->m.trap_set( p, veh_data.set_trap.id() ); + still_has_trap = true; + } + if( still_has_trap ) { + const trap &tr = g->m.tr_at( p ); + if( seen || known ) { + // known status has been reset by map::trap_set() + g->u.add_known_trap( p, tr ); + } + if( seen && !known ) { + // hard to miss! + const std::string direction = direction_name( direction_from( g->u.pos(), p ) ); + add_msg( _( "You've spotted a %1$s to the %2$s!" ), tr.name(), direction ); + } } } } @@ -1335,18 +1346,7 @@ vehicle *vehicle::act_on_map() dp.z = -1; } - vehicle *new_pointer = this; - // Split the movement into horizontal and vertical for easier processing - if( dp.x != 0 || dp.y != 0 ) { - new_pointer = g->m.move_vehicle( *new_pointer, tripoint( dp.xy(), 0 ), mdir ); - } - - if( new_pointer != nullptr && dp.z != 0 ) { - new_pointer = g->m.move_vehicle( *new_pointer, tripoint( 0, 0, dp.z ), mdir ); - is_falling = false; - } - - return new_pointer; + return g->m.move_vehicle( *this, dp, mdir ); } void vehicle::check_falling_or_floating() diff --git a/src/vehicle_use.cpp b/src/vehicle_use.cpp index 313fcf4fb4124..bd50207d9de92 100644 --- a/src/vehicle_use.cpp +++ b/src/vehicle_use.cpp @@ -1533,6 +1533,10 @@ void vehicle::use_harness( int part, const tripoint &pos ) } const cata::optional target_ = choose_adjacent( _( "Where is the creature to harness?" ) ); + if( !target_ ) { + add_msg( _( "Never mind." ) ); + return; + } const tripoint target = *target_; monster *mon_ptr = g->critter_at( target ); if( mon_ptr != nullptr ) { diff --git a/tests/colony_test.cpp b/tests/colony_test.cpp index 403270bde9ec5..e2ae8f0f6ad5a 100644 --- a/tests/colony_test.cpp +++ b/tests/colony_test.cpp @@ -217,6 +217,7 @@ TEST_CASE( "colony basics", "[colony]" ) // Move test CHECK( test_colony_2.size() == 400 ); + // NOLINTNEXTLINE(bugprone-use-after-move) test_colony.insert( &ten ); // Insert to post-moved-colony test diff --git a/tests/list_test.cpp b/tests/list_test.cpp index 08b1098245b23..3dad8946b1850 100644 --- a/tests/list_test.cpp +++ b/tests/list_test.cpp @@ -234,6 +234,7 @@ TEST_CASE( "list basics", "[list]" ) SECTION( "swap() and max_size()" ) { cata::list test_list_2; + // NOLINTNEXTLINE(bugprone-use-after-move) test_list_2 = test_list; CHECK( test_list_2.size() == 400 ); @@ -951,6 +952,7 @@ TEST_CASE( "list emplace, move, copy, and reverse iterate", "[list]" ) } CHECK( passed ); + // NOLINTNEXTLINE(bugprone-use-after-move) CHECK( test_list.empty() ); } @@ -974,6 +976,7 @@ TEST_CASE( "list emplace, move, copy, and reverse iterate", "[list]" ) } CHECK( passed ); + // NOLINTNEXTLINE(bugprone-use-after-move) CHECK( test_list_2.empty() ); } diff --git a/tests/string_formatter_test.cpp b/tests/string_formatter_test.cpp index b6216878a6454..a28438cf4f033 100644 --- a/tests/string_formatter_test.cpp +++ b/tests/string_formatter_test.cpp @@ -178,6 +178,7 @@ TEST_CASE( "string_formatter" ) const std::string expected = "b" + long_string + "b"; // moving into string_format should *not* consume the string. test_for_expected( expected, "b%sb", std::move( long_string ) ); + // NOLINTNEXTLINE(bugprone-use-after-move) CHECK( long_string.size() == 100000 ); }