diff --git a/data/json/body_parts.json b/data/json/body_parts.json index b9a2a56a6d967..15952c01ee610 100644 --- a/data/json/body_parts.json +++ b/data/json/body_parts.json @@ -345,7 +345,7 @@ "hit_size": 0.5, "hit_difficulty": 1.15, "limb_type": "mouth", - "limb_scores": [ [ "breathing", 1.0 ], [ "manip", 0.05, 0.2 ] ], + "limb_scores": [ [ "breathing", 1.0 ], [ "manip", 0.05, 0.2 ], [ "consume_liquid", 1.0 ], [ "consume_solid", 1.0 ] ], "side": "both", "legacy_id": "MOUTH", "stylish_bonus": 2, @@ -869,7 +869,14 @@ "main_part": "debug_tail", "hit_difficulty": 0.8, "limb_type": "tail", - "limb_scores": [ [ "manip", 0.5, 1.0 ], [ "balance", 1.0 ], [ "swim", 0.15 ], [ "lift", 2 ], [ "block", 5 ] ], + "limb_scores": [ + [ "manip", 0.5, 1.0 ], + [ "balance", 1.0 ], + [ "swim", 0.15 ], + [ "lift", 2 ], + [ "block", 5 ], + [ "consume_solid", 10.0 ] + ], "opposite_part": "debug_tail", "side": "both", "connected_to": "torso", diff --git a/data/json/character_modifiers.json b/data/json/character_modifiers.json index c6565f1f0e0a9..a7d80750a5975 100644 --- a/data/json/character_modifiers.json +++ b/data/json/character_modifiers.json @@ -20,6 +20,20 @@ "mod_type": "x", "value": { "limb_score": [ [ "grip", 0.2 ], [ "manip", 0.2 ], [ "lift", 0.6 ] ], "limb_score_op": "+", "min": 0.1, "max": 1.0 } }, + { + "type": "character_mod", + "id": "solid_consume_mod", + "description": "Consume time multiplier for solid foods.", + "mod_type": "x", + "value": { "limb_score": "consume_solid", "max": 10, "nominator": 1.0 } + }, + { + "type": "character_mod", + "id": "liquid_consume_mod", + "description": "Consume time multiplier for drinks.", + "mod_type": "x", + "value": { "limb_score": "consume_liquid", "max": 10, "nominator": 1.0 } + }, { "type": "character_mod", "id": "melee_thrown_move_lift_mod", diff --git a/data/json/limb_scores.json b/data/json/limb_scores.json index e76ec2470a0fe..453bb1a8d75b0 100644 --- a/data/json/limb_scores.json +++ b/data/json/limb_scores.json @@ -77,6 +77,20 @@ "affected_by_wounds": true, "affected_by_encumb": true }, + { + "type": "limb_score", + "id": "consume_solid", + "name": "Consume (Solid)", + "affected_by_encumb": false, + "affected_by_wounds": true + }, + { + "type": "limb_score", + "id": "consume_liquid", + "name": "Consume (Liquid)", + "affected_by_encumb": false, + "affected_by_wounds": true + }, { "type": "limb_score", "id": "swim", diff --git a/data/json/mapgen/basecamps/expansion/modular_canteen/version_2/modular_canteen_common.json b/data/json/mapgen/basecamps/expansion/modular_canteen/version_2/modular_canteen_common.json index 97dd8a57576a2..e14b2ce1d963d 100644 --- a/data/json/mapgen/basecamps/expansion/modular_canteen/version_2/modular_canteen_common.json +++ b/data/json/mapgen/basecamps/expansion/modular_canteen/version_2/modular_canteen_common.json @@ -111,10 +111,12 @@ "method": "json", "object": { "set": [ - { "point": "furniture", "id": "f_fireplace", "x": 11, "y": 10 }, - { "point": "furniture", "id": "f_counter", "x": 10, "y": 10 }, - { "point": "furniture", "id": "f_fireplace", "x": 13, "y": 10 }, - { "point": "furniture", "id": "f_counter", "x": 14, "y": 10 } + { "point": "furniture", "id": "f_fireplace", "x": 11, "y": 10, "z": 0 }, + { "point": "furniture", "id": "f_chimney", "x": 11, "y": 10, "z": 1 }, + { "point": "furniture", "id": "f_counter", "x": 10, "y": 10, "z": 0 }, + { "point": "furniture", "id": "f_fireplace", "x": 13, "y": 10, "z": 0 }, + { "point": "furniture", "id": "f_chimney", "x": 13, "y": 10, "z": 1 }, + { "point": "furniture", "id": "f_counter", "x": 14, "y": 10, "z": 0 } ], "place_loot": [ { "item": "pot", "x": 10, "y": 10 }, { "item": "pan", "x": 10, "y": 10 } ] } @@ -125,10 +127,12 @@ "method": "json", "object": { "set": [ - { "point": "furniture", "id": "f_woodstove", "x": 11, "y": 10 }, - { "point": "furniture", "id": "f_counter", "x": 10, "y": 10 }, - { "point": "furniture", "id": "f_woodstove", "x": 13, "y": 10 }, - { "point": "furniture", "id": "f_counter", "x": 14, "y": 10 } + { "point": "furniture", "id": "f_woodstove", "x": 11, "y": 10, "z": 0 }, + { "point": "furniture", "id": "f_vent_pipe", "x": 11, "y": 10, "z": 1 }, + { "point": "furniture", "id": "f_counter", "x": 10, "y": 10, "z": 0 }, + { "point": "furniture", "id": "f_woodstove", "x": 13, "y": 10, "z": 0 }, + { "point": "furniture", "id": "f_vent_pipe", "x": 13, "y": 10, "z": 1 }, + { "point": "furniture", "id": "f_counter", "x": 14, "y": 10, "z": 0 } ], "place_loot": [ { "item": "pot", "x": 10, "y": 10 }, { "item": "pan", "x": 10, "y": 10 } ] } @@ -167,10 +171,11 @@ "method": "json", "object": { "set": [ - { "point": "furniture", "id": "f_smoking_rack", "x": 19, "y": 19 }, - { "point": "furniture", "id": "f_smoking_rack", "x": 19, "y": 20 }, - { "point": "furniture", "id": "f_smoking_rack", "x": 19, "y": 21 }, - { "point": "furniture", "id": "f_kiln_empty", "x": 17, "y": 18 } + { "point": "furniture", "id": "f_smoking_rack", "x": 19, "y": 19, "z": 0 }, + { "point": "furniture", "id": "f_smoking_rack", "x": 19, "y": 20, "z": 0 }, + { "point": "furniture", "id": "f_smoking_rack", "x": 19, "y": 21, "z": 0 }, + { "point": "furniture", "id": "f_kiln_empty", "x": 17, "y": 18, "z": 0 }, + { "point": "furniture", "id": "f_chimney", "x": 17, "y": 18, "z": 1 } ] } }, @@ -361,11 +366,30 @@ "palettes": [ "fbmk_2_common_palette" ] } }, + { + "type": "mapgen", + "nested_mapgen_id": "fbmk_2_still_vent_pipe", + "method": "json", + "object": { + "mapgensize": [ 3, 3 ], + "rows": [ + " ", + " ", + "P " + ], + "palettes": [ "fbmk_2_common_palette" ] + } + }, { "type": "mapgen", "update_mapgen_id": "fbmk_2_still", "method": "json", - "object": { "place_nested": [ { "chunks": [ "fbmk_2_still" ], "x": 2, "y": 19 } ] } + "object": { + "place_nested": [ + { "chunks": [ "fbmk_2_still" ], "x": 2, "y": 19, "z": 0 }, + { "chunks": [ "fbmk_2_still_vent_pipe" ], "x": 2, "y": 19, "z": 1 } + ] + } }, { "type": "mapgen", diff --git a/data/json/mapgen/basecamps/expansion/modular_canteen/version_2/modular_canteen_construction.json b/data/json/mapgen/basecamps/expansion/modular_canteen/version_2/modular_canteen_construction.json index 354603bec60d1..d5080adb0b097 100644 --- a/data/json/mapgen/basecamps/expansion/modular_canteen/version_2/modular_canteen_construction.json +++ b/data/json/mapgen/basecamps/expansion/modular_canteen/version_2/modular_canteen_construction.json @@ -36,11 +36,52 @@ "palettes": [ { "param": "fbmk_2_construction_palette" } ] } }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "fbmk_2_room_roof", + "object": { + "parameters": { + "fbmk_2_construction_palette": { + "type": "palette_id", + "scope": "omt", + "default": { + "distribution": [ + "fbmk_2_concrete_palette", + "fbmk_2_log_palette", + "fbmk_2_metal_palette", + "fbmk_2_migo_resin_palette", + "fbmk_2_rammed_earth_palette", + "fbmk_2_rock_palette", + "fbmk_2_wad_palette", + "fbmk_2_wood_palette" + ] + } + } + }, + "mapgensize": [ 7, 7 ], + "rows": [ + "rrrrrrr", + "rrrrrrr", + "rrrrrrr", + " ", + " ", + " ", + " " + ], + "palettes": [ { "param": "fbmk_2_construction_palette" } ] + } + }, { "type": "mapgen", "update_mapgen_id": "fbmk_2_1", "method": "json", - "object": { "place_nested": [ { "chunks": [ "fbmk_2_room" ], "x": 9, "y": 9 } ] } + "object": { + "place_nested": [ + { "chunks": [ "fbmk_2_room" ], "x": 9, "y": 9, "z": 0 }, + { "chunks": [ "fbmk_2_room_roof" ], "x": 9, "y": 9, "z": 1 } + ] + } }, { "type": "mapgen", @@ -79,11 +120,52 @@ "palettes": [ { "param": "fbmk_2_construction_palette" } ] } }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "fbmk_2_room_2_roof", + "object": { + "parameters": { + "fbmk_2_construction_palette": { + "type": "palette_id", + "scope": "omt", + "default": { + "distribution": [ + "fbmk_2_concrete_palette", + "fbmk_2_log_palette", + "fbmk_2_metal_palette", + "fbmk_2_migo_resin_palette", + "fbmk_2_rammed_earth_palette", + "fbmk_2_rock_palette", + "fbmk_2_wad_palette", + "fbmk_2_wood_palette" + ] + } + } + }, + "mapgensize": [ 7, 7 ], + "rows": [ + " ", + " ", + " ", + "rrrrrrr", + "rrrrrrr", + "rrrrrrr", + "rrrrrrr" + ], + "palettes": [ { "param": "fbmk_2_construction_palette" } ] + } + }, { "type": "mapgen", "update_mapgen_id": "fbmk_2_2", "method": "json", - "object": { "place_nested": [ { "chunks": [ "fbmk_2_room_2" ], "x": 9, "y": 9 } ] } + "object": { + "place_nested": [ + { "chunks": [ "fbmk_2_room_2" ], "x": 9, "y": 9, "z": 0 }, + { "chunks": [ "fbmk_2_room_2_roof" ], "x": 9, "y": 9, "z": 1 } + ] + } }, { "type": "mapgen", @@ -120,11 +202,50 @@ "palettes": [ { "param": "fbmk_2_construction_palette" } ] } }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "fbmk_2_smoking_area_roof_construction", + "object": { + "parameters": { + "fbmk_2_construction_palette": { + "type": "palette_id", + "scope": "omt", + "default": { + "distribution": [ + "fbmk_2_concrete_palette", + "fbmk_2_log_palette", + "fbmk_2_metal_palette", + "fbmk_2_migo_resin_palette", + "fbmk_2_rammed_earth_palette", + "fbmk_2_rock_palette", + "fbmk_2_wad_palette", + "fbmk_2_wood_palette" + ] + } + } + }, + "mapgensize": [ 5, 5 ], + "rows": [ + "rrrrr", + "rrrrr", + "rrrrr", + "rrrrr", + "rrrrr" + ], + "palettes": [ { "param": "fbmk_2_construction_palette" } ] + } + }, { "type": "mapgen", "update_mapgen_id": "fbmk_2_smoking_area_construction", "method": "json", - "object": { "place_nested": [ { "chunks": [ "fbmk_2_smoking_area_construction" ], "x": 15, "y": 18 } ] } + "object": { + "place_nested": [ + { "chunks": [ "fbmk_2_smoking_area_construction" ], "x": 15, "y": 18, "z": 0 }, + { "chunks": [ "fbmk_2_smoking_area_roof_construction" ], "x": 15, "y": 18, "z": 1 } + ] + } }, { "type": "mapgen", @@ -165,11 +286,54 @@ "palettes": [ { "param": "fbmk_2_construction_palette" } ] } }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "fbmk_2_pantry_roof_construction", + "object": { + "parameters": { + "fbmk_2_construction_palette": { + "type": "palette_id", + "scope": "omt", + "default": { + "distribution": [ + "fbmk_2_concrete_palette", + "fbmk_2_log_palette", + "fbmk_2_metal_palette", + "fbmk_2_migo_resin_palette", + "fbmk_2_rammed_earth_palette", + "fbmk_2_rock_palette", + "fbmk_2_wad_palette", + "fbmk_2_wood_palette" + ] + } + } + }, + "mapgensize": [ 9, 9 ], + "rows": [ + "rrrrrrrrr", + "rrrrrrrrr", + "rrrrrrrrr", + "rrrrrrrrr", + "rrrrrrrrr", + "rrrrrrrrr", + "rrrrrrrrr", + " ", + " " + ], + "palettes": [ { "param": "fbmk_2_construction_palette" } ] + } + }, { "type": "mapgen", "update_mapgen_id": "fbmk_2_pantry_construction", "method": "json", - "object": { "place_nested": [ { "chunks": [ "fbmk_2_pantry_construction" ], "x": 0, "y": 9 } ] } + "object": { + "place_nested": [ + { "chunks": [ "fbmk_2_pantry_construction" ], "x": 0, "y": 9, "z": 0 }, + { "chunks": [ "fbmk_2_pantry_roof_construction" ], "x": 0, "y": 9, "z": 1 } + ] + } }, { "type": "mapgen", @@ -208,11 +372,52 @@ "palettes": [ { "param": "fbmk_2_construction_palette" } ] } }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "fbmk_2_dining_1_roof", + "object": { + "parameters": { + "fbmk_2_construction_palette": { + "type": "palette_id", + "scope": "omt", + "default": { + "distribution": [ + "fbmk_2_concrete_palette", + "fbmk_2_log_palette", + "fbmk_2_metal_palette", + "fbmk_2_migo_resin_palette", + "fbmk_2_rammed_earth_palette", + "fbmk_2_rock_palette", + "fbmk_2_wad_palette", + "fbmk_2_wood_palette" + ] + } + } + }, + "mapgensize": [ 7, 7 ], + "rows": [ + "rrrrrr ", + "rrrrrr ", + "rrrrr ", + "rrrrr ", + "rrrrr ", + "rrrrr ", + "rrrrr " + ], + "palettes": [ { "param": "fbmk_2_construction_palette" } ] + } + }, { "type": "mapgen", "update_mapgen_id": "fbmk_2_dining_1", "method": "json", - "object": { "place_nested": [ { "chunks": [ "fbmk_2_dining_1" ], "x": 10, "y": 16 } ] } + "object": { + "place_nested": [ + { "chunks": [ "fbmk_2_dining_1" ], "x": 10, "y": 16, "z": 0 }, + { "chunks": [ "fbmk_2_dining_1_roof" ], "x": 10, "y": 16, "z": 1 } + ] + } }, { "type": "mapgen", @@ -251,11 +456,52 @@ "palettes": [ { "param": "fbmk_2_construction_palette" } ] } }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "fbmk_2_dining_2_roof", + "object": { + "parameters": { + "fbmk_2_construction_palette": { + "type": "palette_id", + "scope": "omt", + "default": { + "distribution": [ + "fbmk_2_concrete_palette", + "fbmk_2_log_palette", + "fbmk_2_metal_palette", + "fbmk_2_migo_resin_palette", + "fbmk_2_rammed_earth_palette", + "fbmk_2_rock_palette", + "fbmk_2_wad_palette", + "fbmk_2_wood_palette" + ] + } + } + }, + "mapgensize": [ 7, 7 ], + "rows": [ + "rrrr ", + "rrrr ", + "rrrr ", + "rrrr ", + "rrrr ", + "rrrr ", + "rrrr " + ], + "palettes": [ { "param": "fbmk_2_construction_palette" } ] + } + }, { "type": "mapgen", "update_mapgen_id": "fbmk_2_dining_2", "method": "json", - "object": { "place_nested": [ { "chunks": [ "fbmk_2_dining_2" ], "x": 6, "y": 16 } ] } + "object": { + "place_nested": [ + { "chunks": [ "fbmk_2_dining_2" ], "x": 6, "y": 16, "z": 0 }, + { "chunks": [ "fbmk_2_dining_2_roof" ], "x": 6, "y": 16, "z": 1 } + ] + } }, { "type": "mapgen", @@ -294,10 +540,51 @@ "palettes": [ { "param": "fbmk_2_construction_palette" } ] } }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "fbmk_2_brewery_roof", + "object": { + "parameters": { + "fbmk_2_construction_palette": { + "type": "palette_id", + "scope": "omt", + "default": { + "distribution": [ + "fbmk_2_concrete_palette", + "fbmk_2_log_palette", + "fbmk_2_metal_palette", + "fbmk_2_migo_resin_palette", + "fbmk_2_rammed_earth_palette", + "fbmk_2_rock_palette", + "fbmk_2_wad_palette", + "fbmk_2_wood_palette" + ] + } + } + }, + "mapgensize": [ 7, 7 ], + "rows": [ + "rrrrrr ", + "rrrrrr ", + "rrrrrr ", + "rrrrrr ", + "rrrrrr ", + "rrrrrr ", + "rrrrrr " + ], + "palettes": [ { "param": "fbmk_2_construction_palette" } ] + } + }, { "type": "mapgen", "update_mapgen_id": "fbmk_2_brewery", "method": "json", - "object": { "place_nested": [ { "chunks": [ "fbmk_2_brewery" ], "x": 0, "y": 16 } ] } + "object": { + "place_nested": [ + { "chunks": [ "fbmk_2_brewery" ], "x": 0, "y": 16, "z": 0 }, + { "chunks": [ "fbmk_2_brewery_roof" ], "x": 0, "y": 16, "z": 1 } + ] + } } ] diff --git a/data/json/mapgen/basecamps/expansion/modular_canteen/version_2/modular_canteen_palettes.json b/data/json/mapgen/basecamps/expansion/modular_canteen/version_2/modular_canteen_palettes.json index 31c699a50b9ea..7fa9421d5223a 100644 --- a/data/json/mapgen/basecamps/expansion/modular_canteen/version_2/modular_canteen_palettes.json +++ b/data/json/mapgen/basecamps/expansion/modular_canteen/version_2/modular_canteen_palettes.json @@ -33,31 +33,61 @@ "s": "f_woodstove", "M": "f_wind_mill", "e": "f_bookcase", - ";": "f_clear" + ";": "f_clear", + "C": "f_chimney", + "P": "f_vent_pipe" } }, { "type": "palette", "id": "fbmk_2_concrete_palette", - "terrain": { ",": "t_dirtfloor", ".": "t_thconc_floor", "+": "t_door_metal_c", "v": "t_window_no_curtains", "w": "t_sconc_wall" }, + "terrain": { + ",": "t_dirtfloor", + ".": "t_thconc_floor", + "+": "t_door_metal_c", + "r": "t_concrete_roof", + "v": "t_window_no_curtains", + "w": "t_sconc_wall" + }, "furniture": { } }, { "type": "palette", "id": "fbmk_2_log_palette", - "terrain": { ",": "t_dirtfloor", ".": "t_floor", "+": "t_door_c", "v": "t_window_no_curtains", "w": "t_wall_log" }, + "terrain": { + ",": "t_dirtfloor", + ".": "t_floor", + "+": "t_door_c", + "r": "t_wood_treated_roof", + "v": "t_window_no_curtains", + "w": "t_wall_log" + }, "furniture": { } }, { "type": "palette", "id": "fbmk_2_metal_palette", - "terrain": { ",": "t_dirtfloor", ".": "t_scrap_floor", "+": "t_door_metal_c", "v": "t_window_no_curtains", "w": "t_scrap_wall" }, + "terrain": { + ",": "t_dirtfloor", + ".": "t_scrap_floor", + "+": "t_door_metal_c", + "r": "t_metal_flat_roof", + "v": "t_window_no_curtains", + "w": "t_scrap_wall" + }, "furniture": { } }, { "type": "palette", "id": "fbmk_2_migo_resin_palette", - "terrain": { ",": "t_dirtfloor", ".": "t_floor_resin", "+": "t_resin_hole_c", "v": "t_wall_resin_cage", "w": "t_wall_resin" }, + "terrain": { + ",": "t_dirtfloor", + ".": "t_floor_resin", + "+": "t_resin_hole_c", + "r": "t_resin_roof", + "v": "t_wall_resin_cage", + "w": "t_wall_resin" + }, "furniture": { } }, { @@ -67,6 +97,7 @@ ",": "t_dirtfloor", ".": "t_floor_primitive", "+": "t_door_makeshift_c", + "r": "t_log_sod_roof", "v": "t_window_empty", "w": "t_wall_rammed_earth" }, @@ -75,7 +106,14 @@ { "type": "palette", "id": "fbmk_2_rock_palette", - "terrain": { ",": "t_dirtfloor", ".": "t_floor", "+": "t_door_c", "v": "t_window_no_curtains", "w": "t_rock_wall" }, + "terrain": { + ",": "t_dirtfloor", + ".": "t_floor", + "+": "t_door_c", + "r": "t_wood_treated_roof", + "v": "t_window_no_curtains", + "w": "t_rock_wall" + }, "furniture": { } }, { @@ -85,6 +123,7 @@ ",": "t_dirtfloor", ".": "t_floor_primitive", "+": "t_door_makeshift_c", + "r": "t_log_sod_roof", "v": "t_wall_wattle_half", "w": "t_wall_wattle" }, @@ -93,7 +132,14 @@ { "type": "palette", "id": "fbmk_2_wood_palette", - "terrain": { ",": "t_dirtfloor", ".": "t_floor", "+": "t_door_c", "v": "t_window_no_curtains", "w": "t_wall_wood" }, + "terrain": { + ",": "t_dirtfloor", + ".": "t_floor", + "+": "t_door_c", + "r": "t_wood_treated_roof", + "v": "t_window_no_curtains", + "w": "t_wall_wood" + }, "furniture": { } } ] diff --git a/data/json/monsters/mammal.json b/data/json/monsters/mammal.json index e4064a377a827..74dafbe5a780c 100644 --- a/data/json/monsters/mammal.json +++ b/data/json/monsters/mammal.json @@ -2288,6 +2288,7 @@ "fear_triggers": [ "SOUND", "PLAYER_CLOSE" ], "placate_triggers": [ "PLAYER_WEAK" ], "harvest": "mammal_large_leather", + "dissect": "dissect_cattle_sample_single", "families": [ "prof_intro_biology", "prof_physiology" ], "upgrades": { "age_grow": 450, "into": "mon_horse" }, "biosignature": { "biosig_item": "feces_manure", "biosig_timer": 10 }, @@ -3015,6 +3016,7 @@ "anger_triggers": [ ], "stomach_size": 250, "harvest": "mammal_small_wool", + "dissect": "dissect_cattle_sample_single", "families": [ "prof_intro_biology", "prof_physiology" ], "fear_triggers": [ "SOUND", "PLAYER_CLOSE", "FRIEND_ATTACKED" ], "placate_triggers": [ "PLAYER_WEAK" ], @@ -3050,6 +3052,7 @@ "anger_triggers": [ ], "shearing": [ { "result": "wool_staple", "amount": 22 } ], "harvest": "sheep_with_skull", + "dissect": "dissect_cattle_sample_single", "families": [ "prof_intro_biology", "prof_physiology" ], "reproduction": { "baby_monster": "mon_sheep_lamb", "baby_count": 1, "baby_timer": 275 }, "//": "Sheep are seasonal breeders. The natural sexual season is positioned so that lambs will be born in the spring when the weather is warmer and grass is available.", @@ -3356,6 +3359,7 @@ "anger_triggers": [ ], "stomach_size": 200, "harvest": "mammal_small_wool", + "dissect": "dissect_cattle_sample_single", "families": [ "prof_intro_biology", "prof_physiology" ], "fear_triggers": [ "SOUND", "PLAYER_CLOSE", "FRIEND_ATTACKED" ], "placate_triggers": [ "PLAYER_WEAK" ], @@ -3389,9 +3393,9 @@ "dodge": 2, "stomach_size": 400, "starting_ammo": { "milk_raw": 5 }, - "anger_triggers": [ ], "shearing": [ { "result": "wool_staple", "amount": 22 } ], "harvest": "llama_with_skull", + "dissect": "dissect_cattle_sample_single", "families": [ "prof_intro_biology", "prof_physiology" ], "reproduction": { "baby_monster": "mon_llama_calf", "baby_count": 1, "baby_timer": 275 }, "//": "Llamas produce offspring between summer and fall according to internet sources, makes sense due to the southern hemisphere seasons.", diff --git a/data/mods/Aftershock/ammo_effects.json b/data/mods/Aftershock/ammo_effects.json index bf78685440550..b514adaedf790 100644 --- a/data/mods/Aftershock/ammo_effects.json +++ b/data/mods/Aftershock/ammo_effects.json @@ -41,6 +41,11 @@ "type": "ammo_effect", "aoe": { "field_type": "fd_clairvoyant", "intensity_min": 10, "intensity_max": 10 } }, + { + "id": "TOXIC_FOAM", + "type": "ammo_effect", + "aoe": { "field_type": "fd_toxic_foam", "intensity_min": 1, "intensity_max": 4, "chance": 70, "radius": 1 } + }, { "id": "MULTI_EFFECTS", "type": "ammo_effect", diff --git a/data/mods/Aftershock/damage_types.json b/data/mods/Aftershock/damage_types.json index 28e59facd9734..9fc63b046c830 100644 --- a/data/mods/Aftershock/damage_types.json +++ b/data/mods/Aftershock/damage_types.json @@ -16,5 +16,61 @@ "pet_prot_info": { "order": 307, "show_type": true }, "melee_combat_info": { "order": 407, "show_type": true }, "ablative_info": { "order": 307, "show_type": true } + }, + { + "id": "afs_toxin_pierce", + "type": "damage_type", + "physical": true, + "edged": true, + "magic_color": "light_green", + "name": "toxic pierce", + "skill": "stabbing", + "derived_from": [ "stab", 1 ], + "immune_flags": { "character": [ "STAB_IMMUNE" ] }, + "ondamage_eocs": [ "AFS_TOXIN_DAMAGE_EFFECTS" ] + }, + { + "id": "afs_toxin_bullet", + "type": "damage_type", + "physical": true, + "magic_color": "light_green", + "name": "toxic ballistic", + "derived_from": [ "bullet", 1 ], + "immune_flags": { "character": [ "BULLET_IMMUNE" ] }, + "ondamage_eocs": [ "AFS_TOXIN_DAMAGE_EFFECTS" ] + }, + { + "type": "effect_on_condition", + "id": "AFS_TOXIN_DAMAGE_EFFECTS", + "eoc_type": "ACTIVATION", + "condition": { + "and": [ + { "or": [ { "not": { "npc_has_flag": "BIO_IMMUNE" } }, { "not": { "npc_has_flag": "BIOLOGICALPROOF" } } ] }, + { "math": [ "_damage_taken", ">", "0" ] } + ] + }, + "effect": [ { "npc_add_effect": "afs_badpoison", "duration": "5 m", "target_part": "torso" } ] + }, + { + "id": "afs_toxin_pierce", + "type": "damage_info_order", + "info_display": "basic", + "verb": "toxic piercing", + "bionic_info": { "order": 407, "show_type": false }, + "protection_info": { "order": 307, "show_type": false }, + "pet_prot_info": { "order": 307, "show_type": false }, + "melee_combat_info": { "order": 407, "show_type": true }, + "ablative_info": { "order": 307, "show_type": false } + }, + { + "id": "afs_toxin_bullet", + "type": "damage_info_order", + "info_display": "detailed", + "verb": "shooting", + "bionic_info": { "order": 401, "show_type": false }, + "protection_info": { "order": 301, "show_type": false }, + "pet_prot_info": { "order": 301, "show_type": false }, + "melee_combat_info": { "order": 401, "show_type": false }, + "ablative_info": { "order": 301, "show_type": false } } ] diff --git a/data/mods/Aftershock/effects.json b/data/mods/Aftershock/effects.json index 004c739cc7ff5..81eae2a358926 100644 --- a/data/mods/Aftershock/effects.json +++ b/data/mods/Aftershock/effects.json @@ -148,6 +148,34 @@ "scaling_mods": { "dex_mod": [ -0.34, -0.17 ], "speed_mod": [ -15 ] }, "show_in_info": true }, + { + "type": "effect_type", + "id": "afs_badpoison", + "name": [ "Fatally Poisoned" ], + "desc": [ "The world is spinning around you, and you feel like you're going to die." ], + "miss_messages": [ [ "You feel bad inside.", 2 ] ], + "rating": "bad", + "immune_bp_flags": [ "BIONIC_LIMB" ], + "resist_traits": [ "POISRESIST" ], + "immune_flags": [ "BIOLOGICALPROOF", "BIO_IMMUNE" ], + "resist_effects": [ "prophylactic_antivenom", "synth_blood_perf", "synth_blood_permanent" ], + "pain_sizing": true, + "hurt_sizing": true, + "main_parts_only": true, + "base_mods": { + "per_mod": [ -2 ], + "dex_mod": [ -2 ], + "str_mod": [ -3, -1 ], + "speed_mod": [ -10 ], + "pain_min": [ 2 ], + "pain_chance": [ 1, 100 ], + "hurt_min": [ 11, 2 ], + "hurt_max": [ 20, 5 ], + "hurt_chance": [ 1, 200 ] + }, + "show_in_info": true, + "blood_analysis_description": "Poison" + }, { "type": "effect_type", "id": "afs_generic_speed_bonus", @@ -293,5 +321,11 @@ "base_mods": { "speed_mod": [ -5 ], "stamina_min": [ -10 ], "str_mod": [ -4 ], "dex_mod": [ -2 ] }, "blood_analysis_description": "Dangerous levels of steroids.", "show_in_info": true + }, + { + "type": "effect_type", + "id": "afs_cureall", + "removes_effects": [ "afs_badpoison" ], + "base_mods": { "pkill_min": [ 5 ] } } ] diff --git a/data/mods/Aftershock/field_type.json b/data/mods/Aftershock/field_type.json index 5ecaff49c31fd..e4828e92e9ed2 100644 --- a/data/mods/Aftershock/field_type.json +++ b/data/mods/Aftershock/field_type.json @@ -63,5 +63,69 @@ "display_field": true, "looks_like": "fd_electricity", "wandering_field": "fd_electricity" + }, + { + "id": "fd_toxic_foam", + "type": "field_type", + "intensity_levels": [ + { + "name": "toxic foam", + "sym": "8", + "dangerous": true, + "translucency": 1, + "effects": [ + { + "effect_id": "poison", + "body_part": "mouth", + "intensity": 2, + "min_duration": "2 minutes", + "max_duration": "2 minutes", + "immune_inside_vehicle": true, + "message": "You feel the toxic foam burn through your skin.", + "message_type": "bad" + } + ] + }, + { "//": "repeat last entry" }, + { "//": "repeat last entry" }, + { + "name": "dense toxic foam", + "color": "green", + "translucency": 0, + "effects": [ + { + "effect_id": "afs_badpoison", + "body_part": "mouth", + "intensity": 5, + "min_duration": "10 minutes", + "max_duration": "10 minutes", + "//": "won't be applied inside of vehicles, so it could apply lesser effect", + "immune_inside_vehicle": true, + "message": "You feel the toxic foam burn through your skin.", + "message_type": "bad" + } + ] + }, + { "//": "repeat last entry" }, + { "//": "repeat last entry" }, + { "//": "repeat last entry" }, + { "//": "repeat last entry" }, + { "//": "repeat last entry" } + ], + "decay_amount_factor": 5, + "percent_spread": 30, + "outdoor_age_speedup": "3 minutes", + "dirty_transparency_cache": true, + "has_fume": true, + "immunity_data": { + "flags": [ "POISON_IMMUNE" ], + "body_part_env_resistance": [ [ "torso", 15 ], [ "leg", 15 ], [ "foot", 15 ], [ "mouth", 15 ], [ "sensor", 15 ] ] + }, + "priority": 2, + "half_life": "1 hours", + "phase": "solid", + "display_items": true, + "display_field": true, + "looks_like": "fd_nuke_gas" } ] diff --git a/data/mods/Aftershock/itemgroups/weapons/armories.json b/data/mods/Aftershock/itemgroups/weapons/armories.json index af25a6f38e1c1..65e08e1e5fcae 100644 --- a/data/mods/Aftershock/itemgroups/weapons/armories.json +++ b/data/mods/Aftershock/itemgroups/weapons/armories.json @@ -81,6 +81,8 @@ [ "afs_25mm_apfsds", 10 ], [ "afs_25mm_frag", 10 ], [ "shot_flechette", 20 ], + [ "3x35dart", 10 ], + [ "3x35toxic", 2 ], [ "shot_he", 20 ], [ "afs_4g_plasma", 20 ], [ "afs_20g_plasma", 10 ], @@ -98,6 +100,7 @@ [ "afs_gibrifle", 40 ], [ "afs_heavy_tactical_laser", 5 ], [ "afs_pam-41", 10 ], + [ "wasp_gun", 10 ], [ "afs_magnadrive_230k", 5 ], [ "afs_marsec_t72", 2 ], [ "afs_sr77", 10 ], diff --git a/data/mods/Aftershock/itemgroups/weapons/grenade_groups.json b/data/mods/Aftershock/itemgroups/weapons/grenade_groups.json index 612316f4c5452..1a78fa1bf03ed 100644 --- a/data/mods/Aftershock/itemgroups/weapons/grenade_groups.json +++ b/data/mods/Aftershock/itemgroups/weapons/grenade_groups.json @@ -8,6 +8,7 @@ { "item": "grenade_cryo", "count": [ 1, 3 ] }, { "item": "grenade", "count": [ 1, 3 ] }, { "item": "afs_HE_grenade", "count": [ 1, 3 ] }, + { "item": "afs_toxic_grenade", "count": [ 1, 3 ] }, { "item": "grenade_inc", "count": [ 1, 3 ] }, { "item": "smokebomb", "count": [ 1, 3 ] }, { "item": "scrambler", "count": [ 1, 3 ] }, diff --git a/data/mods/Aftershock/items/ammo/foam.json b/data/mods/Aftershock/items/ammo/foam.json index 4b89be49b09e2..676c5f0ef8838 100644 --- a/data/mods/Aftershock/items/ammo/foam.json +++ b/data/mods/Aftershock/items/ammo/foam.json @@ -17,5 +17,24 @@ "range": 8, "count": 30, "effects": [ "FOAMCRETE", "NEVER_MISFIRES", "JET", "NO_PENETRATE_OBSTACLES" ] + }, + { + "id": "afs_foamtoxic", + "type": "AMMO", + "name": { "str_sp": "wide-range pesticide" }, + "description": "An old Thistle Industries neurotoxic pesticide that can be used to kill insects, plants, mammals, nematodes, fungi and most organisms not genetically engineered to withstand its assault. Even short exposure is likely to prove fatal. Frontier rated only.", + "weight": "250 g", + "volume": "2 L", + "price": "150 USD", + "price_postapoc": "150 USD", + "material": [ "water" ], + "symbol": "=", + "color": "light_green", + "container": "afs_foam_tank", + "phase": "liquid", + "ammo_type": "afs_foam", + "range": 8, + "count": 30, + "effects": [ "TOXIC_FOAM", "NEVER_MISFIRES", "JET", "NO_PENETRATE_OBSTACLES" ] } ] diff --git a/data/mods/Aftershock/items/ammo/needle.json b/data/mods/Aftershock/items/ammo/needle.json index fd1cfffff0409..a41ff43c1b804 100644 --- a/data/mods/Aftershock/items/ammo/needle.json +++ b/data/mods/Aftershock/items/ammo/needle.json @@ -30,5 +30,18 @@ "material": [ "ceramic" ], "relative": { "range": -1, "damage": { "damage_type": "bullet", "amount": 14, "armor_penetration": -18 }, "dispersion": 20 }, "proportional": { "recoil": 0.9 } + }, + { + "id": "3x35toxic", + "copy-from": "3x35dart", + "type": "AMMO", + "name": { "str": "GG Fang 3x35mm NTX flechette" }, + "description": "Gibson Gear Fang flechettes loading a small ampoule of neurotoxic poison within a hollow cobalt dart. Although principally designed to neutralize the heavily augmented, they are effective against most organic targets.", + "weight": "6 g", + "price": "1600 USD", + "relative": { "range": -1, "dispersion": 20 }, + "damage": { "damage_type": "afs_toxin_bullet", "amount": 8, "armor_penetration": 20 }, + "proportional": { "recoil": 0.9 }, + "effects": [ "NEVER_MISFIRES" ] } ] diff --git a/data/mods/Aftershock/items/comestibles/comestibles.json b/data/mods/Aftershock/items/comestibles/comestibles.json index d95dfe8d321be..2c796b0932dd3 100644 --- a/data/mods/Aftershock/items/comestibles/comestibles.json +++ b/data/mods/Aftershock/items/comestibles/comestibles.json @@ -10,7 +10,7 @@ "use_action": { "type": "consume_drug", "activation_message": "You feel AMAZING!", - "effects": [ { "id": "panacea", "duration": "1 m" }, { "id": "cureall" } ], + "effects": [ { "id": "panacea", "duration": "1 m" }, { "id": "cureall" }, { "id": "afs_cureall" } ], "damage_over_time": [ { "damage_type": "pure", diff --git a/data/mods/Aftershock/items/grenades.json b/data/mods/Aftershock/items/grenades.json index 2c62910eb0b75..9f192a99efb32 100644 --- a/data/mods/Aftershock/items/grenades.json +++ b/data/mods/Aftershock/items/grenades.json @@ -181,6 +181,44 @@ "flags": [ "BOMB", "TRADER_AVOID" ], "melee_damage": { "bash": 6 } }, + { + "id": "afs_toxic_grenade", + "type": "TOOL", + "copy-from": "grenade_canister", + "looks_like": "grenade", + "name": "neurotoxin grenade", + "price": "650 USD", + "weight": "300 g", + "volume": "250 ml", + "description": "A neurotoxic device that deploys thick swathes of toxic foam upon detonation. Exposure proves fatal within seconds. Use against human targets is considered in breach of the Ganymede Accords.", + "use_action": { + "need_wielding": true, + "target": "afs_toxic_grenade_act", + "msg": "You pull the pin on the grenade.", + "target_timer": "5 seconds", + "menu_text": "Pull pin", + "type": "transform" + }, + "flags": [ "RADIO_MODABLE", "RADIO_INVOKE_PROC", "BOMB", "GRENADE" ] + }, + { + "id": "afs_toxic_grenade_act", + "type": "TOOL", + "copy-from": "afs_toxic_grenade", + "name": "active neurotoxin grenade", + "looks_like": "grenade_act", + "description": "A neurotoxic device that deploys thick swathes of toxic foam upon detonation.. It's currently active.", + "use_action": { "type": "message", "message": "You've already activated the %s, try throwing it instead." }, + "countdown_action": { + "type": "explosion", + "explosion": { "power": 150, "max_noise": 250, "distance_factor": 0.7 }, + "fields_radius": 4, + "fields_type": "fd_toxic_foam", + "fields_min_intensity": 3, + "fields_max_intensity": 6 + }, + "extend": { "flags": [ "TRADER_AVOID" ] } + }, { "id": "afs_oxygen_bomb", "type": "TOOL", diff --git a/data/mods/Aftershock/items/magazine/foam.json b/data/mods/Aftershock/items/magazine/foam.json index 2af6d3a4598da..eebef7f0c800c 100644 --- a/data/mods/Aftershock/items/magazine/foam.json +++ b/data/mods/Aftershock/items/magazine/foam.json @@ -13,7 +13,7 @@ "symbol": "#", "color": "light_gray", "ammo_type": [ "afs_foam" ], - "flags": [ "MAG_BULKY" ], + "flags": [ "MAG_BULKY", "NO_UNLOAD" ], "capacity": 30, "reload_time": 3, "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "afs_foam": 30 }, "watertight": true } ] diff --git a/data/mods/Aftershock/items/weapons.json b/data/mods/Aftershock/items/weapons.json index 0f05b588bbf24..70303e0558b01 100644 --- a/data/mods/Aftershock/items/weapons.json +++ b/data/mods/Aftershock/items/weapons.json @@ -247,6 +247,24 @@ "melee_damage": { "bash": 2, "stab": 15 }, "weapon_category": [ "KNIVES" ] }, + { + "id": "afs_toxic_knife", + "type": "TOOL", + "category": "weapons", + "name": { "str": "neurotoxic knife", "str_pl": "neurotoxic knives" }, + "description": "A broad white-ceramic knife that is constantly kept coated in neurotoxic oil by a handle mounted reservoir. Don't cut yourself.", + "weight": "390 g", + "volume": "250 ml", + "price": "40 USD", + "material": [ "ceramic", "plastic" ], + "symbol": "/", + "color": "white", + "qualities": [ [ "CUT", 2 ], [ "BUTCHER", 5 ] ], + "flags": [ "DURABLE_MELEE", "SHEATH_KNIFE", "NPC_THROWN", "ALLOWS_BODY_BLOCK", "NO_SALVAGE" ], + "weapon_category": [ "KNIVES" ], + "thrown_damage": [ { "damage_type": "afs_toxin_pierce", "amount": 14 } ], + "melee_damage": { "afs_toxin_pierce": 21 } + }, { "type": "GENERIC", "id": "trident", diff --git a/data/mods/Magiclysm/Spells/classless.json b/data/mods/Magiclysm/Spells/classless.json index 95979c402e007..756aed28b8c4c 100644 --- a/data/mods/Magiclysm/Spells/classless.json +++ b/data/mods/Magiclysm/Spells/classless.json @@ -94,12 +94,10 @@ "effect": "attack", "effect_str": "dark_sight", "shape": "blast", - "min_range": 1, - "max_range": 1, "base_casting_time": { "math": [ "enhancement_proficiency_negate_calculate(100, 1)" ] }, - "base_energy_cost": 500, + "base_energy_cost": 175, "energy_source": "MANA", - "difficulty": 6, + "difficulty": 2, "max_level": 20, "min_duration": { "math": [ "enhancement_proficiency_bonus_calculate(100000, 6000)" ] }, "max_duration": { "math": [ "enhancement_proficiency_bonus_calculate(1000000, 6000)" ] }, diff --git a/data/mods/Magiclysm/effects/effects.json b/data/mods/Magiclysm/effects/effects.json index 08931463cdac1..eda4a95eddbd2 100644 --- a/data/mods/Magiclysm/effects/effects.json +++ b/data/mods/Magiclysm/effects/effects.json @@ -77,7 +77,7 @@ "apply_message": "Your sight adjusts to the darkness.", "remove_message": "The darkness loses its shape.", "rating": "good", - "flags": [ "NIGHT_VISION" ] + "enchantments": [ { "values": [ { "value": "NIGHT_VIS", "add": { "math": [ "((u_spell_level('dark_sight')) + 3)" ] } } ] } ] }, { "type": "effect_type", diff --git a/data/mods/TEST_DATA/body_parts.json b/data/mods/TEST_DATA/body_parts.json index 558a0c80320b7..1077bdc0e2580 100644 --- a/data/mods/TEST_DATA/body_parts.json +++ b/data/mods/TEST_DATA/body_parts.json @@ -6,7 +6,7 @@ "name": "mouth", "similar_bodyparts": [ "test_corvid_beak" ], "limb_type": "mouth", - "limb_scores": [ [ "breathing", 1.0 ], [ "manip", 0.05, 0.2 ] ] + "limb_scores": [ [ "breathing", 1.0 ], [ "manip", 0.05, 0.2 ], [ "consume_liquid", 1.0 ], [ "consume_solid", 1.0 ] ] }, { "type": "sub_body_part", @@ -121,7 +121,7 @@ "hit_size": 0.5, "hit_difficulty": 1.15, "limb_types": [ [ "mouth", 1.0 ], [ "hand", 0.1 ] ], - "limb_scores": [ [ "breathing", 1.0 ], [ "manip", 0.05, 0.2 ] ], + "limb_scores": [ [ "breathing", 1.0 ], [ "manip", 0.05, 0.2 ], [ "consume_liquid", 0.5 ], [ "consume_solid", 2.0 ] ], "side": "both", "stylish_bonus": 2, "hot_morale_mod": 2, diff --git a/data/mods/Xedra_Evolved/npc/xe_liam_chat.json b/data/mods/Xedra_Evolved/npc/xe_liam_chat.json new file mode 100644 index 0000000000000..60cc5f1fb7c96 --- /dev/null +++ b/data/mods/Xedra_Evolved/npc/xe_liam_chat.json @@ -0,0 +1,66 @@ +[ + { + "type": "talk_topic", + "id": "TALK_FRIEND_Liam_CHAT", + "dynamic_line": [ + "Before things ended did you see any of the interviews with some of the remaining Wampanoag? They kept saying things about other races coming back to this planet. That's crazy, right?", + "A few nights after I got here, I saw lights in the woods off in the distance. I don't know why, but I ran back into the house turned off all the lights and closed the blinds. It was just so eerie!" + ], + "speaker_effect": { "effect": [ "morale_chat_activity", { "npc_add_effect": "asked_to_socialize", "duration": 7000 } ] }, + "responses": [ + { + "text": "We're always gonna be friends, right? Even with the apocalypse… changing us?", + "topic": "TALK_FRIEND_Liam_CHAT_Friends4ever" + }, + { "text": "What do you miss most about the internet?", "topic": "TALK_FRIEND_Liam_CHAT_Internet" }, + { + "text": "Now that we've got no responsibilities, is there anything you'd like to see or do?", + "topic": "TALK_FRIEND_Liam_CHAT_Goals" + }, + { + "text": "What do you think the rest of the world is like these days?", + "topic": "TALK_FRIEND_Liam_CHAT_World" + }, + { "text": "Do you miss any food from the old days?", "topic": "TALK_FRIEND_Liam_CHAT_Food" } + ] + }, + { + "type": "talk_topic", + "id": "TALK_FRIEND_Liam_CHAT_World", + "dynamic_line": [ + "There could be anything out there. Remember towards the end before the apocalypse? I remember tons of weird stuff I heard on the radio. Like, I heard out past Bunyan there were strange trees and species showing up in the deep woods, stuff no one had ever seen before. The Border Patrol was going in about 'species previously thought extinct' or something like that. Didn't make sense to me. Why the heck was the *Border Patrol* talking about *closing off forests*? Weird stuff. I guess that means I don't have a clue what's out there now.", + "I still can't decide if our leaders thought Canada was a threat or what? Why else did they militarize the border patrol up here just as bad it had been on the southern border for decades?", + "I remember talking to a friend coming back from Vegas a few years back and he mentioned Border Patrol had those big armored Bear Cub vehicles with a roadblock going into one of the canyons outside of Vegas. Hundreds of miles from any border. Weird stuff man, I wonder if it's all connected?" + ], + "responses": [ { "text": "(Continue chatting)", "topic": "TALK_DONE" } ] + }, + { + "type": "talk_topic", + "id": "TALK_Liam_Opinions", + "dynamic_line": "My opinion? Sure, my friend, hit me up, what's eating you?", + "responses": [ + { + "text": "Check this out, I found an address of some kind of central refugee management facility. Should we check it out? Maybe they'll have answers?", + "topic": "TALK_Liam_Opinions_MISSION_DRACO_FAE", + "condition": { "u_has_mission": "MISSION_DRACO_FAE" } + }, + { + "text": "You thinking what I'm thinking about this mystery dropoff for Smokes?", + "topic": "TALK_Liam_Opinions_MISSION_BRING_BOANN_JABBERWOCK_HEART", + "condition": { "u_has_mission": "MISSION_BRING_BOANN_JABBERWOCK_HEART" } + } + ] + }, + { + "type": "talk_topic", + "id": "TALK_Liam_Opinions_MISSION_DRACO_FAE", + "dynamic_line": "What does this story remind me of? Is it, Rip van Winkle? Didn't he join some party and come home a dozen years later?", + "responses": [ { "text": "Maybe we should avoid drinking anything there?", "topic": "TALK_Liam_Opinions" } ] + }, + { + "type": "talk_topic", + "id": "TALK_Liam_Opinions_MISSION_BRING_BOANN_JABBERWOCK_HEART", + "dynamic_line": "Is Lewis Carrol hiding behind a bush over there? Because if not, this sounds insane and insanely dangerous. But no one else has even given us a hint about a way off this world of the dead. Can we really pass this by?", + "responses": [ { "text": "It's you and me buddy, to infinity and beyond!", "topic": "TALK_Liam_Opinions" } ] + } +] diff --git a/doc/JSON_INFO.md b/doc/JSON_INFO.md index 07b6c5c69fc07..88aa5daad0e4a 100644 --- a/doc/JSON_INFO.md +++ b/doc/JSON_INFO.md @@ -1157,7 +1157,7 @@ An array of effects to add whenever the limb in question takes damage. Variables ``` ### Limb scores -Limb scores act as the basis of calculating the effect of limb encumbrance and damage on the abilities of characters. They are defined using the `"limb_score"` type: +Limb scores act as the basis of calculating the effect of limb encumbrance and damage on the abilities of characters. Most limb scores affect the character via `character_modifiers`, for further information see there. They are defined using the `"limb_score"` type: ```json { @@ -1178,6 +1178,8 @@ Here are the currently defined limb scores: | Limb score id | Description |------ |------ +| `consume_liquid` | Speed modifier when consuming liquids. +| `consume_solid` | Speed multiplier when consuming solids. | `manipulator_score` | Modifies aim speed, reload speed, thrown attack speed, ranged dispersion and crafting speed. The manipulator scores of each limb type are aggregated and the best limb group is chosen for checks. | `manipulator_max` | The upper limit of manipulator score the limb can contribute to. | `lifting_score` | Modifies melee attack stamina and move cost, as well as a number of STR checks. A sum above 0.5 qualifies for wielding two-handed weapons and similar checks. Arms below 0.1 lift score don't count as working for the purposes of melee combat. diff --git a/src/consumption.cpp b/src/consumption.cpp index 70a9341a4c9ad..9746b3931013f 100644 --- a/src/consumption.cpp +++ b/src/consumption.cpp @@ -77,6 +77,9 @@ static const bionic_id bio_faulty_grossfood( "bio_faulty_grossfood" ); static const bionic_id bio_syringe( "bio_syringe" ); static const bionic_id bio_taste_blocker( "bio_taste_blocker" ); +static const character_modifier_id character_modifier_liquid_consume_mod( "liquid_consume_mod" ); +static const character_modifier_id character_modifier_solid_consume_mod( "solid_consume_mod" ); + static const efftype_id effect_bloodworms( "bloodworms" ); static const efftype_id effect_brainworms( "brainworms" ); static const efftype_id effect_common_cold( "common_cold" ); @@ -1724,10 +1727,12 @@ time_duration Character::get_consume_time( const item &it ) const time = time_duration::from_seconds( volume / 5 ); //Eat 5 mL (1 teaspoon) per second consume_time_modifier = enchantment_cache->modify_value( enchant_vals::mod::CONSUME_TIME_MOD, consume_time_modifier ); + consume_time_modifier *= get_modifier( character_modifier_solid_consume_mod ); } else if( !eat_verb && comest_type == "DRINK" ) { time = time_duration::from_seconds( volume / 15 ); //Drink 15 mL (1 tablespoon) per second consume_time_modifier = enchantment_cache->modify_value( enchant_vals::mod::CONSUME_TIME_MOD, consume_time_modifier ); + consume_time_modifier *= get_modifier( character_modifier_liquid_consume_mod ); } else if( use_function const *fun = it.type->get_use( "heal" ) ) { time = time_duration::from_moves( dynamic_cast ( fun->get_actor_ptr() )->move_cost ); @@ -1765,6 +1770,9 @@ time_duration Character::get_consume_time( const item &it ) const 1 ) ); //Consume 15 mL (1 tablespoon) per second consume_time_modifier = enchantment_cache->modify_value( enchant_vals::mod::CONSUME_TIME_MOD, consume_time_modifier ); + consume_time_modifier *= it.made_of_from_type( phase_id::LIQUID ) ? get_modifier( + character_modifier_liquid_consume_mod ) : + consume_time_modifier *= get_modifier( character_modifier_solid_consume_mod ); } // Minimum consumption time, without mutations, is always 1 second. diff --git a/src/crafting.cpp b/src/crafting.cpp index 8c810b4567d84..c28703727a571 100644 --- a/src/crafting.cpp +++ b/src/crafting.cpp @@ -2130,7 +2130,10 @@ std::list Character::consume_items( map &m, const comp_selection