diff --git a/data/json/itemgroups/Locations_MapExtras/mansion.json b/data/json/itemgroups/Locations_MapExtras/mansion.json index 3bc8369e17a18..1ee65fe4e4d48 100644 --- a/data/json/itemgroups/Locations_MapExtras/mansion.json +++ b/data/json/itemgroups/Locations_MapExtras/mansion.json @@ -51,6 +51,12 @@ } ] }, + { + "id": "grave_contents", + "type": "item_group", + "subtype": "distribution", + "entries": [ { "group": "everyday_corpse", "prob": 85 }, { "group": "grave_cremains", "prob": 15 } ] + }, { "id": "everyday_corpse", "type": "item_group", diff --git a/data/json/itemgroups/books.json b/data/json/itemgroups/books.json index 7f17278299811..1fde78adabba2 100644 --- a/data/json/itemgroups/books.json +++ b/data/json/itemgroups/books.json @@ -315,7 +315,8 @@ { "item": "baking_book", "prob": 80 }, { "item": "fermenting_book", "prob": 8 }, { "item": "distilling_cookbook", "prob": 3 }, - { "item": "cookbook_bloodforgood", "prob": 2 } + { "item": "cookbook_bloodforgood", "prob": 2 }, + { "group": "memorial", "prob": 10 } ] }, { @@ -569,7 +570,8 @@ { "item": "vacuum_sealing", "prob": 15 }, { "item": "baking_book", "prob": 190 }, { "item": "book_pneumatics", "prob": 8 }, - { "item": "cookbook_bloodforgood", "prob": 50 } + { "item": "cookbook_bloodforgood", "prob": 50 }, + { "group": "memorial_mansion", "prob": 10 } ] }, { diff --git a/data/json/itemgroups/collections_domestic.json b/data/json/itemgroups/collections_domestic.json index 001497bfd5aaa..32192eccb62ca 100644 --- a/data/json/itemgroups/collections_domestic.json +++ b/data/json/itemgroups/collections_domestic.json @@ -280,6 +280,155 @@ [ "hairbrush", 5 ] ] }, + { + "type": "item_group", + "id": "memorial", + "subtype": "collection", + "entries": [ + { "item": "corpse_ash", "prob": 100, "charges-min": 1905, "charges-max": 3969, "container-item": "porcelain_urn" }, + { "item": "photo_album", "prob": 75 }, + { "item": "bouquet", "prob": 50 }, + { "item": "candle", "prob": 50, "charges-min": 1, "charges-max": 6 }, + { + "distribution": [ + { "group": "religious_books", "prob": 20 }, + { "item": "bead_necklace", "prob": 20 }, + { "item": "bead_bracelet", "prob": 20 }, + { "item": "holy_symbol", "prob": 20 }, + { "item": "candlestick", "prob": 20 } + ] + }, + { + "distribution": [ + { + "collection": [ + { "item": "american_flag", "prob": 70 }, + { "item": "beret", "prob": 33 }, + { "item": "service_medal", "prob": 50 }, + { "item": "dog_tag", "prob": 100 } + ], + "prob": 10 + }, + { + "collection": [ + { "item": "ceramic_mug", "prob": 50 }, + { "group": "beer", "prob": 50 }, + { "group": "liquor_and_spirits", "prob": 20 }, + { "group": "wines_worthy", "prob": 10 }, + { "item": "cigar", "prob": 20 }, + { "item": "hat_ball", "prob": 20 }, + { "group": "jewelry_accessories", "prob": 50 }, + { "group": "clothing_glasses", "prob": 50 }, + { "item": "foodperson_mask", "prob": 1, "charges": [ 0, 500 ] } + ], + "prob": 70 + }, + { + "collection": [ + { "item": "teddy", "prob": 50 }, + { "item": "hat_ball", "prob": 20 }, + { "item": "baseball", "prob": 20 }, + { "item": "roller_shoes_off", "prob": 10 }, + { "item": "gold_medal", "prob": 20 }, + { "item": "silver_medal", "prob": 20 }, + { "item": "bronze_medal", "prob": 20 }, + { "item": "story_book", "prob": 50 }, + { "item": "hairpin", "prob": 20 }, + { "item": "barrette", "prob": 20 }, + { "item": "newspaper_memorial", "prob": 20 } + ], + "prob": 5 + }, + { + "collection": [ + { "item": "dog_whistle", "prob": 50 }, + { "item": "dog_whistle_wood", "prob": 25 }, + { "item": "leather_harness_dog", "prob": 50 }, + { "item": "dogfood_dry", "prob": 50 }, + { "item": "bone", "prob": 50 }, + { "item": "dog_tag_dog", "prob": 100 } + ], + "prob": 15 + } + ] + } + ] + }, + { + "type": "item_group", + "id": "memorial_mansion", + "subtype": "collection", + "entries": [ + { "item": "corpse_ash", "prob": 100, "charges-min": 1905, "charges-max": 3969, "container-item": "crystal_urn" }, + { "item": "photo_album", "prob": 80 }, + { "item": "bouquet", "prob": 80 }, + { "item": "candlestick", "prob": 50, "charges-min": 1, "charges-max": 6 }, + { "group": "liquor_and_spirits", "prob": 60 }, + { "group": "wines_worthy", "prob": 50 }, + { "item": "cigar", "prob": 50 }, + { "group": "jewelry_accessories", "prob": 50 } + ] + }, + { + "type": "item_group", + "id": "grave_cremains", + "subtype": "collection", + "entries": [ + { "item": "corpse_ash", "prob": 100, "charges-min": 1905, "charges-max": 3969, "container-item": "porcelain_urn" }, + { "item": "bouquet", "prob": 100 }, + { + "distribution": [ + { "group": "religious_books", "prob": 25 }, + { "item": "bead_necklace", "prob": 25 }, + { "item": "bead_bracelet", "prob": 25 }, + { "item": "holy_symbol", "prob": 25 } + ] + }, + { + "distribution": [ + { + "collection": [ + { "item": "american_flag", "prob": 70 }, + { "item": "beret", "prob": 33 }, + { "item": "service_medal", "prob": 50 }, + { "item": "dog_tag", "prob": 100 } + ], + "prob": 20 + }, + { + "collection": [ + { "item": "ceramic_mug", "prob": 50 }, + { "group": "beer", "prob": 50 }, + { "group": "liquor_and_spirits", "prob": 20 }, + { "group": "wines_worthy", "prob": 10 }, + { "item": "cigar", "prob": 20 }, + { "item": "hat_ball", "prob": 20 }, + { "group": "jewelry_accessories", "prob": 50 }, + { "group": "clothing_glasses", "prob": 50 }, + { "item": "foodperson_mask", "prob": 1, "charges": [ 0, 500 ] } + ], + "prob": 70 + }, + { + "collection": [ + { "item": "teddy", "prob": 50 }, + { "item": "hat_ball", "prob": 20 }, + { "item": "baseball", "prob": 20 }, + { "item": "roller_shoes_off", "prob": 10 }, + { "item": "gold_medal", "prob": 20 }, + { "item": "silver_medal", "prob": 20 }, + { "item": "bronze_medal", "prob": 20 }, + { "item": "story_book", "prob": 50 }, + { "item": "hairpin", "prob": 20 }, + { "item": "barrette", "prob": 20 }, + { "item": "newspaper_memorial", "prob": 20 } + ], + "prob": 10 + } + ] + } + ] + }, { "type": "item_group", "id": "livingroom", @@ -474,7 +623,8 @@ { "item": "yukata", "prob": 1 }, { "item": "eclipse_glasses", "prob": 1 }, { "item": "reading_light", "prob": 9, "charges": [ 0, 50 ] }, - { "item": "balloon", "prob": 5 } + { "item": "balloon", "prob": 5 }, + { "group": "memorial", "prob": 3 } ] }, { diff --git a/data/json/items/armor/jewelry.json b/data/json/items/armor/jewelry.json index 2213381c66c6a..01b7dcc9f865c 100644 --- a/data/json/items/armor/jewelry.json +++ b/data/json/items/armor/jewelry.json @@ -939,6 +939,20 @@ "color": "yellow", "flags": [ "NO_WEAR_EFFECT" ] }, + { + "id": "service_medal", + "type": "ARMOR", + "name": { "str": "service medal" }, + "description": "A medal awarded to military personnel for heroism, wounds suffered in combat, or distinguished service.", + "weight": "50 g", + "volume": "25 ml", + "price": 10000, + "price_postapoc": 25, + "material": [ { "type": "gold", "portion": 1 }, { "type": "bronze", "portion": 4 } ], + "symbol": "[", + "color": "brown", + "flags": [ "NO_WEAR_EFFECT" ] + }, { "id": "gold_necklace", "type": "ARMOR", diff --git a/data/json/items/chemicals_and_resources.json b/data/json/items/chemicals_and_resources.json index f39d411e6d9d8..772b75b05e551 100644 --- a/data/json/items/chemicals_and_resources.json +++ b/data/json/items/chemicals_and_resources.json @@ -1366,6 +1366,23 @@ "ammo_type": "components", "count": 100 }, + { + "type": "AMMO", + "id": "corpse_ash", + "category": "chems", + "price": 0, + "price_postapoc": 0, + "name": { "str": "corpse ash", "str_pl": "corpse ashes" }, + "symbol": "=", + "looks_like": "f_ash", + "color": "light_gray", + "description": "The unburnt remains of a person or animal.", + "material": [ "powder_nonflam" ], + "volume": "104ml", + "weight": "1 g", + "ammo_type": "components", + "count": 100 + }, { "type": "COMESTIBLE", "id": "ether", diff --git a/data/json/items/generic.json b/data/json/items/generic.json index b41b1174f5e10..23378c5010ade 100644 --- a/data/json/items/generic.json +++ b/data/json/items/generic.json @@ -2361,6 +2361,49 @@ "price": 0, "price_postapoc": 0 }, + { + "type": "GENERIC", + "id": "bouquet", + "name": { "str_sp": "withered bouquet" }, + "description": "A mixed collection of flowers. Unfortunately, they have all withered with time.", + "//": "Estimated weight is between 1.5-2 lb. When withered, assuming 60% weight loss, gives us around 300 g.", + "weight": "300 g", + "color": "white", + "symbol": ",", + "material": [ { "type": "veggy", "portion": 4 }, { "type": "glass", "portion": 1 } ], + "//1": "A medium sized bouquet is roughly 13\" x 5.5\" x 5.5\", or roughly 6.4 L. When withered, I'm estimating a 30% shrinkage in volume, or 4.5 L.", + "volume": "4500 ml", + "price": 0, + "price_postapoc": 0 + }, + { + "type": "GENERIC", + "id": "dog_tag", + "name": { "str_sp": "dog tag" }, + "description": "An oval disk attached to a chain, worn by military personnel for identification.", + "weight": "5 g", + "color": "light_gray", + "symbol": "[", + "material": [ "steel" ], + "//": "dog tags are roughly 50mm x 28mm x 0.4mm, or 0.56 ml, but that's so small I needed to round up to 1 ml", + "volume": "1 ml", + "price": 0, + "price_postapoc": 0 + }, + { + "type": "GENERIC", + "id": "dog_tag_dog", + "name": { "str_sp": "dog tag" }, + "description": "An identification tag for a pet, engraved with their name and their owner's address and phone number.", + "weight": "1 g", + "color": "green", + "symbol": "[", + "material": [ "plastic" ], + "//": "dog tags are roughly 50mm x 28mm x 0.4mm, or 0.56 ml, but that's so small I needed to round up to 1 ml", + "volume": "1 ml", + "price": 0, + "price_postapoc": 0 + }, { "type": "GENERIC", "id": "clay_lump", diff --git a/data/json/items/newspaper.json b/data/json/items/newspaper.json index a480f80a1115f..046f5a3732c30 100644 --- a/data/json/items/newspaper.json +++ b/data/json/items/newspaper.json @@ -265,6 +265,20 @@ "weight": "3 g", "volume": "1 ml" }, + { + "type": "GENERIC", + "id": "newspaper_memorial", + "category": "books", + "symbol": ",", + "color": "white", + "name": { "str": "newspaper page" }, + "description": "A snippet from a newspaper, celebrating the achievements of the one enshrined.", + "price": 0, + "price_postapoc": 0, + "material": [ "paper" ], + "weight": "1 g", + "volume": "1 ml" + }, { "type": "GENERIC", "id": "newest_newspaper", diff --git a/data/json/items/tool/misc.json b/data/json/items/tool/misc.json index 740c03b1709aa..a41a7c98ae597 100644 --- a/data/json/items/tool/misc.json +++ b/data/json/items/tool/misc.json @@ -68,6 +68,29 @@ }, "explode_in_fire": true }, + { + "id": "clay_urn", + "type": "TOOL", + "name": { "str": "clay urn" }, + "description": "A clay container for storing cremated ashes.", + "weight": "1600 g", + "volume": "4280 ml", + "price": 5000, + "price_postapoc": 50, + "material": [ "clay" ], + "symbol": ")", + "color": "brown", + "pocket_data": [ + { + "pocket_type": "CONTAINER", + "watertight": true, + "rigid": true, + "max_contains_volume": "4100 ml", + "max_contains_weight": "4 kg" + } + ], + "qualities": [ [ "BOIL", 2 ], [ "CONTAIN", 1 ] ] + }, { "id": "cow_bell", "type": "TOOL", @@ -84,6 +107,29 @@ "color": "brown", "use_action": [ "BELL" ] }, + { + "id": "crystal_urn", + "type": "TOOL", + "name": { "str": "crystal urn" }, + "description": "An exquisite, translucent container for cremated ashes, decorated with floral patterns.", + "weight": "1400 g", + "volume": "4280 ml", + "price": 125000, + "price_postapoc": 500, + "material": [ "crystal" ], + "symbol": ")", + "color": "magenta", + "pocket_data": [ + { + "pocket_type": "CONTAINER", + "watertight": true, + "rigid": true, + "max_contains_volume": "4100 ml", + "max_contains_weight": "4 kg" + } + ], + "qualities": [ [ "BOIL", 2 ], [ "CONTAIN", 1 ] ] + }, { "id": "e_tool", "type": "TOOL", @@ -417,6 +463,29 @@ "color": "light_gray", "flags": [ "WATCH", "FANCY" ] }, + { + "id": "porcelain_urn", + "type": "TOOL", + "name": { "str": "porcelain urn" }, + "description": "A container for holding the remains of a loved one. Its prior owners must have kept good care of it, as you can see your face reflected clearly upon its surface.", + "weight": "1600 g", + "volume": "4280 ml", + "price": 35000, + "price_postapoc": 250, + "material": [ "porcelain" ], + "symbol": ")", + "color": "white", + "pocket_data": [ + { + "pocket_type": "CONTAINER", + "watertight": true, + "rigid": true, + "max_contains_volume": "4100 ml", + "max_contains_weight": "4 kg" + } + ], + "qualities": [ [ "BOIL", 2 ], [ "CONTAIN", 1 ] ] + }, { "id": "rollmat", "type": "TOOL", diff --git a/data/json/mapgen/map_extras/grave.json b/data/json/mapgen/map_extras/grave.json index 1260ea39419c4..b0f23a4f299ee 100644 --- a/data/json/mapgen/map_extras/grave.json +++ b/data/json/mapgen/map_extras/grave.json @@ -6,7 +6,7 @@ "object": { "mapgensize": [ 2, 2 ], "place_terrain": [ { "ter": "t_grave_new", "x": 0, "y": 1 } ], - "place_loot": [ { "group": "everyday_corpse", "x": 0, "y": 1 } ], + "place_loot": [ { "group": "grave_contents", "x": 0, "y": 1 } ], "place_signs": [ { "snippet": "grave_label", "x": 0, "y": 0 } ], "flags": [ "ERASE_ALL_BEFORE_PLACING_TERRAIN" ] } diff --git a/data/json/materials.json b/data/json/materials.json index 9b21fa48e26bd..3d48047fef74a 100644 --- a/data/json/materials.json +++ b/data/json/materials.json @@ -248,7 +248,8 @@ { "fuel": 0, "smoke": 0, "burn": 0 }, { "fuel": 0, "smoke": 1, "burn": 1, "volume_per_turn": "250 ml" }, { "fuel": 1, "smoke": 1, "burn": 2 } - ] + ], + "burn_products": [ [ "corpse_ash", 0.035 ] ] }, { "type": "material", @@ -304,7 +305,8 @@ "chip_resist": 15, "dmg_adj": [ "scratched", "cut", "cracked", "shattered" ], "bash_dmg_verb": "dented", - "cut_dmg_verb": "gouged" + "cut_dmg_verb": "gouged", + "burn_products": [ [ "corpse_ash", 0.035 ] ] }, { "type": "material", @@ -462,7 +464,8 @@ { "fuel": 0, "smoke": 1, "burn": 1, "volume_per_turn": "1250 ml" }, { "fuel": 1, "smoke": 3, "burn": 1 }, { "fuel": 1, "smoke": 5, "burn": 4 } - ] + ], + "burn_products": [ [ "corpse_ash", 0.035 ] ] }, { "type": "material", @@ -484,7 +487,8 @@ { "fuel": 0, "smoke": 3, "burn": 2, "volume_per_turn": "1250 ml" }, { "fuel": 1, "smoke": 5, "burn": 4 }, { "fuel": 1, "smoke": 7, "burn": 6 } - ] + ], + "burn_products": [ [ "corpse_ash", 0.035 ] ] }, { "type": "material", @@ -501,7 +505,8 @@ { "fuel": 0, "smoke": 2, "burn": 1, "volume_per_turn": "1250 ml" }, { "fuel": 1, "smoke": 4, "burn": 2 }, { "fuel": 1, "smoke": 6, "burn": 5 } - ] + ], + "burn_products": [ [ "corpse_ash", 0.035 ] ] }, { "type": "material", @@ -548,6 +553,24 @@ "cut_dmg_verb": "cut", "burn_products": [ [ "ceramic_shard", 1 ] ] }, + { + "type": "material", + "id": "porcelain", + "name": "Porcelain", + "density": 1.6, + "specific_heat_liquid": 1, + "specific_heat_solid": 1, + "latent_heat": 333, + "bash_resist": 2, + "cut_resist": 3, + "bullet_resist": 2, + "acid_resist": 6, + "fire_resist": 3, + "chip_resist": 6, + "dmg_adj": [ "chipped", "scratched", "cracked", "shattered" ], + "bash_dmg_verb": "cracked", + "cut_dmg_verb": "cut" + }, { "type": "material", "id": "copper", @@ -683,7 +706,8 @@ { "fuel": 1, "smoke": 1, "burn": 1, "volume_per_turn": "2500 ml" }, { "fuel": 2, "smoke": 3, "burn": 2, "volume_per_turn": "10000 ml" }, { "fuel": 3, "smoke": 10, "burn": 3 } - ] + ], + "burn_products": [ [ "corpse_ash", 0.035 ] ] }, { "type": "material", @@ -782,7 +806,8 @@ { "fuel": 1, "smoke": 3, "burn": 1, "volume_per_turn": "1250 ml" }, { "fuel": 1, "smoke": 5, "burn": 2 }, { "fuel": 1, "smoke": 10, "burn": 4 } - ] + ], + "burn_products": [ [ "corpse_ash", 0.035 ] ] }, { "type": "material", @@ -861,6 +886,31 @@ ], "burn_products": [ [ "glass_shard", 1 ] ] }, + { + "type": "material", + "id": "crystal", + "name": "Crystal", + "//": "Specific heat and latent heat copied from glass", + "density": 3.1, + "specific_heat_liquid": 0.2, + "specific_heat_solid": 0.2, + "latent_heat": 100, + "bash_resist": 3, + "cut_resist": 4, + "bullet_resist": 3, + "acid_resist": 10, + "fire_resist": 3, + "chip_resist": 0, + "dmg_adj": [ "scratched", "cut", "cracked", "shattered" ], + "bash_dmg_verb": "cracked", + "cut_dmg_verb": "scratched", + "burn_data": [ + { "fuel": 0, "smoke": 0, "burn": 0 }, + { "fuel": 0, "smoke": 0, "burn": 0 }, + { "fuel": 0, "smoke": 0, "burn": 1000, "volume_per_turn": "5000 ml", "//": "More like shattering than melting" } + ], + "burn_products": [ [ "glass_shard", 1 ] ] + }, { "type": "material", "id": "gold", @@ -1065,7 +1115,8 @@ { "fuel": 1, "smoke": 1, "burn": 1, "volume_per_turn": "2500 ml" }, { "fuel": 2, "smoke": 3, "burn": 2, "volume_per_turn": "10000 ml" }, { "fuel": 3, "smoke": 10, "burn": 3 } - ] + ], + "burn_products": [ [ "corpse_ash", 0.035 ] ] }, { "type": "material", @@ -1230,7 +1281,8 @@ { "fuel": 0, "smoke": 0, "burn": 0 }, { "fuel": 1, "smoke": 3, "burn": 2, "volume_per_turn": "500 ml" }, { "fuel": 1, "smoke": 3, "burn": 2 } - ] + ], + "burn_products": [ [ "corpse_ash", 0.035 ] ] }, { "type": "material", @@ -1256,7 +1308,8 @@ { "fuel": 0, "smoke": 1, "burn": 1 }, { "fuel": 1, "smoke": 3, "burn": 2, "volume_per_turn": "500 ml" }, { "fuel": 1, "smoke": 3, "burn": 3 } - ] + ], + "burn_products": [ [ "corpse_ash", 0.035 ] ] }, { "type": "material", @@ -2470,7 +2523,8 @@ { "fuel": 1, "smoke": 1, "burn": 1, "volume_per_turn": "1250 ml" }, { "fuel": 1, "smoke": 1, "burn": 2 }, { "fuel": 1, "smoke": 1, "burn": 5 } - ] + ], + "burn_products": [ [ "corpse_ash", 0.035 ] ] }, { "type": "material", diff --git a/data/json/recipes/tools/containers.json b/data/json/recipes/tools/containers.json index 95859d2784fcf..d4c9c69aaebb0 100644 --- a/data/json/recipes/tools/containers.json +++ b/data/json/recipes/tools/containers.json @@ -650,6 +650,21 @@ "using": [ [ "glazing", 1 ], [ "earthenware_firing", 40 ] ], "components": [ [ [ "water", 1 ], [ "water_clean", 1 ] ], [ [ "clay_lump", 3 ] ] ] }, + { + "type": "recipe", + "activity_level": "fake", + "result": "clay_urn", + "category": "CC_OTHER", + "subcategory": "CSC_OTHER_TOOLS", + "skill_used": "fabrication", + "skills_required": [ "survival", 1 ], + "difficulty": 2, + "time": "90 m", + "autolearn": true, + "proficiencies": [ { "proficiency": "prof_pottery" }, { "proficiency": "prof_pottery_glazing" } ], + "using": [ [ "earthenware_firing", 120 ] ], + "components": [ [ [ "water", 1 ], [ "water_clean", 1 ] ], [ [ "clay_lump", 8 ] ] ] + }, { "type": "recipe", "activity_level": "LIGHT_EXERCISE", diff --git a/src/iuse_actor.h b/src/iuse_actor.h index 3efb3da2c0608..094902d2aaca4 100644 --- a/src/iuse_actor.h +++ b/src/iuse_actor.h @@ -543,6 +543,8 @@ class inscribe_actor : public iuse_actor // Materials it can write on std::set material_whitelist = { material_id( "wood" ), + material_id( "clay" ), + material_id( "porcelain" ), material_id( "plastic" ), material_id( "glass" ), material_id( "chitin" ),