diff --git a/data/json/effects.json b/data/json/effects.json index cf6c36fdae7ef..458a2899ee926 100644 --- a/data/json/effects.json +++ b/data/json/effects.json @@ -2126,10 +2126,10 @@ }, { "type": "effect_type", - "id": "anticoagulant", + "id": "anticoagulant_aspirin", "max_intensity": 3, "rating": "bad", - "blood_analysis_description": "Blood Thinner", + "blood_analysis_description": "Anticoagulant (Acetylsalicylic Acid)", "effect_dur_scaling": [ { "effect_id": "bleed", "modifier": 1.05, "same_bp": false } ] }, { diff --git a/data/json/furniture_and_terrain/furniture-flora_marine.json b/data/json/furniture_and_terrain/furniture-flora_marine.json new file mode 100644 index 0000000000000..f33a6a5fb3d66 --- /dev/null +++ b/data/json/furniture_and_terrain/furniture-flora_marine.json @@ -0,0 +1,96 @@ +[ + { + "type": "furniture", + "id": "f_algae_red", + "name": "red algae", + "description": "One of the thousands of species of grassy reddish marine plants that inhabit intertidal zones the world over. Its rubbery little fronds don't look particularly edible.", + "symbol": ",", + "color": "red", + "move_cost_mod": 0, + "required_str": -1, + "flags": [ "TRANSPARENT", "TINY", "FLAMMABLE_ASH", "NOCOLLIDE", "ORGANIC" ], + "examine_action": "harvest_furn", + "harvest_by_season": [ { "seasons": [ "spring", "summer", "autumn", "winter" ], "id": "seaweed_harv" } ], + "bash": { "str_min": 2, "str_max": 6, "sound": "splat.", "sound_fail": "squelch." } + }, + { + "type": "furniture", + "id": "f_algae_green", + "name": "green algae", + "description": "A short patch of grassy green seaweed, wholly unremarkable.", + "symbol": ",", + "color": "green", + "move_cost_mod": 0, + "required_str": -1, + "flags": [ "TRANSPARENT", "TINY", "FLAMMABLE_ASH", "NOCOLLIDE", "ORGANIC" ], + "examine_action": "harvest_furn", + "harvest_by_season": [ { "seasons": [ "spring", "summer", "autumn", "winter" ], "id": "seaweed_harv" } ], + "bash": { "str_min": 2, "str_max": 6, "sound": "splat.", "sound_fail": "squelch." } + }, + { + "type": "furniture", + "id": "f_kelp_sugar", + "name": "sugar kelp", + "description": "Also known as kombu, this brown algae grows in a single leaflike blade that can reach more than twice the height of a man. Young fronds make for excellent soup stock and can even be eaten raw.", + "symbol": "i", + "color": "brown", + "move_cost_mod": 0, + "required_str": -1, + "flags": [ "FLAMMABLE_ASH", "ORGANIC", "SMALL_HIDE", "HARVEST_REQ_CUT1" ], + "examine_action": "harvest_furn", + "harvest_by_season": [ { "seasons": [ "spring", "summer" ], "id": "kelp_sugar_harv" } ], + "bash": { "str_min": 8, "str_max": 16, "sound": "splat.", "sound_fail": "squelch." } + }, + { + "type": "furniture", + "id": "f_sea_lettuce", + "name": "sea lettuce", + "description": "Sometimes known as green laver, this leafy algae from the Ulva genus grows in leafy little patches around shallows and tide pools. Though small, it makes a tasty snack.", + "looks_like": "f_algae_green", + "symbol": ",", + "color": "green", + "move_cost_mod": 0, + "required_str": -1, + "flags": [ "TRANSPARENT", "TINY", "FLAMMABLE_ASH", "NOCOLLIDE", "ORGANIC" ], + "harvest_by_season": [ { "seasons": [ "spring", "summer", "autumn", "winter" ], "id": "sea_lettuce_harv" } ], + "bash": { "str_min": 2, "str_max": 6, "sound": "splat.", "sound_fail": "squelch." } + }, + { + "type": "furniture", + "id": "f_bladderwrack", + "name": "bladderwrack", + "description": "Named for the air bladders that grow all over its leafy fronds, this leafy seaweed is technically edible and has a long history of use in folk medicine.", + "looks_like": "f_algae_green", + "symbol": ",", + "color": "green", + "move_cost_mod": 0, + "required_str": -1, + "flags": [ "TRANSPARENT", "TINY", "FLAMMABLE_ASH", "NOCOLLIDE", "ORGANIC" ], + "harvest_by_season": [ { "seasons": [ "spring", "summer", "autumn", "winter" ], "id": "bladderwrack_harv" } ], + "bash": { "str_min": 2, "str_max": 6, "sound": "splat.", "sound_fail": "squelch." } + }, + { + "type": "furniture", + "id": "f_sea_anemone", + "name": "sea anemone", + "description": "This sessile polyp waves its stinging tentacles with the motion of the tides, hoping to capture a tiny fish or crab. It's wholly inedible and poses no danger to anything bigger than a shrimp.", + "symbol": "f", + "color": "pink", + "move_cost_mod": 0, + "required_str": -1, + "flags": [ "TRANSPARENT", "TINY", "FLAMMABLE_ASH", "NOCOLLIDE", "GRAZER_INEDIBLE", "ORGANIC" ], + "bash": { "str_min": 2, "str_max": 6, "sound": "splat.", "sound_fail": "squelch." } + }, + { + "type": "furniture", + "id": "f_sea_sponge", + "name": "sea sponge", + "description": "An immobile, lumpy little creature that looks nothing like a square kitchen sponge. Anchored to the sea floor, its porous body passively filters plankton from the water that freely passes through it.", + "symbol": "f", + "color": "brown", + "move_cost_mod": 0, + "required_str": -1, + "flags": [ "TRANSPARENT", "TINY", "FLAMMABLE_ASH", "NOCOLLIDE", "GRAZER_INEDIBLE", "ORGANIC" ], + "bash": { "str_min": 6, "str_max": 12, "sound": "splat.", "sound_fail": "squelch." } + } +] diff --git a/data/json/furniture_and_terrain/terrain-liquids.json b/data/json/furniture_and_terrain/terrain-liquids.json index 0f5907a076959..55b6d4862baf7 100644 --- a/data/json/furniture_and_terrain/terrain-liquids.json +++ b/data/json/furniture_and_terrain/terrain-liquids.json @@ -334,14 +334,13 @@ { "type": "terrain", "id": "t_lake_bed", - "//": "for eventual use with water z levels. Currently non-functional.", "name": "lake bed", "description": "You are standing at the bottom of a body of fresh water. With a watertight container, you could gather fresh water from here. Not safe to drink as is.", "symbol": "~", "looks_like": "t_sand", "color": "blue", "move_cost": 8, - "flags": [ "TRANSPARENT", "LIQUID", "NO_SCENT", "SWIMMABLE", "DEEP_WATER", "WATER_CUBE" ], + "flags": [ "TRANSPARENT", "LIQUID", "NO_SCENT", "SWIMMABLE", "DEEP_WATER", "WATER_CUBE", "GOES_UP" ], "connect_groups": "WATER", "connects_to": "WATER", "examine_action": "water_source" @@ -349,14 +348,13 @@ { "type": "terrain", "id": "t_ocean_bed", - "//": "for eventual use with water z levels. Currently non-functional.", "name": "ocean bed", "description": "You are standing at the bottom of a body of salt water. With a watertight container, you could gather salt water from here. Not safe to drink as is.", "symbol": "~", "looks_like": "t_sand", "color": "blue", "move_cost": 8, - "flags": [ "TRANSPARENT", "LIQUID", "NO_SCENT", "SWIMMABLE", "DEEP_WATER", "GOES_UP" ], + "flags": [ "TRANSPARENT", "LIQUID", "NO_SCENT", "SWIMMABLE", "DEEP_WATER", "SALT_WATER", "GOES_UP" ], "connect_groups": "WATER", "connects_to": "WATER", "examine_action": "water_source" @@ -364,7 +362,6 @@ { "type": "terrain", "id": "t_bulkhead_roof", - "//": "for eventual use with water z levels. Currently non-functional. Roof for submerged structures.", "name": "bulkhead", "description": "The top of a submerged structure. With a watertight container, you could gather fresh water from here. Not safe to drink as is.", "symbol": "#", @@ -403,7 +400,6 @@ { "type": "terrain", "id": "t_lake_bed_concrete", - "//": "for eventual use with water z levels. Currently non-functional. Cement on the lake floor.", "name": "submerged concrete", "description": "You are standing at the bottom of a body of fresh water on a pad of concrete. With a watertight container, you could gather fresh water from here. Not safe to drink as is.", "symbol": "~", @@ -425,7 +421,6 @@ { "type": "terrain", "id": "t_lake_bed_concrete_yellow", - "//": "for eventual use with water z levels. Currently non-functional. Cement on the lake floor.", "name": "submerged concrete", "description": "You are standing at the bottom of a body of fresh water on a pad of yellow-painted concrete. With a watertight container, you could gather fresh water from here. Not safe to drink as is.", "symbol": "#", diff --git a/data/json/harvest.json b/data/json/harvest.json index 970035d82174e..a6d16a7eb37cd 100644 --- a/data/json/harvest.json +++ b/data/json/harvest.json @@ -387,6 +387,26 @@ "type": "harvest", "entries": [ { "drop": "wintergreen_berry", "base_num": [ 1, 4 ] }, { "drop": "wintergreen_leaves", "base_num": [ 1, 2 ] } ] }, + { + "id": "seaweed_harv", + "type": "harvest", + "entries": [ { "drop": "seaweed" } ] + }, + { + "id": "kelp_sugar_harv", + "type": "harvest", + "entries": [ { "drop": "kelp_sugar" } ] + }, + { + "id": "bladderwrack_harv", + "type": "harvest", + "entries": [ { "drop": "bladderwrack" } ] + }, + { + "id": "sea_lettuce_harv", + "type": "harvest", + "entries": [ { "drop": "sea_lettuce" } ] + }, { "id": "fish_tiny", "type": "harvest", diff --git a/data/json/items/comestibles/med.json b/data/json/items/comestibles/med.json index 8990b97297225..315a74478526f 100644 --- a/data/json/items/comestibles/med.json +++ b/data/json/items/comestibles/med.json @@ -144,7 +144,7 @@ "activation_message": "You take some aspirin.", "effects": [ { "id": "pkill1_nsaid", "duration": 9000 } ] }, - "vitamins": [ [ "vit_bloodthinner", 4320 ] ] + "vitamins": [ [ "vit_anticoagulant_aspirin", 4320 ] ] }, { "id": "ibuprofen", diff --git a/data/json/items/comestibles/raw_veggy.json b/data/json/items/comestibles/raw_veggy.json index 977354b2e96a8..8bdbbd77485b1 100644 --- a/data/json/items/comestibles/raw_veggy.json +++ b/data/json/items/comestibles/raw_veggy.json @@ -1180,5 +1180,92 @@ "flags": [ "RAW" ], "vitamins": [ [ "calcium", 9 ], [ "iron", 2 ], [ "vitC", 10 ] ], "fun": -5 + }, + { + "type": "COMESTIBLE", + "id": "seaweed", + "name": { "str_sp": "seaweed" }, + "weight": "30 g", + "color": "green", + "spoils_in": "2 days", + "comestible_type": "FOOD", + "symbol": "%", + "description": "A handful of slimy seaweed. It doesn't look edible, but properly dried, it might make for decent kindling.", + "material": [ "veggy" ], + "volume": "30 ml", + "flags": [ "SMOKABLE", "INEDIBLE" ], + "smoking_result": "dry_seaweed" + }, + { + "type": "COMESTIBLE", + "id": "seaweed_pile", + "name": { "str_sp": "pile of seaweed" }, + "weight": "600 g", + "color": "green", + "spoils_in": "2 days", + "comestible_type": "FOOD", + "symbol": "%", + "description": "A slimy heap of seaweed. It doesn't look edible, but properly dried, it might make for decent kindling.", + "material": [ "veggy" ], + "volume": "600 ml", + "flags": [ "SMOKABLE", "INEDIBLE" ], + "smoking_result": "dry_seaweed_pile" + }, + { + "type": "COMESTIBLE", + "id": "sea_lettuce", + "name": { "str_sp": "sea lettuce" }, + "weight": "100 g", + "color": "green", + "spoils_in": "2 days", + "comestible_type": "FOOD", + "symbol": "%", + "calories": 12, + "description": "A handful of edible green seaweed. It makes a good snack as-is, but can be dried or prepared in a number of ways.", + "price": 10, + "price_postapoc": 10, + "material": [ "veggy" ], + "volume": "250 ml", + "flags": [ "FREEZERBURN", "SMOKABLE" ], + "smoking_result": "dry_veggy", + "vitamins": [ [ "calcium", 3 ], [ "iron", 3 ], [ "vitC", 1 ] ] + }, + { + "type": "COMESTIBLE", + "id": "kelp_sugar", + "name": { "str_sp": "sugar kelp" }, + "weight": "100 g", + "color": "brown", + "spoils_in": "2 days", + "comestible_type": "FOOD", + "symbol": "%", + "calories": 17, + "description": "A sizable strip of new growth harvested from a sugar kelp. While these are most often dried, it seems edible enough as is.", + "price": 10, + "price_postapoc": 10, + "material": [ "veggy" ], + "volume": "250 ml", + "flags": [ "FREEZERBURN", "SMOKABLE" ], + "smoking_result": "kombu", + "vitamins": [ [ "calcium", 3 ], [ "iron", 3 ], [ "vitC", 1 ] ] + }, + { + "type": "COMESTIBLE", + "id": "bladderwrack", + "name": { "str_sp": "bladderwrack" }, + "weight": "100 g", + "color": "brown", + "spoils_in": "2 days", + "comestible_type": "FOOD", + "symbol": "%", + "calories": 17, + "description": "A leafy bunch of seaweed covered in air bladders. Many claims are made about its health benefits, but at least as a foodstuff, it's no better or worse than other edible seaweed.", + "price": 10, + "price_postapoc": 10, + "material": [ "veggy" ], + "volume": "250 ml", + "flags": [ "FREEZERBURN", "SMOKABLE" ], + "smoking_result": "dry_veggy", + "vitamins": [ [ "calcium", 2 ], [ "iron", 4 ], [ "vitC", 1 ] ] } ] diff --git a/data/json/items/comestibles/veggy_dishes.json b/data/json/items/comestibles/veggy_dishes.json index 7e05230b637fc..39617cc2edfec 100644 --- a/data/json/items/comestibles/veggy_dishes.json +++ b/data/json/items/comestibles/veggy_dishes.json @@ -1566,6 +1566,25 @@ "extend": { "flags": [ "FREEZERBURN" ] }, "fun": 3 }, + { + "type": "COMESTIBLE", + "id": "kombu", + "name": { "str_sp": "kombu" }, + "weight": "10 g", + "color": "brown", + "spoils_in": "2 days", + "comestible_type": "FOOD", + "symbol": "%", + "calories": 17, + "description": "An essential component of Japanese cuisine, this dried sheet of seaweed has hardened to the point of inedibility. Boiled in water, it should make an excellent broth.", + "price": 10, + "price_postapoc": 10, + "material": [ "veggy" ], + "volume": "25 ml", + "flags": [ "INEDIBLE" ], + "smoking_result": "kombu", + "vitamins": [ [ "calcium", 3 ], [ "iron", 3 ], [ "vitC", 1 ] ] + }, { "type": "COMESTIBLE", "id": "onion_sauteed", diff --git a/data/json/items/generic.json b/data/json/items/generic.json index 016a6587f148f..de6e0edbab2b8 100644 --- a/data/json/items/generic.json +++ b/data/json/items/generic.json @@ -285,6 +285,32 @@ "to_hit": -2, "flags": [ "TRADER_AVOID", "TINDER" ] }, + { + "type": "GENERIC", + "id": "dry_seaweed", + "name": { "str": "dried seaweed", "str_pl": "dried seaweed" }, + "looks_like": "withered", + "description": "A bit of dried seaweed. It's tough, inedible, and possibly poisonous, but it could be burned or used for crafts.", + "weight": "10 g", + "color": "green", + "symbol": ",", + "material": [ "dry_plant" ], + "volume": "10 ml", + "flags": [ "TRADER_AVOID", "FIREWOOD", "TINDER" ] + }, + { + "type": "GENERIC", + "id": "dry_seaweed_pile", + "name": { "str": "pile of dried seaweed", "str_pl": "pile of dried seaweed" }, + "looks_like": "withered", + "description": "A big heap of dried seaweed. It's tough, inedible, and possibly poisonous, but it could be burned or used for crafts.", + "weight": "200 g", + "color": "green", + "symbol": ",", + "material": [ "dry_plant" ], + "volume": "200 ml", + "flags": [ "TRADER_AVOID", "FIREWOOD", "TINDER" ] + }, { "type": "GENERIC", "id": "superglue", diff --git a/data/json/mapgen/ocean.json b/data/json/mapgen/ocean.json index 9f31150360cdd..7371fccc8b924 100644 --- a/data/json/mapgen/ocean.json +++ b/data/json/mapgen/ocean.json @@ -15,6 +15,60 @@ "type": "mapgen", "method": "json", "om_terrain": [ "ocean_bed" ], - "object": { "fill_ter": "t_ocean_bed" } + "object": { + "fill_ter": "t_ocean_bed", + "rows": [ + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " + ], + "nested": { + " ": { "chunks": [ [ "groundover_sea_floor", 1 ], [ "null", 99 ] ] } + } + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "groundover_sea_floor", + "object": { + "mapgensize": [ 1, 1 ], + "rows": [ "0" ], + "terrain": { "0": "t_null" }, + "furniture": { + "0": [ + [ "f_algae_red", 4 ], + [ "f_algae_green", 3 ], + [ "f_kelp_sugar", 1 ], + [ "f_boulder_small", 8 ], + [ "f_boulder_medium", 4 ], + [ "f_boulder_large", 2 ], + [ "f_sea_anemone", 1 ], + [ "f_sea_sponge", 1 ] + ] + }, + "flags": [ "ALLOW_TERRAIN_UNDER_OTHER_DATA" ] + } } ] diff --git a/data/json/recipes/food/dry.json b/data/json/recipes/food/dry.json index 9a7990a83b931..177b1661063a3 100644 --- a/data/json/recipes/food/dry.json +++ b/data/json/recipes/food/dry.json @@ -313,6 +313,123 @@ "//": "69g of stuff, 2u to cook", "components": [ [ [ "mushroom", 1 ], [ "mushroom_morel", 1 ] ] ] }, + { + "type": "recipe", + "activity_level": "NO_EXERCISE", + "result": "kombu", + "charges": 1, + "category": "CC_FOOD", + "subcategory": "CSC_FOOD_DRY", + "skill_used": "cooking", + "difficulty": 2, + "time": "20 m", + "autolearn": true, + "batch_time_factors": [ 67, 5 ], + "tools": [ [ [ "dehydrating_heat", 7, "LIST" ] ] ], + "components": [ + [ + [ "kelp_sugar", 1 ] + ] + ] + }, + { + "type": "recipe", + "activity_level": "NO_EXERCISE", + "result": "kombu", + "charges": 1, + "category": "CC_FOOD", + "id_suffix": "frozen_ingredients", + "subcategory": "CSC_FOOD_DRY", + "skill_used": "cooking", + "difficulty": 2, + "time": "22 m", + "autolearn": true, + "batch_time_factors": [ 67, 5 ], + "tools": [ [ [ "dehydrating_heat", 7, "LIST" ] ], [ [ "surface_heat", 2, "LIST" ] ] ], + "components": [ + [ + [ "kelp_sugar", 1 ] + ] + ] + }, + { + "type": "recipe", + "activity_level": "NO_EXERCISE", + "result": "dry_seaweed_pile", + "charges": 1, + "category": "CC_FOOD", + "subcategory": "CSC_FOOD_DRY", + "skill_used": "cooking", + "difficulty": 2, + "time": "120 m", + "autolearn": true, + "batch_time_factors": [ 67, 5 ], + "tools": [ [ [ "dehydrating_heat", 100, "LIST" ] ] ], + "components": [ + [ + [ "seaweed", 1 ] + ] + ] + }, + { + "type": "recipe", + "activity_level": "NO_EXERCISE", + "result": "dry_seaweed_pile", + "charges": 1, + "category": "CC_FOOD", + "id_suffix": "frozen_ingredients", + "subcategory": "CSC_FOOD_DRY", + "skill_used": "cooking", + "difficulty": 2, + "time": "160 m", + "autolearn": true, + "batch_time_factors": [ 67, 5 ], + "tools": [ [ [ "dehydrating_heat", 100, "LIST" ] ], [ [ "surface_heat", 2, "LIST" ] ] ], + "components": [ + [ + [ "seaweed", 1 ] + ] + ] + }, + { + "type": "recipe", + "activity_level": "NO_EXERCISE", + "result": "dry_seaweed", + "charges": 1, + "category": "CC_FOOD", + "subcategory": "CSC_FOOD_DRY", + "skill_used": "cooking", + "difficulty": 2, + "time": "6 m", + "autolearn": true, + "batch_time_factors": [ 67, 5 ], + "tools": [ [ [ "dehydrating_heat", 5, "LIST" ] ] ], + "components": [ + [ + [ "seaweed", 1 ] + ] + ] + }, + { + "type": "recipe", + "activity_level": "NO_EXERCISE", + "result": "dry_seaweed", + "charges": 1, + "category": "CC_FOOD", + "id_suffix": "frozen_ingredients", + "subcategory": "CSC_FOOD_DRY", + "skill_used": "cooking", + "difficulty": 2, + "time": "8 m", + "autolearn": true, + "batch_time_factors": [ 67, 5 ], + "tools": [ [ [ "dehydrating_heat", 5, "LIST" ] ], [ [ "surface_heat", 2, "LIST" ] ] ], + "components": [ + [ + [ "seaweed", 1 ] + ] + ] + }, { "type": "recipe", "activity_level": "NO_EXERCISE", diff --git a/data/json/recipes/nested.json b/data/json/recipes/nested.json index 4526fc1f7913d..bd7b2cb8c311d 100644 --- a/data/json/recipes/nested.json +++ b/data/json/recipes/nested.json @@ -3833,7 +3833,9 @@ "bundle_copper_pipe", "bundle_branch", "bundle_branch_long", - "bundle_javelin" + "bundle_javelin", + "seaweed_pile", + "dry_seaweed_pile" ], "difficulty": 1 }, diff --git a/data/json/recipes/recipe_others.json b/data/json/recipes/recipe_others.json index 8a12306e53f32..a44f7b9f3e499 100644 --- a/data/json/recipes/recipe_others.json +++ b/data/json/recipes/recipe_others.json @@ -3391,5 +3391,29 @@ [ [ "wood_panel", 1 ], [ "sheet_metal", 1 ] ], [ [ "nails", 40, "LIST" ] ] ] + }, + { + "result": "seaweed_pile", + "type": "recipe", + "activity_level": "NO_EXERCISE", + "category": "CC_*", + "subcategory": "CSC_*_NESTED", + "skill_used": "fabrication", + "time": "10 s", + "autolearn": true, + "components": [ [ [ "seaweed", 20 ] ] ], + "flags": [ "BLIND_EASY" ] + }, + { + "result": "dry_seaweed_pile", + "type": "recipe", + "activity_level": "NO_EXERCISE", + "category": "CC_*", + "subcategory": "CSC_*_NESTED", + "skill_used": "fabrication", + "time": "10 s", + "autolearn": true, + "components": [ [ [ "dry_seaweed", 20 ] ] ], + "flags": [ "BLIND_EASY" ] } ] diff --git a/data/json/requirements/cooking_components.json b/data/json/requirements/cooking_components.json index 92dc0a47d1149..a84c1ee3604ff 100644 --- a/data/json/requirements/cooking_components.json +++ b/data/json/requirements/cooking_components.json @@ -1092,7 +1092,10 @@ [ "veggy", 1 ], [ "veggy_wild", 1 ], [ "veggy_salted", 1 ], - [ "spinach", 1 ] + [ "spinach", 1 ], + [ "sea_lettuce", 1 ], + [ "bladderwrack", 1 ], + [ "kelp_sugar", 1 ] ] ] }, @@ -1197,7 +1200,8 @@ [ "mushroom_cooked", 1 ], [ "morel_cooked", 1 ], [ "mushroom", 1 ], - [ "dry_mushroom", 1 ] + [ "dry_mushroom", 1 ], + [ "kombu", 1 ] ], [ [ "hot_sauce", 1 ], diff --git a/data/json/uncraft/generic.json b/data/json/uncraft/generic.json index 12d71f2f13a16..35b6fe26a7f79 100644 --- a/data/json/uncraft/generic.json +++ b/data/json/uncraft/generic.json @@ -767,5 +767,19 @@ "time": "30 s", "qualities": [ { "id": "CUT", "level": 1 } ], "components": [ [ [ "zipper_long_plastic", 1 ] ], [ [ "plastic_sheet", 4 ] ] ] + }, + { + "result": "dry_seaweed_pile", + "type": "uncraft", + "activity_level": "NO_EXERCISE", + "time": "10 s", + "components": [ [ [ "dry_seaweed", 20 ] ] ] + }, + { + "result": "seaweed_pile", + "type": "uncraft", + "activity_level": "NO_EXERCISE", + "time": "10 s", + "components": [ [ [ "seaweed", 20 ] ] ] } ] diff --git a/data/json/vitamin.json b/data/json/vitamin.json index 0b30226d1af4b..45e345cded0d8 100644 --- a/data/json/vitamin.json +++ b/data/json/vitamin.json @@ -60,11 +60,11 @@ "disease_excess": [ [ 10, 864 ], [ 865, 1728 ], [ 1729, 2592 ] ] }, { - "id": "vit_bloodthinner", + "id": "vit_anticoagulant_aspirin", "type": "vitamin", "vit_type": "drug", - "name": { "str": "Blood thinner" }, - "excess": "anticoagulant", + "name": { "str": "" }, + "excess": "anticoagulant_aspirin", "min": 0, "max": 4320, "rate": "100 s", diff --git a/src/activity_actor.cpp b/src/activity_actor.cpp index 06c63df3f3405..f621853ba5555 100644 --- a/src/activity_actor.cpp +++ b/src/activity_actor.cpp @@ -208,6 +208,7 @@ static const proficiency_id proficiency_prof_lockpicking( "prof_lockpicking" ); static const proficiency_id proficiency_prof_lockpicking_expert( "prof_lockpicking_expert" ); static const proficiency_id proficiency_prof_safecracking( "prof_safecracking" ); +static const quality_id qual_CUT( "CUT" ); static const quality_id qual_HACK( "HACK" ); static const quality_id qual_LOCKPICK( "LOCKPICK" ); static const quality_id qual_PRY( "PRY" ); @@ -4182,11 +4183,19 @@ std::unique_ptr drop_activity_actor::deserialize( JsonValue &jsi void harvest_activity_actor::start( player_activity &act, Character &who ) { map &here = get_map(); - + if( here.has_furn( target ) ) { const furn_id furn = here.furn( target ); - + if( furn->has_examine( iexamine::harvest_furn ) ) { + if( furn->has_flag( ter_furn_flag::TFLAG_HARVEST_REQ_CUT1 ) && who.max_quality( qual_CUT ) < 1 ) { + if( !auto_forage ) { + who.add_msg_if_player( m_info, + _( "You'll need a cutting tool to harvest this." ) ); + } + act.set_to_null(); + return; + } exam_furn = true; } else if( furn->has_examine( iexamine::harvest_furn_nectar ) ) { exam_furn = true; diff --git a/src/game.cpp b/src/game.cpp index 79ef86a839496..40bb691bbab1e 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -11867,7 +11867,7 @@ void game::vertical_move( int movez, bool force, bool peeking ) tripoint stairs( u.posx(), u.posy(), u.posz() + movez ); bool wall_cling = u.has_flag( json_flag_WALL_CLING ); bool adjacent_climb = false; - if( !force && movez == 1 && !here.has_flag( ter_furn_flag::TFLAG_GOES_UP, u.pos() ) && + if( !force && movez == 1 && !here.has_flag( ter_furn_flag::TFLAG_WATER_CUBE, u.pos() ) && !here.has_flag( ter_furn_flag::TFLAG_GOES_UP, u.pos() ) && !u.is_underwater() ) { // Climbing for( const tripoint &p : here.points_in_radius( u.pos(), 2 ) ) { @@ -11939,7 +11939,7 @@ void game::vertical_move( int movez, bool force, bool peeking ) } } - if( !force && movez == -1 && !here.has_flag( ter_furn_flag::TFLAG_GOES_DOWN, u.pos() ) && + if( !force && movez == -1 && !here.has_flag( ter_furn_flag::TFLAG_GOES_DOWN, u.pos() ) && !here.has_flag( ter_furn_flag::TFLAG_DEEP_WATER, u.pos() ) && !u.is_underwater() && !here.has_flag( ter_furn_flag::TFLAG_NO_FLOOR_WATER, u.pos() ) && !u.has_effect( effect_gliding ) ) { if( wall_cling && !here.has_floor_or_support( u.pos() ) ) { @@ -11953,7 +11953,7 @@ void game::vertical_move( int movez, bool force, bool peeking ) return; } } else if( !climbing && !force && movez == 1 && - !here.has_flag( ter_furn_flag::TFLAG_GOES_UP, u.pos() ) && !u.is_underwater() ) { + !here.has_flag( ter_furn_flag::TFLAG_WATER_CUBE, u.pos() ) && !here.has_flag( ter_furn_flag::TFLAG_GOES_UP, u.pos() ) && !u.is_underwater() ) { add_msg( m_info, _( "You can't go up here!" ) ); return; } @@ -12002,7 +12002,8 @@ void game::vertical_move( int movez, bool force, bool peeking ) // ...and we're already submerged if( u.is_underwater() ) { // ...and there's more water beneath us. - if( target_ter->has_flag( ter_furn_flag::TFLAG_WATER_CUBE ) ) { + if( target_ter->has_flag( ter_furn_flag::TFLAG_WATER_CUBE ) || + target_ter->has_flag( ter_furn_flag::TFLAG_GOES_UP ) ) { // Then go ahead and move down. add_msg( _( "You swim down." ) ); } else { @@ -12051,7 +12052,7 @@ void game::vertical_move( int movez, bool force, bool peeking ) // ...and we're trying to swim down if( movez == -1 ) { // ...and there's more water beneath us. - if( target_ter->has_flag( ter_furn_flag::TFLAG_WATER_CUBE ) ) { + if( target_ter->has_flag( ter_furn_flag::TFLAG_WATER_CUBE ) || target_ter->has_flag( ter_furn_flag::TFLAG_GOES_UP ) ) { // Then go ahead and move down. add_msg( _( "You swim down." ) ); } else { diff --git a/src/mapdata.cpp b/src/mapdata.cpp index 6dd80769dcd79..ca19b50a9f02b 100644 --- a/src/mapdata.cpp +++ b/src/mapdata.cpp @@ -267,6 +267,7 @@ std::string enum_to_string( ter_furn_flag data ) case ter_furn_flag::TFLAG_SINGLE_SUPPORT: return "SINGLE_SUPPORT"; case ter_furn_flag::TFLAG_CLIMB_ADJACENT: return "CLIMB_ADJACENT"; case ter_furn_flag::TFLAG_FLOATS_IN_AIR: return "FLOATS_IN_AIR"; + case ter_furn_flag::TFLAG_HARVEST_REQ_CUT1: return "HARVEST_REQ_CUT1"; // *INDENT-ON* case ter_furn_flag::NUM_TFLAG_FLAGS: diff --git a/src/mapdata.h b/src/mapdata.h index 7cedb690eaccf..1c920467da71d 100644 --- a/src/mapdata.h +++ b/src/mapdata.h @@ -327,6 +327,7 @@ enum class ter_furn_flag : int { TFLAG_SINGLE_SUPPORT, TFLAG_CLIMB_ADJACENT, TFLAG_FLOATS_IN_AIR, + TFLAG_HARVEST_REQ_CUT1, NUM_TFLAG_FLAGS }; diff --git a/tools/spell_checker/dictionary.txt b/tools/spell_checker/dictionary.txt index 504ea63ce393f..7d9ea420c9c19 100644 --- a/tools/spell_checker/dictionary.txt +++ b/tools/spell_checker/dictionary.txt @@ -344,6 +344,8 @@ blacklists blackpowder blackpowders blacksmithing +bladelike +bladderwrack blocky bloodbank bloodborne @@ -1650,6 +1652,7 @@ knuckleduster knuckledusters knyf kokanee +kombu kompot koom kops