diff --git a/data/json/furniture.json b/data/json/furniture.json index 5800112ca11e3..8beeb7963a65d 100644 --- a/data/json/furniture.json +++ b/data/json/furniture.json @@ -1815,6 +1815,7 @@ "max_volume": 1000, "flags": [ "TRANSPARENT", "CONTAINER", "SEALED", "PLACE_ITEM", "MOUNTABLE", "MINEABLE" ], "open": "f_safe_o", + "examine_action": "open_safe", "bash": { "str_min": 40, "str_max": 200, diff --git a/data/json/items/comestibles/offal_dishes.json b/data/json/items/comestibles/offal_dishes.json index 271bacd350d67..3d28992f2a542 100644 --- a/data/json/items/comestibles/offal_dishes.json +++ b/data/json/items/comestibles/offal_dishes.json @@ -77,7 +77,7 @@ "description": "Also known as 'Umble' pie, made with chopped organ meats. Not half bad, and really good for you!", "price": 1350, "material": [ "wheat", "flesh" ], - "volume": 1, + "volume": "750ml", "weight": 249, "charges": 3, "flags": [ "EATEN_HOT" ], diff --git a/data/json/items/generic.json b/data/json/items/generic.json index 7f0de7cbbf5a5..c705371b11f98 100644 --- a/data/json/items/generic.json +++ b/data/json/items/generic.json @@ -1141,6 +1141,20 @@ "use_action": { "type": "firestarter", "moves": 1000, "moves_slow": 30000, "need_sunlight": true }, "flags": [ "FIRESTARTER" ] }, + { + "type": "GENERIC", + "id": "lens_small", + "symbol": ".", + "color": "light_cyan", + "name": "small high-quality lens", + "name_plural": "small high-quality lenses", + "category": "spare_parts", + "description": "A small high-quality lens, useful for focusing or diffusing light. Might be useful for crafting.", + "price": 6000, + "material": "glass", + "weight": 170, + "volume": 0 + }, { "type": "GENERIC", "id": "glass_tinted", diff --git a/data/json/mapgen/bank.json b/data/json/mapgen/bank.json index a9c12c83d994a..5739d438df3cd 100644 --- a/data/json/mapgen/bank.json +++ b/data/json/mapgen/bank.json @@ -81,8 +81,9 @@ { "action": "alarm" } ] } + }, + "place_monster": [ { "monster": "mon_secubot", "x": [ 7, 18 ], "y": [ 7, 18 ], "chance": 30, "repeat": 4 } ] } - } }, { "type": "mapgen", diff --git a/data/json/mapgen/mansion.json b/data/json/mapgen/mansion.json index a286cb8704319..bd79f354cda60 100644 --- a/data/json/mapgen/mansion.json +++ b/data/json/mapgen/mansion.json @@ -38,7 +38,7 @@ "K": { "item": "crate_stack", "chance": 100 }, "r": { "item": "tool_common_stack", "chance": 100 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 17, 21 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 17, 21 ], "density": 0.1 } ] } }, { @@ -84,7 +84,7 @@ "t": { "item": "table_foyer", "chance": 40 }, "z": { "item": "jackets", "chance": 40 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.1 } ] } }, { @@ -128,7 +128,7 @@ "c": { "item": "wetbar_stack", "chance": 100 }, "{": { "item": "suit_of_armor", "chance": 100 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 17, 21 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 17, 21 ], "density": 0.15 } ] } }, { @@ -174,7 +174,7 @@ "m": { "item": "cleaning", "chance": 45 }, "r": { "item": "wetbar_stack", "chance": 100 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 14, 21 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 14, 21 ], "density": 0.1 } ] } }, { @@ -218,7 +218,7 @@ "!": { "item": "mail", "chance": 30, "repeat": [ 2, 5 ] }, "{": { "item": "suit_of_armor", "chance": 100 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.1 } ] } }, { @@ -346,7 +346,7 @@ "?": { "item": "fireplace_fill", "chance": 30 }, "c": { "item": "wetbar_counter", "chance": 20 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.1 } ] } }, { @@ -434,7 +434,7 @@ "m": { "item": "tool_common_stack", "chance": 100 }, "r": { "item": "sewing_room", "chance": 40 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 12 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 12 ], "density": 0.1 } ] } }, { @@ -487,7 +487,7 @@ "v": { "item": "a_television", "chance": 100 }, "z": { "item": "dresser_stack", "chance": 100 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.1 } ] } }, { @@ -539,7 +539,7 @@ "v": { "item": "a_television", "chance": 100 }, "z": { "item": "dresser_stack", "chance": 100 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 11 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 11 ], "density": 0.1 } ] } }, { @@ -587,7 +587,7 @@ "r": { "item": "mansion_ammo", "chance": 40 }, "v": { "item": "a_television", "chance": 100 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 12 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 12 ], "density": 0.1 } ] } }, { @@ -648,7 +648,7 @@ "z": { "item": "dresser_stack", "chance": 100 } }, "place_loot": [ { "group": "corpse_mansion", "x": [ 10, 12 ], "y": [ 5, 7 ], "chance": 50, "repeat": [ 0, 2 ] } ], - "place_monsters": [ { "monster": "GROUP_PANICROOM", "x": 11, "y": 6, "chance": 100 } ] + "place_monsters": [ { "monster": "GROUP_PANICROOM", "x": 11, "y": 6, "chance": 75, "repeat": [ 1, 5 ] } ] } }, { @@ -699,7 +699,7 @@ "v": { "item": "a_television", "chance": 100 }, "z": { "item": "dresser_stack", "chance": 100 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 11 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 11 ], "density": 0.1 } ] } }, { @@ -751,7 +751,7 @@ "r": { "item": "pantry", "chance": 40 }, "t": { "item": "table_wine", "chance": 45 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 12 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 12 ], "density": 0.1 } ] } }, { @@ -806,7 +806,7 @@ "c": { "item": "table_sideboard", "chance": 35 }, "t": { "item": "table_livingroom", "chance": 35 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.1 } ] } }, { @@ -903,7 +903,7 @@ "r": { "item": "cleaning", "chance": 40 }, "t": { "item": "voyer", "chance": 40 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 14 ], "y": [ 2, 9 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 14 ], "y": [ 2, 9 ], "density": 0.1 } ] } }, { @@ -953,7 +953,7 @@ "r": { "item": "office", "chance": 35 }, "t": { "item": "table_livingroom", "chance": 30 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.1 } ] } }, { @@ -1010,7 +1010,7 @@ "t": { "item": "nightstand", "chance": 35 }, "z": { "item": "dresser_stack", "chance": 100 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 4, 21 ], "y": [ 2, 9 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 4, 21 ], "y": [ 2, 9 ], "density": 0.1 } ] } }, { @@ -1065,7 +1065,7 @@ "r": { "item": "tool_common_stack", "chance": 100 }, "v": { "item": "a_television", "chance": 100 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 12 ], "density": 0.08 } ], + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 12 ], "density": 0.1 } ], "place_vehicles": [ { "vehicle": "laundry_cart", "x": [ 14, 15 ], "y": [ 0, 6 ], "chance": 50 } ] } }, @@ -1122,7 +1122,7 @@ "t": { "item": "nightstand", "chance": 35 }, "z": { "item": "dresser_stack", "chance": 100 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.1 } ] } }, { @@ -1179,7 +1179,7 @@ "t": { "item": "nightstand", "chance": 45 }, "z": { "item": "dresser_servant", "chance": 45 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 7 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 7 ], "density": 0.1 } ] } }, { @@ -1228,7 +1228,7 @@ "T": { "item": "snacks_fancy", "chance": 35 }, "d": { "item": "mansion_ammo", "chance": 40 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 12 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 12 ], "density": 0.1 } ] } }, { @@ -1280,7 +1280,7 @@ "t": { "item": "table_card", "chance": 35 }, "{": { "item": "suit_of_armor", "chance": 100 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.1 } ] } }, { @@ -1329,7 +1329,7 @@ "V": { "item": "a_television", "chance": 100 }, "t": { "item": "table_foyer", "chance": 30 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 8 ], "y": [ 2, 11 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 8 ], "y": [ 2, 11 ], "density": 0.1 } ] } }, { @@ -1416,7 +1416,7 @@ "n": { "item": "garden_shed", "chance": 40 }, "t": { "item": "snacks_fancy", "chance": 20 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.1 } ] } }, { @@ -1510,7 +1510,7 @@ "v": { "item": "a_television", "chance": 100 }, "z": { "item": "dresser_shabby", "chance": 100 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.1 } ] } }, { @@ -1559,7 +1559,7 @@ "m": { "item": "cleaning", "chance": 40 }, "t": { "item": "table_ballroom", "chance": 35 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.1 } ] } }, { @@ -1651,7 +1651,7 @@ "v": { "item": "a_television", "chance": 100 }, "{": { "item": "suit_of_armor", "chance": 100 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.1 } ] } }, { @@ -1707,7 +1707,7 @@ "m": { "item": "cleaning", "chance": 35 }, "r": { "item": "sports", "chance": 35 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.1 } ] } }, { @@ -1793,7 +1793,7 @@ "Y": { "item": "softdrugs", "chance": 20 }, "r": { "item": "crate_stack", "chance": 100 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 8 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 8 ], "density": 0.1 } ] } }, { @@ -1843,7 +1843,7 @@ "m": { "item": "garden_shed", "chance": 40 }, "r": { "item": "cleaning", "chance": 40 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.1 } ] } }, { @@ -1886,7 +1886,7 @@ ".": { "item": "clutter_mansion" }, "t": { "item": "table_livingroom", "chance": 40 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 7 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 7 ], "density": 0.1 } ] } }, { @@ -1975,7 +1975,7 @@ "=": { "item": "pool_side", "chance": 2 }, "C": { "item": "softdrugs", "chance": 30 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.1 } ] } }, { @@ -2022,7 +2022,7 @@ "t": { "item": "snacks_fancy", "chance": 30 } }, "place_loot": [ { "item": "lawn_dart", "x": [ 11, 14 ], "y": [ 4, 6 ], "chance": 40, "repeat": [ 1, 2 ] } ], - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 9, 21 ], "y": [ 17, 21 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 9, 21 ], "y": [ 17, 21 ], "density": 0.1 } ] } }, { @@ -2067,7 +2067,7 @@ "q": { "item": "medieval", "chance": 25 }, "r": { "item": "pantry", "chance": 30 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 8, 21 ], "y": [ 8, 21 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 8, 21 ], "y": [ 8, 21 ], "density": 0.1 } ] } }, { @@ -2118,7 +2118,7 @@ "v": { "item": "a_television", "chance": 100 }, "z": { "item": "jackets", "chance": 40 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.1 } ] } }, { @@ -2171,7 +2171,7 @@ "t": { "item": "nightstand", "chance": 40 }, "z": { "item": "dresser_stack", "chance": 100 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 9, 21 ], "y": [ 9, 21 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 9, 21 ], "y": [ 9, 21 ], "density": 0.1 } ] } }, { @@ -2214,7 +2214,7 @@ "d": { "item": "office", "chance": 10 }, "v": { "item": "a_television", "chance": 100 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 8, 21 ], "y": [ 8, 21 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 8, 21 ], "y": [ 8, 21 ], "density": 0.1 } ] } }, { @@ -2262,7 +2262,7 @@ "l": { "item": "mansion_bookcase", "chance": 100 }, "t": { "item": "table_livingroom", "chance": 30 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.1 } ] } }, { @@ -2308,7 +2308,7 @@ "d": { "item": "mansion_guns", "chance": 100 }, "l": { "item": "mansion_bookcase", "chance": 100 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 15, 21 ], "y": [ 9, 21 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 15, 21 ], "y": [ 9, 21 ], "density": 0.1 } ] } }, { @@ -2357,7 +2357,7 @@ "m": { "item": "plumber_gear", "chance": 30 }, "r": { "item": "tool_common_stack", "chance": 100 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 13, 21 ], "y": [ 7, 21 ], "density": 0.08 } ], + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 13, 21 ], "y": [ 7, 21 ], "density": 0.1 } ], "place_vehicles": [ { "vehicle": "laundry_cart", "x": [ 13, 18 ], "y": [ 8, 9 ], "chance": 50 } ] } }, @@ -2413,7 +2413,7 @@ "t": { "item": "nightstand", "chance": 35 }, "z": { "item": "dresser_stack", "chance": 100 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.1 } ] } }, { @@ -2458,7 +2458,7 @@ "b": { "item": "bed", "chance": 30 }, "z": { "item": "dresser_servant", "chance": 45 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 18, 21 ], "y": [ 8, 21 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 18, 21 ], "y": [ 8, 21 ], "density": 0.1 } ] } }, { @@ -2507,7 +2507,7 @@ "r": { "item": "pantry", "chance": 35 }, "t": { "item": "table_wine", "chance": 35 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 11, 21 ], "y": [ 8, 21 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 11, 21 ], "y": [ 8, 21 ], "density": 0.1 } ] } }, { @@ -2560,7 +2560,7 @@ "c": { "item": "table_sideboard", "chance": 40 }, "t": { "item": "dining", "chance": 40 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.1 } ] } }, { @@ -2607,7 +2607,7 @@ "t": { "item": "nightstand", "chance": 40 }, "z": { "item": "dresser_stack", "chance": 100 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 8, 21 ], "y": [ 12, 21 ], "density": 0.08 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 8, 21 ], "y": [ 12, 21 ], "density": 0.1 } ] } } ] diff --git a/data/json/mapgen/police_station.json b/data/json/mapgen/police_station.json new file mode 100644 index 0000000000000..8b522d7f768bb --- /dev/null +++ b/data/json/mapgen/police_station.json @@ -0,0 +1,226 @@ +[ + { + "type": "mapgen", + "method": "json", + "om_terrain": [ "police" ], + "weight": 100, + "object": { + "rows": [ + "________________________", + "________________________", + "________________________", + "|www**|--ww---ww---ww--|", + "|.....|................|", + "|.....*...............6|", + "|..xxx|---|---|---|--=-|", + "|...C.|bbb|bbb|bbb|....|", + "|-+---|...|...|...|LLLL|", + "|.....|#*#|#*#|#*#|----|", + "|5.....................|", + "|-=-|..|+-|-+|-+--|-+--|", + "|..1|..|.S|S.|t..c|....|", + "|..1|..|.t|t.|...c|Ccc.|", + "|..1|..|+-|-+|...c|.cc.|", + "|lll|..|.&|&.|cccc|.C..|", + "|----**----------------|", + ",,,,,,,,,,,,,,,,,,,,,,,,", + ",,,,,,,,,,,,,,,,,,,,,,,,", + ",,,,,,,,,,,,,,,,,,,,,,,,", + ",,,,,,,,,,,,,,,,,,,,,,,,", + ",,,,,,,,,,,,,,,,,,,,,,,,", + ",,,,,,,,,,,,,,,,,,,,,,,,", + ",,,,,,,,,,,,,,,,,,,,,,,," + ], + "terrain": { + "-": "t_wall", + "|": "t_wall", + ".": "t_floor", + "&": "t_floor", + "1": "t_floor", + "5": "t_floor", + "6": "t_floor", + "b": "t_floor", + "c": "t_floor", + "t": "t_floor", + "C": "t_floor", + "l": "t_floor", + "x": "t_floor", + "L": "t_floor", + "S": "t_floor", + "_": "t_sidewalk", + ",": "t_pavement", + "*": "t_door_locked", + "+": "t_door_c", + "=": "t_door_metal_locked", + "w": "t_window", + "#": "t_bars" + }, + "furniture": { + "c": "f_counter", + "x": "f_counter", + "1": "f_locker", + "l": "f_locker", + "L": "f_locker", + "C": "f_chair", + "S": "f_sink", + "t": "f_trashcan", + "b": "f_bench" + }, + "items": { + ".": { "item": "badge_deputy", "chance": 5 }, + "t": { "item": "trash_cart", "chance": 50 }, + "c": { "item": "kitchen", "chance": 40 }, + "1": { "item": "cop_gear", "chance": 70 }, + "l": { "item": "cop_armory", "chance": 70 }, + "L": { "item": "cop_evidence", "chance": 60 } + }, + "toilets": { "&": { } }, + "computers": { + "5": { + "name": "PolCom OS v1.47 - Supply Room Access", + "security": 3, + "options": [ { "name": "Unlock Supply Room", "action": "unlock" } ], + "failures": [ { "action": "shutdown" }, { "action": "alarm" }, { "action": "manhacks" } ] + }, + "6": { + "name": "PolCom OS v1.47 - Evidence Locker Access", + "security": 3, + "options": [ { "name": "Unlock Evidence Locker", "action": "unlock" } ], + "failures": [ { "action": "shutdown" }, { "action": "alarm" }, { "action": "manhacks" } ] + } + }, + "place_monsters": [ { "monster": "GROUP_POLICE", "x": [ 1, 22 ], "y": [ 0, 23 ], "repeat": 4 } ] + } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": [ "police" ], + "weight": 100, + "object": { + "rows": [ + "___________________,,,,,", + "|-----|-w--w--w-*-|,,,,,", + "|&+..S|p..bbb.....|,,,,,", + "|--...+........ccc|,,,,,", + "|&+..t|.........Ct|,,,,,", + "|-------|*|---|---|,,,,,", + "|bbb|bbb|.|bbb|bbb|,,,,,", + "|...|...|.|...|...|,,,,,", + "|#*#|#*#|.|#*#|#*#|,,,,,", + "|.................|,,,,,", + "|--------*--------|,,,,,", + "|llll|5......+...$|,,,,,", + "|....=..|----|----|%%%%^", + "|1111|..|tccf|,,,,,,,,,^", + "|----|..|C...|,,,,,,,,,^", + "|....|..|T..Y|,,,,,,,,,^", + "|CD..|..|C..Y|,,,,,,,,,^", + "|!D-0|..|--+-|,,,,),,,,^", + "|--|.........*,,,,),,,,^", + "|6...|-0-|-0-|,,,,),,,,^", + "|-=--|...|...|,,,,),,,,^", + "|....|DD.|.DD|,,,,),,,,^", + "|LLLL|C..|.CO|,,,,),,,,^", + "|----|---|---|^^^^^^^^^^" + ], + "terrain": { + "-": "t_brick_wall", + "|": "t_brick_wall", + ".": "t_floor", + "&": "t_floor", + "!": "t_floor", + "$": "t_floor", + "1": "t_floor", + "5": "t_floor", + "6": "t_floor", + "b": "t_floor", + "c": "t_floor", + "t": "t_floor", + "C": "t_floor", + "l": "t_floor", + "f": "t_floor", + "x": "t_floor", + "p": "t_floor", + "L": "t_floor", + "O": "t_floor", + "T": "t_floor", + "D": "t_floor", + "S": "t_floor", + "Y": "t_floor", + "_": "t_sidewalk", + ",": "t_pavement", + ")": "t_pavement_y", + "^": "t_chainfence", + "%": "t_chaingate_o", + "*": "t_door_locked", + "+": "t_door_c", + "=": "t_door_metal_locked", + "0": "t_door_glass_frosted_c", + "w": "t_window", + "#": "t_bars" + }, + "furniture": { + "c": "f_counter", + "x": "f_counter", + "!": "f_safe_l", + "$": "f_locker", + "1": "f_locker", + "l": "f_locker", + "L": "f_locker", + "C": "f_chair", + "T": "f_table", + "D": "f_desk", + "O": "f_desk", + "Y": "f_sofa", + "f": "f_fridge", + "S": "f_sink", + "t": "f_trashcan", + "b": "f_bench", + "p": "f_indoor_plant" + }, + "items": { + ".": { "item": "badge_deputy", "chance": 2 }, + "$": { "item": "cleaning", "chance": 50 }, + "!": { "item": "alcohol_bottled_canned", "chance": 95 }, + "t": { "item": "trash_cart", "chance": 50 }, + "1": { "item": "cop_gear", "chance": 70 }, + "l": { "item": "cop_armory", "chance": 70 }, + "L": { "item": "cop_evidence", "chance": 60 }, + "D": { "item": "office", "chance": 60 }, + "T": { "item": "dining", "chance": 60 }, + "Y": { "item": "magazines", "chance": 80 }, + "O": { "item": "office_breakroom", "chance": 70 } + }, + "toilets": { "&": { } }, + "computers": { + "5": { + "name": "PolCom OS v1.47 - Supply Room Access", + "security": 3, + "options": [ { "name": "Unlock Supply Room", "action": "unlock" } ], + "failures": [ { "action": "shutdown" }, { "action": "alarm" }, { "action": "manhacks" } ] + }, + "6": { + "name": "PolCom OS v1.47 - Evidence Locker Access", + "security": 3, + "options": [ { "name": "Unlock Evidence Locker", "action": "unlock" } ], + "failures": [ { "action": "shutdown" }, { "action": "alarm" }, { "action": "manhacks" } ] + } + }, + "place_loot": [ + { "group": "kitchen", "x": 11, "y": 13, "chance": 70, "repeat": [ 1, 3 ] }, + { "group": "fridge", "x": 12, "y": 13, "chance": 70, "repeat": [ 1, 3 ] }, + { "group": "office", "x": [ 15, 16 ], "y": 3, "chance": 70, "repeat": [ 1, 3 ] }, + { "item": "microwave", "x": 10, "y": 13, "chance": 85 }, + { "item": "laptop", "x": 17, "y": 3, "chance": 85 } + ], + "place_monsters": [ { "monster": "GROUP_POLICE", "x": [ 1, 22 ], "y": [ 0, 23 ], "repeat": 4 } ], + "place_vehicles": [ { "chance": 30, "fuel": 15, "vehicle": "policecar", "x": 20, "y": 19, "rotation": 270 } ] + } + }, + { + "type": "item_group", + "id": "badge_deputy", + "items": [ [ "badge_deputy", 100 ] ] + } +] diff --git a/data/json/monstergroups.json b/data/json/monstergroups.json index 121113fab8278..ea8d8b2b74e2f 100644 --- a/data/json/monstergroups.json +++ b/data/json/monstergroups.json @@ -1628,10 +1628,23 @@ "type": "monstergroup", "default": "mon_zombie", "monsters": [ - { "monster": "mon_zombie", "freq": 500, "cost_multiplier": 2, "pack_size": [ 2, 3 ] }, - { "monster": "mon_zombie_crawler", "freq": 300, "cost_multiplier": 1 }, - { "monster": "mon_zombie_fat", "freq": 100, "cost_multiplier": 1 }, - { "monster": "mon_zombie_child", "freq": 20, "cost_multiplier": 1 } + { "monster": "mon_zombie", "freq": 100, "cost_multiplier": 2, "pack_size": [ 2, 3 ] }, + { "monster": "mon_zombie_crawler", "freq": 30, "cost_multiplier": 1 }, + { "monster": "mon_zombie_fat", "freq": 30, "cost_multiplier": 1 }, + { "monster": "mon_zombie_tough", "freq": 30, "cost_multiplier": 1 }, + { "monster": "mon_zombie_child", "freq": 10, "cost_multiplier": 1 }, + { "monster": "mon_dog_zombie_rot", "freq": 5, "cost_multiplier": 4 }, + { "monster": "mon_zombie_cop", "freq": 10, "cost_multiplier": 3 }, + { "monster": "mon_skeleton", "freq": 5, "cost_multiplier": 1 }, + { "monster": "mon_zombie_grabber", "freq":10, "cost_multiplier": 1 }, + { "monster": "mon_zombie_smoker", "freq": 5, "cost_multiplier": 5 }, + { "monster": "mon_zombie_shady", "freq": 10, "cost_multiplier": 1 }, + { "monster": "mon_zombie_gasbag", "freq": 10, "cost_multiplier": 2 }, + { "monster": "mon_zombie_shrieker", "freq": 20, "cost_multiplier": 2 }, + { "monster": "mon_zombie_acidic", "freq": 5, "cost_multiplier": 3 }, + { "monster": "mon_zombie_electric", "freq": 5, "cost_multiplier": 5 }, + { "monster": "mon_zombie_necro", "freq": 30, "cost_multiplier": 5 }, + { "monster": "mon_zombie_runner", "freq": 10, "cost_multiplier": 5, "pack_size": [ 1, 2 ] } ] }, { @@ -1642,6 +1655,9 @@ { "monster": "mon_zombie_child", "freq": 100, "cost_multiplier": 1 }, { "monster": "mon_zombie_crawler", "freq": 30, "cost_multiplier": 1 }, { "monster": "mon_zombie", "freq": 20, "cost_multiplier": 1 }, + { "monster": "mon_zombie_tough", "freq": 50, "cost_multiplier": 1 }, + { "monster": "mon_skeleton", "freq": 30, "cost_multiplier": 1 }, + { "monster": "mon_zombie_electric", "freq": 15, "cost_multiplier": 1 }, { "monster": "mon_zombie_fat", "freq": 10, "cost_multiplier": 1 } ] },{ diff --git a/data/json/overmap/specials.json b/data/json/overmap/specials.json index a3b51d287a0fa..4a33fae70d725 100644 --- a/data/json/overmap/specials.json +++ b/data/json/overmap/specials.json @@ -1989,8 +1989,8 @@ { "point" : [1,-1,0], "terrain" : "road" } ], "locations" : [ "land" ], - "city_sizes" : [4, 12], - "occurrences" : [1, 4], + "city_sizes" : [ 6, 12 ], + "occurrences" : [ 0, 1 ], "flags" : [ "CLASSIC" ] },{ "type" : "overmap_special", @@ -2028,8 +2028,8 @@ { "point" : [1,-1,0], "terrain" : "road" } ], "locations" : [ "land" ], - "city_sizes" : [4, 12], - "occurrences" : [0, 4], + "city_sizes" : [ 6, 12 ], + "occurrences" : [ 0, 1 ], "flags" : [ "CLASSIC" ] },{ "type" : "overmap_special", @@ -2065,9 +2065,9 @@ ], "locations" : [ "land" ], "city_distance" : [10, -1], - "city_sizes" : [4, 12], - "occurrences" : [0, 2], - "flags" : [ "CLASSIC" ] + "city_sizes" : [ 4, 12 ], + "occurrences" : [ 1, 5 ], + "flags" : [ "UNIQUE" ] },{ "type" : "overmap_special", "id" : "Mansion_WildAlt", @@ -2102,9 +2102,9 @@ ], "locations" : [ "land" ], "city_distance" : [10, -1], - "city_sizes" : [4, 12], - "occurrences" : [0, 2], - "flags" : [ "CLASSIC" ] + "city_sizes" : [ 4, 12 ], + "occurrences" : [ 1, 5 ], + "flags" : [ "UNIQUE" ] },{ "type": "overmap_special", "id": "Lumberyard", diff --git a/data/json/recipes/armor/arms.json b/data/json/recipes/armor/arms.json index fed6caedb2ed4..f1a48641641bd 100644 --- a/data/json/recipes/armor/arms.json +++ b/data/json/recipes/armor/arms.json @@ -28,21 +28,6 @@ "using": [ [ "sewing_standard", 10 ] ], "components": [ [ [ "rag", 4 ] ] ] }, - { - "result": "armguard_bone", - "type": "recipe", - "category": "CC_ARMOR", - "subcategory": "CSC_ARMOR_ARMS", - "skill_used": "tailor", - "difficulty": 4, - "time": 30000, - "autolearn": true, - "using": [ [ "sewing_standard", 11 ] ], - "components": [ - [ [ "bone", 10 ], [ "bone_human", 10 ], [ "bone_tainted", 20 ] ], - [ [ "leather", 6 ], [ "tanned_hide", 1 ], [ "fur", 6 ], [ "tanned_pelt", 1 ] ] - ] - }, { "result": "armguard_chitin", "type": "recipe", diff --git a/data/json/recipes/armor/feet.json b/data/json/recipes/armor/feet.json index 301a644617b35..b7c38b1d53544 100644 --- a/data/json/recipes/armor/feet.json +++ b/data/json/recipes/armor/feet.json @@ -23,22 +23,6 @@ "using": [ [ "sewing_standard", 10 ] ], "components": [ [ [ "leather", 10 ], [ "tanned_hide", 2 ] ] ] }, - { - "result": "boots_bone", - "type": "recipe", - "category": "CC_ARMOR", - "subcategory": "CSC_ARMOR_FEET", - "skill_used": "tailor", - "difficulty": 3, - "time": 40000, - "autolearn": true, - "book_learn": [ [ "manual_tailor", 2 ], [ "textbook_tailor", 2 ] ], - "using": [ [ "sewing_standard", 18 ] ], - "components": [ - [ [ "bone", 18 ], [ "bone_human", 18 ], [ "bone_tainted", 36 ] ], - [ [ "leather", 6 ], [ "fur", 6 ] ] - ] - }, { "result": "boots_chitin", "type": "recipe", diff --git a/data/json/recipes/armor/hands.json b/data/json/recipes/armor/hands.json index a737ab402eda1..d255f15149b7a 100644 --- a/data/json/recipes/armor/hands.json +++ b/data/json/recipes/armor/hands.json @@ -1,20 +1,4 @@ [ - { - "result": "gauntlets_bone", - "type": "recipe", - "category": "CC_ARMOR", - "subcategory": "CSC_ARMOR_HANDS", - "skill_used": "tailor", - "difficulty": 3, - "time": 30000, - "autolearn": true, - "book_learn": [ [ "manual_tailor", 2 ], [ "textbook_tailor", 2 ] ], - "using": [ [ "sewing_standard", 12 ], [ "cordage", 1 ] ], - "components": [ - [ [ "bone", 12 ], [ "bone_human", 12 ], [ "bone_tainted", 24 ] ], - [ [ "leather", 2 ] ] - ] - }, { "result": "gauntlets_chitin", "type": "recipe", diff --git a/data/json/recipes/armor/head.json b/data/json/recipes/armor/head.json index ce1a76805dc25..e14811f6278ce 100644 --- a/data/json/recipes/armor/head.json +++ b/data/json/recipes/armor/head.json @@ -364,19 +364,6 @@ ], "components": [ [ [ "fur", 4 ], [ "leather", 4 ] ] ] }, - { - "result": "helmet_bone", - "type": "recipe", - "category": "CC_ARMOR", - "subcategory": "CSC_ARMOR_HEAD", - "skill_used": "tailor", - "difficulty": 5, - "time": 60000, - "autolearn": true, - "book_learn": [ [ "textbook_tailor", 5 ], [ "tailor_portfolio", 5 ] ], - "qualities": [ { "id": "CUT", "level": 1 } ], - "components": [ [ [ "bone", 24 ], [ "bone_human", 24 ], [ "bone_tainted", 48 ] ] ] - }, { "result": "helmet_chitin", "type": "recipe", diff --git a/data/json/recipes/armor/suit.json b/data/json/recipes/armor/suit.json index e27ceb250e33a..1a5f6637e5fa2 100644 --- a/data/json/recipes/armor/suit.json +++ b/data/json/recipes/armor/suit.json @@ -58,22 +58,6 @@ [ [ "armguard_larmor", 1 ] ] ] }, - { - "result": "armor_bone", - "type": "recipe", - "category": "CC_ARMOR", - "subcategory": "CSC_ARMOR_SUIT", - "skill_used": "tailor", - "difficulty": 6, - "time": 30000, - "autolearn": true, - "book_learn": [ [ "textbook_tailor", 4 ], [ "tailor_portfolio", 5 ] ], - "using": [ [ "sewing_standard", 43 ] ], - "components": [ - [ [ "bone", 40 ], [ "bone_human", 40 ], [ "bone_tainted", 80 ] ], - [ [ "leather", 12 ], [ "tanned_hide", 2 ], [ "fur", 12 ], [ "tanned_pelt", 2 ] ] - ] - }, { "result": "armor_chitin", "type": "recipe", diff --git a/data/json/recipes/armor/torso.json b/data/json/recipes/armor/torso.json index 4f3928ca9ec0d..52f134eaa495c 100644 --- a/data/json/recipes/armor/torso.json +++ b/data/json/recipes/armor/torso.json @@ -1014,6 +1014,18 @@ "using": [ [ "sewing_standard", 4 ] ], "components": [ [ [ "rag", 5 ] ] ] }, + { + "result": "tshirt", + "type": "recipe", + "category": "CC_ARMOR", + "subcategory": "CSC_ARMOR_TORSO", + "skill_used": "tailor", + "time": 2000, + "autolearn": true, + "byproducts": [ [ "rag", 2 ] ], + "qualities": [ { "id": "CUT", "level": 1 } ], + "components": [ [ [ "longshirt", 1 ] ] ] + }, { "result": "tunic", "type": "recipe", diff --git a/data/json/recipes/food/offal_dishes.json b/data/json/recipes/food/offal_dishes.json index 4caf4a808d369..96b6ed3b3a65e 100644 --- a/data/json/recipes/food/offal_dishes.json +++ b/data/json/recipes/food/offal_dishes.json @@ -99,7 +99,7 @@ "autolearn": true, "qualities": [ { "id": "COOK", "level": 2 } ], "tools": [ [ [ "surface_heat", 45, "LIST" ] ] ], - "components": [ [ [ "flour", 2 ] ], [ [ "liver", 4 ], [ "lung", 4 ], [ "kidney", 4 ] ], [ [ "water", 1 ], [ "water_clean", 1 ] ] ] + "components": [ [ [ "flour", 20 ] ], [ [ "meat_offal", 1, "LIST" ] ], [ [ "water", 1 ], [ "water_clean", 1 ] ] ] }, { "type": "recipe", diff --git a/data/json/recipes/recipe_deconstruction.json b/data/json/recipes/recipe_deconstruction.json index 100200450cc8c..08f3b5e51786d 100644 --- a/data/json/recipes/recipe_deconstruction.json +++ b/data/json/recipes/recipe_deconstruction.json @@ -878,7 +878,7 @@ "type": "uncraft", "time": 500, "qualities": [ { "id": "SCREW", "level": 1 } ], - "components": [ [ [ "scrap", 1 ] ], [ [ "small_lcd_screen", 1 ] ], [ [ "RAM", 1 ] ], [ [ "processor", 1 ] ], [ [ "lens", 1 ] ] ] + "components": [ [ [ "scrap", 1 ] ], [ [ "small_lcd_screen", 1 ] ], [ [ "RAM", 1 ] ], [ [ "processor", 1 ] ], [ [ "lens_small", 1 ] ] ] }, { "result": "ceramic_bowl", diff --git a/data/json/recipes/recipe_others.json b/data/json/recipes/recipe_others.json index b12747d2e7d42..327624cefa9f3 100644 --- a/data/json/recipes/recipe_others.json +++ b/data/json/recipes/recipe_others.json @@ -2585,7 +2585,7 @@ "autolearn": true, "using": [ [ "soldering_standard", 10 ], [ "surface_heat", 10 ] ], "tools": [ [ [ "mold_plastic", -1 ] ] ], - "components": [ [ [ "plastic_chunk", 4 ] ], [ [ "lens", 2 ] ], [ [ "spring", 1 ] ] ] + "components": [ [ [ "plastic_chunk", 4 ] ], [ [ "lens", 1 ] ], [ [ "lens", 1 ], [ "lens_small", 1 ] ], [ [ "spring", 1 ] ] ] }, { "type": "recipe", diff --git a/data/json/recipes/recipe_weapon.json b/data/json/recipes/recipe_weapon.json index 868e469981500..67c65328534ee 100644 --- a/data/json/recipes/recipe_weapon.json +++ b/data/json/recipes/recipe_weapon.json @@ -1398,7 +1398,8 @@ "components": [ [ [ "amplifier", 1 ] ], [ [ "power_supply", 1 ] ], - [ [ "lens", 2 ] ], + [ [ "lens", 1], [ "lens_small",1 ] ], + [ [ "lens", 1], [ "lens_small",1 ] ], [ [ "battery", 100 ], [ "plut_cell", 1 ] ], [ [ "scrap", 1 ], @@ -1488,7 +1489,8 @@ "components": [ [ [ "amplifier", 1 ] ], [ [ "power_supply", 1 ] ], - [ [ "lens", 2 ] ], + [ [ "lens", 1], [ "lens_small",1 ] ], + [ [ "lens", 1], [ "lens_small",1 ] ], [ [ "battery", 100 ], [ "plut_cell", 1 ] ], [ [ "scrap", 1 ], diff --git a/data/json/recipes/weapon/mods.json b/data/json/recipes/weapon/mods.json index 850d35c0f1a36..0b899e717e1d4 100644 --- a/data/json/recipes/weapon/mods.json +++ b/data/json/recipes/weapon/mods.json @@ -64,7 +64,8 @@ [ "scrap", 1 ], [ "can_drink_unsealed", 1 ], [ "can_food_unsealed", 1 ], [ "canister_empty", 1 ], [ "plastic_chunk", 1 ] ], - [ [ "lens", 2 ] ] + [ [ "lens", 1 ] ], + [ [ "lens", 1], [ "lens_small",1 ] ] ] }, { @@ -86,7 +87,8 @@ [ "scrap", 1 ], [ "can_drink_unsealed", 1 ], [ "can_food_unsealed", 1 ], [ "canister_empty", 1 ], [ "plastic_chunk", 1 ] ], - [ [ "lens", 2 ] ] + [ [ "lens", 1 ] ], + [ [ "lens", 1], [ "lens_small",1 ] ] ] }, { @@ -152,7 +154,8 @@ "components": [ [ [ "scrap", 2 ] ], [ [ "plastic_chunk", 2 ] ], - [ [ "lens", 2 ] ] + [ [ "lens", 1 ] ], + [ [ "lens", 1], [ "lens_small",1 ] ] ] }, { diff --git a/data/json/requirements/cooking_components.json b/data/json/requirements/cooking_components.json index c4301b166c476..45248de8f02d4 100644 --- a/data/json/requirements/cooking_components.json +++ b/data/json/requirements/cooking_components.json @@ -78,6 +78,12 @@ "//": "Hard liquor, ethanol, and denaturalized alcohol - Do not use in comestibles", "components": [ [ [ "hard_liquor_chem", 1, "LIST" ], [ "denat_alcohol", 125 ] ] ] }, + { + "id": "meat_offal", + "type": "requirement", + "//": "Anything you might consider offal or intestines.", + "components": [ [ [ "lung", 4 ], [ "liver", 4 ], [ "kidney", 4 ], [ "sweetbread", 4 ], [ "offal", 1 ] ] ] + }, { "id": "meat_red", "type": "requirement", diff --git a/gfx/MSX++DeadPeopleEdition/14_tiles2_32x32_22365-27564.png b/gfx/MSX++DeadPeopleEdition/14_tiles2_32x32_22365-27564.png index 46275a79f3e4d..a9198e35e2f95 100644 Binary files a/gfx/MSX++DeadPeopleEdition/14_tiles2_32x32_22365-27564.png and b/gfx/MSX++DeadPeopleEdition/14_tiles2_32x32_22365-27564.png differ diff --git a/gfx/MSX++DeadPeopleEdition/1_tiles_32x32_0-5199.png b/gfx/MSX++DeadPeopleEdition/1_tiles_32x32_0-5199.png index 2d57276d3f230..a61be4c6eb341 100644 Binary files a/gfx/MSX++DeadPeopleEdition/1_tiles_32x32_0-5199.png and b/gfx/MSX++DeadPeopleEdition/1_tiles_32x32_0-5199.png differ diff --git a/gfx/MSX++DeadPeopleEdition/5_tiles_character_customization_32x32_9568-11567.png b/gfx/MSX++DeadPeopleEdition/5_tiles_character_customization_32x32_9568-11567.png index 6ab34459db957..0534089f4a4ec 100644 Binary files a/gfx/MSX++DeadPeopleEdition/5_tiles_character_customization_32x32_9568-11567.png and b/gfx/MSX++DeadPeopleEdition/5_tiles_character_customization_32x32_9568-11567.png differ diff --git a/gfx/MSX++DeadPeopleEdition/tile_config.json b/gfx/MSX++DeadPeopleEdition/tile_config.json index 4607abbda3dab..470906004c5b1 100644 --- a/gfx/MSX++DeadPeopleEdition/tile_config.json +++ b/gfx/MSX++DeadPeopleEdition/tile_config.json @@ -17572,7 +17572,7 @@ { "id": ["motor_enhanced", "vp_engine_electric_enhanced", "motor_large", "vp_engine_electric_large", "vp_engine_electric"], "fg": 1812, - "bg": 984 + "bg": 0 }, { "id": "sheet_metal_lit", @@ -17906,21 +17906,11 @@ "fg": 3183, "bg": 985 }, - { - "id": "t_reinforced_door_glass_lab_o", - "fg": 3183, - "bg": 5010 - }, { "id": "t_reinforced_door_glass_c", "fg": 3182, "bg": 985 }, - { - "id": "t_reinforced_door_glass_lab_c", - "fg": 3182, - "bg": 5010 - }, { "id": "t_scrap_wall", "fg": 3221, @@ -18175,36 +18165,18 @@ "bg": 987, "rotates": false }, - { - "id": "t_door_lab_frame", - "fg": 3035, - "bg": 5010, - "rotates": false - }, { "id": "t_door_glass_o", "fg": 3037, "bg": 987, "rotates": false }, - { - "id": "t_door_glass_lab_o", - "fg": 3037, - "bg": 5010, - "rotates": false - }, { "id": "t_door_o", "fg": 3044, "bg": 987, "rotates": false }, - { - "id": "t_door_lab_o", - "fg": 3044, - "bg": 5010, - "rotates": false - }, { "id": "t_floor", "bg": 987, @@ -18216,12 +18188,6 @@ "bg": 987, "rotates": false }, - { - "id": "t_mdoor_frame", - "fg": 3120, - "bg": 5010, - "rotates": false - }, { "id": "t_rdoor_b", "fg": 3175, @@ -19255,12 +19221,6 @@ "bg": 993, "rotates": false }, - { - "id": "t_door_metal_lab_o", - "fg": 3042, - "bg": 5010, - "rotates": false - }, { "id": "t_door_metal_o_peep", "fg": 3042, @@ -19273,12 +19233,6 @@ "bg": 993, "rotates": false }, - { - "id": "t_gates_mech_control_lab", - "fg": 3071, - "bg": 5010, - "rotates": false - }, { "id": "t_radio_tower", "fg": 3166, @@ -31930,24 +31884,12 @@ "fg": 4965, "bg": 993, "rotates": false - }, - { - "id": "t_door_glass_frosted_lab_c", - "fg": 4965, - "bg": 5010, - "rotates": false }, { "id": "t_door_glass_frosted_o", "fg": 4966, "bg": 993, "rotates": false - }, - { - "id": "t_door_glass_frosted_lab_o", - "fg": 4966, - "bg": 5010, - "rotates": false }, { "id": "panacea", @@ -32054,7 +31996,6 @@ { "id": "mon_dog", "fg": [ - { "weight":3, "sprite":4986}, { "weight":3, "sprite":2408} ], "rotates": false @@ -37790,25 +37731,25 @@ "rotates": false }, { - "id": "mon_zombie_bio_infantry", + "id": ["mon_zombie_bio_infantry", "mon_zombie_bio_infantry_rifle"], "fg": 2673, "bg": 967, "rotates": false }, { - "id": "mon_zombie_bio_knight", + "id": ["mon_zombie_bio_knight", "mon_zombie_bio_knight_lmg"], "fg": 2674, "bg": 967, "rotates": false }, { - "id": "mon_zombie_bio_scout", + "id": ["mon_zombie_bio_scout", "mon_zombie_bio_scout_sniper"], "fg": 2676, "bg": 967, "rotates": false }, { - "id": "mon_zombie_bio_tool", + "id": ["mon_zombie_bio_tool", "mon_zombie_bio_tool_pistol"], "fg": 2677, "bg": 967, "rotates": false @@ -37911,7 +37852,7 @@ "rotates": false }, { - "id": "overlay_worn_panties_on", + "id": "!overlay_worn_panties_on", "fg": 2706, "rotates": false }, @@ -38461,11 +38402,6 @@ "fg": 3036, "rotates": false }, - { - "id": "t_door_glass_lab_c", - "fg": 3036, - "rotates": false - }, { "id": "t_door_makeshift_c", "fg": 3038, @@ -38476,11 +38412,6 @@ "fg": 3040, "rotates": true }, - { - "id": "t_door_metal_lab_c", - "fg": 3040, - "rotates": true - }, { "id": "t_door_metal_locked", "fg": 3040, @@ -44738,11 +44669,6 @@ "fg": 4017, "rotates": false }, - { - "id": "t_door_lab_c", - "fg": 4017, - "rotates": false - }, { "id": "t_door_locked", "fg": 4017, @@ -44763,11 +44689,6 @@ "fg": 4018, "rotates": false }, - { - "id": "t_door_lab_b", - "fg": 4018, - "rotates": false - }, { "id": "vp_flamethrower1", "fg": 4020, @@ -46414,7 +46335,7 @@ "rotates": true }, { - "id": ["vp_wheel_motorbike", "vp_wheel_bicycle_or", "vp_wheel_motorbike_or", "vp_wheel_slick", "vp_wheel_wide_or"], + "id": ["vp_wheel_motorbike", "vp_wheel_bicycle_or", "vp_wheel_wide_or_steerable", "vp_wheel_bicycle_or_steerable", "vp_wheel_motorbike_or_steerable", "vp_wheel_slick_steerable", "vp_wheel_motorbike_or", "vp_wheel_slick", "vp_wheel_wide_or"], "fg": 4187, "rotates": true }, @@ -47648,34 +47569,55 @@ { "id": "overlay_male_mutation_EYE_YELLOW", "fg": 9599, "rotates": false }, { "id": "overlay_female_mutation_HAIR_BLONDE", "fg": 9600, "rotates": false }, + { "id": "overlay_female_mutation_hair_blond_long", "fg": 9600, "rotates": false }, { "id": "overlay_male_mutation_HAIR_BLONDE", "fg": 9601, "rotates": false }, + { "id": "overlay_male_mutation_hair_blond_short", "fg": 9601, "rotates": false }, { "id": "overlay_female_mutation_HAIR_RED", "fg": 9602, "rotates": false }, - { "id": "overlay_male_mutation_HAIR_RED", "fg": 9603, "rotates": false }, + { "id": "overlay_female_mutation_hair_red_long", "fg": 9602, "rotates": false }, + { "id": "overlay_male_mutation_HAIR_RED", "fg": 9603, "rotates": false }, + { "id": "overlay_male_mutation_hair_red_short", "fg": 9603, "rotates": false }, { "id": "overlay_female_mutation_HAIR_BROWN", "fg": 9604, "rotates": false }, + { "id": "overlay_female_mutation_hair_brown_long", "fg": 9604, "rotates": false }, { "id": "overlay_male_mutation_HAIR_BROWN", "fg": 9605, "rotates": false }, + { "id": "overlay_male_mutation_hair_brown_short", "fg": 9605, "rotates": false }, { "id": "overlay_female_mutation_HAIR_BLACK", "fg": 9606, "rotates": false }, + { "id": "overlay_female_mutation_hair_black_long", "fg": 9606, "rotates": false }, { "id": "overlay_male_mutation_HAIR_BLACK", "fg": 9607, "rotates": false }, + { "id": "overlay_male_mutation_hair_black_short", "fg": 9607, "rotates": false }, { "id": "overlay_female_mutation_HAIR_WHITE", "fg": 9608, "rotates": false }, + { "id": "overlay_female_mutation_hair_white_long", "fg": 9608, "rotates": false }, { "id": "overlay_male_mutation_HAIR_WHITE", "fg": 9609, "rotates": false }, + { "id": "overlay_male_mutation_hair_white_short", "fg": 9609, "rotates": false }, { "id": "overlay_female_mutation_HAIR_GRAY", "fg": 9610, "rotates": false }, + { "id": "overlay_female_mutation_hair_gray_long", "fg": 9610, "rotates": false }, { "id": "overlay_male_mutation_HAIR_GRAY", "fg": 9611, "rotates": false }, + { "id": "overlay_male_mutation_hair_gray_short", "fg": 9611, "rotates": false }, { "id": "overlay_female_mutation_HAIR_PINK", "fg": 9612, "rotates": false }, + { "id": "overlay_female_mutation_hair_pink_long", "fg": 9612, "rotates": false }, { "id": "overlay_male_mutation_HAIR_PINK", "fg": 9613, "rotates": false }, + { "id": "overlay_male_mutation_hair_pink_short", "fg": 9613, "rotates": false }, { "id": "overlay_female_mutation_hair2blond", "fg": 9616, "rotates": false }, { "id": "overlay_male_mutation_hair2blond", "fg": 9617, "rotates": false }, + { "id": "overlay_female_mutation_hair_blond_short", "fg": 9617, "rotates": false }, { "id": "overlay_female_mutation_hair2red", "fg": 9618, "rotates": false }, { "id": "overlay_male_mutation_hair2red", "fg": 9619, "rotates": false }, + { "id": "overlay_female_mutation_hair_red_short", "fg": 9619, "rotates": false }, { "id": "overlay_female_mutation_hair2brown", "fg": 9620, "rotates": false }, { "id": "overlay_male_mutation_hair2brown", "fg": 9621, "rotates": false }, + { "id": "overlay_female_mutation_hair_brown_short", "fg": 9621, "rotates": false }, { "id": "overlay_female_mutation_hair2black", "fg": 9622, "rotates": false }, { "id": "overlay_male_mutation_hair2black", "fg": 9623, "rotates": false }, + { "id": "overlay_female_mutation_hair_black_short", "fg": 9623, "rotates": false }, { "id": "overlay_female_mutation_hair2white", "fg": 9624, "rotates": false }, { "id": "overlay_male_mutation_hair2white", "fg": 9625, "rotates": false }, + { "id": "overlay_female_mutation_hair_white_short", "fg": 9625, "rotates": false }, { "id": "overlay_female_mutation_hair2gray", "fg": 9626, "rotates": false }, { "id": "overlay_male_mutation_hair2gray", "fg": 9627, "rotates": false }, + { "id": "overlay_female_mutation_hair_gray_short", "fg": 9627, "rotates": false }, { "id": "overlay_female_mutation_hair2pink", "fg": 9628, "rotates": false }, { "id": "overlay_male_mutation_hair2pink", "fg": 9629, "rotates": false }, + { "id": "overlay_female_mutation_hair_pink_short", "fg": 9629, "rotates": false }, { "id": "overlay_female_mutation_hair3blond", "fg": 9632, "rotates": false }, { "id": "overlay_male_mutation_hair3blond", "fg": 9633, "rotates": false }, @@ -47692,36 +47634,64 @@ { "id": "overlay_female_mutation_hair3pink", "fg": 9644, "rotates": false }, { "id": "overlay_male_mutation_hair3pink", "fg": 9645, "rotates": false }, - { "id": "overlay_mutation_hair4blond", "fg": 9648, "rotates": false }, - { "id": "overlay_mutation_hair4red", "fg": 9649, "rotates": false }, - { "id": "overlay_mutation_hair4brown", "fg": 9650, "rotates": false }, - { "id": "overlay_mutation_hair4black", "fg": 9651, "rotates": false }, - { "id": "overlay_mutation_hair4white", "fg": 9652, "rotates": false }, + { "id": "overlay_mutation_hair4blond", "fg": 9648, "rotates": false }, + { "id": "overlay_male_mutation_hair_blond_crewcut", "fg": 9648, "rotates": false }, + { "id": "overlay_mutation_hair4red", "fg": 9649, "rotates": false }, + { "id": "overlay_male_mutation_hair_red_crewcut", "fg": 9649, "rotates": false }, + { "id": "overlay_mutation_hair4brown", "fg": 9650, "rotates": false }, + { "id": "overlay_male_mutation_hair_brown_crewcut", "fg": 9650, "rotates": false }, + { "id": "overlay_mutation_hair4black", "fg": 9651, "rotates": false }, + { "id": "overlay_male_mutation_hair_black_crewcut", "fg": 9651, "rotates": false }, + { "id": "overlay_mutation_hair4white", "fg": 9652, "rotates": false }, + { "id": "overlay_male_mutation_hair_white_crewcut", "fg": 9652, "rotates": false }, { "id": "overlay_mutation_hair4gray", "fg": 9653, "rotates": false }, + { "id": "overlay_male_mutation_hair_gray_crewcut", "fg": 9653, "rotates": false }, { "id": "overlay_mutation_hair4pink", "fg": 9654, "rotates": false }, + { "id": "overlay_male_mutation_hair_pink_crewcut", "fg": 9654, "rotates": false }, { "id": "overlay_mutation_hair5blond", "fg": 9655, "rotates": false }, + { "id": "overlay_mutation_hair_blond_mohawk", "fg": 9655, "rotates": false }, { "id": "overlay_mutation_hair5red", "fg": 9656, "rotates": false }, + { "id": "overlay_mutation_hair_red_mohawk", "fg": 9656, "rotates": false }, { "id": "overlay_mutation_hair5brown", "fg": 9657, "rotates": false }, + { "id": "overlay_mutation_hair_brown_mohawk", "fg": 9657, "rotates": false }, { "id": "overlay_mutation_hair5black", "fg": 9658, "rotates": false }, + { "id": "overlay_mutation_hair_black_mohawk", "fg": 9658, "rotates": false }, { "id": "overlay_mutation_hair5white", "fg": 9659, "rotates": false }, + { "id": "overlay_mutation_hair_white_mohawk", "fg": 9659, "rotates": false }, { "id": "overlay_mutation_hair5gray", "fg": 9660, "rotates": false }, + { "id": "overlay_mutation_hair_gray_mohawk", "fg": 9660, "rotates": false }, { "id": "overlay_mutation_hair5pink", "fg": 9661, "rotates": false }, + { "id": "overlay_mutation_hair_pink_mohawk", "fg": 9661, "rotates": false }, { "id": "overlay_female_mutation_hair6blond", "fg": 9664, "rotates": false }, + { "id": "overlay_female_mutation_hair_blond_medium", "fg": 9664, "rotates": false }, { "id": "overlay_male_mutation_hair6blond", "fg": 9665, "rotates": false }, + { "id": "overlay_female_mutation_hair_blond_crewcut", "fg": 9665, "rotates": false }, { "id": "overlay_female_mutation_hair6red", "fg": 9666, "rotates": false }, + { "id": "overlay_female_mutation_hair_red_medium", "fg": 9666, "rotates": false }, { "id": "overlay_male_mutation_hair6red", "fg": 9667, "rotates": false }, + { "id": "overlay_female_mutation_hair_red_crewcut", "fg": 9667, "rotates": false }, { "id": "overlay_female_mutation_hair6brown", "fg": 9668, "rotates": false }, + { "id": "overlay_female_mutation_hair_brown_medium", "fg": 9668, "rotates": false }, { "id": "overlay_male_mutation_hair6brown", "fg": 9669, "rotates": false }, + { "id": "overlay_female_mutation_hair_brown_crewcut", "fg": 9669, "rotates": false }, { "id": "overlay_female_mutation_hair6black", "fg": 9670, "rotates": false }, + { "id": "overlay_female_mutation_hair_black_medium", "fg": 9670, "rotates": false }, { "id": "overlay_male_mutation_hair6black", "fg": 9671, "rotates": false }, + { "id": "overlay_female_mutation_hair_black_crewcut", "fg": 9671, "rotates": false }, { "id": "overlay_female_mutation_hair6white", "fg": 9672, "rotates": false }, + { "id": "overlay_female_mutation_hair_white_medium", "fg": 9672, "rotates": false }, { "id": "overlay_male_mutation_hair6white", "fg": 9673, "rotates": false }, + { "id": "overlay_female_mutation_hair_white_crewcut", "fg": 9673, "rotates": false }, { "id": "overlay_female_mutation_hair6gray", "fg": 9674, "rotates": false }, - { "id": "overlay_male_mutation_hair6gray", "fg": 9675, "rotates": false }, + { "id": "overlay_female_mutation_hair_gray_medium", "fg": 9674, "rotates": false }, + { "id": "overlay_male_mutation_hair6gray", "fg": 9675, "rotates": false }, + { "id": "overlay_female_mutation_hair_gray_crewcut", "fg": 9675, "rotates": false }, { "id": "overlay_female_mutation_hair6pink", "fg": 9676, "rotates": false }, + { "id": "overlay_female_mutation_hair_pink_medium", "fg": 9676, "rotates": false }, { "id": "overlay_male_mutation_hair6pink", "fg": 9677, "rotates": false }, + { "id": "overlay_female_mutation_hair_pink_crewcut", "fg": 9677, "rotates": false }, { "id": "overlay_female_mutation_hair7blond", "fg": 9680, "rotates": false }, { "id": "overlay_male_mutation_hair7blond", "fg": 9681, "rotates": false }, @@ -47739,33 +47709,54 @@ { "id": "overlay_male_mutation_hair7pink", "fg": 9693, "rotates": false }, { "id": "overlay_female_mutation_hair8blond", "fg": 9696, "rotates": false }, + { "id": "overlay_male_mutation_hair_blond_medium", "fg": 9696, "rotates": false }, { "id": "overlay_male_mutation_hair8blond", "fg": 9697, "rotates": false }, + { "id": "overlay_male_mutation_hair_blond_long", "fg": 9697, "rotates": false }, { "id": "overlay_female_mutation_hair8red", "fg": 9698, "rotates": false }, + { "id": "overlay_male_mutation_hair_red_medium", "fg": 9698, "rotates": false }, { "id": "overlay_male_mutation_hair8red", "fg": 9699, "rotates": false }, + { "id": "overlay_male_mutation_hair_red_long", "fg": 9699, "rotates": false }, { "id": "overlay_female_mutation_hair8brown", "fg": 9700, "rotates": false }, + { "id": "overlay_male_mutation_hair_brown_medium", "fg": 9700, "rotates": false }, { "id": "overlay_male_mutation_hair8brown", "fg": 9701, "rotates": false }, + { "id": "overlay_male_mutation_hair_brown_long", "fg": 9701, "rotates": false }, { "id": "overlay_female_mutation_hair8black", "fg": 9702, "rotates": false }, + { "id": "overlay_male_mutation_hair_black_medium", "fg": 9702, "rotates": false }, { "id": "overlay_male_mutation_hair8black", "fg": 9703, "rotates": false }, + { "id": "overlay_male_mutation_hair_black_long", "fg": 9703, "rotates": false }, { "id": "overlay_female_mutation_hair8white", "fg": 9704, "rotates": false }, + { "id": "overlay_male_mutation_hair_white_medium", "fg": 9704, "rotates": false }, { "id": "overlay_male_mutation_hair8white", "fg": 9705, "rotates": false }, + { "id": "overlay_male_mutation_hair_white_long", "fg": 9705, "rotates": false }, { "id": "overlay_female_mutation_hair8gray", "fg": 9706, "rotates": false }, - { "id": "overlay_male_mutation_hair8gray", "fg": 9707, "rotates": false }, + { "id": "overlay_male_mutation_hair_gray_medium", "fg": 9706, "rotates": false }, + { "id": "overlay_male_mutation_hair8gray", "fg": 9707, "rotates": false }, + { "id": "overlay_male_mutation_hair_gray_long", "fg": 9707, "rotates": false }, { "id": "overlay_female_mutation_hair8pink", "fg": 9708, "rotates": false }, + { "id": "overlay_male_mutation_hair_blond_medium", "fg": 9708, "rotates": false }, { "id": "overlay_male_mutation_hair8pink", "fg": 9709, "rotates": false }, + { "id": "overlay_male_mutation_hair_pink_long", "fg": 9709, "rotates": false }, { "id": "overlay_female_mutation_hair9blond", "fg": 9712, "rotates": false }, + { "id": "overlay_mutation_hair_blond_fro", "fg": 9712, "rotates": false }, { "id": "overlay_male_mutation_hair9blond", "fg": 9713, "rotates": false }, { "id": "overlay_female_mutation_hair9red", "fg": 9714, "rotates": false }, + { "id": "overlay_mutation_hair_red_fro", "fg": 9714, "rotates": false }, { "id": "overlay_male_mutation_hair9red", "fg": 9715, "rotates": false }, { "id": "overlay_female_mutation_hair9brown", "fg": 9716, "rotates": false }, + { "id": "overlay_mutation_hair_brown_fro", "fg": 9716, "rotates": false }, { "id": "overlay_male_mutation_hair9brown", "fg": 9717, "rotates": false }, { "id": "overlay_female_mutation_hair9black", "fg": 9718, "rotates": false }, + { "id": "overlay_mutation_hair_black_fro", "fg": 9718, "rotates": false }, { "id": "overlay_male_mutation_hair9black", "fg": 9719, "rotates": false }, { "id": "overlay_female_mutation_hair9white", "fg": 9720, "rotates": false }, + { "id": "overlay_mutation_hair_white_fro", "fg": 9720, "rotates": false }, { "id": "overlay_male_mutation_hair9white", "fg": 9721, "rotates": false }, { "id": "overlay_female_mutation_hair9gray", "fg": 9722, "rotates": false }, + { "id": "overlay_mutation_hair_gray_fro", "fg": 9722, "rotates": false }, { "id": "overlay_male_mutation_hair9gray", "fg": 9723, "rotates": false }, { "id": "overlay_female_mutation_hair9pink", "fg": 9724, "rotates": false }, + { "id": "overlay_mutation_hair_pink_fro", "fg": 9724, "rotates": false }, { "id": "overlay_male_mutation_hair9pink", "fg": 9725, "rotates": false }, { "id": "overlay_female_mutation_hair10blond", "fg": 9728, "rotates": false }, @@ -59591,8 +59582,475 @@ "bg": 0, "rotates": false }, - - + { + "id": "corpse_mon_ant_larva", + "fg": 23580, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_ant", + "fg": 23581, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_ant_soldier", + "fg": 23582, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_ant_queen", + "fg": 23583, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_ant_acid_larva", + "fg": 23584, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_ant_acid", + "fg": 23585, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_ant_acid_soldier", + "fg": 23586, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_ant_acid_queen", + "fg": 23587, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_ant_fungus", + "fg": 23588, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_locust", + "fg": 23589, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_locust_nymph", + "fg": 23590, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_bear", + "fg": 23591, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_beaver", + "fg": 23592, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_bobcat", + "fg": 23593, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_chipmunk", + "fg": 23594, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_cougar", + "fg": 23595, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_cow_calf", + "fg": 23596, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_cow", + "fg": 23597, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_coyote", + "fg": 23598, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_coyote_wolf", + "fg": 23599, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_deer_fawn", + "fg": 23600, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_deer", + "fg": 23601, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_dog", + "fg": 23602, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_dog_pup", + "fg": 23603, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_dog_bull", + "fg": 23604, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_dog_bull_pup", + "fg": 23605, + "bg": 0, + "rotates": false + }, + { + "id": "FMCNote", + "fg": 23606, + "bg": 0, + "rotates": false + }, + { + "id": "FlatCoin", + "fg": 23607, + "bg": 0, + "rotates": false + }, + { + "id": "reading_light", + "fg": 23608, + "bg": 0, + "rotates": false + }, + { + "id": "reading_light_on", + "fg": 23609, + "bg": 0, + "rotates": false + }, + { + "id": "mon_zombie_bio_tool_smg", + "fg": 23610, + "bg": 967, + "rotates": false + }, + { + "id": "mon_zombie_bio_infantry_shotgun", + "fg": 23611, + "bg": 967, + "rotates": false + }, + { + "id": "mon_zombie_bio_knight_lauhcher", + "fg": 23612, + "bg": 967, + "rotates": false + }, + { + "id": "corpse_mon_dog_pitbullmix", + "fg": 23613, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_dog_pitbullmix_pup", + "fg": 23614, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_dog_beagle", + "fg": 23615, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_dog_beagle_pup", + "fg": 23616, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_dog_bcollie", + "fg": 23617, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_dog_bcollie_pup", + "fg": 23618, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_dog_boxer", + "fg": 23619, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_dog_boxer_pup", + "fg": 23620, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_dog_chihuahua", + "fg": 23621, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_dog_chihuahua_pup", + "fg": 23622, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_dog_dachshund", + "fg": 23623, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_dog_dachshund_pup", + "fg": 23624, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_dog_gshepherd", + "fg": 23625, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_dog_gshepherd_pup", + "fg": 23626, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_dog_gpyrenees", + "fg": 23627, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_dog_gpyrenees_pup", + "fg": 23628, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_dog_rottweiler", + "fg": 23629, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_dog_rottweiler_pup", + "fg": 23630, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_dog_auscattle", + "fg": 23631, + "bg": 0, + "rotates": false + }, + { + "id": "corpse_mon_dog_auscattle_pup", + "fg": 23632, + "bg": 0, + "rotates": false + }, + { + "id": "large_space_heater", + "fg": 23633, + "bg": 0, + "rotates": false + }, + { + "id": "large_space_heater_on", + "fg": 23634, + "bg": 0, + "rotates": false + }, + { + "id": "small_space_heater", + "fg": 23635, + "bg": 0, + "rotates": false + }, + { + "id": "small_space_heater_on", + "fg": 23636, + "bg": 0, + "rotates": false + }, + { + "id": ["motor_super", "vp_engine_electric_super"], + "fg": 23637, + "bg": 0, + "rotates": false + }, + { + "id": ["t_hydrop_tomato_harvested"], + "fg": 23638, + "bg": 0, + "rotates": false + }, + { + "id": ["t_hydrop_tomato"], + "fg": 23639, + "bg": 0, + "rotates": false + }, + { + "id": ["t_hydrop_bean_harvested"], + "fg": 23640, + "bg": 0, + "rotates": false + }, + { + "id": ["t_hydrop_bean"], + "fg": 23641, + "bg": 0, + "rotates": false + }, + { + "id": ["t_hydrop_cabbage_harvested"], + "fg": 23642, + "bg": 0, + "rotates": false + }, + { + "id": ["t_hydrop_cabbage"], + "fg": 23643, + "bg": 0, + "rotates": false + }, + { + "id": ["t_hydrop_carrot_harvested"], + "fg": 23644, + "bg": 0, + "rotates": false + }, + { + "id": ["t_hydrop_carrot"], + "fg": 23645, + "bg": 0, + "rotates": false + }, + { + "id": ["t_hydrop_celery_harvested"], + "fg": 23646, + "bg": 0, + "rotates": false + }, + { + "id": ["t_hydrop_celery"], + "fg": 23647, + "bg": 0, + "rotates": false + }, + { + "id": ["t_hydrop_corn_harvested"], + "fg": 23648, + "bg": 0, + "rotates": false + }, + { + "id": ["t_hydrop_corn"], + "fg": 23649, + "bg": 0, + "rotates": false + }, + { + "id": ["t_hydrop_cucumber_harvested"], + "fg": 23650, + "bg": 0, + "rotates": false + }, + { + "id": ["t_hydrop_cucumber"], + "fg": 23651, + "bg": 0, + "rotates": false + }, + { + "id": ["t_hydrop_onion_harvested"], + "fg": 23652, + "bg": 0, + "rotates": false + }, + { + "id": ["t_hydrop_onion"], + "fg": 23653, + "bg": 0, + "rotates": false + }, + { + "id": ["t_hydrop_weed_harvested"], + "fg": 23656, + "bg": 0, + "rotates": false + }, + { + "id": ["t_hydrop_weed"], + "fg": 23657, + "bg": 0, + "rotates": false + }, + { + "id": ["t_hydrop_potato_harvested"], + "fg": 23654, + "bg": 0, + "rotates": false + }, + { + "id": ["t_hydrop_potato"], + "fg": 23655, + "bg": 0, + "rotates": false + }, + { "id": "atlatl", "fg": 1986, diff --git a/src/crash.cpp b/src/crash.cpp index 013357bde6b3f..1b8a3dc65e9cf 100644 --- a/src/crash.cpp +++ b/src/crash.cpp @@ -204,8 +204,6 @@ extern "C" { void init_crash_handlers() { SymInitialize( GetCurrentProcess(), NULL, TRUE ); - ULONG stacksize = 2048; - SetThreadStackGuarantee( &stacksize ); for( auto sig : { SIGSEGV, SIGILL, SIGABRT, SIGFPE } ) { diff --git a/src/editmap.cpp b/src/editmap.cpp index a2689d59220fd..7ccd7579def9c 100644 --- a/src/editmap.cpp +++ b/src/editmap.cpp @@ -1723,19 +1723,19 @@ int editmap::mapgen_preview( real_coords &tc, uilist &gmenu ) for( auto &v : destsm->vehicles ) { auto &ch = g->m.access_cache( v->smz ); - ch.vehicle_list.erase( v ); - ch.zone_vehicles.erase( v ); + ch.vehicle_list.erase( v.get() ); + ch.zone_vehicles.erase( v.get() ); } - destsm->delete_vehicles(); + destsm->vehicles.clear(); for( size_t i = 0; i < srcsm->vehicles.size(); i++ ) { // copy vehicles to real map s += string_format( " copying vehicle %d/%d", i, srcsm->vehicles.size() ); - vehicle *veh1 = srcsm->vehicles[i]; - // vehicle *veh1 = veh; // @todo: fixme: is this required? - veh1->smx = target_sub.x + x; - veh1->smy = target_sub.y + y; - veh1->smz = target.z; - destsm->vehicles.push_back( veh1 ); - g->m.update_vehicle_cache( veh1, target.z ); + std::unique_ptr veh = std::move( srcsm->vehicles[i] ); + veh->smx = target_sub.x + x; + veh->smy = target_sub.y + y; + veh->smz = target.z; + vehicle *veh_p = veh.get(); + destsm->vehicles.push_back( std::move( veh ) ); + g->m.update_vehicle_cache( veh_p, target.z ); } srcsm->vehicles.clear(); g->m.update_vehicle_list( destsm, target.z ); // update real map's vcaches @@ -1868,13 +1868,14 @@ bool editmap::mapgen_set( std::string om_name, tripoint &omt_tgt, int r, bool ch return false; } - destsm->delete_vehicles(); - for( auto veh1 : srcsm->vehicles ) { // copy vehicles to real map - veh1->smx = target_sub.x + x; - veh1->smy = target_sub.y + y; - veh1->smz = target.z; - destsm->vehicles.push_back( veh1 ); - g->m.update_vehicle_cache( veh1, target.z ); + destsm->vehicles.clear(); + for( auto &veh : srcsm->vehicles ) { // copy vehicles to real map + veh->smx = target_sub.x + x; + veh->smy = target_sub.y + y; + veh->smz = target.z; + vehicle *veh_p = veh.get(); + destsm->vehicles.push_back( std::move( veh ) ); + g->m.update_vehicle_cache( veh_p, target.z ); } srcsm->vehicles.clear(); g->m.update_vehicle_list( destsm, target.z ); @@ -1951,8 +1952,8 @@ vehicle *editmap::mapgen_veh_query( const tripoint &omt_tgt ) for( int x = 0; x < 2; x++ ) { for( int y = 0; y < 2; y++ ) { submap *destsm = target_bay.get_submap_at_grid( { x, y, target.z } ); - for( auto vehicle : destsm->vehicles ) { - possible_vehicles.push_back( vehicle ); + for( const auto &vehicle : destsm->vehicles ) { + possible_vehicles.push_back( vehicle.get() ); } } } @@ -1998,9 +1999,8 @@ bool editmap::mapgen_veh_destroy( const tripoint &omt_tgt, vehicle *car_target ) for( int y = 0; y < 2; y++ ) { submap *destsm = target_bay.get_submap_at_grid( { x, y, target.z } ); for( auto &z : destsm->vehicles ) { - if( z == car_target ) { - auto veh = z; - std::unique_ptr old_veh = target_bay.detach_vehicle( veh ); + if( z.get() == car_target ) { + std::unique_ptr old_veh = target_bay.detach_vehicle( z.get() ); g->m.clear_vehicle_cache( omt_tgt.z ); g->m.reset_vehicle_cache( omt_tgt.z ); g->m.clear_vehicle_list( omt_tgt.z ); diff --git a/src/iexamine.cpp b/src/iexamine.cpp index 559a25234e1af..9909e5f0aa9cc 100644 --- a/src/iexamine.cpp +++ b/src/iexamine.cpp @@ -4350,6 +4350,12 @@ void iexamine::smoker_options( player &p, const tripoint &examp ) } } +void iexamine::open_safe( player &, const tripoint &examp ) +{ + add_msg( m_info, _( "You open the unlocked safe. " ) ); + g->m.furn_set( examp, f_safe_o ); +} + /** * Given then name of one of the above functions, returns the matching function * pointer. If no match is found, defaults to iexamine::none but prints out a @@ -4426,7 +4432,8 @@ iexamine_function iexamine_function_from_string(const std::string &function_name { "kiln_full", &iexamine::kiln_full }, { "climb_down", &iexamine::climb_down }, { "autodoc", &iexamine::autodoc }, - { "smoker_options", &iexamine::smoker_options } + { "smoker_options", &iexamine::smoker_options }, + { "open_safe", &iexamine::open_safe } }}; auto iter = function_map.find( function_name ); diff --git a/src/iexamine.h b/src/iexamine.h index 925b5e401569e..0fa9cbe654025 100644 --- a/src/iexamine.h +++ b/src/iexamine.h @@ -107,6 +107,7 @@ void autodoc( player &p, const tripoint &examp ); void on_smoke_out( const tripoint &examp, const time_point &start_time ); //activates end of smoking effects void smoker_options( player &p, const tripoint &examp ); +void open_safe( player &p, const tripoint &examp ); hack_result hack_attempt( player &p ); bool pour_into_keg( const tripoint &pos, item &liquid ); diff --git a/src/iuse_software_lightson.cpp b/src/iuse_software_lightson.cpp index 126a98589ac9e..2590a3d6a2c6d 100644 --- a/src/iuse_software_lightson.cpp +++ b/src/iuse_software_lightson.cpp @@ -163,7 +163,7 @@ int lightson_game::start_game() std::string action = ctxt.handle_input(); if( const cata::optional vec = ctxt.get_direction( action ) ) { position.first = std::min( std::max( position.first + vec->y, 0 ), level_size.first - 1 ); - position.second = std::min( std::max( position.second + vec->y, 0 ), level_size.second - 1 ); + position.second = std::min( std::max( position.second + vec->x, 0 ), level_size.second - 1 ); } else if( action == "TOGGLE_SPACE" || action == "TOGGLE_5" ) { toggle_lights(); win = check_win(); diff --git a/src/map.cpp b/src/map.cpp index c02f01473d550..fe20a227bd290 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -264,10 +264,10 @@ void map::update_vehicle_list( submap *const to, const int zlev ) { // Update vehicle data auto &ch = get_cache( zlev ); - for( auto &elem : to->vehicles ) { - ch.vehicle_list.insert( elem ); + for( const auto &elem : to->vehicles ) { + ch.vehicle_list.insert( elem.get() ); if( !elem->loot_zones.empty() ) { - ch.zone_vehicles.insert( elem ); + ch.zone_vehicles.insert( elem.get() ); } } } @@ -289,17 +289,18 @@ std::unique_ptr map::detach_vehicle( vehicle *veh ) submap *const current_submap = get_submap_at_grid( {veh->smx, veh->smy, veh->smz} ); auto &ch = get_cache( veh->smz ); for( size_t i = 0; i < current_submap->vehicles.size(); i++ ) { - if( current_submap->vehicles[i] == veh ) { + if( current_submap->vehicles[i].get() == veh ) { const int zlev = veh->smz; ch.vehicle_list.erase( veh ); ch.zone_vehicles.erase( veh ); reset_vehicle_cache( zlev ); + std::unique_ptr result = std::move( current_submap->vehicles[i] ); current_submap->vehicles.erase( current_submap->vehicles.begin() + i ); if( veh->tracking_on ) { overmap_buffer.remove_vehicle( veh ); } dirty_vehicle_list.erase( veh ); - return std::unique_ptr( veh ); + return result; } } debugmsg( "detach_vehicle can't find it! name=%s, submap:%d,%d,%d", veh->name.c_str(), veh->smx, @@ -797,11 +798,11 @@ VehicleList map::get_vehicles( const tripoint &start, const tripoint &end ) for( int cy = chunk_sy; cy <= chunk_ey; ++cy ) { for( int cz = chunk_sz; cz <= chunk_ez; ++cz ) { submap *current_submap = get_submap_at_grid( { cx, cy, cz } ); - for( auto &elem : current_submap->vehicles ) { + for( const auto &elem : current_submap->vehicles ) { // Ensure the vehicle z-position is correct elem->smz = cz; wrapped_vehicle w; - w.v = elem; + w.v = elem.get(); w.x = w.v->posx + cx * SEEX; w.y = w.v->posy + cy * SEEY; w.z = cz; @@ -928,7 +929,7 @@ vehicle *map::displace_vehicle( tripoint &p, const tripoint &dp ) point src_offset; point dst_offset; - submap *const src_submap = get_submap_at( src, src_offset ); + submap *src_submap = get_submap_at( src, src_offset ); submap *const dst_submap = get_submap_at( dst, dst_offset ); // first, let's find our position in current vehicles vector @@ -944,9 +945,9 @@ vehicle *map::displace_vehicle( tripoint &p, const tripoint &dp ) vehicle *v = veh_pointer_or_null( veh_at( p ) ); for( auto &smap : grid ) { for( size_t i = 0; i < smap->vehicles.size(); i++ ) { - if( smap->vehicles[i] == v ) { + if( smap->vehicles[i].get() == v ) { our_i = i; - const_cast( src_submap ) = smap; + src_submap = smap; break; } } @@ -957,7 +958,7 @@ vehicle *map::displace_vehicle( tripoint &p, const tripoint &dp ) return nullptr; } // move the vehicle - vehicle *veh = src_submap->vehicles[our_i]; + vehicle *veh = src_submap->vehicles[our_i].get(); // don't let it go off grid if( !inbounds( p2 ) ) { veh->stop(); @@ -1031,8 +1032,9 @@ vehicle *map::displace_vehicle( tripoint &p, const tripoint &dp ) veh->occupied_cache_time = calendar::before_time_starts; if( src_submap != dst_submap ) { veh->set_submap_moved( int( p2.x / SEEX ), int( p2.y / SEEY ) ); - dst_submap->vehicles.push_back( veh ); - src_submap->vehicles.erase( src_submap->vehicles.begin() + our_i ); + auto src_submap_veh_it = src_submap->vehicles.begin() + our_i; + dst_submap->vehicles.push_back( std::move( *src_submap_veh_it ) ); + src_submap->vehicles.erase( src_submap_veh_it ); dst_submap->is_uniform = false; } @@ -4508,13 +4510,15 @@ void map::process_items_in_submap( submap ¤t_submap, const tripoint &gridp void map::process_items_in_vehicles( submap ¤t_submap, const int gridz, map::map_process_func processor, const std::string &signal ) { - const std::vector &veh_in_nonant = current_submap.vehicles; // a copy, important if the vehicle list changes because a // vehicle got destroyed by a bomb (an active item!), this list // won't change, but veh_in_nonant will change. - const std::vector vehicles = veh_in_nonant; + std::vector vehicles; + for( const auto &veh : current_submap.vehicles ) { + vehicles.push_back( veh.get() ); + } for( auto &cur_veh : vehicles ) { - if( std::find( begin( veh_in_nonant ), end( veh_in_nonant ), cur_veh ) == veh_in_nonant.end() ) { + if( !current_submap.contains_vehicle( cur_veh ) ) { // vehicle not in the vehicle list of the nonant, has been // destroyed (or moved to another nonant?) // Can't be sure that it still exists, so skip it @@ -4583,8 +4587,7 @@ void map::process_items_in_vehicle( vehicle &cur_veh, submap ¤t_submap, co // item does not exist anymore, might have been an exploding bomb, // check if the vehicle is still valid (does exist) - const auto &veh_in_nonant = current_submap.vehicles; - if( std::find( begin( veh_in_nonant ), end( veh_in_nonant ), &cur_veh ) == veh_in_nonant.end() ) { + if( !current_submap.contains_vehicle( &cur_veh ) ) { // Nope, vehicle is not in the vehicle list of the submap, // it might have moved to another submap (unlikely) // or be destroyed, anyway it does not need to be processed here @@ -6517,7 +6520,7 @@ void map::loadn( const int gridx, const int gridy, const int gridz, const bool u // Destroy bugged no-part vehicles auto &veh_vec = tmpsub->vehicles; for( auto iter = veh_vec.begin(); iter != veh_vec.end(); ) { - auto *veh = *iter; + vehicle *veh = iter->get(); if( !veh->parts.empty() ) { // Always fix submap coordinates for easier Z-level-related operations veh->smx = gridx; @@ -6530,7 +6533,6 @@ void map::loadn( const int gridx, const int gridy, const int gridz, const bool u overmap_buffer.remove_vehicle( veh ); } dirty_vehicle_list.erase( veh ); - delete( veh ); iter = veh_vec.erase( iter ); } } @@ -6538,14 +6540,14 @@ void map::loadn( const int gridx, const int gridy, const int gridz, const bool u // Update vehicle data if( update_vehicles ) { auto &map_cache = get_cache( gridz ); - for( auto it : tmpsub->vehicles ) { + for( const auto &veh : tmpsub->vehicles ) { // Only add if not tracking already. - if( map_cache.vehicle_list.find( it ) == map_cache.vehicle_list.end() ) { - map_cache.vehicle_list.insert( it ); - if( !it->loot_zones.empty() ) { - map_cache.zone_vehicles.insert( it ); + if( map_cache.vehicle_list.find( veh.get() ) == map_cache.vehicle_list.end() ) { + map_cache.vehicle_list.insert( veh.get() ); + if( !veh->loot_zones.empty() ) { + map_cache.zone_vehicles.insert( veh.get() ); } - add_vehicle_to_cache( it ); + add_vehicle_to_cache( veh.get() ); } } } diff --git a/src/map.h b/src/map.h index 55772f662fd61..68902bcf3a616 100644 --- a/src/map.h +++ b/src/map.h @@ -1497,7 +1497,8 @@ class map const tripoint &s, const tripoint &e, float luminance ); void add_light_from_items( const tripoint &p, std::list::iterator begin, std::list::iterator end ); - vehicle *add_vehicle_to_map( std::unique_ptr veh, bool merge_wrecks ); + std::unique_ptr add_vehicle_to_map( std::unique_ptr veh, + bool merge_wrecks ); // Internal methods used to bash just the selected features // Information on what to bash/what was bashed is read from/written to the bash_params struct diff --git a/src/mapbuffer.cpp b/src/mapbuffer.cpp index 03f04a8b4b15d..f81bd232c065f 100644 --- a/src/mapbuffer.cpp +++ b/src/mapbuffer.cpp @@ -674,9 +674,9 @@ void mapbuffer::deserialize( JsonIn &jsin ) } else if( submap_member_name == "vehicles" ) { jsin.start_array(); while( !jsin.end_array() ) { - vehicle *tmp = new vehicle(); + std::unique_ptr tmp( new vehicle() ); jsin.read( *tmp ); - sm->vehicles.push_back( tmp ); + sm->vehicles.push_back( std::move( tmp ) ); } } else if( submap_member_name == "computers" ) { std::string computer_data = jsin.get_string(); diff --git a/src/mapgen.cpp b/src/mapgen.cpp index 3798283e4c2e2..00b06bee9884e 100644 --- a/src/mapgen.cpp +++ b/src/mapgen.cpp @@ -7087,11 +7087,13 @@ vehicle *map::add_vehicle( const vproto_id &type, const tripoint &p, const int d // that the mount at (0,0) is located at the spawn position. veh->precalc_mounts( 0, dir, point() ); //debugmsg("adding veh: %d, sm: %d,%d,%d, pos: %d, %d", veh, veh->smx, veh->smy, veh->smz, veh->posx, veh->posy); - vehicle *placed_vehicle = add_vehicle_to_map( std::move( veh ), merge_wrecks ); + std::unique_ptr placed_vehicle_up = + add_vehicle_to_map( std::move( veh ), merge_wrecks ); + vehicle *placed_vehicle = placed_vehicle_up.get(); if( placed_vehicle != nullptr ) { submap *place_on_submap = get_submap_at_grid( { placed_vehicle->smx, placed_vehicle->smy, placed_vehicle->smz} ); - place_on_submap->vehicles.push_back( placed_vehicle ); + place_on_submap->vehicles.push_back( std::move( placed_vehicle_up ) ); place_on_submap->is_uniform = false; auto &ch = get_cache( placed_vehicle->smz ); @@ -7112,7 +7114,8 @@ vehicle *map::add_vehicle( const vproto_id &type, const tripoint &p, const int d * @param merge_wrecks Whether crashed vehicles become part of each other * @return The vehicle that was finally placed. */ -vehicle *map::add_vehicle_to_map( std::unique_ptr veh, const bool merge_wrecks ) +std::unique_ptr map::add_vehicle_to_map( + std::unique_ptr veh, const bool merge_wrecks ) { //We only want to check once per square, so loop over all structural parts std::vector frame_indices = veh->all_parts_at_location( "structure" ); @@ -7188,7 +7191,7 @@ vehicle *map::add_vehicle_to_map( std::unique_ptr veh, const bool merge std::unique_ptr old_veh = detach_vehicle( other_veh ); // Try again with the wreckage - vehicle *new_veh = add_vehicle_to_map( std::move( wreckage ), true ); + std::unique_ptr new_veh = add_vehicle_to_map( std::move( wreckage ), true ); if( new_veh != nullptr ) { new_veh->smash(); return new_veh; @@ -7219,7 +7222,7 @@ vehicle *map::add_vehicle_to_map( std::unique_ptr veh, const bool merge veh->smash(); } - return veh.release(); + return veh; } computer *map::add_computer( const tripoint &p, const std::string &name, int security ) @@ -7303,7 +7306,7 @@ void map::rotate( int turns ) int radrot [SEEX * 2][SEEY * 2]; std::vector sprot[MAPSIZE * MAPSIZE]; - std::vector vehrot[MAPSIZE * MAPSIZE]; + std::vector> vehrot[MAPSIZE * MAPSIZE]; std::vector cosmetics_rot[MAPSIZE * MAPSIZE]; std::unique_ptr tmpcomp[MAPSIZE * MAPSIZE]; int field_count[MAPSIZE * MAPSIZE]; @@ -7420,7 +7423,7 @@ void map::rotate( int turns ) for( int gridy = 0; gridy < my_MAPSIZE; gridy++ ) { const size_t i = get_nonant( { gridx, gridy } ); for( auto &v : vehrot[i] ) { - vehicle *veh = v; + vehicle *veh = v.get(); // turn the steering wheel, vehicle::turn does not actually // move the vehicle. veh->turn( turns * 90 ); diff --git a/src/mapgen_functions.cpp b/src/mapgen_functions.cpp index 8b573d022dbd4..629d5163457b2 100644 --- a/src/mapgen_functions.cpp +++ b/src/mapgen_functions.cpp @@ -135,7 +135,6 @@ building_gen_pointer get_mapgen_cfunction( const std::string &ident ) { "basement_generic_layout", &mapgen_basement_generic_layout }, // empty, not bound { "basement_junk", &mapgen_basement_junk }, { "basement_spiders", &mapgen_basement_spiders }, - { "police", &mapgen_police }, { "cave", &mapgen_cave }, { "cave_rat", &mapgen_cave_rat }, { "cavern", &mapgen_cavern }, @@ -3016,123 +3015,6 @@ void mapgen_basement_spiders( map *m, oter_id terrain_type, mapgendata dat, cons m->place_items( "rare", 70, 1, 1, SEEX * 2 - 1, SEEY * 2 - 5, false, turn ); } -void mapgen_police( map *m, oter_id terrain_type, mapgendata dat, const time_point &turn, - float density ) -{ - - ( void )dat; - // } else if (is_ot_type("police", terrain_type)) { - - for( int i = 0; i < SEEX * 2; i++ ) { - for( int j = 0; j < SEEY * 2; j++ ) { - if( ( j == 7 && i != 17 && i != 18 ) || - ( j == 12 && i != 0 && i != 17 && i != 18 && i != SEEX * 2 - 1 ) || - ( j == 14 && ( ( i > 0 && i < 6 ) || i == 9 || i == 13 || i == 17 ) ) || - ( j == 15 && i > 17 && i < SEEX * 2 - 1 ) || - ( j == 17 && i > 0 && i < 17 ) || - ( j == 20 ) ) { - m->ter_set( i, j, t_wall ); - } else if( ( ( i == 0 || i == SEEX * 2 - 1 ) && j > 7 && j < 20 ) || - ( ( i == 5 || i == 10 || i == 16 || i == 19 ) && j > 7 && j < 12 ) || - ( ( i == 5 || i == 9 || i == 13 ) && j > 14 && j < 17 ) || - ( i == 17 && j > 14 && j < 20 ) ) { - m->ter_set( i, j, t_wall ); - } else if( j == 14 && i > 5 && i < 17 && i % 2 == 0 ) { - m->ter_set( i, j, t_bars ); - } else if( ( i > 1 && i < 4 && j > 8 && j < 11 ) || - ( j == 17 && i > 17 && i < 21 ) ) { - m->set( i, j, t_floor, f_counter ); - } else if( ( i == 20 && j > 7 && j < 12 ) || ( j == 8 && i > 19 && i < 23 ) || - ( j == 15 && i > 0 && i < 5 ) ) { - m->set( i, j, t_floor, f_locker ); - } else if( j < 7 ) { - m->ter_set( i, j, t_pavement ); - } else if( j > 20 ) { - m->ter_set( i, j, t_sidewalk ); - } else { - m->ter_set( i, j, t_floor ); - } - } - } - m->ter_set( 17, 7, t_door_locked ); - m->ter_set( 18, 7, t_door_locked ); - m->ter_set( rng( 1, 4 ), 12, t_door_c ); - m->ter_set( rng( 6, 9 ), 12, t_door_c ); - m->ter_set( rng( 11, 15 ), 12, t_door_c ); - m->ter_set( 21, 12, t_door_metal_locked ); - computer *tmpcomp = m->add_computer( tripoint( 22, 13, m->get_abs_sub().z ), _( "PolCom OS v1.47" ), - 3 ); - tmpcomp->add_option( _( "Open Supply Room" ), COMPACT_OPEN, 3 ); - tmpcomp->add_failure( COMPFAIL_SHUTDOWN ); - tmpcomp->add_failure( COMPFAIL_ALARM ); - tmpcomp->add_failure( COMPFAIL_MANHACKS ); - m->ter_set( 7, 14, t_door_c ); - m->ter_set( 11, 14, t_door_c ); - m->ter_set( 15, 14, t_door_c ); - m->ter_set( rng( 20, 22 ), 15, t_door_c ); - m->ter_set( 2, 17, t_door_metal_locked ); - tmpcomp = m->add_computer( tripoint( 22, 13, m->get_abs_sub().z ), _( "PolCom OS v1.47" ), 3 ); - tmpcomp->add_option( _( "Open Evidence Locker" ), COMPACT_OPEN, 3 ); - tmpcomp->add_failure( COMPFAIL_SHUTDOWN ); - tmpcomp->add_failure( COMPFAIL_ALARM ); - tmpcomp->add_failure( COMPFAIL_MANHACKS ); - m->ter_set( 17, 18, t_door_c ); - for( int i = 18; i < SEEX * 2 - 1; i++ ) { - m->ter_set( i, 20, t_window ); - } - if( one_in( 3 ) ) { - for( int j = 16; j < 20; j++ ) { - m->ter_set( SEEX * 2 - 1, j, t_window ); - } - } - int rn = rng( 18, 21 ); - if( one_in( 4 ) ) { - m->ter_set( rn, 20, t_door_c ); - m->ter_set( rn + 1, 20, t_door_c ); - } else { - m->ter_set( rn, 20, t_door_locked ); - m->ter_set( rn + 1, 20, t_door_locked ); - } - rn = rng( 1, 5 ); - m->ter_set( rn, 20, t_window ); - m->ter_set( rn + 1, 20, t_window ); - rn = rng( 10, 14 ); - m->ter_set( rn, 20, t_window ); - m->ter_set( rn + 1, 20, t_window ); - if( one_in( 2 ) ) { - for( int i = 6; i < 10; i++ ) { - m->furn_set( i, 8, f_counter ); - } - } - if( one_in( 3 ) ) { - for( int j = 8; j < 12; j++ ) { - m->furn_set( 6, j, f_counter ); - } - } - if( one_in( 3 ) ) { - for( int j = 8; j < 12; j++ ) { - m->furn_set( 9, j, f_counter ); - } - } - - m->place_items( "kitchen", 40, 6, 8, 9, 11, false, turn ); - m->place_items( "cop_armory", 70, 20, 8, 22, 8, false, turn ); - m->place_items( "cop_gear", 70, 20, 8, 20, 11, false, turn ); - m->place_items( "cop_evidence", 60, 1, 15, 4, 15, false, turn ); - - for( int i = 0; i < SEEX * 2; i++ ) { - for( int j = 0; j < SEEY * 2; j++ ) { - if( m->ter( i, j ) == t_floor && one_in( 80 ) ) { - m->spawn_item( i, j, "badge_deputy" ); - } - } - } - autorotate_down(); - - m->place_spawns( mongroup_id( "GROUP_POLICE" ), 2, 0, 0, SEEX * 2 - 1, SEEX * 2 - 1, density ); - -} - void mapgen_cave( map *m, oter_id, mapgendata dat, const time_point &turn, float density ) { if( dat.above() == "cave" ) { diff --git a/src/npctalk.cpp b/src/npctalk.cpp index a402ea98ed576..ef9fd57037fb4 100644 --- a/src/npctalk.cpp +++ b/src/npctalk.cpp @@ -1454,7 +1454,7 @@ void talk_effect_fun_t::set_u_add_permanent_effect( const std::string &new_effec { function = [new_effect]( const dialogue &d ) { player &u = *d.alpha; - u.add_effect( efftype_id( new_effect ), 0_turns, num_bp, true ); + u.add_effect( efftype_id( new_effect ), 1000_days, num_bp, true ); }; } @@ -1471,7 +1471,7 @@ void talk_effect_fun_t::set_npc_add_permanent_effect( const std::string &new_eff { function = [new_effect]( const dialogue &d ) { npc &p = *d.beta; - p.add_effect( efftype_id( new_effect ), 0_turns, num_bp, true ); + p.add_effect( efftype_id( new_effect ), 1000_days, num_bp, true ); }; } diff --git a/src/player.cpp b/src/player.cpp index a1d8ac0385a79..3540cf365da89 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -12418,6 +12418,7 @@ const targeting_data &player::get_targeting_data() { debugmsg( "Tried to get targeting data before setting it" ); tdata.reset( new targeting_data() ); tdata->relevant = nullptr; + g->u.cancel_activity(); } return *tdata; diff --git a/src/submap.cpp b/src/submap.cpp index 949171229052f..2b81424f454f3 100644 --- a/src/submap.cpp +++ b/src/submap.cpp @@ -1,5 +1,6 @@ #include "submap.h" +#include #include #include "mapdata.h" @@ -19,19 +20,6 @@ submap::submap() is_uniform = false; } -submap::~submap() -{ - delete_vehicles(); -} - -void submap::delete_vehicles() -{ - for( vehicle *veh : vehicles ) { - delete veh; - } - vehicles.clear(); -} - static const std::string COSMETICS_GRAFFITI( "GRAFFITI" ); static const std::string COSMETICS_SIGNAGE( "SIGNAGE" ); // Handle GCC warning: 'warning: returning reference to temporary' @@ -133,3 +121,13 @@ void submap::delete_signage( const point &p ) cosmetics.pop_back(); } } + +bool submap::contains_vehicle( vehicle *veh ) +{ + auto match = std::find_if( + begin( vehicles ), end( vehicles ), + [veh]( const std::unique_ptr &v ) { + return v.get() == veh; + } ); + return match != vehicles.end(); +} diff --git a/src/submap.h b/src/submap.h index 04783b389f422..7f57c244bcefe 100644 --- a/src/submap.h +++ b/src/submap.h @@ -144,6 +144,8 @@ struct submap { // Can be used anytime (prevents code from needing to place sign first.) void delete_signage( const point &p ); + bool contains_vehicle( vehicle * ); + // TODO: make trp private once the horrible hack known as editmap is resolved ter_id ter[SEEX][SEEY]; // Terrain on each square furn_id frn[SEEX][SEEY]; // Furniture on each square @@ -169,16 +171,12 @@ struct submap { * Vehicles on this submap (their (0,0) point is on this submap). * This vehicle objects are deleted by this submap when it gets * deleted. - * TODO: submap owns these pointers, they ought to be unique_ptrs. */ - std::vector vehicles; + std::vector> vehicles; std::unique_ptr comp; basecamp camp; // only allowing one basecamp per submap submap(); - ~submap(); - // delete vehicles and clear the vehicles vector - void delete_vehicles(); }; /** diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 3162ec3f87ea8..a926138ebfb57 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -631,7 +631,8 @@ bool vehicle::has_engine_conflict( const vpart_info *possible_conflict, bool vehicle::is_engine_type( const int e, const itype_id &ft ) const { - return parts[ engines[e] ].ammo_current() == ft; + return parts[engines[e]].ammo_current() == "null" ? parts[engines[e]].fuel_current() == ft : + parts[engines[e]].ammo_current() == ft; } bool vehicle::is_perpetual_type( const int e ) const @@ -3142,7 +3143,7 @@ void vehicle::noise_and_smoke( int load, time_duration time ) if( health < part_info( p ).engine_backfire_threshold() && one_in( 50 + 150 * health ) ) { backfire( e ); } - double j = cur_stress * 6 * to_turns( time ) * muffle; + double j = cur_stress * 6 * to_turns( time ) * muffle * 1000; if( parts[ p ].base.faults.count( fault_filter_air ) ) { bad_filter = true; @@ -3882,7 +3883,7 @@ vehicle *vehicle::find_vehicle( const tripoint &where ) } for( auto &elem : sm->vehicles ) { - vehicle *found_veh = elem; + vehicle *found_veh = elem.get(); point veh_location( found_veh->posx, found_veh->posy ); if( veh_in_sm == veh_location ) { @@ -5283,7 +5284,7 @@ void vehicle::update_time( const time_point &update_to ) continue; } - if( g->is_sheltered( global_part_pos3( part ) ) ) { + if( !is_sm_tile_outside( g->m.getabs( global_part_pos3( part ) ) ) ) { continue; }