From 58be49581ddf3a01b63242c088862ba1c109ffe4 Mon Sep 17 00:00:00 2001 From: houssemferjaoui <50782363+nullptr98@users.noreply.github.com> Date: Sat, 4 Jan 2020 01:55:22 +0100 Subject: [PATCH 01/43] fix bugs related to interacting with bucket-type containers #Summary SUMMARY: Bugfixes "fix bugs related to interacting with bucket-type containers" #purpose of change fixes #36597 and 36680 #describe the solution add a condition to check that the item being used dosnt have a use_action before directly consuming it. #Describe alternatives you've considered None. --- src/player.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/player.cpp b/src/player.cpp index 067d76e01bf1e..b09a0ea6d5ec4 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -5172,7 +5172,7 @@ void player::use( item_location loc ) used.type->can_use( "CATTLEFODDER" ) ) { invoke_item( &used, loc.position() ); - } else if( !used.is_craft() && ( used.is_food() || + } else if( !used.is_craft() && !used.type->has_use() && ( used.is_food() || used.is_medication() || used.get_contained().is_food() || used.get_contained().is_medication() ) ) { From 8207b2cb51c532a0aac3ec34ca4e4506cd092c22 Mon Sep 17 00:00:00 2001 From: Brian-Otten Date: Fri, 10 Jan 2020 01:01:32 +0100 Subject: [PATCH 02/43] Mild riot armor buff Riot armor now covers legs, has 85% coverage, and very slightly more material thickness (soaks). --- data/json/items/armor.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/data/json/items/armor.json b/data/json/items/armor.json index 3600d44c8f6df..fae925499f2f1 100644 --- a/data/json/items/armor.json +++ b/data/json/items/armor.json @@ -654,11 +654,11 @@ "symbol": "[", "looks_like": "kevlar", "color": "light_gray", - "covers": [ "TORSO", "ARMS" ], - "coverage": 70, + "covers": [ "TORSO", "LEGS", "ARMS" ], + "coverage": 85, "encumbrance": 10, "warmth": 10, - "material_thickness": 5, + "material_thickness": 6, "flags": [ "STURDY", "OUTER" ] }, { From 6f88c20c59189bab5127f3a307949712b9942884 Mon Sep 17 00:00:00 2001 From: tenmillimaster <> Date: Thu, 9 Jan 2020 22:41:05 -0600 Subject: [PATCH 03/43] Genericized hand vise, corrected britishisms --- data/json/items/tools.json | 10 +++++----- data/json/tool_qualities.json | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/data/json/items/tools.json b/data/json/items/tools.json index 772ffb8685549..6ee0fa5e863b3 100644 --- a/data/json/items/tools.json +++ b/data/json/items/tools.json @@ -6383,7 +6383,7 @@ [ "BUTCHER", 11 ], [ "FILE", 2 ], [ "REAM", 1 ], - [ "VICE", 1 ] + [ "VISE", 1 ] ], "use_action": [ "HAMMER", "CROWBAR" ] }, @@ -7356,7 +7356,7 @@ { "id": "angular_grinder", "type": "TOOL", - "name": "angular grinder", + "name": "angle grinder", "description": "This widespread powertool is often used for removing excess material or polishing surfaces.", "weight": "2780 g", "volume": "1750 ml", @@ -7383,8 +7383,8 @@ { "id": "hand_vice", "type": "TOOL", - "name": "hand vice", - "description": "This small handheld metal vice is useful for keeping things still.", + "name": "clamp", + "description": "This clamp is useful for keeping things still, especially if you have several of them.", "weight": "320 g", "volume": "500 ml", "price": 500, @@ -7394,7 +7394,7 @@ "material": "steel", "symbol": ";", "color": "light_gray", - "qualities": [ [ "VICE", 1 ] ] + "qualities": [ [ "VISE", 1 ] ] }, { "type": "TOOL", diff --git a/data/json/tool_qualities.json b/data/json/tool_qualities.json index ba4a44568a87d..f66d02060c69d 100644 --- a/data/json/tool_qualities.json +++ b/data/json/tool_qualities.json @@ -249,7 +249,7 @@ }, { "type": "tool_quality", - "id": "VICE", + "id": "VISE", "name": "vicing" }, { From 0c02c94f3a17eb5490dea23f8d1306436937dc7e Mon Sep 17 00:00:00 2001 From: tenmillimaster <> Date: Fri, 10 Jan 2020 06:02:19 -0600 Subject: [PATCH 04/43] ID change --- data/json/construction.json | 2 +- data/json/itemgroups/tools.json | 10 +++++----- data/json/items/migration.json | 5 +++++ data/json/items/tools.json | 2 +- data/json/recipes/recipe_others.json | 2 +- 5 files changed, 13 insertions(+), 8 deletions(-) diff --git a/data/json/construction.json b/data/json/construction.json index 306424fd9555c..0816c4861f0ad 100644 --- a/data/json/construction.json +++ b/data/json/construction.json @@ -3165,7 +3165,7 @@ [ [ "cu_pipe", 4 ] ], [ [ "cable", 12 ] ], [ [ "pipe", 4 ] ], - [ [ "hand_vice", 1 ] ], + [ [ "hand_vise", 1 ] ], [ [ "motor_tiny", 1 ] ], [ [ "medium_storage_battery", 2 ] ], [ [ "frame", 1 ] ], diff --git a/data/json/itemgroups/tools.json b/data/json/itemgroups/tools.json index f8944c0505ea3..182eac5a52e9e 100644 --- a/data/json/itemgroups/tools.json +++ b/data/json/itemgroups/tools.json @@ -61,7 +61,7 @@ [ "recharge_station", 10 ], [ "hand_crank_charger", 25 ], [ "metal_file", 10 ], - [ "hand_vice", 10 ] + [ "hand_vise", 10 ] ] }, { @@ -164,7 +164,7 @@ [ "soldering_iron", 150 ], [ "cordless_drill", 100 ], [ "pin_reamer", 30 ], - [ "hand_vice", 10 ] + [ "hand_vise", 10 ] ] }, { @@ -222,7 +222,7 @@ [ "polisher", 70 ], [ "angular_grinder", 5 ], [ "welder", 10 ], - [ "hand_vice", 10 ] + [ "hand_vise", 10 ] ] }, { @@ -425,7 +425,7 @@ [ "sm_extinguisher", 10 ], [ "toolbox", 5 ], [ "tool_belt", 10 ], - [ "hand_vice", 10 ], + [ "hand_vise", 10 ], [ "wrench", 10 ] ] }, @@ -444,7 +444,7 @@ [ "screwdriver", 35 ], [ "pin_reamer", 10 ], [ "metal_file", 10 ], - [ "hand_vice", 20 ] + [ "hand_vise", 20 ] ] }, { diff --git a/data/json/items/migration.json b/data/json/items/migration.json index d930b0e8d342d..47923b0359ebc 100644 --- a/data/json/items/migration.json +++ b/data/json/items/migration.json @@ -963,5 +963,10 @@ "id": "ballistic_vest", "type": "MIGRATION", "replace": "ballistic_vest_esapi" + }, + { + "id": "hand_vice", + "type": "MIGRATION", + "replace": "hand_vise" } ] diff --git a/data/json/items/tools.json b/data/json/items/tools.json index 6ee0fa5e863b3..7a0e56a24039b 100644 --- a/data/json/items/tools.json +++ b/data/json/items/tools.json @@ -7381,7 +7381,7 @@ "magazine_well": 2 }, { - "id": "hand_vice", + "id": "hand_vise", "type": "TOOL", "name": "clamp", "description": "This clamp is useful for keeping things still, especially if you have several of them.", diff --git a/data/json/recipes/recipe_others.json b/data/json/recipes/recipe_others.json index 0ab7fd5efe5c0..a9960bc1216ce 100644 --- a/data/json/recipes/recipe_others.json +++ b/data/json/recipes/recipe_others.json @@ -3273,7 +3273,7 @@ [ [ "hammer", 1 ] ], [ [ "metal_file", 1 ] ], [ [ "pin_reamer", 1 ] ], - [ [ "hand_vice", 1 ] ] + [ [ "hand_vise", 1 ] ] ] }, { From 7230667b37713eda3298a331a3bce0da4a5683ea Mon Sep 17 00:00:00 2001 From: KorGgenT Date: Fri, 10 Jan 2020 19:01:47 -0500 Subject: [PATCH 05/43] [magiclysm] orichalcum bike --- data/mods/Magiclysm/items/vehicle/frames.json | 13 ++++++ data/mods/Magiclysm/vehicle_groups.json | 42 +++++++++++++++++++ data/mods/Magiclysm/vehicleparts/frames.json | 21 ++++++++++ data/mods/Magiclysm/vehicles/bikes.json | 13 ++++++ 4 files changed, 89 insertions(+) create mode 100644 data/mods/Magiclysm/items/vehicle/frames.json create mode 100644 data/mods/Magiclysm/vehicle_groups.json create mode 100644 data/mods/Magiclysm/vehicleparts/frames.json create mode 100644 data/mods/Magiclysm/vehicles/bikes.json diff --git a/data/mods/Magiclysm/items/vehicle/frames.json b/data/mods/Magiclysm/items/vehicle/frames.json new file mode 100644 index 0000000000000..69558cde01b33 --- /dev/null +++ b/data/mods/Magiclysm/items/vehicle/frames.json @@ -0,0 +1,13 @@ +[ + { + "type": "GENERIC", + "id": "fold_orichalcum_frame", + "name": "foldable orichalcum frame", + "copy-from": "foldframe", + "description": "A folding frame made of orichalcum pipes. Not as light as aluminum, but significantly sturdier.", + "weight": "10 kg", + "color": "yellow", + "material": [ "orichalcum_metal" ], + "price": 10000 + } +] diff --git a/data/mods/Magiclysm/vehicle_groups.json b/data/mods/Magiclysm/vehicle_groups.json new file mode 100644 index 0000000000000..f74515536a6c1 --- /dev/null +++ b/data/mods/Magiclysm/vehicle_groups.json @@ -0,0 +1,42 @@ +[ + { + "type": "vehicle_group", + "id": "city_vehicles", + "vehicles": [ [ "bicycle_orichalcum", 300 ] ] + }, + { + "type": "vehicle_group", + "id": "suburban_home", + "vehicles": [ [ "bicycle_orichalcum", 100 ] ] + }, + { + "type": "vehicle_group", + "id": "dirtlot", + "vehicles": [ [ "bicycle_orichalcum", 50 ] ] + }, + { + "type": "vehicle_group", + "id": "parkinglot", + "vehicles": [ [ "bicycle_orichalcum", 350 ] ] + }, + { + "type": "vehicle_group", + "id": "campground_vehicles", + "vehicles": [ [ "bicycle_orichalcum", 75 ] ] + }, + { + "type": "vehicle_group", + "id": "bikeshop", + "vehicles": [ [ "bicycle_orichalcum", 600 ] ] + }, + { + "type": "vehicle_group", + "id": "back_alley", + "vehicles": [ [ "bicycle_orichalcum", 450 ] ] + }, + { + "type": "vehicle_group", + "id": "showroom_small_vehicles", + "vehicles": [ [ "bicycle_orichalcum", 100 ] ] + } +] diff --git a/data/mods/Magiclysm/vehicleparts/frames.json b/data/mods/Magiclysm/vehicleparts/frames.json new file mode 100644 index 0000000000000..754a951ae829f --- /dev/null +++ b/data/mods/Magiclysm/vehicleparts/frames.json @@ -0,0 +1,21 @@ +[ + { + "id": "folding_orichalcum_frame", + "type": "vehicle_part", + "name": "foldable orichalcum frame", + "item": "fold_orichalcum_frame", + "location": "structure", + "symbol": "h", + "durability": 250, + "description": "A light metal framework, designed to fold. Other vehicle components can be mounted on it. If all the frames and components of a vehicle are foldable, the vehicle can be folding into a small package and picked up as a normal item.", + "folded_volume": "5 L", + "breaks_into": [ { "item": "orichalcum_lump", "count": [ 0, 2 ] } ], + "requirements": { + "install": { "skills": [ [ "mechanics", 2 ], [ "spellcraft", 1 ] ], "time": "60 m", "using": [ [ "welding_standard", 5 ] ] }, + "removal": { "skills": [ [ "mechanics", 2 ], [ "spellcraft", 1 ] ], "time": "30 m", "using": [ [ "vehicle_weld_removal", 1 ] ] }, + "repair": { "skills": [ [ "mechanics", 3 ], [ "spellcraft", 1 ] ], "time": "60 m", "using": [ [ "welding_standard", 5 ] ] } + }, + "flags": [ "INITIAL_PART", "MOUNTABLE", "FOLDABLE" ], + "damage_reduction": { "all": 12 } + } +] diff --git a/data/mods/Magiclysm/vehicles/bikes.json b/data/mods/Magiclysm/vehicles/bikes.json new file mode 100644 index 0000000000000..4da67b14167e8 --- /dev/null +++ b/data/mods/Magiclysm/vehicles/bikes.json @@ -0,0 +1,13 @@ +[ + { + "id": "bicycle_orichalcum", + "type": "vehicle", + "name": "Bicycle", + "blueprint": [ "o#o" ], + "parts": [ + { "x": 0, "y": 0, "parts": [ "folding_orichalcum_frame", "saddle", "horn_bicycle", "foot_pedals" ] }, + { "x": 1, "y": 0, "parts": [ "folding_orichalcum_frame", "wheel_mount_light_steerable", "wheel_bicycle" ] }, + { "x": -1, "y": 0, "parts": [ "folding_orichalcum_frame", "wheel_mount_light", "wheel_bicycle", "basketsm" ] } + ] + } +] From cd4db7138b5c5bf8f186a5cc119d73f75e1bfd70 Mon Sep 17 00:00:00 2001 From: Kevin Granade Date: Fri, 10 Jan 2020 16:26:13 -0800 Subject: [PATCH 06/43] Add a feathub widget --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index acba14262f204..a394db99b8a66 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,7 @@ [![Coverage Status](https://coveralls.io/repos/github/CleverRaven/Cataclysm-DDA/badge.svg?branch=master)](https://coveralls.io/github/CleverRaven/Cataclysm-DDA?branch=master) [![Open Source Helpers](https://www.codetriage.com/cleverraven/cataclysm-dda/badges/users.svg)](https://www.codetriage.com/cleverraven/cataclysm-dda) [![Lines of Code](https://tokei.rs/b1/github/CleverRaven/Cataclysm-DDA?category=code)](https://github.com/XAMPPRocky/tokei) +[![Feature Requests](https://feathub.com/CleverRaven/Cataclysm-DDA?format=svg)](https://feathub.com/CleverRaven/Cataclysm-DDA) # Cataclysm: Dark Days Ahead From 63d33b0d53de91e6a7426b607991b9981b14c877 Mon Sep 17 00:00:00 2001 From: tenmillimaster <> Date: Fri, 10 Jan 2020 19:53:15 -0600 Subject: [PATCH 07/43] Francis X. Clampazzo --- data/json/construction.json | 2 +- data/json/itemgroups/tools.json | 10 +++++----- data/json/items/migration.json | 2 +- data/json/items/tools.json | 2 +- data/json/recipes/recipe_others.json | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/data/json/construction.json b/data/json/construction.json index 0816c4861f0ad..cc002bbc76273 100644 --- a/data/json/construction.json +++ b/data/json/construction.json @@ -3165,7 +3165,7 @@ [ [ "cu_pipe", 4 ] ], [ [ "cable", 12 ] ], [ [ "pipe", 4 ] ], - [ [ "hand_vise", 1 ] ], + [ [ "clamp", 1 ] ], [ [ "motor_tiny", 1 ] ], [ [ "medium_storage_battery", 2 ] ], [ [ "frame", 1 ] ], diff --git a/data/json/itemgroups/tools.json b/data/json/itemgroups/tools.json index 182eac5a52e9e..354acedc91b56 100644 --- a/data/json/itemgroups/tools.json +++ b/data/json/itemgroups/tools.json @@ -61,7 +61,7 @@ [ "recharge_station", 10 ], [ "hand_crank_charger", 25 ], [ "metal_file", 10 ], - [ "hand_vise", 10 ] + [ "clamp", 10 ] ] }, { @@ -164,7 +164,7 @@ [ "soldering_iron", 150 ], [ "cordless_drill", 100 ], [ "pin_reamer", 30 ], - [ "hand_vise", 10 ] + [ "clamp", 10 ] ] }, { @@ -222,7 +222,7 @@ [ "polisher", 70 ], [ "angular_grinder", 5 ], [ "welder", 10 ], - [ "hand_vise", 10 ] + [ "clamp", 10 ] ] }, { @@ -425,7 +425,7 @@ [ "sm_extinguisher", 10 ], [ "toolbox", 5 ], [ "tool_belt", 10 ], - [ "hand_vise", 10 ], + [ "clamp", 10 ], [ "wrench", 10 ] ] }, @@ -444,7 +444,7 @@ [ "screwdriver", 35 ], [ "pin_reamer", 10 ], [ "metal_file", 10 ], - [ "hand_vise", 20 ] + [ "clamp", 20 ] ] }, { diff --git a/data/json/items/migration.json b/data/json/items/migration.json index 47923b0359ebc..f04fea8a9a1c3 100644 --- a/data/json/items/migration.json +++ b/data/json/items/migration.json @@ -967,6 +967,6 @@ { "id": "hand_vice", "type": "MIGRATION", - "replace": "hand_vise" + "replace": "clamp" } ] diff --git a/data/json/items/tools.json b/data/json/items/tools.json index 7a0e56a24039b..42e1e6f929f22 100644 --- a/data/json/items/tools.json +++ b/data/json/items/tools.json @@ -7381,7 +7381,7 @@ "magazine_well": 2 }, { - "id": "hand_vise", + "id": "clamp", "type": "TOOL", "name": "clamp", "description": "This clamp is useful for keeping things still, especially if you have several of them.", diff --git a/data/json/recipes/recipe_others.json b/data/json/recipes/recipe_others.json index a9960bc1216ce..0eefaa12f3504 100644 --- a/data/json/recipes/recipe_others.json +++ b/data/json/recipes/recipe_others.json @@ -3273,7 +3273,7 @@ [ [ "hammer", 1 ] ], [ [ "metal_file", 1 ] ], [ [ "pin_reamer", 1 ] ], - [ [ "hand_vise", 1 ] ] + [ [ "clamp", 1 ] ] ] }, { From fcb57f300d888f5f3c7b8ace486eea6c139ba67a Mon Sep 17 00:00:00 2001 From: curstwist <39442864+curstwist@users.noreply.github.com> Date: Fri, 10 Jan 2020 21:55:54 -0500 Subject: [PATCH 08/43] 3 more houses --- data/json/mapgen/house/house_garage.json | 152 ++++++++------- data/json/mapgen/house/house_garage2.json | 174 ++++++++---------- data/json/mapgen/house/house_garage3.json | 163 +++++++--------- .../overmap/multitile_city_buildings.json | 30 +++ .../overmap_terrain_residential.json | 51 +++++ data/json/regional_map_settings.json | 3 + 6 files changed, 306 insertions(+), 267 deletions(-) diff --git a/data/json/mapgen/house/house_garage.json b/data/json/mapgen/house/house_garage.json index c7d4435dc5c88..7aeba9e9b83bf 100644 --- a/data/json/mapgen/house/house_garage.json +++ b/data/json/mapgen/house/house_garage.json @@ -2,99 +2,91 @@ { "type": "mapgen", "method": "json", - "om_terrain": [ "house" ], - "weight": 300, + "om_terrain": [ "house_garage" ], + "weight": 200, "object": { "fill_ter": "t_floor", "rows": [ - ".............Psssssss...", - ".--vv--;--vv--=======--.", - ".|ooo o o| e|.", - ".| | |.", - ".| | |.", - ".| | |.", - ".| + |.", - ".v | |.", - ".v h | |.", - ".| nn | |.", - ".|S nnh| |.", - ".|COfC |cccccccc|.", - ".|------+-------------|.", - ".|B S| kk|.", - ".|B t| h k|.", - ".| | h |.", - ".| + |.", - ".--vv-| |.", - "......v |.", - "......v |.", - "....T.| @@ |.", - "......| @@ d|.", - "......-----------------.", + "...!!.---.!!.p________..", + ".##oo##*##oo##=======##.", + ".#y yL|~~~~~~~&#.", + ".#r hhhh y|~~~~~~~~#.", + ".#r ffff E|~~~~~~~~#.", + ".#r ffff T|~~~~~~~~#.", + ".# hhhh +~~~~~~~~#.", + ".o |+|~~~~~~~~#.", + ".o7 AAA |>|~~~~~~~~#.", + ".#4 JJJJ |||~~~~~~~~#.", + ".#5 6|~~~~~~~~#.", + ".#1OF23Y 6|qqqqqqqq#.", + ".#|||||| |||||||||||#.", + ".#B S|N RR|d hI#.", + ".#B t|NE + @ Io.", + ".# + y| s@T D#.", + "^#Y88 | sHHH T||||||||#^", + ".##oo## E |y @@ D#.", + ".-----o + @@ b#.", + ".-KG--* xxx y|ET d#.", + ".-----##o###o####o##o##.", + "..X.....................", + "........................", "........................" ], - "set": [ - { "point": "terrain", "id": "t_dirt", "x": [ 0, 0 ], "y": [ 0, 23 ], "repeat": [ 5, 10 ] }, - { "point": "terrain", "id": "t_dirt", "x": [ 23, 23 ], "y": [ 0, 23 ], "repeat": [ 5, 10 ] }, - { "point": "terrain", "id": "t_dirt", "x": [ 0, 23 ], "y": [ 23, 23 ], "repeat": [ 5, 8 ] }, - { "point": "terrain", "id": "t_dirt", "x": [ 0, 14 ], "y": [ 0, 0 ], "repeat": [ 5, 8 ] } - ], + "palettes": [ "standard_domestic_palette" ], "terrain": { - "+": "t_door_c", - "-": "t_wall", - ".": "t_grass", - ";": "t_door_locked", + "%": [ "t_region_shrub", "t_region_shrub_fruit", "t_region_shrub_decorative" ], + "!": "t_region_groundcover_urban", "=": "t_door_metal_locked", - "@": "t_floor", - "B": "t_floor", - "C": "t_floor", - "O": "t_floor", - "P": "t_grass", - "S": "t_floor", - "T": "t_tree", - "c": "t_floor", - "d": "t_floor", - "e": "t_gates_mech_control", - "f": "t_floor", - "h": "t_floor", - "k": "t_floor", - "n": "t_floor", - "o": "t_floor", - "s": "t_sidewalk", - "v": "t_window_domestic", - "|": "t_wall" - }, - "furniture": { - "@": "f_bed", - "B": "f_bathtub", - "C": "f_cupboard", - "O": "f_oven", - "P": "f_mailbox", - "S": "f_sink", - "c": "f_counter", - "d": "f_dresser", - "f": "f_fridge", - "h": "f_chair", - "k": "f_desk", - "n": "f_table", - "o": "f_bookcase" + "_": "t_pavement", + "&": "t_gates_control_brick", + "G": "t_sidewalk", + "K": "t_sidewalk", + "~": "t_thconc_floor", + "q": "t_thconc_floor" }, - "toilets": { "t": { } }, - "items": { "P": { "item": "mail", "chance": 30, "repeat": [ 2, 5 ] } }, + "furniture": { "!": "f_region_flower" }, "place_loot": [ - { "group": "bed", "x": [ 13, 14 ], "y": [ 20, 21 ], "chance": 90, "repeat": [ 1, 3 ] }, - { "group": "bedroom", "x": [ 6, 21 ], "y": [ 13, 20 ], "chance": 80, "repeat": [ 1, 4 ] }, - { "group": "livingroom", "x": [ 1, 12 ], "y": [ 2, 6 ], "chance": 90, "repeat": [ 1, 5 ] }, - { "group": "guns_pistol_common", "x": [ 6, 21 ], "y": [ 9, 10 ], "chance": 5, "ammo": 90, "magazine": 100 }, - { "group": "dresser", "x": [ 21, 21 ], "y": [ 21, 21 ], "chance": 85, "repeat": [ 1, 4 ] }, - { "group": "kitchen", "x": [ 1, 12 ], "y": [ 8, 11 ], "chance": 75, "repeat": [ 1, 3 ] }, - { "group": "fridge", "x": [ 4, 4 ], "y": [ 11, 11 ], "chance": 90, "repeat": [ 1, 5 ] }, { "group": "mischw", "x": [ 13, 20 ], "y": [ 2, 11 ], "chance": 80, "repeat": [ 1, 4 ] }, - { "group": "oven", "x": [ 3, 3 ], "y": [ 11, 11 ], "chance": 75, "repeat": [ 1, 3 ] }, - { "group": "softdrugs", "x": [ 2, 4 ], "y": [ 13, 16 ], "chance": 75, "repeat": [ 1, 3 ] }, - { "group": "cleaning", "x": [ 2, 4 ], "y": [ 13, 16 ], "chance": 90, "repeat": [ 1, 2 ] } + { "item": "television", "x": 10, "y": 19, "chance": 100 } ], "place_monsters": [ { "monster": "GROUP_ZOMBIE", "x": [ 2, 21 ], "y": [ 2, 21 ], "chance": 2 } ], "place_vehicles": [ { "vehicle": "suburban_home", "x": 17, "y": 6, "chance": 15, "fuel": 70, "status": 0, "rotation": 90 } ] } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": "house_garage_roof", + "object": { + "fill_ter": "t_shingle_flat_roof", + "rows": [ + " ", + " |222222222222222222223 ", + " |....................3 ", + " |....................3 ", + " |....................3 ", + " |....................3 ", + " |....................3 ", + " |....................3 ", + " |....................3 ", + " |....................3 ", + " |....................3 ", + " |....................3 ", + " |....................3 ", + " |....................3 ", + " |....................3 ", + " |..&.................3 ", + " 5....................5 ", + " |-----...............3 ", + " |..=............3 ", + " |...............3 ", + " |---------------3 ", + " ", + " ", + " " + ], + "palettes": [ "roof_palette" ], + "terrain": { ".": "t_shingle_flat_roof" } + } } ] diff --git a/data/json/mapgen/house/house_garage2.json b/data/json/mapgen/house/house_garage2.json index 26147767fcb08..2bb4ac46cd7c2 100644 --- a/data/json/mapgen/house/house_garage2.json +++ b/data/json/mapgen/house/house_garage2.json @@ -2,115 +2,99 @@ { "type": "mapgen", "method": "json", - "om_terrain": [ "house" ], + "om_terrain": [ "house_garage2" ], "weight": 300, "object": { "fill_ter": "t_floor", "rows": [ - "............p.sssssss...", - ".QQQQQQQ99QQQ-=======--.", - ".q...........| e|.", - ".q...........| |.", - ".q...........| |.", - ".q...........| |.", - ".q...........; |.", - ".q...........| Z|.", - ".q...........| |.", - ".q...........| r|.", - ".q...........| c|.", - ".q...........| c|.", - ".|-----v;;v-----+-----|.", - ".|B S|Y |D f|.", - ".|B t| | nnh Ov.", - ".| | + nnh cv.", - ".| + | c|.", - ".--vv-|o |-----+----|.", - "......|o + n|.", - "......|o ?| @@|.", - "....T.| ?| @@|.", - "......| ?| d|.", - "......--vv-------vv----.", + "............p._______%..", + ".$$$$$$$??$$$#=======##.", + ".$.[...!``!..#~~~~~~~&#.", + ".$..X..!``![.#~~~~~~~~#.", + ".$.....!``!..#~~~~~~~~#.", + ".$.....!``!..#~~~~~~~~#.", + ".$.....!``!..*~~~~~~~~#.", + ".$...[.!``!..#~~~~~~~A#.", + ".$.....!``!..#~~~~~~~~#.", + ".$.....!``!..#~~~~~~~q#.", + ".$.[...!``!..#||~~~~~q#.", + ".$.....!``!.^#>+~~~NNq#.", + ".######o**o###||+|||||#.", + ".#B S|L y YF47#.", + ".#B t| hhh Oo.", + ".# + fff 5o.", + ".#b88Y| hhh 66n321#.", + ".##oo##| |||||||||#.", + ".....^#y + s#.", + ".[....#x H R|d @@#.", + "....[.#x H R|D @@#.", + "..u...# EsET R|y s#.", + "......##oo#######oo####.", "........................" ], - "set": [ - { "point": "terrain", "id": "t_dirt", "x": [ 0, 0 ], "y": [ 0, 23 ], "repeat": [ 5, 10 ] }, - { "point": "terrain", "id": "t_dirt", "x": [ 23, 23 ], "y": [ 0, 23 ], "repeat": [ 5, 10 ] }, - { "point": "terrain", "id": "t_dirt", "x": [ 0, 23 ], "y": [ 23, 23 ], "repeat": [ 5, 8 ] }, - { "point": "terrain", "id": "t_dirt", "x": [ 0, 14 ], "y": [ 0, 0 ], "repeat": [ 5, 8 ] }, - { "point": "terrain", "id": "t_dirt", "x": [ 2, 11 ], "y": [ 2, 11 ], "repeat": [ 8, 12 ] } - ], + "palettes": [ "standard_domestic_palette" ], "terrain": { - "+": "t_door_c", - "-": "t_wall", - ".": "t_grass", - "p": "t_grass", - "9": "t_fencegate_c", - ";": "t_door_locked", + "%": [ "t_region_shrub", "t_region_shrub_fruit", "t_region_shrub_decorative" ], + "[": [ [ "t_region_tree_fruit", 2 ], [ "t_region_tree_nut", 2 ], "t_region_tree_shade" ], + "!": "t_region_groundcover_urban", "=": "t_door_metal_locked", - "?": "t_floor", - "@": "t_floor", - "B": "t_floor", - "Z": "t_floor", - "D": "t_floor", - "Y": "t_floor", - "O": "t_floor", - "Q": "t_fence_h", - "S": "t_floor", - "T": "t_tree", - "c": "t_floor", - "d": "t_floor", - "e": "t_gates_mech_control", - "f": "t_floor", - "h": "t_floor", - "k": "t_floor", - "n": "t_floor", - "o": "t_floor", - "q": "t_fence_v", - "r": "t_floor", - "s": "t_sidewalk", - "v": "t_window_domestic", - "|": "t_wall" - }, - "furniture": { - "?": "f_sofa", - "@": "f_bed", - "B": "f_bathtub", - "D": "f_trashcan", - "O": "f_oven", - "S": "f_sink", - "p": "f_mailbox", - "Z": "f_stool", - "Y": "f_rack_coat", - "c": "f_counter", - "d": "f_dresser", - "f": "f_fridge", - "h": "f_chair", - "k": "f_desk", - "n": "f_table", - "o": "f_bookcase", - "r": "f_rack" + "_": "t_pavement", + "&": "t_gates_control_brick", + "G": "t_sidewalk", + "K": "t_sidewalk", + "~": "t_thconc_floor", + "q": "t_thconc_floor", + "A": "t_thconc_floor", + "N": "t_thconc_floor", + "`": "t_concrete", + "?": "t_fencegate_c", + "$": "t_fence" }, - "toilets": { "t": { } }, - "items": { "Y": { "item": "coat_rack", "chance": 35 }, "p": { "item": "mail", "chance": 30, "repeat": [ 2, 5 ] } }, + "furniture": { "!": "f_region_flower" }, "place_loot": [ - { "group": "bed", "x": [ 19, 20 ], "y": [ 19, 20 ], "chance": 90, "repeat": [ 1, 3 ] }, - { "group": "bedroom", "x": [ 15, 21 ], "y": [ 18, 21 ], "chance": 80, "repeat": [ 1, 4 ] }, - { "group": "livingroom", "x": [ 7, 13 ], "y": [ 18, 21 ], "chance": 90, "repeat": [ 1, 5 ] }, - { "group": "guns_pistol_common", "x": [ 21, 21 ], "y": [ 21, 21 ], "chance": 5, "ammo": 90, "magazine": 100 }, - { "group": "homebooks", "x": [ 7, 7 ], "y": [ 16, 18 ], "chance": 75, "repeat": [ 1, 2 ] }, - { "group": "dresser", "x": [ 21, 21 ], "y": [ 21, 21 ], "chance": 85, "repeat": [ 1, 4 ] }, - { "group": "kitchen", "x": [ 13, 21 ], "y": [ 16, 13 ], "chance": 65, "repeat": [ 1, 3 ] }, - { "group": "fridge", "x": [ 21, 21 ], "y": [ 13, 13 ], "chance": 90, "repeat": [ 1, 5 ] }, - { "group": "kitchen", "x": [ 21, 21 ], "y": [ 15, 16 ], "chance": 85, "repeat": [ 1, 2 ] }, - { "group": "trash_forest", "x": [ 11, 11 ], "y": [ 12, 12 ], "chance": 70, "repeat": [ 1, 2 ] }, + { "group": "mischw", "x": [ 13, 20 ], "y": [ 2, 11 ], "chance": 80, "repeat": [ 1, 4 ] }, + { "item": "television", "x": 7, "y": 19, "chance": 100 }, { "group": "home_hw", "x": [ 13, 20 ], "y": [ 2, 11 ], "chance": 65, "repeat": [ 1, 4 ] }, - { "group": "home_hw", "x": [ 21, 21 ], "y": [ 9, 11 ], "chance": 85, "repeat": [ 1, 2 ] }, - { "group": "oven", "x": [ 21, 21 ], "y": [ 14, 14 ], "chance": 75, "repeat": [ 1, 3 ] }, - { "group": "softdrugs", "x": [ 2, 4 ], "y": [ 13, 16 ], "chance": 75, "repeat": [ 1, 3 ] }, - { "group": "cleaning", "x": [ 2, 4 ], "y": [ 13, 16 ], "chance": 90, "repeat": [ 1, 2 ] } + { "group": "home_hw", "x": [ 21, 21 ], "y": [ 9, 11 ], "chance": 85, "repeat": [ 1, 2 ] } ], "place_monsters": [ { "monster": "GROUP_ZOMBIE", "x": [ 2, 21 ], "y": [ 2, 21 ], "chance": 2 } ], "place_vehicles": [ { "vehicle": "suburban_home", "x": 17, "y": 6, "chance": 15, "fuel": 80, "status": 0, "rotation": 90 } ] } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": "house_garage2_roof", + "object": { + "fill_ter": "t_shingle_flat_roof", + "rows": [ + " ", + " |222222223 ", + " |........3 ", + " |........3 ", + " |........3 ", + " |........3 ", + " |........3 ", + " |........3 ", + " |........3 ", + " |........3 ", + " |........3 ", + " |........3 ", + " |222222222225........3 ", + " |....................3 ", + " |....................3 ", + " |.......&............3 ", + " |.................=..3 ", + " |----5...............3 ", + " |...............3 ", + " |...............3 ", + " |...............3 ", + " |...............3 ", + " |---------------3 ", + " " + ], + "palettes": [ "roof_palette" ], + "terrain": { ".": "t_shingle_flat_roof" } + } } ] diff --git a/data/json/mapgen/house/house_garage3.json b/data/json/mapgen/house/house_garage3.json index 2d10605a4ead2..932b26f7db8d8 100644 --- a/data/json/mapgen/house/house_garage3.json +++ b/data/json/mapgen/house/house_garage3.json @@ -2,112 +2,91 @@ { "type": "mapgen", "method": "json", - "om_terrain": [ "house" ], + "om_terrain": [ "house_garage3" ], "weight": 300, "object": { "fill_ter": "t_floor", "rows": [ - "..............sssssss.#.", - "..............sssssss.#.", - "..............sssssss.#.", - "..............sssssss.#.", - "..............sssssss.#.", - "...I..........sssssss.#.", - "..............sssssss.#.", - "..............sssssss.#.", - "..............sssssss.#.", - "..............sssssss.#.", - "..............sssssss.#.", - "...........p..sssssss.#.", - ".|-----v;;v-----+-----|.", - ".|B S| |D f|.", - ".vB t|Y | nnh Ov.", - ".v | + nnh cv.", - ".| + |l c|.", - ".-----|o |-----+----|.", - ".q |o + n|.", - ".q h|o n h| @@|.", - ".q h| n | @@|.", - ".q ; n h| d|.", - ".IQQQQ--vv-------vv----.", + "............p.```````.%.", + "........[.....```````.%.", + "..............```````.%.", + "...[.......[..```````.%.", + "..............```````.%.", + ".......[......```````.%.", + "..............```````.%.", + "..[.......[...```````.%.", + "..............```````.%.", + ".....[........```````.%.", + "..............```````.%.", + ".^!!!!.%..%...```````.%.", + ".######o**o#####*######.", + ".#B S|L T|Y 66F7#.", + ".oB t| | hfh Oo.", + ".oy | + hfh 5o.", + ".#Q88 + |A 4321#.", + ".######R ||||||+||||#.", + ".$~~~~#R | D n#.", + ".$~~~G#k T| + @@#.", + ".$~~~K#R llE|+|I @@#.", + ".$~~~~* HHHs|>|Ih d#^", + ".&$$$$##oo#######oo####.", "........................" ], - "set": [ - { "point": "terrain", "id": "t_dirt", "x": [ 0, 0 ], "y": [ 0, 23 ], "repeat": [ 5, 10 ] }, - { "point": "terrain", "id": "t_dirt", "x": [ 23, 23 ], "y": [ 0, 23 ], "repeat": [ 5, 10 ] }, - { "point": "terrain", "id": "t_dirt", "x": [ 0, 23 ], "y": [ 23, 23 ], "repeat": [ 5, 8 ] }, - { "point": "terrain", "id": "t_dirt", "x": [ 0, 14 ], "y": [ 0, 0 ], "repeat": [ 5, 8 ] }, - { "point": "terrain", "id": "t_dirt", "x": [ 2, 11 ], "y": [ 2, 11 ], "repeat": [ 8, 12 ] }, - { "point": "terrain", "id": "t_door_locked_interior", "x": [ 6, 6 ], "y": [ 21, 21 ], "repeat": [ 0, 1 ] } - ], + "palettes": [ "standard_domestic_palette" ], "terrain": { - "#": "t_shrub", - "+": "t_door_c", - "-": "t_wall", - ".": "t_grass", - "p": "t_grass", - ";": "t_door_locked", - "@": "t_floor", - "B": "t_floor", - "D": "t_floor", - "I": "t_column", - "O": "t_floor", - "Q": "t_fence_h", - "S": "t_floor", - "c": "t_floor", - "d": "t_floor", - "f": "t_floor", - "l": "t_floor", - "Y": "t_floor", - "h": "t_floor", - "k": "t_floor", - "n": "t_floor", - "o": "t_floor", - "q": "t_fence_v", - "s": "t_sidewalk", - "v": "t_window_domestic", - "|": "t_wall" - }, - "furniture": { - "@": "f_bed", - "B": "f_bathtub", - "D": "f_trashcan", - "O": "f_oven", - "p": "f_mailbox", - "Y": "f_rack_coat", - "S": "f_sink", - "l": "f_stool", - "c": "f_counter", - "d": "f_dresser", - "f": "f_fridge", - "h": "f_chair", - "k": "f_desk", - "n": "f_table", - "o": "f_bookcase" - }, - "toilets": { "t": { } }, - "items": { - "Y": { "item": "coat_rack", "chance": 35, "repeat": [ 1, 4 ] }, - "p": { "item": "mail", "chance": 30, "repeat": [ 2, 5 ] } + "%": [ "t_region_shrub", "t_region_shrub_fruit", "t_region_shrub_decorative" ], + "[": [ [ "t_region_tree_fruit", 2 ], [ "t_region_tree_nut", 2 ], "t_region_tree_shade" ], + "!": "t_region_groundcover_urban", + "&": "t_column", + "G": "t_thconc_floor", + "K": "t_thconc_floor", + "~": "t_thconc_floor", + "`": "t_concrete", + "$": "t_fence" }, + "furniture": { "!": "f_region_flower" }, "place_loot": [ - { "group": "bed", "x": [ 20, 21 ], "y": [ 19, 20 ], "chance": 90, "repeat": [ 1, 3 ] }, - { "group": "bedroom", "x": [ 15, 21 ], "y": [ 18, 21 ], "chance": 80, "repeat": [ 1, 4 ] }, - { "group": "livingroom", "x": [ 7, 13 ], "y": [ 18, 21 ], "chance": 90, "repeat": [ 1, 5 ] }, { "group": "guns_pistol_common", "x": [ 15, 21 ], "y": [ 18, 21 ], "chance": 5, "ammo": 90, "magazine": 100 }, - { "group": "homebooks", "x": [ 7, 7 ], "y": [ 16, 18 ], "chance": 75, "repeat": [ 1, 2 ] }, - { "group": "dresser", "x": [ 21, 21 ], "y": [ 21, 21 ], "chance": 85, "repeat": [ 1, 4 ] }, - { "group": "kitchen", "x": [ 13, 21 ], "y": [ 16, 13 ], "chance": 70, "repeat": [ 1, 3 ] }, - { "group": "fridge", "x": [ 21, 21 ], "y": [ 13, 13 ], "chance": 90, "repeat": [ 1, 5 ] }, - { "group": "kitchen", "x": [ 21, 21 ], "y": [ 15, 16 ], "chance": 85, "repeat": [ 1, 2 ] }, - { "group": "trash_forest", "x": [ 11, 11 ], "y": [ 12, 12 ], "chance": 70, "repeat": [ 1, 3 ] }, - { "group": "oven", "x": [ 21, 21 ], "y": [ 14, 14 ], "chance": 75, "repeat": [ 1, 3 ] }, - { "group": "softdrugs", "x": [ 2, 4 ], "y": [ 13, 16 ], "chance": 75, "repeat": [ 1, 3 ] }, - { "group": "cleaning", "x": [ 2, 4 ], "y": [ 13, 16 ], "chance": 90, "repeat": [ 1, 2 ] }, { "item": "american_flag", "x": [ 4, 4 ], "y": [ 5, 5 ], "chance": 2 } ], "place_monsters": [ { "monster": "GROUP_ZOMBIE", "x": [ 2, 21 ], "y": [ 2, 21 ], "chance": 2 } ], "place_vehicles": [ { "vehicle": "suburban_home", "x": 17, "y": 6, "chance": 10, "rotation": 270 } ] } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": "house_garage3_roof", + "object": { + "fill_ter": "t_shingle_flat_roof", + "rows": [ + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " 5222222222222222222223 ", + " |....................3 ", + " |....................3 ", + " |....................3 ", + " |..............=.....3 ", + " |....................3 ", + " |....................3 ", + " |.....~........&.....3 ", + " |....................3 ", + " |....................5 ", + " |--------------------3 ", + " " + ], + "palettes": [ "roof_palette" ], + "terrain": { ".": "t_shingle_flat_roof" } + } } ] diff --git a/data/json/overmap/multitile_city_buildings.json b/data/json/overmap/multitile_city_buildings.json index ba4f90133a46a..802c0066efa0a 100644 --- a/data/json/overmap/multitile_city_buildings.json +++ b/data/json/overmap/multitile_city_buildings.json @@ -2816,5 +2816,35 @@ { "point": [ 0, 0, 1 ], "overmap": "house_04_roof_north" }, { "point": [ 0, 0, -1 ], "overmap": "house_04_basement_north" } ] + }, + { + "type": "city_building", + "id": "house_garage", + "locations": [ "land" ], + "overmaps": [ + { "point": [ 0, 0, 0 ], "overmap": "house_garage_north" }, + { "point": [ 0, 0, 1 ], "overmap": "house_garage_roof_north" }, + { "point": [ 0, 0, -1 ], "overmap": "basement" } + ] + }, + { + "type": "city_building", + "id": "house_garage2", + "locations": [ "land" ], + "overmaps": [ + { "point": [ 0, 0, 0 ], "overmap": "house_garage2_north" }, + { "point": [ 0, 0, 1 ], "overmap": "house_garage2_roof_north" }, + { "point": [ 0, 0, -1 ], "overmap": "basement" } + ] + }, + { + "type": "city_building", + "id": "house_garage3", + "locations": [ "land" ], + "overmaps": [ + { "point": [ 0, 0, 0 ], "overmap": "house_garage3_north" }, + { "point": [ 0, 0, 1 ], "overmap": "house_garage3_roof_north" }, + { "point": [ 0, 0, -1 ], "overmap": "basement" } + ] } ] diff --git a/data/json/overmap/overmap_terrain/overmap_terrain_residential.json b/data/json/overmap/overmap_terrain/overmap_terrain_residential.json index e17ccd1d0e06c..0876ab0f0ed06 100644 --- a/data/json/overmap/overmap_terrain/overmap_terrain_residential.json +++ b/data/json/overmap/overmap_terrain/overmap_terrain_residential.json @@ -930,5 +930,56 @@ "copy-from": "generic_city_building", "color": "light_green", "see_cost": 2 + }, + { + "type": "overmap_terrain", + "id": "house_garage", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2, + "flags": [ "SIDEWALK", "GENERIC_LOOT" ] + }, + { + "type": "overmap_terrain", + "id": "house_garage_roof", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2 + }, + { + "type": "overmap_terrain", + "id": "house_garage2", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2, + "flags": [ "SIDEWALK", "GENERIC_LOOT" ] + }, + { + "type": "overmap_terrain", + "id": "house_garage2_roof", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2 + }, + { + "type": "overmap_terrain", + "id": "house_garage3", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2, + "flags": [ "SIDEWALK", "GENERIC_LOOT" ] + }, + { + "type": "overmap_terrain", + "id": "house_garage3_roof", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2 } ] diff --git a/data/json/regional_map_settings.json b/data/json/regional_map_settings.json index 6f730774df734..bf10c42c5f5b3 100644 --- a/data/json/regional_map_settings.json +++ b/data/json/regional_map_settings.json @@ -563,6 +563,9 @@ "house_17": 50, "house_18": 50, "house_19": 50, + "house_garage": 50, + "house_garage2": 50, + "house_garage3": 50, "house_toolshed": 50, "house_suicide": 20, "house_quiverfull": 30, From 9d24e1ebc83820d9267940311483ac0995a757e1 Mon Sep 17 00:00:00 2001 From: anothersimulacrum Date: Sat, 5 Oct 2019 23:08:33 +0000 Subject: [PATCH 09/43] RetroDays update --- data/json/items/comestibles/meat_dishes.json | 1 + gfx/RetroDaysTileset/tile_config.json | 247 ++++++++++++++++--- gfx/RetroDaysTileset/tiles.png | Bin 106006 -> 109731 bytes gfx/RetroDaysTileset/tiles_20x20.png | Bin 12687 -> 13691 bytes 4 files changed, 210 insertions(+), 38 deletions(-) diff --git a/data/json/items/comestibles/meat_dishes.json b/data/json/items/comestibles/meat_dishes.json index f960fef8bb777..5f212ff45278b 100644 --- a/data/json/items/comestibles/meat_dishes.json +++ b/data/json/items/comestibles/meat_dishes.json @@ -91,6 +91,7 @@ "spoils_in": "2 days", "comestible_type": "FOOD", "symbol": "%", + "looks_like": "sausage", "quench": -1, "calories": 297, "description": "A type of German sausage made of finely chopped meat and meant to be pan fried or roasted. Better eat it hot and fresh.", diff --git a/gfx/RetroDaysTileset/tile_config.json b/gfx/RetroDaysTileset/tile_config.json index 4d6e9e315aa9f..9cbee89ebd6d9 100644 --- a/gfx/RetroDaysTileset/tile_config.json +++ b/gfx/RetroDaysTileset/tile_config.json @@ -1472,7 +1472,7 @@ { "id": "t_gas_pump_smashed", "fg": 583, "rotates": false }, { "id": "t_slot_machine", "fg": 584, "rotates": false }, { "id": "t_atm", "fg": 585, "rotates": false }, - { "id": [ "t_card_science", "t_card_military" ], "fg": 586, "rotates": false }, + { "id": [ "t_card_science", "t_card_military", "t_card_robofac" ], "fg": 586, "rotates": false }, { "id": "t_card_reader_broken", "fg": 587, "rotates": false }, { "id": [ "t_sliding_concrete_wall_control", "f_aut_gas_console_o", "electronics_controls", "t_console_broken" ], @@ -2248,6 +2248,7 @@ "id": [ "recipe_atomic_battery", "paper", + "scorecard", "sarcophagus_access_code", "flyer", "survnote", @@ -2274,7 +2275,9 @@ "protein_drink", "hflesh_drink", "spider_steak_soup", - "oxygen" + "oxygen", + "oxygen_tank", + "oxygen_cylinder" ], "fg": 883, "rotates": false @@ -2600,6 +2603,10 @@ "seed_cotton_boll", "seed_tomato", "dry_beans", + "dry_lentils", + "lentils_cooked", + "raw_lentils", + "seed_lentils", "beans_cooked", "pelmeni", "seed_carrot", @@ -2626,7 +2633,8 @@ "ravioli", "mre_ravioli", "seed_weed", - "seed_chili_pepper" + "seed_chili_pepper", + "pistachio" ], "fg": 937, "rotates": false @@ -2651,7 +2659,9 @@ "macaroni_raw", "seed_onion", "mre_veggy", - "hickory_nut" + "hickory_nut", + "pistachio_roasted", + "pistachio_unshelled" ], "fg": 939, "rotates": false @@ -3141,8 +3151,8 @@ { "id": [ "styrofoam_cup", "cup_plastic" ], "fg": 1140, "rotates": false }, { "id": "cup_plastic_unsealed", "fg": 1141, "rotates": false }, { "id": "glass", "fg": 1142, "rotates": false }, - { "id": "ceramic_cup", "fg": 1143, "rotates": false }, - { "id": [ "glass_tube_small", "test_tube" ], "fg": 1144, "rotates": false }, + { "id": [ "ceramic_cup", "ceramic_mug" ], "fg": 1143, "rotates": false }, + { "id": [ "glass_tube_small", "test_tube", "test_tube_micro" ], "fg": 1144, "rotates": false }, { "id": [ "rubber_slug", "canister_goo", "bot_fungal_boil", "bot_fungal_boil_egg" ], "fg": 1145, @@ -3271,7 +3281,8 @@ "knife_rm42", "honey_scraper", "bio_blade_weapon", - "kris_fake" + "kris_fake", + "knife_folding" ], "fg": 1193, "rotates": false @@ -3771,7 +3782,7 @@ { "id": "triffid_sap", "fg": 1292, "rotates": false }, { "id": "atomic_light", "fg": 1293, "rotates": false }, { "id": [ "atomic_light_off", "baseball" ], "fg": 1294, "rotates": false }, - { "id": "lens", "fg": 1295, "rotates": false }, + { "id": [ "lens", "lens_small" ], "fg": 1295, "rotates": false }, { "id": [ "pool_ball", "bowling_ball", "pool_ball" ], "fg": 1296, "rotates": false }, { "id": "vp_atomic_light", @@ -3820,7 +3831,7 @@ "glock_drum_100rd", "glock_drum_50rd", "ppshdrum", - "saiga30mag_410", + "saiga410mag_30rd", "8x40_250_mag" ], "fg": 1309 @@ -3835,7 +3846,8 @@ "akmbigmag", "saiga30mag", "ppshmag", - "saiga10mag_410", + "saiga410mag_10rd", + "ruger30", "8x40_25_mag" ], "fg": 1310 @@ -3874,12 +3886,44 @@ "p226mag_15rd_357sig", "af2011a1mag", "m1991_38smag", - "glockbigmag" + "glockbigmag", + "bhp9mag_15rd", + "bhp9mag_13rd", + "bhp40mag", + "hptjhpmag", + "hptjcpmag", + "m1911mag_10rd_38super", + "fn1910mag", + "p320mag_14rd_357sig", + "p320mag_17rd_9x19mm", + "p38mag", + "j22mag", + "cz75mag_12rd", + "cz75mag_20rd", + "cz75mag_26rd", + "wp22mag", + "rugerlcpmag", + "hptc9mag_8rd", + "hptc9mag_10rd", + "hptc9mag_15rd", + "hptcf380mag_8rd", + "hptcf380mag_10rd", + "kp32mag", + "ppq9mag_15rd", + "ppq9mag_10rd", + "ppq40mag_12rd", + "ppq40mag_10rd", + "ppq45mag", + "ppq9mag_17rd", + "ppq40mag_14rd", + "ccpmag", + "kpf9mag", + "kp3atmag" ], "fg": 1317 }, { "id": "hd_battery", "fg": 1318, "rotates": false }, - { "id": "m107a1mag", "fg": 1319 }, + { "id": [ "m107a1mag", "as50mag", "tac50mag" ], "fg": 1319 }, { "id": [ "ruger1022bigmag", "mp5mag" ], "fg": 1320 }, { "id": [ "smg_22_mag", "smg_38_mag", "smg_40_mag", "smg_45_mag", "smg_9mm_mag", "brute_shot_mag", "nailmag" ], @@ -3888,7 +3932,7 @@ { "id": "pressurized_tank", "fg": 1322, "rotates": false }, { "id": "rm4502", "fg": 1323, "rotates": false }, { "id": "rm4504", "fg": 1324, "rotates": false }, - { "id": [ "survivor223mag", "m14smallmag", "blrmag", "m2010mag", "ruger1022mag" ], "fg": 1325 }, + { "id": [ "survivor223mag", "m14smallmag", "blrmag", "m2010mag", "ruger1022mag", "ruger5" ], "fg": 1325 }, { "id": [ "battery_motorbike", "battery_car", "medium_storage_battery", "storage_battery", "small_storage_battery" ], "fg": 1326, @@ -3923,7 +3967,8 @@ "ump45mag", "hk46mag", "hk46bigmag", - "tec9mag" + "tec9mag", + "mac11mag" ], "fg": 1328 }, @@ -4167,7 +4212,9 @@ "af2011a1_38super", "bond_410", "m1991a1_38super", - "raging_judge" + "raging_judge", + "kp3at", + "cz75" ], "fg": 1358, "rotates": false @@ -4262,6 +4309,7 @@ "improve_sights", "red_dot_sight", "holo_sight", + "tele_sight", "rifle_scope", "barrel_ported", "pistol_grip", @@ -4275,6 +4323,8 @@ "pistol_scope", "recoil_stock", "waterproof_gunmod", + "wire_stock", + "stock_mount", "tuned_mechanism", "match_trigger", "bipod", @@ -4645,7 +4695,15 @@ "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": [ "smoxygen_tank", "scuba_tank", "scuba_tank_on", "small_scuba_tank", "small_scuba_tank_on", "oxygen_tank" ], + "id": [ + "smoxygen_tank", + "scuba_tank", + "scuba_tank_on", + "small_scuba_tank", + "small_scuba_tank_on", + "oxygen_tank", + "oxygen_cylinder" + ], "fg": 1581, "rotates": false }, @@ -4721,7 +4779,16 @@ { "id": [ "tuba", "trumpet" ], "fg": 1647, "rotates": false }, { "id": "two_way_radio", "fg": 1648, "rotates": false }, { - "id": [ "makeshift_sealer", "battery_ups", "magazine_battery_mod", "stereo", "vac_sealer" ], + "id": [ + "makeshift_sealer", + "battery_ups", + "magazine_battery_mod", + "stereo", + "vac_sealer", + "magazine_battery_light_mod", + "magazine_battery_medium_mod", + "magazine_battery_heavy_mod" + ], "fg": 1649, "rotates": false }, @@ -4828,6 +4895,7 @@ "kittel", "thawb", "coat_lab", + "yukata", "jacket_chef", "beekeeping_suit", "fencing_jacket", @@ -5144,7 +5212,11 @@ "rotates": false }, { "id": "shoes_bowling", "fg": 1856, "rotates": false }, - { "id": [ "sneakers", "dance_shoes", "shoes_birchbark", "dress_shoes" ], "fg": 1857, "rotates": false }, + { + "id": [ "sneakers", "dance_shoes", "shoes_birchbark", "dress_shoes", "roller_shoes_on", "roller_shoes_off" ], + "fg": 1857, + "rotates": false + }, { "id": [ "leather_collar", "locket_lucy", "fur_collar" ], "fg": 1858, "rotates": false }, { "id": [ "glasses_eye", "fitover_sunglasses" ], "fg": 1859, "rotates": false }, { "id": "glasses_reading", "fg": 1860, "rotates": false }, @@ -5161,7 +5233,7 @@ { "id": "glove_jackson", "fg": 1867, "rotates": false }, { "id": "goggles_swim", "fg": 1868, "rotates": false }, { "id": [ "diamond_dental_grill", "gold_dental_grill" ], "fg": 1869, "rotates": false }, - { "id": [ "sf_watch", "gold_watch" ], "fg": 1870, "rotates": false }, + { "id": [ "sf_watch", "gold_watch", "platinum_watch", "silver_watch" ], "fg": 1870, "rotates": false }, { "id": [ "wristwatch", "diving_watch" ], "fg": 1871, "rotates": false }, { "id": [ "bandolier_bomblet", "grenade_pouch" ], "fg": 1872, "rotates": false }, { "id": [ "helmet_netting", "hat_boonie" ], "fg": 1873, "rotates": false }, @@ -5259,7 +5331,11 @@ { "id": "mouthpiece", "fg": 1949, "rotates": false }, { "id": "nanoskirt", "fg": 1950, "rotates": false }, { "id": [ "locket", "holy_symbol_wood", "necklace" ], "fg": 1951, "rotates": false }, - { "id": "pearl_collar", "fg": 1952, "rotates": false }, + { + "id": [ "pearl_collar", "platinum_locket", "platinum_necklace", "silver_locket", "silver_necklace" ], + "fg": 1952, + "rotates": false + }, { "id": [ "small_relic", "holy_symbol" ], "fg": 1953, "rotates": false }, { "id": [ "blindfold", "obi_gi" ], "fg": 1954, "rotates": false }, { "id": "pants_checkered", "fg": 1955, "rotates": false }, @@ -5285,7 +5361,21 @@ "fg": 1973, "rotates": false }, - { "id": [ "diamond_ring", "ring" ], "fg": 1974, "rotates": false }, + { + "id": [ + "diamond_ring", + "ring", + "silver_ring", + "platinum_ring", + "ring_engagement", + "ring_purity", + "ring_signet", + "ring_wedding", + "gold_ring" + ], + "fg": 1974, + "rotates": false + }, { "id": [ "rollerskates", "roller_blades" ], "fg": 1975, "rotates": false }, { "id": [ "molle_pack", "gobag", "rucksack" ], "fg": 1976, "rotates": false }, { "id": [ "chestwrap_leather", "leather" ], "fg": 1977, "rotates": false }, @@ -6224,6 +6314,7 @@ "motor_large", "motor_small", "motor_enhanced", + "motor_tiny", "alternator_bicycle", "alternator_motorbike", "alternator_car", @@ -7065,8 +7156,8 @@ { "id": "mon_hazmatbot", "fg": 2480, "rotates": false }, { "id": "mon_turret", "fg": 2481, "rotates": false }, { "id": "bot_turret", "fg": 2482, "rotates": false }, - { "id": "mon_turret_rifle", "fg": 2483, "rotates": false }, - { "id": "bot_rifleturret", "fg": 2484, "rotates": false }, + { "id": [ "mon_turret_rifle", "mon_crows_m240" ], "fg": 2483, "rotates": false }, + { "id": [ "bot_rifleturret", "bot_crows_m240" ], "fg": 2484, "rotates": false }, { "id": "mon_turret_shockcannon", "fg": 2485, "rotates": false }, { "id": "bot_turret_shockcannon", "fg": 2486, "rotates": false }, { "id": "mon_laserturret", "fg": 2487, "rotates": false }, @@ -7798,7 +7889,86 @@ { "id": "wood_sheet", "fg": 3037, "rotates": false }, { "id": "wood_panel", "fg": 3038, "rotates": false }, { "id": "condom", "fg": 3039, "rotates": false }, - { "id": "zombie_revival_indicator", "fg": 3040 } + { "id": "zombie_revival_indicator", "fg": 3040 }, + { "id": "t_wood_stairs_up", "fg": 3041, "rotates": false }, + { "id": "t_wood_stairs_down", "fg": 3042, "rotates": false }, + { "id": "t_wood_stairs_up_broken", "fg": 3043, "rotates": false }, + { "id": "t_wood_stairs_up_half", "fg": 3044, "rotates": false }, + { + "id": [ + "9mm_speedloader7", + "8x40_speedloader5", + "500_speedloader5", + "460_speedloader6", + "44_speedloader6", + "40_speedloader6", + "223_speedloader5", + "22_speedloader8", + "454_speedloader5", + "38_speedloader5", + "38_speedloader", + "shot_speedloader8", + "shot_speedloader6" + ], + "fg": 3045, + "rotates": false + }, + { "id": "plastic_sheet", "fg": 3046, "rotates": false }, + { "id": "magic_8_ball", "fg": 3047, "rotates": false }, + { "id": [ "welding_mask", "welding_mask_raised" ], "fg": 3048, "rotates": false }, + { "id": [ "welding_mask_crude", "welding_mask_crude_raised" ], "fg": 3049, "rotates": false }, + { "id": "juniper", "fg": 3050, "rotates": false }, + { "id": "t_ticket_vendor", "fg": 3051, "rotates": false }, + { "id": "t_ticket_machine", "fg": 3052, "rotates": false }, + { "id": "t_gate_metal_c", "fg": 3053, "rotates": false }, + { "id": "t_gate_metal_o", "fg": 3054, "rotates": false }, + { "id": [ "reference_cooking", "reference_fabrication1" ], "fg": 3055, "rotates": false }, + { "id": "coin_quarter", "fg": 3056, "rotates": false }, + { "id": "f_speaker_cabinet", "fg": 3057, "rotates": false }, + { "id": "amplifier_head", "fg": 3058, "rotates": false }, + { "id": "mon_talon_m202a1", "fg": 3059, "rotates": false }, + { "id": [ "bot_talon_m202a1", "broken_talon_m202a1" ], "fg": 3060, "rotates": false }, + { "id": "box_large", "fg": 3061, "rotates": false }, + { "id": "f_counter_gate_c", "fg": 3062, "rotates": false }, + { "id": "f_counter_gate_o", "fg": 3063, "rotates": false }, + { "id": "f_street_light", "fg": 3064, "rotates": false }, + { "id": "f_traffic_light", "fg": 3065, "rotates": false }, + { "id": "hand_crank_charger", "fg": 3066, "rotates": false }, + { "id": [ "metal_file", "pin_reamer" ], "fg": 3067, "rotates": false }, + { "id": "hand_vice", "fg": 3068, "rotates": false }, + { "id": "bathroom_scale", "fg": 3069, "rotates": false }, + { "id": "t_intercom", "fg": 3070, "rotates": false }, + { "id": "mon_skeleton_electric", "fg": 3071, "rotates": false }, + { "id": "family_photo", "fg": 3072, "rotates": false }, + { "id": [ "bot_secubot", "broken_secubot" ], "fg": 3073, "rotates": false }, + { "id": [ "mon_nursebot", "mon_nursebot_defective" ], "fg": 3074, "rotates": false }, + { "id": [ "bot_nursebot", "broken_nursebot", "broken_nursebot_defective" ], "fg": 3075, "rotates": false }, + { "id": [ "mon_hound_tindalos", "mon_hound_tindalos_afterimage" ], "fg": 3076 }, + { + "id": [ "fd_tindalos_gas" ], + "fg": 3077, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 3078 }, + { "id": "corner", "fg": 3079 }, + { "id": "edge", "fg": 3080 }, + { "id": "end_piece", "fg": 3081 }, + { "id": "t_connection", "fg": 3082 }, + { "id": "unconnected", "fg": 3077 } + ] + }, + { "id": "fd_tindalos_rift", "fg": 3083, "rotates": false }, + { "id": [ "voltmeter", "balance_small", "melting_point", "spectrophotometer", "ph_meter", "vortex" ], "fg": 3084, "rotates": false }, + { "id": "beaker", "fg": 3085, "rotates": false }, + { "id": "gelbox", "fg": 3086, "rotates": false }, + { "id": [ "survival_kit", "survival_kit_box", "cuvettes" ], "fg": 3087, "rotates": false }, + { "id": [ "microscope", "microscope_dissecting" ], "fg": 3088, "rotates": false }, + { "id": "f_rack_wood", "fg": 3089, "rotates": false }, + { "id": "mon_zombie_gasbag_crawler", "fg": 3090, "rotates": false }, + { "id": "mon_zombie_gasbag_immobile", "fg": 3091, "rotates": false }, + { "id": "mon_zombie_gasbag_impaler", "fg": 3092, "rotates": false }, + { "id": "mon_zombie_living_wall", "fg": 3093, "rotates": false } ] }, { @@ -7808,20 +7978,21 @@ "sprite_offset_x": -5, "sprite_offset_y": -10, "tiles": [ - { "id": "mon_dragon_dummy", "fg": 3056, "rotates": false }, - { "id": "mon_tyrannosaurus", "fg": 3057, "rotates": false }, - { "id": "mon_triceratops", "fg": 3058, "rotates": false }, - { "id": "mon_fungaloid_queen", "fg": 3059 }, - { "id": "mon_fungaloid_seeder", "fg": 3060 }, - { "id": "mon_fungaloid_tower", "fg": 3061 }, - { "id": "mon_skeleton_hulk", "fg": 3062, "rotates": false }, - { "id": "mon_zombie_kevlar_2", "fg": 3063, "rotates": false }, - { "id": "mon_zombie_hulk_pk", "fg": 3064, "rotates": false }, - { "id": "mon_zombie_hulk", "fg": 3064, "rotates": false }, - { "id": "overlay_mutation_THRESH_URSINE", "fg": 3065 }, - { "id": "overlay_mutation_THRESH_CATTLE", "fg": 3066 }, - { "id": "overlay_male_mutation_THRESH_CATTLE", "fg": 3067 }, - { "id": "overlay_mutation_THRESH_LIZARD", "fg": 3068 } + { "id": "mon_dragon_dummy", "fg": 3136, "rotates": false }, + { "id": "mon_tyrannosaurus", "fg": 3137, "rotates": false }, + { "id": "mon_triceratops", "fg": 3138, "rotates": false }, + { "id": "mon_fungaloid_queen", "fg": 3139 }, + { "id": "mon_fungaloid_seeder", "fg": 3140 }, + { "id": "mon_fungaloid_tower", "fg": 3141 }, + { "id": "mon_skeleton_hulk", "fg": 3142, "rotates": false }, + { "id": "mon_zombie_kevlar_2", "fg": 3143, "rotates": false }, + { "id": "mon_zombie_hulk_pk", "fg": 3144, "rotates": false }, + { "id": "mon_zombie_hulk", "fg": 3144, "rotates": false }, + { "id": "overlay_mutation_THRESH_URSINE", "fg": 3145 }, + { "id": "overlay_mutation_THRESH_CATTLE", "fg": 3146 }, + { "id": "overlay_male_mutation_THRESH_CATTLE", "fg": 3147 }, + { "id": "overlay_mutation_THRESH_LIZARD", "fg": 3148 }, + { "id": "mon_zombie_crushed_giant", "fg": 3149 } ] }, { diff --git a/gfx/RetroDaysTileset/tiles.png b/gfx/RetroDaysTileset/tiles.png index 34e0e7ea2805fa60537d5ebaa4bce664f821afb5..75c89a3b09cb2597418e571f3f4cc1b53ae01df1 100644 GIT binary patch literal 109731 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 literal 106006 zcmdSA2UHZ>(l(5Ol0=l#!J-@SL;b=UVbboZ{^d)I!dc2)K6>Yflybp;}V8w6NbSVT&S zvRc6TB^DMg9PcVn3MDRx0Z#ZXiuzBmun5U7_Dfi)=`>hamweph^xU+}+?iZlovmyg zU`%cZ7Z?-F!`2Fm;NnQYbg>CQ`3Z!Cp&}4b2!tQlghYiz!Dc`~OJSgqAeaCQ69kz4Jc0$mg8Tp_Drg3rFOC9&LO>${K@p%V4E$Zx0NNy&?;5!a zOpn3e&V;Rtn*|oZ#qrlnFo7Wi!u${sh!s=_*ad%p{iU@%(00A2R4e&3i z2s#FBzhGfeDgEsz9*!@SVJLtd0)_}fpnwg) z1TDc}n3cJ?xfK`;)QdudE^36Kg2FLH!gz=jRT0jA%0OkdBgjik-1`z=BU(gT>2n;HCagE?&1ON>n^#u+= zvtJkfr}@U2*w3+`V5^_=FDfVslmPPp zj(}BwEq@IFoCN_*!=OS05CNzN*z!W4i|fB|{22)V1JEs?IWR;N$`6Pp3Mc^vAo~p| zpcXJNq%eT!LS|q}06~8J{Y8lv9f9qqCPn^?{^!uJKeP)NGBE8{5KBO?-#T3gb75kD zu>Xkt&-wc+bAk)q{BQ1mVlD!R4zT?Hv;KWpU>Zb(fq5eUndtM z-Gnb31~8Ogoi1GdfA=8xIVXU*{Tb#jl)@JyivF5az^?uf@0Y60gf2`%7|`KGEC3S# z-eq;6r3-j}j!QoS(r;nuZ)`{@50@K0pF zxy}Dse1Z$Ge`5BxzW#e``lH>i=yXy4vo|m$1b+>ne^ub`@!+311Bm`JfB#8Ff1ay< zAKiZv(Z7%4&$9gAf#}b&{ELYGEX<$T08aZ?^53WadyM|EFn>k=-$V4*asM&(H;DdO zVgAbWZy5cx!9Pp=XBqu_!u%EMe-_bSdH*ZaAF}-4g6I$Q|1zRKg!zNXMd@E=^w;ix zQ2$Lv|45iW(EL9n+CL}E|0AOPJHq_mD%$U|{5LK8ue$h0)W3n~cVYg@^50)ex3iji2geE-&6kp(LW>1Um5-bMt^Pe&rtt)M*q4nf5rKqNAy?z{|fa> zmj9a&{X+k5A^N+C`L`JTod*BgjQ&oTzvB9DBl_#;e@Fd8ME_@D{>tuu7+vHP{wDo< zk&OD8V1z<}WDk(JC4fC~BE`aD!cvmG_rSw=y^-*(qwd4ycj~S+QfaY%)l{FA6Y^g% zU1mO%PN2+Wj|wCCkZ3AqTNKdtL=i6_&y`)k>(h5q@`l#|cU@aWO)kI6c)*6{WwY@Z z_Y=4>C(7)nNKsu;edj*irI<2rp^3&0v}f_IiABVifhVRz)cw@SYSiFKq~zF|@2BJ^ zrDFy$))cfPxWo+Ms-YPf8FL4d&QU#~xe8HKg_s6@FwX{P<5q3QIZG**Pwn@VF`q@X z82XBX0%#+olAAW7sJHx~moS*Q_IhM#h{KEh=Uw}yB}T^T-RG&{1Ra0G54qyO=*As$5sPvKc)?H0o~R$BKH09s$d9pyS`Y*XE8yS>PD`{XpxcUM&XDgWq^U$@I*BS6YyukFb|Zgik1UHd3L#PB9N! z9X%Z_(gNNfBr_^dQ_MkC<14wPK$t_ENTz?J$a%Frk~A$)Q1!svZL`N^k$G!$GiHm1 zhoWE2kG4#~vVkFH8`(CyPlZxOerVY(xh~X3wja>7WGL}mbf_K+x4#bQ!LlH5S2}VR z_CkVjem_VdU0ykM(bZUeGH6x54lU`cpZZ zR_JrVauR17*705DrSpE?A(1O8ZsF`=IAsY#BX%kgzRjOxR6wxuKdepMO_iuvYaib2`mS<*iOLTy+!<1M<{CJ)i+Kzvhmm3{p!~bf{Y|z z1~fABL}bfducwJ*XT<}KX+iBy!g=4-GJdVFUe7mk-Ud2o5a;XgJ|SO2xoXT5%Mg3gBQmt+`)@g6(rH{JWo5(F zG>zXsJTnOO5h>d{*v+IyYa%=Pm*GB7o(NWlkP!@$vjaPfu0l;iv&e0ITtN67ZD00q zc{#=Aq{jOdFwG1%`7~qA-B|o;lw!%W!6H}zT4g-Ng^+<5=URx*Us|djV zv;sgPsc=%08RLpt4K68e=}c=2sw|3Z3brtfP)!0?N=b$SIpiJCaN9CI=@sjca>rF| zw+%*8f?hIKI+a0N^E@`W!jQ*&g;EWS`3@on4Q3|(C^oftlXshWw;nTuk;#;BOY<%$ zYuGqy&V1EF%A#bHqihh0E2Q;EMXGd)%tux&N?+xqd)P3t2fR(UjWx(k;{#~c0*i*2 z_1#kQCC53G%B&GB15dcPc{&|}^TL>N15O_9`v>Q7_RoK9Sl)i`afiDp954Snn5C^x z>49%j{KN)}8UJB*c%LF&6m%1k)iZ`xPf^EHXT4ObROKOUPjfYKK9o8mk+~D{n(tnz zYpR@^j+Qw4(5V4Rzg}BIQus?WB&02lbl}y1^O4>7N}aLr(48|hC7?Sg#F#K}D!p@3 z4H)HG8ZL@rf^uz`Vx0cb%x!H;-5+iC9Ngve;(aXjm~F8-!8J9SYGt;&+#hXHh6m|p zj5&IS+X_Qm^G2XrJHp$xIU@k2MV`f>tmc)`pvflEB zyWide*3)=6ZP**tu9MciQ|jR0Aj`o%aY9fDW%8PjGG<7Lm-re;t-!%f{l(SVQme8i z#`8v&fdO=PRct1ZdO!`6>|ot{*Z zh@Mnf&8qsDl3MtE26yR7dg2rjkcAC{7|Y3f)|_?On8Se73=S!^_zB2M_PZ%iEuW$# z+RO2XL@Zb)KwIN$F6jeg0hU}Q`-e}?yq7{HRQ$mGWTw1);!R04Rk2H#sxFUQV7tNY zpjtO$|=;Yo}XU6%_^{02Z z7~dUL9=^J$$YngW0V;ey(~2=;tK@qLUamW=oZi}@zEe@_)m|@^jrRV&L1>Ta7xBul zgO<|>ITvRmEQosP>^-JE4l#ONkuNB+5;)tf7co$s670%Ydg5p3m4Tg4(mdMn&Qlvs zi^TNA-jj#+9oTVV*DUU3>k!s~v!qL?oM2}I+aglp44nh`w0gImcq<`-Y__V2>@|>D z2`u2Xd?Xl-JvBi&dvcR!HqH6GuQP99Y$pBW(HJG4FZ^k2W1RO1U)tuw;%yT?q=RTg zn@4+KnPN#2MlYQ9F>$p;-Tm)U0>VRj0X44^KCu+5mF&%Hob**b>()j&fj*)i6jX?G z%Pxv6j_7ULYGf6=i`A^g!F9aD)T?>#<63@>WAsm2pzM%V4U}4;RA4-RYu8~cU=Aur zBTJ6Y#x}n%%~iSIT{e4?>Z1R(XR`k``EC1#r(ae)c-&;C-?$anhu0;i z`mm3%xTvL_>L;a(wq+WLi26{kECD_;q*Om)&hl^r(|LQ&@@@kYQflSO;BfYG>(M7< z%dQfi;=wv*VE3z+Z9V=Z*RmM`1bM=cG(#YB!<8Y)R@{Z*5Id>Eyl8zv;`Z2(LIfhF zQfxq~e*9CvE<~7<`lFzjp5Id-i##l**}aTf+Uz9xa`xcA5RV{`YA{C9;;U~YP_FUju%x{0NnzQK*x znx4bo(?yoA%B9}lM+V~-QT?>J(qK`!{(aaE%{h8-nh-5aQ&)woar{=_G@tPfFPf*v z$Se}kO7E+qZsL2Kdl~ht@zclK?G^nPLNa#3C#GMB(O*E?ZG}zy3t+h~XG2P%ojxE} z&nJzlvG4H8%QjI03rANst)G9~m3{Hs&gEH4#U;W0QQ2>zaMo2vO?XG~w(u9k3|tZC?Bhe#9FC+iYuhDIbFaePkY3KOd?_VyRH z=aiF0t$&uN(1-7Q$o&rH^!&`!(zvlCuDpF(2yMvsSYTzOJ+&S?O#UR+w;n#?y1eFbcC$zPkZ#OoZP0+ty{3p441iw$Otc{C+J?Y zw8Ut7Oz3_u1+Smtp$P3xUN1_Xm8EI4+9Irf*s-eg4mS-JFVdrJngnTf?bMZn%vHh- zaAjES3!m~^Rm2&y+hLO#2LDLnsamdIE;t{qvFI<%5X$RiBtSHA;lvT$%h}fxu77t; zc9Y%7b4qk^uLnBa5DWL3!&3>ck`P5b7bw|PR`@^3tE zODYT^-X*FV*w5OM6pkDG+Bug=F=GbC@CKF1JG>g=#z66;avxU5m!@FpxvMX(q5I?= zMIA^Y!b1PxCDQki-qLA>x&Ci$>=i7}`Ku6vj9Tm;I-`}&*WRA(8b}J3p?Jl>G+KVD3$BE#vJs8iJDHnE2eNB7wP4R6vyjmN)@=YFQ zT5-o8iuMCmnCh>rj=mQM@hbSl{wRYbv8*BkmtAm81xk89cu>@&I zJ{U1-L8|3_2if&7g4(8UUs>@}q%6BZ;I<#-$>4&nw0(R_?NZD5y6oeD8ml*kLJUtmt)PCSJ0b->WhZidw zNcHA+dKjaI11RzPNglK&k`WpcR8aZndwR`_7S^NCoe<_J0Y21^JHBK6@fydw!)FaW z+5xSXO2Tke*(We@&CJEw_@Fw62j8d!myZ%bX(8^N>F(2rc0CuniP2FV0jX_R4ua6< z)eJH$z$&cSZ0k^{xvEN=BPi(z8e!k!;Zh@C2Hz4EFHw7G#500cMi1}dl%zFr-XgSoCWjTh(C^!M-H0@-NO5P&B5#KU32p* zEzfa_xF<$%6pj6F#|&H=y?v9_>m!T!rW5{->)uOYPsurP;~!5Vg3D};*u++2vTfcb z6+D|%=ycp`NTy&~>RJq4u*gq@4y*Gg>Pttzq#>oc`87nnbgVK)dbrjkH0mBHoS?;H z=R4E@FA|BOafLAinTj%X&&8RIqoo|1Me>xH5z|9NjcgJmSsX%q@yL&RJ_`P=TPh!i z+Z1x<1I%Uh6w`~nO)KOk6SFz)GURhC$XS4_%cKVyB)Wc7vhE?%gQfE{Rs36{RT!do zEXAYc6r)Ls*AiV%^ehbyO~@ju4%Xm<6vr zxA1E%fM&g-x7oT~Y5TsjSu`CRKyMUN9F0!Kadl~iU!L{+%=VU^SoDatoe276ptH^g z%H!>UgL7rM=3F!2%b5(bxdQO4kCdZgcD}=Tt*nxk>AZ8R4qY2NtNEfwt1O@=t!(Pt z?4e#f_0w7*!>UtU50*SIYF-ah3CR>%B|^bUSXst61FfI=!(8;?(r<6qQ9C^4w>0dm zjKfH+Me0wGkBYGvq(zBy#I7F@xwVp|fs&eI;BDx)rtvE!dX#oOS|(}xOgrvlS>6Vs zjkAg3!n*^JJ9oU#**2q^^v-(^rOd(JU%CokH&-R+H$m27wvfIj=cUVcPA55sOHT&# zrBZx9kP$A&=#{I!e-J{oENSVj^ed*cZ2^$}IaL4X5U#Rfsq${4K9i~} zzw&1B&h4{KEuNve1r_Jd4{5@6vL5x-p5y(nZ^iD|eIO69>6mLp)S_69=#X93PiXTIg&m2?c*}Bb&V?jlp+fvKUX0 z6s&G7N9`IAJDK{VN847x99|R~(Se`ZLD(8zohn3cS)N4AUJp|E6x4~XVbH?7o%=humT%3SZgKIQVtFKMs{hG~dPC&h}XS(ApJNPM-FOQ^9&U1C^{oA(ZY z3+S`jj|J9F2Fvii1%<3DhL30#kgpKk^t8mhAFw*^MYzmv-ht~1%Wl1mJ1<18 zjGgDCM@K*_BR+EN7B*&;3E!w9uWvp_^6y+<<5e0-YG1wA?d9xyXYa^%Nxf0wR!hXOxiJK{1R0tfL< z-$XVLpR8%0o|Ww#gT%Y`XA&o)bQ(<=CK2Ob&-E4uD{rRF#XVjzOm&Z#4H;V99axol zE2Ug$46gWG8)ZgESi0$-He9fj+E2lv?fjM)q zVvVY`ZhVQmH0(hdH`GKKHS#DJLxYwZkGZ}!RJR_3E}3PJJ;I&zSX+#f*Y4{e=WY+q z`HCo$QWoLEluN1H)homqYk^E7c{Xka_lmb}8mgHZswxdJM4zKK8j-F=!w<_crI>^y zV;0)C$^uY`TUTs97vd+CuX~(6%Cb^XEQ_9M+Lwv5I7;>vP1y-y;|tnsCyT`Vb~`2 z=Ry_{QY$g^OZ#SpB}oS{sKH64$~85?-0v@{u@)1q9#9Bru#}fFz2qEL-vGf=zvo5l z#b@%C>Td9P5~OmH>YapT_K3eTS{K?@qFdpXGgvd!Nvrl_MqLd^fn$|QP zV&JJ-RrB$6v9pf2tW(-vyiu)&eUxpjj!43OuU&AbV_aq>>L4L{OPyz(@=$i=QWfjs zI%SjBAzuP&{U{GQJ7Z&}W;h0dla-uuO2XhL9=>IFmgN?~o>KO{HRT1Ejz2Dq6V8zk z@b$Nzkm7pCWQg6vplhwpW+5=dv8yiMA-<p-s8q-hJwgae*i}l>A(kRJhZ9wJV$LnQ@M6?J^ZPP^})d-s9QsVe6HX3Q7bT1;uq? z-Hk%Gt_eWeI)vnsS(zIk{v)xgMC7>7$TB6AcW`ooL)I@=FP0t{ixZY@CDK~8LDZ^3 zAY;%P_Fy-AvfR!p=FY8Y*KeLhuiLW)i76-R9Cfv=))%|kVvgqHwAHd6e}DhUb@Y1D zNja(%YTtp{%|VJD8SL^Xy*YJzuXA^^Zs`&`;g+8uLQ-}9^xgL@?g$7YpEfP80)u>2 z#m}+94CR=E`=Jf9Am;I1KUP-a-QlFUrAtWh{OB*MlWv8tn5nkQ7V4~jK zb*T6aWzi!Ap8{39Xk7@PaVC8=Ykt%N^SbF#mn5^^~ z?uVDjeSK0k9^;|+0*6o|G;~)l0Mt-B|Lmq!;}5NP)b*A|c22j>w(LITA>$zEqXT4~ zBWB@PvVQ%*mYbl)5d*f(>lv%2fZv-4uE1(y-jw71AdIkU6n%zd_`;wv~E zQq!IJRqS14?d9{KWnT#}H^W&*^Uah8H@*8on8Pnu~`dfJYbvrG(^>N?;xt<;M8 zn>f|R{Ozz_Xr7(DmR1y;BK>BJtkRpA_4q=v8anK6SRA}8HG(JHayyK9kq6^dP z^W85paU3b>wKlz9v9;i8sP_OQ@lJwoq3{Oi(tUEFWEmNT=h8WZWev%m}$`VMr%*~um%_Iz`E~gP}=f$bt zYT8LC8(AGdKf^|#U+_QY9KlW)z~j7DHQ+M619xq5q>+!(Tl1r+|5%jRtVP_Cn1lhI zn29@U8CZ7*)I&9E&s{?GFn4iKYx91ISb@RSI9!r>?031Zk})wiGCyM;TYWLmaMQm+ zj9oT~q4;X>Rui)P=Eo9eZ$0LT6EU(g4)F%E30RPBu|!FOlwD(KkHxf5MEhuRhlDy1 zOCk_GyJQm)1&rT6dKrHLS0?Pw9apa195Ns7euV$kzC2}_0}My8)O+jKpQ>Z5a2iPX z_`07kaPrPn*7y{XPHf?atzXrN0v@N{LfCJ#@~4oaG+_F^jYg=eI)v{-4ny6&S->h! zJ{fM7s-=Lb?A@Q)AkzC`uINwlX!%7~skEFK%h9y1sO|%;A%<_M!V!`tj>@k|{RQ-+ zab@@l5W=>t2*(yoXAi6E9U<|}I>#ki$L0yDI)${l+Om?2#2Kr`orv*a zWr3!M*#`1YwMMe+Ex0ANcKEtZQMKL%`UO)oB~ZgG2`Nuff_g47+8`KLjkLXG$M6v4 zbTVE`L%24^{k~+PT7gvc_PXFx*jO0keg)RPzp9 zV4>+IJ7%295mer@dsB~5qr@c`PBpRLeTuYkwq@At(-|PuIu!>e_N6Sd?$>6Mevd> zJl*|^=Ux3JUQbTJuzhir1re*DwYu&FiQLc5n4(8f)s9ajSRY*KCQmAd#42QYd+X z#}k~e=9l#DDbP6Fa0#tihEJ7Yt0;+Yq97}>a5~@p0MMGVj}Mogy`oiT?U6iWvq@$`KASq zu8sPNO`U&G9d*(N7S;B3ARWgO^_Lw!rqAyG{w=`5mZ*j!!jxL-87+FekIvE1l7ZI{ zzKc#uk>+WHaHv+buTw})2X?o`mvQ`&OX)ql-wfDA}Sy9z}14#)<4u}U>t0cg%57#zGtP| ztoz|9ii!OseT%#wCDFgZbC~fUKLy$1{r+&>WC6ThE-{>EDqdpT*I%4;cT%5KZKP+* zr!1j&?otXEXLmBRc;&8YEfEcV*GDq9#C5Tnr+RBJfi7Fiy8Rev!b+ZYlh(~>maxRh z*s1M@98Y%i^sN9*HjncXlHCfU zj95tTD%*R;}|SnFzEGtoZqO9!YG2Wi2u(uA-6fs-dSRpsh9(Nd!WR z#%67zS9uIm^#PIvu|gqiFTvS8{SOEy$g53~pW@^X5<0DQv7nKmO`X76EGfUF@LSkA zvI?$WJnfhmgxf>ltS{Y*mRnRE1@sTnX9m)1t{nDBM$UWPQJz1|pt?<@;A=6s|UMqkm_9F|dA3OF6s|>q) zQ$1-W8-lt?f6u$N?kyHP`*7b2#j#dVx%aUD&Cmq4RoNvg3=mguFlbJ1iI&wG!}BES zjd?&QuijjnX3XTSWf~E{FFdinC&^J{&E04csbe^35S3Sj`-RUkP=KEi=!r}(#yAoG`PCaF;9r?62>oE`(`T3039sLLsf)}Qr~>@OLgoyskfq+=dgVy?O!oRn)X zn}@pMdgO0&cXQah*}>5l4zIre>@l5!Uq3dYMGR z#mjY2jygXPCiVDmDz1z>LQZdy=<>~PZR4#EwKEUbX}CY$^TW@=>aIbCYcnc3~I&qbI7b1ZBgm6#P(p#;-T-{lY%KiV#(U{X8RMt zf}gRXvh%b=!qhNZmLLn)Ebl8_0E!cmjuLpZgm$9BG2a|-OrN=CdaZrJPhFPLe2{5_ezED%K{j)%MLI+pxkP`j zy7_g#P&sv+wts-~qlqn8d8RfT_g>P1A#BXp-hik*Vl(axZ&0ACFYT%HUZ}~-(8;nY%$^Xw zno~k*FJJ%KB{Mo%;-1_hc9EKlU&?l)Tv+tIsJd_ED!%U~NU9k1M$Se{1NH%)V+H&1H}}IXTrD>z@@cS@ZQVOj{qb>rj6{%qi_*^+bD4}P%s$f1 z2lS*YvSCx9k^xEi8oxXu8O*vF?;O!qr$2UUe(FXPjEi6sYSjKb`^E}#tx1koA~*PE zf7B>*D$hber!}!LGJj4Yl@;Qa`yOICmbOZv7E9WXCFs|cT|z>*Z++cY{h&@c3u2x0j*34tngPLY7*F1wEbT@=&5pvzlsoFy z9-*(d;??Nx$LLD1*eyu!1LO9*gX9*jJAa=oxip5zi8r=IH$a z&r3UAr251e`9G#zw(kl@30+B!I3;;Q>R4^a>UrIslTmWPaUZNkfiAp!18xm*e8BX8 zb)uitQjSMMia_3{!2p%iNgl~O-dc(B`KDPqM)p|SFQ|OTlF!t7?eJrzwvPP_g65-g zoW24f5XPe)q9$JxVmnIK>#w}`rpl1sdJ{)ALlz=2uq}OldEFxK=DmJ4xj>jTB}Bje zw%Zpep0=-*99k-GjU~M=?gU8c*&f!#%MRjCZ$P@xPc4@)Usc*rp5DA)xn{+{ zxeAzAVdhQ%dgo$!Q0+O|EUxFZl`CHQ)AM7eX6A&=k9yyHZreCs`EeyOLxvS6jzsSo zL$hy(vph!$V4;v`8Wu$m?azB*&&S=vfc3^tYY}#UtEqXBEi|dN%91yDH9o?3++!WS)qQ*KJ=!(P4>)t0 z4vmGGEL@+odP2%Ebf7i{Z^i|5_%gP8Kaf7N5$wbl8c+4oA-AHi&8ye5TLRT;HR+dV z1l(fL=HId#xc%pL*UQgdd^;R`@NsfnK}6$u2IVucYq=SgtMX5D4G5ET@Y=ojdaTfX z0T;@b&}cgXKkDWlYVWgPn1sfCzwL+Mz6ILF5`XCD7Q6U1!eJ5?tXBE+roPZ+vBefM zc2|582VSw8+;Px&){qno=csfXgVV^5=gX9TDmK%uyjCBM7pYJ$H%P*S2zQ8b8!hM7 z4>CHiEDsJDCxmm~=GtL?di6Jd`1IU-!nKE(DlILJ=La1fYsbZ-%OXw4Bz!DA}7zSEfJ3)E6_ z?~G|J`{X6}2Zt{mnh{*NQ@3mfH!{8UqJ^3(o_!pUWe$`X!Ej_l3m5>Wp}!$III1p% z>{NT->{_Qv9!L>sm(<8fBQ2a$BE!mqF2Le7gLN5yP$w85MCpw-OdQ|auN&&4(us7a zV)hn%OPyGuN*;7z_|8~H&$hBR$nx~v9h7A7?WWUE?k35*b&!_|jI4`TNDl5d#bdvs zMbWcNnb2D+4~O7J-z-l2&Ln5kn6qa+^n$fh$=?KUy19=B#Ho*#idQ*iSrVOnR{s{n zRR!eAFI;CKs^`Opo8Ru>xaVoVMWfvCbUjn38@Jl+d@#y*5qi6(%%@li#q|S##wyp0 zOiapnogE!h;0`K~#9ueW#zrGUDYtLYwjD5$8OpMzc`2M+VD0y9q5sw^Dg6+Vbt9hj z%cq%Z={2RWSRmG!zVa3yb##iM%vovT6W3SR?d4cE{>>NPHkK3lSg-`jKHh7FarI z{WTC)2AY&_gD?%fCQ7E9`EbU;BNc`HEhX<&`T7oP5;YYNQ}!ynjqdhmBS=wIvdwE@ zHj<8Gn7|1xoVpsB>!ya>;$F{ymjFPhvBCuW7FnP?Ms@v{uMERzIP5v~LyTQ!UTWGl z72)A7^*2$N(!KWxYYhKPXT*_<$lvZ8jkPZ9byow{!|peNQ3gBfp@XkfGmRkoMkWx% ziMTtl&C}*6_u2yINF$Az*YBa(wJW21Bb$>sqqh_?gRu0ujBdn}iM|vqx=^qohc}^+ zb`}(GCS`J3FeUTI-vF-WXS~U|)>3@iE1r?p+ShtQ-_ncmMLwkAHk{sqERJ6N!5m#I}~XFu-dB zlVgMPkUWmsX~$oT&4L4-daU(0nQ+v+=Bx59AuFMdv&NmI9;M4?SWTXdJ8+H*jcvW*ffret!pI# zSo>W;PpTtm(;)CpmOAJB^3njs&F3TCZP)EHRe)r;^NAhXSlD!7%N}1%u~L!75B4;; z;H(qlWc;~GsV(?zuLWIRY8A9~^WF7|RCC^IjJ$qgD9y=Qx$?YetYYqD z5=mo~J!eQs12Vj*C_&Le3+Gjr~(mFqh?`9>O{u}Is#Gy*G@qSXV5$^S^K7+6fr@FXW*#ghlj!H>MOJ>W$<)6hARU&jnuoh!c~ll)G-(! z^pvKrzrD6xe-SJ%UhNY-aBC*>$3?!RWc}JTYDM&Vhoa}rN%8Zpxskd}X%~D9e}UXR z+{Ce!bRmi_J#(xs4+ZV=aq7Hvwn^2!Ifc{{6DolmaA@wam42Be`l^70CE z6^vtg!)@Z>=65~Vr^gj#0dDQ$-;Gl!)*HUPkJOi)c&0AB`^|ILQ;eaA)SsHY=~;rs z0S`0T4^(u{PWSuqr`c-t)`v{J}14mbxr&9hIk%x(3>q6 zsqr^Qu8oQ1rcb)}hkR_lQj4+SzPVO*I8>>2cdj~MB|$$r8N{p)%iKbb1e@>Ptw6jS zm(X;$ZTRlE()eooQmoelh0nww4T+b+ZnM|8Js32DY(fs``YpPmZ`rOb7C$vR13pcj z{!XujtghhfM9W<^C8ofCxpVg!*7z>3ed7elm)Ard4cpjvzE{dK;H$VU6ld8il<>gq za|=M#&>J`3&7a$%Pah1I>gie*j1(Rzm&mypU8a!0&K z2~&urRp*Fx%_W#(E!q#vX6SgAHns%#K)=h1PBXx=h=_~bzUETCwa}!WxpqS>r=8um z02?RvsYYf*6Unsak!!H$thyHux*(uKZ&r#VdX@b4(Sd4Nx8?R zZ`IZdj)`h6eh85L7)Vj;?BcF|@i?#;`Jp?tY51rowfs+q_3g4r8D_VrmfgNoBFNAek5Y77cn5AYJ#b0IfF{Rq?bp`OB@|D=b)T`5buzGut6P3f5~ zADy0@UA(~ZIWF{lZ#A}bCCeKvFlOxODB1}8P{ZyhA9o?n=YUx1{o6&>Ec+hM+=*19 znf-*hssIiYnKb*hzH}T+Kl{M8W3K*Wqdu%Pm>9aGAE0ZDfN?h*HXSy?XpN`}kCr7j z5sMOG1NGvxC=X-xdNe7U1h-gE(V4@yHkE3LtCEin>Z(SP7FU|L>+B4KBhwGbVU@3Xjf^m?msWw!;qPTzgKbh7Yn<{;m-JdUgv1;Zx_vRVfVNz91s z9jsiMtR^*a`^3{zncFdazW}li^H>thqD`sxm$qAq^QIqS8()_!q zs9~k{io@G*m-+ZOW3bV=iYlGs&B_|A+?M-u-oE==Z|H+FqNf(8RPIP5-I$dK-LRq9Kwy{W!bCk1{-^+mX?89KJW#sLOcN}E4P4M<8cBWgmZug4pEAqj)fiU4a*JO!73D_4O_E>5^azSOZ16rd? zp@dGk#fe@E-ip3ilD3*S`2iv1h&ni^P4)dYz$|YC29!-&mnL zrT*C1QEBe3@v9`BoAiaO_w;G~8_6T)n4amsyxSN?o_H5QmvaY?Du5lUJ1Hkc4&=BN zR_mNuzGZy8;7b5XTlW&G#EP6+Bzy`Q${m)=wA0k*{_rhNkd{x;vf(9L6%iLsYDXL> z37?yxSH87!xa~#tlob9%gRj_mQS%`Y5wk6#4fN5TD1^`4;fduf=>tEI>?7m%xNZB& z#NQm_*l|)iP?5_gb@ybJzrRl z#cKu<@f$NdHLvH?3F%2Uwt;`Bx|3o33&pL`2eJ4q zWc{To-n&*n&#nW1{C;e*owjZ-CBu5Wer$75V~Xpi=5-cb}b+oY(hs^ zz17CKJ21K$2(PIcSg#fnrenaZZcAW3nRM_rDi1PqNm)All0dRjQtTR1ZE{7N;?^V# zH|ONQILT+vJ1)hBDK%uhjXyj9rDN>3h8s3FqO!rY(RjSK?RDz^eY8*KVQr0Ih2wLb znGLT;CZB?AEz+K?P7=R$Z}rF>r+W2WZJS_%XtA+9h8`c3Q%xHd9i1bsXKMM}T;^?f zyZPr1$RnSwtRG6-^XBJ1hz1i~-!b=XzV379(M@$IqHi**Wc2VX$@gXYj2NL)1U2xj z`No%^sKXV>tq<5W;>HZSG^dxIRL_g&o86Ldu!%au=u2goQRv zUd8V@E)TU>MhJl{m{ldT*RNFB?3-m$yxudYOvj1e_6G^+GoB|(n2OR9$}~|u-&vUI z#0e{_WF$;#;5?5RkO)aZony2!jel%(_|%&zlz(R-tpq+o7{wVc`u?HdTt~n_x$X^LX3E$6r#l{cG{E^hrBZ9uxTYGiRdVY)u;J z-}km58$oMbnuEjc;x~sijp5SpRWl>|b6e>Vv@cg%H@2O$1u4s5CuHFbY{AY9GNyS@W&u; z_1&<$XG!Z>-esAas(efQ*5r5w*o`cw;;z*Fn2xUT&$zi3^^nOiCUEK*CgLgH#9X=EzXSI5rdR2H&~sm6s{S6j})KdQM-Yz6&QrD zJj5$_E{hAMU{3IKE;6s$zC&it_R;d`Yp4L}4@trwrGW>hgiS=s)7RPMIwylBlP9KE z6$Je`wZ&J!n**ou&=hCZ0NDLTx}bLIQ{l0`7uFEU8Lk&wDXW@Z#tfnTD4A^p0$pp1 zaQpI#*YI?^+ZLwaIKA(B13y_};-D+I+m?##<|)VXr6U`oc)by!MK-g?!z1Kk#Lb;; zJ&TL7yVCXYubCS&_OBkU^FHj2E=m<9`Z!SBuZvLTN_a`a&$r{FqsUP$RyFJV7Pt7R zJn(BGW0!BI$$3T#r^%{MK@i?+tUnJa^|AO4h28wc_vJ|2{pvo~YX_Qb*N~c-j5Kak zI}O&RR|^xTII81E;VRo*UU*IoSN`rWJ2BW(z$~&FZ~3N5y1b2`g^UMBrI;jK(acO+ zoaaCdiiD z(RK+R|E6>~`=?3G3?$PCeeUm_u#y?1b+pvZuP%vk5%1h zSTuKYF;8EH-}U0}Wn@xJYrHZ9Xex%*-MxWTFx1I;hMsvQdM@okNjsQQWLH2hDp7JQUhgwpk6I94z~MoK9B=Zx7s% zn6Nx^dr7mExvT!_M0l=#ZswPZy<7ajox7GA3Yqyk9v4EVWM&@04PzlEYJR4q$lK7( zk5Jwz0U9`IGOI-44hoI zRMG4N%eedl=TIy;yY2lA*tN;@l5dMd{FRPYeU}H=Uo2G)@bm2`omUR|>%jkm&=sIK zie{AT$<25suy~(@@>Rs*FOKRW>DzjY0{a?BAM#jT1V+hbz??ZyCKFVd)EL{sxR8QETlHlE zvC4l~6+spcqrN?3oXX2PtHfVDdfyK1-> zn_JsUX)G6WGp|!v7(cM9uDRR1Lln&#o(%~(xpwS*q5{}NS}SGo*K8#4In8vCC;RdV z*mugxpfZ)pzkb_38;i;)(RuZ8c9IA#pk7>KVj{Xku(F zDXxM1SvoxEeA8%lmYoWOpgN{T3F~G&?wtAq4C2(+kv8xEv7b)fK%4aOgP@UNG`R|T zXEbbPrXM1ppl#U#^6K-Xk0m1XIQSU5Vf;jN36xFq05|siX|!`Lr1T-l(Sqsgqyf!3y;fqh;N__o}`f1e{P-6+{aXSb1Abf-Yl#Z^5Eey=5EpyxFbx;BKSsuOr zzPBiE{Lpm(t&|tWpy>4@OBVJRdBaDm)y$?Y-jqWVu5J|?+tVM|4OYCg6L5@BSZY3L zYi``l^2HfU)HgF6^_3PX~jLA(QY=0qH+Zm*+$$=Em?;2Tm+HL4JX!Cb2Haw z)8MM@j1IlT{rFkIDJQW@AY3iTbo|iLSfgzwY$9j}oAe#@*5fyRN)CwyIo}30_w<8o zHE`I?TF=3-8E;#jyiNkK8HwF2XWz4r;_R?76XcMnJfYpTL0ZASayRxR>B8N2X^E41 zs7MA}&B3-_jn*gyMGE~CTb0MCacAChCQ+1GQYdZ>r5-7ZyaoLo{ONc()^naie@?YF zS(=bh#nmZ7_iB*cg3qAaY1&r0td=P*Zh?Y~c1Ko~Eq7Y#vIBJwOb^jR0Wo}{Y6Ssb zLJIRHnES_`+XhGGuhNAYA6tx{D<9+SU@?9w6%pVe?JUhV@CDAS=hsiIkpq7vEUs}v zu24Piv<6F#ALM6`r?lIu;zGWHk1gK&1WRYJby!N-UlzPy?A;1Va z&M%(#s*cctxfH1v5Ew^}zHT%l*XTY{nmkFFJLGu3oq#&0@u>-how$fC)4ciTd|c%!erBc*Y5|{)2B{(#&jv*-q=UEti+x12uwJ$$m)aI4*+xw|PVjOc&2NX& zdn$vac{EB-+o}V&zPp@MRTcS6U#^DB5eD^oa!0~opmrB^`1e*lCKEDQRcM`OGv&ds z3mp)3Pg-N7^lEezNgHvq5$82>*JteQ53Gd;aEp;`wJZh9(O0zuJDIt5)VtOy7`PtP z9B^U`SWU`&2Xm9D3Pq`P6Cu^%Pm^*cgl48*)R=D!@b&yC>|Bqiv{8Q~))|J`efg*T z++??6;cQ(bmf~XdW-DC+e^2i=vy8En&$@fS`y6qd>Npm&Gb2`- zmj2)0UiOgK+8|cemu)N|k&mVz28m{3GZiVMGS$8ZcQmBC_V9H0L$kt4E) zZQUHkR{GPL0dod-z?lI^sZ^$c_*RdPBA2&H$$erUyk5`1L!_U6pZh1JG&5xT2`O)` z#B%5H|6uvWv&Q0OjzC=wnRKKPKQLJPtk)dh zL-#sD+PR|c%)`|n^|eGLF1QlUu=&Ss9v^uoF;5K&^xcc z=hG|C&!5EekdgtFr6<-cZ)l5u_D#TG-1*3w^UXmMm9_?(-oYZ3{hXm6GMbdpFfBpg_z@`n|` zQDm-R|LJO=fk)o!N86p{Y@zBB5d1P;RUxBPyZOSl;_}E$Z(|ec%IGoF+5y;FCL>#X zy-kIkObo8zisAu~`s4>8G9#s8>Uwma`vv9IrM#XAWwp00;=fv<{E%_b+7r4j1)gW) zU*zqL*!zSD`Ovz?ydQV|E_h8Bh-+_@_W>t8s}U(KI2c-Rv>MuCFp&eb;-32SI1@N+ z+L=+S!EJjIe^scOW@YZ6`;Zl`&AZarQBWqWl2dd1 z0PnE>uL{2AQP+Pnu5XOE=FF~AKRuW6eN{OdYM2kH=6C1R`O zBC&Rcnr*^?3X_o%(Q9J<9g_ojD|2;rjgR`b`*bid_b2pP#-tGYo2y6aKsYy2^CgS| zktFAn@TR0W`BN?%w_F5>R-RL1!YPZBPhgxpkcNl9g}3?bqvX|3cN|p4_6uUZ1ZrR=@63zAfoDoL~ z9<-a@z)A^5WRfaX;-}sUO9kTNNyL%=p2ZeV6;#`UrbPzxf0NEhZO@>+8q2w zF8WZJc|}%=zmCr7aZHS>sb{dfB>H&0MRfSl4{tV|;de{}pOJa*m`&>(-ELfNblnN} z7TRKpe?Lnzn|^rU`697rDkyjHWpY^Q03+PRyypVP7}{HVl(v5eZB3B3HLT)y6ky)> zeK3HY-=5MHMB;sV;)W1e!qKWTawn+36dXil0A?-KiDri5bip!(PkNe(|{yhrL*hRR{22({s71M;cVHT&cd11K-$nQ<^ z#{e$1|Lye_uPspVxCDFX4aei^{)a+wFUE_x6;Kc~{EHZf6wK`kn6aS`GgX6J2i;aL z=qqA0rhB6YYES-W0Kf<9E9ah>woa;^dNoAH<8oviTuvB5e$4tSWf!HVM^t+ihRss1u&~Aq6PV zfmEaKOQ^F&sst!hzfcndR4{lGxOj0Up{i+sOn-R4Yu$=hp0P!5HQPcVte^>H+#=9w zKm^sk3osl{LgJSaYk%Ha#2^FlS~aX3u!y>k%$&4=4`b&_1#3qs=FEgkL8F9wa@DZU zCt&!*dAL^4j{aT&7JfxatN4=m*bHto{97i>@(-k=UIE1@>w5?Bf}8MCg=qhBQ- z=qN5X&&J$B?bethz}K18EF2k>$)A->^OnrG@6hx-?tu#Y`-QLF_xdlKDp^Gw?hhy~ z+(f3qod#D`0gJe9?;75X;)GZ7og|Su_dO8C-CUF(I5=bx1UF$-Il4sOd_!*#0IY65 zel}9^*1QO)30G$fUT7e{ip}z<_-00s%p<{93~mn=yoRK|&YDC!9<&ECy62mIo9y6U z#-#XEcB*VKFly4vut^Np zm@GVm$8UYdh{*l^q4I_jF)ws&lrtKels=^FnM&x)4Az!CE4lgS?Rr~O&m|NIOoPS zeV%_?D!~EZQx8{%$ECEqlDDDumSJo|S`5rgjkL%ye~(KsI$g(E#Yz=oK3ku$^8I7G zG(>g`0`6_mHkSa@wNIm0uGi=yS%qLj3&cpsSHpu+T$#RM1>!9H_25?#+0BY?g)^J) zq(Q|lkD*5lGW063RchgmTPa_E66(}kNl$!aB%_N%db-8KD97a;vSJo#U^xlU6{A%Ys$VS0T+d9P8e0(nZ}7tN zoPNAtQHu`7Q1Rs$7nB@~X~HUq?rbK&MGLH9iHlFR5j0D*P!BQF*db)DUK(pGxHjgg zAfbvToNigaOHqKz+`Ef8E>vLVC&pv;+?}f1R#onm#zN-|?RBvyyUJ^8fN#5Lg%65< z?zOx=Iv1CnUV7&$wJ~D;K|a&myV;aLf$ggB<_KnyMsD$WZivEZ(-0wbgqxzWVR*>)LtcVwZkhqsU>CRdLFfo{v(XcTa-L5va7Nh7>MZ#~l)EWrslB;f^ONAYehzrDro2K#9t6~nKVY{j~ z&Bz|YCJoIq!YULHR^!zf8~oIQ?njk?4EnG*MFF!@O zHtVG;?cu2$P^->6FU9og|7`=;W}FL-moUR!ZP`sLm#b>pD;iqT82d3bGLs#>ytFe< zoRUpXI2XVizfbVxMSgRDfoY$zRFd0o!)zJVb=0D~dEsu{^cM{VNmXy%2ghIWI*qf8 zSRv2JJ+gT&y=r~lD|cp44;>!3?Kv6y*GF8^!nJZ0R7&oC>B zc=hQzXRp*0)H+;gojwpfFhkzSSlQEgH(brcXlaZ14_?fS+lb#7UO>tR3^?n|POo=5 z1zpQe#_Zd!T_v@NB>Bq-Tj9c-_PL$ztj6Zqphqi4=tn{T9k;ns{;0AbpZL&E*Y>0v zOnnKak-S}#78xDd*dA8%?5est?Y032G&h;JOze`Vevm=de(1!Q)0Z{_Ha)lzo5Cv$ z+rz_YULu7Z9_(`zZ^X8o=}Nk)%vXsPzO>uellI5%ZJ`UIE3E)#z#tiP3%C7-1*6v? zw>Fk>2J}WfLwD@Xr6i2N+;P2C%DAM$U0lu=>FCtwOQ3QYonkooCLl?k(I&?bJcm0& zNn}A8xQ({a>|QJAZ+HX|JG2dA7tES(q07o2k^G9jBzwImifeOt*!{|U_*=#90HpND zw}#2RnO(ug$m%!pH3L15!ZT{DTTu@T+yZl2dAbWJcDV_ZTjM2jQM{vs83gs`~DzKw*>0Na-O0_pbj%?-tw zv{I5pWh)f}u!nbKNdlc+r80^XFRLtbql%_uF)=Ul@pFYwg)11u>CZ*+BGg4NnYr5r z+@u!)*bOMc)!qEJzs(P$jBha`u!obvz@0vXj?focU}<=^VH#|%Z@w;2^t z>W+7WnrIM0_nPy@=cDOxT(_p048{z3?ZBSv#soHz!(L{BE?@V`zDUwa9@n3aLYAG1P9HDPAW()DV#Z>N}lYD|CqMkm8jS3WB#||e@R4l!Z${o_=1U#J&bGBB&mzCSnO04VfvinqR%c}^Zn zj)52LFJ|trf9-XECPjJZ-!2k9bmc!-eSwGjR9SI@*ei5*B1+ z#>};)rrAE3xIM&9_5=&$NdHCFTEnHl#|L)2@$Zp0^wohwaKq1zXd3{ZhfQp6b9@>3 zK$F@5y)a#x&=q~uHw(Tg;}{j3GcW5_0{^(kO&njX@Om!VCeJ2Sw45u=sJ8+-6QGO;;*_xjGLJX_s&Bta)oUoAhLoN z+iUb^$Lf!cXSr<8hjIjR-}@ndLMI+bfXVzNvqfPVu#Z4uOX~mdRykHAgxxt)1Mojm zX+9^CdMHzQMw&K^9c3+)+y92qZW{15b!G7!qT z1%TUc1}1nH?-e|_ff@3pB0puBTe#gH08ekpjYNag&Nqu(2LM2idH|>KArrdtiF}v! znPqCN^qC`VEq>g5Le3R7TegW>nFr;pycN@A&U^x6MnP0^=YyJ(u^_5cCzv5+U`8Gp ztSh0cT*r;4yfjFvV;aCM7j*3|^Om+XR`~q)Ie-7q{2#=NLhjn9jNEVtltdDI^CI;K z#n@HE(0(rZwBDT}RBbBx1!h|0HIRyOu)3(CfbTG3e>eN9zr)*n#orPZGsc#s`T&P7 zfi_2SzjbS(fFLAR-nb+#?qn=iPyW_idH(1$OTO)0pj%e#4Up0Lj8ycmhqQ1Rp(L$j z6l~IKAqvq-Gz*G5T;9r3Qagq{b})poQgb*dbPau`2BLU9;#@* z5p^E6a`#Yn@J);Txn>`E%L{-umsAdfpdfEgg>VB*mEAmfX_qJL`Iaa=B&c5CX}wUx z)AnXtv+AjdMmJ;5SSjq`WYy2mW-hw3gdI*wdIA#SEy123`aANuiOqDP5Oy?L?a&Xb zJrW`){+N3q6?1|hhBti$S+A247^gG$Gi818y1;I;-WAHepAG_@57zU)b#ImG_nJhr z{@6ul%+le|^XD!0nXP0x-n`i;J4FOLx-oDJ$3)t#<`Sw47)dD2-!1VmXzgR?mUnTD z3BQs)dv|#MEU$P4({Vy``b8dC#f#S|_(r){qS_G+X{z{eg1oAscAO z%z4cegLJhx7_C%u?GU=fphy#ihwq{AxEE()4MqIZ(~s!8uI_%ls|t~7*zB|vt9A}! z1t>C$b@_7VXj4xdd{$5r5C5n5fVI!jI+5wO#(~sQ==SVZFq4pkdHlt$I;y>+E zSm|E<-0JlnqG^Y851_7^gToe@2QNQMh`)cXp8dIP8{(YeLj9VK>k1A^y~jEVDxKn2 zS+%JswV|E+go&fi;>vmft8JKSYbI%E`*kul*JtL;LrbUQiu{WpW}wNU3^<%HyY*lD zd{X=F*4Noe$L{NUkf+08Y?I2Vt1+Br=Ax~{uHr3KMDOP~gSiIN9p~^_=#?!TV%2Qk zvKjs9{dGW|eda?^oebC^LDf2Ewoov8`agu|>PGLmWqQ&v{Aeny?b88t|8tVgAx7T( zACIG7r9W+3agrv@x}t1-@vlKh)0UgVuF3t&Q0LjGh@$D0gPmkzDNJkMM^RPzoHvYt zj+Na0LNZf5YV)?IN z0yM^~DOk@;O^&A0HNs6TZ(x&4vpxD@v7SBpI6e}>7(O)MO3D^pp=asX+ZI0VPlo@I zx78tv>viW)wdNCr$%?(CkL+z7up(g;yKd__-tS*9U&hxBYlM$CzT|43)NIZ1H^n0R zx_aJ3_{c8A&^{hfi$7}5ISF1W-zvB=A%%dC>wxdG21*5`@i zJ|y?o(S8Wq7hzv>>));UVJfIOS`IW{L_X(n(Ea3>kPVNy$j7oxDZFzI&v;!iDX8ev zI4-3AkVcs6rl>r(SuCigyo`KYbvp1b~G|=Z+UN98Tf85d4KW=?ioou{K+pX$-Gc<4cH}I zzlRr|g}H4-g)g&Vdzx|e&)i&F`pwcz9-ZBClJ6kBK!x1p!BbpBaQTwvz%PI8PTCM? zWf#)}HIQLr*=4Txtq0(@*s8W)|CbAprY1bz|C7yxq~L|2$D^7!)Hdkq0E_4iD?Ujm zE7_gNH(R#hTanWvHf!NOFbmWTaX4Ua?q-n*=-726uUBOJWlxVX3v>T2vpj2QAO z<4$N0TBHrRA;ai_Y#i?f(}-m@(gtLC>pbx1`plF>!}H;Iz`PH&m$l8Fk(N z=3=1mx25fNmE1ootOltWtiT@PtgCl=k5Mduk(-rQB}o|F{B!9J z1)1{KOoEf?u4RbBlD5({%$GaBLp3Cvm#yO}b>hc%+nBq{E8tLs$ha!+gwQ>f5UVy5 zw;>K^A6rjqvj2%)H8qci`CLR{ua_4-Bpt%glXOl&do zvw}O}*1$(>+#pktLrGPK`#pCan1pHPZQW~?z)cwg0w?S2G>v91kLmRuhcXTY5t@n^ zZAYilWc2>92^q!MH3grv+t);I*chj^SuLv?YXvim0!L{&tQf`Af>@OT(fh(QWCjEC zIL4d@aPj8E_#%{v>40|`6IsQ}gqePa+D<>UaMW;!R1*&C(B~5)*Iq08;9>KU(8awE z2<8zB+rhA>_w~YtG_ubaHD<;hHGErk6AI%!3m55eCTG-Zj+LbI?c&yJ)(9UYA`j;y za*jF@3!3MZ`2k|^l}OuwzAP~f-MElp{a97_oo8>%F_B?jnz_po;wPo9g@lFg0HO~iE`%?X#nBF4z;A7Q-j(DoODJ{h_x!?jKdR+74Z_aznzMqWGa!$p~G9QeDCwWwR4KgaWo``+=Za1{6UH z`-LvXUy1ksF<5TgDEbM@Kf0W@xw4+*hq+LIF9N-Z14}0lzC=C$p)H?p)1_;pj5;_p zHJ+aLz5AX#pHv~Xjx)r6t28*`qIr3vMhK+aiZ z&Z*L}J#uEydqF7y^>1D`!3bIk)Bk|05xe>n}$2hA<-8EevO~ zG7hpBw2`~kHb>ZWz7k`1JRBLORySD~dSV=IMoNLu0} z_qkU=MLMW&C=6b9C&qp&&^p9$kEjH*FTJLv*i&GU`tQ!J+VBpV1rC}KISZlUEq^^P zzaO^GKJALoZN6kF8oeJjoD;cZ>q|(VcesHd>MyNdnAj7H(Kq`oUL;AOL z1A^}F@kJ`$H{F7;OPFB&6Exz;iD71Y*sl-Vtl~oF;d-`g?>(TTih=!E<6$6xjlAr! z*RBZthY{i@jOjk-d8>5TG|6Mmw3=4+Gn|4b6I51XDN07eGW?(ml6AV^Bs5sTAOO&P z&<$dLmG(u39cheNz;oeVse*$)PLrgVv;MAAu*tlblGh7^y)|17bSdsD%(%oh{|pzJ z%6kgGnO1Pi5;vJ;ON$lzz-TRPGj4jFQB3Qx=fNFvMCU;gDA`iao&?s!8E)D8Zfo{= zt6D4IcAr@-lB7`YS5gro^3Qj8mF9VE=G=L0Y{?D>gZ`-V76o`nQO#T}JuZ@M*vlD)rAso{-9H{Gg5#)#S&meF1C7w{No3P2>{%6PR2K9dRkwz1N-J z;}jL=AIR)2g@&&Fgn5vv*4#NWELjeHH3yT*~fj*otnNWC(wK6=;p5i(f*;(LfZ7D@IOX9710T54D6CLh(2 zbkL?NRVNw`(KUn_km0_d+DaQnu*(7$%f0R|S{6Q99txt>AkKLs)9`#c-Oy^dE}K$! zCqf$&b0LwFWlh1JY?TpYv43})Xz_R&8bA>Jy`Tg=km`1bZ3;zaPu7IThR`Yns%Th)|;?~57CTcDk~bk{*MX@Tr8&W7S3{v>5PAO0++eezX@GIW zN=#VGYWecwNeF6-ZL-ioNFjZoil zekfU9qhErYzcU)--stwe2>X#$!64(Z`E!>TGp?6aGMiPV!cn*3;^fuP`}n3n>a{0J zJH*5$Skm&+$4tHP#GWJnMXOq9hSOS@x1`1S3#-P=n~)}bU;tV_AD6&uNsmWCEDwuc zGce1o#thlZdw)A$qs^SkzU^2)T0{S=ImRWu9}P9>%u6ndyIwWpO!o7`k%g|ub!$Tj zg%vQ&E#NV;;c3_@z(BR~Rv~i9ElL(a%|d%AJ1`^ac}7hgc%&~;^VMZh`NyqGgz^-% z4V|0SS#ZTm#d3Y?9~8%o8W_STQ}0U%54&J$FPFe&m8ov(Y8P^E+a27@PHRFFsEWGSb zC)W4C;s6XYDV-TU@TjM46BgX6#IX0;XHfkAt+WDg0*?2?XiAf*v=jH=k$yBE1Fa(9 z{!@pBRzJ+fN%Afs*aCK4{BhXbGOT#SzxY*{b6NkZaN?0a`x|6cSn4mNoexD*!&WLS zcb7kjN{^FMqKj4PJT6teyhdv>Xl6#f+xyu*eeSV32038?-e=OrVFZqTpYHri(~i>K z1~BZMOZwNpCn+9~k7-`?rMVPi9BP7;XeLc7tKZ4ZzcO#!BJ#6*IW<=8z{5IEhuoN_H5H8B6;-_`LBjbM1}tS6owlRL za%Z#~)KL{?(ZTwxCUZx9U0lSxC0AiLD$XYvya_)4s;*{-CxzCl?L^7UQauc7@+u5B z$a#9_c_`gm6)q&Fn=ibZM<1!X|IZo_tWv5z zzmbbVaG<{7K-wfI5@-F_68<9ZO7PEV8tP2&JjqW^2@;FNms_#J7xFT+-3-aQ9G6!A zyU&7w8cOA^Z2@^bh%5Av)zBmA+?HW~1vmFE-R?5i($kAqh4`XgFs7oewEl}OUWf$W zQEq=t7cbjBqUH3EN57qXWem4{<YcSws}x;QNOjJ3iJ7CP+z9JONPA=jyk)0@_kV@Ym+#`~B2V*5flQ zJi1P8HF9jAT++DTGMx_+vGv2IR!V+6qm#N(tAv4`zD?I!G%%NaZBevqe4e zyK>S6W)#N5ae`lSQLCK)4oXxA_|K{|4y*N>Q?24p)!#Q1B=us>Q1U7U2iyO}m5*(|_k31?bEhF1mJoFzfqt>kRCf0gDE{fu7l-kI{z7#ZvI6aTp|CAA%MC~5Hd9*aOeLd(YiLmA_pmBNW zH(Ce9UzC%~u5_zNULEZy+g`_XrLf|zcX~ef@D%kawP?V=W%ki9`yaGvMBC=S_9DQU z_O_rp;hhtqe|ywSw@AyM&51d^|Gp-EHPd(7F)65?3a5yJ=Dgxg?jJmW4%ojg9m9-> zD-0q@BcWT(zyT;3J#N(G zc>xwB*tvy-fvFV$c4vR zo(bq(Ch!@@GupfgOQuvL6r`R;D>k=UED#9KlI+YPe?wsb`?mM3K+q(d+JLkBEdv^E zFg#^p%mqNo1{nR>$@`YLy{17!^7cSq|AMV$o2M{yRw~g!QX9W)w>0PKwXS$UfBDjE za#{04Z5(Qpv)NM@{Jht_Nx6=xnoj|8+KD;5kIi=L&k50!J5;>DQf{@|oyNn9F+FP` zZ?`>JIOwQE#sutgGB~S74cBS7ht4Z4t}7xNr$276U(#lCBQkCnwaIYDe8&abSc8h- z#VBDh82#ED3UUt%wJ#&ajqGY;Oy-k{`d@u8XGq=K6OIk0tYj~MVg|{!vnm7rOa}w$`>N#o_{2?2-=u(P~nbd4w2B1t66vIYOAHu zm?=6*v|#k(RFqp7YCew>Wxrm>Dl`Hv?e*x1|Diuy|90IIva}yo0ph1Q%XuOBe>X*x zjc4Bt=^XGz0)eyQS>j#aS(jil{w-CNge`jE$~JS?9}?D_SmpJ3oYu$&-o8J0tkQyR z)Na<+9aOyX>xn3oY6>6Ww!p=g`7T3U`#t4$dd=Kn`k^+|vE6)X*e+-rRTF7!cre4X z2Dm?k-JM{e{HB3rdgaa7NT_N}lzt>I@(W?$hAA0)e8Qbf;KJzT(xMbVi}AN047 z7aEeA`$Rv@WQHEMYaPA2!e`x@tPvjDQv{YdOoK23C19DzFmr;u8%dDX5-=a{JAO}9 zS_@YvD#>IYoELSq#}GFAIygMMkD=ebTvr3P_VYR%&oWaRzh4wLX+An*%&q4J_A>#< zMt>FybMQ7FRm-jX$CEd%hj$B8s~O#x9R9xWz<6co(9O-HkTT!e=G2p$#D?g@Y*I>@ zFDBsZk#L;Xr;4ahfkR!J!s!jZsU}wyK8f^`+_Xbabb&NJ=g-Tmm;v0fkO@vWFx^4cV-fF z!=Ym{dxYdd2McXURj>iv(1?yu3T_gli76ho9A_9qL1qinIrB9wbpD&k$-)XQ>|%>Z z7THZ;0ljl(><9)F=ygMN-ebh30pC8HcK!jHGxyB{IHUOnBB|0f5^Gq6&cO(jJ2BZ& zioaheVLXiEy_Gl9Js}q3H?ig ziA5~F1t^j~FGJZCOe!uz=LBjYU3*vjc*IkapmBF}%1k=arRXEd?jfSfs~Zg~4zuwF8ql+o;Qyz;EFw(PPyA|v zhK6g4lyOw*aH7ONT*GaKxAddmaPT=z|40^SuWo+2o*MnHnBBBj`&IjxOBGCckve&K zhhc`P=GpqUIiZ_8Mc##0!hprB4_aH(A$S5cw1uL5^A=UMWh*3GAUt2&33Dm@fx0Dv zUe8n=m`@W1Dy&_4Lz>rvTehvpZ7cK@v2oVdm=Lb>09HeI=5`P zZmmGJHPDckq81moWz5GC?Gc?9@>H^XJ~MxkM#Nz5{=%yo)7&J3%>GVwca+{S&U`y2 zDqTs!ocly7yjoJtB}S4(lC$$}3))orcTT$N$G~bL$l6k=_KDF_DR(K1Q{1-I2+i!m zO$(}(|0yd6@pSC|V87iqp)w-O3fhjxmrZv#E$49s`nV zrq;u8bG0s0!53!`d-o#Tfh|+ob5!k4GQ>(|N&T8Wlv70Y#}GtVQ>ltj%ft+;Z?&dq zTFaG!i!dit44^t7BiBW}V$De~KpWF>nogMiMOg$prZtDPYsd|bX!!HIvRoGmni8(Y ztU9@ZY*-1!3Eui%2N-odC9I6UH=lYiv{#0FP-dEXaO~EKdR4_3DXwwkcpGsIvBTX_@}0_FT!fJe5ISdlXV)MPy3*y5J}KH4?@WNyYEr0JW40VqD6uU*;A`OWI;CvpV39WSdvb97+O zN&!i0Gf=Qq8F6N9LWx6ZJYBRrichXexjxP~sntfWDobjgcDx9%a~53E|0lPeI-ZbW zQZFd+#o2ZG#KYv^&GbxtMeRE4$cjj7LW7Dp<#KZB-krAsjl3tb-q3;E zkG21@Tfd+*Z9s5O3oV2$R;>m+6j;m60kZ#9tnewP)N^`<&tTclIjvs%tEC%KlKl z$ltr|s${in?AJxs^zzmI?yBxp#j5fA$=%b*zu%n@Jymo;UM>>GlBc~C>G0@@--nzi zu)u^h<=$k;BAW15y$c;H(dN%Q!93`UU^9|TBUAd;ter6I{VN0LkoD*czXIR3a0D+d z$?7*W%-=s5`e$Xj>4gaO7GZ-r!8_H&^@lkLlWe8+T#~_{87!?uqi)9SBhx<2oU;~H zk0SuJiuT;Q7-7H6mSaWH=THjXu%*dAkH&ZfSikKfJFCS}yT!_^lQx_Kz10A;nB&o1 zJt-ec9Pp$Z*a5l$SIVw#9gx9CZ-%Pnrbb2Ib`Btp;hCc{A#$BL$1Hv0WJ{}3u1;cI zIUkbS?Ha7NAj);{hV;5^Z-_EshsK$|^CrpzEJuPqB=VHww7r9uhzxF6&(3*5Vb~mb zdn@MGWAD?(S^L`(LN4Rs7+2dZ@lzgY6BNJOD`BC){{n(7w75DAjI2BcDZfs~* zF&9cpB)s}c$C6)Akj`3pU_i+eL#)Y}3f5Dqv|!Jj?D_>J@GC??M$#N$JiZp|h=EgM zE&Q%Tr0|8I4|TF3+1pa$i;x4K{kgA$;dZI3Q=HkY;p?TQ`19s6ItBSb45J=SexZcx ze|;2k-w6`YBoNYc-%u@kS??NoPqve1TtX%Xw?wTJp>y-Z;sp9`#)%zqn6>rag0eVs zlRIpJrg1VTHTtk(1l5G9ku7|68R}qj-fN*2nU^IZOasM0Rznht18#O6xi!89$bW5(Bs}$vS{Zm1^;Pw%; znI1OTVlo9cLS>oZVOejlzOyl%GshKm;_U4wHJ4+jSxjR*+ajdsAV2wx)`A%jrL)a# z*GF?AZ$NOT@;X~iNH659r+-*MM;flGM6eK)>yf5Q?*m#&K+H|ynrUkj3#wYk#yM+o zr3JclxhdJOeaNw;tq9FFC5<2T*L+JJ^4ZIpQmHCPL>eB&!@$I4>w-;b$Wi{HhK63A z{LgcK2%QUcXMi}8?F+IaitN)oS#G_0ZcB`%Qq8mwVhKH4?}%Q`zB9jYJ32s>7t%nA z35_M?1?O1~Ys$3ka6cMQT^|$67Lmy~<*14*kvDpl0z`jQ+)7G5_?nyYlm+51A^haa z2tBEPV;(U9HXNEvbfD+tR!_g*dtFd^H4I#9l(eaclo^)MeEOUsV#ergI<$V(cs)N~ zcG$&x3=i;nw-b!k*AU(C?t$U_u7EyO0UF5y0A^Cd21EI(r#a~eM}?jH6S|mYQcHfo ze7s*)C^o3-UkJi0Wkw%ti%u=}bSO@>44`l#OXT3`OQRSFw|5U2FFFelzHBpqV$rC- zN9K@#A-2s)FV4DZra##naT5-WVb85mL*mM?84kmkwsGa$H5O-S7z*fZ3)ug`w{cn5 za~6C&)IhZcFGs6dw|RDdZ{*!3Ez=O|LP^@On8ol2@63c@4MkGko~iE(7!Z}uF^6b% z?>n)f$9`I0pZypCDCP)ds9YNy)7v++w!3^k_4vTY6@H~UE{YF-52tzmS?v(+U@UHC zi+RI|XgpS*L-~ES^f92l=qBhYf~59~{=S7)Eh=0%IM!w7t05@pP_=WZiSp3~21WfK z%lDlxgiX!{m*M<}kqJkk-4l%Zk}vh9YM2bDk^vm(_eapoYPCrlV!gXRsORkq-y>y6 z$o+ZR$}iYnwEd5hn~;hp(vK#pmKsB>TB|Q9HZF1M&gwpwmvoTz?V=g?1zbSWZ}vTM zjf-MNzs#xwixQ)7APKN-b6UMPsW~dFntEL_hb(JWzl@B|{(aey0vWEoRoRd#3F)F8 z*GEbo0_Mr+I!`k5k(NZ zt8&&avTG)!tFBo3ESD973I^b`@Gxjr$>((}QB_}?)^v*dbI&M>+$*h^GCEWyw8G03)51&1p z=J8%|C6k1J#Fk-r>DY_(x(q?-?fK-7h$6q7X`MpwM=BNO3%2SFO=n_e8`(k@Dpi9N z@(fH>s1dCaG18>I*M3p)EXTC(LV)h}aV8{I3UGS2sP)N#WupE&erU(~fuSut=r%O+7E2u($_hyB zaU5j#G)0^x+1h{Xw)QcI)W3I~!;PaG)v2&Sfc{YR4Y{XwaavWC!g;@wM6o30994rm zn$X1rs}nwR=E{>)mqYVKhrR&qEc4mqPa?RDp5n(oH`>R}3p8w_*e28a%TXi`KICNf zaL&kp=5QnWJdP;10Y=AuznmCPzSY0gHlla-YFB)p3A5eZ$Q?s-dYZJ65WxfkFT?lI zY4d);36*O%$qRU}p&YjjE5fvoGvp=P--jwXl}Y^XTUlDZvC`?V5l^`2;}Z%Vz#JsG0{P=PExzmTKepiGz#5Zv2&wB!s1G zUpNCOogw{#o;YTmwN>436M^5vB8$xq?xCF_WDi5WOy*U8CMT88Hw$1h#MIwLZF%Se z)H*nABaJ;6AP0^qoBrBHInd8|#oNA}y6d<7#D!$qdv8e`*EUbqfVC- z7j)FoC>vGGxWsl=cQtXOkS97wC7-iYnZ||6Sk7g9p zR8Rjj)gY75yr`1Ip=`H%!tL+x-I(d|MonkJ0EI$w$^owA^rFh)=OzZHYOzyiJM%*cjaZ@Q zehg5;-1xR3AE9V>J{Ijw9hfIA6=uG874gdw4QGD>m2hio2>7w0(c@8^VZ@b)Hr1YZ zOH1k5l)HY_Px5dMhaXz?B^hp7jcM5e@PgH%1rzkzs8}*=)r$V8bakcKl(IhPw|0_! z2%Fb(&R`oB14FZkbD2M~3pIT}Sg7&K{(I6orx{owW+iS;I7Jo7umku$$6OuSRN7Cr z)_&PZK&-fYAvgApH9}Kqsk+Un|1TzOoHtbSGb3l25uW~YDob|YYdz+~Z}T%4qURY4 z?rM>Mx6AEi=7doB;{lIu6ihc61HB(x!}Zk}nG%<}b1al-A}e=3kfb)VzI^cxyHQ&8 z*rAVg2YyMwdwcjc>q7#LF>c8`XKN~gMl(iYh(wH+if57T!3=j*q~a4_@jfoSMWodq z!S%T?Fco6)hxc#|72poiC)-E{;pMlKgCGiPpaR~Hz)l^%zKdyz-oMIh4-~-1vq759 zf~VyI?z*0P$GJpL&%EV*k9B}g+3oMEg+{Q)N0biAia=EDxYd^BCnIjPC&w~E;p|q_ zVUIN9Z`Wm-+;zle9RF@=hn0oHv+Ef!N7O^VUvH8Y9Wdb|?hFQE**H!r3}HD+#kgss zt>x*VaVq6UaX95FslKT$CnauNb`7Z(F_)i7vs*1g0p@7upGmiGT)T zWby7SnL_zSE$?Hn?-yeQ4^p@pqwy<&PcDDC^8MqX(9-pIK5l|QyK*iCe%LsjX{En* zYS|92*)jdCwqkos+D}3s%gjzq29$T_>TnB0TL`kP5c`nlaQ->YueFAzu@W7i8BjCY zRCbhFM)K``F;9yuiOhI?AE`nG)&9xS=CRo4li5NYT6gx|GT4U#33emwm#Y!+g8`2X zGOb^Xz;rV(njqu4W}}*(Yy$?$ip4(9v%cNseqc+z;qg(_#Kj|Rm^xFUvh^{)eOigK z#WnLP2LY}fbMsh+8W{-hBZCFb*bHP9laz$cze|NMzA4^ci4VkOD3K>CqC5Cnv1s<1 z0mdk@EJyF?4n9=%RVdt0V}%o_(#xvyrw2}y_3U^%uDHL@UqlW2qQ(7Ekye1g>R{FpHysrn77Ji zDM3MLHDtMaf0lbaqLNvltI0m-c(g}DG$QVWE#ee1)QRL~DCA)@AK?-3HQL#<1AfBb zh2-wSL!`8|yzNSkNo-qznT5xN6qEgkzYu;kWt;tdSN$lt{A#t#!UAw5MJkG2j0%R zzeemw2y|MM!dI7Ax}mI3CU&waL^)>qt#+~$RsC6*WwpGif31X;;vehEA4}rOIOSfG-IuA><7RAbL_+J#naTr@KP+0A{Q^qYOR60$>4Q&@{)rL z)5q1{=zlJYbi^w;Szo6p4Ai<-VZj5TxU*JZWt1$(qdxv zdDrki_M7BHob5Y7lOT%#Pr$bP@xecx+4M0yRgrMD5By-SsaPgI>!57renanQExJrq z=~(SGHr11rJshE)UFEzVGI?3WKcr$9`3rt90M9pC@_y`@x_h#os7O`+#9}R+FmJZp zH0rCEh7${uyrq$>ek6hGI@A)W!{!33qgmk&mT7P%psKSWAV!@iH~xPw1V!R(aFs#h z%d!eC&oh=v_XT-jMuTHy52_>l;Yn<D&Kq>Vg=5| zJnYbQ7ZTk-ULdSu9wZM#S~I^_B&o4ewpNt*Vy8qZ12t@it1d$gQ;oe4nOYI_2gl7! z*(uPes={=rnsREB$sQ&tWvm(zORK9rHw{kkxPI^=xkXXYekq^XRh6Fi^GWt}pe?+8 zI;f5)DfFQuCzH40bfCfPS7lU!Z`kPaby{YklOp`oiei(8A=0IVG5_9m z6-CQsNfFU(UFm1!YqE6e5^|-PaAIbR)uq24w_f}h>el;o4eK|%yR&@=&Fmdf2{oCe z=fBhGd!*&bZX^caBUVR0CBD?B(65=Vl@ZgLo8RJ%S`b+GxM_JEK6W7E+;6=*&h7Wg6Z!WFkenm@J(uB>+ejaNxN|s=SjN?1e0UKiShW&VNzmn2n?_Do42@ACRIyGq zXGnYP35e5ZqHmTS9m8S&C+5VHR8{M|tqO#AKgLh9O7z_4-R>H~*`{tl+{Y)i(cJZW~IplpE;-e9Xf z<))%I%a$UakX1lHXG`;d-D!ZblfP(Gu4{+G`HT#n;P_~;i8Lps?X-e&HRVQRwP{(M zQ8M~=p>)%XYfKsc2f(5jOp6mgy_mDLwbf7=i!k35CG*o8@&uJ>M_Bl~aLHnm+*s{; zgV?&;Yqytcm~Zf&Z;lQ7Kt_TOEq7vFZkR%cvc*7y76V9fl1j@wiM34}PamruGw&%M z5*CyX8T|jYi|esHiwL4IV*2wLRgE6T0VxpB_^0RQ-L?>VhtC_RpejofzUhN=mn5qf z;O))>*ouubQanGr+ah6pg&`Mpc}r=DivI}C1TB?Wc759Z(A7o6SU(mH%}w$B1)$>* ztW<~>>~kWykQxs-8`OAdcb)26E zr<`Re`l+x1Sl%_D%S9sm78QBILEOsaALBlpvdU;S&mH-H>~nlpk1TvWLC=BYIl5b~ z)&?jb<1aGoV4e5CA?TC}hOZ1=h*V78I_A$Q=Gg6o1vUoI&! zSo2fUxiPq7Y~mv`E<70XFdrd12W|E`wxI=Wu*TnOhUuyw1<85*g-ml#`Ono{$U9Np z|2+oz>3N(#F1NI`5{VaHA1!NBO9XcjP2U`MTZPiKU1vSL4~!bL*vV}&j6P?h9spoP zS@%>ETieS>JzX~tew2z7q86RDUFZ6CKj+zb7`s+y(%Er1^+9=4M`~5!Cc0mAq%@Dn z`PhgPZ$HnM#O3SI%uO6^L()ytNJSx}#2Zyb@^7MlLab#5ITKaNK>w)=Li9WG8M1FM$xQ#J}e zx+5nvV;(5xmL{dMh;d_+N2=o-;|kq9KsYD-J4R3j>hg%`8hz&ZX6>-EoX2H~r7S-F zni)rDSbo&Z!n>?HB-I}PF$1}lDSgs!`x1vB#jBWb0w>nKln!(Gfw*Ae7!L{(B{4#p zSa-Ht-DV?7BWd|v+i2-gMCG6UODXim_~!j&9qJ7+%pA-e`lY7*5@UKf^C%{Y#h+2B z$ua)DEuSi55!0Ffgo2u^L!KEbW!Z%6OTntV5r5BWVQTl7{+K{_z$CW81zHB zKovee_!9^l@p+0lObCmZL?xxO_@Rj-0Hz9#_G@ybU-m##MH8mp5`RkYU)Md9x%OKi zW2j%d$g4fhO?t5{A}D*rVfMse4x$W!KLr@Anq8fgRGG9sBeG1MeViT^7K5T($^VR& z60eu?2lQb4;Kf*mcPuxyF25sLh7YA}XC*n0QYZD`xCRLZ;>_`Jh68#{pXIwBd7?f0 zme0lAp%i%M!P|FQ&?LKm+&9#P{Gc3%vlu<=qZwTVR}rJLC{wztB(uHmj9hA|M#sKz z@q1R|bM@d?=qDk9OZkOl?}KUJ3C#}JXPxoh5trloo^X$6L2$y!&F_Nz)o{%~e_P~7 zjqb-fOBP@vkt}c62b!VG_N387S%q&G65Bw*cl;$)k?ohTms!D%2k1++VLp4=+EI}8 zvEpZ@9?j^dgL%?#*^~*RYVJw{X=@!igxYNcD~p4I;2XrqYR;ZU{9mRC>r11fspOqj z2{m6$mE6rtZ#ouRTG#Iv+9)$B=)ODn#5tT3l10Tfd~U&|6aS+Hd}%px=dTuzE7$EH zR&i=qoJriI@%^;;UKWyPZM(xY7(>KbmHa{XI*Yhwc}EOVCu6PGvi-XDL)mSWol&X2}_VzE}}3TX@Dr|Fd^GI(e83(;d0L z$!Ta0LnHRoi|B2v8}h38R-DX98s0jH0+K{mk6gb+h!V$r{+TOLk&UZ$6y^NgegNg8 zD(>lzL!O?A7M;b++ajGWd&KdHZQ{6pdn{QxV!*0G2yE)ymcLhC;}76Y$c07KX??`z z_)06BL!U(Q&JGgk zjtmb=2*|Y&Nk{urCwq7yhJhEga1sWllcAn0R-#<=074rwXhrZ-l*478e%L_N&&19ZWlnScqh$+zY8t#S+cc$xDl2B^s^lYJhLX>R()xF4ms*NU-Scq5 z8?EO>j?Y;U$;(onp1e1hIs0l+$-#}7xg1QUnjJCy zcSn?CZ-CF;I)zs$a|LS3qjC@HX56Q}2XZu4+tV+@L{&R_FB4?Oom|WLTn1|MWwrbE zOtvr^vp@rLMA{`yyud?@o7WMsK2a*S->1!y4ig??!;6{sv<-x&{tXX!3j?_mL($1+ z`#aAihc8Ags)tCMHIz zt{Y&PNQ=T_AlC5k8*oCVAVcXD4N8xtHDb`5Z(A#G_ode0CoF8 zVMb-hkne}n$4rBW9BgE#eAngTQm4Mf1lZv3FId$3s0PvLtlvub2Bc-`qdaKX?r^c_ zS6IO{)3!E7j>V1KGK|A47vaR~ev*VV0pi54C%Mk|D#cdyi=?oc_g!!N`*1X$>rDGoXRW=tkXeAKv#{Jv+Lh@5&TVz6s&o*(>G9Y=*daGe&UXk#daX(<~N3DQGF5n1Zk?x%< zd23t$33Ve)tQ(Df*)0ZPfvnS0V;%f%IwY7=w&920fN~syc6_oVq6~#uZ7N9-B3u^v zh6jlrKb3L;g~W)Ux=po4M>s(?)AE)K-MxnOuf7|C7+#caW!I+RGBiX!HbfcQ0P~c* zinaDN+i)agv)2H9K`M}RrN!V*`rxXDNgoO+p6jte1Yja8w@U6E^HJ(d>QgFTJqQf{ zR1L;h3tusgeGi?}ewA4?aiRJXImXGem==vg#><)0`ZUZ%;QG89blOU6N&>S|i#f^> zh`mj?XP_)4dw-E`Cnbn8SMi>@G2Sst1zC(jO77c$$*_U#}3?MGJXQjeB!NTDMVx0-XikdQ}6^-eDIl4Wk! zs~rBB4OmBYvFio|UD}fvS9*Ew$jxm?_I@NRe0&YC^zZV%3{N>DS4S9=cnRqigx_qk zBj7y1xgtrVNWOxdxu`nziOx*%nKZ$hS8>iX-Fe~FvWQ@D6DH~N&qt`@`h0N%Fhrcw zMHPMw{zV9F){9JzGzNCkuw6_tYMbvVbipS&?U6zETp6~-Bzz76qYnHe54rB~>4s_} z!i^m>xwCDI%)vgg+fU?#<7$k5rU}2ew?&t%ohk{c$e> z@-bR=d26#(Vw1K?FMb9>t{7?&cnPrGJ;fQ@c#1`JYD2(b-tVNJa(2PyR^~)-!G8`LaG~4)2Q4G zh-k<_<>H{q`h*{ z0LW*S{b^668Kh?h^}7jSkL7*I|5O`vnr}A&V8whPZ{E5Vr}eQ;&oi_MnT!62_z%=f zlxA{O^VOg;x-o2_KEx(-D(>7L$TN536m(tE3BqjenZ_wB{Do*uD^QyXDz%CWOEd2( z0`j%EU(U7)>N9E)r))v#DX#nT^f-1ZhD}1i`o#o7u0u;nNP|weWtEP8G~G4uGx?yo zPyE>51Z5bKjPZe29}_=K@C{BZxW1ZY8bWlWZ`5k@U}<}S-`Z8b{hn&>IN6Z%+ge#+JvaJ16o&LZ1$$d{FZMSax2uaN;{UB*?0 z*fS|Be9q2!7dYZ6OXd;wS$SuqwWiY9* zmYqr^1+Z0O9p*E2W++MFLt&)Upe-WB}thMin4%!=VDMlCBV5?>@ZisBkK4bq@kafPgy#8`cq~2i5S14bQ zIb7}zNNV==^zef7lo2>hq(tDy>#FF+jB1`|hQ;G4F?(fm8a8a#;#EbO)>S~^eq)xoQfP*0u)WTMSdkM~wKv(uY4q3>)XV3oO-~SXW2657(qswueeQb2Y zk7sxOqY}3f#K<)?+?w zqo!up!P?yP%kjc-(?s;9`nwEDfr}=-Ce|6dDkOAL-MYIJLXB@=h?(k!FvgUknUmg^ zXV?yJh(F{_e+O66q{$q*szUQx+;J4KKjnetx+^+c$uan zW1cRJW#0l$GYLOVW^(~8g;h(m>J^Hu7L)>I$5BA0u|tsNp_`sy*c{L0clCfzj6Djc zKjWq^g4uw)m?Ks>5F;5lLEFpTqTVK40)DUC^~V-5HGuG2?cVr;9_Z?es-Vj5CZc9z z5@rNC_YAnac1w26>ZT7Z>ExR_H`EHuAo~i_PC`_qjDFAZghkuzr%pG(OoSA)aG|4^ z9@TEmSHV38eS(9+0^TV6JK0oYK=>hBUBVDmHIR~%pn$RO=wcj1N?f3G`_>*!0L$!A zPhu@Lb2Xe=(%N5gxx><=!r7$pB=>bxv8TBC<)MwD7h=3FKP~+sF1ZSWV86XmEsG@g zcfpI#Uv9GyANAfFF}r8_L5UBKJUw=iolc}RJig{@BeS)2*)6ilg05}#E7MkQUu!Lo zf$W+tx%2zxN2S(KZ=UNIo1s3RfVu!f5(e;H5Q6}VHLWuei`mHm8!!|bnL1kW>j9aM zatfIRofzOGwDhzrx&V82&o7#%&zdKFn9K%b5O}(FGDQ^HaO*=wlrGFv&-;_wDu$PX z`m9k4k5cYaT$2RYY6jZ4MK^cx4C^I<;DxL-$K_)aijy&1sbHCmn*8^5JU}$M*em6v zsx(8{;$Hv+;ZnRcKYIU9+>s~!eKfCV{+078vWjkc$!!-C`S2cdKO0aObHwRW9Uf}h zleaC0aS5o$GZ>Awf;qzoM{F7e?V;?pCUX*=q91J&tu6+wp=2@8;X$?Ymt+?~c!&D4 zY2D4I6-J}D+8(H}<-GrzeZx9dd)m`ZuSDQrb4OyqkAADx0 zre3XTNy(5x1-4UH^1Hc{u&g;emP`gU%0~| zf1w6o7RN=QpXe<%E^5VaxvQFlM{Jm9l+0kztuAKFYe|{Bx zM*$v5v{&Mx%}xDm(&hux&Bt)#nJ zwP6_VVF55Ju1;r<{1jg4aU!`JNqtz_0~dTODC2e;s2n&8B+a`D8xP#cPlh!iZlkey z7XjyC+mn?)CgK?RL#_B*4G?LGNO#hu$pUzLD)fYOL@`M*LkgGvJ?c-t6m+;RX^99i zW5;6gGJ}RHq(XR;Qv5{@(bjk~0&BnAAKfwiqB3;3M(j*py>}z;7KrpVcPJt>FCY!) zO1Z@V>M=dCVW!GLN&-!7>2@x--2eYwO_0|#G^h#Vojo*JE?Vj$l1myV=aye|Or+?) zOF)f{+~w%9%)cx9r{-gs@*T^H{>OzsM@~`N2-HH1N9x{yC6}dP`+#8QE^}C#n|=wG z^KW8Af3?VNa$b>u6PZq;Jjn`i@lT(>qB^l^CWaqsY}f-#8=kedekT3 z31{U;jp+^8-gTt#pPOhT_YX>c)$(DtCW;~MQnT%m3vs2zD7)qIun4@~^mEq3vr;Q4en`|KaO zOl!#6Zp&ZuIN8C{=?4ImKZ*tRWLy0_3_CVp!kQr>TLrOBVDaTeCX`Kam_-GZ+vayRa6sSMyA(H;Do$|k~akF4MH;A&@Fyy(z50R4(>z7vTq zSI_<_7|QDr1ebF_>Rgazi0>NLp!aCX<6}QZem~gr_P0+(?yV2Z@4qFQ;@^|>BUhjG zWak3s7T)s)UJi48^#3}Q8MDYYo|EH3p^(ZeS>?BCH85jfhL~ImPu8O_zAuO(w2Dce zU}MC_#Ax!+z+Vy*%i}+-tq0=DGAcPb?L|=civ6JJ{GaOG#_4sf2pliE>y9Cz@ zz>q6p^fkWl7F}ku>td=}`dWdQK4eIR6)(Ew@tpp=Cx-8jy&LJjfPP#(=w{aOF1`0t z^X+)%X)WwSV#ZLq+tV=&f$S@^06=U0!_dK`f8f*#%9x;T#qhwV6mou_%Z)^mxu-wH z<|!X&`(bmk`(*(A;^`$hWSA3Ervhzu4+>#{4a9x8tA%?jw_LKpNk?{^rF`-{{KPG* zjEcBWDV*f=`dBf1sJ4FYrfCmRrI{2b$@cMzgSWO)ZiNmUzWPwb<^j~aOw|LShfr<9oyshf6D=&uf1$=f`Q^2-wqER1;Scs{@I&^mN+^laUuc zw1UCEYxMBl@&(9Wj9TGa3qrN~{>OIUstf4Bq&$7J$q5s|^HltIS&W6!lZ>+PR!|v& zOV{iW$?yis^WVaf0?xF}xSpX=>rn7r?p}AR2%>}Veb!Zu6qpM-BbzCi!ZG$Znh((R zxtf&!Kze6js`ptFYGLBPlmDWV(0g&)>*8X^>Gg6_@5Xg)dc!(AJ7{JEI2m_)f1Ipa z){UaOb{R2Lk)B%e!A?Jrz;Lxz9?YSUcM2gceAFSFjnPLaHsvM`QwzMpbhZZk>tcP2hORtl9V2liKg6%t7 zT8%a-H-rdR%5700@O6wj!Y-J3wLR3nXQCH)kTPiTYn)p`^H;zTxwrl@RvI)7Q7(0= z9Es9#xjf%ozTug&EOVwKOH*0dE)nbF$zQ~x5FDAdk+z4vw(fsZ_g3H&|CHDG<9aevljNqS#nRl^ z54nBLp6H?@4kX(-_#Bd|y>5}UqBWs2eVTb(Pv`}L3&+rP&=YTSCb;)v3%4HAt+z(t z+F^!}dnoqNA(l#WXtrlx;JL;X>ZoZ!~ z@cSE`q@4fTO;L~IU{3AoMM_=|y_@pC+@G~Pg(Acy(JJ}rDR&0*Td#I zzOe6og{66r>Ko9~uT#XFHmV0_J38rP7*$?s0A(E6%iD$NO@~?y(kuVC#y%U1v=p zfbz?+_G9Uie$zYnc-c)y#tzu~d}|D*b!WAh4$(1RZ2Jwwqrp?OHZ^AIaW1P?apcyp zKe{Tmt>_=MW^pRsOD%J33i3Y4Yd>x^%~Z8dUmGjPYk@Bu>S`OcYCD(Lf$aGsfQ##wjw{gk`sImA`HIo#UmgM03a{E5>%%DKRZUBV#+oFM;p z1_cC@!4qkcAQk$77ke#9TwI^Sn3G3Z!CVwK)QBNohahz4Q->7tX9k=cX0MCP%lw*{ z;VCI)eE+t(#BI#mq1Zf?8F;{3bIyD_8PHGVglu)(&h~SQc%91pres@H_9DSYJ5eU< zESt==x?;9k246(AZgBQQ88Pw#C3G2ENL*{&PU0b+kjc3iymF6ZWusXzaAS56ncG3+qU zo=3=&?K~%~nL`g`NMo|@+dJ%bK5Apzo707A65V`YuCrlfAnWEm3>tl?xh63Y^%+RG zYHuya{{*4&o#5_atCwVQdhg{Z?s^J!<@TVH&Uag^I~Z^KE5zCmHuq-W@Ub0d-+7%> zT*5<1#<2<+KXu{|XF8f{bma2vz%1OGZ46>sP z)jgonnp39b?IsMwjNRj{AS*)V%^wFVVLq9QmL1Jk z-$n9Gt;wGmw}0T5^~pg0w&?2EV8JRgeCfu@)YA#P?JOsN?cgTI=jmY_JX(@gMs7a1 zVS^tuxbWDxYXefP^ojv*>66l1jL=rvbt=k-zAt8u*61R8am&kRjQ*#n5k($yv%rz^ z38k{E^mKG)l@KoSo+~aT2}3OtA!n%cj9L(n%SS=O`-|+BFnu=a6MuCQR@G@elRRCf zUCSiHp3{IvCu6M)8DAo~x{?zrQWhBM(bI3#3>{W&W$$;t-529LOvwp5I4J2X4#Kr)6Qv}MEn4p@EE=N z3O-VnE~ztvPUkkEk&Eynq<8k_1#+i<^v&a{0wd2pA3uLK64;b&Vj#%ZIMb()QikKw z56}-mk_-6-_+)*w0&~b4e`PFse8j_ZF{MD8-im3^`QQ>gv9K{l!lEVQv}^07nVMsghX<(7E>)BR{7x`CR3Y*^KlMSVrrTiA%0 zzs!h^IQp}A%RiOo$%7u>>F$2WT1I{R;wORA8W#-chgVS^Xay3PLf&pE!@v9RLmg|Q z4d2;^SPw4Rm#d6&B2|2r;|@P$<8iU9kkb&)_kuxL!tnt+4fAC0jmDOM)bZ70}aw8sWzD z1M@oY(~=|#sI?Ykbnz)jyzo<({AXRzim^^NmFEFIXHhEB{Aj*g)V=0jFfBq zI7V|8NeE-)f~yKuKvoL*tC;I(eQLce79BAW4thWwac;&7W9gEb9$a;!z)3h8b+Inc zf*Rms9LQ;2_Jq`gntJ4{lHI{p>_*tBiEYD(k3%Oc8a#61j8E5i?nq8tv`3&Bp06+w zJVUXrv)$-JIdxce9vBnPxpy@IFq8cXIgArAttd@pH_>YNIK*%LvBf^OaeYjy0SCHn zr9Z^Ob^HnAV<+{%FP_L_2EBWlKG**`3eHKCI-)dh<)~@G6VeOp_ z@>6P<&oc!{S1b4K9Bj8XTTHVy0*Wr3GxWw+-sxOaHDq_v@-bEceJIrWnqAP}P%Ex( zw%Y8est_}$zsBTAdl|IS4`pfw24JV`^3+;O6akRfGC2F`3v=> zr&*8e*8!pOE&tlfd*pr zuL#%BW0Mv>*jr9y+#+KCm@VS>decG>wHJ}u`{1nh>y^VQ^Aw5zfpKEA2z-NAjiFqh zt)+h>6OxEz*sx;L8_r-+X(po*aE^v5Hmh@XHBWJ3F~p(O3$o4?3;qXbLzT`(N0YP4 z%$v{~bv_&NbwXT4{<24;|1jXUVh8){@~R6wfrq{x>}x!^-ab$c{p$zZg$uRW34mtF zP}I=8Pw+x+y=#vz3T|`(-%Kd;rCbP4c_G z>FE&B@{)^&F;=-9xvVf)!);_0tgAJ^K3qV&$+0Yd$s^^(=myekL!|E*8d!-in{O;4 z+;y?N)!p45*-K{4sL@YXWR46vVgA~uGKUO(g-{%HrXuq`u;sZ>V|%}R-le?(aV~eU!V6| z#(|njfS8ISBV5i4i~i(2_G%NQJ5B=n(HI)nyN#ZnKU}obW+lVLP&b-Umfp)P>v#UJ zl7OotefzlBBzwRHiJq}0_n-#}ll12CE&&~5cSianf6m@T1IWDLi~$ipIrSP2|HOz- z$7|Ec9SU_bg%hNsTf@tiNu|u0dr7$l6a!ylLY!pMO{dR;O`FIqad}P9D?LZ;o+pDG z-~`Z%;fMHOcP8K@(REomde?F5Dpx1_HdkT8Y~hdrv*{255>FxLE?pGU?xrj9Ms6Ji zPVWb62J+J_W&Q_t#{XvoK0uB?x5U{yE(Vy=HI$yfw(U~F(DClklq!KU)kMul)=7J}RiWQTu>mTo;v1z|44hlH(|%35{2?pEz5MKAUO$mPJEzYS zO7~~djtM^D>@YW(<2j#)rwBLK;nA@NMP-KW;?AC|@^tic*FRMTylc17LdDK6#R?M@ z#PSm&vuHcqZq7-Ha_(c=k)tA}myb)#U8ztLhdYqu8dL7PV_lWPol=WS+8}&~JxxWp z5rel_tK|T3EqSUdX}2R~{uYPM8@W)6&3|-D#ozp1jPZ}(R>J&w!j6QS7Hz8x0B*qG zJVX|aeG@Rx_G>jq@MWHUgSz?t`=xPjt>6XM_&w z#Fm3UaB}MBgTWo&k;C!M3)o*qpqEvqc+Y1YP~aOxL_pfI%5~9dntYvw_xn7ASj)dp zH__`FD&{XasCJoUXLVa)tbYOdY$u#_+m%d^@0+hit{*6O24GW>)&E^r|4QHsYfx&D zjU7fc(I=ntq>Td4A`1HaDcB(iA*_Utz(P}u;{a52AzV!COtVNr7xAq@%jbVIDM;>8 zG_Cg1R*(4IC434EF=Orux9gxhw`%8Ko%aKIt*x<`?t+?(+MdO`@9V9C*O_ue>4paH zHI=+Zx8&x5X%b>>OSd_^Ek`16Htzw=7d?D^f*9FTUCR$G8gsUF%L|Te%1A=}4*||G z4US{gext0`j&tnp)w2I+jBe|Eu)fGidm94ShJywAGm5LFtuw`;7JG4j$(K9o=DE2AlG?7#(OVYDAFbdL^Zwj4YXZnP8a{QKkg zN`A+URJwCS9%jYPx)=okb&#~m_(J~3Ne?h0S)Px3q^bl*i=^CkaWqxlz6TSb*{}+& zhklo6MK}b7Vwa_g)rIUwtru4IbeN1D@~<{7gMuHC*Jc}ps%AlgUBNgf6vM1r(TT5i zh@DMo`9gWZgGszBaz}7amT?eet*V zeZ^p&)}*x=m{mPly73*p=2(k2VES+qj$9vQR{sk?!rJt0n~&>z49PGI(Hr@LO~tB)hDm48WDe&*U@;mRVQ(@Sw$#?C+kop&;;7KAGH zN(~V@B!g`{>l6RA3Al}=Rf5MKa13(K5}}hB%@!x7Ws-E-{U{Pd!PMsTmRdRI|L^quT;D8kY2LJysZ!u z&%UOe3)QW!ClS559K0dYOz)?H0&TE`Y*DH}BJ=UuGNUIRVPSvAOFiGOp%|uBDkN6| z;UU2h_b`NjZ~Bd<6LG6~JMJMeFjI$ocFKw5{X|A`x7y8J&*-lL_JMrZ)^vmgrfIdk zPHy90=6nal8b+S(&Mj2slNiG>(9=)}*e^?Cj6RC46pdS|Bl$6JwX6AIEk<|_?ex$K z^4Ex2M)t(?uLB!=*893!*S6%d^_Ob5Sm|`-ufOrBU~~}rtlzd>v{IJ+drl_Gbe)QU z6n>6r6HRb;Bk9Pq;CQi07JRy3@|3#ihZJ)ci4moSDUHOVL6B^4-{av3DV{7#e+v5V zouMt0NIn!MUW2vzVy_EIc7jLKa(b2@F z5-aI9b}U$*jbAq=rPw$K6DUW6KS>X?iBW#51S9=rL?dkX$CTWL55tC;OT$H|MAxwb!+>`N$y@i(wc_i#%8T-DYH6B)kVm1 za#2U$(c@wzipRn27KbEZh-qkA0?@r%-^Q=aEUT4inDihLncA&$pyu|^-75a&)4UF@ z2AG$R7&1DZq?q=fqsgqUc|d3;?{_lIpw4q0%>m5Avn7=w$-WsL_L-`n-LW`O!rjr` z{rg*@oHg8H_SjZDcIIa*))k-T?shR(@@TIajrmcJa%fWrDX19o2f}I&2z>&lF^xYh2(zDnTJF2o^NdDin0EAS30%!b<&X`Z374WJXzU6 zx}5N7SOfVA%FnL+KO?uccv;vWOC>XxZk4G^LlfS|{{WffH33sq9o{ z>_X{3Yb&?}QI0SY>V4J)OY?}Np#%1V><0SpbAgbO$Gl9kZ8u%>!v`gSyIQI~!Ilu`bw{UxhQQtd?mm4G%uf_QnW=!}ct zmtUg23i@swpW?PB-^0C2oXsn&MCf2z0rd+x|2mHCEloXT%ZQ$|0InV z;&Gu4dbAE8;nf{ONiGY4E&nbTLa@jb7j(4U(QK81(9a_D;+IlDlx$&L?6;I(2ej}R zzM{UVeWeAu=0Hp)74^T{?yJu$zR5!3#DtkM*N(StZ7_F|vyD9+Mey2(BFutsU97?5 zcfIb9=)r6Rsg|5CZQrSrPSQdH@{7$<6P4;R9zXRl=_v<)uwN#BgE+*a4_C}-@q{v~ z9(d%_7X+V3m;CK^!1w17|Ae$69lC74xBHaawGQ8cRF|RKRxgxokN>ZL{jV3UWx9PG zNcMV>aVf&kV0FS*?taNb2{8Y*?laGe=hP8m9CN6^9q;3acG%M7|D)V4+ZJ`$5dJlWSmxA?BU=? z>d&6OZEh*=91e(s%+^1o#5>cA3!|@6G@_ z9tqnDypNkFAy!^gz(K_^ksGZu7TCrnmm-4pou zPPtD5zou3#=4+aGJz@ol+n;yzV5qO>g9zb2{=YPY00)Ggu3!*^78O5o2% zt^G|O4?dWHNiInY!1Z2sOx^g$LRLv@0MFnard64aNdlTFJlX>Egh(WLnOtsrxp~>G zXvL1X_^h+ne|gwLAXJI|{A8_=pS7OB!PG7YP&`hAxR?{(c32<-!=;ITP;9Ms%PTe} z>ioGN?~{1y@-(%l2bLC3y}v)9VFGQEv0pB;)>k0r4OmR`I&Lhd1?UVJs5Ibe{mzXb zOyyP&SO`9ULK~9o`ZabW9L8xG`7MSiDEl;q+1;?#xk1NdCoDem8fW$4x|quC zpFC4Ft*<3r&O{3pyBX#_?khESC@ARAP0@K#1z|?ja!M>Jd3BpHM559j9%~~P-ay>shFr=e?AJ@G66H=P1q+0@-qzM^|C?R%?GZTCwnABOB;CYG z8p^^e_}&oG<_dE;Kt=}*iqiTCUZu1F)Tmu-9wKm(L2Gkeh3QRvadW|eJX_nlJw`Pa zZuW#6Kt^OcpZ&E^+8<;;O7uhI}v23C-fxWV`f7o2Ixdpg2AqC zdk8O;S%kS`$*|rAYC&mwhAD;3O@4+vguk>*uuMy5BFB&DDuuvYh0#90tsfr5-&r~o z5X5!lz~A~W`{a&e(Zry$*i<=Qy*SIhLs*zxBSWZt{WGlmiqug!X4~#aW)$VY-;Il z2-mX5kRszd&+TUwbUgd7zJDY$#HT@@giGe)IL&budn0s^7eCl}1@(GHdXm17Xq?}KzF#4GED|(^w9%Wy$a+fd*(af0i zo6HJ0yv-E-0Kva?4gW_+;*-mL;kM*4REbfIUd@(aiATksYo8@uVBzwQ_B_5Bxiz%nw5~mZ{Ar> zTke`#ruAedXx!8S3gHPl*k&S+hP9qLJl2-#wfZ#goZ>mS!slW#}0B#-!)vc^BsY1hY{Ns3rqNuqeZHYkxUv~WcH&v=)e@h1`P|3 zrc&KfQ5lAV4g)fvAbeVFjNIOjdphDQ1O-*Mrdi~B*6?5Fmo8ud!k#W}8AAJ7Ay zn4CFAC>lKl+I9}rSQYU;T3N9jqWy{9)aXgwabx@Lw-aS&=y?*QpOfLxBK3>Mh>J<| zn*tZp4ubQiG<@Hir#CKa!_@I>p4Xy%8q&r5wZwrLtjj!=Q6#0)g)gN9a0{Z-+5Y;i zk~UKG1|P|bghwwc8vfF#)0Zy|6T|0z#@7XkA@vi(@6clhgWOM>4{ODxK z8*J_@-I4nRV&)D++tw9S3RMedKr?pYiY&2$d)>jFdJ~+Xo_e^zuzR`#7+r=pGBzbY zw(Y%Lv3_Gf_&BEK9_gRvmGoFU$z;Fp(`uL3Vr~5nd5CNMA@n^X;3kk-#XZ(WKPqn0 zf_zB8nqeiSL%P7?K@{uy>S~QX9T(rKDc*bo1ePe)TpH4NpqtTqv6_Zxxzo- zbotNl0SQhW*cJXqF}U_IRdc!)u^2jr3Vh+iSqOKyt#_a*(8ke6uU1P+?5N)1CDQ4K zFdnH5Sv+pa#-1quIZrse9OgU@H~o6Mvq}@-0DQdoOdK#M3K}p&Ok2~mQ*5K4$k`W? zr?Vg|ienjJ{SxIV^BLy^%CTuHR{CRYRzz|Zzd-CKM2<28$3eC3B6A5>)sqvFQQCHo z*3{? zJMU05!ezMbn~(NGG@q$0E$0AXW=Xd`RFtRo2bKmJ8CgcU4!(njdlJB86%5+3^>Y}s+diwn#uL^lao=^w zX%VPtLb~A=h#fHa=Hs#7S1X4Lc!Z#EO2M(is3687@iz@{j$;KA<0>rKK|!(U;P+z+ z{1=K{@!Mv^>KL%OyQ18}j*w7;kTf?)wGp|Q*UygNGzXGn@3BGvQ6%HW-D z`z(|0-1u~2AZ84Tp9Gx#vFK@5!K5HZsyMLSJJgulYk9}+0U1}oqRoQ`IJhd&^e58K_7K@^ z4pY0E+Q$U=q8NRjBesxxIWypxeD_*^&56(=jwUDwwMuui<*n6!rYr4A-3$!U(<6u< z`R4pjnJv|=w`&jK-{;NLkkZLJ6cuR1cc zB_o%^;u{@j*T<)~>T!Vft_u|Xk8$X4R(Cctfh#*B`eLgC72JH=I+EK6`dUcb4N<)i zD)>q^6DFQ%qU)^S0NtVn9|k<)%i~dM(?>;*RkU0V^(#E6)RB$GReICMcn+R}BBuGt zn*-p8&p-%|gTYWMPnh4T|EdVgo99#T2@p-`6$OPxJHT34IV8BznQKo+KMVLa@K(lkX$%N2a_Z8EOJd!BZ`HdJ09Oj%sIUC~PN+`Qb`9_ZRsW(4C1C$ttW#aaX69{|htd`?}l zvhWDi_NOa1f?K17=4Qzs-wsXy&24uztKZt|Y2lHHj19u)n&;taI09_?F{9jn*U*jwh53rL5;kWYTwVjS(XD^?{nH6DY223muIjZu==3j z-dXSS)Mpn8v%~Idzr^2yiBl)^HP;RH{>xql4v({$wgD$AYFY^DA2M``HQ7UKJniUY zYGyF#j(k$3BCJY?q^|Kkz{3{j*6bqeU9?3dlc zXj;rS1wX9Dy)Hi1>6AErr1d{(YYT1S#`xA*%ku=>l!>0faJ+1!zHk@Ro6PpWwffy- z-RFA8i8Eo)_;4|cEHVBDGaTHWNwtPKxl+{NvH=0LRZ_*@HeVw88s%Q3fA^8l*LUy` zA6c?Z(5)AxHO|`&g$RE>MA#Me5%tQInV8&fVBG+WbBTB|is%efpalCb*6^G(^ST%h zRDKY`E9l2dyu;;0S3iAu?95tv7GE{|3b{*hC3o6x!ZrSr-`i8yH&}fk3VqMh3@~uT zq+7ZoB7^#v)pcaJTEG1maSGh zMKo}DXSZ2;)j2VZ&w9*DLC?No5bFJ^PFgwaSS>ReMWpujf9%=iH?J9=n=X^S4M}|t70re!?H;d%C4&*oE|Lyqrj|`_?a*%qAKStqwk5tZ3 zveH=Wov=KYf~TWk1j<@z6fPV&#T0ijwP)KVv&X<#3D{VRHhA3O@4gqh2aJK&*z~+$ zUW;)p{`quml)mc5`#mbI#CPh1Cvqi`ljH|6E{CcVg0U_EihJd}a4B>&^KR|7=ax?? zM$Wsdfgd-^w8oYmJlucVxOE4zoXLFKWgk_FW_#b*Gq$e&cSt&PT@4nME~XjVdD?yo z0EZA#O=Mg3h$lRd8~AiNC`EuXcz#6D&-4wtvht{aDOrqP_d+RI%B4v4A5yg0u^PQ` z|Fhj%1r;)`R^cPc29R0%fdP-6iF)Ol-@#{-*H?nBvMew!gJO7%s4Wq^k5Dlwp}&<( zl$>@~uR|U)UnW@Z&Bil;PlKTr-NY=}v{keK@49T5c~*zZh@ZgD$7fbm;bQ&j5&m$L zisi^9oLqG3+hySjcw0PLI8Q#tkPON=;o&)KfR(^6K$*(E6?51bS0fhbHCB5~v{SAZ zLs~Yv`FE95DsR{%gOg2~Q}XYmu%PdA)`;AU!Wc&GruNQLxQ;2qAM2^Rfw~^2!h&yZ zhmX4iSN5-+y8Vk5ggyV=N0u)*kx5mi9F~=Tx}V@rqaB~7S*_&&f6Y2}*9JLd z1z#yMH|t1-T>7{jn)>#1UB2g(rRMEeW9`K&`qD`P=@#X&7*w>VOq9AIuaH#WvB_1( zOuOC2^$~xwc$Y4mNj@vUwNA6n=uUtBhqTTMyA|NXRp) z*hM=O7$h40@JQ*-1d zVzaG6c%g(YsQXJFXK39$g8I!D6JZ7b=UQ38A@4d_22_iA_3K}N@S8~qa+OefK14h3 zx%ZrN-zq> z1U!7iWls1j_X<$1?Z)ibnTK9<^?aoQ_ zkxciD$fTu?3+ND{FVQh2NzS@mMxq|4K9x*XW$1MVe=$=RUBB+4><@pt0^7-NtQn$4 zv{N#9DVC=GM>U-oV)RYl^zz}BOOpQm4g$iw$NR=huYf2y(3$8Qc_GVd$l*`Gh z@XpMZbq6Wz#L9!!zHI68D#2qsiv;R3(RS}Eif7^k{-89OgJZ8_B@VHBiy7V&9RQW) z8*}+E)3KI@ty+Sw34hg|ed6zQMRsgdbup4^94S)vH3;so6>;ZyqKK=@#1wMLo{d@Z zp#ko~ItnzQ5dZ85abVvg|4}qs!~w~$G2f&&VDxy{j&$_c!*_-h#GRFHfXXw=Bj0Gp zWZ&eZ{chItz4jiQ>rdJyzA+?Ev$FOM1S=k&D@;86`c-B)g}*iFV+x05azOc(zRqM} z9hy$5I-{vhsm@yTY?T_|*dc9*JQ&h$-eJ9{MsP0VPIIbk&67M?#|wq%OrQ!*QX4JffTN<*2Ez>dyW= zXv;g>Jd=M|`@~?d&3(Sjop&_?T63`o*n|ELN=%@9*5~@_I zjd6j+NEHZjevv$`B}`N4kn^OTL9~myVIKR)i(?b1s-#o&2@Y3_WV08jCFLpSuexRU zFV6KpaHg(LhfxyCsTE+pVoNIjLmI>ri0VD#ypeYj}X3AB-gFJ#+JCD zpr1Nh6&;r9sN8YuB_|4Tu62xhZ>V*A+w6S!xI2kaNYi?9jXo4K;JthP1*mkmi%??vLQ4*(4Txs-#q6TwY|nwx^a2~pZ{_MXeJ zoU*2V8G+ocJv^+x?S>;B3RV*qJ;%?{E&?CW*OD71E`s+>w6ENFIbHp!sxb(n33=$P zR9pp1W8ZgUC$cr%(3Kf}^i=f5hsPIL{UA0xrFDIFC_F`2XP!$f?SP1GBTRXLRAuBLj2QqGw=WV0PMm9qg;fuyWu$;fG1D*aeif2LVQgKl6rn zh*Vi)9VaYQ@)7FX&Ospu*RTn131!dsG=CaqdRr3MLcH${R`z3Acl_C}12ZsF;JFb0 zPGKY#qO@>Nsga0Sc168XcL=3j$!7wo`218LgQTJwy^_*m%`cJ2eT4R0Ch3$gucYt3 z%@+T$*ud?At!i8^k}M-nu+1fVELYMBf57J39(X;{|B0~YwodejLfP<`r81X&qaN`yE+uR)T;!-&Oe z9#blD>3ayfvZYxpO_iu$jVe>_-Ld}-l&=zJz=44ch zZm6$Z%9HuO4fKj96(1~+eFl#4fJtrjQ8uRqV_8;HMw;Bgd9rhe1s9??2mW30zr!lv z!S12^J`z2ne{FkBjBvc8_15Y3t^@j};oRUPQ(JhurFy==uKb2@nDd?x--iey8#goV|HHjTAii9 zrpfpuM{l=K$(C?|a$?xvMO@_k4rm)t;{@iYf@{lEO%*PE-}Y3ZjTtNNuig#_<(c(& z**spf+fFvmRkl(ipWb_W=1ibb>#NC9sy|H1n!j}kL#e_c_x$Fv|1J)QVh5j8m7>ze z4;_==VK(}Hm7~(t^faW9a2ZasN2e5>Ot+otehq1uu$c^0?W~!i`o(;D(55@P?~!b> zDAZja>|^oGLBK!OK}q^%=8e^8U|?UmLfQw!ItY!yNL+crnw5jdRq6UDU>{2pO5_Ae zG@07=(I#oOaf?|_G`M-u0VOxBB5~epoLJOmDTFm#0&h#0n#e?seaF4=+87s>;WUTQ zli*ZkB@tK9u9PG=_f>^xX!;}^oyQ5yY_lZTVcCjR8>m}=6#2Bz`6Sb^kDSEIhslFs zs~hfT>=JM60Q}A+h7MBT)EtKTm^+T;nQ_EiE;`?dOAMF9|F~dMislgGVq`cPq>mD8 zw6WA9&+}(oUu~XQPKCc|-Z|E0v2=JyXb+!B{TK+mVD(-4-(CRYcTG5Ywezx`I{xQy z|1NKhJ{0wP#Cf}*y+kTfxglJH@|aBXU4QEBVph5t%s6H7`Ba*zo@ZW5Q*ir~$*31K zPPpDt;BVG!6znc%zdRf90y!U@v-GXLd+E%d2DXxr zS&LzkIbWltL+37!`V6ki=mEX~v9CxDquL!@9MDlmA5HhwabVu+NlL%D`Hzbh<{l{s z^H_R16r5A2Od$xsq!XVXgzpMcQL$wA8<-{B(*>LmQ0MeI`Pb3|&|Y;2g688w?*X8a zB0?rrk{+q4B;CVzA1S)%J`Gm`ZF~p4;ZUUeEK)tBA5u4*H?~sr*%PnnSMj0si}&)ouN@ zHhgF1<{Q|z#ba@!|MQoewuE1hnmfltmN)~JA)sCTJfrdtIy>t>gm?>DfpqR{`Ds&R z?AT4za79nYtH6b@nJ+K-xiVpEz;ybHogitF)yzp7q?v z^ymxI2fVp)`Uh?3W6tKue?a6dx2wy zZ>e=qv<9s0VHL-7TM90e92Z5l%UF@|{U4P;^D@l{UlVl)gLk3qKPap4ia0VJX}?d^3RzGnrWzHMNWYGWkJbKleV zs~)^e0`*iB5)U29CZxTpy9`@-MMv*Tdw^c3D^Y(B;=OpN@RO|BETJq!d*3Oe1d4Bi zX9_h_J>S(%F7>p4*gMoN8SvZfV~a?nsuh&Ym^xvhdc#$O-&3DHivOgm4hi>>7$4== ze-)9w#+8gD_d8yWSb_uLj4}3A&DXqi@@&x!H&AUYDgEN?5OZ?|R%@6x##|SB`s5$K zfjJz?_C$~8%eD0V!yQ1bo&s}w+bS&Z+h?B@+BE-fgDN=K`v~t3cfDnNv2RE-NZ<}l zeES=nk7v?&TrhCMW-(%}{1a`7 zEos=>Tmyj}50Ftc$*F43r0iZi$L6TiS3ZKte2^9UOgw}qE6{h zsYjV9B<80~Ifpj-o~6Du&Vd-}6$oU>(ee8PS}Qh*nOpz!=e8c0RCg>4fwByFaI07F zwE_PQ4*Gd-=8ay!8^kXTXlwTDI75l*vW#g#Mgm+c6P~o)mK{lCMij}8M6}&L9~>+v zWG&z)cn(|@hL9~@G>)v^*vIwfULdZU{Hr9#&EIV~{A6vOod-KP|Cq{e5ZZ()jjeCn%(K9%|WEuJFNLF$%X%{XfY)1X1xqvHjr* zO|3_b0{o!(xp@qHYO!T|6Ql1i&s`BmQ4@agvIIx!SXkSC=?<6h_zBD1q76%vS#gEN zrl#`Uxw$lZ0m0$OoZ8!Ni-8~B6>s$fq6oT2e@*(IxvQ)+`7bwRxB^4lVzSU(S`P}^ z(ua*!f5naxw(i8J07(E9A13zptXR$#YRrwKLrw0avU@@Qm z)3&Ob{fLQG6sMfr`mF?U9^s0oNL)V)vK*9ja4R_|`58+etl>f!@5%u$g`y^-T&Q{Y z?lapl=XUk^kY!t)ewTfhXagqXK@(h(qlj{6E)i z%9(XRo3F#eA;W*;*w^(rOOFF+Tsa7YUKXe@UX8mG4dBo%b8%gQi9t$JWZHNYMCA2t znL10dk`o4;Klp@7hrsEY_#YwLpvFtIjI0$Jo87VU?^$|(De=K&Cri!$#sSs$eiVh!=XB--uPX`4S~R%z zOZIn?QFQuq7kB344i5fy+y3_VS%d;s_|fOXpDjq^l+QM6=e{F>J`{SLbf6bP%3afz zi)1W?qV$syKSQS0n}hq?*Z9)Ntlu#2wGK~n$uCoMZZ<4a(7^JrdPXZ&_ejNd4gleI zBw4e_Pre;7CcC4fQ99BDWwJV5wS=PF8TeI{))1i}RW?1%(vOWv0<|-uxf~%^6;4yI zs_1+sm8F1{eRO_!-6oo!-e#3-g2TRkv}?@(UkIMY+ZY;Bt(~^}2Dc#ZB2=7d*4|UNvHT*$KGa(c9x9_@R;1@~AF|22uLV3?YNLBpb{|R5o(Z`7%XnsP zbLcdQR`k}&v7=8|)%%QSJ05A%AGJ1(IbHcfk>t7Ok1`o=^=aBBz{%b@3B6qPrlf9Y zC_#^(3U#tYWUKUrLu_x^MWiE;qQ~)>`jyV*MkjoHm{|{zWtn@9aDEa6?K#p-b)CO4 z&$h@Bqm5Fjv@e)>2vw{H6ncX%rTJ37>uk9LS{WtPtbN3k-44NRs|d*}?k39;apMy5 zNVNeY4g;DX7tg+L;o6*2n`!j3#@v~^(NKV^WVK-KgK@z+*K6&O*Ch^ve0@Z_cji_A&bSRit-X#XpO8LJ5u)hJ?MD_lp0zUJ+di1;A zqSQnYX)&B$I|IZr7G(PS8{E#oj()~EJWwi?3^|Lp4h z=inpFSvNErK~@yZ^R_yTYI=J8GH6I~Y9NmfQieb^3`11&)lKD;70%God&AI_;rYx9 z2UNjTlz}RQC)gM0hJDsQgn6;;ZT6R!PC}aJiZAnhN(T5V!)nhU7S%YFw1VV)BcOqc z&hNAf2)+NG=jh=D)8``HUrC`Us^3G)LgZ~0K>ly~sz`~uacI2#2;`*dWk|cX;KoE} z+kVY#Lb}}Kd1t`O6>}w%L}jT}HGNVS(9PC5HE=m6gA4 z^_$FK-YEU2n4nXmR$*5I7B$bU+V-vnj<6@_RJ8RZ%eFcek`JIcF87mL_w5r9y5ZL` zzXI1tDotG=L6r<0M^u#X8lqLHvmQ!^0ftafk!l1U_$?S6j(Z`t2eK9j7Mf?bF#-Uv`s0 zi-$H6uH-8*2Yf8}nRh@YGl%2>(Y$G$ipYd5i#BGdsATBe1~=IxcR(7>On*uLsNl%9 z`b#_vOv+k$9^SJ2j6k4Z)%a)Ru|NuW2|riGvyoNbDCx)pAD4L$7{0hBet!KGlPfnp zMVmYKuI+XFGM8YO=kKM&!FOLsv$o*ur*iTzyYdX@FTSnb6E=1YE$^O=3_z=pFYDLm zXpW?#{8{xM6|UjI-HVWQ-{T4^${Op*T&e9l=(gPxt_yw@(>0KCTqpj+yupX`k)D*L zd-`SbR+Q8I;UnJHj8M~>>_$#JVz@uB;4TVhA`OEP690VDY450Hsz5QBHne6^jGrm< zv0z)Z$?x{eacfVq<5PJ!w#V`yAb2Hq{YdVB|1UyxKvnQCz+9?zAMiy@>vam8%`Zau z{VOxaQe#M}B`Zz@wQ9j>@|vozYzNns;jj3ruZ~T$6ikHCR+Cw8xy?{+L^B1rGwllut19y%E!t_U1O$gpP|Z~S{2`Q*cgWCiK_rpF`Zu^J8zvSO-IP@z z-1ZT6Hcn~7fwsr_K;zh0gnl!N*=YBM6qqOZbj2L#uxW8z`zl<#?E>d(7l4@HomBIz zgJd3!(f`<~q1gi!sSMVym5%Y+9jXoRZ*e7csj=V9^7P4A*&GSijAo!6F=9EcHk97V zW-m#qQ96UzNZF26BtoU_a%PA>FXa$ycz*wq{ENk{QR}=8JA`>8?M~0d!_X6arRr`* z@qp>1f?RjHA`)ft*ylMi@oe_i=8xZ=w`kSN^@qG%{x=*cNMD||Y2uZO9iodia{bP1 zgOFEwZ_y@HXGM6Wl@)n$SUb!QDx%IzzS!gcgcwZ$z+SD)exk&g4Ps4jcjgpKf6_P2 zF`~fWH=^R^FxOFg0!YjVo!uIi3?*6G}_vueO^i@`$UKqWZ6hTS5`mht=I zw%E0;BR6Z4!RxWchJyWN1t=%uFXY1y`b7=#eb#VQt0YowYQt8AL89VRJ$f|iyg1A0 z?Tz!P+U_$~^A5h3_}-&lNEzv4s#Ni4$o?hLNAEhz&Gp2tTIvh9(R^wI(X1{?XEKiV{h7WN08T2^=6UfdO-844QcmiV`8nD>E#C(D@6MswjToB!7Xchd-g#3@=v z>&|nf8)~6rJWIZ?#>)e&RKJt;&SLbX01SBILDzAb5x+$-+Q6r%D)d|`wJG+J!`UE# z)Qh*T*Ru?{MC1*Zg=Gfor3Mk<|L5w=JNHAFiZ~Gl_Id^ODqybdU^v}7gjlxCd7(>M6=MP76 z!FF$3eeOkXYZr_toIyPGcSC0%_5mfp+cp}E^AKo1-Rn?m z|BRnFUv7uSXZf}?q$e`WRR_=~`IT+)iLRzzj#^$|o2sI7$Yn()us}-Dg-3mcel%D> zNGivVyXxacIjsW|`bjy_Yb6>LruKh4{F=MHXEfSish-^eh9@4a$-jTC&yBh`OUvvx zJ*p*xNMo5hViTSs-C{93AAgY(aVetN;j0t&>&mq5GU2`Z%8s6C)A#CBJ0DtaMi^Yc zx>jz3HbwJe>iCC2q|LiE8Csm=zXJkxSZ}ZAA?UDdD_H%2GqAiQt;7f?M{W$QN z+z%pGQAXZ$rZ{h=!;3K#rAtrMYxj3|<2s1pRQwi^A7cvS@JH>F27tB@tTBtS97vn> zMi-e~Srn@>3vsGN<=|_oGa6pF8Ru}5*(-ER$4+^7DS{7hyRO?&+A&1txs3+ve0@uG z=(T-Re@+7O9N}3`!pblFb>-W=CWNo11!VpGd#V|aGwZ=_T@)@oIQ6*_yO_Q#g? z2E|{Xss}}N$h@oij>ifjet0YFBLz_54ZL(azqy1dHc=wq#U6Y@#P}(Vogf=d z-YkcOvKuv@ntD_hB!P{SmYwy{evFP+<5Uxj=$*A8e z?bMxx=%0NOV$RWi21e~_=M+`-U~=FC3+v^7rZ1z=Z{_;rVCSSCyBxF)d6pc8{OPlY zXx#u8e9u2`L|?!k{Nu9Q>fSY6$4e${;EgGA)LRn?6Q?@X(sf7lXc0P02ph4N6tSM> zx88TnYkB#;YnMxR)5~jn501-?6|tk%xO=e#YNGFrT)L5&np(cLaB`~DJfqUwB``nr zGhcw z)ZIBhP zL3|%*8zxh%E@h`6zG~FJrbW z8Q-Q3f#L36F3Qf^`QsGcjkt(;HigwVv_TO^2_31bBg^Ycw8$Ik1O|&8YM5dY&XA5D z(jnR3^>gt2*!K45^PM6Fsq9sQ%PTL5LQd}zkyW-F_X!~}@v}gAgA1<5vy6cA>Ay3V z$DjY*oxT(!62F3w*qHBddsJTKls0bqEqlzq*2nHAcc7P~;*PmYm?8YL!Pag=Q*1Xm z+f6g!i-sJVCH|(*o87A$vTnHNfMqxWg2650EU)g7{_hU`xom@g`#I(CbNBmr-kI=M z?Y3Uv#J$Z70?kgN{dJ$xR*qkFWr|Hk8HSWN?^;KF_4}k4nYjv!An;(nkH|woxb+xJd zPHLX-8rl5rd)9zK9kY#uJm8cr=$RBjqGc4ig?E6henB{qa zq~o2@)1JWX7WvcJ=X0?mzRl@S63{};k9fe+MYhS{ogcHhL})#^zNHLE{iKvSzp3|p z*)#>vHl9FIHah5zo7U9}a-_Im`fE9Pl{$IuAXS4OHb%G8%HDqDB`T5;3GT_tG0>4} zbXG$v-%M27!ion!Xo&8;e@56JB>NmN=X zX>)Ptp7vY`c{X+WxZBq{X!mQ(sv4ZuUJoENGi-S%B7N#IBr?pLE1F_m@832K=TjY| z!dqn{Gtbq2mtVf>^V8(aU*M@tR^b|{`3CNg|Sb3}lD)Yni2qis^t^GGITb)-$+_6mo-Q4Mjq-A(| zR3y(~^ZLeokndGl3SD$N$q#2dW)-vf$dN{3dCJ~J&9wF-# z=+MDOMPF?)4;>PS8nbj-#f3E-xx3!V*CkV7jY)N6KYWEtEK&gGj0pp5w8dZKxfqDU z^Na-0YL1}}s&e^`l)MG9=Z80JvPUE|*?GSKS11=dObXpeI zW8^DSI?DI?Jua6l865<_Ssa`@OO(Gar|U1AtJ~DK2mM~w-c=2p?WQ1HD#(rR9G0_8 zH$~?kZHv2DthG-+mKvy3-Ct?8E59E33WMmM6tb@E8dRMM&)d^@*a@uq8noj=pDriQ z3)53v`2ZCOexZhE1jyNgJ2SRSE-dtN5c4-w?HmWw@!+XzwnVjLl@dR0rh_8$^y{;- z&k1Ui?0*j1*?35NaZrdL%r;YU%AKtl>Fu||qlDc2h58*lHD&cUW_EwbX&)XXeVR*+hK}nIcISsQ+BY}3RhZw} z{nbw18J#>X`|*=nOLePDfhFh9Km$-QJJq$^*Elxt%dW69*sB_Skymtg`)b8tO9)31 zl}HBU^!yVRxo(~pprLagxKbyeL*!7TuU)OrX`o%5Xr9x`w`Ny% zW(@R2vF4!6Gc&;yUd~hjk~5fZXk=#3p>EV=Cgp>e7u914pm*g)s`p`L)a@o9t03U9 zT(}`UnsHNoK)5MVK)h9;$}%Eo!Eu?mX$xMujXkw*_(*{Mx(tw6{~C>95x;a)x%=t` zm>g?*S13986GJRx+9G=78-yZbr5Zm1Ac7BLzYahw5fWj@r1SW78zO2BI;~af&>ukS zoC}Hf-LyFPC>=pc_kBKt{IxyI&X$;OXq55KC1%B)X#R5Ul(k$zKoAv$3_Aon9jIeeLDLH>pRVKLWPKOvUCozj+)G+T z*;m-^A984^?|-Fhkw@40YAxv!oSg^UBiHY+o2Wi}lm7T~%z>vknHiUW(>JrTeIFW> z1cUa!r3yFEfmQJCc#o4!WjYAK-hZ`H2hb`CZj^TNmn{J zEFEY4t@)(n*t7Btk_*VS{oh`IR~C6B_w`HTO7Q7PR%xJ6i1UmxdTE$@P68$Gz342w zPt=!RP_FM_8zV5+v4R^{K3x;w;11d$kSX7gH^3QUgC~gaa26a1hPXKU9~+23_r?F- z=YTs#aZ78F@GJ>r%C^v;yl&bqwtx3a!NH#Z6`YFWF`ks~U?9P-PKdtn0|mki?x%co zG?`&tsZvEw|C4t?8bqQvGE2Xtp9)wL)v8G&Kqe~hXFkwja=c@Ya_kz?%jeS}B3Jjq zO+1s=G+|Z5nL?c6u9k~4M{7G;vVW@#pAlnpOeDIOs8dF8b<-PvmRS}4Ui4L8vXbS@ zA62&_JxlsZf9b8DEuR}@kh}3`3xeF6Vs=9sp+Rr<5UzQ9zqF+)^&OO+YoX|uKr$zy z6R}S{L#LFUGT~Ta%=|cLQzqGIh^iKcJ72*}*U_FF@L$5adkD{=N^iyZ4}vs`FINH8 zIu8T8W!8a@o)FtIBNX^k$pvd3cJ|7+a|@icJ3n>fLy?YC!GZyAvNDdY?2>H%a0^Rq zt`1nFtc?WPe?IiSx81I4?cA^P<7ZrHwk)j*O!QQW1P4XDeqAf(P*?BB42lCs^m0IS zVF;Nab4H1DMcEE!qgc)QG z>Np8r!x^=M@#(;#PdfEfI^a`K);g`5I4BEcz5XD{qPX4;x%nfds(ElOdgRO70*0gJ z3DomR+}-G_pdalG4U|riDe0OLVoSJeYPjtKuh(99y%hhaQjJ2K!h~po@5`Cu@u)8_ znc~so?r7Ln&CgS)o4+XHtba+l$)M19&~p5H)0+ag61l%Fkw^?o1KS_w=>#~Jce#(! zQQl;x+>~+8#0Mlz8)t)Hahslg#aHgAg`d-nl@C>K6>RhJR1O)eQ|FG%Y~xeTZp+zD zZ_9t|Qv4Mz%CakWqT-}^Q2b&Pq##j`*w)zlsb@F$`~omku#USFz|+;G%4d9vshhhz zK=V{MQ|}jT`PN;@YHPRNk;?uT#*R6DONi)6yyjAqPN9K)_}?dWMKvEy#dE*JO~F@Q z&qXO`j~6LtFZoH<)Q{r)MaBTL`pY0xQMMv6JB@(rA3t`no4j-_zahnZ?sZjHBq@~X zu&i>f@sR3SiD)}hes^E(km#b12TbF{w`<_W7J9XIk2uA2d8w1lN+bX6|6}Sa z!{P|KtZ@w zs@qjp&ONvFfm9lUs2`kpRTK?KK63?{VmDS5Tr}I%W)B}QWYeY<`KNxLjbnAUUGVae z{Ymy_mGAF`tET`Ay|%tS2ex`PYnEg!4;oGO2w})uUkWUq{k=a`7UB95rjWXaoImDo z-ibpwMK_}c2Zb;55x_(in(Q^_L^>6YC^aWJ_us9S8l?6LmrFgWf68a*`)p57UD-51 zi2?1Vu-ES)_YnTJ*UYyTyo)avOKa7J@AmE_{pLKK&v|ki>wYWx8dT32G1!l}^g_GO z$(^s;3HFaaaQy5a@9ZE%lYW#vF3T4$tl_V+@`cW+Sgnf!V9PPc@YyPGC3x@TVORfN$ z#OD1$E@%fg64aQD&t3Bulk;#bwss=zjhz+nj}&JHtCJf!v|E#rGaW{afcIA~R|lUp z+O|uBms{koK6GZ8q1blI&CWSqU70X89w^1z4CJOqkF_PHwK&%so1|#Hg5~xhmpbu# z5);I>3Nbl&TX)3L^A!+t{*qKgs12=2Mro&=Cvu^6F+1Z!n9TF$XIz>y ztx=1KP5E+}5zTlDAV|C+c zMQcSP*~T02ctz&WbWLMXu=)8qawhuspevb^afjj~rMe}7^d!?Pkfw7@QueNX{LP3-s zo!E#?x%Q>ZJttd#LWacrU}Sc`tnUpPOi2;?4a=Aa8-{edjMH|N2uzui06iOyPhm2P z&H8Q6d5jO2}Zzz^_K5@7* zZX~J(rE*_1t2c7&^}+t&d}{DK0&#d;50H^yx#6%^!=++n{;Fey502&+SRHfK5QI3J zN4@q*g)#=Q63qV3BRDVrP51f>$SVVrLNSb!MxAXs3CBU$C@_O`<(@u0n| z7Db40BEn^gwF%AAPfWta6LT?)l5JD|yJG$=A(RkA+~Vi&u9~;&FTRHTm(o|I2}w@D zoc)G(zwCdyih~8>v78u_T0_sMh8S`alUF~R8a@val+ZH$(kXeTNRb9oDn=eUI?6-KXAJD%1#vc$i}$ddeeEOB{F0r9~9XVUjsqdQ%zq}tD`Q8rR^uRHLB z2fp|ym^hDg-dlLR7Tx!*im)0yAH5X(ME~L=fHLIDz4C$lW04-U?c%x)>Fb5qXUup? zclILaWQ^P-*`cXtx-Q|QJK|HdOnq`%sf%yQu%F2!Sz=>y?g9Qj%;!7{J|HoN@3SS4 zx}6_89+a$)f3u$Sty?!hX1`mZvbx!EaG=h4R#dJJJ|i)RufKK(=a&qxZ70hP<5u8= zd{6q0&R$p#ReJqqY7;r(9AHOLTr9-@h((I%k7$%P(yt)x3ruY4X?$xINOiTgQ(cv;ch7_B=&>O5 zP>%$;#fXJXm+AizB~>+!fdfz$!ivw@fy9v6cOMG`ShXrgB-w5gcY1};ww-2qcgFjkzPD%WZ}gJ7Kg(GX?(01Kne{z7K<;q8*l2&f zx?^qp6l{pGx-_uVfK-46#)u&oBzq%1!>{{XB6#IeAn2)=164*>!$2Um729 z1RiVsTqa$*{=UyBAc9C={43p)xUdumlm>~6ynWc=TUI|<^>B8ingwJ09G+n;sTDfq zj=HP&c6r3(Jcep+g4`Ct$Vy3EiPQ(w+=f)hz}o01q2hA~ZT(!ZDTmRdU?leIJNX8F zhoI+Pd|0s@5*buSAX;%@N>Jn-<;lr-(^4izNX8em8Y}HaN6wrFf|Xkeju3X1*25u%g(+w%Kjz|zLClnir$gWr@NRv~7@Fz4?{1OugGk6PxDhPK|Z z`vkcy1{Lawt5C!vZtBY3QM3j{(l3oeh%`Yh{zwb`#2W5CJ60kAnzK5?1@{1n%gq?O zjoS*>#;t>Q*)NLTrEPK)ua+gBTLDi8na}yG8{1)MIik!8>(cX%$u5~F4R)dmCUE05 zG3pHAh8P_rJu*d!LlJh@R{Y7P<%7rkXWu!LFbqCTp5SZb%L1os|b>ZHznBLgKFxsv|sByb%a#K)XkwlljR)wZE89+ohM|Z z=^J+o@2u;umiJ0L?N1J~lk3hBE6?~CvYTFx@*KDw#DeA}`<_Lbi1-IJ{9W#rBi@DGq6Kx5tpS8tC3Hq_u!3l|AucP-`_mx9Z z5qXD)7quslZ3V!R6d2-iDDq(VbVs(Ce&@05{`K}GOMcSxaLDMRGDfeznZz7mDlKl4 znh3Uqf4#N1z1v7;7z!{gxLJIy<6FSqMPl(OG|CNz(wBzIqB9O78*wBr#g)88M)ac< z#mxSKz|Og`y+C9RY#IwXS%{WvJkb6ddix*25ITHfqeNEc!#@IE&#K-7`9Y;E7{A)A zo}=7l9}36QGW(BL-Cy=TG5C+C*)Qr~?CW?eNxTxn22T23fd9SDmF@UtG#Ytxz0>r+ z6CkYrIYsxav#*2rnE6Y8tezG*Rrakp_lN>}-V%pCoVD51k$(QJfO04N|2^GL@Gv>q8fH$rxD zbTkqB&@q(?`5@Iy-wOr}YuQ6Hf+O!6W{ta%uDbEy|)!Rq%&Im^eAFq>8Y4nP|>v9Oi*lAHK&f@0(+(IIzXYTcjp2SCAl5 z*EZAOA4;ax&6gO?s7vi<1vE4a@mF<99D>QR(!mlDJD!lr3zWO{6$>YvW0kLv1xk!C zK60TH1@no9>-?vupvDu0fI{ozbPdF%vco}ZnmaD|R)qOqJ(RvI(-tJ}v!O9e;rcoX z%~%f7KE{)K`}@Cl8>!FFlo^(*fimI7vv6cL5STebuK)xT};rz}p?)feHM$@heI^ zxrhQHa5E5rD}&Befe=$Xkw+sMWDaBxe%arFe2Kt2hYOhtc+-D)O_@^Iw)U1tj*ml! z-nWHXE>}F92jEY}@8;a!zpI3!P&n}LqW*AZ1VWsmFwWm*fUp;a;($yNhPeJMN)oSo zlF7a(9=RbDt9p~X1Kq;P3uou*RS1G-xnJu{L~YPY*D*(ydsad8zaHByhI+?N^+ ze?oS-<^2Cwj)up)xxNbx;{p^5q4ob~(OmxDMUzj&TBMrj$f!0*lbEUGyZ?iXET-7s zvh=LFOPE31BrZ75RU!DuoA73oiNAB0t_=GaER}UEh!qI9X(+`aGwp8T@7Ec$fPgD$x&NDn@%+C~gyU&#I8xfB$|V=Z|H zh*@=$fu=e^%pK={E5iD3Q6gU{+w~)wj=&eID+?tH&guX z)b;3_b?23*Ki|v_uoAP*Z<9RG@y|fC5E_=qZajy$XZjoLR#UGYcB5H64pb?7baN!S z)QG!@mMthJC>N)3asgX56fNt;MsVb0JAByE4TFc8J8jBlJ^>K^t6i2xxG^+5n}ksQ zIY3q@33B^S){Kwjo-oezlzzl=spCTxWSOg^&~h7<36m5$IAtm|`>;RPBM#xx0hNT$ zc>31^Hd+?gkIxg4Y_ODP%1Zc9N-e5(@H{%5MXH7{P<;cF{9^+~tVpR2@nfA>4akg- z1HS}6d?_>lWS4G`IN4Z2bQ0olSzt3+p7iI+Jbx@TsW75j;_#v2Wn8w)-B3;g?Pkp< z#InX+77S9vkCI^@ZzCw3wpvjrgZ|LnH0!Y*&Ug#yq0>lX-0CTixL&=^c6ai6-t6YR zs}ziiJh^i`juV47?CaW!HwD=eVNh~A*NTlk;*&o6(+Y0yu;Tmpr&p$Lk>oRjOhn{H z6ZrrMcMkNq`%P6xNp*H{$5WF(+Xhci~kGp3PU^E(M3 zIRk6N=02H{(3SAs%aYcmkz7GJBy&q79;2jDaT{+}SysI~xY&HIvF?0cy}eCDPi zmE(U$XG0%A9X6fV$2TCn$xbdY`I!OvB`Rad@{}Oe1f(P;R(G|wV6O+b@z5De_(O2V z53Z>FnST6)2E?&d41&F^v<#jJTd(ff8~MY4#H9*a1LX{Yh2g}Sx;V+AH6UGlrgE+70Ih_3jcB@?6m6pYz$z-EuLp15^w<5|i}kpnQ{-MjL0UCPMvn3o!3L z``%DWV=+vAozb~-81g-A7z}-ao+k5#%alKutIaQi_F(+;6|i@U8^eA&JZum&^K0hh z*dzjlY9D!NlByB@O?ARn$S0FUV}~=QQ2iX8I=R3s9S>;bb2J+pFF-N+*H3k4|EwjH z)Kq;MPIdFB!Fj0uQ4_P7dlNI#vs-^%w^Kd1Abd7o2c^$9-Liaev~4mSQF2Z>OW?EV z1Mm}tmbAK1UPcTb)e7<-Tm$$$yX{QkmST-*--s+SsURn;@*mnCMgcM zK>+j9Z5q#lP3!5$UgRcGyg`yDCMAz!nGWr%NRy5Ia-N%#tt0g_$Y3Y42$aC_b!M+* zJhlzeVN`mqhOD=(6FOn|zQ5iBc-DSM;CzXp-DZxLWLA7tQM3NM5k9`jR1aYJR^s}$ zPrS*KF744XV5I2R3?}2ZR-rJ~`kJ@ccEGj#!ZE>1m3Fy3_Z4u?oaMd&EHturi+gTf zKoU$O;rDZ3D?Fx8NSF_x%}Q?AfQ~!BdUt(I}$atV!;@4*Dk~O|wsz}YUoc4v{tbwxC41Du2{F+A6FD6U%aTj z{>W}#Ealm%dUg_&R^PkbeR^xNXEW3am`SaJ_C+5CGgA?H1_fo;P)B49;ma9c>R^BpXnbx%%7<`kmnC@$1VzJ+^E|xM@%q8?innc+?R(9iinvk z-Qddh?za?ULF3EavC#>Gv8?K6k7qwL2W4f#j;hm{VM60;8*ga4{DYM#t|Ks; z)XttQ3F{%2g)VwuBysx=NZgNjOyCcadX@e01@+^*C-FGc0mkk!UU5vhGMLph7M-n! z@8-z(>pBDu(dZ9J%hUTSwcxdG0*4C5VCe<_s7^LuUJG4y(Vc1#c^|J}lo25R@>b-J znWoC6{Y{ISEtfYO=rr;2lSAOR@~Kygi(*8I&)sJW;QrD9D!AmPNG=T?eW^?JPW_>o zdYfUAf#=iVp6T1pNRSU6vK-I7wOBw|E_;ywsWGLC$7U@`qR^khNgh@3jb1_)amQL5 zMI|@}y>B+CE;LEah=nWtt4L_bEx-1Kyhn%dY+L#sa@diKCS@T!hs{{yjs+l7I%3NF{I6DG!IDxJ?&Hvt zqNI|jSe<2YsS$=m2M2SX!0~qHN`zj@FYiEUXs+WF4}F@+XB`+NVOkuV3976_MC`y& zHU)V6D=dvpooUVPM3B>u4DOrQ4lCRb*ZZN|aGC;BFie?6zA&1CfLAz`>GUV$?A**J z}s2 zqmga$dIlc0{Oi}O`{hY!>z(p{8ZTHbear_1I|oUD8iQxA#fr1Oiw5o))&-_D*9#*U zZc$$*P8qT-8r%io&kc*(Ptjve5U#J$R~<$R-^!^`4OuJTzT@h36HbSG#i>BP_dL-# zuOUbZNd2MoP|bwyklbI@rW-SRVGzGS_xOoOj77+LbSBAA-&AJZWS#S(%*h*xAFj@9 zK7MXZEYN%53JL?u-#hht+~;7Im`NgOwh-(GMzac}`!1(;b_!w~EJw6|Ehtf1?nAIR z5?!Cf+D}aTL612zqHAPb7<3Aw z=_)vIihO@flB%IWpm~ zHgbEnDl}7$l(2syn?gqydhUohzqW18i22U(T^5waXB>z66~BPqbK~r1#VXHsn3&pT zbgUU@iPp{1-?yE9V2!RLP(@-^Q6RZR#d&)d3{w@lKXWK-zivwk{u6Y;raNYO~{$i|^wj)V0q{Q1L&lEA!-Na<~o z#9B2VcXeO;p)-{YS08J*6;QPko|diD*p_gLtR~FYz}Ya=a4C-LIxn9g5mEB>;Me@d zM%(mQ=)oX9i=K7Wj?PK)DUgD7MgZ)+M|u4#G67!Fo9dYW1WhR%Se!+^LkuDe7t^Q` zWm<1bm@IV*80t>uN5YbPC6H(!X7G~*lIHqG0>8TxsWVxxHrUyg?cvw|dxk2OXqM#4 zSEn~y^MYN16a2cCzY8hKMuG`-U8$7%@G_e$HKj_J2JTgKe{QOUY467(*`ODRtDSJv z@^%Y24=c3FF3Lb{g9eoq z8~?B>^v2`$Dx^l}JbBf&82GW4H_W}v20ac*-2T?BQYm5R_pL(76#r7W$W>0wc+pd+ z(-O3%E<2oaSywfxg@vJ8-87zD;c}z717AxTtLby;*Bfc)8O=tvC$K5o>hVcZNu-k|`hml8adA=q`8!sr|E>P(E!k5a1u!NqdLUZ%k z7P>rKsssX z-J;J8&mG-Aub|Ccy)D_YX1~17MRIW8$iOUWYrYRuz<1Ju)6&6aHEe@9FfjbMeSR_l zA>tiNXslTAKgIRVIS@;NyqHoRt%^-L!*oLli&|4$`e3*4MgqBWfm z0tG9d;MrC0%)FMtdJs$>%^n8XA(V(Wy`FGnsKYG91lh=)Fcm`AWgiYev8dy0&Sit| zkShnu5t+4VD{z4o@j)v3J~++(Xz%#p?S9oyolQC7>{6P_UO$=skvrN*xTF2*8Z<=w zgSeA@JZbJ(r`4|O2+3p4LAfg|3%|_)zj0~#wdN51Fe^*>b&%N05o+%S3I-)emgMBY zhFrd9UNqTX(=?X&cY5I~!9oj%@dm!thLMBATorBMR$sibjd=S94-wkv7@gefd$e}m zoEukI(T+gRUNoLM$4hYAOZ{B#CSgNXrGMCtCehaK1ZQ3<;1#--uA zf`%6GkzFNjd>cKGCX-fjHfVQ}{|7%(AfxsUUUQ7w({a(@OWgV5B|HX&!W_?Lke)HT z>XWZ5gI|G3G_2F@u|_xP<4sG~2l=K2jURu}c=J&ZekdljOtzvllo&+S!r1(}F426* z0ju5!^xlCHa~q4N6l%MCM?Yp^+Zw5V@&o21N(){Tr~g|nA#hKnTeVZiGf`)UIu*a8#jwqQ`rrqsJ}9b;rl+NVzu zRLy%0B72Hzxa~=O3QZ30-Ykjy4~6fWGxileH}`>RQJb`z?@lxkGaUliaqDj9;bSn zsT*0sNu=&WyZpzO?`MOlZT|pN<29IyL$nAri9?7p!!>V|q7_eR4K|XynTS#FYX>7f zs6U3>VYFb-pv8DK#W7=N{R^2guGeqE$oe^aFPn4D?jtP)sf0kGble~e-=m)#4B1;v zEQ78|_rUFTPhmxI<=QT@_@?{ja5cckL;p)oq_S?qKHydpoW5#1P_wPT^jQ3rDLVx{$pUjS{iiTUwcc94!GV!Kg7cQU9At)Z6)2Jcv zz^7Qt$eENNni-v{1PqUTCZpvb{a4{PP_%pLRt~*Jzb(80ygO2J|HYnSgav^#jxx>+ zp^mnC!`QZ?cQV3Yw6N`2Jm`D#wBFxA`aIw%bt(Z zGa5L56m-`4{-(sMKxamS3+ScJ?jlaru{EZ*SU?~8MqmLKky5JM6*mimTJ{kSgXX;F z=vL+TOX#FZ!UAE-x=nJGoz~rMdV{#8mfiLZL>qR2WTps~b;KxXYrU5{dd`Kg?1XUo zv@N(f3p2R?I2{SbRLM**8GZB^HB0?Y`bcU0li7*nFCd1*#7Vfhrii6>kHZGmzV(Z_ z<4b%h6q*5s6%;FeCjaV}Otvt(62UrvF8qC^n8Cq8i^*@FSf7p0Xg^95MY2zq6TT*g z#ZcT=w|gx$w=tLbfbSZGH}#_bxcDnK-z2;_Q($F9ZbpH&>h9K?9Muvp)|!Xc>?bUv zclvSXgdt$hz9LECfCq^2XXPFEJP4)AT;qaCZ3HLIIjRZ2s{mHJX(?AIm~9(9e)uD_ z)DP`H?M4OD)ku#(G5Mq!?#DkP)6INED53N}_rmEIm*aJQ}O7XmX$pm6v zm664uapX<{<29k@plRl+!5Xp-1Y}r@17mS`O(iT5s}};!^;Jz+_;U!7j)r~2%F3ZH zuT@*MJKgOGb>&g2S1M}}Ih?KbH%gPP1ZMPCLez;rH=%%uEuOluP=Hyh=E`_cdp?&# zD<4@yppow(CBC_CmQF(&6YB~7dPRzhC^ZCD73EV1;+R|>;Cu@BK9(LI2(S${Iu@MV zG5xb~k&kv1seSoFx@$Jdrl!q$m;{>j$?Rq99Hj@a`@1*5cfrk_U>@b!cuG$q*xI9* z_GD3fLh0Oa{<(qrnc?#S@PLvfD-u#_(Ls2R=6vTP1=x`+U}a!MiX z8{C@Gq@BBBQn=BhNdOq(Y2P!5_*5_@xD0WW;$+cSQCJM;V1mQfsu|o?aGBiN@tpY_ zJW;d1``PQ*rZwJ#;8E(zu5JdY>5WTim!r?&gMLhXm$GJ$zr1ef6W5ZkT1ONNk?{DV zUZFYa>g?Vv{kLYl!X2+r-OK^Htws9m^pAu&7DxN~nft`ogiQtk`k@6wI9kp@FS@Ey z^2Hjk8uZWF^EPuBRulbq$d7B_$oWrMQCSJ~jy?vP4FOG%Do}P$O^d0vH_|WELMK}C z(GMR$5l_4SoQezTeGXfP|&M&M^(cl!6r4QG`k+3vebY~?d!z= z>kR8gV%jaw`ZY0`&p#L(LMP>yb?v==mmgIX;x)6y8d=np{VK0G$G#7AztYAHPS}{5 zjCgXzysF&*eG_tGpchJIpi2X^@T_;G4wx(16MWfy8cMzq$#d%`ZrQv84>0&7M8RFX zhBF&rEEF#)s0}hpMLcmGJXpV5=*~P;{wCf}d?~4R)IWo02j9mSzpm`g@Eta;OE+zFTQ{hH-XO6xzpG|68G4KYR zr~Ozh5}6KKaqmE(A0s)xExcQg`qES!onI1da>(oVH4UNDf+R)@>kEaX{!g%AR?FZl zN4}RY%hj_s)e$2BbsU?F;H$9cs5^tw#68{HQ>EVX=?bT)I7Md2@0&B^&_l6!C05k3 z>QQ0Z{BMyn4?T&m1FUq{IrHOGYx*(qLEhKl0h^$2?U(SvLyOdAH|m#Ke)BiAF;o=f zX6s3A`MYGGBT~W~U%X=|!IA7sBiPhP72&q(aW4m~gh`u46r%Rn@Mc;q92xDJbdl)S zD*{aM(MqCA84k)LJAAu_nYZz7jIT35PtOStMuEyvVU1LhRp$%BrB3JpJCP`!^L9t= zb#E&i%HL=l&TI-H$n1;kZY5?(WTl99xNARd+8^?9l0t5G^3cmjH6}1VU zXJGL}`)y$wJf1t1cZgTH=V^H^9zjlj(dcdHt;@n&(2nl?Wn?(4H@6R*I?+M5LJnFj->`s*iqmS%Ywhm#k`DwVR-wiF{%|#!e7ez|9 zeS^POkVSkTopdJW->I#7T>ktOp0&#B+mwXdEYvwmQ0=#keWAxc4yQr2xoX=sTjrOo z71jS7Oam4HZAk=`w4^Au1NSB&pOVT)WZ(ojejkK&qjUwg1%mAmVGHaK@4_5cWZo=o z4c{>Jz0T{)fsd+!7eT*2jRrU*dtmNBZ?+v@5~U@*hzqv8l2HpXJ&e`qgZEp`n-nwf zD98@=tZ=J(63$`RH2X$#rIRSTwJK+!Eskeuv@-YX;w&{Vi7=fqyp9}Plcd&}f5o>w zcU~#mS&0p~ZUrE^B~ANRd%s&K&ULcOG6X%BqSC?E9=_f=d6hkRL<2Y3GY)5*splRH zC~5NY6T~}Ygs)>+ki{6z zpr!=z!H<=Y{gh4l+Lif@-x&Mgqe}cdY&;tTKwE~#iR_HQkSH6q0G8jE@Y!ehe|~S@evMJRi8cOY;wgOcKLlNIV2Ah zB+37@vb-2|=XEV3FJO^(@PG?3IwsfZJ*rk6N*J$10tREKD-;EVL_%b#dPI=nyw@O4 z``=pqd4biJ;?v(+3)d>O_Qy+&&Vdbz6nfS|gEl?&|BjRYIkxMJw7IH3lK|y` zUQ`nX-IlT33 zHl>WQS?nzUG|!DQiQPNh-d|{Q@d20$<|{%*#E_wNCO{VKnC)Gu-}(`A9Z>1f!do*K z_nq~mzT#(H4LIC0LpT3PaJWk~EtLqa%U|FTCYj5q~%X^P>1mkll;_aAA?5 z{zG^&VDLR`O90ocd9Q|I>?i@u18rf1>k(3&TX+YaW2-JC+)-^OxCb6$eUq% zA4{PLzpfn)Ar`f}zggBs2G}*?e^9e#Q+4(gy}6J-ZopB8jKNMuTKYA+yt^i6P9v|c zb-u;RL0JZZPG5)!qMlmUX=P_eZJEz4L1_%AZdO@=?Da?{9+B_`5Bo&#Clo^VrBmlK zkICL=S#+h#CseKcO9RlaI`@;LLx}Tc99H&7qgw)#=41_v#s->PO{O{>x%MnR4UUO- z%O7^-0l)J>YE}m04dRp?qU{6Q!=C85!8CJLGa&mIH_2>jm|)`(hi5uknsW)z%|9r8 z2~B=Ev=D?+&cIpE7J0eq6&Tgb+q?!fl=_6|Dm8J}?R@_N^*g{aN^hUCl2#p($ykL@ zpQeoDPTkg&cqmq)p#I0uTetJuvqLjxR)2I3EdVOo_a<*vL(5=3D4h&sVtj0y%KtD}I3#V2Ulz7rJWA9ubUcjI3W2X+Iom7OC3H%L?K3mt&Swmj_#Rh<>z#rRJ9| z^y8{-jRmm%!O9r1LtLL|8Yky``ZS2|2ky5E<=tIfOkWS{b=mln=9h;Pax4f10ctPb zm2ul|U%tOx5|`3nY{Rp9h?!mrT>i4t-<9xlQ#K8?}b6@J%DoBijrX1rb8VScYoO+6^pzx_t5^J)G!MLVq#Yr7rnNp(K< z)?{t&D&r1@?ekAZ`iED?Vt!1n<(cKpH#Z!ViMNGDrA|gy;!*`W$w!TK=o4s3K-&FQ#^j>+(L6hKW&~&3w!J+J#+b^Tsx^*TjvJ0 zF>i4OoUy!PmpWR7CIR&T5xD9x$?)m4nDF1{lndC`eB|O^g(0Fl%ZUjuc%PA_SR@2i z6}mMIg?XC>ZUQ>}PChB#;_Tz}&!U97bPv;IrTZ448@)d*HV#sYp8wp9ciTYhaIy6q z)!Uf)Dx%Y%t^#|~NTIe4lj*?vi5m8p_cv5rfJ^#7SHNlf449ZsbI)o%j+{_-(E0-f z=}>T`ILmKT2U*}#5az*K{)MmtF4O##&*sxYRF zUm4eE_g8N<9Ly7Ir|P_`!m57zR%SK+jQys=@sB1jompQyTl+9@>e z0U9*;M}ITx_wn9Gh<9s4N6Y!!!(Z#I&;IT_qPuJHnRB}6GM}!Q%7K{IuiYs>{ERUH zq13@1=tDBk)8I;b;W~B)o!wC+ z&QzC-soH-{O{(|um(=sKYMDu=4x$yKi>R)fC(V^wK9SliF3^gHlJH_Bt$}H%v!Nb5 zSeC0aiy1a9${ShgagPr^$e(`w9XK#O+{4;_T5|*O@DbJH?|WUt%5-XzO2lFAD#E<9 z6vR%9G`{w}uN87gLI=bv^D`upzvz_+;N_+)&bLpCXdc68cFaz6*2E7wYIclPK7OOa zn3}KjFEuV+`YZA%Hz<<~YXpiH{H~zYU*@9V{vzwJEY5|V^>uYM-j4^a#C?2*>p12l z#zpNU(?PY($oI9N{8~=G*SvyTQ-mD=Ep={e{jw-W{2Vp{q&g|{XHykMNQhA)&!Hzz ziamJj*;G?d6)N{m!VW*N-XCQ!8P5LRmX(B!t}5EcH>X+9cG4{gawHn@gbUGCvT1e6F|C6lr+TL*BAl(TB}s?R_unFqIjM;@TI3p)DP5-|`5)PXtXwr#snV4th@)lZrcoCd>CI}pj@Qt?X$w z526&A?CaQxqQ%J1VN$0rVk#)Z!;^msT`G%zf;twJq=0XPF2Bp1Aa>1gx#S}muiML`T^-+yRmJp zazWnOFg<|%XTr3p5`H1rrpC3$(!lNeV4WY==e#c?Cw0&{p6{olJo%g6U2pcR18NlO zqR|g!L0O_q%SkK{Mm=w8zzzuvFFUW?!@3i{1k=WWQg@@qd`?cOXtDQv9- zMAzY=@8ntXEy@J%DW@{qicqNh9jWiiH{C3lJ1^L_w8fGh8VrhW(t-y+8M3PU*SQA# zDRO4P34YMGFS^1*jW3*!)KTU^P+F~m%ELk5CrZ`3zZLspEzYxR1&}z^6M&BMHU8pw z`p#n{3*>0v>dpUEp4F(-Lenzi&q!`gorh$DCuw9f8D%EZ%`<5IZSm}Ps<4^&C8^0t z-9K3<@ohdauL2ydvq83lrT}I~jJ(*JciEyhP|k7NyZy5$a`{Q^?tNS=wtPx2ko8$K z&l_91OM|hLWT&7cwbT$DhXqze0PqO4moU(o?Us4X-t=@^vU5lHq2!I(=$tMGk`7fB zq&Xik5rXhhb?R^6FOM12B<^fP^>R=0_)`5!I}43b@QrCtfPRZXkq?*Hp9H++w!2hJ z3=OtHE|v0Ak4=Za<$-(^-F6(%qz@2myVIo3v-C^Tc*s;~AeB{qOsVb#mX~I#21Q}% zc9{__SmM@pUr)&3Q)5zl9V5hO8PT@b)CXuML%?h1zpqQV=Y&jBG{$v>^ztc;STSyQ zPZlB?2XjjF+x1J3@wAPl*l(Yq7hy2`mU=y{vmVbZ(I(+70_fuwIa7F6xU+pXcJ!frBG&PoI7&dQ*!%-Be6w$BNw#gkmiUAf$1 zO4NNr+LK*P=A@$*H-t4XY#{}AaWLGp`mVk471Ufc5vIIrK5A4(n?uNbnt$=QHMQOe z{g(Je?(`-Q6a!R#gcESTP)xJYfW!kEl%jg1=3-;hR2V$^ddV&h*e?X$Bq8f&LC}(# zlyydvnqcwPjMVxzW$~I)a%RTGeHlk8<}sPqw|j*%?+>{Z6!{_=ePBpu*}XUmv;!R?Cw+TCpB8YUOc zt%P@I3v!t&K75h5+T=<}!XmM_~JkHfJ_7&?_rcX)rU&42M?wTCMiu})lfY;^!(CZl+lC*aHGmeBvdob=POx)fSV;(jvj&FA>i;M2j_B1 z&^N3r;Ix@3_DQ>B>LJH1TcnIIRM5|?{mnFd?l+oKBgcyKL7?U;#%P)UQps(^d4{MI zZ+UoN+6E}K@SLv1efsUtTbaydDF1UZX_b9%%cLsVr|>ub|h_mywO! z3`d%kT$Q65i&8+_C~Xo0u2!!o=l#F{0hVUBT;IP1zaWLfg^sNOUb@6KHwm9}{S(8r zhVM{y3d9F(uKzgNas53w(Tbmpy#KzM=%%l;-{<8!m&r6Q{gn1uQ>R67a!Rvo;Q6o~ zSL)Tc`Pycu8E8iw<7d6Fgzc|hir?3%BuL}h({H3qp~%gH4y4C01wKfb<2C;Ii%5}(i9!v>Nw`f% z;a9T(o}Co7{etosPhC118RgKc_t>78MDT)=v<{X4eT#QLV_PdEKMWuSXh=vE90$r zso%XXQ%cPMw}O;OQ%FSjk-QbdZPsL)DR?|>RpyPT`mWR->Mb0=`{;sG@#jC<3(?G% zJda?XoqdC*&CK%stC>8~d0o72w2;x&U!VyNzjpjX&H&Qd{u>J2-TJ+Aw~y zd~vyw)@W=Jbo`vSnniLyQZ9Fx)TAI|F?o_;L6>+DT(|IAfYFd@ z)o#u`G3#F0mv0c&09-{VLnaq%d1w@#8>k-BW)cZFqvz4}+KsNC$@sAwt=}In7(hRJ z`uRP-R3&av)Ir6x4R-o^3(?AN0@icW#BB>r{NCRbMfBtOpUNjN_uMg!NMz%QdBz4C z7D|vxQDwbRf%vD8uxqhbmm%74*!gLbL2ZUF?XHll8-cm#LsMM@k&9Q|1wI5}yw{>= z;P=cL>%`d(+1iUr3HaDWTUZ;K>#9`Wnj(ddFi9{@>GLsQZD5_JtNPzmNdbYJYi63- zk%%W90IfK@4w~chZ)n`J;+%pV1x7_TJ@oK_5rlfvcuoSSdYpK-td#t2I1AkLUfoCJ zGUuWEISp2%p`0!%m=H84;(Rojk{JqLyhmO%>bfDzjW}@B&*Z_Wz1pE-0pbq^@Em2U zdF3#HP~u22J!<*&*WhdoOllmqV_t*o)oHG7!2p6)ul(u9@>k3yvC zG`~hb@eu2y4$N*RVK;#XP8>2aA$fuFV(8mS_z5ChrJdX>6yWtij}XSYN3=+96f0p4 zqiPO7#nCbY%@5O7R;^x?h}0kYbaHCj2>mGgvt_;$GanxVu}i;u@S%ifeI~6e(WZrC4!y_u>x42@XX91ecTdob~zW2U%41Ph!=HFSCzm~vJGTG4*)VoREp1%hG7|O9#WfPh!FpUr-`3v#XkNm$i z^PBGSS;#1V`F1$EPw*Wn5z^2OVylDQxiBzx+iQRHWnRI0)l?M}?+U9Xvs~*n8)~*aiYK1ITJy6kqUBcE0@8l7h|u&U)0%-kKPnJ2>4VX|maj&`|18K`!+U%=sRqm0K`Tcax&`kL4l?FXM^${JhD&U$};j3L^(U>oc% znSbkyZrfYLj__Og9Ganc&&rFZ%o}Jeldwc6m`Z=_o=Orh*RV>r(dgAeE?U^c*(QSj z@@MoZg@&%eEH0)n@Gj`m1}<~al`uF4mllnW1PBpwO02u|bI`99QGShzgY4%|Ti9kd+ELn}WOu?9j?Cq(iIDrkm6UTD2=Y~K((qQF zZS+~YYwr(IB-MEAMsEO()c)=UFYeh_woqiMo(&CkUR&gli{{Kd|^%4=BvF569T_s`omVT2bB66yR0`>EtEQE6mcq|3oSgb#NA(iHi_r7E|K z0gmGSyW)F#82256-fs|aX9vdnL2!rtgioDsaJ()zO;sr;wF0Z?Y!RnsB+EvQ>|LXz z(`7YDfDJYi_ITU$$e350Rw<}0gC98}ks4oaK>D%Y!Vo55$}LRi{BA~|$Z=6pb`xW* zsU4!CNc{Eji?Emf$S^{XhEdSG0TtC4m`7oNi}LS+S8f{|U~6PAXK*D~!nMmtrhZEd z2lP_&K`lWoqVqmdl0m&Q?#&m1N)m)VRuQW%g5e24_7zBKli1(%%f+Q)J}h|_|JDBh@+uG1mLbvh5kW7 z(%nTeP&ydVk{C2BZb5w)!%bKI<#PT|LpHC+7Dscqt*|~t@2&R>i2zVnaNQ$QyXKTn zpz)z~1MDd!wBX9Kfm`QK+7LIw<#gwhgI#fG-vp?F9aN$m>xW36U&!qgktzR{Z*2)_(vg8XGFYJpQZA57SCE@P8Ukf8KyS++2(^hY_X@!|*Ij;5 z>0on>2CX9y?M)>ynnZ!t%f|bB&+?R{ZWd^XcnTv!f6`tV{ryJ2SCEZ@N;i@)ps7Hy zXnuYDpAU9pnIlAWCCn(EG^(je%)l3alx_JOgludjGRozCW4yBO27d!U_B(UlC z0k!9SckunbTqGlLq3>hWKSJ+7bI)pO3sMGuFzeX#oB9Jk^{pEtQ zD*1)%m>~cP=cxohYF*iU{pP10$uwSz2lB_&eSamd!~JLpk?`wmK$A6DJ2PF!HAEMrAi|<;TAWje`pkhK7w3= zUwMA%Q#62mtc-LskyXwr?O-nMarkJ5c0)n~qODbZ*r&&RtVmr&!Lc;w4~z7+7!a+t>)LON|Io)vVO@hMTbQn(OQ^KZ4*nLL zJ^WO%yCiXS$A{C>Eds=6PbRF(^v@BhY}{mP{=brs4Y^AQ(gEh%1{ZoIaZx~g3Bic! z)^5AmwsHH1+p{*G?a{PPCG94V@aJp6upVsjk9vS#*e`OMX>Lv~aJT;&rkyGgbCVJg z#-fwkNM}Gv-sd@FfL=EFI*ZG!;M|OoERhN2oO_zareel0-sY>CIO3nLbpdYs&p1M7!9p_ z6niYpJ@QVI$B6b%WZsvGTOm|F;|i|GWZTqV(|-KZe#UgU8k)N5b0!(^)i>g^cwv6s zkiK|)a3=5L`q8x&sBSRcKCf~{H=PUgY)=@qu)|xMb}^_*cKJ_Twcj83`>E4&aN5v1 zO{W*hlZx#e#8z9fa&`eSFHyDqK}7nTD2n-aYLs**kTXDo^Q>gq#M=9@jH4?4EnUf= zf2qo79_BUDavP81`9i=Yv`$z(*s#TI`QF#bMgv3o7>M6X`f4uc>jn4DNG0K-cfT76 znJ-psw>QIIMr1_;gMli7vbKjZ%@{sa&q4F|3}95Bey1KyyT^vo$=v3rPtiO*Ya-SM z=;I0}&sP+1N_Qj{7|2qX0^5E3|ICFmB;6SE1}#XbbIQ!r06yO1+P#?n%4UuJ&}Cd* zD=s~OY%X*7Ox2aJC6Ab2gR29({K^wg^fhP+=}wGjX?mAo7a8SJ)CfLpB-bf!F2_z@ zg`_EMd7Zvbis<(cgWW1WY8p4D{I)rO0L@sj`+I|Jf_lvs_(yNAkMnA#nu-ryxP0ZH=zmfr=o z@xB*t4OD{G>pI)Gd+E}gE_?#pyABgITJFT~Bra8Ya=UMOXYT@Vl`{>Z``Lvs6DHC5 z)4kgSXfFJiHrezyX82F7WWpD}oPw&6Op(|BrJ;S((;vv0VQ=6XHNvl{Ltj+k7LK#x zoEqoh& z;li6?-Ku*!fBGhyd&5-Q4r7rL*G%B6zErv_sd}GTdkC;GG){FDgWwylMeG!UX>Z?a zY^9QMUUOl{w!Gb3qE}Fso?6z$(P@Nm)b@^9xH5fFi+uf2QG4i!00VyeI`$sy$1x?p6gi-3$$bAl6%Xq}* zB{oGKJ6rdWUW6nMTU@WPcqN+e70hG?@zHVA*P7j z*^I8A3@5ucY&+xjEun^0qJ++G%bMOw6cYNn1D$DaPkA3}y6*QRU*vrk0)k?n|LuOn zu2X(64f@UWdpg>b@lSn4_W&YvCt-q#uRnW1o!bZ0c8BaO=Q(qj|nvQ zSaj_>nCb2mZ;%xC=54(wpMIqAYEF`KMob8eeT)JkI*ikdJ53Agag;Vv$v!XjS7Jp@ zu{N2(ni2AK{|$LEKf?@>zEa{DTAjX?0`U{@Tk>-htyq9>8&;TmhtK6>aWzDeQ_~MQ z*PxC}SM<^82YCe&*ty`f?mChI`+oO)WBUPHL$$WCOI=1)$o|8)BbRTiVvf^;?#Bx+ z@nYa{s+nq$#((Dk@E6ABXxO6gf&_n}jICb#zJ9UOND0rJ?9TyE8y&s!o|E1l6dT zlmIb5u+q1^bLv}PG|S3xwFXiUf$Oq;wj^wq-{icf+@{o`KzK|<03KYe3Q&J6W!P&) z%5i=Gh8;GPh(o(LZDiv7PW$8M-MVwP#$T_<97kQzMYgU69Mw>Toum(q0*OrAHObu8 zL#LJlGyTb1)GUevn>H!%osem#ati>m&VQ9_%9TckeO5Vte*McAC~T&72RlTjMJDMT zsQ3Zt9BnbhzP z9N5^Q&;Ub@bNg4J%l9wkuD^#UksqULU`{h3yy0_BTC~KjX#Uzfi0R8;r7H^0pMjV%eK#2VOtsb7+tC#uDx3e+kdcItcpDehtgb0$sEQXO&@ODGA) z`KK&bg!-(96KEoU%17%17YEr~Mh36uK?t}i%KwQ14cm7WNG)ypLn6f)2BSWbkGG){ z)1zTmd@=hxh<%E@RlF-hrE(sTLN|l=-4wXgoL)P6+de8%rPnmvXjYtRB5C!fQ%vih+cove1f@_`d1% zBY~YkW>u_&pjpDyKjg(M;?DE^eidE1)y2)L>J_+im6khvdLkUM`lSRzB;T)K*g1-p z)zI~BOT6%B42ACVPcl*{rGJo<6+h_KzRUG8zXC9#y7tr2zegNR>q7sWI9=f@ob$&y z@#kHJ5{iwC8??M&8Wmsn$!5k=B4o^3hXl3AMH*>m{RM2;sF~VJ zW&$fpUc{b?w|pe{ioneHw<)=f9H=t29`ny~ZD6{oMA(w;2%|FH5}aZRT{88FHM8ma zc1!pxe(}w$>%oSZQ`A%Z@gMnjf>Ox@OlDJ(ce~QBKhea4IHyI-P@p0zFO^76rHYA=z#tk{?n%W1UTUL6D+!qCNpJtZ@e*7WCmN=r}lPP1j{~ask`&;_Tub8 z$&k~8A}H(QaTv;xZk~75TIGk|R9w+8giF)7qm;C~tEL2ZK%XxWl-Y8A5Itc=<&Z|9 z<|kfoDl7SNHUdv;RCU2|5dyJ`Pq5%geC$@pE~?X*%HDw($m z`UDH72;SxNSCWt%@5|W9xAr^|o1QkZHhnibAoW@7RKBu0G|LAYub(9aYwI!8YG7$o zALS3MSzvKUj7EcjE#^aG1R)Mx11;|H4&)L{{c&`n&J?BAS~MKsNGUHQG7w%rfK7ZK z`<>o~Zkqa|m~vN!|1(;}91gbZMYL#mb7H_v0L2^bWBJGY(mb&KSH$(qT-x21CRs+* z$=a7=zIv^4u(u4XWlgLZ{0;nbSEv5sXbrS%p*MF8wau~~IYec&$bCpf2&Sw>kE+WWGxC?#Sl3W9#L7n0P4%Q;Bs0f@AQ+G}GgML2n;|Vj7L} zAXS!KjtN14C_A$a)TL%pTJ&&3luy#G@e5ILNjlf{`j&fhJV$!6E%8DXXy%@PJQ>#o{Gz5>En%YCC}ZZARzyr zapkSN7z0Gt(3+rtE1a%l%z9La+dlVSH!o4zCn9H1X%X6=eM9(%oP;sv!9RZv zNKJHfQY$BMy|di>$t&x_4wzM0%t6G*nW2%;?HnP8+M{rDY9)^)!UT&~g)`mPV(+Nk z0t!E*&^?%nwl|&=tBO{=rts6S`9MASqb|zU=tV0%m5RZ-cGjh}d5eLK&nM^$Tf+=$ zzD_x|0i4`2U2(T{W0UNnPt?mp8#QA}4Rha4Kb;zp6qqVJm3hy_ZmZna_K@ zQS)s;tApwCR(0-1J!AZ=vuyGkbFw_4f^)(V57QqEl&x=c9-vKuN6@(z0PY2 zYJ;J@+#rE%Nk}+xe-3|gwR|H;eufL6N z@;A&yIC*`}An58>mPpNOFimxFm_--Gv{epdpmOeLtLLF_EH|fcW_J@$hm%#*zG8jw zUOUUosyj7`!sv+1Q|bh=$*k&LWu56|SCVA8)cb8Wdv;a?{{iU)xJi$%duyU1a1c+U zL2B>5`+21XdG}*eOea@&-L6hug&K& z)Po6NNV{jm)C)xb`;`wu1oTQJ@3qVm;&Ji%r6K0QRQ$c7!EAE=dLsi(9u9|$45L}9 zw{)`{@*?Yxy%L|MJ)^0oNiym!i1TZGhe-m`2i!`zezk6HWG8n{Vgl|MFSUy!Zy?HY zf|IRWKU?9CjE{Ts+6&SW!Mm^m3C+g;iezOzR)u5U3q6dK^zQA>w1?3RvBmz0(6*Ic zaI*a*LGw#b_9Jr;O1@{kiTJE1q0O9|Z+!Nov_3n@-BAKo$uxP6YR2?dN$l*0&*w3s zIM4yIQxc|Z7a7m?Rz`Z4+rQR#snUa3%0H%ehztE|r+mYme+BF6-7^J_|EUTj16y5@ zwEcx<+88vKo8f%y|M`gdZgg2wDgmo^sBD3!*rVJ?!X;oB0W^U-2_I>lczH9g?yShf z=$i92G^#WusMG$u(pgXAmFAQW^XxEKmnZt1{|qo)ciF&}Ex<0e&nlBxYp3d!gkUM! zL@Tg#ZE0pYQrEsZd9VyRWk2O}Lu8!!B2;lP1zlWkqms5n`aKMb8FO zOVh3i(hB1G&`#HJVCr(UiEK`>Yz$%0`PpOVMlH-w@DM1td311QcO;ff5B2zMo%Hlm zlj*HeZfx)T%jDe_zOT}wOhsWPuwV#I|JmpXjbH5t z-@cYXF7w)p@g)v%Gdveu^*tT*dKAcAYHrr8#j5z-DApGff~$zHAa6ghn}hfSg#V`nD2PSfe2Ra|W;=2nty+UO z%izeDlYqUXM!nvUCCe4Ni=%TF(%}mBiIfmvK@R9iQ^kxla9|3rXWPH}<)e>oJ*Jsxe z{_xg_Vp+;nVlbt|HI-j+OOUVoIgX*Z{5W$~zMKxtkL~&8pemXjh6`VHCbPgAoA2b3 zfw@P8j)%9DR92G7kWOpz+2pmy1wC%Sw=WB33pWxMcAS`gEO`Uix zIKO;UhvxsVu||cciSG=FFNU$es*Nt{46lu`I4y-d(0Q`$|gBpTlF)Kn5y(nnSlGRGk1l<^(2a^ z(M-7$gX+SxmejizZhqxOmtXEYsOD^9j-4luQCGH7m~C{lW2FH8J-d~YGk9Z$=#!{9 zS8_(1idRFZ#s=-??;j(9bDK%!`U?v0HNeIMvNW@|vgC}mmF~HD;bpmH$qqym?`qBt z3vTShKd`)SX2_Sv$YG?1^}#4`6P9URf78+G)>X&(?ct9?^`CJHx&KNj0uNY#k;7jQ zXsrI8MxyMbyMI!{!NkEc%)#AQ!vAmKbQ%I`S74iwyT+;d+4cib6K=x~x~)5+h4d|B zMQ;r?3Zst;7WWo;Q_eo;5p0h+N77G!#w0#fx)!o2WL|U^O+$>?Wuhm+W)xWIZ{YNN za!b(y0l~U`a3fjJGTA=4Yegbxk^q$m4SdZDBWSz{fMoM_>{(>qLKYc^bu&da+jmi$ z$BWY?iYbHcDGJX~Yv1Rus*QNT;N7C(O3fX z*FNOZ)Jbh)sVd32BFF8=Thj!c8ILfPerI2vJrRX~u)}E)z6+H3g#{y$QekkG^s3P~ z&FhAu#i5@3Ny&D7`IMPj-Ee_(cWU3qoE9z<2bT(vgl&$eES%{dtZRBB$NK;m4f-U} zOIxt$TB|s^hrovSF`n)OrG+hV9u&-YEE2anLwv}|lFuK#G&W9CDkbZWXb2UP8)wbg zTcgbcuIK{UzI)5a=*c9-$aL;6=*rOkdN{YVKQ~ygL$dqCdFpPTlO1nR6-sg4OvYYQ z-v0Gr0WI=$HgjK}HNPWgN&o?&|8o;OVL;}U@->o$9ZtX!Oo~GgKx%Y*oykJ1oa$$Q zWRA4(BNFPao38yUG9GTR<^%Nz$;x@(+gZZR?Au+YT4s3l*Du1W@7{Z#Nts~!o%J5E zbN{!LGU;d^(Q;|DvmKapctiC?JBoF&Mfx8KkscR+aWoB}KUoC@jFSKas+UIe74H|@L$2n9V@?aS?%PTzJ9g>$j2$1yIoA%TFaG`uocm_LS6K>@&PN6a3-$gxIg>qPS1pSevxrd(^ z$y;cUOx1-}(IxJW%#PTCZt811Q=#<6IarO_4GXVqBw>fKd4{*15Of9dRbb#{gap|8 z*01(pWkZ19Ake=hjbjhL-xWpXHuA&XTA_@L5mkh*n~kX4aB?eW3J`g1sJSb^CSh3h z$aVcHx|vzQ%5(DS_aFTnR|r0tZ1%NJVHIWc0=`RDRH-h1M*f&zNP`X3Po_NhLvef7%3)-8I0~o%bLMTdLC`;&Qf})C2&^@`^(ha@@?@{ZE^! z;eE%DT>`C@y9fu2Ke?FX4u@%LK>b@WqY?=l(9f zY7le&2g8OddN%RTy%HK?dg6{}um7hu7h4QFcI|M;DD;jysRA`QO4+X~&uG(pz@bNQ zMgK=vOV1eF+_$#x+B9qTi|3xKr4xf-uY)BOUIwX3cH62e+7RIJ#0jq{S!Vjnvnbf$ zqbN>CQ3Vs5p+|d2 zyz;er7k0;P+4F=+FVcezrV=%RPg;etkcxEZ5oc#`T|-Vhg+0nmLmo7KMrY4)rzbdC zX{n};L~cs=4(ztSjKBy*q8!4bERSCFGd*;g-9c}wUVdkiz*I5nyHUVlRKG10zxI(o z@OMohv&SO#%pR-ss2+W`)acj7C%#Tkb7Wsei~<_!iugh3mHDOa;G)1)$wu`uWX61G z{I^-HP{T>A*v#8oi`NTx8iBQs6OCgPt-nsJ3aM%>PP=08`R7mgp39Q8`6cG<4h40J z3;({(QhzR(VF3K3bxhTmGZ3K0GbAlQr%#5fnk(v1`5eQB6oxdn#3;bBWFQf^Q0{RI z={{VCJv$ErtPj@ns5%b+PUH&nPUrAi9|&KF@*a*bk)P%eblrff5Webh+Csi!Hv4PR zoTD5x1jC=ooX+Cbr9F6T)^7rV6+&!C24&i$U)BbdYu~?e>kgp>U|%zuS3TiZ5cfudR~I@ZUiG@?$fg!_;gqpgg}Ei@33gau+HmJ z+6^D#65QLFL~;(I)JlB{?TdX1wQW=HwE+Fsh>^kAh(m}5F`$^Lg9+teb|MGy5$4OMnw6U3U z{|^yHYVPVlC*APbtm~?j+Yy=QkUS!)(SbvcZ4q zR8V5;@*>scY~qk;8bkR?5l2Juy_2vBje(zvs+!8+R6xRF7xwC@DD3I9jZ(A=wBs3( zduX^xI4Y4tWii2(6ONS`+;5Y3dlJd_GA#6r58_0w#&3PcK!dfR44~ z)BT!vgJUr-NL1n7h@}kY8yzhe!g)nal;=&oDk`p~Pe8>i;-%bs#IiKk5I)3FScI4; zvsORCeb`zq(qPvoHU{tL@}pFCwa0a;o{Jcb!XFysxw z3!tnm*@s;^#b)22sfjc9yD$B**MYyfMJR>SvWuHPW+c|r=Tl9*&Nx=ws_cGnJzYx9 z_dvF=e!9@GNn^GYuk&x?HTUe{F3R18+heO=D&dVBXXvsyZ+ zrzVvtNSlU1!Sl9Mv~rL*Ov#_zJP#Y1Q#5U&TH5#D66F zcH@lZ)ONlq917mXKU{NWbgBpLd>?-0@42Q-y0aI3YpZ)}67R9Oa%0LMZb9&+1wQP4 zTW$)w-T%e)uT`(sTNc6(?wqD+U&xQEI87+GWZU{-1O?R_!V^Gf3TkHqRStvOZD zI^3DMxdNQva|b|W-hbE5BlC-6BPl8(2r=h7@zln^Qclo%v|MkYWk@}A9(~;b6?pfU z%T1M9m1iK)gm%Pxwq_XY!1e?dApaL2h~) zH+1SQaI2})xo3CH>N1GxCpd{KkU1*I=`6yI-^iGAQ*l7M)|;gn@X7f{g6BZkO!rg2 zYj98VdB7gisCq%XhBJF4dN|qAc`IOp18Wdz0Mp(JMkL9!GP^F`^gS}~63|SpuUw}> zp0v=9GPn3p&QmnzcZa>Tv8|GhIC&QeL_t8KJF@+Y1HuRb;gMlmB9#Z*@yT`+1P?G+)k4QC5syZ7@Go_H(H*`bf&hzGo zXmw-PJ~$(efd+nY-%m({<``jd932Yr8Q@w!=BP>WIj6@Y^mW#sKJaI>Uoo$eV|NXq z^B(vU9f8rq77S7<{-Gv$f!_CTNE~KhoR86bvfIRN>n3?iZD)_DPVI%tTOMlzR?qm1 ztW*g5*FOq(E2S;+!(HS@JYoivgJZ}o>I~#@mNy6u!}fe=^bLM)MVeWl^XnV5g^m;G zHE$;mVgHiII3=FRgnmLpVQA^(sBW_VJ5M{()Gr?mO{GBuN0;yRQ^Wrw4aZFMsF3$2 z|D3HO{M%C1uo=-dyq=k7Yywj&*W+9$wa8VhG#j|=$_|QRqc-akP955v>X#WFOJ8o~ zxO?tv64Gk1b0E#54`E&N$sVt-(*gLVf9E2px*x!+utH z6@w@}9GL?~#1$okxSfbhe*)7HCQ0{6Ct|GYg$&%qv&yODm&%^F^H)P zKlr1JxUN_iH?L1W^6mQ~0XMF}I{DyK*u2(K3%dHDZEjkrPup4LHJj5Nw|P7zFKD!u zNH4y)09JzM-T1`ODpoT=#j2+1o+rk2!>xVz6YRmxiR`;B5Y6)q*Kf9~k2TW>-PhO} za5%g^d=kcp<~G6&UjyJ~+^LH?ut+GMw^XpEIog77d$fOlUt{kx8XcvZ7FA~+Z8VcQ z@czS?D0-Nd&XTo+ov9|~>BW|zW7T{UBRQ#%J}b7ZLReYQha(m_b(_vTtL`q=Yd%K1&sS4Hl+h?CMEmGJ-Ko zEa4Kk6`jfH9uIYDfxOrE;IH;8+jVfrER!;fH5LHm-50_d;^@mlNo_S7^ipPz6RWQP~p?iF~}(R^JCNMf)U)lA3{Yn&}Zy0 zYLeUw>cXewmn}I%M|?(GX1d#<6#mt?vCJ8@5ttV$iViGcPrhA7lN6eaUr0XrvC z7S!?Mjf3@Ulyky)L0c)-QPX?Munu4-IK~R{QL##I&$yNyFie_Jkm9(1y|n9{Q(cp3 zb$Nhlg4~iL1O%Hx2`9o%_v_3t`~zdXFDqt#jjVG&bZt}G<3E$^qO1&X;8%IcbRP4- zwIqT8ZJj^>be`j`7HNZ+mH*gonEO5HG6DR{6dO37(;okpfXu4JCvw4&M6ht7X{Adj;p{&|sM)?dn7G36MTHzFySySrWwr_iGROXK@EM_1bIgPLK;}F&HYs3D6 zLF^m7{6zm`rXYWIIAK(ovIr3Ny{)|*)@X!pR)@8zMi1^!UbJ3epo ze$sFoKuhnCx0&e7(z2EDxsit5lvOrb&I}UiXT-q-HM&R-CLG}L=C&X4X-8nM>sH!jcjNRsPxFq*0&=$Xg{q+H-W1I zu#JVowP~{NxQ-YY#V<3kH}}}&rhTOu8ADkTQBUYdE%jMi%_q!LOInIuo2L{%h+Ku= z4179c+^HYu;GMTdQh)LBv_|{#dRzmfTQ25AH#v9t^452Oq73+PF9x#|+k(o+e^y^+ znjEUqEiAcyJ~bC{CM_thcVpsTX-S}4SaB5)zqMmM>vg7FTiI%HHfs|<*^OVe&7$mB z-SdQ>iaKeojldP#nIcmmGjlh>$|Cv9s}p%4nb+DWX1Xb>6qWkQ(hcT3INKsVvtpF5MB$yn)Vc49prJHSEfrVsU5jFzOQm%c$J-n!i5~5>CVV&n6$>st!&?N6)gFw?kkiOoPKo`HTU5FdaK1G0+ zRb+8?(9<^S4k#intF_bE{1X~$)!kv=b)dcUqwK1|D*Y0b7UMTDQx5M+j(xbK)HIp1 z(D9@V6V&a!fZZh97xNE@Nd$i= z4mDf|in`0u9Tq0iH)H1XGkx6$8$>6rohTP}bf%u)h!o0@l!p#kbevaIY@`P1qCog@ zk%4-2b6tVAN1y#y?h$frC$pdzs9VRIbGO3}cu1GuUF!P#_`4<){!X!1iosDIhl0J% zUWIJ-0tWN(euy)*o%#%$MnK{vQpFQO0JRMYPN<0cV!`FDi@z)i4jQ6{=f4DPLLRpQ zHiP`egaMv?K^!4{MQ~HuCJ8(T96GHr?tHf?s{OiKylz znz_{)%q{~ar##9;4sag$2IsAK-x#zuLz!F+Q0mM{e}+%RwRIWinrodhIU*<8oHF$a zE48~MP7|saQSR|p)=|jCd}|Pk3y!yHvwL7aM5h8H+W}-W;4gw{u`0qCOa_NSlf(#v zQ6}&((<;ViEQ>a}XZP{F5GAQy0-1yfhjNL}! zUTJX}L#eTS^spf0@rroJk*we3ednxvGV^KFmNc7Ks-;cz*vPyw3Zth3<(dz;eh~Q- zE&6Xdl8OSVoET5{JR^DPzr7AteO3zJs|`!(tNW_;9#Oupi(+a626dDzXVrn)OO|}Y zmM%WTylyY%&`UqQ@&(*fjjs=IB7kZGBmPOtXl~5uumk0Q8QanM7XWL7r7f-jp+@hs zQe`UK+0d>CyIt3`rCt#~BTa0`^ZD0e$gWCvj|U&nrqF?YaWj44nVPSLFt^P780jIs z(O`QR%&O7LRBFA%>`HTPk=m&wXFDl#`g%X(ox!N^JaOm-XUm#vTsz8_UMjp!MTiZP zpVWGOQ}!qH_B@SUGeG%_#GadLGD7{(AI54G{jPDUuhoFKEi|1!9v2^dRd7k5_RB;| zuzO@Ln43v274EbAM&}h@yyh0Fumjf){)AxAi^Bfx>RoqJVjveE6-+Qn{`yp!6W{(2 zW43y2#H@@dd@wc@BzUcN_w4VpK7fP?6S6jH$LA3U!s-ji@0W$Hr@M8W;)MfLa)t$e zLGJIzIeWyoBbcY}7{(B3bXiJM>o#+#HBo6Twkb>%HFeOC< z6Y`$=CiYhl@|_Ot9#7-_&5#AEwveKAH-|Nz=9d5UWbBK5P1h2mY4xonZ(Q8#rvV|r zH1>fMNIwStmINmcu5e%;x4tG1Y>umjQRkkAk#e6)Sxn;m@0UcaKYVlG;riWd`v5fu zdkISro0^J4Dhkkn?T6NppA0%TO^xY|Oa>Ep0e(QDxi#S)90j~5mh(4s(KBS0z{^&v zV5i22Gk!38sdcDOtF66TH`xj4dFpXPpCyR9&uzO!*qO+pV!qqY;1MfC=$(tYlnd_F z(YwsV3E&&^-8%~Gg-Mj ztQyk14dyILoFJp0NJr1%z0$hykaxtx^$u7?;_+P+z@G?f1S$g0X_GKVxU2juWh);E+IpAmyh zwDb!bsoO>3fbkR0gItOUEr1{Qe{6*ZL~_1k=Uaa1FLskuBG=;(=;Mk>vH}RJMkiKL zU3l$#KM?AJ81&}GiFzlmkhU=qI{BhGL!Xwe-wcM;4d2GA{H5oR8t%o2{Qqhhjl#hp zUMtB->j=jJfUsgWwgZj6-Y~60+jhZF7>f9*wKUrfnjo57xPX{zBa-}_eExDwkk+?u z{7-v^QU+u(4KuU3O?4u=UV&rEsB9LfEP@-2!G!6DsO+Vb!odXYOw@3d`FOjtV#hct z`i7lVi=w$tRL_6H(LYKcoa+Ze@?)Tbm<^YgY9Y-MwC0g&l{40J&m1>1sIK0ohzQ90mkv{aF6+3jKsNXVY+J%iz2qdlAtB5 zrg8ZdQAp5$Hu$@KHA1+8NyuO&2KpixLd?bBdyu?z@p{*IFLrL(&7mC+?QGm5P8bRF z#fapiM7T=d%6b{Tva}Dum z%_fX4Wy_L^=55CMfb(hxvNrjYR0%-)xinqp8*`!-S*-E#qqMjPtwjpp)7(!Lt&IID zevEK1>reP!850WC&YbbOCbWvc#SitrUJeC=QCuZ2}bhhKBN zR=3i-pi4$%Px_`l#ec?M40YOY-Z%%8rUgU&T%#`qBwr2xur@QvMczgyr=f3HW7NEr zNSEG)%KN9TRJse}npm)^4wfQW7XxR~WKO1MuJf1(AmUFGys`dD^R(|FUH6|Grhb;l ze*lZRY)i3LG4$`WQQV(e4wMFZTX_F#xj;i!6K}R^J1H2^(CA-#u3qkc-MT+Eml+fU z2mGrj^SoKLfma&w!N-?Ojbd9V0JeuG)L? zwi?SWxMDeI2`#MvIsBw5pw(3%2TAIbTOTuPI-QJ)e-ij2&$oR2bqr`N?^7GI>S*7~ zW7lE=UVtpV)p?0&6bF3W`#G?}!sq>Y@x0tSYwOLhLd-yvLmmAx*YBLUg|q8M%b>-{ zgrw(YP9-dyNg~SL-D43a&*7m0m;wj%X8Tx_gd^|ICek$xzBaC%vh-qgRROi5vOy^P zMFK6wZ;ASeLT7!JEPE3>9N0rIG%R~(e=pggEO1n_QZ>aHwlYqFVXWRIp1m`{V9Ks#B+OSl`m8atc63 zMGYwjb8=k|GOFB_c9kMq=e5;r&BT5VC*fq+IIK4Q9!hE)rXM6maPobtI3U)L8|j>U zw2X(h$N1p%w>4qMjeQw?uYKE?Qg#Xu!kuQ7o;=hr92~P$nSR~>ueQ>PxUclpT*$ub z6d;)AqyILvxhG;?*}2YbKGAfwMe=8VUn+2eQ;w6EmXMlJ=3q!J-DuNra67i=<@-JO zFN#9fMF+ETJY|mNRA>bF$LgJN;_cBa0sbVcg_BO;3%E64`TxF+dGrS6)Qr?$z7>jJ V5viv~X~4lAO7d!Q)iUOx{{we|XxhnrV_;DVBx*vx;5<^ROJ?f?4mNmfznYJd{$V zsw%6k6biY^hxgzPX8_#!$NygUKm4g-c$Z7-b=2zllSdwL@}&E(KjZxye18AFKlAez z|NrH67r(z0c`5OjzW&=j-w2b}%O79({&-lwzV7e%JV;)T zU$2M!xzIRYPwMFH=b^6n^|(JDd_(#CruHuV<0AUM`}u|3h>{gPm0~<8B>(=+Un5A2 zE{!z#H}Y>xCF+&Jb1vn0$fT#0D?RFrq$(RmlSwwPRc zU#t8yehbgr`x*RnDsqz?^V=_eb{HX&mFq$d7G}8NyvH3jL(K8S#$${-ruSM;EsnTf z=CXdmjg1^y>f~?7<5J?~_+u>L-FLkE?a;Zi1wI-B7gO5*>5uzYe{cRLKknYG5CsJ@ zf5nP%MO7}tQ0DY6pVFK6leh8${QdJuzyGPQC{?ajUYI)*oPK>>VwLbmZKapz#ODf+ zUxgQ3v(E(>5ce(&CL}W8E7c!r@GZs`0&(mlXfpDca$IB}loE|W#+*`(uEid8Z@$yQ z`)n++M!gI+k%*FNe`@50E+bhv7wV_wP7TeHN-m|;(n@z_lvz{FwbWW$70At&T5hG) z)>?0)&7OMhrPtni@1xHVM*;)OsH2TO#+Wm@$&Du0ntXop%8DzkyvnMpt-i*ZoATLt zmtA+;eUCjYS~6h5sx|92Y@Xl_NOAHhr=E8D8E0N`w~HLQj{|?7IPruO&Oq|qjKhZ$T=!=%9$ULrYMm?7UjlS zP{v4MJ|UJHe&p_t%>Avrxzhhu-r~Q@oKx!l8<}&Y?yq_KP1a02w_nD-x==CoiSE08 zTDmUZK}uG?e{n|IH$l3|0u!HBZr(lddqA=a>YS6}Zr%8FJ-1k3qJEd!X3Z|#G`8(v z)@vfwgfU!ju%5MQU?60x^i}mNo$AvX<+OhHS=$^DtH!%_S}l;1U8#?_XK3fr=6(BH+}v%Rf7?s$COxs%xRInV#72bgh-^6P=v=Zy(nkVrOUY&#j`%xFB5iup9EsPB^-1-HTcK2N>5UVqOV2c($H zG|!dm8m*5;g;7Vr^vzHq;L9~7MEQ=4HRq8r%9$Fw5yS)~2a1YH`jFP!F%63%M?$#rDr(o!Z)C1oj zyMd1zb4-cYctx^Rvs-c-6i8{?8=2}WYN!dJe-+EPqgVR#Fe6)Nv9bx4=ucH;suU`u zP$Ep+!ije2K5v;go`jT&dpndsWK>0_C>mlvdzk^snth^OvmR8l>vN8>gfdM)w3F+}148)W?N1 zf7cC>?P>84y9J zXGL08ItpbOYz*3|Z>Dzk92(jP+dJB!f8z59D`NraLQ7zsI{;WP->A@3b4bwN3-~MPkuVt4+j~k`)-cr-ALn z>lWCxL#l(K1xf+jP9I(d#)X%yfo6-j)AD|=O~u`0z3+-RwMdopQ3xJhgmiO}e@n$4 zSYS}|eCQ@IR-v`FTnZR)7adiqr9v_l2ohJ!f<+;~2{3IhbXZwnbPlxdj-r!PIu`=d zmjU=5oa?BMlNv4e2^-=)j6?kWRoI;GGp$(^H^NTbys#*%JL)9l(C+QTZ%~`Ww=C*@ z5i?pV7f2G0%HT(Ke7!R*uy!tje}*b;R2E1$$bO7==qxY@;9QAc0LK(`GF~XpTDdDY zdgwJZNX&L9T4XaLj}0R2AQX6GR_ACI6u!)ySBDfmSfyh18@8&b}| zb#iEz$@B)wZEod6I+EU?ceMs(e=dpeVjw|6qhr3|cW>uls^&!_i7HK23p zj62caRPLd;;R8ce+y#FhcY)KmRAbCVO4z6_G08Z@4Tzm{f{&y@00Zm}@ShGZVLylo ziUh#!){VGR$c$ucXvgcWe+{(bWqMcN)5LotR5u?KhZt_;LaG6v;|VnJ2K-Nev*Nny zEv0^Q9n|qK>R2!lsaIkeDR?>pW`|Qwt@|eCfNp4lj&fW)3w9x*Xs=S?y4&c>ijoAS z3K=O2K2TFgP{Rsgt7<1V=2~d&L*tE|oZs^bnGOQ1wRNSkAh|r_f1nuK-bo~Zc3P8f zo>UEh43i7hxfwE|h4A&|a_vYzZz#u-xz5sJLMRL(5ZK*22!cts5_iPCz7!vQWk~IgI$M~JJfnt zdG9pC;VG66eJr+Fy;R zi(4at%}ZBZu`4apB7!YNqApk~Uz$#L1pi~~qby7<2 zT@n%y_-D4RvK*k5J>SDOpp87DQPBr^Le+FkA$bKx4+Mb(4#%N}(F5=5=B}U$jy~!LPYcOfURIwV$Ru&1dv*88w zE+Aj&MI;jF?jqgWm?-rNRnRNYKE`L^O6aOKpw64BZW#Mh+sF0Uo6wlnW@J>Q*J{N8Z!Y&H(;9w?A%a@<1i#h2rcgn-q2UTOFBDd z^z)z(QH|S&0KsSAs3R$u{go8!7sO#$V8yud1I%gM1|Csw0lYxw&P3cALa1!3pa;D$ z2@Hx1f3HJ85H~h+ruk4sM()AyI3S*SmqS@V35Q!TwzDKQafK-u*JbEI9um@)_(G*X zR^TC+Q)DNJg6F#k8$%zVCnI2la_oRaG8q@LF|mBs&W;f%+zMD2iGggAFbE>R0$ypc zZeeEYbO~F8SRp1gfl__S+=LGO)A6SQ-<3{Ae|6887VM9}hbOjy6zJd4sK6uX?^f|& zwkKeJccf4g>Qy?O5=HMphZ_}uzx7lA2N$YZQvb7w&Iu_b%0(*2+2G&@&!H& z>0StEs4YQeRLRtPurx6SW-2m$V@Hkv1Y<=c9To|16)z?OZJM?CMG!I3jb5dt4sb0k ze@GcZgW%;dWC0S+Bsvip;DVM5+(l!xfK^qGqy>OVWy&zpDp+Vb6RpT|6j`K~A-!5j z?NZlbehv(q!qj3NNeA!3l<-?qVU-Blo-RQ7&#Bpes<8H4Z3?Q zpAp{x>A~$$C-Kr?6xxyAhtB9~!sJ0bY*dTFdu}we!tTLT{49Fh0+Z$qIFz1UlGKNM zfk5a@j1tOZAb4W0FvpR(jsqPJPosK|lZ!_TPqERK|ABA4WJjeLXGX|2!YE}?e+(xK z=)o=oQe+t5Tk0sF(W;~N>c$YHPT_+GC80X#f4-9j(S$V_EYLiGPs9g|PKh2VZg7Q$ zg~|eq>gb<_u&bNo)4dntx4?-GI-=ym%%GGw4uD5plDL#sMN3Cy7L1T_(CCws9Q;SG z1MDb*4s%E|AV*qck2VSzjRh_!< zOF~wB6jbWlq~VBV0c&tF{b6a;$`1?%>A;Tx-w&`umIt=c#=^luqqxx*%pC@S=CDUl zH*f@!ROloS2qZ5+&?^+$Zp-kfBdJ;j=$k-FmqA9jJM`7ox>nKJ#dxj>fA4^wg$fheg{nwh5)Aoa<+=OYX=YqBs}UL zV|pFJA&8gWMH-pCT38^slpy>Bek0gqJ+Fj=Kmrm>a)^j>{5p8HR3r{wL1+Xoxk~Rr z&t;*B&@5gn2o1eRzY;Ozf9VQLH6R=4j;ykWcrZ>#VLL82G@ZUXwcHU&5J&}{8QL}C zXWBre&sGtNa1|00O-N;7aPizg0e%2SdX7t7YaBF7I9f?r3~qlt(zSy3jnd2Vl0apc zLHhyNDe6#YP$`Fyw0?manQx^Ac_rY;@Wd6MW~59e(GkB}p$Bl4e;fBCJZe<~Wz3a& zA9I3R)s2?3{0Q~|Hpqosf$%fpwka>_2cgS=E-Z!!NwAoqkFkWi(bN-z@=|>1wT;pu z8o=JgT~u_bR>iP*WEX2Weq{JNy`SV#3O}Xy8NWYe7@c~hNs?FF(bLj%GL-48bRaa? z6_o2|lTauQttu7~e+(^phvvp>XoYUI%;k`*^D5-RckJ1CAUUR&3LJG9^UPEbg4}l8 zt_jn%xqu-F8L&%8l5=Gq3Y0?cAdtzOgov#Rs+WvQJg_X-fRaM)`5Bt)h^Yf4@K?wI z5|vrBz*uCbW+T#-v}m!;0`!BerGKGXt=-_h(24%S%ZV8}0$1csG-|4-XpIzsf~N=IlRp?aa0PU^umm5$ zzRe90%>nP?dQn2uoFzx)AWYVPNh?A6fZQ!Muy;ADX619 zg5_JM?duqrQ-%$h7p-_k)MY&|;iMP97FU^liM%)?f5@Vrt8Lh*6&m!QEEw|yQAA7w zqQ6>@C-&vF6V^7hWmzIV{OV7K}Z$)|# z+`xY4?hsuh+O(XF^uP(}c2rP*CHiF*<+BfL3BWGmIfF{|2Eg`e*^Cao!QnOlmKF>1 zFS3~se|*MFQVm;>xivPEV1ep1Uy=^_!$N-JHInv1OUlbp%T2o_C`4vLfdi#m+tusP z0*EYykzf7aGgU4v8rRGtdB8^T1L(Gz3^;y+*~ zpOCrlU^aRR3a5QS&uCN1{rM+;- zf0H;+jVQgW!Kfp_+_!d|yYJp4Mv-L^tFs*#ru94IekH}Ug;qMW5@(mXgmaP3WTVfu zwE>29O%v&pu6YEFQVERV92{zMHJx$5b-|uVeGlQ-cQD&0m|w9x|1_3}i16nG{J-Mw zev^P-;%^c6$22#US9w}TQozv*5njcQf6_9DH8do?gUJy0k-bFfMJvLu1Ciq~fnaHQ z3isbc-~A>0zlnZ-3;qlUn4DU>54l0$fI7hC$3RLRlt0(ZkQ>@i$3bX0%wLq*20gUu zMlYlGwD#7J@?EZtI96?eQc(-BK-VWHg}EcLf+2^@Fz?%A1W7OfSW&dSR#vtye?@3? zssVu2db^D4K?3VGwY#nDzDIT*?!&@Tk>_A4Zt7SjK7E)pNqe*_kOKaBqwiVo(4Elu z2suZkqnR1akuX2x5>+gW1`->?%@5ar=`V!)M!H`fTcK&c3AB6&6cvtanA9F14A3_D z+F_tR2t#q7<>x{MZ=AAeBdGZTfBbp}e_jo7b-^nN3a5^cL|iAa7_tH#U|OD``shOB zRb$W#6%Yv3)B-;wP{jRsZcv zRE#D*2-Xc+XpD=5BMkkbco{;I;REXeaiG$w;;yA(Ec|R*YXs@EsEmamxpa{>)HdRI z=qLk4M-}3SU)36stGBhuvx{pLA@fK^=(oZgb=Zb2*8e^fCYSz>|#C+Lf8 zz`)!rjSA>iwL$A|r=2PVjy9!++v(LA!l17RlON#z{;*+ zqeNTWlHTX)z!%cuMre=pX~(o9EGvK$`Z^93{cKAz1v6^le;d<@0SQUx9{NrmV>JUV zf)UVyG%ZY$RiY=hhAuhi$V?qE2vYE5Ip9^VHdv-j04Zo=7O5sJjkHisHFLq8;E6H? zLbY)*+H%^k>jp^SviAy@{_<9w$zg1Q>?#`|b#buPCL$qDx5LOugbr$DiC=fI2RfaD zWiOrjwmnKpf7;uk^&>)4yVs_Tnzv-2Bah+YUIlHht~SaYo$(x`?~B$0h!%W#W9`3y5cSLv-h<0OS|h$-P~ zNEcQgMnWdPRc=Z23*&Oc~Y+z<2u=*>r57&fYRu z>_M2?eYLGK%%icZ> z5z5+Hqug~Erh-SXFWp~W98i$?MH3?y2Q-4@f5&3b-{=BuQB;$n;g-EBi}+1|>S|Ny z0tQevBh><2RyBj@P-uC!8p?C;8hiB1VybkX`c~uKLQ@W+lWzkK{f)$;a08SwrOv^=}gTG-Q ze->xrV<Wph4#H4 z+Bd>Qt>Wn@wRkLCCCJG;g`L2)Y4R>2VQs(a5ZA%IbC<0BF)!_uRCCw_>fmNUj1GT6 zOxndsE+0VUB6f79Y=G&2@jWu!TwiPVe|8s|H7Z7$J`DAPqjJ67*_NKt~1AHR0wBM1H>WmM_NBbiqz0OUD(=hojMegt92mtkndm!QvFASS$8t^IXVfv@oc&E0s{O$e^-3lxja$j)zks%d-c$|Ha zJxIeq9K~N-r6Lsvi&SyQPzAw)sEDIhp$HX1tm~{NR7^ zyIV6qIpHRS;y~w%ZGQ{{!CjzHv+eI=+isiyfoI@KYxyg6VCIwbT1$%_0lnM6#dS-Q z_khbCAo8S3hU7>An*Mwqct4|W$^w12K=+#4TXP?$4?vo_O5OkmhrmdIve!M{-PPXP zzh|2L{Q#Y!a=1~4#=igq01)J}z8lX1Bs4TLGGkUKqF=jGhlVBl211&H(vvne234a;e%D?~s00v@9 zM??Ss00000`9r&Z00009a7bBm000XU000XU0RWnu7ytkO2XskIMF-;y85ajI#1th4 z000P4Nklb*g5QWvMt>QTd$#FnLMB&m;Tf*s6-a!EaOf&x5+X+g zyE&nsgJk*!JDNS}ZGW{|nz7k+d8lD`e$=axzB%3M(U`&sFGQs7XXajeT(C!-bz9ON z&nbVjedy_kW4mAkZ?oBC$Ii~qnnA?tt=OYxScV}#7Gqbt5)lsrhZyPc0*DPajGY(h zcrMriPc9x1E$}M#s0N<|@8G-<#1^O%fR9N9NjBU7ofYZ+FMn2Zd-C^M!1I9E0$vM< zUif+-OaO)u9uJFa7SH@0ZiQXKydF#!c|Gf?|NfOWK2aHo?~d;nY6^h(n~K z4Ut-wC|#~MFkfmx_;7oUN@)w)SlV7Md|0N|&In)HPWy<6@4KJwYgt(pADAaMJlC~a zcWF|+1mB2!zT>UFJB;j}weI}f)LBqdlZ$h5Lc+FMF_EP$o@#YoxeNlkhBYZ!)XeFzV@s-2Kj zP!3MCyH$(plDf%@!Q&dFIB+1MaCUY!fl&a54QL2#QGW=5YxXvq&B1=8w?7tL0HWJXvzw??akc*d&XoiR zzgy~u0~AzHkK$P)VyS$ZOU8@U+$VhSO_03uim_vzW@69JG^@HVp72nLWs;v>B24eWKudo zs6nc!S?Rd^UIP{fFnq;AjD7iA8z_X&(j*?m>qZ`$_2Vx?>H#-b6Is*;3VTJDq1KK@B>-;>_jZcPqVv zYDhl!<+@%}IZXwJfH4t5Zjjq*m<6(!F1}0v6s8Zv1iZQYr342|oV$W3A)~73S1dQ9aH+Kj5 z<7g$IOC#Ifr3b!ARSH1ievJL5Plv)D`+`u6BVKI~(q&J^fi22bgRlgpItW3xi>kLo z$7wFOB|U=>N)R=*^QvFrsY%#uHh+kpJ~riZ)Ukgbdu`l zuIyZJu>6>9p9M~7A|-xrO>vCRhgq~uwrwe4?H!oX6sQgeEdWo>qq(!8+9Mp#`v;mE zGwiV!K3QH)De~6Is8{woR)78FI~6shuKaFq%H<@N*7QDy-MlkS-#yTjCOEc&Q?u6- z*CpkVs#=1nc0**7USaNHvNv}&3pVz4yA9#}`;!jjSB}nNY*=lsVCe-VCDvgr_Q8(v z+R|)D0BUM3&(+)`&J@vHrUhR~IV~6LVQ;(L?$Rz_zC7LmC5>Pa5r6Zjbi9i=4pvJA zM>~64yUBB0T0F0O;##s%3J=okjQ-aIdwtU zYA+Upbmb1$U~|C77DU)_4>4yiDOWH2vfT83j8i!^2wnAFuN^rxf77LNtuj3d*lI7< zfYAUey@=#dKken`rRJhN1ccg)KL}w>d9}Qs(SEM@4i$&Te}5jO!ZHZQL)ueYtM<2I z2IZ}=p19|4F5WlDG;j;YsHBF4cP(6MpZ(&uZ`q?aJdFY|e5%kO1kz=GI{y$ppI>Ck zD9^Lt(_%deRJB(nLAqTT3-(M%#F(l_i7ch*0eoqDn&Nk;JbQC1yk1XhkGn)LKAnHa zRI10Vr}Cf9KYvv1xmvacVedc!I>jCPrSq_SNnzaWwyZrf&)Gzv6DqpC4s?BuAWTYF ziuD002ovPDHLkV1iWS$W8zN delta 8677 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 Date: Sat, 11 Jan 2020 00:48:42 -0800 Subject: [PATCH 10/43] food.json - duplicates removed removed duplicate item group entries in food.json --- data/json/itemgroups/food.json | 206 --------------------------------- 1 file changed, 206 deletions(-) diff --git a/data/json/itemgroups/food.json b/data/json/itemgroups/food.json index 4b86e646dddfd..0b0ad910e8713 100644 --- a/data/json/itemgroups/food.json +++ b/data/json/itemgroups/food.json @@ -550,212 +550,6 @@ { "item": "mre_hotdog_box" } ] }, - { - "type": "item_group", - "id": "foodintincan", - "items": [ - [ "offal_canned", 1 ], - [ "can_coconut", 1 ], - [ "con_milk", 1 ], - [ "milk_evap", 1 ], - [ "sauce_red", 1 ], - [ "can_peach", 1 ], - [ "apple_canned", 1 ], - [ "can_cheese", 1 ], - [ "fish_canned", 1 ], - [ "can_spam", 1 ], - [ "can_sardine", 1 ], - [ "ravioli", 1 ], - [ "chili", 1 ], - [ "pork_beans", 1 ], - [ "can_tuna", 1 ], - [ "can_salmon", 1 ], - [ "can_chicken", 1 ], - [ "can_herring", 1 ], - [ "can_clams", 1 ], - [ "can_chowder", 1 ], - [ "meat_canned", 1 ], - [ "pelmeni", 1 ], - [ "canned_liver", 1 ], - [ "can_beans", 1 ], - [ "can_tomato", 1 ], - [ "broth", 1 ], - [ "broth_bone", 1 ], - [ "soup_veggy", 1 ], - [ "soup_meat", 1 ], - [ "soup_fish", 1 ], - [ "curry_veggy", 1 ], - [ "curry_meat", 1 ], - [ "soup_woods", 1 ], - [ "soup_chicken", 1 ], - [ "soup_mushroom", 1 ], - [ "soup_tomato", 1 ], - [ "soup_dumplings", 1 ], - [ "soup_cullenskink", 1 ], - [ "can_corn", 1 ], - [ "cooked_pumpkin", 1 ], - [ "veggy_canned", 1 ] - ] - }, - { - "type": "item_group", - "id": "cannedfood", - "items": [ - [ "can_beans", 40 ], - [ "pork_beans", 40 ], - [ "can_tomato", 40 ], - [ "can_corn", 35 ], - [ "cooked_pumpkin", 25 ], - [ "con_milk", 30 ], - [ "can_spam", 30 ], - [ "can_pineapple", 30 ], - [ "can_peach", 30 ], - [ "can_coconut", 10 ], - [ "can_sardine", 14 ], - [ "can_tuna", 35 ], - [ "can_salmon", 25 ], - [ "can_chowder", 35 ], - [ "can_herring", 30 ], - [ "can_chicken", 40 ], - [ "broth", 15 ], - [ "crackers", 10 ], - [ "grahmcrackers", 10 ], - [ "marshmallow", 10 ], - [ "syrup", 15 ], - [ "coffee_syrup", 10 ], - [ "soup_veggy", 15 ], - [ "soup_meat", 15 ], - [ "soup_chicken", 15 ], - [ "soup_mushroom", 15 ], - [ "soup_tomato", 15 ], - [ "soup_dumplings", 15 ], - [ "curry_veggy", 15 ], - [ "curry_meat", 15 ], - [ "flour", 30 ], - [ "milk_powder", 20 ], - [ "cornmeal", 30 ], - [ "powder_eggs", 20 ], - { - "item": "protein_powder", - "prob": 12, - "container-item": "bottle_plastic_small", - "charges-min": 1, - "charges-max": 9 - }, - [ "dry_meat", 10 ], - [ "dry_fish", 10 ], - [ "dry_veggy", 10 ], - [ "dry_fruit", 10 ], - [ "oatmeal", 40 ], - [ "toastem", 30 ], - [ "toastem2", 30 ], - [ "toastem3", 35 ], - [ "toasterpastryfrozen", 20 ], - [ "sugar", 20 ], - [ "lemonade_powder", 5 ], - [ "molasses", 10 ], - [ "can_cheese", 40 ], - [ "cheese_hard", 5 ], - [ "salt", 20 ], - [ "pepper", 20 ], - [ "seasoning_salt", 25 ], - [ "vinegar", 15 ], - [ "cooking_oil", 30 ], - [ "cooking_oil2", 30 ], - { "item": "veggy_pickled", "prob": 8, "charges": 2, "container-item": "jar_glass_sealed" }, - [ "jar_sauerkraut_pickled", 5 ], - [ "sports_drink", 10 ], - [ "protein_shake", 10 ], - { "item": "dogfood", "prob": 5, "container-item": "can_medium" }, - { "item": "catfood", "prob": 5, "container-item": "can_food" }, - { "item": "fish_pickled", "prob": 8, "charges": 2, "container-item": "jar_glass_sealed" }, - [ "lutefisk", 1 ], - [ "dry_beans", 40 ], - [ "dry_lentils", 40 ], - [ "dry_rice", 40 ], - { "item": "meat_pickled", "prob": 6, "charges": 2, "container-item": "jar_glass_sealed" }, - { "item": "meat_canned", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed" }, - { "item": "veggy_canned", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed" }, - { "item": "apple_canned", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed" }, - { "item": "offal_canned", "prob": 1, "charges": 12, "container-item": "jar_3l_glass_sealed" }, - { "item": "can_tomato", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed" }, - { "item": "fish_pickled", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed" }, - { "item": "meat_pickled", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed" }, - { "item": "veggy_pickled", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed" }, - { "item": "fish_pickled", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed" }, - { "item": "sauce_red", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed" }, - { "item": "kompot", "prob": 4, "charges": 12, "container-item": "jar_3l_glass_sealed" }, - { "group": "big_canned_food", "prob": 4 } - ] - }, - { - "type": "item_group", - "id": "big_canned_food", - "items": [ - { "item": "can_beans", "prob": 4, "charges": 12, "container-item": "can_food_big" }, - { "item": "can_tomato", "prob": 4, "charges": 24, "container-item": "can_food_big" }, - { "item": "can_pineapple", "prob": 4, "charges": 12, "container-item": "can_food_big" }, - { "item": "can_corn", "prob": 4, "charges": 6, "container-item": "can_food_big" }, - { "item": "sauce_red", "prob": 3, "charges": 96, "container-item": "can_food_big" } - ] - }, - { - "type": "item_group", - "id": "pasta", - "items": [ - [ "spaghetti_raw", 40 ], - [ "lasagne_raw", 40 ], - [ "macaroni_raw", 40 ], - [ "noodles_fast", 30 ], - [ "ravioli", 25 ], - [ "sauce_red", 20 ], - [ "sauce_pesto", 15 ], - [ "bread", 14 ], - [ "cornbread", 7 ], - [ "flatbread", 7 ], - [ "crackers", 20 ], - [ "grahmcrackers", 20 ], - [ "marshmallow", 20 ], - [ "biscuit", 12 ], - [ "hardtack", 2 ], - [ "pastaextruder", 5 ], - [ "seasoning_salt", 25 ], - [ "seasoning_italian", 25 ] - ] - }, - { - "type": "item_group", - "id": "produce", - "items": [ - [ "apple", 70 ], - [ "orange", 65 ], - [ "banana", 40 ], - [ "lemon", 50 ], - [ "pear", 50 ], - [ "cherries", 30 ], - [ "plums", 30 ], - [ "grapes", 50 ], - [ "cranberries", 7 ], - [ "raspberries", 7 ], - [ "blackberries", 7 ], - [ "rhubarb", 20 ], - [ "mushroom", 4 ], - [ "potato", 10 ], - [ "blueberries", 3 ], - [ "strawberries", 2 ], - [ "tomato", 9 ], - [ "pumpkin", 11 ], - [ "broccoli", 9 ], - [ "cucumber", 10 ], - [ "zucchini", 7 ], - [ "celery", 5 ], - [ "wheat", 3 ], - [ "onion", 3 ], - [ "garlic", 3 ], - [ "pine_nuts", 2 ], - [ "carrot", 3 ] - ] - }, { "type": "item_group", "id": "alcohol", From ce25c77f802f83dedc1510016b820e7ee23786af Mon Sep 17 00:00:00 2001 From: tenmillimaster <> Date: Sat, 11 Jan 2020 08:03:14 -0600 Subject: [PATCH 11/43] angular --- data/json/itemgroups/locations_commercial.json | 2 +- data/json/itemgroups/tools.json | 6 +++--- data/json/items/migration.json | 5 +++++ data/json/items/tools.json | 2 +- data/json/recipes/recipe_obsolete.json | 5 +++++ 5 files changed, 15 insertions(+), 5 deletions(-) diff --git a/data/json/itemgroups/locations_commercial.json b/data/json/itemgroups/locations_commercial.json index 001bd8e8ba50d..d9e4e54af3d5c 100644 --- a/data/json/itemgroups/locations_commercial.json +++ b/data/json/itemgroups/locations_commercial.json @@ -663,7 +663,7 @@ [ "chem_hexamine", 5 ], [ "esbit_stove", 10 ], [ "mess_tin", 10 ], - [ "angular_grinder", 4 ] + [ "angle_grinder", 4 ] ] }, { diff --git a/data/json/itemgroups/tools.json b/data/json/itemgroups/tools.json index 354acedc91b56..98b0da6cdc4cb 100644 --- a/data/json/itemgroups/tools.json +++ b/data/json/itemgroups/tools.json @@ -34,7 +34,7 @@ [ "toolbox", 20 ], [ "toolbox_workshop", 5 ], [ "recharge_station", 10 ], - [ "angular_grinder", 30 ] + [ "angle_grinder", 30 ] ] }, { @@ -220,7 +220,7 @@ { "item": "weldtank", "prob": 60, "count": [ 1, 2 ] }, { "item": "tinyweldtank", "prob": 60, "count": [ 1, 3 ] }, [ "polisher", 70 ], - [ "angular_grinder", 5 ], + [ "angle_grinder", 5 ], [ "welder", 10 ], [ "clamp", 10 ] ] @@ -457,7 +457,7 @@ [ "jackhammer", 50 ], [ "elec_jackhammer", 50 ], [ "circsaw_off", 10 ], - [ "angular_grinder", 20 ] + [ "angle_grinder", 20 ] ] }, { diff --git a/data/json/items/migration.json b/data/json/items/migration.json index f04fea8a9a1c3..f12b093329d43 100644 --- a/data/json/items/migration.json +++ b/data/json/items/migration.json @@ -968,5 +968,10 @@ "id": "hand_vice", "type": "MIGRATION", "replace": "clamp" + }, + { + "id": "angular_grinder", + "type": "MIGRATION", + "replace": "angle_grinder" } ] diff --git a/data/json/items/tools.json b/data/json/items/tools.json index 42e1e6f929f22..46f070173c04a 100644 --- a/data/json/items/tools.json +++ b/data/json/items/tools.json @@ -7354,7 +7354,7 @@ "qualities": [ [ "FILE", 2 ] ] }, { - "id": "angular_grinder", + "id": "angle_grinder", "type": "TOOL", "name": "angle grinder", "description": "This widespread powertool is often used for removing excess material or polishing surfaces.", diff --git a/data/json/recipes/recipe_obsolete.json b/data/json/recipes/recipe_obsolete.json index 33acd5a9f9a10..d0327df65a170 100644 --- a/data/json/recipes/recipe_obsolete.json +++ b/data/json/recipes/recipe_obsolete.json @@ -2232,5 +2232,10 @@ "type": "recipe", "result": "bot_tankbot", "obsolete": true + }, + { + "type": "recipe", + "result": "hand_vice", + "obsolete": true } ] From 9f97ea0ce50930f33640826ba198d0e03138c053 Mon Sep 17 00:00:00 2001 From: tenmillimaster <> Date: Sat, 11 Jan 2020 08:38:07 -0600 Subject: [PATCH 12/43] Update tool_qualities.json --- data/json/tool_qualities.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/json/tool_qualities.json b/data/json/tool_qualities.json index f66d02060c69d..4bad1fe3a6edd 100644 --- a/data/json/tool_qualities.json +++ b/data/json/tool_qualities.json @@ -250,7 +250,7 @@ { "type": "tool_quality", "id": "VISE", - "name": "vicing" + "name": "clamping" }, { "type": "tool_quality", From f13a987d05b764cf3bc9ed5b9c361fecdfe0399f Mon Sep 17 00:00:00 2001 From: BevapDin Date: Sat, 11 Jan 2020 16:32:41 +0100 Subject: [PATCH 13/43] Properly initialize members of options_manager::cOpt Specifically initialize members that get used when serializing the option value (which triggers printing the default value, so we need a valid one). --- src/options.cpp | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/src/options.cpp b/src/options.cpp index 1f8b66784a535..6fe480165a5e8 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -147,14 +147,32 @@ void options_manager::add_external( const std::string &sNameIn, const std::strin thisOpt.sMenuText = sMenuTextIn; thisOpt.sTooltip = sTooltipIn; thisOpt.sType = sType; + thisOpt.verbose = false; thisOpt.eType = get_value_type( thisOpt.sType ); - thisOpt.iMin = INT_MIN; - thisOpt.iMax = INT_MAX; - - thisOpt.fMin = INT_MIN; - thisOpt.fMax = INT_MAX; + switch( thisOpt.eType ) { + case cOpt::CVT_BOOL: + thisOpt.bSet = false; + thisOpt.bDefault = false; + break; + case cOpt::CVT_INT: + thisOpt.iMin = INT_MIN; + thisOpt.iMax = INT_MAX; + thisOpt.iDefault = 0; + thisOpt.iSet = 0; + break; + case cOpt::CVT_FLOAT: + thisOpt.fMin = INT_MIN; + thisOpt.fMax = INT_MAX; + thisOpt.fDefault = 0; + thisOpt.fSet = 0; + thisOpt.fStep = 1; + break; + default: + // all other type-specific values have default constructors + break; + } thisOpt.hide = COPT_ALWAYS_HIDE; thisOpt.setSortPos( sPageIn ); From ba319e75d8c0b43c6cd9e163aa2084bd2b3658e7 Mon Sep 17 00:00:00 2001 From: John Bytheway Date: Sat, 11 Jan 2020 11:05:54 -0500 Subject: [PATCH 14/43] Rename test files for consistency Have all files containing tests be named *_test.cpp. --- tests/{active_item_cache.cpp => active_item_cache_test.cpp} | 1 - tests/{comestible_tests.cpp => comestible_test.cpp} | 0 tests/{explosion_balance.cpp => explosion_balance_test.cpp} | 0 tests/{map_memory.cpp => map_memory_test.cpp} | 0 tests/{math_functions.cpp => math_functions_test.cpp} | 0 tests/{ranged_balance.cpp => ranged_balance_test.cpp} | 0 tests/{reload_magazine.cpp => reload_magazine_test.cpp} | 0 tests/{reload_option.cpp => reload_option_test.cpp} | 0 tests/{stomach_contents_tests.cpp => stomach_contents_test.cpp} | 0 tests/{value_ptr.cpp => value_ptr_test.cpp} | 0 tests/{vehicle_drag.cpp => vehicle_drag_test.cpp} | 0 tests/{vehicle_efficiency.cpp => vehicle_efficiency_test.cpp} | 0 tests/{vehicle_turrets.cpp => vehicle_turrets_test.cpp} | 0 tests/{visitable_remove.cpp => visitable_remove_test.cpp} | 0 tests/{visitable.cpp => visitable_test.cpp} | 0 15 files changed, 1 deletion(-) rename tests/{active_item_cache.cpp => active_item_cache_test.cpp} (99%) rename tests/{comestible_tests.cpp => comestible_test.cpp} (100%) rename tests/{explosion_balance.cpp => explosion_balance_test.cpp} (100%) rename tests/{map_memory.cpp => map_memory_test.cpp} (100%) rename tests/{math_functions.cpp => math_functions_test.cpp} (100%) rename tests/{ranged_balance.cpp => ranged_balance_test.cpp} (100%) rename tests/{reload_magazine.cpp => reload_magazine_test.cpp} (100%) rename tests/{reload_option.cpp => reload_option_test.cpp} (100%) rename tests/{stomach_contents_tests.cpp => stomach_contents_test.cpp} (100%) rename tests/{value_ptr.cpp => value_ptr_test.cpp} (100%) rename tests/{vehicle_drag.cpp => vehicle_drag_test.cpp} (100%) rename tests/{vehicle_efficiency.cpp => vehicle_efficiency_test.cpp} (100%) rename tests/{vehicle_turrets.cpp => vehicle_turrets_test.cpp} (100%) rename tests/{visitable_remove.cpp => visitable_remove_test.cpp} (100%) rename tests/{visitable.cpp => visitable_test.cpp} (100%) diff --git a/tests/active_item_cache.cpp b/tests/active_item_cache_test.cpp similarity index 99% rename from tests/active_item_cache.cpp rename to tests/active_item_cache_test.cpp index f5cb49a12831a..26922e1ba1f4a 100644 --- a/tests/active_item_cache.cpp +++ b/tests/active_item_cache_test.cpp @@ -42,4 +42,3 @@ TEST_CASE( "place_active_item_at_various_coordinates", "[item]" ) } } } - diff --git a/tests/comestible_tests.cpp b/tests/comestible_test.cpp similarity index 100% rename from tests/comestible_tests.cpp rename to tests/comestible_test.cpp diff --git a/tests/explosion_balance.cpp b/tests/explosion_balance_test.cpp similarity index 100% rename from tests/explosion_balance.cpp rename to tests/explosion_balance_test.cpp diff --git a/tests/map_memory.cpp b/tests/map_memory_test.cpp similarity index 100% rename from tests/map_memory.cpp rename to tests/map_memory_test.cpp diff --git a/tests/math_functions.cpp b/tests/math_functions_test.cpp similarity index 100% rename from tests/math_functions.cpp rename to tests/math_functions_test.cpp diff --git a/tests/ranged_balance.cpp b/tests/ranged_balance_test.cpp similarity index 100% rename from tests/ranged_balance.cpp rename to tests/ranged_balance_test.cpp diff --git a/tests/reload_magazine.cpp b/tests/reload_magazine_test.cpp similarity index 100% rename from tests/reload_magazine.cpp rename to tests/reload_magazine_test.cpp diff --git a/tests/reload_option.cpp b/tests/reload_option_test.cpp similarity index 100% rename from tests/reload_option.cpp rename to tests/reload_option_test.cpp diff --git a/tests/stomach_contents_tests.cpp b/tests/stomach_contents_test.cpp similarity index 100% rename from tests/stomach_contents_tests.cpp rename to tests/stomach_contents_test.cpp diff --git a/tests/value_ptr.cpp b/tests/value_ptr_test.cpp similarity index 100% rename from tests/value_ptr.cpp rename to tests/value_ptr_test.cpp diff --git a/tests/vehicle_drag.cpp b/tests/vehicle_drag_test.cpp similarity index 100% rename from tests/vehicle_drag.cpp rename to tests/vehicle_drag_test.cpp diff --git a/tests/vehicle_efficiency.cpp b/tests/vehicle_efficiency_test.cpp similarity index 100% rename from tests/vehicle_efficiency.cpp rename to tests/vehicle_efficiency_test.cpp diff --git a/tests/vehicle_turrets.cpp b/tests/vehicle_turrets_test.cpp similarity index 100% rename from tests/vehicle_turrets.cpp rename to tests/vehicle_turrets_test.cpp diff --git a/tests/visitable_remove.cpp b/tests/visitable_remove_test.cpp similarity index 100% rename from tests/visitable_remove.cpp rename to tests/visitable_remove_test.cpp diff --git a/tests/visitable.cpp b/tests/visitable_test.cpp similarity index 100% rename from tests/visitable.cpp rename to tests/visitable_test.cpp From e312278b64fcc76272e2ca45d970892026823de7 Mon Sep 17 00:00:00 2001 From: John Bytheway Date: Sat, 11 Jan 2020 11:06:49 -0500 Subject: [PATCH 15/43] Add clang-tidy check for test filenames Enforce the rule that test files should be named *_test.cpp. --- tools/clang-tidy-plugin/CMakeLists.txt | 1 + tools/clang-tidy-plugin/CataTidyModule.cpp | 2 + tools/clang-tidy-plugin/TestFilenameCheck.cpp | 56 +++++++++++++++++++ tools/clang-tidy-plugin/TestFilenameCheck.h | 26 +++++++++ .../clang-tidy-plugin/test/test-filename.cpp | 6 ++ 5 files changed, 91 insertions(+) create mode 100644 tools/clang-tidy-plugin/TestFilenameCheck.cpp create mode 100644 tools/clang-tidy-plugin/TestFilenameCheck.h create mode 100644 tools/clang-tidy-plugin/test/test-filename.cpp diff --git a/tools/clang-tidy-plugin/CMakeLists.txt b/tools/clang-tidy-plugin/CMakeLists.txt index 553ef0ebe015c..a78f9f1d50f6e 100644 --- a/tools/clang-tidy-plugin/CMakeLists.txt +++ b/tools/clang-tidy-plugin/CMakeLists.txt @@ -12,6 +12,7 @@ add_library( PointInitializationCheck.cpp SimplifyPointConstructorsCheck.cpp StringLiteralIterator.cpp + TestFilenameCheck.cpp TextStyleCheck.cpp TranslatorCommentsCheck.cpp UseNamedPointConstantsCheck.cpp diff --git a/tools/clang-tidy-plugin/CataTidyModule.cpp b/tools/clang-tidy-plugin/CataTidyModule.cpp index 47da679700dbe..441c31a4dadb5 100644 --- a/tools/clang-tidy-plugin/CataTidyModule.cpp +++ b/tools/clang-tidy-plugin/CataTidyModule.cpp @@ -7,6 +7,7 @@ #include "NoStaticGettextCheck.h" #include "PointInitializationCheck.h" #include "SimplifyPointConstructorsCheck.h" +#include "TestFilenameCheck.h" #include "TextStyleCheck.h" #include "TranslatorCommentsCheck.h" #include "UseNamedPointConstantsCheck.h" @@ -31,6 +32,7 @@ class CataModule : public ClangTidyModule CheckFactories.registerCheck( "cata-point-initialization" ); CheckFactories.registerCheck( "cata-simplify-point-constructors" ); + CheckFactories.registerCheck( "cata-test-filename" ); CheckFactories.registerCheck( "cata-text-style" ); CheckFactories.registerCheck( "cata-translator-comments" ); CheckFactories.registerCheck( diff --git a/tools/clang-tidy-plugin/TestFilenameCheck.cpp b/tools/clang-tidy-plugin/TestFilenameCheck.cpp new file mode 100644 index 0000000000000..9d1f94dea3c0b --- /dev/null +++ b/tools/clang-tidy-plugin/TestFilenameCheck.cpp @@ -0,0 +1,56 @@ +#include "TestFilenameCheck.h" + +#include +#include +#include +#include + +#include "clang/Frontend/CompilerInstance.h" + +using namespace clang::ast_matchers; + +namespace clang +{ +namespace tidy +{ +namespace cata +{ + +class TestFilenameCallbacks : public PPCallbacks +{ + public: + TestFilenameCallbacks( TestFilenameCheck *Check, CompilerInstance *Compiler ) : + Check( Check ), Compiler( Compiler ) {} + + void MacroExpands( const Token &MacroNameTok, + const MacroDefinition &, + SourceRange Range, + const MacroArgs * ) override { + StringRef MacroName = MacroNameTok.getIdentifierInfo()->getName(); + + if( MacroName == "TEST_CASE" ) { + SourceManager &SM = Compiler->getSourceManager(); + StringRef Filename = SM.getBufferName( Range.getBegin() ); + bool IsTestFilename = Filename.endswith( "_test.cpp" ); + + if( !IsTestFilename ) { + Check->diag( Range.getBegin(), + "Files containing a test definition should have a filename " + "ending in '_test.cpp'." ); + } + } + } + private: + TestFilenameCheck *Check; + CompilerInstance *Compiler; +}; + +void TestFilenameCheck::registerPPCallbacks( CompilerInstance &Compiler ) +{ + Compiler.getPreprocessor().addPPCallbacks( + llvm::make_unique( this, &Compiler ) ); +} + +} // namespace cata +} // namespace tidy +} // namespace clang diff --git a/tools/clang-tidy-plugin/TestFilenameCheck.h b/tools/clang-tidy-plugin/TestFilenameCheck.h new file mode 100644 index 0000000000000..2c6a8832279ea --- /dev/null +++ b/tools/clang-tidy-plugin/TestFilenameCheck.h @@ -0,0 +1,26 @@ +#ifndef CATA_TOOLS_CLANG_TIDY_TESTFILENAMECHECK_H +#define CATA_TOOLS_CLANG_TIDY_TESTFILENAMECHECK_H + +#include "ClangTidy.h" + +namespace clang +{ +namespace tidy +{ +namespace cata +{ + +class TestFilenameCheck : public ClangTidyCheck +{ + public: + TestFilenameCheck( StringRef Name, ClangTidyContext *Context ) + : ClangTidyCheck( Name, Context ) {} + + void registerPPCallbacks( CompilerInstance &Compiler ) override; +}; + +} // namespace cata +} // namespace tidy +} // namespace clang + +#endif // CATA_TOOLS_CLANG_TIDY_TESTFILENAMECHECK_H diff --git a/tools/clang-tidy-plugin/test/test-filename.cpp b/tools/clang-tidy-plugin/test/test-filename.cpp new file mode 100644 index 0000000000000..605583e12d0f8 --- /dev/null +++ b/tools/clang-tidy-plugin/test/test-filename.cpp @@ -0,0 +1,6 @@ +// RUN: %check_clang_tidy %s cata-test-filename %t -- -plugins=%cata_plugin -- -isystem %cata_include + +#define TEST_CASE(name) + +TEST_CASE( "test_name" ) +// CHECK-MESSAGES: warning: Files containing a test definition should have a filename ending in '_test.cpp'. [cata-test-filename] From b9fe93a963de6b9a9a94c3f8b2f0dd38a3b5fb0e Mon Sep 17 00:00:00 2001 From: Qrox Date: Sun, 12 Jan 2020 01:33:52 +0800 Subject: [PATCH 16/43] Disable nutrient override for animal cooking oil --- data/json/items/comestibles/drink_other.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/data/json/items/comestibles/drink_other.json b/data/json/items/comestibles/drink_other.json index f4829595f651b..4c5efb32cfdaa 100644 --- a/data/json/items/comestibles/drink_other.json +++ b/data/json/items/comestibles/drink_other.json @@ -209,7 +209,8 @@ "copy-from": "cooking_oil", "name_plural": "animal cooking oil", "description": "Thin yellow animal oil used for cooking.", - "material": [ "flesh", "oil" ] + "material": [ "flesh", "oil" ], + "flags": [ ] }, { "type": "COMESTIBLE", From ca60e0d7d3bf8a5ec4d13638072bf6390fefb80a Mon Sep 17 00:00:00 2001 From: KuhnChris Date: Sat, 11 Jan 2020 21:37:17 +0100 Subject: [PATCH 17/43] Aikido's description typo Said "tehcnique" instead of "technique" --- data/json/martialarts.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/json/martialarts.json b/data/json/martialarts.json index 52236072d77a2..cd398ecdad76f 100644 --- a/data/json/martialarts.json +++ b/data/json/martialarts.json @@ -23,7 +23,7 @@ "type": "martial_art", "id": "style_aikido", "name": "Aikido", - "description": "Aikido is a Japanese martial art focused on self-defense, while minimizing injury to the attacker. It uses defensive throws and disarms but lacks offensive tehcniques.", + "description": "Aikido is a Japanese martial art focused on self-defense, while minimizing injury to the attacker. It uses defensive throws and disarms but lacks offensive techniques.", "initiate": [ "You enter the hamni stance.", "%s changes into a relaxed combat posture." ], "learn_difficulty": 5, "arm_block": 0, From 6f05d4a173d9965a47f7f0ae241482ded3047939 Mon Sep 17 00:00:00 2001 From: captnblood <59030614+captnblood@users.noreply.github.com> Date: Sat, 11 Jan 2020 22:35:08 +0100 Subject: [PATCH 18/43] retroplus sync update (#36921) --- gfx/RetroDays+Tileset/tile_config.json | 247 +++++++++++++++++++++---- gfx/RetroDays+Tileset/tiles.png | Bin 119585 -> 120831 bytes gfx/RetroDays+Tileset/tiles_20x20.png | Bin 12687 -> 13691 bytes 3 files changed, 209 insertions(+), 38 deletions(-) diff --git a/gfx/RetroDays+Tileset/tile_config.json b/gfx/RetroDays+Tileset/tile_config.json index 4d6e9e315aa9f..9cbee89ebd6d9 100644 --- a/gfx/RetroDays+Tileset/tile_config.json +++ b/gfx/RetroDays+Tileset/tile_config.json @@ -1472,7 +1472,7 @@ { "id": "t_gas_pump_smashed", "fg": 583, "rotates": false }, { "id": "t_slot_machine", "fg": 584, "rotates": false }, { "id": "t_atm", "fg": 585, "rotates": false }, - { "id": [ "t_card_science", "t_card_military" ], "fg": 586, "rotates": false }, + { "id": [ "t_card_science", "t_card_military", "t_card_robofac" ], "fg": 586, "rotates": false }, { "id": "t_card_reader_broken", "fg": 587, "rotates": false }, { "id": [ "t_sliding_concrete_wall_control", "f_aut_gas_console_o", "electronics_controls", "t_console_broken" ], @@ -2248,6 +2248,7 @@ "id": [ "recipe_atomic_battery", "paper", + "scorecard", "sarcophagus_access_code", "flyer", "survnote", @@ -2274,7 +2275,9 @@ "protein_drink", "hflesh_drink", "spider_steak_soup", - "oxygen" + "oxygen", + "oxygen_tank", + "oxygen_cylinder" ], "fg": 883, "rotates": false @@ -2600,6 +2603,10 @@ "seed_cotton_boll", "seed_tomato", "dry_beans", + "dry_lentils", + "lentils_cooked", + "raw_lentils", + "seed_lentils", "beans_cooked", "pelmeni", "seed_carrot", @@ -2626,7 +2633,8 @@ "ravioli", "mre_ravioli", "seed_weed", - "seed_chili_pepper" + "seed_chili_pepper", + "pistachio" ], "fg": 937, "rotates": false @@ -2651,7 +2659,9 @@ "macaroni_raw", "seed_onion", "mre_veggy", - "hickory_nut" + "hickory_nut", + "pistachio_roasted", + "pistachio_unshelled" ], "fg": 939, "rotates": false @@ -3141,8 +3151,8 @@ { "id": [ "styrofoam_cup", "cup_plastic" ], "fg": 1140, "rotates": false }, { "id": "cup_plastic_unsealed", "fg": 1141, "rotates": false }, { "id": "glass", "fg": 1142, "rotates": false }, - { "id": "ceramic_cup", "fg": 1143, "rotates": false }, - { "id": [ "glass_tube_small", "test_tube" ], "fg": 1144, "rotates": false }, + { "id": [ "ceramic_cup", "ceramic_mug" ], "fg": 1143, "rotates": false }, + { "id": [ "glass_tube_small", "test_tube", "test_tube_micro" ], "fg": 1144, "rotates": false }, { "id": [ "rubber_slug", "canister_goo", "bot_fungal_boil", "bot_fungal_boil_egg" ], "fg": 1145, @@ -3271,7 +3281,8 @@ "knife_rm42", "honey_scraper", "bio_blade_weapon", - "kris_fake" + "kris_fake", + "knife_folding" ], "fg": 1193, "rotates": false @@ -3771,7 +3782,7 @@ { "id": "triffid_sap", "fg": 1292, "rotates": false }, { "id": "atomic_light", "fg": 1293, "rotates": false }, { "id": [ "atomic_light_off", "baseball" ], "fg": 1294, "rotates": false }, - { "id": "lens", "fg": 1295, "rotates": false }, + { "id": [ "lens", "lens_small" ], "fg": 1295, "rotates": false }, { "id": [ "pool_ball", "bowling_ball", "pool_ball" ], "fg": 1296, "rotates": false }, { "id": "vp_atomic_light", @@ -3820,7 +3831,7 @@ "glock_drum_100rd", "glock_drum_50rd", "ppshdrum", - "saiga30mag_410", + "saiga410mag_30rd", "8x40_250_mag" ], "fg": 1309 @@ -3835,7 +3846,8 @@ "akmbigmag", "saiga30mag", "ppshmag", - "saiga10mag_410", + "saiga410mag_10rd", + "ruger30", "8x40_25_mag" ], "fg": 1310 @@ -3874,12 +3886,44 @@ "p226mag_15rd_357sig", "af2011a1mag", "m1991_38smag", - "glockbigmag" + "glockbigmag", + "bhp9mag_15rd", + "bhp9mag_13rd", + "bhp40mag", + "hptjhpmag", + "hptjcpmag", + "m1911mag_10rd_38super", + "fn1910mag", + "p320mag_14rd_357sig", + "p320mag_17rd_9x19mm", + "p38mag", + "j22mag", + "cz75mag_12rd", + "cz75mag_20rd", + "cz75mag_26rd", + "wp22mag", + "rugerlcpmag", + "hptc9mag_8rd", + "hptc9mag_10rd", + "hptc9mag_15rd", + "hptcf380mag_8rd", + "hptcf380mag_10rd", + "kp32mag", + "ppq9mag_15rd", + "ppq9mag_10rd", + "ppq40mag_12rd", + "ppq40mag_10rd", + "ppq45mag", + "ppq9mag_17rd", + "ppq40mag_14rd", + "ccpmag", + "kpf9mag", + "kp3atmag" ], "fg": 1317 }, { "id": "hd_battery", "fg": 1318, "rotates": false }, - { "id": "m107a1mag", "fg": 1319 }, + { "id": [ "m107a1mag", "as50mag", "tac50mag" ], "fg": 1319 }, { "id": [ "ruger1022bigmag", "mp5mag" ], "fg": 1320 }, { "id": [ "smg_22_mag", "smg_38_mag", "smg_40_mag", "smg_45_mag", "smg_9mm_mag", "brute_shot_mag", "nailmag" ], @@ -3888,7 +3932,7 @@ { "id": "pressurized_tank", "fg": 1322, "rotates": false }, { "id": "rm4502", "fg": 1323, "rotates": false }, { "id": "rm4504", "fg": 1324, "rotates": false }, - { "id": [ "survivor223mag", "m14smallmag", "blrmag", "m2010mag", "ruger1022mag" ], "fg": 1325 }, + { "id": [ "survivor223mag", "m14smallmag", "blrmag", "m2010mag", "ruger1022mag", "ruger5" ], "fg": 1325 }, { "id": [ "battery_motorbike", "battery_car", "medium_storage_battery", "storage_battery", "small_storage_battery" ], "fg": 1326, @@ -3923,7 +3967,8 @@ "ump45mag", "hk46mag", "hk46bigmag", - "tec9mag" + "tec9mag", + "mac11mag" ], "fg": 1328 }, @@ -4167,7 +4212,9 @@ "af2011a1_38super", "bond_410", "m1991a1_38super", - "raging_judge" + "raging_judge", + "kp3at", + "cz75" ], "fg": 1358, "rotates": false @@ -4262,6 +4309,7 @@ "improve_sights", "red_dot_sight", "holo_sight", + "tele_sight", "rifle_scope", "barrel_ported", "pistol_grip", @@ -4275,6 +4323,8 @@ "pistol_scope", "recoil_stock", "waterproof_gunmod", + "wire_stock", + "stock_mount", "tuned_mechanism", "match_trigger", "bipod", @@ -4645,7 +4695,15 @@ "additional_tiles": [ { "id": "broken", "fg": 155 } ] }, { - "id": [ "smoxygen_tank", "scuba_tank", "scuba_tank_on", "small_scuba_tank", "small_scuba_tank_on", "oxygen_tank" ], + "id": [ + "smoxygen_tank", + "scuba_tank", + "scuba_tank_on", + "small_scuba_tank", + "small_scuba_tank_on", + "oxygen_tank", + "oxygen_cylinder" + ], "fg": 1581, "rotates": false }, @@ -4721,7 +4779,16 @@ { "id": [ "tuba", "trumpet" ], "fg": 1647, "rotates": false }, { "id": "two_way_radio", "fg": 1648, "rotates": false }, { - "id": [ "makeshift_sealer", "battery_ups", "magazine_battery_mod", "stereo", "vac_sealer" ], + "id": [ + "makeshift_sealer", + "battery_ups", + "magazine_battery_mod", + "stereo", + "vac_sealer", + "magazine_battery_light_mod", + "magazine_battery_medium_mod", + "magazine_battery_heavy_mod" + ], "fg": 1649, "rotates": false }, @@ -4828,6 +4895,7 @@ "kittel", "thawb", "coat_lab", + "yukata", "jacket_chef", "beekeeping_suit", "fencing_jacket", @@ -5144,7 +5212,11 @@ "rotates": false }, { "id": "shoes_bowling", "fg": 1856, "rotates": false }, - { "id": [ "sneakers", "dance_shoes", "shoes_birchbark", "dress_shoes" ], "fg": 1857, "rotates": false }, + { + "id": [ "sneakers", "dance_shoes", "shoes_birchbark", "dress_shoes", "roller_shoes_on", "roller_shoes_off" ], + "fg": 1857, + "rotates": false + }, { "id": [ "leather_collar", "locket_lucy", "fur_collar" ], "fg": 1858, "rotates": false }, { "id": [ "glasses_eye", "fitover_sunglasses" ], "fg": 1859, "rotates": false }, { "id": "glasses_reading", "fg": 1860, "rotates": false }, @@ -5161,7 +5233,7 @@ { "id": "glove_jackson", "fg": 1867, "rotates": false }, { "id": "goggles_swim", "fg": 1868, "rotates": false }, { "id": [ "diamond_dental_grill", "gold_dental_grill" ], "fg": 1869, "rotates": false }, - { "id": [ "sf_watch", "gold_watch" ], "fg": 1870, "rotates": false }, + { "id": [ "sf_watch", "gold_watch", "platinum_watch", "silver_watch" ], "fg": 1870, "rotates": false }, { "id": [ "wristwatch", "diving_watch" ], "fg": 1871, "rotates": false }, { "id": [ "bandolier_bomblet", "grenade_pouch" ], "fg": 1872, "rotates": false }, { "id": [ "helmet_netting", "hat_boonie" ], "fg": 1873, "rotates": false }, @@ -5259,7 +5331,11 @@ { "id": "mouthpiece", "fg": 1949, "rotates": false }, { "id": "nanoskirt", "fg": 1950, "rotates": false }, { "id": [ "locket", "holy_symbol_wood", "necklace" ], "fg": 1951, "rotates": false }, - { "id": "pearl_collar", "fg": 1952, "rotates": false }, + { + "id": [ "pearl_collar", "platinum_locket", "platinum_necklace", "silver_locket", "silver_necklace" ], + "fg": 1952, + "rotates": false + }, { "id": [ "small_relic", "holy_symbol" ], "fg": 1953, "rotates": false }, { "id": [ "blindfold", "obi_gi" ], "fg": 1954, "rotates": false }, { "id": "pants_checkered", "fg": 1955, "rotates": false }, @@ -5285,7 +5361,21 @@ "fg": 1973, "rotates": false }, - { "id": [ "diamond_ring", "ring" ], "fg": 1974, "rotates": false }, + { + "id": [ + "diamond_ring", + "ring", + "silver_ring", + "platinum_ring", + "ring_engagement", + "ring_purity", + "ring_signet", + "ring_wedding", + "gold_ring" + ], + "fg": 1974, + "rotates": false + }, { "id": [ "rollerskates", "roller_blades" ], "fg": 1975, "rotates": false }, { "id": [ "molle_pack", "gobag", "rucksack" ], "fg": 1976, "rotates": false }, { "id": [ "chestwrap_leather", "leather" ], "fg": 1977, "rotates": false }, @@ -6224,6 +6314,7 @@ "motor_large", "motor_small", "motor_enhanced", + "motor_tiny", "alternator_bicycle", "alternator_motorbike", "alternator_car", @@ -7065,8 +7156,8 @@ { "id": "mon_hazmatbot", "fg": 2480, "rotates": false }, { "id": "mon_turret", "fg": 2481, "rotates": false }, { "id": "bot_turret", "fg": 2482, "rotates": false }, - { "id": "mon_turret_rifle", "fg": 2483, "rotates": false }, - { "id": "bot_rifleturret", "fg": 2484, "rotates": false }, + { "id": [ "mon_turret_rifle", "mon_crows_m240" ], "fg": 2483, "rotates": false }, + { "id": [ "bot_rifleturret", "bot_crows_m240" ], "fg": 2484, "rotates": false }, { "id": "mon_turret_shockcannon", "fg": 2485, "rotates": false }, { "id": "bot_turret_shockcannon", "fg": 2486, "rotates": false }, { "id": "mon_laserturret", "fg": 2487, "rotates": false }, @@ -7798,7 +7889,86 @@ { "id": "wood_sheet", "fg": 3037, "rotates": false }, { "id": "wood_panel", "fg": 3038, "rotates": false }, { "id": "condom", "fg": 3039, "rotates": false }, - { "id": "zombie_revival_indicator", "fg": 3040 } + { "id": "zombie_revival_indicator", "fg": 3040 }, + { "id": "t_wood_stairs_up", "fg": 3041, "rotates": false }, + { "id": "t_wood_stairs_down", "fg": 3042, "rotates": false }, + { "id": "t_wood_stairs_up_broken", "fg": 3043, "rotates": false }, + { "id": "t_wood_stairs_up_half", "fg": 3044, "rotates": false }, + { + "id": [ + "9mm_speedloader7", + "8x40_speedloader5", + "500_speedloader5", + "460_speedloader6", + "44_speedloader6", + "40_speedloader6", + "223_speedloader5", + "22_speedloader8", + "454_speedloader5", + "38_speedloader5", + "38_speedloader", + "shot_speedloader8", + "shot_speedloader6" + ], + "fg": 3045, + "rotates": false + }, + { "id": "plastic_sheet", "fg": 3046, "rotates": false }, + { "id": "magic_8_ball", "fg": 3047, "rotates": false }, + { "id": [ "welding_mask", "welding_mask_raised" ], "fg": 3048, "rotates": false }, + { "id": [ "welding_mask_crude", "welding_mask_crude_raised" ], "fg": 3049, "rotates": false }, + { "id": "juniper", "fg": 3050, "rotates": false }, + { "id": "t_ticket_vendor", "fg": 3051, "rotates": false }, + { "id": "t_ticket_machine", "fg": 3052, "rotates": false }, + { "id": "t_gate_metal_c", "fg": 3053, "rotates": false }, + { "id": "t_gate_metal_o", "fg": 3054, "rotates": false }, + { "id": [ "reference_cooking", "reference_fabrication1" ], "fg": 3055, "rotates": false }, + { "id": "coin_quarter", "fg": 3056, "rotates": false }, + { "id": "f_speaker_cabinet", "fg": 3057, "rotates": false }, + { "id": "amplifier_head", "fg": 3058, "rotates": false }, + { "id": "mon_talon_m202a1", "fg": 3059, "rotates": false }, + { "id": [ "bot_talon_m202a1", "broken_talon_m202a1" ], "fg": 3060, "rotates": false }, + { "id": "box_large", "fg": 3061, "rotates": false }, + { "id": "f_counter_gate_c", "fg": 3062, "rotates": false }, + { "id": "f_counter_gate_o", "fg": 3063, "rotates": false }, + { "id": "f_street_light", "fg": 3064, "rotates": false }, + { "id": "f_traffic_light", "fg": 3065, "rotates": false }, + { "id": "hand_crank_charger", "fg": 3066, "rotates": false }, + { "id": [ "metal_file", "pin_reamer" ], "fg": 3067, "rotates": false }, + { "id": "hand_vice", "fg": 3068, "rotates": false }, + { "id": "bathroom_scale", "fg": 3069, "rotates": false }, + { "id": "t_intercom", "fg": 3070, "rotates": false }, + { "id": "mon_skeleton_electric", "fg": 3071, "rotates": false }, + { "id": "family_photo", "fg": 3072, "rotates": false }, + { "id": [ "bot_secubot", "broken_secubot" ], "fg": 3073, "rotates": false }, + { "id": [ "mon_nursebot", "mon_nursebot_defective" ], "fg": 3074, "rotates": false }, + { "id": [ "bot_nursebot", "broken_nursebot", "broken_nursebot_defective" ], "fg": 3075, "rotates": false }, + { "id": [ "mon_hound_tindalos", "mon_hound_tindalos_afterimage" ], "fg": 3076 }, + { + "id": [ "fd_tindalos_gas" ], + "fg": 3077, + "rotates": false, + "multitile": true, + "additional_tiles": [ + { "id": "center", "fg": 3078 }, + { "id": "corner", "fg": 3079 }, + { "id": "edge", "fg": 3080 }, + { "id": "end_piece", "fg": 3081 }, + { "id": "t_connection", "fg": 3082 }, + { "id": "unconnected", "fg": 3077 } + ] + }, + { "id": "fd_tindalos_rift", "fg": 3083, "rotates": false }, + { "id": [ "voltmeter", "balance_small", "melting_point", "spectrophotometer", "ph_meter", "vortex" ], "fg": 3084, "rotates": false }, + { "id": "beaker", "fg": 3085, "rotates": false }, + { "id": "gelbox", "fg": 3086, "rotates": false }, + { "id": [ "survival_kit", "survival_kit_box", "cuvettes" ], "fg": 3087, "rotates": false }, + { "id": [ "microscope", "microscope_dissecting" ], "fg": 3088, "rotates": false }, + { "id": "f_rack_wood", "fg": 3089, "rotates": false }, + { "id": "mon_zombie_gasbag_crawler", "fg": 3090, "rotates": false }, + { "id": "mon_zombie_gasbag_immobile", "fg": 3091, "rotates": false }, + { "id": "mon_zombie_gasbag_impaler", "fg": 3092, "rotates": false }, + { "id": "mon_zombie_living_wall", "fg": 3093, "rotates": false } ] }, { @@ -7808,20 +7978,21 @@ "sprite_offset_x": -5, "sprite_offset_y": -10, "tiles": [ - { "id": "mon_dragon_dummy", "fg": 3056, "rotates": false }, - { "id": "mon_tyrannosaurus", "fg": 3057, "rotates": false }, - { "id": "mon_triceratops", "fg": 3058, "rotates": false }, - { "id": "mon_fungaloid_queen", "fg": 3059 }, - { "id": "mon_fungaloid_seeder", "fg": 3060 }, - { "id": "mon_fungaloid_tower", "fg": 3061 }, - { "id": "mon_skeleton_hulk", "fg": 3062, "rotates": false }, - { "id": "mon_zombie_kevlar_2", "fg": 3063, "rotates": false }, - { "id": "mon_zombie_hulk_pk", "fg": 3064, "rotates": false }, - { "id": "mon_zombie_hulk", "fg": 3064, "rotates": false }, - { "id": "overlay_mutation_THRESH_URSINE", "fg": 3065 }, - { "id": "overlay_mutation_THRESH_CATTLE", "fg": 3066 }, - { "id": "overlay_male_mutation_THRESH_CATTLE", "fg": 3067 }, - { "id": "overlay_mutation_THRESH_LIZARD", "fg": 3068 } + { "id": "mon_dragon_dummy", "fg": 3136, "rotates": false }, + { "id": "mon_tyrannosaurus", "fg": 3137, "rotates": false }, + { "id": "mon_triceratops", "fg": 3138, "rotates": false }, + { "id": "mon_fungaloid_queen", "fg": 3139 }, + { "id": "mon_fungaloid_seeder", "fg": 3140 }, + { "id": "mon_fungaloid_tower", "fg": 3141 }, + { "id": "mon_skeleton_hulk", "fg": 3142, "rotates": false }, + { "id": "mon_zombie_kevlar_2", "fg": 3143, "rotates": false }, + { "id": "mon_zombie_hulk_pk", "fg": 3144, "rotates": false }, + { "id": "mon_zombie_hulk", "fg": 3144, "rotates": false }, + { "id": "overlay_mutation_THRESH_URSINE", "fg": 3145 }, + { "id": "overlay_mutation_THRESH_CATTLE", "fg": 3146 }, + { "id": "overlay_male_mutation_THRESH_CATTLE", "fg": 3147 }, + { "id": "overlay_mutation_THRESH_LIZARD", "fg": 3148 }, + { "id": "mon_zombie_crushed_giant", "fg": 3149 } ] }, { diff --git a/gfx/RetroDays+Tileset/tiles.png b/gfx/RetroDays+Tileset/tiles.png index 8014df7f307d7e68f77ac98f21499ec17b70e54d..2babf8b3951cc1bf8ca7a8099eabc1292766337b 100644 GIT binary patch literal 120831 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�{1LWN(V|1`Igjsnoy`iZ;u+jwY0co* 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

-etGP&5aTr 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 literal 119585 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

+_(J|G1eOp@j`*m9yI9PEoq(BG{d3OJh%zHY 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

BntBs?H2Qz1s!=&zoDUhJc9S) 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 IM6N<$g2x`LGXMYp diff --git a/gfx/RetroDays+Tileset/tiles_20x20.png b/gfx/RetroDays+Tileset/tiles_20x20.png index 20d4596f967aeee8a51d8c03bcefc47f3bb23586..6047c99073cf229df45969e84aa05dbc6b6bcbd2 100644 GIT binary patch delta 9495 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 delta 8677 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 Date: Sun, 12 Jan 2020 00:41:57 +0300 Subject: [PATCH 19/43] Adding ru translation notes (#36868) --- lang/notes/ru.txt | 69 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 lang/notes/ru.txt diff --git a/lang/notes/ru.txt b/lang/notes/ru.txt new file mode 100644 index 0000000000000..8e42859c169cc --- /dev/null +++ b/lang/notes/ru.txt @@ -0,0 +1,69 @@ + +This file contains notes/discussion regarding translation for Russian, written in Russian. + +--------------------------------------------------------------------------------------------------- + +Специфика: +--------------------------------------------------------------------------------------------------- +Старайтесь избавляться от англицизмов. Например, "Вы вытащили руки из своих карманов" следует заменить на "Вы вытащили руки из карманов". + +После перевода перечитайте свой текст. Если по-русски он звучит странно, это повод его несколько подредактировать с сохранением изначального смысла. + +Замена слов на уменьшительно-ласкательные приветствуется, если они подходят по смыслу. Замена слов на русский сленг или придание словам большей экспрессии тоже приветствуется, если это соответствует контексту. Импровизация в рамках контекста и смысла допустима, если конечный текст выглядит лучше, чем дословный перевод. + +После многоточия, по правилам русского языка, следующее предложение начинается с большой буквы. + +Прямую речь следует писать по русским правилам, если она встречается в переводе. + +Иногда перед началом или в конце фразы стоят пробелы. Их очень плохо видно в редакторе Transifex, имейте это в виду. Особенно часто это бывает, если фраза не окончена или по смыслу имеет продолжение. Чтобы лучше видеть такие пробелы, можно зайти в настройки редактора и включить пункт "Показать пробелы". + +Также не стоит забывать про букву Ё. + +Формы множественного числа +--------------------------------------------------------------------------------------------------- +В редакторе Transifex некоторые названия предметов требуется переводить для всех форм единственного и множественного числа. В игре, в зависимости от того, сколько у вас предметов, будет отображаться название предмета в нужной форме. + +1 — единственное число (например: яблоко) +Несколько — нужно подобрать окончание так, чтобы оно соответствовало кол-ву 2-4 предмета (например: яблока) +Много — нужно подобрать окончание так, чтобы оно соответствовало кол-ву 5-бесконечность предметов (например: яблок) +Другое — простая форма множественного числа (например: яблоки) + +В разделе "Несколько", при переводе прилагательных женского рода следует отдавать предпочтение варианту: две "стиральные машины", а не две "стиральных машины". + +Что касается книг и журналов. Слово копия и выпуск можно опустить. Как правило, если книги/журналы имеют множественное число, стоит переводить так: +1: книга «Война миров» +Несколько (например, две): книги «Война миров» +Много (например, сто): книг «Война миров» +Другое: книги «Война миров» + +1: журнал «Плейбой» +Несколько (например, два): журнала «Плейбой» +Много (например, сто): журналов «Плейбой» +Другое: журналы «Плейбой» + +Иногда встречаются такие слова, которые не стоит писать в единственном или во множественном числе, например, "фисташки", "арахис" и т.д. Их надо оставлять в той форме, которая больше подходит по смыслу. + +Спецсимволы: +--------------------------------------------------------------------------------------------------- + +Спецсимволы печатаются комбинацией клавиш. Для различных операционных систем эти комбинации разные. Для ОС Windows спецсимволы набираются на цифровой клавиатуре с помощью зажатой клавиши alt. Для ОС Linux существуют комбинации с кнопкой Compose. Для Mac ОС применяется комбинации с клавишей Option. +Некоторые символы имеют свою специфику в русском языке, отличную от английского. Нужно использовать русскую интерпретацию, если это возможно. + +Стоит различать тире и дефис. Дефис ставится внутри слова, короткий, без пробелов (например: что-то, чёрно-белый и т.п.). Тире — пунктуационный знак, ставится между словами, длиннее, отделяется пробелами с обеих сторон. +Дефис: - (минус) +Тире: — WIN:(alt + 0151) LIN:(Сompose + - + --) MAC:(Option + Shift + -) + +Кавычки следует использовать ёлочки. +Открывающая кавычка: « WIN:(alt + 0171) LIN:(Сompose + < + <) MAC:(Option + \) +Закрывающая кавычка: » WIN:(alt + 0187) LIN:(Сompose + > + >) MAC:(Option + Shift + \) + +Иногда, в тексте оригинала встречаются спецсимволы "%s", "%2$d", "\n", а также цветовые теги с цифрами 1 и 2. Оставляете их как есть, подставляя по смыслу в нужное место. Стоит ставить пробелы перед и после спецсимволов, если они есть в оригинале. +\n — перенос строки (эквивалентно клавише enter в текстовом редакторе) +%2$d или %d — вместо этих символов в игре будет отображаться числовое значение +%2$s или %s — вместо этих символов в игре будет отображаться какая-либо другая строка + +Поскольку шрифт в игре моноширинный, а у некоторых еще и квадратный, стоит соблюдать следующую специфику. +Не стоит использовать три точки вместо многоточия, в игре это очень плохо выглядит. Есть свой спецсимвол. +Многоточие: … WIN:(alt + 0133) LIN:(Сompose + . + .) MAC:(Option + ;) + +Также, в английском языке для текста игры принято правило разделять предложения двумя пробелами. В русском языке такого правила нет, поэтому после точки в конце предложения должен оставаться один пробел. From 8715a042eab0996ddd3f893fb9f06df7608edcdb Mon Sep 17 00:00:00 2001 From: KorGgenT Date: Sat, 11 Jan 2020 17:36:29 -0500 Subject: [PATCH 20/43] magiclysm - fix hand impeding spell costs --- src/magic.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/magic.cpp b/src/magic.cpp index c0fe5b02a1eec..cfc21ffb1d0bb 100644 --- a/src/magic.cpp +++ b/src/magic.cpp @@ -603,7 +603,17 @@ int spell::energy_cost( const player &p ) const if( !has_flag( spell_flag::NO_HANDS ) ) { // the first 10 points of combined encumbrance is ignored, but quickly adds up const int hands_encumb = std::max( 0, p.encumb( bp_hand_l ) + p.encumb( bp_hand_r ) - 10 ); - cost += 10 * hands_encumb; + switch( type->energy_source ) { + default: + cost += 10 * hands_encumb; + break; + case hp_energy: + cost += hands_encumb; + break; + case stamina_energy: + cost += 100 * hands_encumb; + break; + } } return cost; } From c8cc21380d02285ea100ff059acc229c26d791d2 Mon Sep 17 00:00:00 2001 From: curstwist <39442864+curstwist@users.noreply.github.com> Date: Sat, 11 Jan 2020 17:52:25 -0500 Subject: [PATCH 21/43] update 5 additional houses (#36933) * udpate 5 additional houses * fix garage8 --- data/json/mapgen/house/house_garage3.json | 29 +-- data/json/mapgen/house/house_garage4.json | 166 ++++++-------- data/json/mapgen/house/house_garage5.json | 167 ++++++-------- data/json/mapgen/house/house_garage6.json | 212 ++++++++---------- data/json/mapgen/house/house_garage7.json | 188 +++++++--------- data/json/mapgen/house/house_garage8.json | 192 +++++++--------- .../house_general_palette.json | 9 +- data/json/mapgen_palettes/roof_palette.json | 1 + .../overmap/multitile_city_buildings.json | 50 +++++ .../overmap_terrain_residential.json | 85 +++++++ data/json/regional_map_settings.json | 5 + 11 files changed, 562 insertions(+), 542 deletions(-) diff --git a/data/json/mapgen/house/house_garage3.json b/data/json/mapgen/house/house_garage3.json index 932b26f7db8d8..ca940e87ba1f8 100644 --- a/data/json/mapgen/house/house_garage3.json +++ b/data/json/mapgen/house/house_garage3.json @@ -3,7 +3,7 @@ "type": "mapgen", "method": "json", "om_terrain": [ "house_garage3" ], - "weight": 300, + "weight": 200, "object": { "fill_ter": "t_floor", "rows": [ @@ -16,21 +16,21 @@ "..............```````.%.", "..[.......[...```````.%.", "..............```````.%.", - ".....[........```````.%.", - "..............```````.%.", - ".^!!!!.%..%...```````.%.", + ".....[..`````````````.%.", + "........``!!!!```````.%.", + ".^!!!!.%``%%%%```````.%.", ".######o**o#####*######.", ".#B S|L T|Y 66F7#.", ".oB t| | hfh Oo.", ".oy | + hfh 5o.", ".#Q88 + |A 4321#.", - ".######R ||||||+||||#.", - ".$~~~~#R | D n#.", - ".$~~~G#k T| + @@#.", - ".$~~~K#R llE|+|I @@#.", - ".$~~~~* HHHs|>|Ih d#^", - ".&$$$$##oo#######oo####.", - "........................" + "!######R ||||||+||||#.", + "!$~~~~#R | D s#.", + "`$~~~G#k T| + @@#.", + "`]~~~K#R llE|+|I @@#.", + "`$~~~~* HHHs|>|Ih d#^", + "!$$$$$##oo#######oo####.", + "!!!!!!!................." ], "palettes": [ "standard_domestic_palette" ], "terrain": { @@ -42,7 +42,8 @@ "K": "t_thconc_floor", "~": "t_thconc_floor", "`": "t_concrete", - "$": "t_fence" + "$": "t_screened_porch_wall", + "]": "t_screen_door_c" }, "furniture": { "!": "f_region_flower" }, "place_loot": [ @@ -76,10 +77,10 @@ " |....................3 ", " |....................3 ", " |....................3 ", - " |..............=.....3 ", " |....................3 ", " |....................3 ", - " |.....~........&.....3 ", + " |....................3 ", + " |.....~..............3 ", " |....................3 ", " |....................5 ", " |--------------------3 ", diff --git a/data/json/mapgen/house/house_garage4.json b/data/json/mapgen/house/house_garage4.json index 258306f4edd58..72e5964c7d708 100644 --- a/data/json/mapgen/house/house_garage4.json +++ b/data/json/mapgen/house/house_garage4.json @@ -2,108 +2,88 @@ { "type": "mapgen", "method": "json", - "om_terrain": [ "house" ], - "weight": 300, + "om_terrain": [ "house_garage4" ], + "weight": 200, "object": { "fill_ter": "t_floor", "rows": [ - ".#.P.sssss#..#sssss...#.", - ".#...sssss#..#sssss...#.", - ".#...sssss#..#sssss...#.", - ".#...sssss#..#sssss...#.", - ".#...sssss#..#sssss...#.", - ".#...sssss####sssss...#.", - ".#...ssssssssssssss...#.", - ".#...ssssssssssssss...#.", - ".#...ssssssssssssss...#.", - ".#...ssssssssssssss...#.", - ".#...ssssssssssssss...#.", - ".#...#####.ss.#####...#.", - ".|--------v;;v--------|.", - ".|B S|l Y|n f|.", - ".|B t| nnnnn |n Ov.", - ".| | nnnnn | cv.", - ".| + + c|.", - ".-----|---+------+----|.", - ".w.. |o + h|.", - ".w.. h|o h| @@|.", - ".w.. h| ?| @@|.", - ".w.. ; h???| d|.", - ".Iwwww--vv-------vv----.", + ".%.[p`````%!!%`````.[.%.", + ".%...`````%!!%`````...%.", + ".%.[.`````%!!%`````.[.%.", + ".%...`````%!!%`````...%.", + ".%.[.`````%!!%`````.[.%.", + ".%...`````%%%%`````...%.", + ".%.[.``````````````.[.%.", + ".%...``````````````...%.", + ".%.[.``````````````.[.%.", + ".%...``````````````...%.", + ".%.[.``````````````.[.%.", + ".%...%%%%%.``.%%%%%...%.", + ".#########o**o#########.", + ".#B y|T AJ 74F#.", + ".#B t| hfh AJ Oo.", + ".# + hfh AJ 5o.", + "^#8S8Y| 6321#.", + ".######|||+||||||+||||#.", + ".$ #RRR + s#.", + "`$ G#R T|>|s @@#^", + "`] G#y H|||E @@#.", + "`$ * sHHH|D+ d#.", + ".$$$$$##oo#######oo####.", "........................" ], - "set": [ - { "point": "terrain", "id": "t_dirt", "x": [ 0, 0 ], "y": [ 0, 23 ], "repeat": [ 5, 10 ] }, - { "point": "terrain", "id": "t_dirt", "x": [ 23, 23 ], "y": [ 0, 23 ], "repeat": [ 5, 10 ] }, - { "point": "terrain", "id": "t_dirt", "x": [ 0, 23 ], "y": [ 23, 23 ], "repeat": [ 5, 8 ] }, - { "point": "terrain", "id": "t_door_locked_interior", "x": [ 6, 6 ], "y": [ 21, 21 ], "repeat": [ 0, 1 ] }, - { "point": "terrain", "id": "t_door_c", "x": [ 11, 12 ], "y": [ 12, 12 ], "repeat": [ 0, 1 ] } - ], + "palettes": [ "standard_domestic_palette" ], "terrain": { - "#": "t_shrub", - "+": "t_door_c", - "-": "t_wall", - ".": "t_grass", - "P": "t_grass", - ";": "t_door_locked", - "?": "t_floor", - "@": "t_floor", - "B": "t_floor", - "I": "t_column", - "O": "t_floor", - "S": "t_floor", - "c": "t_floor", - "d": "t_floor", - "f": "t_floor", - "l": "t_floor", - "Y": "t_floor", - "h": "t_floor", - "n": "t_floor", - "o": "t_floor", - "s": "t_sidewalk", - "v": "t_window_domestic", - "w": "t_window", - "|": "t_wall" - }, - "furniture": { - "?": "f_sofa", - "@": "f_bed", - "B": "f_bathtub", - "P": "f_mailbox", - "Y": "f_rack_coat", - "l": "f_stool", - "O": "f_oven", - "S": "f_sink", - "c": "f_counter", - "d": "f_dresser", - "f": "f_fridge", - "h": "f_chair", - "n": "f_table", - "o": "f_bookcase" - }, - "toilets": { "t": { } }, - "items": { - "Y": { "item": "coat_rack", "chance": 35, "repeat": [ 1, 4 ] }, - "P": { "item": "mail", "chance": 30, "repeat": [ 2, 5 ] } + "%": [ "t_region_shrub", "t_region_shrub_fruit", "t_region_shrub_decorative" ], + "[": [ [ "t_region_tree_fruit", 2 ], [ "t_region_tree_nut", 2 ], "t_region_tree_shade" ], + "!": "t_region_groundcover_urban", + "&": "t_column", + "K": "t_thconc_floor", + "~": "t_thconc_floor", + "`": "t_concrete", + "$": "t_screened_porch_wall", + "]": "t_screen_door_c" }, - "place_loot": [ - { "group": "bed", "x": [ 20, 21 ], "y": [ 19, 20 ], "chance": 90, "repeat": [ 1, 3 ] }, - { "group": "bedroom", "x": [ 15, 21 ], "y": [ 18, 21 ], "chance": 80, "repeat": [ 1, 4 ] }, - { "group": "livingroom", "x": [ 7, 13 ], "y": [ 18, 21 ], "chance": 90, "repeat": [ 1, 5 ] }, - { "group": "guns_pistol_common", "x": [ 21, 21 ], "y": [ 21, 21 ], "chance": 5, "ammo": 90, "magazine": 100 }, - { "group": "homebooks", "x": [ 7, 7 ], "y": [ 17, 18 ], "chance": 75, "repeat": [ 1, 2 ] }, - { "group": "dresser", "x": [ 21, 21 ], "y": [ 21, 21 ], "chance": 85, "repeat": [ 1, 4 ] }, - { "group": "kitchen", "x": [ 15, 21 ], "y": [ 16, 13 ], "chance": 70, "repeat": [ 1, 3 ] }, - { "group": "fridge", "x": [ 21, 21 ], "y": [ 13, 13 ], "chance": 90, "repeat": [ 1, 5 ] }, - { "group": "produce", "x": [ 21, 21 ], "y": [ 13, 13 ], "chance": 50, "repeat": [ 1, 2 ] }, - { "group": "kitchen", "x": [ 21, 21 ], "y": [ 15, 16 ], "chance": 85, "repeat": [ 1, 2 ] }, - { "group": "alcohol", "x": [ 21, 21 ], "y": [ 15, 16 ], "chance": 60, "repeat": [ 1, 2 ] }, - { "group": "oven", "x": [ 21, 21 ], "y": [ 14, 14 ], "chance": 75, "repeat": [ 1, 3 ] }, - { "group": "softdrugs", "x": [ 2, 4 ], "y": [ 13, 16 ], "chance": 75, "repeat": [ 1, 3 ] }, - { "group": "cleaning", "x": [ 2, 4 ], "y": [ 13, 16 ], "chance": 90, "repeat": [ 1, 2 ] } - ], + "furniture": { "!": "f_region_flower" }, + "place_loot": [ { "group": "guns_pistol_common", "x": [ 21, 21 ], "y": [ 21, 21 ], "chance": 5, "ammo": 90, "magazine": 100 } ], "place_monsters": [ { "monster": "GROUP_ZOMBIE", "x": [ 2, 21 ], "y": [ 2, 21 ], "chance": 2 } ], "place_vehicles": [ { "vehicle": "suburban_home", "x": 11, "y": 8, "chance": 10, "rotation": 0 } ] } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": "house_garage4_roof", + "object": { + "fill_ter": "t_shingle_flat_roof", + "rows": [ + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " |222222222222222222223 ", + " |....................3 ", + " |....................3 ", + " |.................&..3 ", + " 5....................3 ", + " |.=..................3 ", + " |....................3 ", + " |....................5 ", + " |.............N......3 ", + " |....................3 ", + " |--------------------3 ", + " " + ], + "palettes": [ "roof_palette" ], + "terrain": { ".": "t_shingle_flat_roof" } + } } ] diff --git a/data/json/mapgen/house/house_garage5.json b/data/json/mapgen/house/house_garage5.json index d5e836b7bacdd..d6b045ceb14e2 100644 --- a/data/json/mapgen/house/house_garage5.json +++ b/data/json/mapgen/house/house_garage5.json @@ -2,110 +2,85 @@ { "type": "mapgen", "method": "json", - "om_terrain": [ "house" ], - "weight": 300, + "om_terrain": [ "house_garage5" ], + "weight": 200, "object": { "fill_ter": "t_floor", "rows": [ - "..sssssss...............", - ".Psssssss--;;----------.", - "..sssssss|o | t|.", - "..sssssss|o | |.", - "..sssssss|o + v.", - "..sssssss|o |S BB|.", - "..sssssss|o | BB|.", - "..sssssss|Y |-------|.", - "..sssssss| + nn c|.", - "..sssssss; | nn Sv.", - "..#######| | Ov.", - ".|-vvvvv-- |l f|.", - ".|???cc |---+---|.", - ".v? nv.", - ".v nv.", - ".|ooo K K nv.", - ".|k h ------+----|.", - ".|kk | kk|.", - ".|-----;---|@@ h k|.", - "..#####.###|@@ |.", - "...........| |.", - "...........| d|.", - "...........------vv----.", - "........................" - ], - "set": [ - { "point": "terrain", "id": "t_dirt", "x": [ 0, 0 ], "y": [ 0, 23 ], "repeat": [ 5, 10 ] }, - { "point": "terrain", "id": "t_dirt", "x": [ 23, 23 ], "y": [ 0, 23 ], "repeat": [ 5, 10 ] }, - { "point": "terrain", "id": "t_dirt", "x": [ 0, 23 ], "y": [ 23, 23 ], "repeat": [ 5, 8 ] }, - { "point": "terrain", "id": "t_dirt", "x": [ 1, 10 ], "y": [ 19, 21 ], "repeat": [ 2, 8 ] } + "..```````...............", + ".p```````##**##########.", + "..```````#R |BB t#.", + "..```````#R + #.", + "..```````#R |88Sy yo.", + "..```````#R ||||||+|#.", + "..```````#R +>U|vQQQ#.", + "`````````#Y ||||||||#.", + "`!```````# |6664321#.", + "`!```````* | 5o.", + "`[%%%%%%%# AJ A Oo.", + "`##ooooo## AJ 7F#.", + "`#HHHsy AJJJ Y||#^", + "`oH hfh hro.", + "`oTE hfh ||||||||#.", + "`#RRR hfh |D d#.", + "`#r h + @@ hIo.", + "`#rr | s@@s I#.", + "`######*#### ||||||||#.", + "`.$ G# |Db s#.", + "``] GKG o + @@#.", + "..$ G#Ly|TE d#.", + "..$$$$$$$$$######oo####.", + ".............^.........." ], + "palettes": [ "standard_domestic_palette" ], "terrain": { - "#": "t_shrub", - "+": "t_door_c", - "-": "t_wall", - ".": "t_grass", - "P": "t_grass", - ";": "t_door_locked", - "?": "t_floor", - "@": "t_floor", - "B": "t_floor", - "K": "t_floor", - "l": "t_floor", - "Y": "t_floor", - "O": "t_floor", - "S": "t_floor", - "c": "t_floor", - "d": "t_floor", - "f": "t_floor", - "h": "t_floor", - "k": "t_floor", - "n": "t_floor", - "o": "t_floor", - "s": "t_sidewalk", - "v": "t_window_domestic", - "|": "t_wall" - }, - "furniture": { - "?": "f_sofa", - "@": "f_bed", - "B": "f_bathtub", - "K": "f_armchair", - "O": "f_oven", - "S": "f_sink", - "l": "f_stool", - "Y": "f_rack_coat", - "P": "f_mailbox", - "c": "f_counter", - "d": "f_dresser", - "f": "f_fridge", - "h": "f_chair", - "k": "f_desk", - "n": "f_table", - "o": "f_bookcase" - }, - "toilets": { "t": { } }, - "items": { - "Y": { "item": "coat_rack", "chance": 35, "repeat": [ 1, 4 ] }, - "P": { "item": "mail", "chance": 30, "repeat": [ 2, 5 ] } + "%": [ "t_region_shrub", "t_region_shrub_fruit", "t_region_shrub_decorative" ], + "[": [ [ "t_region_tree_fruit", 2 ], [ "t_region_tree_nut", 2 ], "t_region_tree_shade" ], + "!": "t_region_groundcover_urban", + "`": "t_concrete", + "#": "t_adobe_brick_wall", + "$": "t_screened_porch_wall", + "]": "t_screen_door_c" }, - "place_loot": [ - { "group": "bed", "x": [ 12, 13 ], "y": [ 18, 19 ], "chance": 90, "repeat": [ 1, 3 ] }, - { "group": "homebooks", "x": [ 5, 6 ], "y": [ 12, 12 ], "chance": 45, "repeat": [ 1, 2 ] }, - { "group": "bedroom", "x": [ 12, 21 ], "y": [ 17, 21 ], "chance": 80, "repeat": [ 1, 4 ] }, - { "group": "homebooks", "x": [ 2, 4 ], "y": [ 15, 15 ], "chance": 70, "repeat": [ 1, 2 ] }, - { "group": "livingroom", "x": [ 1, 10 ], "y": [ 12, 17 ], "chance": 90, "repeat": [ 1, 5 ] }, - { "group": "office", "x": [ 2, 5 ], "y": [ 12, 17 ], "chance": 75, "repeat": [ 1, 3 ] }, - { "group": "dresser", "x": [ 21, 21 ], "y": [ 21, 21 ], "chance": 85, "repeat": [ 1, 4 ] }, - { "group": "novels", "x": [ 10, 10 ], "y": [ 2, 6 ], "chance": 90, "repeat": [ 1, 4 ] }, - { "group": "cleaning", "x": [ 16, 20 ], "y": [ 2, 6 ], "chance": 90, "repeat": [ 1, 2 ] }, - { "group": "softdrugs", "x": [ 16, 20 ], "y": [ 2, 6 ], "chance": 75, "repeat": [ 1, 3 ] }, - { "group": "kitchen", "x": [ 15, 21 ], "y": [ 9, 11 ], "chance": 70, "repeat": [ 1, 3 ] }, - { "group": "fridge", "x": [ 21, 21 ], "y": [ 11, 11 ], "chance": 90, "repeat": [ 1, 5 ] }, - { "group": "oven", "x": [ 21, 21 ], "y": [ 10, 10 ], "chance": 75, "repeat": [ 1, 3 ] }, - { "group": "kitchen", "x": [ 21, 21 ], "y": [ 9, 9 ], "chance": 85, "repeat": [ 1, 2 ] }, - { "group": "livingroom", "x": [ 15, 21 ], "y": [ 13, 15 ], "chance": 80, "repeat": [ 1, 4 ] } - ], + "furniture": { "!": "f_region_flower" }, "place_monsters": [ { "monster": "GROUP_ZOMBIE", "x": [ 2, 21 ], "y": [ 2, 21 ], "chance": 2 } ], "place_vehicles": [ { "vehicle": "suburban_home", "x": 5, "y": 5, "chance": 10, "rotation": 270 } ] } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": "house_garage5_roof", + "object": { + "fill_ter": "t_shingle_flat_roof", + "rows": [ + " ", + " |2222222222223 ", + " |............3 ", + " |............3 ", + " |............3 ", + " |............3 ", + " |.....=......3 ", + " |............3 ", + " |............3 ", + " |............3 ", + " |2222222|............3 ", + " |....................3 ", + " |....................5 ", + " |....N...............3 ", + " |....................3 ", + " |....................3 ", + " |....................3 ", + " |............&.......3 ", + " ||...................3 ", + " |...................3 ", + " |...................3 ", + " |...................3 ", + " |----------5--------3 ", + " " + ], + "palettes": [ "roof_palette" ], + "terrain": { ".": "t_shingle_flat_roof" } + } } ] diff --git a/data/json/mapgen/house/house_garage6.json b/data/json/mapgen/house/house_garage6.json index ef433144a3ad1..eb1c688f3ac32 100644 --- a/data/json/mapgen/house/house_garage6.json +++ b/data/json/mapgen/house/house_garage6.json @@ -2,139 +2,77 @@ { "type": "mapgen", "method": "json", - "om_terrain": [ "house" ], - "weight": 100, + "om_terrain": [ "house_garage6" ], + "weight": 200, "//": "two bedroom one bath single garage home.", "object": { "fill_ter": "t_floor", "rows": [ - "..........sss.ssssss....", - "...i####iw.s.Mssssss#...", - "..--vvvv--#s#-======--..", - "..|p((((p|Q9Q| e|..", - "..|((HH((|gsg| |..", - ".#v((NN((v#s#v |#.", - ".#v((HH((v#s#v ;s.", - "..|((((((|/s/| c|D.", - "..|-<<(((|/s/| c|..", - "..|f(((((v#s#v cv#.", - ".g|O((<((v#s#v cv#.", - ".#vS((<((|isi|L WYccc|..", - ".g|C(((((|#s#--+------..", - "..|-<<<((|V;V|o P|S|t|/.", - ".i|P +(((v#.", - ".s; k|-+-|BB(|/.", - ".i| k?? ----| ---+|..", - ".#v ? | do| h |..", - ".#v ? n + |kk @@v#.", - "..| |h --- @@v#.", - "..|P P|k @@|d o|..", - "..--V[[V---v-v----v---..", - "...ssssss.g#.#g...#.....", - "....ssss................" + "..........```.``````````", + "...!!%%%!p.`.M``````%!!`", + "..##oooo##%`%#======##!`", + "..#,____,#$?$#~~~~~~&#!`", + "..#__//__#!`!#~~~~~~~#!`", + ".%o__ff__o%`%o~~~~~~~#%`", + ".%o__//__o%`%o~~~~~~~*``", + ".^#______#!`!#~~~~~~q#!.", + "..#347__6#!`!#~~~~~~q#..", + "..#F_____o%`%o~~~~~~No%.", + ".!#O__J__o%`%o~~~~~~No%.", + ".%o5__J_6#!`!#q~WZqqq#..", + ".!#1_____#%`%#|+|||||#..", + "..#|JJJ__#)*)#s y|S8t#!.", + ".!#yAA A +___o%.", + ".`* |y>r||+||BB_#!.", + ".!# sHH ||||| |||+#..", + ".%o H | dR| h #..", + ".%o H l + |II @@o%.", + "..# |h |||T @@o%.", + "..#y y|II @@|Dd R#..", + "..##)]])###o#o####o###..", + "...``````.!%.%!...%.^...", + "....````................" ], + "palettes": [ "standard_domestic_palette" ], "terrain": { - "#": "t_shrub", - "(": "t_linoleum_gray", - "+": "t_door_c", - "-": "t_wall", - ".": "t_grass", - "/": "t_dirt", - "9": "t_fencegate_c", - ";": "t_door_locked", - "<": "t_linoleum_white", + "%": [ "t_region_shrub", "t_region_shrub_fruit", "t_region_shrub_decorative" ], + "[": [ [ "t_region_tree_fruit", 2 ], [ "t_region_tree_nut", 2 ], "t_region_tree_shade" ], + "!": "t_region_groundcover_urban", + "M": "t_region_groundcover_urban", "=": "t_door_metal_locked", - "?": "t_floor", - "@": "t_floor", - "B": "t_linoleum_white", - "C": "t_linoleum_white", - "D": "t_grass", - "H": "t_linoleum_white", - "L": "t_floor", - "M": "t_grass", - "w": "t_grass", - "N": "t_linoleum_white", + "&": "t_gates_control_brick", + "~": "t_thconc_floor", + "q": "t_thconc_floor", + "W": "t_thconc_floor", + "Z": "t_thconc_floor", + "N": "t_thconc_floor", + "`": "t_concrete", + "?": "t_fencegate_c", + "$": "t_fence", + "_": "t_linoleum_white", + "J": "t_linoleum_white", + "/": "t_linoleum_white", + ",": "t_linoleum_white", + "1": "t_linoleum_white", + "3": "t_linoleum_white", + "4": "t_linoleum_white", + "5": "t_linoleum_white", + "6": "t_linoleum_white", + "7": "t_linoleum_white", + "8": "t_linoleum_white", "O": "t_linoleum_white", - "P": "t_floor", - "Q": "t_fence_h", - "S": "t_linoleum_white", - "V": "t_wall_glass", - "W": "t_floor", - "Y": "t_floor", - "[": "t_door_glass_c", - "c": "t_floor", - "d": "t_floor", - "e": "t_gates_mech_control", "f": "t_linoleum_white", - "g": "t_dirt", - "h": "t_floor", - "i": "t_dirt", - "k": "t_floor", - "n": "t_floor", - "o": "t_floor", - "p": "t_linoleum_white", - "s": "t_sidewalk", + "F": "t_linoleum_white", + "B": "t_linoleum_white", + "S": "t_linoleum_white", "t": "t_linoleum_white", - "v": "t_window_domestic", - "|": "t_wall" - }, - "furniture": { - "/": "f_dandelion", - "<": "f_counter", - "?": "f_sofa", - "@": "f_bed", - "B": "f_bathtub", - "C": "f_cupboard", - "D": "f_trashcan", - "H": "f_chair", - "L": "f_locker", - "M": "f_sign", - "N": "f_table", - "w": "f_mailbox", - "O": "f_oven", - "P": "f_indoor_plant", - "S": "f_sink", - "W": "f_washer", - "Y": "f_dryer", - "c": "f_counter", - "d": "f_dresser", - "f": "f_fridge", - "g": "f_bluebell", - "h": "f_chair", - "i": "f_dahlia", - "k": "f_desk", - "n": "f_table", - "o": "f_bookcase", - "p": "f_indoor_plant" - }, - "toilets": { "t": { } }, - "items": { - "w": { "item": "mail", "chance": 30, "repeat": [ 2, 5 ] }, - "W": { "item": "laundry", "chance": 50, "repeat": [ 1, 10 ] }, - "Y": { "item": "laundry", "chance": 50, "repeat": [ 1, 10 ] } + ")": "t_wall_glass", + "]": "t_door_glass_c" }, + "furniture": { "!": "f_region_flower", "M": "f_sign", ",": [ "f_indoor_plant", "f_indoor_plant_y" ], "/": "f_chair" }, "place_loot": [ - { "group": "bedroom", "x": [ 16, 20 ], "y": [ 17, 20 ], "chance": 80, "repeat": [ 1, 4 ] }, - { "group": "office", "x": [ 14, 15 ], "y": [ 18, 18 ], "chance": 75, "repeat": [ 1, 3 ] }, { "group": "child_items", "x": [ 10, 12 ], "y": [ 17, 20 ], "chance": 80, "repeat": [ 1, 3 ] }, { "group": "school", "x": [ 10, 10 ], "y": [ 20, 20 ], "chance": 70, "repeat": [ 1, 2 ] }, - { "group": "bed", "x": [ 19, 20 ], "y": [ 18, 19 ], "chance": 90, "repeat": [ 1, 3 ] }, - { "group": "bed", "x": [ 13, 14 ], "y": [ 20, 20 ], "chance": 90, "repeat": [ 1, 2 ] }, - { "group": "dresser", "x": [ 11, 11 ], "y": [ 17, 17 ], "chance": 85, "repeat": [ 1, 3 ] }, - { "group": "dresser", "x": [ 16, 16 ], "y": [ 20, 20 ], "chance": 85, "repeat": [ 1, 4 ] }, - { "group": "homebooks", "x": [ 20, 20 ], "y": [ 20, 20 ], "chance": 70, "repeat": [ 1, 2 ] }, - { "group": "novels", "x": [ 12, 12 ], "y": [ 17, 17 ], "chance": 80, "repeat": [ 1, 3 ] }, - { "group": "fridge", "x": [ 3, 3 ], "y": [ 9, 9 ], "chance": 90, "repeat": [ 1, 5 ] }, - { "group": "oven", "x": [ 3, 3 ], "y": [ 10, 10 ], "chance": 75, "repeat": [ 1, 3 ] }, - { "group": "cannedfood", "x": [ 3, 3 ], "y": [ 12, 12 ], "chance": 75, "repeat": [ 1, 3 ] }, - { "group": "pasta", "x": [ 3, 3 ], "y": [ 12, 12 ], "chance": 50, "repeat": [ 1, 2 ] }, - { "group": "kitchen", "x": [ 4, 5 ], "y": [ 8, 8 ], "chance": 75, "repeat": [ 1, 3 ] }, - { "group": "trash", "x": [ 22, 22 ], "y": [ 7, 7 ], "chance": 80, "repeat": [ 1, 3 ] }, - { "group": "dining", "x": [ 5, 6 ], "y": [ 5, 5 ], "chance": 80, "repeat": [ 1, 3 ] }, - { "group": "livingroom", "x": [ 14, 14 ], "y": [ 13, 13 ], "chance": 80, "repeat": [ 1, 2 ] }, - { "group": "waitingroom", "x": [ 4, 4 ], "y": [ 16, 16 ], "chance": 75, "repeat": [ 1, 2 ] }, - { "group": "softdrugs", "x": [ 18, 18 ], "y": [ 13, 13 ], "chance": 75, "repeat": [ 1, 3 ] }, - { "group": "cleaning", "x": [ 18, 20 ], "y": [ 11, 11 ], "chance": 90, "repeat": [ 1, 2 ] }, { "group": "tools_carpentry", "x": [ 14, 14 ], "y": [ 11, 11 ], "chance": 30, "repeat": [ 1, 2 ] }, { "group": "home_hw", "x": [ 20, 20 ], "y": [ 7, 10 ], "chance": 70, "repeat": [ 1, 4 ] }, { "item": "hose", "x": [ 12, 12 ], "y": [ 22, 22 ], "chance": 75 } @@ -142,5 +80,41 @@ "place_monsters": [ { "monster": "GROUP_ZOMBIE", "x": [ 2, 21 ], "y": [ 2, 21 ], "chance": 2 } ], "place_vehicles": [ { "vehicle": "suburban_home", "x": 17, "y": 7, "chance": 10, "rotation": 90 } ] } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": "house_garage6_roof", + "object": { + "fill_ter": "t_shingle_flat_roof", + "rows": [ + " ", + " ", + " |2222223 |22222223 ", + " |......3 |.......3 ", + " |......3 |.......3 ", + " |......3 |.......3 ", + " |......3 |.......3 ", + " 5......3 |.......3 ", + " |......3 |.......3 ", + " |......3 |.......3 ", + " |...&..3 |.......3 ", + " |......3 |.......3 ", + " |......3 |...X...3 ", + " |......3222|.......3 ", + " |..................3 ", + " |..................3 ", + " |..................3 ", + " |............=.....3 ", + " |...N..............3 ", + " |..................3 ", + " |..................3 ", + " |----------------5-3 ", + " ", + " " + ], + "palettes": [ "roof_palette" ], + "terrain": { ".": "t_shingle_flat_roof" } + } } ] diff --git a/data/json/mapgen/house/house_garage7.json b/data/json/mapgen/house/house_garage7.json index beb136b18f711..ac4e8ec184587 100644 --- a/data/json/mapgen/house/house_garage7.json +++ b/data/json/mapgen/house/house_garage7.json @@ -2,128 +2,98 @@ { "type": "mapgen", "method": "json", - "om_terrain": [ "house" ], + "om_terrain": [ "house_garage7" ], "weight": 150, "object": { "fill_ter": "t_floor", "rows": [ - "..ssssss.......p.sss....", - ".lssssssl.....T.#sss#...", - "..ssssss........#sss#...", - "..ssssss..#######sss##..", - "..ssssss---vvv---v;v--..", - "..ssssss| Y P|..", - "..ssssssv n? |..", - "..ssssssvn n? v..", - "..ssssssv n? |..", - "..ssssss| Cv..", - "..|--;--| l c c|..", - "..|h | c Ov..", - "..vn hc c u|..", - "..vn hc Cv..", - "..|h | f|..", - "..|------+---|--~=~--|..", - "..|tii+ |.......q..", - "..vii-| v..bbb..q..", - "..|SC|o v..nnn..q..", - "..|--|o @@ d|..bbb..q..", - "..|r ;o @@ d|......Tq..", - "..|-----v----|QQQggQQQ..", + ".!``````!......p.```....", + ".!``````!.....[.%```%...", + ".!``````!.......%```%...", + ".!``````!.%%%%%%%```%%..", + ".!``````###ooo###o*o##..", + ".!``````#s L y#..", + ".!``````oH l x >o..", + ".!``````oH l x ||#..", + ".!``````oH l x 7#..", + ".!``````#y 1o..", + ".!###*### | J 2#..", + ".%#L J J Oo..", + ".%o hffh AJ J 3#..", + ".%o hffh AJ 5o..", + ".%#y |66 4F#^.", + ".^#||||||+|||###)])###..", + "..#tBB|Ry bII#.......$..", + "..o___+ h o..jjj..$..", + "..#S8Q|R o..///..$..", + "..#||||T @@ d#..jjj..$..", + "..#vD + s@@sy#......[$..", + "..######o#####$$$??$$$..", "........................", "........................" ], - "set": [ - { "point": "terrain", "id": "t_dirt", "x": [ 0, 0 ], "y": [ 0, 23 ], "repeat": [ 6, 10 ] }, - { "point": "terrain", "id": "t_dirt", "x": [ 1, 1 ], "y": [ 2, 23 ], "repeat": [ 5, 9 ] }, - { "point": "terrain", "id": "t_dirt", "x": [ 22, 23 ], "y": [ 0, 23 ], "repeat": [ 8, 15 ] }, - { "point": "terrain", "id": "t_dirt", "x": [ 19, 20 ], "y": [ 16, 20 ], "repeat": [ 2, 4 ] }, - { "point": "terrain", "id": "t_dirt", "x": [ 14, 15 ], "y": [ 16, 21 ], "repeat": [ 2, 4 ] }, - { "point": "terrain", "id": "t_dirt", "x": [ 9, 13 ], "y": [ 0, 2 ], "repeat": [ 4, 7 ] }, - { "point": "terrain", "id": "t_dirt", "x": [ 1, 22 ], "y": [ 23, 23 ], "repeat": [ 5, 10 ] } - ], + "palettes": [ "standard_domestic_palette" ], "terrain": { - "+": "t_door_c", - "-": "t_wall", - ".": "t_grass", - "p": "t_grass", - ";": "t_door_locked", - "?": "t_floor", - "@": "t_floor", - "C": "t_floor", - "O": "t_floor", - "P": "t_floor", - "Q": "t_fence_h", - "S": "t_linoleum_gray", - "T": "t_tree", - "c": "t_floor", - "d": "t_floor", - "f": "t_floor", - "Y": "t_floor", - "h": "t_floor", - "i": "t_linoleum_gray", - "n": "t_floor", - "o": "t_floor", - "q": "t_fence_v", - "r": "t_floor", - "s": "t_sidewalk", - "t": "t_linoleum_gray", - "u": "t_floor", - "v": "t_window_domestic", - "|": "t_wall", - "b": "t_grass", - "=": "t_door_glass_c", - "l": "t_column", - "#": "t_shrub", - "g": "t_fencegate_c", - "~": "t_wall_glass" - }, - "furniture": { - "?": "f_sofa", - "@": "f_bed", - "C": "f_cupboard", - "O": "f_oven", - "P": "f_indoor_plant", - "S": "f_sink", - "c": "f_counter", - "p": "f_mailbox", - "Y": "f_rack_coat", - "d": "f_dresser", - "f": "f_fridge", - "h": "f_chair", - "n": "f_table", - "o": "f_bookcase", - "r": "f_rack", - "u": "f_sink", - "b": "f_bench", - "t": "f_table" - }, - "toilets": { "t": { } }, - "items": { - "Y": { "item": "coat_rack", "chance": 35, "repeat": [ 1, 4 ] }, - "p": { "item": "mail", "chance": 30, "repeat": [ 2, 5 ] } + "%": [ "t_region_shrub", "t_region_shrub_fruit", "t_region_shrub_decorative" ], + "[": [ [ "t_region_tree_fruit", 2 ], [ "t_region_tree_nut", 2 ], "t_region_tree_shade" ], + "!": "t_region_groundcover_urban", + "/": "t_region_groundcover_urban", + "`": "t_concrete", + "?": "t_fencegate_c", + "#": "t_rock_wall", + "$": "t_fence", + "_": "t_linoleum_white", + "Q": "t_linoleum_white", + "8": "t_linoleum_white", + "B": "t_linoleum_white", + "S": "t_linoleum_white", + "t": "t_linoleum_white", + ")": "t_wall_glass", + "]": "t_door_glass_c" }, + "furniture": { "!": "f_region_flower", "/": "f_table" }, "place_loot": [ - { "group": "magazines", "x": [ 11, 11 ], "y": [ 6, 8 ], "chance": 50, "repeat": [ 1, 4 ] }, - { "group": "homebooks", "x": [ 6, 6 ], "y": [ 18, 19 ], "chance": 80, "repeat": [ 1, 2 ] }, - { "group": "livingroom", "x": [ 14, 20 ], "y": [ 6, 7 ], "chance": 90, "repeat": [ 1, 3 ] }, - { "group": "dining", "x": [ 13, 13 ], "y": [ 12, 13 ], "chance": 80, "repeat": [ 1, 2 ] }, - { "group": "fridge", "x": [ 20, 20 ], "y": [ 14, 14 ], "chance": 90, "repeat": [ 1, 5 ] }, - { "group": "oven", "x": [ 20, 20 ], "y": [ 11, 11 ], "chance": 75, "repeat": [ 1, 3 ] }, - { "group": "kitchen", "x": [ 20, 20 ], "y": [ 9, 9 ], "chance": 85, "repeat": [ 1, 2 ] }, - { "group": "kitchen", "x": [ 20, 20 ], "y": [ 13, 13 ], "chance": 85, "repeat": [ 1, 2 ] }, - { "group": "dresser", "x": [ 12, 12 ], "y": [ 19, 20 ], "chance": 90, "repeat": [ 1, 4 ] }, - { "group": "drugs_rare", "x": [ 3, 3 ], "y": [ 20, 20 ], "chance": 5, "repeat": [ 1, 2 ] }, - { "group": "harddrugs", "x": [ 3, 3 ], "y": [ 20, 20 ], "chance": 15, "repeat": [ 1, 2 ] }, - { "group": "dining", "x": [ 17, 17 ], "y": [ 10, 12 ], "chance": 80, "repeat": [ 1, 3 ] }, - { "group": "groce_premade", "x": [ 16, 18 ], "y": [ 18, 18 ], "chance": 85, "repeat": [ 1, 3 ] }, - { "group": "bed", "x": [ 9, 10 ], "y": [ 19, 20 ], "chance": 90, "repeat": [ 1, 3 ] }, - { "group": "cleaning", "x": [ 4, 4 ], "y": [ 18, 18 ], "chance": 80, "repeat": [ 1, 2 ] }, - { "group": "bedroom", "x": [ 8, 12 ], "y": [ 16, 18 ], "chance": 80, "repeat": [ 1, 3 ] }, - { "group": "guns_pistol_common", "x": [ 3, 3 ], "y": [ 20, 20 ], "chance": 75, "ammo": 95, "magazine": 100 }, - { "item": "television", "x": [ 9, 9 ], "y": [ 7, 7 ], "chance": 75 } + { "group": "guns_pistol_common", "x": 3, "y": 20, "chance": 75, "ammo": 95, "magazine": 100 }, + { "item": "television", "x": 13, "y": 7, "chance": 75 } ], "place_monsters": [ { "monster": "GROUP_ZOMBIE", "x": [ 2, 21 ], "y": [ 2, 21 ], "chance": 6 } ], "place_vehicles": [ { "vehicle": "suburban_home", "x": 4, "y": 4, "chance": 15, "fuel": 80, "status": 50, "rotation": 270 } ] } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": "house_garage7_roof", + "object": { + "fill_ter": "t_shingle_flat_roof", + "rows": [ + " ", + " ", + " ", + " ", + " |------------3 ", + " |............3 ", + " |............3 ", + " |............3 ", + " |.......X....3 ", + " |............3 ", + " |22222|............3 ", + " |..................3 ", + " |.....&........=...3 ", + " |..................3 ", + " |..................5 ", + " 5..........3-------3 ", + " |......N...3 ", + " |..........3 ", + " |..........3 ", + " |..........3 ", + " |..........3 ", + " |----------3 ", + " ", + " " + ], + "palettes": [ "roof_palette" ], + "terrain": { ".": "t_shingle_flat_roof" } + } } ] diff --git a/data/json/mapgen/house/house_garage8.json b/data/json/mapgen/house/house_garage8.json index 123e8c13529e6..d460c190534e6 100644 --- a/data/json/mapgen/house/house_garage8.json +++ b/data/json/mapgen/house/house_garage8.json @@ -2,129 +2,107 @@ { "type": "mapgen", "method": "json", - "om_terrain": [ "house" ], + "om_terrain": [ "house_garage8" ], "weight": 200, "object": { "fill_ter": "t_floor", "rows": [ - "..ssssssss...s..........", - ".lsssssssslp.s.....T....", - ".|ssssssss|#.s.xXxXx....", - ".|sssssssr|#.s..........", - ".|sssssssr|#.s.XxXxX....", - ".|sssssssr|#.s..........", - ".|ssssssss|##s#|vvv|....", - ".|sssssccc|-v;v-???-|gq.", - ".|---;----|P o|.q.", - ".|r+ o|.q.", - ".|---+--+-|C |.q.", - ".|dd |BiS|O hnh v.q.", - ".| |Bic|C hnh v.q.", - ".|@@ |-iS|u hnh v.q.", - ".|@@ P|tiC|f |.q.", - ".|-vv---v-----~==~--|.q.", - ".q....................q.", - ".q.................T..q.", - ".q.|----v+v|..mmmm....q.", - ".q.|r v..........q.", - ".q.| h v..mmmm....q.", - ".q.| kkk oo|..........q.", - ".QQ--vvv----QQQQQQQQQQq.", + "..````````...`..........", + ".&````````&p.`.....[....", + ".#~~~~~~~~#%.`.,;,;,....", + ".#~~~~~~~q#%.`..........", + ".#~~~~~~~q#%.`.,;,;,....", + ".#~~~~~~~q#%.`..........", + ".#~~~~~~~~#%%`%#ooo#....", + ".#~~~~~NNN##o*o#HHH##?$.", + ".####*#####L ll R#.$.", + ".#U>+ R#.$.", + ".#|||+||+||2 #.$.", + ".#Ddb |B_S|O hfh o.$.", + ".# |B_8|1 hfh o.$.", + ".#@@ E|Q_S|5 hfh o.$.", + ".#@@ y|t_8|F34 T#^$.", + ".##oo###o#####)]])###.$.", + ".$^......``````````...$.", + ".$.......`.........[..$.", + ".$.#####o*o#..////....$.", + ".$.#6 o.......[..$.", + ".$.# h o..////....$.", + ".$.# rrr RR#..........$.", + ".$$##ooo####$$$$$$$$$$$.", "........................" ], - "set": [ - { "point": "terrain", "id": "t_dirt", "x": [ 0, 0 ], "y": [ 0, 23 ], "repeat": [ 6, 10 ] }, - { "point": "terrain", "id": "t_dirt", "x": [ 23, 23 ], "y": [ 0, 23 ], "repeat": [ 6, 10 ] }, - { "point": "terrain", "id": "t_dirt", "x": [ 2, 21 ], "y": [ 16, 17 ], "repeat": [ 5, 10 ] }, - { "point": "terrain", "id": "t_dirt", "x": [ 20, 23 ], "y": [ 0, 6 ], "repeat": [ 3, 6 ] }, - { "point": "terrain", "id": "t_dirt", "x": [ 14, 15 ], "y": [ 2, 5 ], "repeat": [ 3, 6 ] }, - { "point": "terrain", "id": "t_dirt", "x": [ 12, 13 ], "y": [ 18, 21 ], "repeat": [ 3, 6 ] }, - { "point": "terrain", "id": "t_dirt", "x": [ 21, 21 ], "y": [ 8, 15 ], "repeat": [ 3, 6 ] }, - { "point": "terrain", "id": "t_dirt", "x": [ 18, 21 ], "y": [ 18, 21 ], "repeat": [ 5, 10 ] } - ], + "palettes": [ "standard_domestic_palette" ], "terrain": { - "+": "t_door_c", - "-": "t_wall", - ".": "t_grass", - "p": "t_grass", - ";": "t_door_locked", - "?": "t_floor", - "@": "t_floor", - "B": "t_linoleum_gray", - "C": "t_floor", - "O": "t_floor", - "P": "t_floor", - "Q": "t_fence_h", - "m": "t_dirtmound", - "S": "t_linoleum_gray", - "T": "t_tree", - "c": "t_linoleum_gray", - "d": "t_floor", - "f": "t_floor", - "h": "t_floor", - "i": "t_linoleum_gray", - "k": "t_floor", - "n": "t_floor", - "o": "t_floor", - "q": "t_fence_v", - "r": "t_floor", - "s": "t_sidewalk", - "t": "t_linoleum_gray", - "u": "t_floor", - "v": "t_window_domestic", - "|": "t_wall", - "=": "t_door_glass_c", - "l": "t_column", - "#": "t_shrub", - "g": "t_fencegate_c", - "X": "t_shrub_blueberry", - "x": "t_shrub_strawberry", - "~": "t_wall_glass" - }, - "furniture": { - "?": "f_sofa", - "@": "f_bed", - "B": "f_bathtub", - "C": "f_cupboard", - "O": "f_oven", - "P": "f_indoor_plant", - "S": "f_sink", - "c": "f_counter", - "d": "f_dresser", - "f": "f_fridge", - "h": "f_chair", - "p": "f_mailbox", - "k": "f_desk", - "n": "f_table", - "o": "f_bookcase", - "r": "f_rack", - "u": "f_sink", - "t": "f_table" + "%": [ "t_region_shrub", "t_region_shrub_fruit", "t_region_shrub_decorative" ], + "[": [ [ "t_region_tree_fruit", 2 ], [ "t_region_tree_nut", 2 ], "t_region_tree_shade" ], + "!": "t_region_groundcover_urban", + "`": "t_concrete", + "?": "t_fencegate_c", + "#": "t_rock_wall", + "$": "t_fence", + "_": "t_linoleum_white", + "Q": "t_linoleum_white", + "8": "t_linoleum_white", + "B": "t_linoleum_white", + "S": "t_linoleum_white", + "t": "t_linoleum_white", + ")": "t_wall_glass", + "]": "t_door_glass_c", + "/": "t_dirtmound", + "N": "t_thconc_floor", + "q": "t_thconc_floor", + "~": "t_thconc_floor", + "&": "t_column", + ";": "t_shrub_blueberry", + ",": "t_shrub_strawberry" }, - "toilets": { "t": { } }, - "items": { "p": { "item": "mail", "chance": 30, "repeat": [ 2, 5 ] } }, + "furniture": { "!": "f_region_flower" }, "place_loot": [ - { "group": "magazines", "x": [ 5, 7 ], "y": [ 21, 21 ], "chance": 80, "repeat": [ 1, 2 ] }, - { "group": "homebooks", "x": [ 9, 10 ], "y": [ 21, 21 ], "chance": 70, "repeat": [ 1, 3 ] }, - { "group": "homebooks", "x": [ 19, 19 ], "y": [ 8, 9 ], "chance": 85, "repeat": [ 1, 3 ] }, - { "group": "livingroom", "x": [ 13, 15 ], "y": [ 9, 13 ], "chance": 40, "repeat": [ 1, 4 ] }, - { "group": "dining", "x": [ 17, 17 ], "y": [ 11, 13 ], "chance": 70, "repeat": [ 1, 3 ] }, - { "group": "fridge", "x": [ 11, 11 ], "y": [ 14, 14 ], "chance": 75, "repeat": [ 1, 5 ] }, - { "group": "oven", "x": [ 11, 11 ], "y": [ 11, 11 ], "chance": 75, "repeat": [ 1, 3 ] }, - { "group": "kitchen", "x": [ 11, 11 ], "y": [ 12, 12 ], "chance": 85, "repeat": [ 1, 2 ] }, - { "group": "kitchen", "x": [ 11, 11 ], "y": [ 10, 10 ], "chance": 85, "repeat": [ 1, 2 ] }, - { "group": "dresser", "x": [ 2, 3 ], "y": [ 11, 11 ], "chance": 90, "repeat": [ 1, 5 ] }, - { "group": "softdrugs", "x": [ 9, 9 ], "y": [ 14, 14 ], "chance": 80, "repeat": [ 1, 2 ] }, { "group": "drugs_heal_simple", "x": [ 9, 9 ], "y": [ 12, 12 ], "chance": 80, "repeat": [ 1, 2 ] }, { "group": "farming_seeds", "x": [ 4, 4 ], "y": [ 19, 19 ], "chance": 85, "repeat": [ 1, 4 ] }, { "group": "hydro", "x": [ 14, 17 ], "y": [ 18, 18 ], "chance": 90, "repeat": [ 1, 4 ] }, { "group": "hydro", "x": [ 14, 17 ], "y": [ 20, 20 ], "chance": 90, "repeat": [ 1, 4 ] }, - { "group": "tools_common", "x": [ 9, 9 ], "y": [ 3, 5 ], "chance": 75, "repeat": [ 1, 3 ] }, - { "group": "bed", "x": [ 2, 3 ], "y": [ 13, 14 ], "chance": 90, "repeat": [ 1, 3 ] }, - { "group": "cleaning", "x": [ 2, 2 ], "y": [ 9, 9 ], "chance": 80, "repeat": [ 1, 2 ] } + { "group": "tools_common", "x": [ 9, 9 ], "y": [ 3, 5 ], "chance": 75, "repeat": [ 1, 3 ] } ], "place_monsters": [ { "monster": "GROUP_ZOMBIE", "x": [ 4, 5 ], "y": [ 12, 13 ], "chance": 6 } ], "place_vehicles": [ { "vehicle": "suburban_home", "x": 4, "y": 2, "chance": 15, "fuel": 80, "status": 50, "rotation": 270 } ] } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": "house_garage8_roof", + "object": { + "fill_ter": "t_shingle_flat_roof", + "rows": [ + " ", + " ", + " |222222223 ", + " |........3 ", + " |........3 ", + " |........3 ", + " |........3 |2223 ", + " |........32222|...33 ", + " |..................3 ", + " |..................3 ", + " |..................3 ", + " |..................3 ", + " |..................3 ", + " |..................3 ", + " |..................5 ", + " |5-----------------3 ", + " ", + " ", + " ......... ", + " ......... ", + " ......... ", + " ......... ", + " ......... ", + " " + ], + "palettes": [ "roof_palette" ], + "terrain": { ".": "t_shingle_flat_roof" } + } } ] diff --git a/data/json/mapgen_palettes/house_general_palette.json b/data/json/mapgen_palettes/house_general_palette.json index 4457e9cb82375..16f0ba6bb403a 100644 --- a/data/json/mapgen_palettes/house_general_palette.json +++ b/data/json/mapgen_palettes/house_general_palette.json @@ -2,7 +2,7 @@ { "type": "palette", "id": "standard_domestic_palette", - "//": "Intended as a palette for non-nested houses. Symbols still open for use: ! $ % & _ = ~ - ? / , and some symbols that conflict with json (like brackets).", + "//": "Intended as a palette for non-nested houses. Symbols still open for use: ! $ % & _ = ~ ? / , and some symbols that conflict with json (like brackets).", "toilets": { "t": { } }, "furniture": { "a": "f_fireplace", @@ -119,9 +119,10 @@ "n": { "item": "SUS_dishwasher", "chance": 100 }, "p": { "item": "mail", "chance": 30, "repeat": [ 2, 5 ] }, "q": [ - { "item": "home_hw", "chance": 10, "repeat": [ 1, 2 ] }, + { "item": "tools_home", "chance": 40, "repeat": [ 1, 2 ] }, { "item": "cleaning", "chance": 30, "repeat": [ 1, 2 ] }, - { "item": "mechanics", "chance": 5, "repeat": [ 1, 2 ] } + { "item": "mechanics", "chance": 15, "repeat": [ 1, 2 ] }, + { "item": "tools_survival", "chance": 25, "repeat": [ 1, 2 ] } ], "r": [ { "item": "office_paper", "chance": 5 }, { "item": "office", "chance": 25 } ], "t": { "item": "SUS_toilet", "chance": 10, "repeat": [ 1, 3 ] }, @@ -163,7 +164,7 @@ "S": { "item": "SUS_bathroom_sink", "chance": 75 }, "U": [ { "item": "home_hw", "chance": 20, "repeat": [ 1, 2 ] }, - { "item": "cleaning", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "cleaning", "chance": 40, "repeat": [ 1, 2 ] }, { "item": "mechanics", "chance": 10, "repeat": [ 1, 2 ] } ], "Y": { "item": "trash", "chance": 30, "repeat": [ 1, 4 ] }, diff --git a/data/json/mapgen_palettes/roof_palette.json b/data/json/mapgen_palettes/roof_palette.json index 05e2c26837867..758ec6216452b 100644 --- a/data/json/mapgen_palettes/roof_palette.json +++ b/data/json/mapgen_palettes/roof_palette.json @@ -30,6 +30,7 @@ }, "furniture": { "&": "f_roof_turbine_vent", + "N": "f_TV_antenna", ":": "f_cellphone_booster", "X": "f_small_satelitte_dish", "~": "f_chimney", diff --git a/data/json/overmap/multitile_city_buildings.json b/data/json/overmap/multitile_city_buildings.json index 802c0066efa0a..32316c283b480 100644 --- a/data/json/overmap/multitile_city_buildings.json +++ b/data/json/overmap/multitile_city_buildings.json @@ -2846,5 +2846,55 @@ { "point": [ 0, 0, 1 ], "overmap": "house_garage3_roof_north" }, { "point": [ 0, 0, -1 ], "overmap": "basement" } ] + }, + { + "type": "city_building", + "id": "house_garage4", + "locations": [ "land" ], + "overmaps": [ + { "point": [ 0, 0, 0 ], "overmap": "house_garage4_north" }, + { "point": [ 0, 0, 1 ], "overmap": "house_garage4_roof_north" }, + { "point": [ 0, 0, -1 ], "overmap": "basement" } + ] + }, + { + "type": "city_building", + "id": "house_garage5", + "locations": [ "land" ], + "overmaps": [ + { "point": [ 0, 0, 0 ], "overmap": "house_garage5_north" }, + { "point": [ 0, 0, 1 ], "overmap": "house_garage5_roof_north" }, + { "point": [ 0, 0, -1 ], "overmap": "basement" } + ] + }, + { + "type": "city_building", + "id": "house_garage6", + "locations": [ "land" ], + "overmaps": [ + { "point": [ 0, 0, 0 ], "overmap": "house_garage6_north" }, + { "point": [ 0, 0, 1 ], "overmap": "house_garage6_roof_north" }, + { "point": [ 0, 0, -1 ], "overmap": "basement" } + ] + }, + { + "type": "city_building", + "id": "house_garage7", + "locations": [ "land" ], + "overmaps": [ + { "point": [ 0, 0, 0 ], "overmap": "house_garage7_north" }, + { "point": [ 0, 0, 1 ], "overmap": "house_garage7_roof_north" }, + { "point": [ 0, 0, -1 ], "overmap": "basement" } + ] + }, + { + "type": "city_building", + "id": "house_garage8", + "locations": [ "land" ], + "overmaps": [ + { "point": [ 0, 0, 0 ], "overmap": "house_garage8_north" }, + { "point": [ 0, 0, 1 ], "overmap": "house_garage8_roof_north" }, + { "point": [ 0, 0, -1 ], "overmap": "basement" } + ] } ] diff --git a/data/json/overmap/overmap_terrain/overmap_terrain_residential.json b/data/json/overmap/overmap_terrain/overmap_terrain_residential.json index 0876ab0f0ed06..8ab071cdb171c 100644 --- a/data/json/overmap/overmap_terrain/overmap_terrain_residential.json +++ b/data/json/overmap/overmap_terrain/overmap_terrain_residential.json @@ -981,5 +981,90 @@ "copy-from": "generic_city_building", "color": "light_green", "see_cost": 2 + }, + { + "type": "overmap_terrain", + "id": "house_garage4", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2, + "flags": [ "SIDEWALK", "GENERIC_LOOT" ] + }, + { + "type": "overmap_terrain", + "id": "house_garage4_roof", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2 + }, + { + "type": "overmap_terrain", + "id": "house_garage5", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2, + "flags": [ "SIDEWALK", "GENERIC_LOOT" ] + }, + { + "type": "overmap_terrain", + "id": "house_garage5_roof", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2 + }, + { + "type": "overmap_terrain", + "id": "house_garage6", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2, + "flags": [ "SIDEWALK", "GENERIC_LOOT" ] + }, + { + "type": "overmap_terrain", + "id": "house_garage6_roof", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2 + }, + { + "type": "overmap_terrain", + "id": "house_garage7", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2, + "flags": [ "SIDEWALK", "GENERIC_LOOT" ] + }, + { + "type": "overmap_terrain", + "id": "house_garage7_roof", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2 + }, + { + "type": "overmap_terrain", + "id": "house_garage8", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2, + "flags": [ "SIDEWALK", "GENERIC_LOOT" ] + }, + { + "type": "overmap_terrain", + "id": "house_garage8_roof", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2 } ] diff --git a/data/json/regional_map_settings.json b/data/json/regional_map_settings.json index bf10c42c5f5b3..46aedad21a26e 100644 --- a/data/json/regional_map_settings.json +++ b/data/json/regional_map_settings.json @@ -566,6 +566,11 @@ "house_garage": 50, "house_garage2": 50, "house_garage3": 50, + "house_garage4": 50, + "house_garage5": 50, + "house_garage6": 50, + "house_garage7": 50, + "house_garage8": 50, "house_toolshed": 50, "house_suicide": 20, "house_quiverfull": 30, From 35c58ab9b6fc83aba7b059b89c61bd70669af0d9 Mon Sep 17 00:00:00 2001 From: LaVeyanFiend Date: Sat, 11 Jan 2020 19:53:26 -0500 Subject: [PATCH 22/43] ACR turrets refer to correct version --- data/mods/blazemod/blaze_autoweapons_parts.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/mods/blazemod/blaze_autoweapons_parts.json b/data/mods/blazemod/blaze_autoweapons_parts.json index 348ce3a339399..0a7f3264011fc 100644 --- a/data/mods/blazemod/blaze_autoweapons_parts.json +++ b/data/mods/blazemod/blaze_autoweapons_parts.json @@ -74,7 +74,7 @@ "id": "acr", "copy-from": "turret_blaze", "type": "vehicle_part", - "name": "Bushmaster ACR turret", + "name": "Remington ACR turret", "item": "acr", "breaks_into": [ { "item": "acr", "count": [ 0, 1 ] } ], "requirements": { "install": { "skills": [ [ "mechanics", 3 ] ] }, "removal": { "skills": [ [ "mechanics", 1 ] ] } } @@ -83,7 +83,7 @@ "id": "acrnc", "copy-from": "turret_blaze", "type": "vehicle_part", - "name": "automated Bushmaster ACR", + "name": "automated Remington ACR", "item": "acr", "breaks_into": [ { "item": "acr", "count": [ 0, 1 ] } ], "requirements": { "install": { "skills": [ [ "mechanics", 3 ] ] }, "removal": { "skills": [ [ "mechanics", 1 ] ] } } From 478574f480d4c6cc91a9dd2d221b05b2b156018f Mon Sep 17 00:00:00 2001 From: Qrox Date: Sun, 12 Jan 2020 00:39:05 +0800 Subject: [PATCH 23/43] Save sort category in advanced_inventory::save_settings --- src/advanced_inv.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/advanced_inv.cpp b/src/advanced_inv.cpp index aec50f7cbf500..9ee4b97464431 100644 --- a/src/advanced_inv.cpp +++ b/src/advanced_inv.cpp @@ -142,6 +142,7 @@ void advanced_inventory::save_settings( bool only_panes ) uistate.adv_inv_area[i] = panes[i].get_area(); uistate.adv_inv_index[i] = panes[i].index; uistate.adv_inv_filter[i] = panes[i].filter; + uistate.adv_inv_sort[i] = panes[i].sortby; } } From e8f4bb7b8f62a079acbd0c909d5575be5d2d8849 Mon Sep 17 00:00:00 2001 From: John Bytheway Date: Sat, 11 Jan 2020 20:06:59 -0500 Subject: [PATCH 24/43] Use Unix line endings in Russian translation notes To avoid git issues on Unix platforms (and for consistency), convert the line endings in the new Russian translation notes to LF (from CRLF). Also remove some trailing whitespace. --- lang/notes/ru.txt | 138 +++++++++++++++++++++++----------------------- 1 file changed, 69 insertions(+), 69 deletions(-) diff --git a/lang/notes/ru.txt b/lang/notes/ru.txt index 8e42859c169cc..395c43fde9257 100644 --- a/lang/notes/ru.txt +++ b/lang/notes/ru.txt @@ -1,69 +1,69 @@ - -This file contains notes/discussion regarding translation for Russian, written in Russian. - ---------------------------------------------------------------------------------------------------- - -Специфика: ---------------------------------------------------------------------------------------------------- -Старайтесь избавляться от англицизмов. Например, "Вы вытащили руки из своих карманов" следует заменить на "Вы вытащили руки из карманов". - -После перевода перечитайте свой текст. Если по-русски он звучит странно, это повод его несколько подредактировать с сохранением изначального смысла. - -Замена слов на уменьшительно-ласкательные приветствуется, если они подходят по смыслу. Замена слов на русский сленг или придание словам большей экспрессии тоже приветствуется, если это соответствует контексту. Импровизация в рамках контекста и смысла допустима, если конечный текст выглядит лучше, чем дословный перевод. - -После многоточия, по правилам русского языка, следующее предложение начинается с большой буквы. - -Прямую речь следует писать по русским правилам, если она встречается в переводе. - -Иногда перед началом или в конце фразы стоят пробелы. Их очень плохо видно в редакторе Transifex, имейте это в виду. Особенно часто это бывает, если фраза не окончена или по смыслу имеет продолжение. Чтобы лучше видеть такие пробелы, можно зайти в настройки редактора и включить пункт "Показать пробелы". - -Также не стоит забывать про букву Ё. - -Формы множественного числа ---------------------------------------------------------------------------------------------------- -В редакторе Transifex некоторые названия предметов требуется переводить для всех форм единственного и множественного числа. В игре, в зависимости от того, сколько у вас предметов, будет отображаться название предмета в нужной форме. - -1 — единственное число (например: яблоко) -Несколько — нужно подобрать окончание так, чтобы оно соответствовало кол-ву 2-4 предмета (например: яблока) -Много — нужно подобрать окончание так, чтобы оно соответствовало кол-ву 5-бесконечность предметов (например: яблок) -Другое — простая форма множественного числа (например: яблоки) - -В разделе "Несколько", при переводе прилагательных женского рода следует отдавать предпочтение варианту: две "стиральные машины", а не две "стиральных машины". - -Что касается книг и журналов. Слово копия и выпуск можно опустить. Как правило, если книги/журналы имеют множественное число, стоит переводить так: -1: книга «Война миров» -Несколько (например, две): книги «Война миров» -Много (например, сто): книг «Война миров» -Другое: книги «Война миров» - -1: журнал «Плейбой» -Несколько (например, два): журнала «Плейбой» -Много (например, сто): журналов «Плейбой» -Другое: журналы «Плейбой» - -Иногда встречаются такие слова, которые не стоит писать в единственном или во множественном числе, например, "фисташки", "арахис" и т.д. Их надо оставлять в той форме, которая больше подходит по смыслу. - -Спецсимволы: ---------------------------------------------------------------------------------------------------- - -Спецсимволы печатаются комбинацией клавиш. Для различных операционных систем эти комбинации разные. Для ОС Windows спецсимволы набираются на цифровой клавиатуре с помощью зажатой клавиши alt. Для ОС Linux существуют комбинации с кнопкой Compose. Для Mac ОС применяется комбинации с клавишей Option. -Некоторые символы имеют свою специфику в русском языке, отличную от английского. Нужно использовать русскую интерпретацию, если это возможно. - -Стоит различать тире и дефис. Дефис ставится внутри слова, короткий, без пробелов (например: что-то, чёрно-белый и т.п.). Тире — пунктуационный знак, ставится между словами, длиннее, отделяется пробелами с обеих сторон. -Дефис: - (минус) -Тире: — WIN:(alt + 0151) LIN:(Сompose + - + --) MAC:(Option + Shift + -) - -Кавычки следует использовать ёлочки. -Открывающая кавычка: « WIN:(alt + 0171) LIN:(Сompose + < + <) MAC:(Option + \) -Закрывающая кавычка: » WIN:(alt + 0187) LIN:(Сompose + > + >) MAC:(Option + Shift + \) - -Иногда, в тексте оригинала встречаются спецсимволы "%s", "%2$d", "\n", а также цветовые теги с цифрами 1 и 2. Оставляете их как есть, подставляя по смыслу в нужное место. Стоит ставить пробелы перед и после спецсимволов, если они есть в оригинале. -\n — перенос строки (эквивалентно клавише enter в текстовом редакторе) -%2$d или %d — вместо этих символов в игре будет отображаться числовое значение -%2$s или %s — вместо этих символов в игре будет отображаться какая-либо другая строка - -Поскольку шрифт в игре моноширинный, а у некоторых еще и квадратный, стоит соблюдать следующую специфику. -Не стоит использовать три точки вместо многоточия, в игре это очень плохо выглядит. Есть свой спецсимвол. -Многоточие: … WIN:(alt + 0133) LIN:(Сompose + . + .) MAC:(Option + ;) - -Также, в английском языке для текста игры принято правило разделять предложения двумя пробелами. В русском языке такого правила нет, поэтому после точки в конце предложения должен оставаться один пробел. + +This file contains notes/discussion regarding translation for Russian, written in Russian. + +--------------------------------------------------------------------------------------------------- + +Специфика: +--------------------------------------------------------------------------------------------------- +Старайтесь избавляться от англицизмов. Например, "Вы вытащили руки из своих карманов" следует заменить на "Вы вытащили руки из карманов". + +После перевода перечитайте свой текст. Если по-русски он звучит странно, это повод его несколько подредактировать с сохранением изначального смысла. + +Замена слов на уменьшительно-ласкательные приветствуется, если они подходят по смыслу. Замена слов на русский сленг или придание словам большей экспрессии тоже приветствуется, если это соответствует контексту. Импровизация в рамках контекста и смысла допустима, если конечный текст выглядит лучше, чем дословный перевод. + +После многоточия, по правилам русского языка, следующее предложение начинается с большой буквы. + +Прямую речь следует писать по русским правилам, если она встречается в переводе. + +Иногда перед началом или в конце фразы стоят пробелы. Их очень плохо видно в редакторе Transifex, имейте это в виду. Особенно часто это бывает, если фраза не окончена или по смыслу имеет продолжение. Чтобы лучше видеть такие пробелы, можно зайти в настройки редактора и включить пункт "Показать пробелы". + +Также не стоит забывать про букву Ё. + +Формы множественного числа +--------------------------------------------------------------------------------------------------- +В редакторе Transifex некоторые названия предметов требуется переводить для всех форм единственного и множественного числа. В игре, в зависимости от того, сколько у вас предметов, будет отображаться название предмета в нужной форме. + +1 — единственное число (например: яблоко) +Несколько — нужно подобрать окончание так, чтобы оно соответствовало кол-ву 2-4 предмета (например: яблока) +Много — нужно подобрать окончание так, чтобы оно соответствовало кол-ву 5-бесконечность предметов (например: яблок) +Другое — простая форма множественного числа (например: яблоки) + +В разделе "Несколько", при переводе прилагательных женского рода следует отдавать предпочтение варианту: две "стиральные машины", а не две "стиральных машины". + +Что касается книг и журналов. Слово копия и выпуск можно опустить. Как правило, если книги/журналы имеют множественное число, стоит переводить так: +1: книга «Война миров» +Несколько (например, две): книги «Война миров» +Много (например, сто): книг «Война миров» +Другое: книги «Война миров» + +1: журнал «Плейбой» +Несколько (например, два): журнала «Плейбой» +Много (например, сто): журналов «Плейбой» +Другое: журналы «Плейбой» + +Иногда встречаются такие слова, которые не стоит писать в единственном или во множественном числе, например, "фисташки", "арахис" и т.д. Их надо оставлять в той форме, которая больше подходит по смыслу. + +Спецсимволы: +--------------------------------------------------------------------------------------------------- + +Спецсимволы печатаются комбинацией клавиш. Для различных операционных систем эти комбинации разные. Для ОС Windows спецсимволы набираются на цифровой клавиатуре с помощью зажатой клавиши alt. Для ОС Linux существуют комбинации с кнопкой Compose. Для Mac ОС применяется комбинации с клавишей Option. +Некоторые символы имеют свою специфику в русском языке, отличную от английского. Нужно использовать русскую интерпретацию, если это возможно. + +Стоит различать тире и дефис. Дефис ставится внутри слова, короткий, без пробелов (например: что-то, чёрно-белый и т.п.). Тире — пунктуационный знак, ставится между словами, длиннее, отделяется пробелами с обеих сторон. +Дефис: - (минус) +Тире: — WIN:(alt + 0151) LIN:(Сompose + - + --) MAC:(Option + Shift + -) + +Кавычки следует использовать ёлочки. +Открывающая кавычка: « WIN:(alt + 0171) LIN:(Сompose + < + <) MAC:(Option + \) +Закрывающая кавычка: » WIN:(alt + 0187) LIN:(Сompose + > + >) MAC:(Option + Shift + \) + +Иногда, в тексте оригинала встречаются спецсимволы "%s", "%2$d", "\n", а также цветовые теги с цифрами 1 и 2. Оставляете их как есть, подставляя по смыслу в нужное место. Стоит ставить пробелы перед и после спецсимволов, если они есть в оригинале. +\n — перенос строки (эквивалентно клавише enter в текстовом редакторе) +%2$d или %d — вместо этих символов в игре будет отображаться числовое значение +%2$s или %s — вместо этих символов в игре будет отображаться какая-либо другая строка + +Поскольку шрифт в игре моноширинный, а у некоторых еще и квадратный, стоит соблюдать следующую специфику. +Не стоит использовать три точки вместо многоточия, в игре это очень плохо выглядит. Есть свой спецсимвол. +Многоточие: … WIN:(alt + 0133) LIN:(Сompose + . + .) MAC:(Option + ;) + +Также, в английском языке для текста игры принято правило разделять предложения двумя пробелами. В русском языке такого правила нет, поэтому после точки в конце предложения должен оставаться один пробел. From 00217fc57a2b992004bdaad4eec5d727288720e2 Mon Sep 17 00:00:00 2001 From: curstwist <39442864+curstwist@users.noreply.github.com> Date: Sat, 11 Jan 2020 21:15:43 -0500 Subject: [PATCH 25/43] add 5 houses --- data/json/mapgen/house/crack_house.json | 619 +++++++----------- data/json/mapgen/house/house_rural.json | 323 +++++---- .../overmap/multitile_city_buildings.json | 19 + .../overmap_terrain_residential.json | 35 +- data/json/regional_map_settings.json | 2 + 5 files changed, 447 insertions(+), 551 deletions(-) diff --git a/data/json/mapgen/house/crack_house.json b/data/json/mapgen/house/crack_house.json index 3b7995af21f3e..830097b934a0f 100644 --- a/data/json/mapgen/house/crack_house.json +++ b/data/json/mapgen/house/crack_house.json @@ -1,52 +1,65 @@ [ { "method": "json", + "om_terrain": "house_crack1", + "type": "mapgen", + "weight": 100, "object": { - "furniture": { - "#": "f_null", - "&": "f_trashcan", - "+": "f_null", - "-": "f_null", - ".": "f_null", - "4": "f_null", - "A": "f_mailbox", - "B": "f_bed", - "C": "f_null", - "D": "f_null", - "F": "f_fridge", - "H": "f_armchair", - "P": "f_null", - "S": "f_sofa", - "T": "f_trashcan", - "W": "f_wreckage", - "_": "f_null", - "a": "f_null", - "b": "f_null", - "c": "f_null", - "d": "f_dandelion", - "e": "f_counter", - "f": "f_null", - "g": "f_null", - "h": "f_dresser", - "i": "f_chair", - "j": "f_toilet", - "k": "f_cupboard", - "l": "f_null", - "m": "f_bathtub", - "n": "f_toilet", - "o": "f_null", - "p": "f_null", - "q": "f_washer", - "r": "f_trashcan", - "s": "f_null", - "t": "f_table", - "w": "f_null", - "{": "f_dumpster", - "|": "f_null" + "fill_ter": "t_floor", + "rows": [ + "..........`...p._____...", + "..........`....._____...", + "._.._..%%```.%.._____.!.", + "...###/###*#/##._____...", + ".._#d @@|,,,,Y#!_____!_.", + ".__# |E,s,H#!_______.", + ".._#|?|||,,s,H#.______..", + "..%#---,,,,E,,/._____!..", + "..%#---,,,,,,,#!_____.._", + ".._#---| |||?#._____!..", + ".._#--F| h|t #%_____.!.", + "._^#JJ7| >|9 #._____...", + "..%#/###*#/####._____...", + "...$%.````..&%.!_____!..", + "._.$%_````...._!_____!!.", + "...$Z..._[._.!_#~~~~~#!.", + ".._$.%...______#~~~~~#!.", + ".._;{_........_#~~~~~#!.", + "...${.=.._...._#~~~~~#!.", + "...$%..!.__..._+~~~~~/..", + ".._$.[%.___W!._#~~~~~#..", + ".._;$$$$$$;$$$$#######..", + "....___.___._..%%..._._.", + ".................._....." + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { + "%": [ "t_region_shrub", "t_region_shrub_fruit", "t_region_shrub_decorative" ], + "[": [ [ "t_region_tree_fruit", 2 ], [ "t_region_tree_nut", 2 ], "t_region_tree_shade" ], + "!": "t_region_groundcover_urban", + "=": "t_region_groundcover_urban", + "{": "t_region_groundcover_urban", + "W": "t_region_groundcover_urban", + "Z": "t_region_groundcover_urban", + "&": "t_region_groundcover_urban", + "H": "t_carpet_yellow", + "E": "t_carpet_yellow", + "s": "t_carpet_yellow", + "Y": "t_carpet_yellow", + ",": "t_carpet_yellow", + "`": "t_concrete", + "/": "t_window_boarded", + "F": "t_linoleum_white", + "J": "t_linoleum_white", + "7": "t_linoleum_white", + "-": "t_linoleum_white", + "$": "t_chainfence", + "~": "t_thconc_floor", + "_": "t_dirt", + ";": "t_chainfence_posts" }, - "items": { "A": { "item": "mail", "chance": 10, "repeat": [ 0, 3 ] } }, + "furniture": { "&": "f_wreckage", "=": "f_toilet", "{": "f_dumpster", "?": "f_beaded_door", "!": "f_region_flower" }, "place_items": [ - { "chance": 35, "item": "bedroom", "x": 7, "y": 5 }, { "chance": 35, "item": "harddrugs", "x": 9, "y": 6 }, { "chance": 45, "item": "harddrugs", "x": 11, "y": [ 5, 6 ] }, { "chance": 40, "item": "alcohol", "x": 6, "y": 11 }, @@ -57,144 +70,114 @@ { "chance": 25, "item": "trash", "x": 8, "y": [ 9, 10 ] }, { "chance": 25, "item": "trash", "x": 4, "y": 9 }, { "chance": 25, "item": "trash", "x": 6, "y": 7 }, - { "chance": 25, "item": "trash", "x": 9, "y": 5 }, - { "chance": 25, "item": "trash", "x": 18, "y": 4 }, - { "chance": 30, "item": "fridge", "x": 6, "y": 10 }, - { "chance": 15, "item": "snacks", "x": 4, "y": 11 }, - { "chance": 20, "item": "softdrugs", "x": 13, "y": 11 }, - { "chance": 30, "item": "dresser", "x": 4, "y": 4 }, - { "chance": 40, "item": "kitchen", "x": 5, "y": 11 } - ], - "place_toilets": [ { "x": 12, "y": 10 } ], + { "chance": 25, "item": "trash", "x": 9, "y": 5 } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": "house_crack1_roof", + "object": { + "fill_ter": "t_shingle_flat_roof", "rows": [ - "..........s...A._____...", - "..........s....._____...", - "._.._..##PPP.#.._____.p.", - "...|||a|||g|a||._____...", - ".._|hfBB|cccc&|p_____p_.", - ".__|ffff|HctcS|p_______.", - ".._||D|||cctcS|.______..", - "..#|TllccccHcca._____p..", - "..#|lllccccccc|p_____.._", - ".._|lll|ff|||D|._____p..", - ".._|llF|ffi|jf|#_____.p.", - "._.|eek|fff|mf|._____...", - "..#|w|||+|a||||._____...", - "...C#.PPPP..W#.p_____p..", - "._.C#_PPPP...._p_____pp.", - "...Cd..._p._.p_|fffff|p.", - ".._C.#...______|fffff|p.", - ".._b{_........_|fffff|p.", - "...C{.n.._...._|fffff|p.", - "...C#..d.__..._+fffffo..", - ".._C.4#.___qd._|ffffr|..", - ".._b------b----|||||||..", - "....___.___._..##..._._.", - ".................._....." + " ", + " ", + " ", + " |22222222223 ", + " |..........3 ", + " |..........3 ", + " |..........3 ", + " |..&....=..3 ", + " |..........3 ", + " |..........3 ", + " |....N.....3 ", + " 5..........3 ", + " |----------3 ", + " ", + " ", + " ....... ", + " ....... ", + " ....... ", + " ....... ", + " ....... ", + " ....... ", + " ....... ", + " ", + " " ], - "terrain": { - "#": "t_underbrush", - "&": "t_carpet_yellow", - "+": "t_door_c", - "-": "t_chainfence_h", - ".": "t_grass", - "4": "t_tree_deadpine", - "A": "t_grass", - "B": "t_floor", - "C": "t_chainfence_v", - "D": "t_door_o", - "F": "t_linoleum_gray", - "H": "t_carpet_yellow", - "P": "t_pavement", - "S": "t_carpet_yellow", - "T": "t_linoleum_gray", - "W": "t_grass", - "_": "t_dirt", - "a": "t_curtains", - "b": "t_chainfence_posts", - "c": "t_carpet_yellow", - "d": "t_grass", - "e": "t_linoleum_gray", - "f": "t_floor", - "g": "t_door_c_peep", - "h": "t_floor", - "i": "t_floor", - "j": "t_floor", - "k": "t_linoleum_gray", - "l": "t_linoleum_gray", - "m": "t_floor", - "n": "t_grass", - "o": "t_window_boarded", - "p": "t_dirt", - "q": "t_dirt", - "r": "t_floor", - "s": "t_sidewalk", - "t": "t_carpet_yellow", - "w": "t_window_domestic", - "{": "t_grass", - "|": "t_wall" - } - }, - "om_terrain": "house", - "type": "mapgen", - "weight": 100 + "palettes": [ "roof_palette" ], + "terrain": { ".": "t_shingle_flat_roof" } + } }, { "method": "json", + "om_terrain": "house_crack2", + "type": "mapgen", + "weight": 100, "object": { + "fill_ter": "t_floor", + "rows": [ + "..........`...p._____...", + "..........`....._____...", + "._.._..%%```.%.._____.!.", + "...###/###*#/##._____...", + ".._#d @@|,,,,Y#!_____!_.", + ".__# |E,s,H#!_______.", + ".._#|?|||,,s,H#.______..", + "..%#---,,,,E,,/._____!..", + "..%#---,,,,,,,#!_____.._", + ".._#---| |||?#._____!..", + ".._#--F| h|t #%_____.!.", + "._^#JJ7| >|9 #._____...", + "..%#/###*#/####._____...", + "...$%.````..&%.!_____!..", + "._.$%_````...._!_____!!.", + "...$...._[._.!.#~~~~~#!.", + ".._$.%..._____j#~~~~~#!.", + ".._;{_...G....j#~~~~~#!.", + "...${.=..KK..._#~~~~~#!.", + "...$%..!._G..._+~~~~~/..", + ".._$.[%.___W!._#~~~~~#..", + ".._;$$$$$$;$$$$#######..", + "....___.___._..%%..._._.", + ".................._....." + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { + "%": [ "t_region_shrub", "t_region_shrub_fruit", "t_region_shrub_decorative" ], + "[": [ [ "t_region_tree_fruit", 2 ], [ "t_region_tree_nut", 2 ], "t_region_tree_shade" ], + "!": "t_region_groundcover_urban", + "=": "t_region_groundcover_urban", + "{": "t_region_groundcover_urban", + "W": "t_region_groundcover_urban", + "&": "t_region_groundcover_urban", + "K": "t_region_groundcover_urban", + "G": "t_region_groundcover_urban", + "?": "t_door_curtain_c", + "H": "t_carpet_red", + "E": "t_carpet_red", + "s": "t_carpet_red", + "Y": "t_carpet_red", + ",": "t_carpet_red", + "`": "t_concrete", + "F": "t_linoleum_white", + "J": "t_linoleum_white", + "7": "t_linoleum_white", + "-": "t_linoleum_white", + "$": "t_chainfence", + "~": "t_thconc_floor", + "_": "t_dirt", + ";": "t_chainfence_posts", + "/": "t_window_boarded" + }, + "furniture": { "&": "f_wreckage", "=": "f_toilet", "{": "f_dumpster", "!": "f_region_flower" }, "place_item": [ { "item": "cannabis", "repeat": 1, "x": 5, "y": 15 }, { "item": "lawnmower", "repeat": 1, "x": 20, "y": 17 }, { "item": "cig_butt", "repeat": 1, "x": 13, "y": 20 } ], - "furniture": { - "#": "f_null", - "&": "f_trashcan", - "+": "f_null", - "-": "f_null", - ".": "f_null", - "4": "f_null", - "A": "f_mailbox", - "B": "f_bench", - "C": "f_null", - "D": "f_null", - "F": "f_fridge", - "H": "f_armchair", - "P": "f_null", - "S": "f_sofa", - "T": "f_table", - "W": "f_null", - "_": "f_null", - "a": "f_null", - "b": "f_bed", - "c": "f_null", - "d": "f_dandelion", - "e": "f_counter", - "f": "f_null", - "g": "f_table", - "h": "f_null", - "i": "f_dresser", - "j": "f_trashcan", - "k": "f_chair", - "l": "f_null", - "m": "f_toilet", - "n": "f_cupboard", - "o": "f_bathtub", - "p": "f_null", - "q": "f_null", - "r": "f_wreckage", - "s": "f_null", - "t": "f_table", - "u": "f_chair", - "v": "f_toilet", - "w": "f_null", - "x": "f_trashcan", - "{": "f_dumpster", - "|": "f_null" - }, - "items": { "A": { "item": "mail", "chance": 10, "repeat": [ 0, 3 ] } }, "place_items": [ - { "chance": 15, "item": "bedroom", "x": 7, "y": 5 }, { "chance": 25, "item": "harddrugs", "x": 9, "y": 6 }, { "chance": 55, "item": "harddrugs", "x": 11, "y": [ 5, 6 ] }, { "chance": 30, "item": "alcohol", "x": 6, "y": 11 }, @@ -206,143 +189,78 @@ { "chance": 25, "item": "trash", "x": 4, "y": 9 }, { "chance": 25, "item": "trash", "x": 6, "y": 7 }, { "chance": 25, "item": "trash", "x": 9, "y": 5 }, - { "chance": 25, "item": "trash", "x": 18, "y": 4 }, - { "chance": 30, "item": "fridge", "x": 6, "y": 10 }, - { "chance": 15, "item": "snacks", "x": 4, "y": 11 }, - { "chance": 20, "item": "softdrugs", "x": 13, "y": 11 }, - { "chance": 30, "item": "dresser", "x": 4, "y": 4 }, - { "chance": 40, "item": "kitchen", "x": 5, "y": 11 } - ], - "place_toilets": [ { "x": 12, "y": 10 } ], - "rows": [ - "..........s....._____A..", - "..........s....._____...", - "._.._..##PPP.#.._____.p.", - "...|||w|||h|w||._____...", - ".._|ifbb|cccc&|p_____p_.", - ".__|ffff|HctcS|p_______.", - ".._||+|||cctcS|.______..", - "..#|jllccccHccw._____p..", - "..#|lllccccccc|p_____.._", - ".._|lll|ff|||+|._____p..", - ".._|llF|ffk|mf|#_____.p.", - "._.|een|fff|of|._____...", - "..#|W|||D|q||||._____...", - "...C#.PPPP..r#.p_____p..", - "._.C#_PPPP...._p_____pp.", - "...Cd..._p._.p_|fffff|p.", - ".._C.#..._____B|fffff|p.", - ".._a{_..u.....B|fffff|p.", - "...C{.v.Tg...._|fffff|p.", - "...C#..dTg_..._Dfffffw..", - ".._C.4#.____d._|ffffx|..", - ".._a------a----|||||||..", - "....___.___._..##..._._.", - ".................._....." - ], - "terrain": { - "#": "t_underbrush", - "&": "t_carpet_yellow", - "+": "t_door_curtain_c", - "-": "t_chainfence_h", - ".": "t_grass", - "4": "t_tree_deadpine", - "A": "t_grass", - "B": "t_dirt", - "C": "t_chainfence_v", - "D": "t_door_c", - "F": "t_linoleum_gray", - "H": "t_carpet_yellow", - "P": "t_pavement", - "S": "t_carpet_yellow", - "T": "t_grass", - "W": "t_window_domestic", - "_": "t_dirt", - "a": "t_chainfence_posts", - "b": "t_floor", - "c": "t_carpet_yellow", - "d": "t_grass", - "e": "t_linoleum_gray", - "f": "t_floor", - "g": "t_dirt", - "h": "t_door_c_peep", - "i": "t_floor", - "j": "t_linoleum_gray", - "k": "t_floor", - "l": "t_linoleum_gray", - "m": "t_floor", - "n": "t_linoleum_gray", - "o": "t_floor", - "p": "t_dirt", - "q": "t_curtains", - "r": "t_grass", - "s": "t_sidewalk", - "t": "t_carpet_yellow", - "u": "t_grass", - "v": "t_grass", - "w": "t_window_boarded", - "x": "t_floor", - "{": "t_grass", - "|": "t_wall" - } - }, - "om_terrain": "house", - "type": "mapgen", - "weight": 100 + { "chance": 25, "item": "trash", "x": 18, "y": 4 } + ] + } }, { "method": "json", + "om_terrain": "house_crack3", + "type": "mapgen", + "weight": 100, "object": { - "furniture": { - "#": "f_null", - "&": "f_trashcan", - "+": "f_null", - "-": "f_null", - ".": "f_null", - "A": "f_armchair", - "B": "f_bench", - "C": "f_null", - "D": "f_dresser", - "F": "f_fridge", - "H": "f_sofa", - "L": "f_null", - "P": "f_mailbox", - "S": "f_null", - "T": "f_trashcan", - "W": "f_null", - "_": "f_null", - "a": "f_chair", - "b": "f_bed", - "c": "f_null", - "d": "f_null", - "e": "f_cupboard", - "f": "f_null", - "g": "f_null", - "h": "f_counter", - "i": "f_null", - "j": "f_sink", - "k": "f_sink", - "l": "f_null", - "m": "f_bathtub", - "n": "f_toilet", - "o": "f_null", - "p": "f_dryer", - "s": "f_null", - "t": "f_table", - "w": "f_null", - "{": "f_dumpster", - "|": "f_null" + "fill_ter": "t_floor", + "rows": [ + "__.._...p..``........___", + "_._........``........_..", + "._.__..#~~#~~#~~#####.._", + "_._____~~~~~~~~~# @@#___", + "_..___%~GK~~~G~~, #._.", + "___.####,##*##,## @@#...", + "___.# E| #%__", + ".._%/h |d #^_.", + "___.#f HHH ||?|#___", + ".__%#|||||Y #.__", + "___%#7---| #_..", + "_._%#J---- ||?||?|#.__", + "___./5---- | |--S#_._", + "___.#4--F|> | |9-t#%__", + "__._###,##,#*########%%_", + "___.;.........jj..%%;[%_", + "____$..............%$%..", + ".__.$%..............$___", + "._.%$..#*###........$__.", + "._!%$%.#~~K#%......%$_..", + ".._%$W%#~~G#%%.....{$%__", + "__._$%!#####!%%....{$%__", + "._%_;$$$$$$$;$$$$$$$;___", + "__.__%.._%..%_.___._____" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { + "%": [ "t_region_shrub", "t_region_shrub_fruit", "t_region_shrub_decorative" ], + "[": [ [ "t_region_tree_fruit", 2 ], [ "t_region_tree_nut", 2 ], "t_region_tree_shade" ], + "!": "t_region_groundcover_urban", + "=": "t_region_groundcover_urban", + "{": "t_region_groundcover_urban", + "W": "t_region_groundcover_urban", + "&": "t_region_groundcover_urban", + "#": "t_adobe_brick_wall", + "`": "t_concrete", + "F": "t_linoleum_white", + "J": "t_linoleum_white", + "7": "t_linoleum_white", + "4": "t_linoleum_white", + "5": "t_linoleum_white", + "9": "t_linoleum_white", + "S": "t_linoleum_white", + "t": "t_linoleum_white", + "-": "t_linoleum_white", + "$": "t_chainfence", + "~": "t_thconc_floor", + "K": "t_thconc_floor", + "G": "t_thconc_floor", + "_": "t_dirt", + ";": "t_chainfence_posts", + "/": "t_window_boarded_noglass", + ",": "t_window_bars" }, - "items": { "P": { "item": "mail", "chance": 10, "repeat": [ 0, 3 ] } }, + "furniture": { "&": "f_wreckage", "=": "f_toilet", "{": "f_dumpster", "?": "f_beaded_door", "!": "f_region_flower" }, "place_items": [ { "chance": 15, "item": "child_items", "x": 15, "y": 18 }, { "chance": 15, "item": "child_items", "x": 6, "y": 16 }, - { "chance": 15, "item": "fridge", "x": 8, "y": 13 }, { "chance": 10, "item": "softdrugs", "x": 17, "y": 12 }, { "chance": 15, "item": "hardware_bulk", "x": 14, "y": 12 }, - { "chance": 25, "item": "dresser", "x": 17, "y": 7 }, - { "chance": 25, "item": "bed", "x": 19, "y": 5 }, - { "chance": 25, "item": "bed", "x": 19, "y": 3 }, { "chance": 10, "item": "trash", "x": 10, "y": 12 }, { "chance": 10, "item": "trash", "x": 15, "y": 8 }, { "chance": 10, "item": "trash", "x": 19, "y": 6 }, @@ -358,79 +276,44 @@ { "chance": 35, "item": "trash", "x": 19, "y": [ 20, 21 ] }, { "chance": 35, "item": "trash", "x": 8, "y": 10 }, { "chance": 35, "item": "trash", "x": 10, "y": 9 }, - { "chance": 35, "item": "trash", "x": 21, "y": 7 }, - { "chance": 25, "item": "kitchen", "x": 5, "y": 10 } - ], - "place_toilets": [ { "x": 19, "y": 13 } ], + { "chance": 35, "item": "trash", "x": 21, "y": 7 } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": "house_crack3_roof", + "object": { + "fill_ter": "t_shingle_flat_roof", "rows": [ - "__.._...P..SS........___", - "_._........SS........_..", - "._.__..|ff|ff|ff|||||.._", - "_._____fffffffff|ffb|___", - "_..___sfffffffffwfff|._.", - "___.||||w||+||w||ffb|...", - "___.|ffffffffffA|fff|s__", - ".._#Waffffffffft|Dff|._.", - "___.|tfHHHffffff||d||___", - ".__s||||||&fffffffff|.__", - "___#|ellT|ffffffffff|_..", - "_._#|hllllfff||d||i||.__", - "___.Wjllllfff|ff|LLk|_._", - "___.|ellF|fff|ff|mLn|#__", - "__._|||g||g|+||||||||##_", - "___.C.........BB..##Cs#_", - "____c..............#c#..", - "___.c#..............c___", - "._.#c..|o|||........c__.", - "._s#c#.|fft|#......#c_..", - ".._#cp#|ffa|##.....{c#__", - "__._c#s|||||s##....{c#__", - "._#_C-------C-------C___", - "__.__#.._#..#_.___._____" + " ", + " ", + " |2222222222223 ", + " |............3 ", + " |............3 ", + " |22|............3 ", + " |...............3 ", + " |...............5 ", + " |.........N.....3 ", + " |...............3 ", + " |...............3 ", + " |...............3 ", + " |....&..........3 ", + " |...............3 ", + " |---------------3 ", + " ", + " ", + " ", + " ..... ", + " ..... ", + " ..... ", + " ..... ", + " ", + " " ], - "terrain": { - "#": "t_underbrush", - "&": "t_floor", - "+": "t_door_c_peep", - "-": "t_chainfence_h", - ".": "t_dirt", - "A": "t_floor", - "B": "t_dirt", - "C": "t_chainfence_posts", - "D": "t_floor", - "F": "t_linoleum_gray", - "H": "t_floor", - "L": "t_linoleum_white", - "P": "t_dirt", - "S": "t_sidewalk", - "T": "t_linoleum_gray", - "W": "t_window_boarded_noglass", - "_": "t_grass", - "a": "t_floor", - "b": "t_floor", - "c": "t_chainfence_v", - "d": "t_door_curtain_c", - "e": "t_linoleum_gray", - "f": "t_floor", - "g": "t_curtains", - "h": "t_linoleum_gray", - "i": "t_door_o", - "j": "t_linoleum_gray", - "k": "t_linoleum_white", - "l": "t_linoleum_gray", - "m": "t_linoleum_white", - "n": "t_linoleum_white", - "o": "t_door_locked", - "p": "t_dirt", - "s": "t_shrub", - "t": "t_floor", - "w": "t_window_bars", - "{": "t_dirt", - "|": "t_wall" - } - }, - "om_terrain": "house", - "type": "mapgen", - "weight": 100 + "palettes": [ "roof_palette" ], + "terrain": { ".": "t_shingle_flat_roof" } + } } ] diff --git a/data/json/mapgen/house/house_rural.json b/data/json/mapgen/house/house_rural.json index 0bd082a7dd74b..d81b143dd7929 100644 --- a/data/json/mapgen/house/house_rural.json +++ b/data/json/mapgen/house/house_rural.json @@ -1,201 +1,170 @@ [ { "method": "json", + "om_terrain": "rural_house1", + "type": "mapgen", + "weight": 100, "object": { - "furniture": { - "#": "f_null", - "&": "f_toilet", - "+": "f_null", - ".": "f_null", - "4": "f_null", - "7": "f_null", - "H": "f_armchair", - "P": "f_mailbox", - "S": "f_null", - "_": "f_null", - "a": "f_shower", - "b": "f_bed", - "c": "f_cupboard", - "d": "f_dresser", - "e": "f_sink", - "f": "f_null", - "o": "f_oven", - "s": "f_null", - "t": "f_table", - "w": "f_null", - "{": "f_fridge", - "|": "f_null" - }, - "items": { "P": { "item": "mail", "chance": 30, "repeat": [ 2, 5 ] } }, - "place_items": [ - { "chance": 75, "item": "fridge", "x": 5, "y": 14 }, - { "chance": 55, "item": "trash", "x": 19, "y": 7 }, - { "chance": 55, "item": "trash", "x": 8, "y": 3 }, - { "chance": 65, "item": "kitchen", "x": 8, "y": 15 }, - { "chance": 45, "item": "cannedfood", "x": [ 7, 8 ], "y": 14 }, - { "chance": 75, "item": "bed", "x": [ 2, 3 ], "y": 14 }, - { "chance": 75, "item": "dresser_stack", "x": 3, "y": 16 }, - { "chance": 65, "item": "magazines", "x": 7, "y": 18 } - ], - "place_toilets": [ { "x": 2, "y": 19 } ], + "fill_ter": "t_floor", "rows": [ "...._......__.__........", - ".....#..4..__.__..7.....", - "s..7.......__.___.#._.#.", - "_.#....7...__.__.....4..", - ".#4....#..___.__....##.4", - "..._.4....._____..7._.s.", - "..#.....4..__.__.....7..", - ".7..#......__.__..#.....", - ".......#...__.___._....s", - "._....._..___.__.....#..", - "..s........__.__.....4._", - "..........P__.__.#.....4", - ".7.###s#...______.4.#...", - ".||w||||||.______...7#..", - "_|bb|{occw._______..#...", - ".|ff|fffc|..______....7.", - "4|fd|ff|||s._______.....", - ".|ff+ffffw.________.....", - ".||||fftH|._________....", - ".|&f+ff|||.________.._4#", - "s|ae|ff+SSSS_______.....", - ".||||w||....______...#..", - "..#7.........____...#7..", - ".._#...7..........._..s." + ".....[..[..__.__..[.....", + "!..[.......__.___.%._.%.", + "_.%....[...__.__.....[..", + ".%[....%..___.__....%%.[", + "..._.[....._____..[._.!.", + "..%.....[..__.__.....[..", + ".[..%......__.__..%.....", + ".......%...__.___._....!", + "._....._..___.__.....%..", + "..!........__.__.....[._", + "..........p__.__.%.....[", + ".[.%%%!%...______.[.%...", + ".##o######.______...[%..", + "_#s@|FO51o._______..%...", + ".# @|4 7#..______....[.", + "[# d|6 2#!._______.....", + ".#y + hro.________.....", + ".#|||T r#._________....", + "^#t + y##.________.._[%", + "!#9S|E *---_______.....", + ".#### so...______...%..", + "..%[#HHR#....____...%[..", + ".._%##o##.........._..!." ], + "palettes": [ "standard_domestic_palette" ], "terrain": { - "#": "t_underbrush", - "&": "t_floor", - "+": "t_door_c", - ".": "t_grass", - "4": "t_tree_pine", - "7": "t_tree", - "H": "t_floor", - "P": "t_grass", - "S": "t_sidewalk", - "_": "t_dirt", - "a": "t_floor", - "b": "t_floor", - "c": "t_floor", - "d": "t_floor", - "e": "t_floor", - "f": "t_floor", - "o": "t_floor", - "s": "t_shrub", - "t": "t_floor", - "w": "t_window_domestic", - "{": "t_floor", - "|": "t_wall" - } - }, - "om_terrain": "rural_house", + "%": [ "t_region_shrub", "t_region_shrub_fruit", "t_region_shrub_decorative" ], + "[": [ [ "t_region_tree_fruit", 2 ], [ "t_region_tree_nut", 2 ], "t_region_tree_shade" ], + "!": "t_region_groundcover_urban", + "`": "t_concrete", + "#": "t_rock_wall", + "_": "t_dirt" + }, + "furniture": { "!": "f_region_flower" } + } + }, + { "type": "mapgen", - "weight": 100 + "method": "json", + "om_terrain": "rural_house1_roof", + "object": { + "fill_ter": "t_shingle_flat_roof", + "rows": [ + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " |22222223 ", + " |.......3 ", + " |.......3 ", + " |.....N.3 ", + " |.......3 ", + " |.&.....3 ", + " 5......33 ", + " |......3 ", + " |---.=.3 ", + " |...3 ", + " |---3 " + ], + "palettes": [ "roof_palette" ], + "terrain": { ".": "t_shingle_flat_roof" } + } }, { "method": "json", + "om_terrain": "rural_house2", + "type": "mapgen", + "weight": 100, "object": { - "furniture": { - "#": "f_null", - "&": "f_sink", - "+": "f_null", - ".": "f_null", - "1": "f_null", - "4": "f_null", - "7": "f_null", - "F": "f_fridge", - "H": "f_armchair", - "P": "f_mailbox", - "S": "f_null", - "T": "f_toilet", - "_": "f_null", - "a": "f_sofa", - "b": "f_bed", - "c": "f_counter", - "d": "f_dresser", - "e": "f_shower", - "f": "f_null", - "s": "f_null", - "t": "f_table", - "w": "f_null", - "{": "f_bookcase", - "|": "f_null" + "fill_ter": "t_floor", + "rows": [ + "........._.__.__..._....", + "..[..!.[..p__.__...[%...", + "._.........__.__........", + "...%%!!%_..__.__..[...[.", + "..####o##..__.__....%.._", + "_.#>R|bd#..__.__.%.[....", + ".%# + o..__.___..%.%[.", + "._o y|@@#%.__..__...._%.", + "..# |||#%._______......", + ".%# + t#j.________..!..", + "%%# R|S9#j.X________....", + ".%# R|||#!!!_______...[.", + "..# *---._______....", + "..# AA L####._______.%_.", + "..#6JJ Yrr#..______.[%.", + ".%#7 ho..______..%.", + "_%#2 TE y#%.______%...", + ".%#1 4|Hl o%._____.%.._", + ".^#FO5|Hl k#...____.....", + "..##o#######._...__._.!.", + "....._.!%%%.............", + "..u.%%.%.[...%........%[.", + "_%%[%...%.[...%_..%.....", + "...%...._...%[........%." + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { + "%": [ "t_region_shrub", "t_region_shrub_fruit", "t_region_shrub_decorative" ], + "[": [ [ "t_region_tree_fruit", 2 ], [ "t_region_tree_nut", 2 ], "t_region_tree_shade" ], + "!": "t_region_groundcover_urban", + "`": "t_concrete", + "_": "t_dirt" }, - "items": { "P": { "item": "mail", "chance": 30, "repeat": [ 2, 5 ] } }, + "furniture": { "!": "f_region_flower" }, "place_items": [ - { "chance": 55, "item": "homebooks", "x": 3, "y": 14 }, - { "chance": 65, "item": "cannedfood", "x": 5, "y": 17 }, { "chance": 55, "item": "knifeblock", "x": 4, "y": 18 }, - { "chance": 35, "item": "magazines", "x": 9, "y": 18 }, - { "chance": 35, "item": "jackets", "x": 7, "y": 18 }, { "chance": 55, "item": "book_survival", "x": 3, "y": 15 }, - { "chance": 65, "item": "dresser_stack", "x": 7, "y": 5 }, - { "chance": 15, "item": "trash", "x": 7, "y": 15 }, - { "chance": 15, "item": "trash", "x": 4, "y": 11 }, - { "chance": 15, "item": "trash", "x": 3, "y": 6 }, - { "chance": 75, "item": "bed", "x": [ 6, 7 ], "y": 7 }, - { "chance": 75, "item": "fridge", "x": 3, "y": 18 }, { "chance": 35, "item": "misc_smoking", "x": 9, "y": 17 }, { "chance": 35, "item": "misc_smoking", "x": 10, "y": 14 } ], - "place_monsters": [ { "monster": "GROUP_DOGS", "x": 5, "y": 14 } ], - "place_toilets": [ { "x": 7, "y": 9 } ], + "place_monsters": [ { "monster": "GROUP_DOGS", "x": 5, "y": 14 } ] + } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": "rural_house2_roof", + "object": { + "fill_ter": "t_shingle_flat_roof", "rows": [ - "........._.__.__..._....", - "..7..s.1..P__.__...7#...", - "._.........__.__........", - "...##ss#_..__.__..1...1.", - "..||||w||..__.__....#.._", - "_.|ff|fd|..__.__.#.4....", - ".#|ff+ffw..__.___..#.#7.", - "._wff|bb|#.__..__...._#.", - "..|ff||||#._______......", - ".#|ff+fT|..________..s..", - "##|ff|&e|...________....", - ".#|ff||||..._______...1.", - "..|fffff+SSS._______....", - "..|fffff||||._______.#_.", - "..|{ffffHfH|..______.4#.", - ".#|{fffffffw..______..#.", - "_#|ffffffff|#.______#...", - ".#|ffc|aftfw#._____.#.._", - "..|Fc&|aftf|...____.....", - "..||w|||||||._...__._.s.", - "....._.s###.............", - "...##.#.4...#........#7.", - "_##7#...#.1...#_..#.....", - "...#...._...#7........#." + " ", + " ", + " ", + " ", + " |222223 ", + " |.....3 ", + " |.....3 ", + " |.....3 ", + " |.....3 ", + " |..=..3 ", + " |.....3 ", + " |.....3 ", + " |.....3 ", + " |.....3223 ", + " |........3 ", + " |.....N..3 ", + " |........3 ", + " |........3 ", + " 5...&....3 ", + " |--------3 ", + " ", + " ", + " ", + " " ], - "terrain": { - "#": "t_underbrush", - "&": "t_floor", - "+": "t_door_c", - ".": "t_grass", - "1": "t_tree_young", - "4": "t_tree_pine", - "7": "t_tree", - "F": "t_floor", - "H": "t_floor", - "P": "t_grass", - "S": "t_sidewalk", - "T": "t_floor", - "_": "t_dirt", - "a": "t_floor", - "b": "t_floor", - "c": "t_floor", - "d": "t_floor", - "e": "t_floor", - "f": "t_floor", - "s": "t_shrub", - "t": "t_floor", - "w": "t_window_domestic", - "{": "t_floor", - "|": "t_wall" - } - }, - "om_terrain": "rural_house", - "type": "mapgen", - "weight": 100 + "palettes": [ "roof_palette" ], + "terrain": { ".": "t_shingle_flat_roof" } + } } ] diff --git a/data/json/overmap/multitile_city_buildings.json b/data/json/overmap/multitile_city_buildings.json index 32316c283b480..09f32ac4fa665 100644 --- a/data/json/overmap/multitile_city_buildings.json +++ b/data/json/overmap/multitile_city_buildings.json @@ -2896,5 +2896,24 @@ { "point": [ 0, 0, 1 ], "overmap": "house_garage8_roof_north" }, { "point": [ 0, 0, -1 ], "overmap": "basement" } ] + }, + { + "type": "city_building", + "id": "rural_house1", + "locations": [ "land" ], + "overmaps": [ + { "point": [ 0, 0, 0 ], "overmap": "rural_house1_north" }, + { "point": [ 0, 0, 1 ], "overmap": "rural_house1_roof_north" } + ] + }, + { + "type": "city_building", + "id": "rural_house2", + "locations": [ "land" ], + "overmaps": [ + { "point": [ 0, 0, 0 ], "overmap": "rural_house2_north" }, + { "point": [ 0, 0, 1 ], "overmap": "rural_house2_roof_north" }, + { "point": [ 0, 0, -1 ], "overmap": "basement" } + ] } ] diff --git a/data/json/overmap/overmap_terrain/overmap_terrain_residential.json b/data/json/overmap/overmap_terrain/overmap_terrain_residential.json index 8ab071cdb171c..86c76ea23f24b 100644 --- a/data/json/overmap/overmap_terrain/overmap_terrain_residential.json +++ b/data/json/overmap/overmap_terrain/overmap_terrain_residential.json @@ -58,12 +58,35 @@ }, { "type": "overmap_terrain", - "id": "rural_house", - "copy-from": "generic_city_building_no_sidewalk", - "name": "rural house", - "sym": "#", - "color": "blue", - "flags": [ "GENERIC_LOOT", "RISK_LOW", "SOURCE_SAFETY" ] + "id": "rural_house1", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2 + }, + { + "type": "overmap_terrain", + "id": "rural_house1_roof", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2 + }, + { + "type": "overmap_terrain", + "id": "rural_house2", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2 + }, + { + "type": "overmap_terrain", + "id": "rural_house2_roof", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2 }, { "type": "overmap_terrain", diff --git a/data/json/regional_map_settings.json b/data/json/regional_map_settings.json index 46aedad21a26e..cf634da55f75c 100644 --- a/data/json/regional_map_settings.json +++ b/data/json/regional_map_settings.json @@ -571,6 +571,8 @@ "house_garage6": 50, "house_garage7": 50, "house_garage8": 50, + "rural_house1": 50, + "rural_house2": 50, "house_toolshed": 50, "house_suicide": 20, "house_quiverfull": 30, From fd0fe4fe5ed71d79ab10528bcb4eab08503b441f Mon Sep 17 00:00:00 2001 From: John Bytheway Date: Wed, 8 Jan 2020 21:48:03 -0500 Subject: [PATCH 26/43] clear_player -> clear_avatar, clear_character The tests have a clear_player helper. I wanted to use it with an NPC, so I've split it into clear_avatar for the avatar, and clear_character for a generic character. Currently clear_character actually takes a player& argument, because not all the things it clears are yet in Character, but that's the direction we're headed. --- tests/crafting_test.cpp | 2 +- tests/memorial_test.cpp | 2 +- tests/npc_talk_test.cpp | 2 +- tests/player_helpers.cpp | 9 ++++++--- tests/player_helpers.h | 3 ++- tests/reloading_test.cpp | 8 ++++---- tests/stomach_contents_test.cpp | 2 +- tests/vehicle_interact_test.cpp | 2 +- tests/wield_times_test.cpp | 4 ++-- 9 files changed, 19 insertions(+), 15 deletions(-) diff --git a/tests/crafting_test.cpp b/tests/crafting_test.cpp index 4f98387a6249d..56e37d9adaf52 100644 --- a/tests/crafting_test.cpp +++ b/tests/crafting_test.cpp @@ -260,7 +260,7 @@ TEST_CASE( "crafting_with_a_companion", "[.]" ) static void prep_craft( const recipe_id &rid, const std::vector &tools, bool expect_craftable ) { - clear_player(); + clear_avatar(); clear_map(); const tripoint test_origin( 60, 60, 0 ); diff --git a/tests/memorial_test.cpp b/tests/memorial_test.cpp index 2ab932db43d2c..c28f144f4410e 100644 --- a/tests/memorial_test.cpp +++ b/tests/memorial_test.cpp @@ -42,7 +42,7 @@ TEST_CASE( "memorials" ) { memorial_logger &m = g->memorial(); m.clear(); - clear_player(); + clear_avatar(); event_bus &b = g->events(); diff --git a/tests/npc_talk_test.cpp b/tests/npc_talk_test.cpp index c59e1c55a223c..fd8253705768f 100644 --- a/tests/npc_talk_test.cpp +++ b/tests/npc_talk_test.cpp @@ -87,7 +87,7 @@ static void change_om_type( const std::string &new_type ) static npc &prep_test( dialogue &d ) { - clear_player(); + clear_avatar(); CHECK( !g->u.in_vehicle ); const tripoint test_origin( 15, 15, 0 ); g->u.setpos( test_origin ); diff --git a/tests/player_helpers.cpp b/tests/player_helpers.cpp index 1b0185b7050cf..2b9842604a3e7 100644 --- a/tests/player_helpers.cpp +++ b/tests/player_helpers.cpp @@ -38,10 +38,8 @@ bool player_has_item_of_type( const std::string &type ) return !matching_items.empty(); } -void clear_player() +void clear_character( player &dummy ) { - player &dummy = g->u; - // Remove first worn item until there are none left. std::list temp; while( dummy.takeoff( dummy.i_at( -2 ), &temp ) ); @@ -71,6 +69,11 @@ void clear_player() g->place_player( spot ); } +void clear_avatar() +{ + clear_character( g->u ); +} + void process_activity( player &dummy ) { do { diff --git a/tests/player_helpers.h b/tests/player_helpers.h index c92649c4e3f6e..c5512638c32e6 100644 --- a/tests/player_helpers.h +++ b/tests/player_helpers.h @@ -8,7 +8,8 @@ class player; int get_remaining_charges( const std::string &tool_id ); bool player_has_item_of_type( const std::string & ); -void clear_player(); +void clear_character( player & ); +void clear_avatar(); void process_activity( player &dummy ); #endif diff --git a/tests/reloading_test.cpp b/tests/reloading_test.cpp index 47c02e4aa4cb0..09d8aa5da8d79 100644 --- a/tests/reloading_test.cpp +++ b/tests/reloading_test.cpp @@ -23,7 +23,7 @@ TEST_CASE( "reload_gun_with_integral_magazine", "[reload],[gun]" ) { player &dummy = g->u; - clear_player(); + clear_avatar(); // Make sure the player doesn't drop anything :P dummy.wear_item( item( "backpack", 0 ) ); @@ -45,7 +45,7 @@ TEST_CASE( "reload_gun_with_integral_magazine_using_speedloader", "[reload],[gun { player &dummy = g->u; - clear_player(); + clear_avatar(); // Make sure the player doesn't drop anything :P dummy.wear_item( item( "backpack", 0 ) ); @@ -80,7 +80,7 @@ TEST_CASE( "reload_gun_with_swappable_magazine", "[reload],[gun]" ) { player &dummy = g->u; - clear_player(); + clear_avatar(); // Make sure the player doesn't drop anything :P dummy.wear_item( item( "backpack", 0 ) ); @@ -140,7 +140,7 @@ TEST_CASE( "automatic_reloading_action", "[reload],[gun]" ) { player &dummy = g->u; - clear_player(); + clear_avatar(); // Make sure the player doesn't drop anything :P dummy.wear_item( item( "backpack", 0 ) ); diff --git a/tests/stomach_contents_test.cpp b/tests/stomach_contents_test.cpp index 89d86403380b0..4c84da558ad02 100644 --- a/tests/stomach_contents_test.cpp +++ b/tests/stomach_contents_test.cpp @@ -18,7 +18,7 @@ static void reset_time() player &p = g->u; p.set_stored_kcal( p.get_healthy_kcal() ); p.set_hunger( 0 ); - clear_player(); + clear_avatar(); } static void pass_time( player &p, time_duration amt ) diff --git a/tests/vehicle_interact_test.cpp b/tests/vehicle_interact_test.cpp index d916ba0a68aa9..5a617b7bf32d8 100644 --- a/tests/vehicle_interact_test.cpp +++ b/tests/vehicle_interact_test.cpp @@ -20,7 +20,7 @@ static void test_repair( const std::vector &tools, bool expect_craftable ) { - clear_player(); + clear_avatar(); clear_map(); const tripoint test_origin( 60, 60, 0 ); diff --git a/tests/wield_times_test.cpp b/tests/wield_times_test.cpp index 2d16fd1efa5cc..efbdeea64574b 100644 --- a/tests/wield_times_test.cpp +++ b/tests/wield_times_test.cpp @@ -80,14 +80,14 @@ static void do_test( const bool generating_cases ) TEST_CASE( "Wield time test", "[wield]" ) { - clear_player(); + clear_avatar(); clear_map(); do_test( false ); } TEST_CASE( "Wield time make cases", "[.]" ) { - clear_player(); + clear_avatar(); clear_map(); do_test( true ); } From 4f709ac801cea062dc5cfa88a4c2124df310255f Mon Sep 17 00:00:00 2001 From: John Bytheway Date: Wed, 8 Jan 2020 21:50:28 -0500 Subject: [PATCH 27/43] Add a spawn_npc helper in the tests Previously npc_test.cpp had its own spawn_npc helper. Pull that out into player_helpers, so that it can be used in other tests. --- tests/npc_test.cpp | 28 +++++++++------------------- tests/player_helpers.cpp | 16 ++++++++++++++++ tests/player_helpers.h | 4 ++++ 3 files changed, 29 insertions(+), 19 deletions(-) diff --git a/tests/npc_test.cpp b/tests/npc_test.cpp index 2988840121c43..b50fa708317a9 100644 --- a/tests/npc_test.cpp +++ b/tests/npc_test.cpp @@ -30,6 +30,8 @@ #include "point.h" #include "memory_fast.h" +#include "player_helpers.h" + class Creature; static void on_load_test( npc &who, const time_duration &from, const time_duration &to ) @@ -434,26 +436,14 @@ TEST_CASE( "npc_can_target_player" ) clear_npcs(); clear_creatures(); - const auto spawn_npc = []( const int x, const int y, const std::string & npc_class ) { - const string_id test_guy( npc_class ); - const character_id model_id = g->m.place_npc( point( 10, 10 ), test_guy, true ); - g->load_npcs(); - - npc *guy = g->find_npc( model_id ); - REQUIRE( guy != nullptr ); - CHECK( !guy->in_vehicle ); - guy->setpos( g->u.pos() + point( x, y ) ); - return guy; - }; - - npc *hostile = spawn_npc( 0, 1, "thug" ); - REQUIRE( rl_dist( g->u.pos(), hostile->pos() ) <= 1 ); - hostile->set_attitude( NPCATT_KILL ); - hostile->name = "Enemy NPC"; + npc &hostile = spawn_npc( g->u.pos().xy() + point_south, "thug" ); + REQUIRE( rl_dist( g->u.pos(), hostile.pos() ) <= 1 ); + hostile.set_attitude( NPCATT_KILL ); + hostile.name = "Enemy NPC"; INFO( get_list_of_npcs( "NPCs after spawning one" ) ); - hostile->regen_ai_cache(); - REQUIRE( hostile->current_target() != nullptr ); - CHECK( hostile->current_target() == static_cast( &g->u ) ); + hostile.regen_ai_cache(); + REQUIRE( hostile.current_target() != nullptr ); + CHECK( hostile.current_target() == static_cast( &g->u ) ); } diff --git a/tests/player_helpers.cpp b/tests/player_helpers.cpp index 2b9842604a3e7..ebc1a5f46d023 100644 --- a/tests/player_helpers.cpp +++ b/tests/player_helpers.cpp @@ -10,10 +10,14 @@ #include "itype.h" #include "player.h" #include "inventory.h" +#include "map.h" +#include "npc.h" #include "player_activity.h" #include "type_id.h" #include "point.h" +#include "catch/catch.hpp" + int get_remaining_charges( const std::string &tool_id ) { const inventory crafting_inv = g->u.crafting_inventory(); @@ -83,3 +87,15 @@ void process_activity( player &dummy ) } } while( dummy.activity ); } + +npc &spawn_npc( const point &p, const std::string &npc_class ) +{ + const string_id test_guy( npc_class ); + const character_id model_id = g->m.place_npc( p, test_guy, true ); + g->load_npcs(); + + npc *guy = g->find_npc( model_id ); + REQUIRE( guy != nullptr ); + CHECK( !guy->in_vehicle ); + return *guy; +} diff --git a/tests/player_helpers.h b/tests/player_helpers.h index c5512638c32e6..bd3016366c9a6 100644 --- a/tests/player_helpers.h +++ b/tests/player_helpers.h @@ -4,7 +4,9 @@ #include +class npc; class player; +struct point; int get_remaining_charges( const std::string &tool_id ); bool player_has_item_of_type( const std::string & ); @@ -12,4 +14,6 @@ void clear_character( player & ); void clear_avatar(); void process_activity( player &dummy ); +npc &spawn_npc( const point &, const std::string &npc_class ); + #endif From 236af6be39f2941de713bfb79b0609db3e6ce38b Mon Sep 17 00:00:00 2001 From: John Bytheway Date: Wed, 8 Jan 2020 21:51:38 -0500 Subject: [PATCH 28/43] Use spawn_npc in behaviour_test We were seeing intermittent failures on Mingw in check_npc_behavior_tree. This turned out to be because the NPCs the test constructed in a rather ad hoc manner violated the invariants for the NPC class (in particular, its two position members were inconsistent). To avoid that, create the NPC via the new, safer spawn_npc function from player_helpers.h. --- tests/behavior_test.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/tests/behavior_test.cpp b/tests/behavior_test.cpp index 8673d10bf6a26..52e7fa8f81cce 100644 --- a/tests/behavior_test.cpp +++ b/tests/behavior_test.cpp @@ -1,7 +1,6 @@ #include #include -#include "catch/catch.hpp" #include "behavior.h" #include "behavior_oracle.h" #include "behavior_strategy.h" @@ -12,6 +11,9 @@ #include "string_id.h" #include "weather.h" +#include "catch/catch.hpp" +#include "player_helpers.h" + namespace behavior { extern sequential_t default_sequential; @@ -131,13 +133,12 @@ TEST_CASE( "behavior_tree", "[behavior]" ) } // Make assertions about loaded behaviors. -TEST_CASE( "check_npc_behavior_tree", "[behavior]" ) +TEST_CASE( "check_npc_behavior_tree", "[npc][behavior]" ) { behavior::tree npc_needs; npc_needs.add( &string_id( "npc_needs" ).obj() ); - npc test_npc; - test_npc.normalize(); - test_npc.setpos( { 50, 50, 0 } ); + npc &test_npc = spawn_npc( { 50, 50 }, "test_talker" ); + clear_character( test_npc ); behavior::character_oracle_t oracle( &test_npc ); CHECK( npc_needs.tick( &oracle ) == "idle" ); SECTION( "Freezing" ) { From 273538e01397d077e2693d92c94cf29e314662b4 Mon Sep 17 00:00:00 2001 From: John Bytheway Date: Sat, 11 Jan 2020 08:28:51 -0500 Subject: [PATCH 29/43] Add clamp_inclusive(point, rectangle) --- src/point.cpp | 5 +++++ src/point.h | 1 + 2 files changed, 6 insertions(+) diff --git a/src/point.cpp b/src/point.cpp index 7456e7abc219c..9b72b54cf4a5e 100644 --- a/src/point.cpp +++ b/src/point.cpp @@ -32,3 +32,8 @@ point clamp_half_open( const point &p, const rectangle &r ) { return point( clamp( p.x, r.p_min.x, r.p_max.x - 1 ), clamp( p.y, r.p_min.y, r.p_max.y - 1 ) ); } + +point clamp_inclusive( const point &p, const rectangle &r ) +{ + return point( clamp( p.x, r.p_min.x, r.p_max.x ), clamp( p.y, r.p_min.y, r.p_max.y ) ); +} diff --git a/src/point.h b/src/point.h index b228bf7423ebb..c4df6b5249563 100644 --- a/src/point.h +++ b/src/point.h @@ -231,6 +231,7 @@ struct rectangle { // Useful for example to round an arbitrary point to the nearest point on the // screen, or the nearest point in a particular submap. point clamp_half_open( const point &p, const rectangle &r ); +point clamp_inclusive( const point &p, const rectangle &r ); struct box { tripoint p_min; From feec573f7ec2338570743e95f5fca04d635d229e Mon Sep 17 00:00:00 2001 From: John Bytheway Date: Sat, 11 Jan 2020 08:29:46 -0500 Subject: [PATCH 30/43] Call map::shift correctly from game::update_map map::shift is only supposed to shift a single submap at a time. However, game::update_map could sometimes shift it more than one at a time. Add a check in map::shift for this error, and update game::update_map to not cause it. --- src/game.cpp | 9 ++++++++- src/map.cpp | 5 +++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/game.cpp b/src/game.cpp index fb2e6f073528d..e56f1aec02a62 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -10624,7 +10624,14 @@ point game::update_map( int &x, int &y ) } // this handles loading/unloading submaps that have scrolled on or off the viewport - m.shift( shift ); + // NOLINTNEXTLINE(cata-use-named-point-constants) + rectangle size_1( point( -1, -1 ), point( 1, 1 ) ); + point remaining_shift = shift; + while( remaining_shift != point_zero ) { + point this_shift = clamp_inclusive( remaining_shift, size_1 ); + m.shift( this_shift ); + remaining_shift -= this_shift; + } // Shift monsters shift_monsters( tripoint( shift, 0 ) ); diff --git a/src/map.cpp b/src/map.cpp index f497e4eef5657..367e006ae730e 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -6335,6 +6335,11 @@ void map::shift( const point &sp ) if( sp == point_zero ) { return; // Skip this? } + + if( abs( sp.x ) > 1 || abs( sp.y ) > 1 ) { + debugmsg( "map::shift called with a shift of more than one submap" ); + } + const tripoint abs = get_abs_sub(); set_abs_sub( abs + sp ); From 1749d8eacc679c4fc7c5ce529d51e6333569d3c0 Mon Sep 17 00:00:00 2001 From: John Bytheway Date: Sat, 11 Jan 2020 08:37:44 -0500 Subject: [PATCH 31/43] Regression test for map shifting bug Pull out the interesting part of the just-resolved bug and make a new unit test for it. --- src/map.cpp | 26 ++++++++++++++++++++++++++ src/map.h | 3 +++ tests/map_test.cpp | 9 +++++++++ 3 files changed, 38 insertions(+) diff --git a/src/map.cpp b/src/map.cpp index 367e006ae730e..f02adb6c2a86a 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -4362,6 +4362,32 @@ void map::process_active_items() process_items( true, process_map_items, std::string {} ); } +std::vector map::check_submap_active_item_consistency() +{ + std::vector result; + for( int z = -OVERMAP_DEPTH; z < OVERMAP_HEIGHT; ++z ) { + for( int x = 0; x < MAPSIZE; ++x ) { + for( int y = 0; y < MAPSIZE; ++y ) { + tripoint p( x, y, z ); + submap *s = get_submap_at_grid( p ); + bool has_active_items = !s->active_items.get().empty(); + bool map_has_active_items = submaps_with_active_items.count( p + abs_sub.xy() ); + if( has_active_items != map_has_active_items ) { + result.push_back( p + abs_sub.xy() ); + } + } + } + } + for( const tripoint &p : submaps_with_active_items ) { + tripoint rel = p - abs_sub.xy(); + rectangle map( point_zero, point( MAPSIZE, MAPSIZE ) ); + if( !map.contains_half_open( rel.xy() ) ) { + result.push_back( p ); + } + } + return result; +} + void map::process_items( const bool active, map::map_process_func processor, const std::string &signal ) { diff --git a/src/map.h b/src/map.h index e295c04501ccd..b56f20a7d4647 100644 --- a/src/map.h +++ b/src/map.h @@ -982,6 +982,9 @@ class map // Items void process_active_items(); + // Returns points for all submaps with inconsistent state relative to + // the list in map. Used in tests. + std::vector check_submap_active_item_consistency(); // Accessor that returns a wrapped reference to an item stack for safe modification. map_stack i_at( const tripoint &p ); map_stack i_at( const point &p ) { diff --git a/tests/map_test.cpp b/tests/map_test.cpp index 81ce9179eaa9d..420d150951c5c 100644 --- a/tests/map_test.cpp +++ b/tests/map_test.cpp @@ -78,3 +78,12 @@ TEST_CASE( "tinymap_bounds_checking" ) } } } + +TEST_CASE( "place_player_can_safely_move_multiple_submaps" ) +{ + // Regression test for the situation where game::place_player would misuse + // map::shift if the resulting shift exceeded a single submap, leading to a + // broken active item cache. + g->place_player( tripoint_zero ); + CHECK( g->m.check_submap_active_item_consistency().empty() ); +} From 35d93e346032925339a3ec0bf6af1c2b0d1453f9 Mon Sep 17 00:00:00 2001 From: John Bytheway Date: Sat, 11 Jan 2020 09:24:09 -0500 Subject: [PATCH 32/43] Set standard_npc position at construction time This allows tests to avoid calling set_pos on such, which is not safe, since it assumes the npc is a 'real' one. --- src/dump.cpp | 20 ++++++++-------- src/mattack_actors.cpp | 4 ++-- src/npc.cpp | 5 ++-- src/npc.h | 4 +++- tests/crafting_test.cpp | 2 +- tests/melee_test.cpp | 43 +++++++++++++++++++---------------- tests/ranged_balance_test.cpp | 12 ++++++---- tests/throwing_test.cpp | 2 +- 8 files changed, 51 insertions(+), 41 deletions(-) diff --git a/src/dump.cpp b/src/dump.cpp index d74c684505944..cd4925156e094 100644 --- a/src/dump.cpp +++ b/src/dump.cpp @@ -50,16 +50,16 @@ bool game::dump_stats( const std::string &what, dump_mode mode, int scol = 0; // sorting column std::map test_npcs; - test_npcs[ "S1" ] = standard_npc( "S1", { "gloves_survivor", "mask_lsurvivor" }, 4, 8, 10, 8, - 10 /* DEX 10, PER 10 */ ); - test_npcs[ "S2" ] = standard_npc( "S2", { "gloves_fingerless", "sunglasses" }, 4, 8, 8, 8, - 10 /* PER 10 */ ); - test_npcs[ "S3" ] = standard_npc( "S3", { "gloves_plate", "helmet_plate" }, 4, 10, 8, 8, - 8 /* STAT 10 */ ); - test_npcs[ "S4" ] = standard_npc( "S4", {}, 0, 8, 10, 8, 10 /* DEX 10, PER 10 */ ); - test_npcs[ "S5" ] = standard_npc( "S5", {}, 4, 8, 10, 8, 10 /* DEX 10, PER 10 */ ); - test_npcs[ "S6" ] = standard_npc( "S6", { "gloves_hsurvivor", "mask_hsurvivor" }, 4, 8, 10, 8, - 10 /* DEX 10, PER 10 */ ); + test_npcs[ "S1" ] = standard_npc( "S1", { 0, 0, 2 }, { "gloves_survivor", "mask_lsurvivor" }, + 4, 8, 10, 8, 10 /* DEX 10, PER 10 */ ); + test_npcs[ "S2" ] = standard_npc( "S2", { 0, 0, 3 }, { "gloves_fingerless", "sunglasses" }, + 4, 8, 8, 8, 10 /* PER 10 */ ); + test_npcs[ "S3" ] = standard_npc( "S3", { 0, 0, 4 }, { "gloves_plate", "helmet_plate" }, + 4, 10, 8, 8, 8 /* STAT 10 */ ); + test_npcs[ "S4" ] = standard_npc( "S4", { 0, 0, 5 }, {}, 0, 8, 10, 8, 10 /* DEX 10, PER 10 */ ); + test_npcs[ "S5" ] = standard_npc( "S5", { 0, 0, 6 }, {}, 4, 8, 10, 8, 10 /* DEX 10, PER 10 */ ); + test_npcs[ "S6" ] = standard_npc( "S6", { 0, 0, 7 }, { "gloves_hsurvivor", "mask_hsurvivor" }, + 4, 8, 10, 8, 10 /* DEX 10, PER 10 */ ); std::map test_items; test_items[ "G1" ] = item( "glock_19" ).ammo_set( "9mm" ); diff --git a/src/mattack_actors.cpp b/src/mattack_actors.cpp index ab1f8bb3704ea..307c64bdff858 100644 --- a/src/mattack_actors.cpp +++ b/src/mattack_actors.cpp @@ -537,9 +537,9 @@ void gun_actor::shoot( monster &z, Creature &target, const gun_mode_id &mode ) c return; } - standard_npc tmp( _( "The " ) + z.name(), {}, 8, fake_str, fake_dex, fake_int, fake_per ); + standard_npc tmp( _( "The " ) + z.name(), z.pos(), {}, 8, + fake_str, fake_dex, fake_int, fake_per ); tmp.set_fake( true ); - tmp.setpos( z.pos() ); tmp.set_attitude( z.friendly ? NPCATT_FOLLOW : NPCATT_KILL ); tmp.recoil = 0; // no need to aim diff --git a/src/npc.cpp b/src/npc.cpp index 28ee25a717be2..373e9e02c1bda 100644 --- a/src/npc.cpp +++ b/src/npc.cpp @@ -146,11 +146,12 @@ npc::npc() } } -standard_npc::standard_npc( const std::string &name, const std::vector &clothing, +standard_npc::standard_npc( const std::string &name, const tripoint &pos, + const std::vector &clothing, int sk_lvl, int s_str, int s_dex, int s_int, int s_per ) { this->name = name; - position = tripoint_zero; + position = pos; str_cur = std::max( s_str, 0 ); str_max = std::max( s_str, 0 ); diff --git a/src/npc.h b/src/npc.h index cc40cfc466a5c..0da7fc7df655a 100644 --- a/src/npc.h +++ b/src/npc.h @@ -1365,7 +1365,9 @@ class npc : public player class standard_npc : public npc { public: - standard_npc( const std::string &name = "", const std::vector &clothing = {}, + standard_npc( const std::string &name = "", + const tripoint &pos = tripoint( HALF_MAPSIZE_X, HALF_MAPSIZE_Y, 0 ), + const std::vector &clothing = {}, int sk_lvl = 4, int s_str = 8, int s_dex = 8, int s_int = 8, int s_per = 8 ); }; diff --git a/tests/crafting_test.cpp b/tests/crafting_test.cpp index 56e37d9adaf52..ffa8064224476 100644 --- a/tests/crafting_test.cpp +++ b/tests/crafting_test.cpp @@ -218,7 +218,7 @@ TEST_CASE( "crafting_with_a_companion", "[.]" ) REQUIRE( r->skill_used ); GIVEN( "a companion who can help with crafting" ) { - standard_npc who( "helper", {}, 0 ); + standard_npc who( "helper" ); who.set_attitude( NPCATT_FOLLOW ); who.spawn_at_sm( 0, 0, 0 ); diff --git a/tests/melee_test.cpp b/tests/melee_test.cpp index 0f03f85dc7fa4..7208ed4e30fc0 100644 --- a/tests/melee_test.cpp +++ b/tests/melee_test.cpp @@ -67,7 +67,9 @@ static void check_near( float prob, const float expected, const float tolerance } } -const int num_iters = 10000; +static const int num_iters = 10000; + +static constexpr tripoint dude_pos( HALF_MAPSIZE_X, HALF_MAPSIZE_Y, 0 ); TEST_CASE( "Character attacking a zombie", "[.melee]" ) { @@ -75,14 +77,14 @@ TEST_CASE( "Character attacking a zombie", "[.melee]" ) INFO( "Zombie has get_dodge() == " + std::to_string( zed.get_dodge() ) ); SECTION( "8/8/8/8, no skills, unarmed" ) { - standard_npc dude( "TestCharacter", {}, 0, 8, 8, 8, 8 ); + standard_npc dude( "TestCharacter", dude_pos, {}, 0, 8, 8, 8, 8 ); const float prob = brute_probability( dude, zed, num_iters ); INFO( full_attack_details( dude ) ); check_near( prob, 0.6f, 0.1f ); } SECTION( "8/8/8/8, 3 all skills, two-by-four" ) { - standard_npc dude( "TestCharacter", {}, 3, 8, 8, 8, 8 ); + standard_npc dude( "TestCharacter", dude_pos, {}, 3, 8, 8, 8, 8 ); dude.weapon = item( "2x4" ); const float prob = brute_probability( dude, zed, num_iters ); INFO( full_attack_details( dude ) ); @@ -90,7 +92,7 @@ TEST_CASE( "Character attacking a zombie", "[.melee]" ) } SECTION( "10/10/10/10, 8 all skills, katana" ) { - standard_npc dude( "TestCharacter", {}, 8, 10, 10, 10, 10 ); + standard_npc dude( "TestCharacter", dude_pos, {}, 8, 10, 10, 10, 10 ); dude.weapon = item( "katana" ); const float prob = brute_probability( dude, zed, num_iters ); INFO( full_attack_details( dude ) ); @@ -104,14 +106,14 @@ TEST_CASE( "Character attacking a manhack", "[.melee]" ) INFO( "Manhack has get_dodge() == " + std::to_string( manhack.get_dodge() ) ); SECTION( "8/8/8/8, no skills, unarmed" ) { - standard_npc dude( "TestCharacter", {}, 0, 8, 8, 8, 8 ); + standard_npc dude( "TestCharacter", dude_pos, {}, 0, 8, 8, 8, 8 ); const float prob = brute_probability( dude, manhack, num_iters ); INFO( full_attack_details( dude ) ); check_near( prob, 0.2f, 0.05f ); } SECTION( "8/8/8/8, 3 all skills, two-by-four" ) { - standard_npc dude( "TestCharacter", {}, 3, 8, 8, 8, 8 ); + standard_npc dude( "TestCharacter", dude_pos, {}, 3, 8, 8, 8, 8 ); dude.weapon = item( "2x4" ); const float prob = brute_probability( dude, manhack, num_iters ); INFO( full_attack_details( dude ) ); @@ -119,7 +121,7 @@ TEST_CASE( "Character attacking a manhack", "[.melee]" ) } SECTION( "10/10/10/10, 8 all skills, katana" ) { - standard_npc dude( "TestCharacter", {}, 8, 10, 10, 10, 10 ); + standard_npc dude( "TestCharacter", dude_pos, {}, 8, 10, 10, 10, 10 ); dude.weapon = item( "katana" ); const float prob = brute_probability( dude, manhack, num_iters ); INFO( full_attack_details( dude ) ); @@ -133,7 +135,7 @@ TEST_CASE( "Zombie attacking a character", "[.melee]" ) INFO( "Zombie has get_hit() == " + std::to_string( zed.get_hit() ) ); SECTION( "8/8/8/8, no skills, unencumbered" ) { - standard_npc dude( "TestCharacter", {}, 0, 8, 8, 8, 8 ); + standard_npc dude( "TestCharacter", dude_pos, {}, 0, 8, 8, 8, 8 ); const float prob = brute_probability( zed, dude, num_iters ); INFO( "Has get_dodge() == " + std::to_string( dude.get_dodge() ) ); THEN( "Character has no significant dodge bonus or penalty" ) { @@ -150,15 +152,16 @@ TEST_CASE( "Zombie attacking a character", "[.melee]" ) } SECTION( "10/10/10/10, 3 all skills, good cotton armor" ) { - standard_npc dude( "TestCharacter", { "hoodie", "jeans", "long_underpants", "long_undertop", "longshirt" }, - 3, 10, 10, 10, 10 ); + standard_npc dude( "TestCharacter", dude_pos, + { "hoodie", "jeans", "long_underpants", "long_undertop", "longshirt" }, + 3, 10, 10, 10, 10 ); const float prob = brute_probability( zed, dude, num_iters ); INFO( "Has get_dodge() == " + std::to_string( dude.get_dodge() ) ); check_near( prob, 0.2f, 0.05f ); } SECTION( "10/10/10/10, 8 all skills, survivor suit" ) { - standard_npc dude( "TestCharacter", { "survivor_suit" }, 8, 10, 10, 10, 10 ); + standard_npc dude( "TestCharacter", dude_pos, { "survivor_suit" }, 8, 10, 10, 10, 10 ); const float prob = brute_probability( zed, dude, num_iters ); INFO( "Has get_dodge() == " + std::to_string( dude.get_dodge() ) ); check_near( prob, 0.025f, 0.0125f ); @@ -171,7 +174,7 @@ TEST_CASE( "Manhack attacking a character", "[.melee]" ) INFO( "Manhack has get_hit() == " + std::to_string( manhack.get_hit() ) ); SECTION( "8/8/8/8, no skills, unencumbered" ) { - standard_npc dude( "TestCharacter", {}, 0, 8, 8, 8, 8 ); + standard_npc dude( "TestCharacter", dude_pos, {}, 0, 8, 8, 8, 8 ); const float prob = brute_probability( manhack, dude, num_iters ); INFO( "Has get_dodge() == " + std::to_string( dude.get_dodge() ) ); THEN( "Character has no significant dodge bonus or penalty" ) { @@ -183,15 +186,16 @@ TEST_CASE( "Manhack attacking a character", "[.melee]" ) } SECTION( "10/10/10/10, 3 all skills, good cotton armor" ) { - standard_npc dude( "TestCharacter", { "hoodie", "jeans", "long_underpants", "long_undertop", "longshirt" }, - 3, 10, 10, 10, 10 ); + standard_npc dude( "TestCharacter", dude_pos, + { "hoodie", "jeans", "long_underpants", "long_undertop", "longshirt" }, + 3, 10, 10, 10, 10 ); const float prob = brute_probability( manhack, dude, num_iters ); INFO( "Has get_dodge() == " + std::to_string( dude.get_dodge() ) ); check_near( prob, 0.6f, 0.05f ); } SECTION( "10/10/10/10, 8 all skills, survivor suit" ) { - standard_npc dude( "TestCharacter", { "survivor_suit" }, 8, 10, 10, 10, 10 ); + standard_npc dude( "TestCharacter", dude_pos, { "survivor_suit" }, 8, 10, 10, 10, 10 ); const float prob = brute_probability( manhack, dude, num_iters ); INFO( "Has get_dodge() == " + std::to_string( dude.get_dodge() ) ); check_near( prob, 0.25f, 0.05f ); @@ -204,7 +208,7 @@ TEST_CASE( "Hulk smashing a character", "[.], [melee], [monattack]" ) INFO( "Hulk has get_hit() == " + std::to_string( zed.get_hit() ) ); SECTION( "8/8/8/8, no skills, unencumbered" ) { - standard_npc dude( "TestCharacter", {}, 0, 8, 8, 8, 8 ); + standard_npc dude( "TestCharacter", dude_pos, {}, 0, 8, 8, 8, 8 ); const float prob = brute_special_probability( zed, dude, num_iters ); INFO( "Has get_dodge() == " + std::to_string( dude.get_dodge() ) ); THEN( "Character has no significant dodge bonus or penalty" ) { @@ -216,15 +220,16 @@ TEST_CASE( "Hulk smashing a character", "[.], [melee], [monattack]" ) } SECTION( "10/10/10/10, 3 all skills, good cotton armor" ) { - standard_npc dude( "TestCharacter", { "hoodie", "jeans", "long_underpants", "long_undertop", "longshirt" }, - 3, 10, 10, 10, 10 ); + standard_npc dude( "TestCharacter", dude_pos, + { "hoodie", "jeans", "long_underpants", "long_undertop", "longshirt" }, + 3, 10, 10, 10, 10 ); const float prob = brute_special_probability( zed, dude, num_iters ); INFO( "Has get_dodge() == " + std::to_string( dude.get_dodge() ) ); check_near( prob, 0.75f, 0.05f ); } SECTION( "10/10/10/10, 8 all skills, survivor suit" ) { - standard_npc dude( "TestCharacter", { "survivor_suit" }, 8, 10, 10, 10, 10 ); + standard_npc dude( "TestCharacter", dude_pos, { "survivor_suit" }, 8, 10, 10, 10, 10 ); const float prob = brute_special_probability( zed, dude, num_iters ); INFO( "Has get_dodge() == " + std::to_string( dude.get_dodge() ) ); check_near( prob, 0.2f, 0.05f ); diff --git a/tests/ranged_balance_test.cpp b/tests/ranged_balance_test.cpp index 32e27ac394a67..4b345bbedc2d7 100644 --- a/tests/ranged_balance_test.cpp +++ b/tests/ranged_balance_test.cpp @@ -21,7 +21,9 @@ #include "item_location.h" #include "json.h" #include "player.h" +#include "player_helpers.h" #include "material.h" +#include "skill.h" #include "type_id.h" #include "point.h" @@ -101,9 +103,7 @@ static void arm_shooter( npc &shooter, const std::string &gun_type, static void equip_shooter( npc &shooter, const std::vector &apparel ) { - const tripoint shooter_pos( 60, 60, 0 ); CHECK( !shooter.in_vehicle ); - shooter.setpos( shooter_pos ); shooter.worn.clear(); shooter.inv.clear(); for( const std::string article : apparel ) { @@ -246,10 +246,12 @@ static void assert_encumbrance( npc &shooter, int encumbrance ) } } +static constexpr tripoint shooter_pos( 60, 60, 0 ); + TEST_CASE( "unskilled_shooter_accuracy", "[ranged] [balance]" ) { clear_map(); - standard_npc shooter( "Shooter", {}, 0, 8, 8, 8, 7 ); + standard_npc shooter( "Shooter", shooter_pos, {}, 0, 8, 8, 8, 7 ); equip_shooter( shooter, { "bastsandals", "armguard_chitin", "armor_chitin", "beekeeping_gloves", "fencing_mask" } ); assert_encumbrance( shooter, 10 ); @@ -278,7 +280,7 @@ TEST_CASE( "unskilled_shooter_accuracy", "[ranged] [balance]" ) TEST_CASE( "competent_shooter_accuracy", "[ranged] [balance]" ) { clear_map(); - standard_npc shooter( "Shooter", {}, 5, 10, 10, 10, 10 ); + standard_npc shooter( "Shooter", shooter_pos, {}, 5, 10, 10, 10, 10 ); equip_shooter( shooter, { "cloak_wool", "footrags_wool", "gloves_wraps_fur", "glasses_safety", "balclava" } ); assert_encumbrance( shooter, 5 ); @@ -307,7 +309,7 @@ TEST_CASE( "competent_shooter_accuracy", "[ranged] [balance]" ) TEST_CASE( "expert_shooter_accuracy", "[ranged] [balance]" ) { clear_map(); - standard_npc shooter( "Shooter", {}, 10, 20, 20, 20, 20 ); + standard_npc shooter( "Shooter", shooter_pos, {}, 10, 20, 20, 20, 20 ); equip_shooter( shooter, { } ); assert_encumbrance( shooter, 0 ); diff --git a/tests/throwing_test.cpp b/tests/throwing_test.cpp index 183e18f19ccc4..abeafd288e8dc 100644 --- a/tests/throwing_test.cpp +++ b/tests/throwing_test.cpp @@ -25,7 +25,7 @@ TEST_CASE( "throwing distance test", "[throwing], [balance]" ) { - const standard_npc thrower( "Thrower", {}, 4, 10, 10, 10, 10 ); + const standard_npc thrower( "Thrower", tripoint( 60, 60, 0 ), {}, 4, 10, 10, 10, 10 ); item grenade( "grenade" ); CHECK( thrower.throw_range( grenade ) >= 30 ); CHECK( thrower.throw_range( grenade ) <= 35 ); From 976250a8ac819433bf57162afffe4d6d0160733f Mon Sep 17 00:00:00 2001 From: John Bytheway Date: Sat, 11 Jan 2020 21:28:22 -0500 Subject: [PATCH 33/43] Astyle --- src/player.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/player.cpp b/src/player.cpp index 0522841d2c5bd..dfe38bdb0079c 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -5163,9 +5163,9 @@ void player::use( item_location loc ) invoke_item( &used, loc.position() ); } else if( !used.is_craft() && !used.type->has_use() && ( used.is_food() || - used.is_medication() || - used.get_contained().is_food() || - used.get_contained().is_medication() ) ) { + used.is_medication() || + used.get_contained().is_food() || + used.get_contained().is_medication() ) ) { consume( loc ); } else if( used.is_book() ) { From e97941a95284e154aa19dec77741fc273932190f Mon Sep 17 00:00:00 2001 From: Matthew Taylor Date: Sun, 12 Jan 2020 04:21:08 +0000 Subject: [PATCH 34/43] Rework monster equipment (#36377) --- data/json/itemgroups/misc.json | 2 +- data/json/itemgroups/tools.json | 2 +- data/json/items/armor/pets_horse_armor.json | 121 +++++---- data/json/items/migration.json | 5 + data/json/items/tools.json | 15 +- .../isherwood_farms/cabin_isherwood.json | 2 +- .../isherwood_farm/NPC_Jesse_Isherwood.json | 4 +- data/json/professions.json | 2 +- data/json/recipes/other/tool.json | 7 +- doc/JSON_FLAGS.md | 1 + src/activity_item_handling.cpp | 22 +- src/character.cpp | 2 +- src/creature.cpp | 3 +- src/item.cpp | 56 +++++ src/item.h | 2 + src/monexamine.cpp | 232 ++++++++---------- src/monexamine.h | 2 +- src/monster.cpp | 73 ++++-- src/monster.h | 12 +- src/savegame_json.cpp | 49 +++- src/vehicle_use.cpp | 2 +- 21 files changed, 374 insertions(+), 242 deletions(-) diff --git a/data/json/itemgroups/misc.json b/data/json/itemgroups/misc.json index 8b82da7eab8a3..690a78a1a51e5 100644 --- a/data/json/itemgroups/misc.json +++ b/data/json/itemgroups/misc.json @@ -147,6 +147,6 @@ "id": "horse_gear", "type": "item_group", "//": "Horse vehicle items", - "items": [ [ "riding_saddle", 50 ], [ "yoke_harness", 50 ] ] + "items": [ [ "horse_tack", 50 ], [ "yoke_harness", 50 ] ] } ] diff --git a/data/json/itemgroups/tools.json b/data/json/itemgroups/tools.json index f8944c0505ea3..4f2e4ba7f2a1a 100644 --- a/data/json/itemgroups/tools.json +++ b/data/json/itemgroups/tools.json @@ -304,7 +304,7 @@ [ "chem_hexamine", 10 ], [ "esbit_stove", 15 ], [ "mess_tin", 5 ], - [ "riding_saddle", 3 ], + [ "horse_tack", 3 ], [ "saddlebag", 5 ], [ "lifestraw", 3 ], [ "acetylene_machine", 2 ] diff --git a/data/json/items/armor/pets_horse_armor.json b/data/json/items/armor/pets_horse_armor.json index 6e68706090474..af1d6a32e9c34 100644 --- a/data/json/items/armor/pets_horse_armor.json +++ b/data/json/items/armor/pets_horse_armor.json @@ -1,65 +1,85 @@ [ { + "abstract": "horse_armor", "type": "PET_ARMOR", - "id": "kevlar_armor_horse", + "name": "horse armor", "symbol": "[", - "looks_like": "hsurvivor_suit", + "min_pet_vol": "380 L", + "max_pet_vol": "1000 L", + "pet_bodytype": "horse", + "flags": [ "IS_PET_ARMOR" ] + }, + { + "type": "PET_ARMOR", + "id": "kevlar_armor_horse", + "copy-from": "horse_armor", "color": "yellow", - "name": "Kevlar-lined horse peto", + "name": { "str": "Kevlar-lined horse peto" }, "description": "A heavy mattress-like armor of cloth, leather and thick linings of Kevlar, originally used as protection in bullfighting. You could put this on a friendly horse.", "price": 50000, "price_postapoc": 5000, - "material": [ "kevlar" ], - "weight": "30000 g", + "material": [ "cotton", "leather", "kevlar" ], + "weight": "30 kg", "volume": "150 L", - "bashing": 10, - "to_hit": -3, - "flags": [ "IS_PET_ARMOR", "NO_SALVAGE" ], - "material_thickness": 2, - "max_pet_vol": "1000000 ml", - "min_pet_vol": "380000 ml", - "pet_bodytype": "horse" + "material_thickness": 10 }, { "type": "PET_ARMOR", "id": "acidchitin_armor_horse", - "copy-from": "kevlar_armor_horse", + "copy-from": "horse_armor", "color": "green", - "name": "biosilicified chitin horse body armor", + "name": { "str": "biosilicified chitin horse armor" }, "description": "A makeshift assembly of criniere, peytral and croupiere made from biosilicified chitin fitted to a thin mesh. You could put this on a friendly horse.", - "proportional": { "price": 1.67, "price_postapoc": 1.67, "weight": 1.15 }, - "relative": { "environmental_protection": 7 }, - "material": [ "acidchitin" ] + "price": 120000, + "price_postapoc": 12000, + "material": [ "acidchitin", "steel" ], + "weight": "35 kg", + "volume": "150 L", + "material_thickness": 6, + "environmental_protection": 7 }, { "type": "PET_ARMOR", "id": "chitin_armor_horse", - "copy-from": "acidchitin_armor_horse", - "name": "chitin horse body armor", + "copy-from": "horse_armor", + "color": "green", + "name": { "str": "chitin horse armor" }, "description": "A makeshift assembly of criniere, peytral and croupiere made from chitin fitted to a thin mesh. You could put this on a friendly horse.", - "relative": { "price": -15000, "price_postapoc": -1500, "environmental_protection": -3 }, - "material": [ "chitin" ] + "price": 100000, + "price_postapoc": 10000, + "material": [ "chitin", "steel" ], + "weight": "35 kg", + "volume": "150 L", + "material_thickness": 6, + "environmental_protection": 4 }, { "type": "PET_ARMOR", "id": "chainmail_armor_horse", - "copy-from": "kevlar_armor_horse", - "color": "light_red", - "name": "chainmail horse coat", + "copy-from": "horse_armor", + "color": "green", + "name": { "str": "chainmail horse armor" }, "description": "A heavy covering of chainmail, suitably made for horses as protection. You could put this on a friendly horse.", - "proportional": { "price": 0.83, "price_postapoc": 0.83, "weight": 1.3 }, - "relative": { "material_thickness": -2 }, - "material": [ "iron", "budget_steel" ] + "price": 40000, + "price_postapoc": 4000, + "material": [ "steel", "leather" ], + "weight": "40 kg", + "volume": "150 L", + "material_thickness": 6 }, { "type": "PET_ARMOR", "id": "leather_armor_horse", - "copy-from": "kevlar_armor_horse", - "color": "brown", - "name": "boiled leather horse barding with caparison", + "copy-from": "horse_armor", + "color": "green", + "name": { "str": "boiled leather horse barding with caprison" }, "description": "A full barding for horses consisting of boiled leather and cloth undercovering. This caparison is depicting a battle between a monstrous dragon and regal griffin. You could put this on a friendly horse.", - "proportional": { "price": 0.58, "price_postapoc": 0.58, "weight": 0.5 }, + "price": 30000, + "price_postapoc": 3000, "material": [ "cotton", "leather" ], + "weight": "15 kg", + "volume": "150 L", + "material_thickness": 6, "snippet_category": [ { "id": "battle", @@ -98,40 +118,37 @@ { "type": "PET_ARMOR", "id": "leatherbone_armor_horse", - "copy-from": "leather_armor_horse", + "copy-from": "horse_armor", + "color": "green", "name": { "str": "boiled leather horse barding with bones", "str_pl": "boiled leather horse bardings with bones" }, "description": "Decorative bones affixed to leather horse barding to invoke fear in bandits and raiders and traders all! You could put this on a friendly horse.", - "relative": { "price": 1500, "price_postapoc": 150, "weight": 500 }, - "material": [ "bone", "leather" ] + "price": 45000, + "price_postapoc": 4500, + "material": [ "bone", "leather" ], + "weight": "17 kg", + "volume": "150 L", + "material_thickness": 6 }, { "type": "PET_ARMOR", "id": "rubber_armor_horse", - "copy-from": "kevlar_armor_horse", - "color": "dark_gray", - "name": "horse rain sheet", + "copy-from": "horse_armor", + "color": "green", + "name": { "str": "horse rain sheet" }, "description": "A thin plastic covering adapted for horses to protect from acid rain and other caustic sources. You could put this on a friendly horse.", - "proportional": { "price": 0.34, "price_postapoc": 0.34, "min_pet_vol": 0.6, "weight": 0.45 }, - "relative": { "environmental_protection": 10, "material_thickness": -2 }, - "material": [ "neoprene", "plastic" ] - }, - { - "type": "PET_ARMOR", - "id": "superalloy_armor_horse", - "copy-from": "kevlar_armor_horse", - "color": "light_cyan", - "name": "superalloy crafted horse barding", - "description": "The latest fashion statement and protection for polo equestrians and ahistorical reenactor steeds alike, designed and manufactured by Land Dwarf Industries. You could put this on a friendly horse.", - "proportional": { "price": 100, "price_postapoc": 100, "min_pet_vol": 0.72, "weight": 0.72 }, - "relative": { "environmental_protection": 10, "storage": 32 }, - "material": [ "superalloy" ] + "price": 15000, + "price_postapoc": 1500, + "material": [ "neoprene", "plastic" ], + "weight": "14 kg", + "volume": "150 L", + "material_thickness": 3 }, { "id": "saddlebag", "type": "ARMOR", "name": { "str": "pair of saddle bags", "str_pl": "pairs of saddle bags" }, "description": "A pair of covered pouches laid across the back of a horse behind the saddle.", - "weight": "1000 g", + "weight": "1 kg", "volume": "7500 ml", "price": 15000, "material": [ "leather" ], diff --git a/data/json/items/migration.json b/data/json/items/migration.json index d930b0e8d342d..9e705e69b8946 100644 --- a/data/json/items/migration.json +++ b/data/json/items/migration.json @@ -959,6 +959,11 @@ "type": "MIGRATION", "replace": "40x46mm_m651" }, + { + "id": "riding_saddle", + "type": "MIGRATION", + "replace": "horse_tack" + }, { "id": "ballistic_vest", "type": "MIGRATION", diff --git a/data/json/items/tools.json b/data/json/items/tools.json index 6c632afb46b47..25a44eae20847 100644 --- a/data/json/items/tools.json +++ b/data/json/items/tools.json @@ -26,18 +26,19 @@ "flags": [ "RADIO_MODABLE", "RADIO_INVOKE_PROC", "BOMB", "GRENADE" ] }, { - "id": "riding_saddle", + "id": "horse_tack", "type": "TOOL", - "name": "riding saddle", - "description": "A saddle that can be placed on a tamed animal that is capable of being ridden.", - "weight": "800 g", - "volume": "2 L", + "name": "horse tack", + "description": "A saddle, bridle, and associated tack that can be placed on a tamed animal that is capable of being ridden.", + "weight": "2 kg", + "volume": "7 L", "price": 0, "to_hit": -1, "bashing": 5, - "material": [ "leather" ], + "material": [ "leather", "steel" ], "symbol": "M", - "color": "yellow" + "color": "yellow", + "flags": [ "TACK" ] }, { "id": "EMPbomb_act", diff --git a/data/json/mapgen/isherwood_farms/cabin_isherwood.json b/data/json/mapgen/isherwood_farms/cabin_isherwood.json index a9ce290580fd4..0efc2782ac4bb 100644 --- a/data/json/mapgen/isherwood_farms/cabin_isherwood.json +++ b/data/json/mapgen/isherwood_farms/cabin_isherwood.json @@ -159,7 +159,7 @@ "liquids": { "l": { "liquid": "water_clean", "amount": [ 0, 100 ] } }, "place_loot": [ { "item": "cattlefodder", "x": [ 17, 18 ], "y": [ 2, 4 ], "chance": 100 }, - { "item": "riding_saddle", "x": 15, "y": 2, "chance": 100 }, + { "item": "horse_tack", "x": 15, "y": 2, "chance": 100 }, { "item": "stepladder", "x": 15, "y": 4, "chance": 100 }, { "item": "straw_pile", "x": [ 17, 18 ], "y": [ 2, 4 ], "chance": 30, "repeat": [ 2, 4 ] } ], diff --git a/data/json/npcs/isherwood_farm/NPC_Jesse_Isherwood.json b/data/json/npcs/isherwood_farm/NPC_Jesse_Isherwood.json index 631da27f5e4cb..de326b28672d6 100644 --- a/data/json/npcs/isherwood_farm/NPC_Jesse_Isherwood.json +++ b/data/json/npcs/isherwood_farm/NPC_Jesse_Isherwood.json @@ -206,7 +206,7 @@ "success_lie": "Show me the bodies.", "failure": "It was a lost cause anyways…" }, - "end": { "opinion": { "trust": 1, "value": 1 }, "effect": [ { "u_buy_item": "riding_saddle", "count": 1 } ] } + "end": { "opinion": { "trust": 1, "value": 1 }, "effect": [ { "u_buy_item": "horse_tack", "count": 1 } ] } }, { "id": "MISSION_ISHERWOOD_JESSE_2", @@ -232,7 +232,7 @@ "success_lie": "Show me the bodies.", "failure": "It was a lost cause anyways…" }, - "end": { "opinion": { "trust": 1, "value": 1 }, "effect": [ { "u_buy_item": "riding_saddle", "count": 1 } ] } + "end": { "opinion": { "trust": 1, "value": 1 }, "effect": [ { "u_buy_item": "horse_tack", "count": 1 } ] } }, { "id": "MISSION_ISHERWOOD_JESSE_2", diff --git a/data/json/professions.json b/data/json/professions.json index b4eda0c9233a0..526e293de8856 100644 --- a/data/json/professions.json +++ b/data/json/professions.json @@ -3881,7 +3881,7 @@ "cowboy_hat", "boots_western", "wristwatch", - "riding_saddle", + "horse_tack", "pockknife", "cattlefodder", "cattlefodder", diff --git a/data/json/recipes/other/tool.json b/data/json/recipes/other/tool.json index db9729a4b4133..4e23bc24726a9 100644 --- a/data/json/recipes/other/tool.json +++ b/data/json/recipes/other/tool.json @@ -209,16 +209,15 @@ ] }, { - "result": "riding_saddle", + "result": "horse_tack", "type": "recipe", "category": "CC_OTHER", "subcategory": "CSC_OTHER_TOOLS", - "skill_used": "tailor", - "difficulty": 4, + "skills_required": [ [ "fabrication", 3 ], [ "tailor", 4 ] ], "time": 300000, "book_learn": [ [ "textbook_tailor", 4 ], [ "manual_tailor", 5 ], [ "tailor_portfolio", 4 ] ], "using": [ [ "sewing_standard", 100 ], [ "cordage", 2 ] ], - "components": [ [ [ "leather", 30 ], [ "tanned_hide", 5 ], [ "fur", 30 ], [ "tanned_pelt", 5 ] ] ] + "components": [ [ [ "leather", 30 ], [ "tanned_hide", 5 ], [ "fur", 30 ], [ "tanned_pelt", 5 ] ], [ [ "wire", 2 ] ] ] }, { "result": "jack", diff --git a/doc/JSON_FLAGS.md b/doc/JSON_FLAGS.md index a86e1ba5f0257..e92e3a1a3f7bb 100644 --- a/doc/JSON_FLAGS.md +++ b/doc/JSON_FLAGS.md @@ -682,6 +682,7 @@ List of known flags, used in both `terrain.json` and `furniture.json`. - ```REQUIRES_TINDER``` ... Requires tinder to be present on the tile this item tries to start a fire on. - ```SLEEP_AID``` ... This item helps in sleeping. - ```SLOW_WIELD``` ... Has an additional time penalty upon wielding. For melee weapons and guns this is offset by the relevant skill. Stacks with "NEEDS_UNFOLD". +- ```TACK``` ... Item can be used as tack for a mount. - ```TIE_UP``` ... Item can be used to tie up a creature. - ```TINDER``` ... This item can be used as tinder for lighting a fire with a REQUIRES_TINDER flagged firestarter. - ```TRADER_AVOID``` ... NPCs will not start with this item. Use this for active items (e.g. flashlight (on)), dangerous items (e.g. active bomb), fake item or unusual items (e.g. unique quest item). diff --git a/src/activity_item_handling.cpp b/src/activity_item_handling.cpp index 5d331f1cd6fd0..da168f52642df 100644 --- a/src/activity_item_handling.cpp +++ b/src/activity_item_handling.cpp @@ -219,25 +219,17 @@ static void pass_to_ownership_handling( item obj, player *p ) static void stash_on_pet( const std::list &items, monster &pet, player *p ) { - // Add volume of the bag itself since it is going to be subtracted later in the for-each loop. - units::volume remaining_volume = pet.inv.empty() ? 0_ml : - pet.inv.front().get_storage() + pet.inv.front().volume(); - units::mass remaining_weight = pet.weight_capacity(); + units::volume remaining_volume = pet.storage_item->get_storage() - pet.get_carried_volume(); + units::mass remaining_weight = pet.weight_capacity() - pet.get_carried_weight(); - for( const auto &it : pet.inv ) { - remaining_volume -= it.volume(); - remaining_weight -= it.weight(); - } - - for( auto &it : items ) { - pet.add_effect( effect_controlled, 5_turns ); + for( const item &it : items ) { if( it.volume() > remaining_volume ) { - add_msg( m_bad, _( "%1$s did not fit and fell to the %2$s." ), - it.display_name(), g->m.name( pet.pos() ) ); + add_msg( m_bad, _( "%1$s did not fit and fell to the %2$s." ), it.display_name(), + g->m.name( pet.pos() ) ); g->m.add_item_or_charges( pet.pos(), it ); } else if( it.weight() > remaining_weight ) { - add_msg( m_bad, _( "%1$s is too heavy and fell to the %2$s." ), - it.display_name(), g->m.name( pet.pos() ) ); + add_msg( m_bad, _( "%1$s is too heavy and fell to the %2$s." ), it.display_name(), + g->m.name( pet.pos() ) ); g->m.add_item_or_charges( pet.pos(), it ); } else { pet.add_item( it ); diff --git a/src/character.cpp b/src/character.cpp index 2785d85b8b23c..036e9688690b0 100644 --- a/src/character.cpp +++ b/src/character.cpp @@ -611,7 +611,7 @@ void Character::mount_creature( monster &z ) z.remove_effect( effect_tied ); if( z.tied_item ) { i_add( *z.tied_item ); - z.tied_item = cata::nullopt; + z.tied_item.reset(); } } z.mounted_player_id = getID(); diff --git a/src/creature.cpp b/src/creature.cpp index c3f49a6c13aad..f268e9578653b 100644 --- a/src/creature.cpp +++ b/src/creature.cpp @@ -685,7 +685,8 @@ void Creature::deal_projectile_attack( Creature *source, dealt_projectile_attack if( z ) { if( !proj.get_drop().is_null() ) { z->add_effect( effect_tied, 1_turns, num_bp, true ); - z->tied_item = proj.get_drop(); + item drop_item = proj.get_drop(); + z->tied_item = cata::make_value( proj.get_drop() ); } else { add_msg( m_debug, "projectile with TANGLE effect, but no drop item specified" ); } diff --git a/src/item.cpp b/src/item.cpp index a5573eeaf7a27..534ebedf07964 100644 --- a/src/item.cpp +++ b/src/item.cpp @@ -2201,6 +2201,61 @@ void item::armor_info( std::vector &info, const iteminfo_query *parts, } } +void item::animal_armor_info( std::vector &info, const iteminfo_query *parts, + int /* batch */, + bool /* debug */ ) const +{ + if( !is_pet_armor() ) { + return; + } + + const std::string space = " "; + + int converted_storage_scale = 0; + const double converted_storage = round_up( convert_volume( get_storage().value(), + &converted_storage_scale ), 2 ); + if( parts->test( iteminfo_parts::ARMOR_STORAGE ) && converted_storage > 0 ) { + const iteminfo::flags f = converted_storage_scale == 0 ? iteminfo::no_flags : iteminfo::is_decimal; + info.push_back( iteminfo( "ARMOR", space + _( "Storage: " ), + string_format( " %s", volume_units_abbr() ), + f, converted_storage ) ); + } + + // Whatever the last entry was, we want a newline at this point + info.back().bNewLine = true; + + if( parts->test( iteminfo_parts::ARMOR_PROTECTION ) ) { + info.push_back( iteminfo( "ARMOR", _( "Protection: Bash: " ), "", + iteminfo::no_newline, bash_resist() ) ); + info.push_back( iteminfo( "ARMOR", space + _( "Cut: " ), cut_resist() ) ); + info.push_back( iteminfo( "ARMOR", space + _( "Acid: " ), "", + iteminfo::no_newline, acid_resist() ) ); + info.push_back( iteminfo( "ARMOR", space + _( "Fire: " ), "", + iteminfo::no_newline, fire_resist() ) ); + info.push_back( iteminfo( "ARMOR", space + _( "Environmental: " ), + get_base_env_resist( *this ) ) ); + if( type->can_use( "GASMASK" ) || type->can_use( "DIVE_TANK" ) ) { + info.push_back( iteminfo( "ARMOR", + _( "Protection when active: " ) ) ); + info.push_back( iteminfo( "ARMOR", space + _( "Acid: " ), "", + iteminfo::no_newline, + acid_resist( false, get_base_env_resist_w_filter() ) ) ); + info.push_back( iteminfo( "ARMOR", space + _( "Fire: " ), "", + iteminfo::no_newline, + fire_resist( false, get_base_env_resist_w_filter() ) ) ); + info.push_back( iteminfo( "ARMOR", space + _( "Environmental: " ), + get_env_resist( get_base_env_resist_w_filter() ) ) ); + } + + if( damage() > 0 ) { + info.push_back( iteminfo( "ARMOR", + _( "Protection values are reduced by damage and " + "you may be able to improve them by repairing this " + "item." ) ) ); + } + } +} + void item::book_info( std::vector &info, const iteminfo_query *parts, int /* batch */, bool /* debug */ ) const { @@ -3301,6 +3356,7 @@ std::string item::info( std::vector &info, const iteminfo_query *parts gunmod_info( info, parts, batch, debug ); armor_info( info, parts, batch, debug ); + animal_armor_info( info, parts, batch, debug ); book_info( info, parts, batch, debug ); container_info( info, parts, batch, debug ); battery_info( info, parts, batch, debug ); diff --git a/src/item.h b/src/item.h index 857bf1d87b7f0..76f084860a436 100644 --- a/src/item.h +++ b/src/item.h @@ -399,6 +399,8 @@ class item : public visitable bool debug ) const; void armor_info( std::vector &info, const iteminfo_query *parts, int batch, bool debug ) const; + void animal_armor_info( std::vector &info, const iteminfo_query *parts, int batch, + bool debug ) const; void book_info( std::vector &info, const iteminfo_query *parts, int batch, bool debug ) const; void battery_info( std::vector &info, const iteminfo_query *parts, int batch, diff --git a/src/monexamine.cpp b/src/monexamine.cpp index 8cbe1cdf03e96..66758d9ccdaf9 100644 --- a/src/monexamine.cpp +++ b/src/monexamine.cpp @@ -26,13 +26,13 @@ #include "string_input_popup.h" #include "translations.h" #include "ui.h" +#include "units.h" #include "bodypart.h" #include "debug.h" #include "enums.h" #include "player_activity.h" #include "rng.h" #include "string_formatter.h" -#include "units.h" #include "type_id.h" #include "pimpl.h" #include "point.h" @@ -58,6 +58,7 @@ bool monexamine::pet_menu( monster &z ) push_zlave, rename, attach_bag, + remove_bag, drop_all, give_items, mon_armor_add, @@ -88,12 +89,14 @@ bool monexamine::pet_menu( monster &z ) amenu.addentry( swap_pos, true, 's', _( "Swap positions" ) ); amenu.addentry( push_zlave, true, 'p', _( "Push %s" ), pet_name ); amenu.addentry( rename, true, 'e', _( "Rename" ) ); - if( z.has_effect( effect_has_bag ) || z.has_effect( effect_monster_armor ) ) { + if( z.has_effect( effect_has_bag ) ) { amenu.addentry( give_items, true, 'g', _( "Place items into bag" ) ); - amenu.addentry( drop_all, true, 'd', _( "Drop all items except armor" ) ); - } - if( !z.has_effect( effect_has_bag ) && !z.has_flag( MF_RIDEABLE_MECH ) ) { - amenu.addentry( attach_bag, true, 'b', _( "Attach bag" ) ); + amenu.addentry( remove_bag, true, 'b', _( "Remove bag from %s" ), pet_name ); + if( !z.inv.empty() ) { + amenu.addentry( drop_all, true, 'd', _( "Remove all items from bag" ) ); + } + } else if( !z.has_flag( MF_RIDEABLE_MECH ) ) { + amenu.addentry( attach_bag, true, 'b', _( "Attach bag to %s" ), pet_name ); } if( z.has_effect( effect_harnessed ) ) { amenu.addentry( mon_harness_remove, true, 'H', _( "Remove vehicle harness from %s" ), pet_name ); @@ -128,12 +131,12 @@ bool monexamine::pet_menu( monster &z ) amenu.addentry( milk, true, 'm', _( "Milk %s" ), pet_name ); } if( z.has_flag( MF_PET_MOUNTABLE ) && !z.has_effect( effect_saddled ) && - g->u.has_amount( "riding_saddle", 1 ) && g->u.get_skill_level( skill_survival ) >= 1 ) { - amenu.addentry( attach_saddle, true, 'h', _( "Attach a saddle to %s" ), pet_name ); + g->u.has_item_with_flag( "TACK" ) && g->u.get_skill_level( skill_survival ) >= 1 ) { + amenu.addentry( attach_saddle, true, 'h', _( "Tack up %s" ), pet_name ); } else if( z.has_flag( MF_PET_MOUNTABLE ) && z.has_effect( effect_saddled ) ) { - amenu.addentry( remove_saddle, true, 'h', _( "Remove the saddle from %s" ), pet_name ); + amenu.addentry( remove_saddle, true, 'h', _( "Remove tack from %s" ), pet_name ); } else if( z.has_flag( MF_PET_MOUNTABLE ) && !z.has_effect( effect_saddled ) && - g->u.has_amount( "riding_saddle", 1 ) && g->u.get_skill_level( skill_survival ) < 1 ) { + g->u.has_item_with_flag( "TACK" ) && g->u.get_skill_level( skill_survival ) < 1 ) { amenu.addentry( remove_saddle, false, 'h', _( "You don't know how to saddle %s" ), pet_name ); } if( z.has_flag( MF_PAY_BOT ) ) { @@ -148,13 +151,10 @@ bool monexamine::pet_menu( monster &z ) amenu.addentry( mount, false, 'r', _( "%s is too small to carry your weight" ), pet_name ); } else if( g->u.get_skill_level( skill_survival ) < 1 ) { amenu.addentry( mount, false, 'r', _( "You have no knowledge of riding at all" ) ); - } else if( g->u.get_weight() >= z.get_weight() / 5 ) { + } else if( g->u.get_weight() >= z.get_weight() * z.get_mountable_weight_ratio() ) { amenu.addentry( mount, false, 'r', _( "You are too heavy to mount %s" ), pet_name ); } else if( !z.has_effect( effect_saddled ) && g->u.get_skill_level( skill_survival ) < 4 ) { amenu.addentry( mount, false, 'r', _( "You are not skilled enough to ride without a saddle" ) ); - } else if( z.has_effect( effect_saddled ) && g->u.get_skill_level( skill_survival ) < 1 ) { - amenu.addentry( mount, false, 'r', _( "Despite the saddle, you still don't know how to ride %s" ), - pet_name ); } } else { const itype &type = *item::find_type( z.type->mech_battery ); @@ -198,6 +198,9 @@ bool monexamine::pet_menu( monster &z ) case attach_bag: attach_bag_to( z ); break; + case remove_bag: + remove_bag_from( z ); + break; case drop_all: dump_items( z ); break; @@ -250,7 +253,7 @@ bool monexamine::pet_menu( monster &z ) return true; } -int monexamine::pet_armor_pos( monster &z ) +static item_location pet_armor_loc( monster &z ) { auto filter = [z]( const item & it ) { return z.type->bodytype == it.get_pet_armor_bodytype() && @@ -258,15 +261,22 @@ int monexamine::pet_armor_pos( monster &z ) z.get_volume() <= it.get_pet_armor_max_vol(); }; - item_location loc = game_menus::inv::titled_filter_menu( filter, g->u, _( "Pet armor" ) ); + return game_menus::inv::titled_filter_menu( filter, g->u, _( "Pet armor" ) ); +} - return g->u.get_item_position( loc.get_item() ); +static item_location tack_loc() +{ + auto filter = []( const item & it ) { + return it.has_flag( "TACK" ); + }; + + return game_menus::inv::titled_filter_menu( filter, g->u, _( "Tack" ) ); } void monexamine::remove_battery( monster &z ) { g->m.add_item_or_charges( g->u.pos(), *z.battery_item ); - z.battery_item = cata::nullopt; + z.battery_item.reset(); } void monexamine::insert_battery( monster &z ) @@ -296,10 +306,10 @@ void monexamine::insert_battery( monster &z ) index > static_cast( bat_inv.size() ) ) { return; } - auto bat_item = bat_inv[index - 1]; + item *bat_item = bat_inv[index - 1]; int item_pos = g->u.get_item_position( bat_item ); if( item_pos != INT_MIN ) { - z.battery_item = *bat_item; + z.battery_item = cata::make_value( *bat_item ); g->u.i_rem( item_pos ); } } @@ -380,11 +390,18 @@ void monexamine::attach_or_remove_saddle( monster &z ) { if( z.has_effect( effect_saddled ) ) { z.remove_effect( effect_saddled ); - item riding_saddle( "riding_saddle", 0 ); - g->u.i_add( riding_saddle ); + g->u.i_add( *z.tack_item ); + z.tack_item.reset(); } else { + item_location loc = tack_loc(); + + if( !loc ) { + add_msg( _( "Never mind." ) ); + return; + } z.add_effect( effect_saddled, 1_turns, num_bp, true ); - g->u.use_amount( "riding_saddle", 1 ); + z.tack_item = cata::make_value( *loc.get_item() ); + loc.remove_item(); } } @@ -476,41 +493,39 @@ void monexamine::attach_bag_to( monster &z ) } item &it = *loc; - // force it to the front of the monster's inventory in case they have armor on - z.inv.insert( z.inv.begin(), it ); - add_msg( _( "You mount the %1$s on your %2$s, ready to store gear." ), - it.display_name(), pet_name ); - g->u.i_rem( &*loc ); + z.storage_item = cata::make_value( it ); + add_msg( _( "You mount the %1$s on your %2$s." ), it.display_name(), pet_name ); + g->u.i_rem( &it ); z.add_effect( effect_has_bag, 1_turns, num_bp, true ); // Update encumbrance in case we were wearing it g->u.flag_encumbrance(); g->u.moves -= 200; } -void monexamine::dump_items( monster &z ) +void monexamine::remove_bag_from( monster &z ) { std::string pet_name = z.get_name(); - int armor_index = 0; - bool found_armor = false; - for( auto &it : z.inv ) { - if( z.has_effect( effect_monster_armor ) && it.is_pet_armor( true ) ) { - found_armor = true; - } else { - armor_index += 1; - g->m.add_item_or_charges( z.pos(), it ); + if( z.storage_item ) { + if( !z.inv.empty() ) { + dump_items( z ); } + g->m.add_item_or_charges( g->u.pos(), *z.storage_item ); + add_msg( _( "You remove the %1$s from %2$s." ), z.storage_item->display_name(), pet_name ); + z.storage_item.reset(); + g->u.moves -= 200; + } else { + add_msg( m_bad, _( "Your %1$s doesn't have a bag!" ), pet_name ); } - item armor; - if( found_armor ) { - armor = z.inv[ armor_index ]; - } - - z.inv.clear(); z.remove_effect( effect_has_bag ); - if( found_armor ) { - armor.set_var( "pet_armor", "true" ); - z.add_item( armor ); +} + +void monexamine::dump_items( monster &z ) +{ + std::string pet_name = z.get_name(); + for( auto &it : z.inv ) { + g->m.add_item_or_charges( g->u.pos(), it ); } + z.inv.clear(); add_msg( _( "You dump the contents of the %s's bag on the ground." ), pet_name ); g->u.moves -= 200; } @@ -518,86 +533,64 @@ void monexamine::dump_items( monster &z ) bool monexamine::give_items_to( monster &z ) { std::string pet_name = z.get_name(); - if( z.inv.empty() ) { + if( !z.storage_item ) { add_msg( _( "There is no container on your %s to put things in!" ), pet_name ); return true; } - int armor_index = INT_MIN; - if( z.has_effect( effect_monster_armor ) ) { - armor_index = 0; - for( auto &it : z.inv ) { - if( it.is_pet_armor( true ) ) { - break; - } else { - armor_index += 1; - } - } - } - - // might be a bag, might be armor - item &storage = z.inv[0]; - units::volume max_cap = storage.get_storage(); - units::mass max_weight = z.weight_capacity() - storage.weight(); - if( armor_index != 0 && armor_index != INT_MIN ) { - item &armor = z.inv[armor_index]; - max_cap += armor.get_storage() + armor.volume(); - max_weight -= armor.weight(); - } - - if( z.inv.size() > 1 ) { - for( auto &i : z.inv ) { - max_cap -= i.volume(); - max_weight -= i.weight(); + item &storage = *z.storage_item; + units::mass max_weight = z.weight_capacity() - z.get_carried_weight(); + units::volume max_volume = storage.get_storage() - z.get_carried_volume(); + + drop_locations items = game_menus::inv::multidrop( g->u ); + drop_locations to_move; + for( const drop_location &itq : items ) { + const item &it = *itq.first; + units::volume item_volume = it.volume() * itq.second; + units::mass item_weight = it.weight() * itq.second; + if( max_weight < item_weight ) { + add_msg( _( "The %1$s is too heavy for the %2$s to carry." ), it.tname(), pet_name ); + continue; + } else if( max_volume < item_volume ) { + add_msg( _( "The %1$s is too big to fit in the %2$s." ), it.tname(), storage.tname() ); + continue; + } else { + max_weight -= item_weight; + max_volume -= item_volume; + to_move.insert( to_move.end(), itq ); } } + z.add_effect( effect_controlled, 5_turns ); + g->u.drop( to_move, z.pos(), true ); - if( max_weight <= 0_gram ) { - add_msg( _( "%1$s is overburdened. You can't transfer your %2$s." ), - pet_name, storage.tname( 1 ) ); - return true; - } - if( max_cap <= 0_ml ) { - add_msg( _( "There's no room in your %1$s's %2$s for that, it's too bulky!" ), - pet_name, storage.tname( 1 ) ); - return true; - } - - const auto items_to_stash = game_menus::inv::multidrop( g->u ); - if( !items_to_stash.empty() ) { - g->u.drop( items_to_stash, z.pos(), true ); - z.add_effect( effect_controlled, 5_turns ); - return true; - } return false; } bool monexamine::add_armor( monster &z ) { std::string pet_name = z.get_name(); - int pos = pet_armor_pos( z ); + item_location loc = pet_armor_loc( z ); - if( pos == INT_MIN ) { + if( !loc ) { add_msg( _( "Never mind." ) ); return true; } - item &armor = g->u.i_at( pos ); - units::mass max_weight = z.weight_capacity(); - for( auto &i : z.inv ) { - max_weight -= i.weight(); - } - if( max_weight <= 0_gram ) { - add_msg( _( "Your %1$s is too heavy for your %2$s." ), armor.tname( 1 ), pet_name ); + item &armor = *loc; + units::mass max_weight = z.weight_capacity() - z.get_carried_weight(); + if( max_weight <= armor.weight() ) { + add_msg( pgettext( "pet armor", "Your %1$s is too heavy for your %2$s." ), armor.tname( 1 ), + pet_name ); return true; } armor.set_var( "pet_armor", "true" ); - z.add_item( armor ); - add_msg( _( "You put the %1$s on your %2$s, protecting it from future harm." ), - armor.display_name(), pet_name ); - g->u.i_rem( pos ); + z.armor_item = cata::make_value( armor ); + add_msg( pgettext( "pet armor", "You put the %1$s on your %2$s." ), armor.display_name(), + pet_name ); + loc.remove_item(); z.add_effect( effect_monster_armor, 1_turns, num_bp, true ); + // TODO: armoring a horse takes a lot longer than 2 seconds. This should be a long action. g->u.moves -= 200; return true; } @@ -611,24 +604,15 @@ void monexamine::remove_harness( monster &z ) void monexamine::remove_armor( monster &z ) { std::string pet_name = z.get_name(); - bool found_armor = false; - int pos = 0; - for( auto &it : z.inv ) { - if( it.is_pet_armor( true ) ) { - found_armor = true; - it.erase_var( "pet_armor" ); - g->m.add_item_or_charges( z.pos(), it ); - //~ %1$s: armor name, %2$s: pet name - add_msg( m_info, pgettext( "pet armor", "You remove the %1$s from %2$s." ), it.tname( 1 ), - pet_name ); - z.inv.erase( z.inv.begin() + pos ); - g->u.moves -= 200; - break; - } else { - pos += 1; - } - } - if( !found_armor ) { + if( z.armor_item ) { + z.armor_item->erase_var( "pet_armor" ); + g->m.add_item_or_charges( z.pos(), *z.armor_item ); + add_msg( pgettext( "pet armor", "You remove the %1$s from %2$s." ), z.armor_item->display_name(), + pet_name ); + z.armor_item.reset(); + // TODO: removing armor from a horse takes a lot longer than 2 seconds. This should be a long action. + g->u.moves -= 200; + } else { add_msg( m_bad, _( "Your %1$s isn't wearing armor!" ), pet_name ); } z.remove_effect( effect_monster_armor ); @@ -662,7 +646,7 @@ void monexamine::tie_or_untie( monster &z ) z.remove_effect( effect_tied ); if( z.tied_item ) { g->u.i_add( *z.tied_item ); - z.tied_item = cata::nullopt; + z.tied_item.reset(); } } else { std::vector rope_inv = g->u.items_with( []( const item & itm ) { @@ -685,10 +669,10 @@ void monexamine::tie_or_untie( monster &z ) index > static_cast( rope_inv.size() ) ) { return; } - auto rope_item = rope_inv[index - 1]; + item *rope_item = rope_inv[index - 1]; int item_pos = g->u.get_item_position( rope_item ); if( item_pos != INT_MIN ) { - z.tied_item = *rope_item; + z.tied_item = cata::make_value( *rope_item ); g->u.i_rem( item_pos ); z.add_effect( effect_tied, 1_turns, num_bp, true ); } diff --git a/src/monexamine.h b/src/monexamine.h index beae4f9d0017a..2aff0fa186741 100644 --- a/src/monexamine.h +++ b/src/monexamine.h @@ -15,9 +15,9 @@ void swap( monster &z ); void push( monster &z ); void rename_pet( monster &z ); void attach_bag_to( monster &z ); +void remove_bag_from( monster &z ); void dump_items( monster &z ); bool give_items_to( monster &z ); -int pet_armor_pos( monster &z ); bool add_armor( monster &z ); void remove_armor( monster &z ); void remove_harness( monster &z ); diff --git a/src/monster.cpp b/src/monster.cpp index 43729722f2118..d934edd9e283c 100644 --- a/src/monster.cpp +++ b/src/monster.cpp @@ -235,7 +235,7 @@ monster::monster( const mtype_id &id ) : monster() int max_charge = type.magazine->capacity; item mech_bat_item = item( mech_bat, 0 ); mech_bat_item.ammo_consume( rng( 0, max_charge ), tripoint_zero ); - battery_item = mech_bat_item; + battery_item = cata::make_value( mech_bat_item ); } } @@ -1627,7 +1627,7 @@ bool monster::move_effects( bool ) add_msg( _( "The %s easily slips out of its bonds." ), name() ); } g->m.add_item_or_charges( pos(), *tied_item ); - tied_item = cata::nullopt; + tied_item.reset(); } } else { if( tied_item ) { @@ -1636,7 +1636,7 @@ bool monster::move_effects( bool ) if( !broken ) { g->m.add_item_or_charges( pos(), *tied_item ); } - tied_item = cata::nullopt; + tied_item.reset(); if( u_see_me ) { if( broken ) { add_msg( _( "The %s snaps the bindings holding it down." ), name() ); @@ -1766,14 +1766,11 @@ std::string monster::get_effect_status() const int monster::get_worn_armor_val( damage_type dt ) const { - if( !has_effect( effect_monster_armor ) || inv.empty() ) { + if( !has_effect( effect_monster_armor ) ) { return 0; } - for( const item &armor : inv ) { - if( !armor.is_pet_armor( true ) ) { - continue; - } - return armor.damage_resist( dt ); + if( armor_item ) { + return armor_item->damage_resist( dt ); } return 0; } @@ -2137,14 +2134,8 @@ void monster::die( Creature *nkiller ) return; } // We were carrying a creature, deposit the rider - if( has_effect( effect_ridden ) ) { - if( has_effect( effect_saddled ) ) { - item riding_saddle( "riding_saddle", 0 ); - g->m.add_item_or_charges( pos(), riding_saddle ); - } - if( mounted_player ) { - mounted_player->forced_dismount(); - } + if( has_effect( effect_ridden ) && mounted_player ) { + mounted_player->forced_dismount(); } g->set_critter_died(); dead = true; @@ -2173,13 +2164,12 @@ void monster::die( Creature *nkiller ) ch->rem_morale( MORALE_KILLER_NEED_TO_KILL ); } } - // We were tied up at the moment of death, add a short rope to inventory - if( has_effect( effect_tied ) ) { - if( tied_item ) { - add_item( *tied_item ); - tied_item = cata::nullopt; - } - } + // Drop items stored in optionals + move_special_item_to_inv( tack_item ); + move_special_item_to_inv( armor_item ); + move_special_item_to_inv( storage_item ); + move_special_item_to_inv( tied_item ); + if( has_effect( effect_lightsnare ) ) { add_item( item( "string_36", 0 ) ); add_item( item( "snare_trigger", 0 ) ); @@ -2646,6 +2636,41 @@ void monster::add_msg_player_or_npc( const game_message_type type, } } +units::mass monster::get_carried_weight() +{ + units::mass total_weight = 0_gram; + if( tack_item ) { + total_weight += tack_item->weight(); + } + if( storage_item ) { + total_weight += storage_item->weight(); + } + if( armor_item ) { + total_weight += armor_item->weight(); + } + for( const item &it : inv ) { + total_weight += it.weight(); + } + return total_weight; +} + +units::volume monster::get_carried_volume() +{ + units::volume total_volume = 0_ml; + for( const item &it : inv ) { + total_volume += it.volume(); + } + return total_volume; +} + +void monster::move_special_item_to_inv( cata::value_ptr &it ) +{ + if( it ) { + add_item( *it ); + it.reset(); + } +} + bool monster::is_dead() const { return dead || is_dead_state(); diff --git a/src/monster.h b/src/monster.h index 33ca4f22c1ee8..57ff1aa876456 100644 --- a/src/monster.h +++ b/src/monster.h @@ -27,6 +27,7 @@ #include "type_id.h" #include "units.h" #include "point.h" +#include "value_ptr.h" class JsonObject; class JsonIn; @@ -437,8 +438,15 @@ class monster : public Creature Character *mounted_player = nullptr; // player that is mounting this creature character_id mounted_player_id; // id of player that is mounting this creature ( for save/load ) character_id dragged_foe_id; // id of character being dragged by the monster - cata::optional tied_item; // item used to tie the monster - cata::optional battery_item; // item to power mechs + cata::value_ptr tied_item; // item used to tie the monster + cata::value_ptr tack_item; // item representing saddle and reins and such + cata::value_ptr armor_item; // item of armor the monster may be wearing + cata::value_ptr storage_item; // storage item for monster carrying items + cata::value_ptr battery_item; // item to power mechs + units::mass get_carried_weight(); + units::volume get_carried_volume(); + void move_special_item_to_inv( cata::value_ptr &it ); + // DEFINING VALUES int friendly; int anger = 0; diff --git a/src/savegame_json.cpp b/src/savegame_json.cpp index af95a104f5d1c..27a32e200cd1b 100644 --- a/src/savegame_json.cpp +++ b/src/savegame_json.cpp @@ -1819,9 +1819,37 @@ void monster::load( const JsonObject &data ) if( data.read( "wandz", wander_pos.z ) ) { wander_pos.z = position.z; } - data.read( "tied_item", tied_item ); + if( data.has_object( "tied_item" ) ) { + JsonIn *tied_item_json = data.get_raw( "tied_item" ); + item newitem; + newitem.deserialize( *tied_item_json ); + tied_item = cata::make_value( newitem ); + } + if( data.has_object( "tack_item" ) ) { + JsonIn *tack_item_json = data.get_raw( "tack_item" ); + item newitem; + newitem.deserialize( *tack_item_json ); + tack_item = cata::make_value( newitem ); + } + if( data.has_object( "armor_item" ) ) { + JsonIn *armor_item_json = data.get_raw( "armor_item" ); + item newitem; + newitem.deserialize( *armor_item_json ); + armor_item = cata::make_value( newitem ); + } + if( data.has_object( "storage_item" ) ) { + JsonIn *storage_item_json = data.get_raw( "storage_item" ); + item newitem; + newitem.deserialize( *storage_item_json ); + storage_item = cata::make_value( newitem ); + } + if( data.has_object( "battery_item" ) ) { + JsonIn *battery_item_json = data.get_raw( "battery_item" ); + item newitem; + newitem.deserialize( *battery_item_json ); + battery_item = cata::make_value( newitem ); + } data.read( "hp", hp ); - data.read( "battery_item", battery_item ); // sp_timeout indicates an old save, prior to the special_attacks refactor if( data.has_array( "sp_timeout" ) ) { @@ -1954,8 +1982,21 @@ void monster::store( JsonOut &json ) const json.member( "morale", morale ); json.member( "hallucination", hallucination ); json.member( "stairscount", staircount ); - json.member( "tied_item", tied_item ); - json.member( "battery_item", battery_item ); + if( tied_item ) { + json.member( "tied_item", *tied_item ); + } + if( tack_item ) { + json.member( "tack_item", *tack_item ); + } + if( armor_item ) { + json.member( "armor_item", *armor_item ); + } + if( storage_item ) { + json.member( "storage_item", *storage_item ); + } + if( battery_item ) { + json.member( "battery_item", *battery_item ); + } // Store the relative position of the goal so it loads correctly after a map shift. json.member( "destination", goal - pos() ); json.member( "ammo", ammo ); diff --git a/src/vehicle_use.cpp b/src/vehicle_use.cpp index 398b0de599e34..13a0276c9bf51 100644 --- a/src/vehicle_use.cpp +++ b/src/vehicle_use.cpp @@ -1739,7 +1739,7 @@ void vehicle::use_harness( int part, const tripoint &pos ) m.remove_effect( effect_tied ); if( m.tied_item ) { g->u.i_add( *m.tied_item ); - m.tied_item = cata::nullopt; + m.tied_item.reset(); } } } From cd304ec3ea276cb5cdf605342699ced062c97e7d Mon Sep 17 00:00:00 2001 From: Ramza13 <52087122+Ramza13@users.noreply.github.com> Date: Sat, 4 Jan 2020 20:44:03 -0500 Subject: [PATCH 35/43] Fixed npc healing logic --- src/iuse_actor.cpp | 9 ++++---- src/npc.cpp | 9 +++++++- src/npc.h | 1 + src/npcmove.cpp | 52 ++++++++++++++++++---------------------------- 4 files changed, 34 insertions(+), 37 deletions(-) diff --git a/src/iuse_actor.cpp b/src/iuse_actor.cpp index c61a3b34709af..cf800e9373d2e 100644 --- a/src/iuse_actor.cpp +++ b/src/iuse_actor.cpp @@ -3790,12 +3790,13 @@ hp_part heal_actor::use_healing_item( player &healer, player &patient, item &it, for( int i = 0; i < num_hp_parts; i++ ) { int damage = 0; const body_part i_bp = player::hp_to_bp( static_cast( i ) ); - if( !patient.has_effect( effect_bandaged, i_bp ) ) { + if( ( !patient.has_effect( effect_bandaged, i_bp ) && bandages_power > 0 ) || + ( !patient.has_effect( effect_disinfected, i_bp ) && disinfectant_power > 0 ) ) { damage += patient.hp_max[i] - patient.hp_cur[i]; + damage += bleed * patient.get_effect_dur( effect_bleed, i_bp ) / 5_minutes; + damage += bite * patient.get_effect_dur( effect_bite, i_bp ) / 10_minutes; + damage += infect * patient.get_effect_dur( effect_infected, i_bp ) / 10_minutes; } - damage += bleed * patient.get_effect_dur( effect_bleed, i_bp ) / 5_minutes; - damage += bite * patient.get_effect_dur( effect_bite, i_bp ) / 10_minutes; - damage += infect * patient.get_effect_dur( effect_infected, i_bp ) / 10_minutes; if( damage > highest_damage ) { highest_damage = damage; healed = static_cast( i ); diff --git a/src/npc.cpp b/src/npc.cpp index 28ee25a717be2..0b14ee86187fe 100644 --- a/src/npc.cpp +++ b/src/npc.cpp @@ -1791,6 +1791,7 @@ int npc::value( const item &it, int market_price ) const void healing_options::clear_all() { bandage = false; + disinfect = false; bleed = false; bite = false; infect = false; @@ -1803,7 +1804,7 @@ bool healing_options::all_false() bool healing_options::any_true() { - return bandage || bleed || bite || infect; + return bandage || bleed || bite || infect || disinfect; } void healing_options::set_all() @@ -1812,6 +1813,7 @@ void healing_options::set_all() bleed = true; bite = true; infect = true; + disinfect = true; } bool npc::has_healing_item( healing_options try_to_fix ) @@ -1842,6 +1844,9 @@ healing_options npc::has_healing_options( healing_options try_to_fix ) if( try_to_fix.bandage && !fix_p->bandage && actor.bandages_power > 0.0f ) { fix_p->bandage = true; } + if( try_to_fix.disinfect && !fix_p->disinfect && actor.disinfectant_power > 0.0f ) { + fix_p->disinfect = true; + } if( try_to_fix.bleed && !fix_p->bleed && actor.bleed > 0 ) { fix_p->bleed = true; } @@ -1853,6 +1858,7 @@ healing_options npc::has_healing_options( healing_options try_to_fix ) } // if we've found items for everything we're looking for, we're done if( ( !try_to_fix.bandage || fix_p->bandage ) && + ( !try_to_fix.disinfect || fix_p->disinfect ) && ( !try_to_fix.bleed || fix_p->bleed ) && ( !try_to_fix.bite || fix_p->bite ) && ( !try_to_fix.infect || fix_p->infect ) ) { @@ -1875,6 +1881,7 @@ item &npc::get_healing_item( healing_options try_to_fix, bool first_best ) auto &actor = dynamic_cast( *( use->get_actor_ptr() ) ); if( ( try_to_fix.bandage && actor.bandages_power > 0.0f ) || + ( try_to_fix.disinfect && actor.disinfectant_power > 0.0f ) || ( try_to_fix.bleed && actor.bleed > 0 ) || ( try_to_fix.bite && actor.bite > 0 ) || ( try_to_fix.infect && actor.infect > 0 ) ) { diff --git a/src/npc.h b/src/npc.h index cc40cfc466a5c..bd617f15051ff 100644 --- a/src/npc.h +++ b/src/npc.h @@ -504,6 +504,7 @@ const direction npc_threat_dir[8] = { NORTHWEST, NORTH, NORTHEAST, EAST, struct healing_options { bool bandage; + bool disinfect; bool bleed; bool bite; bool infect; diff --git a/src/npcmove.cpp b/src/npcmove.cpp index e6bc38d6aaaf1..dac48735363c3 100644 --- a/src/npcmove.cpp +++ b/src/npcmove.cpp @@ -73,6 +73,7 @@ static const efftype_id effect_bite( "bite" ); static const efftype_id effect_bleed( "bleed" ); static const efftype_id effect_bouldering( "bouldering" ); static const efftype_id effect_catch_up( "catch_up" ); +static const efftype_id effect_disinfected( "disinfected" ); static const efftype_id effect_hallu( "hallu" ); static const efftype_id effect_hit_by_player( "hit_by_player" ); static const efftype_id effect_infected( "infected" ); @@ -1719,37 +1720,33 @@ healing_options npc::patient_assessment( const Character &c ) if( c.has_effect( effect_bleed, bp_wounded ) ) { try_to_fix.bleed = true; - return try_to_fix; } if( c.has_effect( effect_bite, bp_wounded ) ) { try_to_fix.bite = true; - return try_to_fix; + } + if( c.has_effect( effect_infected, bp_wounded ) ) { + try_to_fix.infect = true; } - // NPCs don't reapply bandages - if( !c.has_effect( effect_bandaged, bp_wounded ) ) { - int part_threshold = 75; - if( part == hp_head ) { - part_threshold += 20; - } else if( part == hp_torso ) { - part_threshold += 10; - } - part_threshold = std::min( 80, part_threshold ); - part_threshold = part_threshold * c.hp_max[i] / 100; + int part_threshold = 75; + if( part == hp_head ) { + part_threshold += 20; + } else if( part == hp_torso ) { + part_threshold += 10; + } + part_threshold = std::min( 80, part_threshold ); + part_threshold = part_threshold * c.hp_max[i] / 100; - if( c.hp_cur[i] <= part_threshold ) { + if( c.hp_cur[i] <= part_threshold ) { + if( !c.has_effect( effect_bandaged, bp_wounded ) ) { try_to_fix.bandage = true; - return try_to_fix; } - } - - if( c.has_effect( effect_infected, bp_wounded ) ) { - try_to_fix.infect = true; - return try_to_fix; + if( !c.has_effect( effect_disinfected, bp_wounded ) ) { + try_to_fix.disinfect = true; + } } } - return try_to_fix; } @@ -1763,7 +1760,7 @@ npc_action npc::address_needs( float danger ) healing_options try_to_fix_me = patient_assessment( *this ); if( try_to_fix_me.any_true() ) { if( !use_bionic_by_id( bio_nanobots ) ) { - ai_cache.can_heal = has_healing_options(); + ai_cache.can_heal = has_healing_options( try_to_fix_me ); if( ai_cache.can_heal.any_true() ) { return npc_heal; } @@ -1775,7 +1772,7 @@ npc_action npc::address_needs( float danger ) if( is_player_ally() ) { healing_options try_to_fix_other = patient_assessment( g->u ); if( try_to_fix_other.any_true() ) { - ai_cache.can_heal = has_healing_options(); + ai_cache.can_heal = has_healing_options( try_to_fix_other ); if( ai_cache.can_heal.any_true() ) { ai_cache.ally = g->shared_from( g->u ); return npc_heal_player; @@ -1788,7 +1785,7 @@ npc_action npc::address_needs( float danger ) } healing_options try_to_fix_other = patient_assessment( guy ); if( try_to_fix_other.any_true() ) { - ai_cache.can_heal = has_healing_options(); + ai_cache.can_heal = has_healing_options( try_to_fix_other ); if( ai_cache.can_heal.any_true() ) { ai_cache.ally = g->shared_from( guy ); return npc_heal_player; @@ -3506,15 +3503,6 @@ void npc::heal_player( player &patient ) pretend_heal( patient, used ); } - if( !patient.is_npc() ) { - // Test if we want to heal the player further - if( op_of_u.value * 4 + op_of_u.trust + personality.altruism * 3 - - op_of_u.fear * 3 < 25 ) { - say( _( "That's all the healing I can do." ) ); - } else { - say( _( "Hold still, I can heal you more." ) ); - } - } } void npc:: pretend_heal( player &patient, item used ) From 3e30a5df2b032b144386a2a27a27275167082a7f Mon Sep 17 00:00:00 2001 From: ZhilkinSerg Date: Tue, 7 Jan 2020 14:23:46 +0300 Subject: [PATCH 36/43] Fix redraw of various menus after keybinding help menu was drawn on top --- src/color.cpp | 37 ++++++++++++------- src/main_menu.cpp | 1 - src/options.cpp | 6 ++- src/safemode_ui.cpp | 87 +++++++++++++++++++++++++------------------- src/worldfactory.cpp | 8 +++- 5 files changed, 83 insertions(+), 56 deletions(-) diff --git a/src/color.cpp b/src/color.cpp index 514d0313c9d9d..cb3629f50d87b 100644 --- a/src/color.cpp +++ b/src/color.cpp @@ -736,22 +736,30 @@ void color_manager::show_gui() catacurses::window w_colors = catacurses::newwin( iContentHeight, FULL_SCREEN_WIDTH - 2, point( 1 + iOffsetX, iHeaderHeight + 1 + iOffsetY ) ); - draw_border( w_colors_border, BORDER_COLOR, _( " COLOR MANAGER " ) ); - mvwputch( w_colors_border, point( 0, 3 ), BORDER_COLOR, LINE_XXXO ); // |- - mvwputch( w_colors_border, point( getmaxx( w_colors_border ) - 1, 3 ), BORDER_COLOR, - LINE_XOXX ); // -| - - for( auto &iCol : vLines ) { - if( iCol > -1 ) { - mvwputch( w_colors_border, point( iCol + 1, FULL_SCREEN_HEIGHT - 1 ), BORDER_COLOR, - LINE_XXOX ); // _|_ - mvwputch( w_colors_header, point( iCol, 3 ), BORDER_COLOR, LINE_XOXO ); + /** + * All of the stuff in this lambda needs to be drawn (1) initially, and + * (2) after closing the HELP_KEYBINDINGS window (since it mangles the screen) + */ + const auto initial_draw = [&]() { + draw_border( w_colors_border, BORDER_COLOR, _( " COLOR MANAGER " ) ); + mvwputch( w_colors_border, point( 0, 3 ), BORDER_COLOR, LINE_XXXO ); // |- + mvwputch( w_colors_border, point( getmaxx( w_colors_border ) - 1, 3 ), BORDER_COLOR, + LINE_XOXX ); // -| + + for( auto &iCol : vLines ) { + if( iCol > -1 ) { + mvwputch( w_colors_border, point( iCol + 1, FULL_SCREEN_HEIGHT - 1 ), BORDER_COLOR, + LINE_XXOX ); // _|_ + mvwputch( w_colors_header, point( iCol, 3 ), BORDER_COLOR, LINE_XOXO ); + } } - } - wrefresh( w_colors_border ); + wrefresh( w_colors_border ); + + draw_header( w_colors_header ); - draw_header( w_colors_header ); + }; + initial_draw(); int iCurrentLine = 0; int iCurrentCol = 1; int iStartPos = 0; @@ -936,6 +944,7 @@ void color_manager::show_gui() } ui_colors.query(); + initial_draw(); if( ui_colors.ret >= 0 && static_cast( ui_colors.ret ) < name_color_map.size() ) { bStuffChanged = true; @@ -956,7 +965,7 @@ void color_manager::show_gui() finalize(); // Need to recalculate caches } else if( action == "HELP_KEYBINDINGS" ) { - draw_header( w_colors_header ); + initial_draw(); } } diff --git a/src/main_menu.cpp b/src/main_menu.cpp index 52975a0ad5929..15d4a85372c86 100644 --- a/src/main_menu.cpp +++ b/src/main_menu.cpp @@ -664,7 +664,6 @@ bool main_menu::opening_screen() get_options().show( true ); // The language may have changed- gracefully handle this. init_strings(); - print_menu( w_open, sel1, menu_offset ); } else if( sel2 == 1 ) { input_context ctxt_default = get_default_mode_input_context(); ctxt_default.display_menu(); diff --git a/src/options.cpp b/src/options.cpp index 6fe480165a5e8..1b4fb0582b045 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -2447,6 +2447,7 @@ std::string options_manager::show( bool ingame, const bool world_options_only ) const int iContentHeight = TERMY - 3 - iTooltipHeight - iWorldOffset; std::map mapLines; + std::map mapLinesOriginal; mapLines[4] = true; mapLines[60] = true; @@ -2463,6 +2464,7 @@ std::string options_manager::show( bool ingame, const bool world_options_only ) worldfactory::draw_worldgen_tabs( w_options_border, 1 ); } + mapLinesOriginal = mapLines; draw_borders_external( w_options_border, iTooltipHeight + 1 + iWorldOffset, mapLines, world_options_only ); draw_borders_internal( w_options_header, mapLines ); @@ -2713,8 +2715,8 @@ std::string options_manager::show( bool ingame, const bool world_options_only ) } } } else if( action == "HELP_KEYBINDINGS" ) { - // keybinding screen erased the internal borders of main menu, restore it: - draw_borders_internal( w_options_header, mapLines ); + draw_borders_external( w_options_border, iTooltipHeight + 1 + iWorldOffset, mapLinesOriginal, + world_options_only ); } else if( action == "QUIT" ) { catacurses::clear(); catacurses::refresh(); diff --git a/src/safemode_ui.cpp b/src/safemode_ui.cpp index d4b1fdbee119e..30b06543a1633 100644 --- a/src/safemode_ui.cpp +++ b/src/safemode_ui.cpp @@ -82,54 +82,62 @@ void safemode::show( const std::string &custom_name_in, bool is_safemode_in ) catacurses::newwin( content_height, FULL_SCREEN_WIDTH - 2, point( 1 + offset_x, header_height + 1 + offset_y ) ); - draw_border( w_border, BORDER_COLOR, custom_name_in ); - - mvwputch( w_border, point( 0, 3 ), c_light_gray, LINE_XXXO ); // |- - mvwputch( w_border, point( 79, 3 ), c_light_gray, LINE_XOXX ); // -| + /** + * All of the stuff in this lambda needs to be drawn (1) initially, and + * (2) after closing the HELP_KEYBINDINGS window (since it mangles the screen) + */ + const auto initial_draw = [&]() { + draw_border( w_border, BORDER_COLOR, custom_name_in ); + + mvwputch( w_border, point( 0, 3 ), c_light_gray, LINE_XXXO ); // |- + mvwputch( w_border, point( 79, 3 ), c_light_gray, LINE_XOXX ); // -| + + for( auto &column : column_pos ) { + // _|_ + mvwputch( w_border, point( column.second + 1, FULL_SCREEN_HEIGHT - 1 ), c_light_gray, LINE_XXOX ); + } - for( auto &column : column_pos ) { - // _|_ - mvwputch( w_border, point( column.second + 1, FULL_SCREEN_HEIGHT - 1 ), c_light_gray, LINE_XXOX ); - } + wrefresh( w_border ); - wrefresh( w_border ); + static const std::vector hotkeys = {{ + translate_marker( "dd" ), translate_marker( "emove" ), + translate_marker( "opy" ), translate_marker( "ove" ), + translate_marker( "nable" ), translate_marker( "isable" ), + translate_marker( "est" ) + } + }; - static const std::vector hotkeys = {{ - translate_marker( "dd" ), translate_marker( "emove" ), - translate_marker( "opy" ), translate_marker( "ove" ), - translate_marker( "nable" ), translate_marker( "isable" ), - translate_marker( "est" ) + int tmpx = 0; + for( auto &hotkey : hotkeys ) { + tmpx += shortcut_print( w_header, point( tmpx, 0 ), c_white, c_light_green, _( hotkey ) ) + 2; } - }; - int tmpx = 0; - for( auto &hotkey : hotkeys ) { - tmpx += shortcut_print( w_header, point( tmpx, 0 ), c_white, c_light_green, _( hotkey ) ) + 2; - } + tmpx = 0; + tmpx += shortcut_print( w_header, point( tmpx, 1 ), c_white, c_light_green, + _( "<+-> Move up/down" ) ) + 2; + tmpx += shortcut_print( w_header, point( tmpx, 1 ), c_white, c_light_green, + _( "-Edit" ) ) + 2; + shortcut_print( w_header, point( tmpx, 1 ), c_white, c_light_green, _( "-Switch Page" ) ); - tmpx = 0; - tmpx += shortcut_print( w_header, point( tmpx, 1 ), c_white, c_light_green, - _( "<+-> Move up/down" ) ) + 2; - tmpx += shortcut_print( w_header, point( tmpx, 1 ), c_white, c_light_green, - _( "-Edit" ) ) + 2; - shortcut_print( w_header, point( tmpx, 1 ), c_white, c_light_green, _( "-Switch Page" ) ); + for( int i = 0; i < 78; i++ ) { + mvwputch( w_header, point( i, 2 ), c_light_gray, LINE_OXOX ); // Draw line under header + } - for( int i = 0; i < 78; i++ ) { - mvwputch( w_header, point( i, 2 ), c_light_gray, LINE_OXOX ); // Draw line under header - } + for( auto &pos : column_pos ) { + mvwputch( w_header, point( pos.second, 2 ), c_light_gray, LINE_OXXX ); + mvwputch( w_header, point( pos.second, 3 ), c_light_gray, LINE_XOXO ); + } - for( auto &pos : column_pos ) { - mvwputch( w_header, point( pos.second, 2 ), c_light_gray, LINE_OXXX ); - mvwputch( w_header, point( pos.second, 3 ), c_light_gray, LINE_XOXO ); - } + mvwprintz( w_header, point( 1, 3 ), c_white, "#" ); + mvwprintz( w_header, point( column_pos[COLUMN_RULE] + 4, 3 ), c_white, _( "Rules" ) ); + mvwprintz( w_header, point( column_pos[COLUMN_ATTITUDE] + 2, 3 ), c_white, _( "Attitude" ) ); + mvwprintz( w_header, point( column_pos[COLUMN_PROXIMITY] + 2, 3 ), c_white, _( "Dist" ) ); + mvwprintz( w_header, point( column_pos[COLUMN_WHITE_BLACKLIST] + 2, 3 ), c_white, _( "B/W" ) ); - mvwprintz( w_header, point( 1, 3 ), c_white, "#" ); - mvwprintz( w_header, point( column_pos[COLUMN_RULE] + 4, 3 ), c_white, _( "Rules" ) ); - mvwprintz( w_header, point( column_pos[COLUMN_ATTITUDE] + 2, 3 ), c_white, _( "Attitude" ) ); - mvwprintz( w_header, point( column_pos[COLUMN_PROXIMITY] + 2, 3 ), c_white, _( "Dist" ) ); - mvwprintz( w_header, point( column_pos[COLUMN_WHITE_BLACKLIST] + 2, 3 ), c_white, _( "B/W" ) ); + wrefresh( w_header ); + }; - wrefresh( w_header ); + initial_draw(); int tab = GLOBAL_TAB; int line = 0; @@ -245,6 +253,9 @@ void safemode::show( const std::string &custom_name_in, bool is_safemode_in ) tab = MAX_TAB - 1; line = 0; } + } else if( action == "HELP_KEYBINDINGS" ) { + // de-mangle parts of the screen + initial_draw(); } else if( action == "QUIT" ) { break; } else if( tab == CHARACTER_TAB && g->u.name.empty() ) { diff --git a/src/worldfactory.cpp b/src/worldfactory.cpp index a4fb5c973b0ba..020e717144682 100644 --- a/src/worldfactory.cpp +++ b/src/worldfactory.cpp @@ -580,7 +580,7 @@ std::string worldfactory::pick_random_name() return get_next_valid_worldname(); } -int worldfactory::show_worldgen_tab_options( const catacurses::window &/*win*/, WORLDPTR world ) +int worldfactory::show_worldgen_tab_options( const catacurses::window &win, WORLDPTR world ) { get_options().set_world_options( &world->WORLD_OPTIONS ); const std::string action = get_options().show( false, true ); @@ -591,6 +591,10 @@ int worldfactory::show_worldgen_tab_options( const catacurses::window &/*win*/, } else if( action == "NEXT_TAB" ) { return 1; + } else if( action == "HELP_KEYBINDINGS" ) { + draw_worldgen_tabs( win, 1 ); + catacurses::refresh(); + } else if( action == "QUIT" ) { return -999; } @@ -1194,6 +1198,8 @@ int worldfactory::show_worldgen_tab_confirm( const catacurses::window &win, WORL } else if( action == "PICK_RANDOM_WORLDNAME" ) { mvwprintz( w_confirmation, point( namebar_x, namebar_y ), c_light_gray, line_of_32_underscores ); world->world_name = worldname = pick_random_name(); + } else if( action == "HELP_KEYBINDINGS" ) { + draw_worldgen_tabs( win, 2 ); } else if( action == "QUIT" ) { // Cache the current name just in case they say No to the exit query. world->world_name = worldname; From ae9c4b2c457d75adb36a1c78542a57faacb4417e Mon Sep 17 00:00:00 2001 From: ZhilkinSerg Date: Sun, 12 Jan 2020 07:43:31 +0300 Subject: [PATCH 37/43] Jsonize faction epilogues (#36815) --- data/json/npcs/factions.json | 21 ++++++ data/json/snippets/epilogue_factions.json | 53 +++++++++++++ src/faction.cpp | 20 +++++ src/faction.h | 2 + src/game.cpp | 90 +---------------------- src/game.h | 2 +- 6 files changed, 100 insertions(+), 88 deletions(-) create mode 100644 data/json/snippets/epilogue_factions.json diff --git a/data/json/npcs/factions.json b/data/json/npcs/factions.json index ab3087f554004..d5172a60f739c 100644 --- a/data/json/npcs/factions.json +++ b/data/json/npcs/factions.json @@ -22,6 +22,7 @@ } }, "mon_faction": "player", + "epilogues": [ { "power_min": 0, "id": "faction_epilogue_your_followers_0" } ], "description": "The survivors who have entrusted you with their well-being. If morale drops, poor performance and mutiny may become issues." }, { @@ -133,6 +134,10 @@ }, "hells_raiders": { "kill on sight": true } }, + "epilogues": [ + { "power_min": 0, "id": "faction_epilogue_old_guard_0" }, + { "power_max": 150, "id": "faction_epilogue_old_guard_150" } + ], "description": "The remains of the federal government. The extent of their strength is unknown but squads of patrolling soldiers have been seen under their banner." }, { @@ -204,6 +209,10 @@ }, "hells_raiders": { "kill on sight": true } }, + "epilogues": [ + { "power_min": 0, "id": "faction_epilogue_free_merchants_0" }, + { "power_max": 150, "id": "faction_epilogue_free_merchants_150" } + ], "description": "A conglomeration of entrepreneurs and businessmen that stand together to hammer-out an existence through trade and industry." }, { @@ -289,6 +298,10 @@ "knows your voice": true } }, + "epilogues": [ + { "power_min": 0, "id": "faction_epilogue_tacoma_commune_0" }, + { "power_max": 150, "id": "faction_epilogue_tacoma_commune_150" } + ], "description": "An outpost started by the Free Merchants to provide a source of food and raw materials." }, { @@ -354,6 +367,10 @@ "wasteland_scavengers": { "share my stuff": true, "guard your stuff": true, "knows your voice": true }, "no_faction": { "knows your voice": true } }, + "epilogues": [ + { "power_min": 0, "id": "faction_epilogue_wasteland_scavengers_0" }, + { "power_max": 150, "id": "faction_epilogue_wasteland_scavengers_150" } + ], "description": "Autonomous bands or individuals who make their living raiding the ruins of the old-world for gear and provisions." }, { @@ -381,6 +398,10 @@ "old_guard": { "kill on sight": true }, "your_followers": { "kill on sight": true } }, + "epilogues": [ + { "power_min": 0, "id": "faction_epilogue_hells_raiders_0" }, + { "power_max": 150, "id": "faction_epilogue_hells_raiders_150" } + ], "description": "The largest gang of hooligans and bandits that preys upon other survivors. Even if you have no gear, there is always a need for slaves and fresh meat." }, { diff --git a/data/json/snippets/epilogue_factions.json b/data/json/snippets/epilogue_factions.json new file mode 100644 index 0000000000000..a1894f809f27e --- /dev/null +++ b/data/json/snippets/epilogue_factions.json @@ -0,0 +1,53 @@ +[ + { + "type": "snippet", + "category": "epilogue_factions", + "text": [ + { "id": "epilogue_faction_default", "text": " You are forgotten among the billions lost in the cataclysm…" }, + { + "id": "epilogue_faction_your_followers_0", + "text": " You are forgotten among the billions lost in the cataclysm…" + }, + { + "id": "epilogue_faction_old_guard_0", + "text": " Locked in an endless battle, the Old Guard was forced to consolidate their resources in a handful of fortified bases along the coast. Without the men or material to rebuild, the soldiers that remained lost all hope…" + }, + { + "id": "epilogue_faction_old_guard_150", + "text": " The steadfastness of individual survivors after the cataclysm impressed the tattered remains of the once glorious union. Spurred on by small successes, a number of operations to re-secure facilities met with limited success. Forced to eventually consolidate to large bases, the Old Guard left these facilities in the hands of the few survivors that remained. As the years past, little materialized from the hopes of rebuilding civilization…" + }, + { + "id": "epilogue_faction_free_merchants_0", + "text": " Life in the refugee shelter deteriorated as food shortages and disease destroyed any hope of maintaining a civilized enclave. The merchants and craftsmen dispersed to found new colonies but most became victims of marauding bandits. Those who survived never found a place to call home…" + }, + { + "id": "epilogue_faction_free_merchants_150", + "text": " The Free Merchants struggled for years to keep themselves fed but their once profitable trade routes were plundered by bandits and thugs. In squalor and filth the first generations born after the cataclysm are told stories of the old days when food was abundant and the children were allowed to play in the sun…" + }, + { + "id": "epilogue_faction_tacoma_commune_0", + "text": " The fledgling outpost was abandoned a few months later. The external threats combined with low crop yields caused the Free Merchants to withdraw their support. When the exhausted migrants returned to the refugee center they were turned away to face the world on their own." + }, + { + "id": "epilogue_faction_tacoma_commune_150", + "text": " The commune continued to grow rapidly through the years despite constant external threat. While maintaining a reputation as a haven for all law-abiding citizens, the commune's leadership remained loyal to the interests of the Free Merchants. Hard labor for little reward remained the price to be paid for those who sought the safety of the community." + }, + { + "id": "epilogue_faction_wasteland_scavengers_0", + "text": " The lone bands of survivors who wandered the now alien world dwindled in number through the years. Unable to compete with the growing number of monstrosities that had adapted to live in their world, those who did survive lived in dejected poverty and hopelessness…" + }, + { + "id": "epilogue_faction_wasteland_scavengers_150", + "text": " The scavengers who flourished in the opening days of the cataclysm found an ever increasing challenge in finding and maintaining equipment from the old world. Enormous hordes made cities impossible to enter while new eldritch horrors appeared mysteriously near old research labs. But on the fringes of where civilization once ended, bands of hunter-gatherers began to adopt agrarian lifestyles in fortified enclaves…" + }, + { + "id": "epilogue_faction_hells_raiders_0", + "text": " The raiders grew more powerful than any other faction as attrition destroyed the Old Guard. The ruthless men and women who banded together to rob refugees and pillage settlements soon found themselves without enough victims to survive. The Hell's Raiders were eventually destroyed when infighting erupted into civil war but there were few survivors left to celebrate their destruction." + }, + { + "id": "epilogue_faction_hells_raiders_150", + "text": " Fueled by drugs and rage, the Hell's Raiders fought tooth and nail to overthrow the last strongholds of the Old Guard. The costly victories brought the warlords abundant territory and slaves but little in the way of stability. Within weeks, infighting led to civil war as tribes vied for leadership of the faction. When only one warlord finally secured control, there was nothing left to fight for… just endless cities full of the dead." + } + ] + } +] diff --git a/src/faction.cpp b/src/faction.cpp index 428a7afe4f463..19c4e59617a2b 100644 --- a/src/faction.cpp +++ b/src/faction.cpp @@ -1,5 +1,6 @@ #include "faction.h" +#include #include #include #include @@ -25,6 +26,7 @@ #include "skill.h" #include "string_formatter.h" #include "translations.h" +#include "text_snippets.h" #include "item.h" #include "optional.h" #include "pimpl.h" @@ -99,6 +101,11 @@ faction_template::faction_template( const JsonObject &jsobj ) lone_wolf_faction = jsobj.get_bool( "lone_wolf_faction", false ); load_relations( jsobj ); mon_faction = jsobj.get_string( "mon_faction", "human" ); + for( const JsonObject &jao : jsobj.get_array( "epilogues" ) ) { + epilogue_data.emplace( jao.get_int( "power_min", std::numeric_limits::min() ), + jao.get_int( "power_max", std::numeric_limits::max() ), + jao.get_string( "id", "epilogue_faction_default" ) ); + } } std::string faction::describe() const @@ -107,6 +114,18 @@ std::string faction::describe() const return ret; } +std::vector faction::epilogue() const +{ + std::vector ret; + for( const std::tuple &epilogue_entry : epilogue_data ) { + if( power >= std::get<0>( epilogue_entry ) && power < std::get<1>( epilogue_entry ) ) { + const std::string id = std::get<2>( epilogue_entry ); + ret.emplace_back( SNIPPET.get_snippet_by_id( id ).value_or( translation() ).translated() ); + } + } + return ret; +} + void faction::add_to_membership( const character_id &guy_id, const std::string guy_name, const bool known ) { @@ -398,6 +417,7 @@ faction *faction_manager::get( const faction_id &id, const bool complain ) elem.second.name = fac_temp.name; elem.second.desc = fac_temp.desc; elem.second.mon_faction = fac_temp.mon_faction; + elem.second.epilogue_data = fac_temp.epilogue_data; for( const auto &rel_data : fac_temp.relations ) { if( elem.second.relations.find( rel_data.first ) == elem.second.relations.end() ) { elem.second.relations[rel_data.first] = rel_data.second; diff --git a/src/faction.h b/src/faction.h index 2b7ef08fc68bf..fd94875af5344 100644 --- a/src/faction.h +++ b/src/faction.h @@ -83,6 +83,7 @@ class faction_template std::string currency; // itype_id of the faction currency std::map> relations; std::string mon_faction; // mon_faction_id of the monster faction; defaults to human + std::set> epilogue_data; }; class faction : public faction_template @@ -96,6 +97,7 @@ class faction : public faction_template void faction_display( const catacurses::window &fac_w, int width ) const; std::string describe() const; + std::vector epilogue() const; std::string food_supply_text(); nc_color food_supply_color(); diff --git a/src/game.cpp b/src/game.cpp index fb2e6f073528d..773f4d962f98c 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -2582,7 +2582,7 @@ void game::death_screen() show_scores_ui( stats(), get_kill_tracker() ); disp_NPC_epilogues(); follower_ids.clear(); - disp_faction_ends(); + display_faction_epilogues(); } void game::move_save_to_graveyard() @@ -3041,100 +3041,16 @@ void game::disp_NPC_epilogues() refresh_all(); } -void game::disp_faction_ends() +void game::display_faction_epilogues() { catacurses::window w = catacurses::newwin( FULL_SCREEN_HEIGHT, FULL_SCREEN_WIDTH, point( std::max( 0, ( TERMX - FULL_SCREEN_WIDTH ) / 2 ), std::max( 0, ( TERMY - FULL_SCREEN_HEIGHT ) / 2 ) ) ); - std::vector data; for( const auto &elem : faction_manager_ptr->all() ) { if( elem.second.known_by_u ) { - if( elem.second.name == "Your Followers" ) { - data.emplace_back( _( " You are forgotten among the billions lost in the cataclysm…" ) ); - display_table( w, "", 1, data ); - } else if( elem.second.name == "The Old Guard" && elem.second.power != 100 ) { - if( elem.second.power < 150 ) { - data.emplace_back( - _( " Locked in an endless battle, the Old Guard was forced to consolidate their " - "resources in a handful of fortified bases along the coast. Without the men " - "or material to rebuild, the soldiers that remained lost all hope…" ) ); - } else { - data.emplace_back( _( " The steadfastness of individual survivors after the cataclysm impressed " - "the tattered remains of the once glorious union. Spurred on by small " - "successes, a number of operations to re-secure facilities met with limited " - "success. Forced to eventually consolidate to large bases, the Old Guard left " - "these facilities in the hands of the few survivors that remained. As the " - "years past, little materialized from the hopes of rebuilding civilization…" ) ); - } - display_table( w, _( "The Old Guard" ), 1, data ); - } else if( elem.second.name == "The Free Merchants" && elem.second.power != 100 ) { - if( elem.second.power < 150 ) { - data.emplace_back( _( " Life in the refugee shelter deteriorated as food shortages and disease " - "destroyed any hope of maintaining a civilized enclave. The merchants and " - "craftsmen dispersed to found new colonies but most became victims of " - "marauding bandits. Those who survived never found a place to call home…" ) ); - } else { - data.emplace_back( _( " The Free Merchants struggled for years to keep themselves fed but their " - "once profitable trade routes were plundered by bandits and thugs. In squalor " - "and filth the first generations born after the cataclysm are told stories of " - "the old days when food was abundant and the children were allowed to play in " - "the sun…" ) ); - } - display_table( w, _( "The Free Merchants" ), 1, data ); - } else if( elem.second.name == "The Tacoma Commune" && elem.second.power != 100 ) { - if( elem.second.power < 150 ) { - data.emplace_back( _( " The fledgling outpost was abandoned a few months later. The external " - "threats combined with low crop yields caused the Free Merchants to withdraw " - "their support. When the exhausted migrants returned to the refugee center " - "they were turned away to face the world on their own." ) ); - } else { - data.emplace_back( - _( " The commune continued to grow rapidly through the years despite constant " - "external threat. While maintaining a reputation as a haven for all law-" - "abiding citizens, the commune's leadership remained loyal to the interests of " - "the Free Merchants. Hard labor for little reward remained the price to be " - "paid for those who sought the safety of the community." ) ); - } - display_table( w, _( "The Tacoma Commune" ), 1, data ); - } else if( elem.second.name == "The Wasteland Scavengers" && elem.second.power != 100 ) { - if( elem.second.power < 150 ) { - data.emplace_back( - _( " The lone bands of survivors who wandered the now alien world dwindled in " - "number through the years. Unable to compete with the growing number of " - "monstrosities that had adapted to live in their world, those who did survive " - "lived in dejected poverty and hopelessness…" ) ); - } else { - data.emplace_back( - _( " The scavengers who flourished in the opening days of the cataclysm found " - "an ever increasing challenge in finding and maintaining equipment from the " - "old world. Enormous hordes made cities impossible to enter while new " - "eldritch horrors appeared mysteriously near old research labs. But on the " - "fringes of where civilization once ended, bands of hunter-gatherers began to " - "adopt agrarian lifestyles in fortified enclaves…" ) ); - } - display_table( w, _( "The Wasteland Scavengers" ), 1, data ); - } else if( elem.second.name == "Hell's Raiders" && elem.second.power != 100 ) { - if( elem.second.power < 150 ) { - data.emplace_back( _( " The raiders grew more powerful than any other faction as attrition " - "destroyed the Old Guard. The ruthless men and women who banded together to " - "rob refugees and pillage settlements soon found themselves without enough " - "victims to survive. The Hell's Raiders were eventually destroyed when " - "infighting erupted into civil war but there were few survivors left to " - "celebrate their destruction." ) ); - } else { - data.emplace_back( _( " Fueled by drugs and rage, the Hell's Raiders fought tooth and nail to " - "overthrow the last strongholds of the Old Guard. The costly victories " - "brought the warlords abundant territory and slaves but little in the way of " - "stability. Within weeks, infighting led to civil war as tribes vied for " - "leadership of the faction. When only one warlord finally secured control, " - "there was nothing left to fight for… just endless cities full of the dead." ) ); - } - display_table( w, _( "Hell's Raiders" ), 1, data ); - } - + display_table( w, elem.second.name, 1, elem.second.epilogue() ); } - data.clear(); } refresh_all(); diff --git a/src/game.h b/src/game.h index 8b6db37d16d2b..b43c5ce50940b 100644 --- a/src/game.h +++ b/src/game.h @@ -886,7 +886,7 @@ class game bool handle_mouseview( input_context &ctxt, std::string &action ); // On-request draw functions - void disp_faction_ends(); // Display the faction endings + void display_faction_epilogues(); void disp_NPC_epilogues(); // Display NPC endings /* Debug functions */ From 6f26ed5568dfad33e6e3eb50daace98614f32832 Mon Sep 17 00:00:00 2001 From: Fris0uman <41293484+Fris0uman@users.noreply.github.com> Date: Sun, 12 Jan 2020 05:54:53 +0100 Subject: [PATCH 38/43] Jsonize cable charger cbm behaviour (#36818) --- data/json/bionics.json | 3 + doc/JSON_INFO.md | 1 + src/bionics.cpp | 228 +++++++++++++++++++++++++++++------------ src/bionics.h | 2 + src/bionics_ui.cpp | 22 +++- src/character.cpp | 13 +++ src/character.h | 7 ++ src/iuse.cpp | 14 ++- 8 files changed, 216 insertions(+), 74 deletions(-) diff --git a/data/json/bionics.json b/data/json/bionics.json index f6f103d67083e..405ff9a667ebb 100644 --- a/data/json/bionics.json +++ b/data/json/bionics.json @@ -141,6 +141,9 @@ "name": "Cable Charger System", "description": "You have a complex port surgically mounted above your hip. While active, it will recharge bionic power when connected to a power source via jumper cable.", "occupied_bodyparts": [ [ "TORSO", 10 ] ], + "is_remote_fueled": true, + "time": 1, + "fuel_efficiency": 1, "flags": [ "BIONIC_POWER_SOURCE", "BIONIC_SHOCKPROOF", "BIONIC_TOGGLED" ] }, { diff --git a/doc/JSON_INFO.md b/doc/JSON_INFO.md index 2629e2de3c2a1..004d75c77eb67 100644 --- a/doc/JSON_INFO.md +++ b/doc/JSON_INFO.md @@ -380,6 +380,7 @@ This section describes each json file and their contents. Each json has their ow | occupied_bodyparts | (_optional_) A list of body parts occupied by this bionic, and the number of bionic slots it take on those parts. | capacity | (_optional_) Amount of power storage added by this bionic. Strings can be used "1 kJ"/"1000 J"/"1000000 mJ" (default: `0`) | fuel_options | (_optional_) A list of fuel that this bionic can use to produce bionic power. +| is_remote_fueled | (_optional_) If true this bionic allows you to plug your power banks to an external power source (solar backpack, UPS, vehicle etc) via a cable. (default: `false`) | fuel_capacity | (_optional_) Volume of fuel this bionic can store. | fuel_efficiency | (_optional_) Fraction of fuel energy converted into power. (default: `0`) | passive_fuel_efficiency | (_optional_) Fraction of fuel energy passively converted into power. Useful for CBM using PERPETUAL fuel like `muscle`, `wind` or `sun_light`. (default: `0`) diff --git a/src/bionics.cpp b/src/bionics.cpp index 274411bc278ad..d902945d1c9b8 100644 --- a/src/bionics.cpp +++ b/src/bionics.cpp @@ -120,6 +120,8 @@ static const trait_id trait_CENOBITE( "CENOBITE" ); static const bionic_id bionic_TOOLS_EXTEND( "bio_tools_extend" ); +static const itype_id sun_light( "sunlight" ); + namespace { std::map bionics; @@ -699,7 +701,7 @@ bool player::activate_bionic( int b, bool eff_only ) tank_plut = 0; reactor_plut = 0; } - } else if( bio.id == "bio_cable" ) { + } else if( bio.info().is_remote_fueled ) { std::vector cables = items_with( []( const item & it ) { return it.has_flag( "CABLE_SPOOL" ); } ); @@ -768,6 +770,10 @@ bool Character::deactivate_bionic( int b, bool eff_only ) return false; } + if( bio.info().is_remote_fueled ) { + reset_remote_fuel(); + } + // Just do the effect, no stat changing or messages if( !eff_only ) { if( !bio.powered ) { @@ -845,12 +851,39 @@ bool player::deactivate_bionic( int b, bool eff_only ) bool Character::burn_fuel( int b, bool start ) { bionic &bio = ( *my_bionics )[b]; - if( bio.info().fuel_opts.empty() || bio.is_this_fuel_powered( "muscle" ) ) { + if( ( bio.info().fuel_opts.empty() && !bio.info().is_remote_fueled ) || + bio.is_this_fuel_powered( "muscle" ) ) { return true; } const bool is_metabolism_powered = bio.is_this_fuel_powered( "metabolism" ); - const std::vector &fuel_available = get_fuel_available( bio.id ); - const float effective_efficiency = get_effective_efficiency( b, bio.info().fuel_efficiency ); + const bool is_cable_powered = bio.info().is_remote_fueled; + std::vector fuel_available = get_fuel_available( bio.id ); + float effective_efficiency = get_effective_efficiency( b, bio.info().fuel_efficiency ); + + if( is_cable_powered ) { + const itype_id remote_fuel = find_remote_fuel(); + if( !remote_fuel.empty() ) { + fuel_available.emplace_back( remote_fuel ); + if( remote_fuel == sun_light ) { + // basic solar panel produces 50W = 1 charge/20_seconds = 180 charges/hour(3600) + if( is_wearing( "solarpack_on" ) ) { + effective_efficiency = 0.05; + } + // quantum solar backpack = solar panel x6 + if( is_wearing( "q_solarpack_on" ) ) { + effective_efficiency = 0.3; + } + } + } else if( !start ) { + add_msg_player_or_npc( m_info, + _( "Your %s runs out of fuel and turn off." ), + _( "'s %s runs out of fuel and turn off." ), + bio.info().name ); + bio.powered = false; + deactivate_bionic( b, true ); + return false; + } + } if( start && fuel_available.empty() ) { add_msg_player_or_npc( m_bad, _( "Your %s does not have enough fuel to start." ), @@ -873,6 +906,8 @@ bool Character::burn_fuel( int b, bool start ) get_healthy_kcal() ); } else if( is_perpetual_fuel ) { current_fuel_stock = 1; + } else if( is_cable_powered ) { + current_fuel_stock = std::stoi( get_value( "rem_" + fuel ) ); } else { current_fuel_stock = std::stoi( get_value( fuel ) ); } @@ -906,7 +941,7 @@ bool Character::burn_fuel( int b, bool start ) mod_stored_kcal( -kcal_consumed ); mod_power_level( power_gain ); } else if( is_perpetual_fuel ) { - if( fuel == itype_id( "sunlight" ) && g->is_in_sunlight( pos() ) ) { + if( fuel == sun_light && g->is_in_sunlight( pos() ) ) { const weather_type &wtype = current_weather( pos() ); const float tick_sunlight = incident_sunlight( wtype, calendar::turn ); const double intensity = tick_sunlight / default_daylight_level(); @@ -923,6 +958,15 @@ bool Character::burn_fuel( int b, bool start ) g->is_sheltered( pos() ) ); mod_power_level( units::from_kilojoule( fuel_energy ) * windpower * effective_efficiency ); } + } else if( is_cable_powered ) { + const int unconsumed = consume_remote_fuel( 1 ); + if( unconsumed == 0 ) { + mod_power_level( units::from_kilojoule( fuel_energy ) * effective_efficiency ); + current_fuel_stock -= 1; + } else { + current_fuel_stock = 0; + } + set_value( "rem_" + fuel, std::to_string( current_fuel_stock ) ); } else { current_fuel_stock -= 1; set_value( fuel, std::to_string( current_fuel_stock ) ); @@ -975,7 +1019,7 @@ void Character::passive_power_gen( int b ) continue; } - if( fuel == itype_id( "sunlight" ) ) { + if( fuel == sun_light ) { const double modifier = g->natural_light_level( pos().z ) / default_daylight_level(); mod_power_level( units::from_kilojoule( fuel_energy ) * modifier * effective_passive_efficiency ); } else if( fuel == itype_id( "wind" ) ) { @@ -999,6 +1043,101 @@ void Character::passive_power_gen( int b ) } } +itype_id Character::find_remote_fuel( bool look_only ) +{ + itype_id remote_fuel; + + const std::vector cables = items_with( []( const item & it ) { + return it.active && it.has_flag( "CABLE_SPOOL" ); + } ); + + for( const item *cable : cables ) { + + const cata::optional target = cable->get_cable_target( this, pos() ); + if( !target ) { + if( g->m.is_outside( pos() ) && !is_night( calendar::turn ) && + cable->get_var( "state" ) == "solar_pack_link" ) { + if( !look_only ) { + set_value( "sunlight", "1" ); + } + remote_fuel = sun_light; + } + + if( cable->get_var( "state" ) == "UPS_link" ) { + static const item_filter used_ups = [&]( const item & itm ) { + return itm.get_var( "cable" ) == "plugged_in"; + }; + if( !look_only ) { + if( has_charges( "UPS_off", 1, used_ups ) ) { + set_value( "rem_battery", std::to_string( charges_of( "UPS_off", + units::to_kilojoule( max_power_level ), used_ups ) ) ); + } else if( has_charges( "adv_UPS_off", 1, used_ups ) ) { + set_value( "rem_battery", std::to_string( charges_of( "adv_UPS_off", + units::to_kilojoule( max_power_level ), used_ups ) ) ); + } else { + set_value( "rem_battery", std::to_string( 0 ) ); + } + } + remote_fuel = itype_id( "battery" ); + } + continue; + } + const optional_vpart_position vp = g->m.veh_at( *target ); + if( !vp ) { + continue; + } + if( !look_only ) { + set_value( "rem_battery", std::to_string( vp->vehicle().fuel_left( itype_id( "battery" ), + true ) ) ); + } + remote_fuel = itype_id( "battery" ); + } + + return remote_fuel; +} + +int Character::consume_remote_fuel( int amount ) +{ + int unconsumed_amount = amount; + const std::vector cables = items_with( []( const item & it ) { + return it.active && it.has_flag( "CABLE_SPOOL" ); + } ); + + for( const item *cable : cables ) { + const cata::optional target = cable->get_cable_target( this, pos() ); + if( target ) { + const optional_vpart_position vp = g->m.veh_at( *target ); + if( !vp ) { + continue; + } + unconsumed_amount = vp->vehicle().discharge_battery( amount ); + } + } + + if( unconsumed_amount > 0 ) { + static const item_filter used_ups = [&]( const item & itm ) { + return itm.get_var( "cable" ) == "plugged_in"; + }; + if( has_charges( "UPS_off", unconsumed_amount, used_ups ) ) { + use_charges( "UPS_off", unconsumed_amount, used_ups ); + unconsumed_amount -= 1; + } else if( has_charges( "adv_UPS_off", unconsumed_amount, used_ups ) ) { + use_charges( "adv_UPS_off", roll_remainder( unconsumed_amount * 0.6 ), used_ups ); + unconsumed_amount -= 1; + } + } + + return unconsumed_amount; +} + +void Character::reset_remote_fuel() +{ + if( get_bionic_fueled_with( item( sun_light ) ).empty() ) { + remove_value( "sunlight" ); + } + remove_value( "rem_battery" ); +} + void Character::heat_emission( int b, int fuel_energy ) { const bionic &bio = ( *my_bionics )[b]; @@ -1083,9 +1222,20 @@ static bool attempt_recharge( Character &p, bionic &bio, units::energy &amount, void Character::process_bionic( int b ) { bionic &bio = ( *my_bionics )[b]; - if( !bio.id->fuel_opts.empty() && bio.is_auto_start_on() ) { + if( ( !bio.id->fuel_opts.empty() || bio.id->is_remote_fueled ) && bio.is_auto_start_on() ) { const float start_threshold = bio.get_auto_start_thresh(); - const std::vector &fuel_available = get_fuel_available( bio.id ); + std::vector fuel_available = get_fuel_available( bio.id ); + if( bio.id->is_remote_fueled ) { + const itype_id rem_fuel = find_remote_fuel(); + const std::string rem_amount = get_value( "rem_" + rem_fuel ); + int rem_fuel_stock = 0; + if( !rem_amount.empty() ) { + rem_fuel_stock = std::stoi( rem_amount ); + } + if( !rem_fuel.empty() && ( rem_fuel_stock > 0 || item( rem_fuel ).has_flag( "PERPETUAL" ) ) ) { + fuel_available.emplace_back( rem_fuel ); + } + } if( !fuel_available.empty() && get_power_level() <= start_threshold * get_max_power_level() ) { g->u.activate_bionic( b ); } else if( get_power_level() <= start_threshold * get_max_power_level() && @@ -1206,63 +1356,6 @@ void Character::process_bionic( int b ) mod_stim( -1 ); mod_power_level( -2_kJ ); } - } else if( bio.id == "bio_cable" ) { - if( is_max_power() ) { - return; - } - - const std::vector cables = items_with( []( const item & it ) { - return it.active && it.has_flag( "CABLE_SPOOL" ); - } ); - - constexpr int battery_per_power = 10; - int wants_power_amt = battery_per_power; - for( const item *cable : cables ) { - const cata::optional target = cable->get_cable_target( this, pos() ); - if( !target ) { - if( g->m.is_outside( pos() ) && !is_night( calendar::turn ) && - cable->get_var( "state" ) == "solar_pack_link" ) { - double modifier = g->natural_light_level( pos().z ) / default_daylight_level(); - // basic solar panel produces 50W = 1 charge/20_seconds = 180 charges/hour(3600) - if( is_wearing( "solarpack_on" ) && x_in_y( 180 * modifier, 3600 ) ) { - mod_power_level( 1_kJ ); - } - // quantum solar backpack = solar panel x6 - if( is_wearing( "q_solarpack_on" ) && x_in_y( 6 * 180 * modifier, 3600 ) ) { - mod_power_level( 1_kJ ); - } - } - if( cable->get_var( "state" ) == "UPS_link" ) { - static const item_filter used_ups = [&]( const item & itm ) { - return itm.get_var( "cable" ) == "plugged_in"; - }; - if( has_charges( "UPS_off", 1, used_ups ) ) { - use_charges( "UPS_off", 1, used_ups ); - mod_power_level( 1_kJ ); - } else if( has_charges( "adv_UPS_off", 1, used_ups ) ) { - use_charges( "adv_UPS_off", roll_remainder( 0.6 ), used_ups ); - mod_power_level( 1_kJ ); - } - } - continue; - } - const optional_vpart_position vp = g->m.veh_at( *target ); - if( !vp ) { - continue; - } - - wants_power_amt = vp->vehicle().discharge_battery( wants_power_amt ); - if( wants_power_amt == 0 ) { - mod_power_level( 1_kJ ); - break; - } - } - - if( wants_power_amt < battery_per_power && - wants_power_amt > 0 && - x_in_y( battery_per_power - wants_power_amt, battery_per_power ) ) { - mod_power_level( 1_kJ ); - } } else if( bio.id == "bio_gills" ) { if( has_effect( effect_asthma ) ) { add_msg_if_player( m_good, @@ -2319,6 +2412,7 @@ void load_bionic( const JsonObject &jsobj ) assign( jsobj, "exothermic_power_gen", new_bionic.exothermic_power_gen ); assign( jsobj, "power_gen_emission", new_bionic.power_gen_emission ); assign( jsobj, "coverage_power_gen_penalty", new_bionic.coverage_power_gen_penalty ); + assign( jsobj, "is_remote_fueled", new_bionic.is_remote_fueled ); jsobj.read( "canceled_mutations", new_bionic.canceled_mutations ); jsobj.read( "included_bionics", new_bionic.included_bionics ); @@ -2440,7 +2534,7 @@ bool bionic::is_this_fuel_powered( const itype_id &this_fuel ) const void bionic::toggle_safe_fuel_mod() { - if( info().fuel_opts.empty() ) { + if( info().fuel_opts.empty() && !info().is_remote_fueled ) { return; } if( !has_flag( "SAFE_FUEL_OFF" ) ) { @@ -2452,7 +2546,7 @@ void bionic::toggle_safe_fuel_mod() void bionic::toggle_auto_start_mod() { - if( info().fuel_opts.empty() ) { + if( info().fuel_opts.empty() && !info().is_remote_fueled ) { return; } if( !is_auto_start_on() ) { diff --git a/src/bionics.h b/src/bionics.h index c852a52dcf492..93b3eae4e8fc9 100644 --- a/src/bionics.h +++ b/src/bionics.h @@ -83,6 +83,8 @@ struct bionic_data { units::mass weight_capacity_bonus; /**Map of stats and their corresponding bonuses passively granted by a bionic*/ std::map stat_bonus; + /**This bionic draws power through a cable*/ + bool is_remote_fueled = false; /**Fuel types that can be used by this bionic*/ std::vector fuel_opts; /**How much fuel this bionic can hold*/ diff --git a/src/bionics_ui.cpp b/src/bionics_ui.cpp index 99cc52d4d2fb4..3cedc89252ff8 100644 --- a/src/bionics_ui.cpp +++ b/src/bionics_ui.cpp @@ -76,6 +76,19 @@ static void draw_bionics_titlebar( const catacurses::window &window, player *p, fuel_string += temp_fuel.tname() + ": " + colorize( p->get_value( fuel ), c_green ) + "/" + std::to_string( p->get_total_fuel_capacity( fuel ) ) + " "; } + if( bio.info().is_remote_fueled && p->has_active_bionic( bio.id ) ) { + const itype_id rem_fuel = p->find_remote_fuel( true ); + if( !rem_fuel.empty() ) { + const item tmp_rem_fuel( rem_fuel ); + if( tmp_rem_fuel.has_flag( "PERPETUAL" ) ) { + fuel_string += colorize( tmp_rem_fuel.tname(), c_green ) + " "; + } else { + fuel_string += tmp_rem_fuel.tname() + ": " + colorize( p->get_value( "rem_" + rem_fuel ), + c_green ) + " "; + } + found_fuel = true; + } + } } if( !found_fuel ) { fuel_string.clear(); @@ -145,10 +158,11 @@ static std::string build_bionic_poweronly_string( const bionic &bio ) if( bio.incapacitated_time > 0_turns ) { properties.push_back( _( "(incapacitated)" ) ); } - if( !bio.has_flag( "SAFE_FUEL_OFF" ) && !bio.info().fuel_opts.empty() ) { + if( !bio.has_flag( "SAFE_FUEL_OFF" ) && ( !bio.info().fuel_opts.empty() || + bio.info().is_remote_fueled ) ) { properties.push_back( _( "(fuel saving ON)" ) ); } - if( bio.is_auto_start_on() && !bio.info().fuel_opts.empty() ) { + if( bio.is_auto_start_on() && ( !bio.info().fuel_opts.empty() || bio.info().is_remote_fueled ) ) { const std::string label = string_format( _( "(auto start < %d %%)" ), static_cast( bio.get_auto_start_thresh() * 100 ) ); properties.push_back( label ); @@ -666,7 +680,7 @@ void player::power_bionics() auto &bio_list = tab_mode == TAB_ACTIVE ? active : passive; if( !current_bionic_list->empty() ) { tmp = bio_list[cursor]; - if( !tmp->info().fuel_opts.empty() ) { + if( !tmp->info().fuel_opts.empty() || tmp->info().is_remote_fueled ) { tmp->toggle_safe_fuel_mod(); g->refresh_all(); redraw = true; @@ -681,7 +695,7 @@ void player::power_bionics() auto &bio_list = tab_mode == TAB_ACTIVE ? active : passive; if( !current_bionic_list->empty() ) { tmp = bio_list[cursor]; - if( !tmp->info().fuel_opts.empty() ) { + if( !tmp->info().fuel_opts.empty() || tmp->info().is_remote_fueled ) { tmp->toggle_auto_start_mod(); g->refresh_all(); redraw = true; diff --git a/src/character.cpp b/src/character.cpp index 036e9688690b0..6d80ec53ef989 100644 --- a/src/character.cpp +++ b/src/character.cpp @@ -1315,6 +1315,16 @@ bool Character::has_any_bionic() const return !get_bionics().empty(); } +bionic_id Character::get_remote_fueled_bionic() const +{ + for( const bionic_id bid : get_bionics() ) { + if( bid->is_remote_fueled ) { + return bid; + } + } + return bionic_id(); +} + bool Character::can_fuel_bionic_with( const item &it ) const { if( !it.is_fuel() ) { @@ -1487,6 +1497,9 @@ void Character::update_fuel_storage( const itype_id &fuel ) } std::vector bids = get_bionic_fueled_with( it ); + if( bids.empty() ) { + return; + } int amount_fuel_loaded = std::stoi( get_value( fuel ) ); std::vector loaded_bio; diff --git a/src/character.h b/src/character.h index ba41c1a9d5d4a..05d431f6b7385 100644 --- a/src/character.h +++ b/src/character.h @@ -787,6 +787,8 @@ class Character : public Creature, public visitable std::vector get_bionic_fueled_with( const item &it ) const; /**Return bionic_id of fueled bionics*/ std::vector get_fueled_bionics() const; + /**Returns bionic_id of first remote fueled bionic found*/ + bionic_id get_remote_fueled_bionic() const; /**Return bionic_id of bionic of most fuel efficient bionic*/ bionic_id get_most_efficient_bionic( const std::vector &bids ) const; /**Return list of available fuel for this bionic*/ @@ -811,6 +813,11 @@ class Character : public Creature, public visitable bool burn_fuel( int b, bool start = false ); /**Passively produce power from PERPETUAL fuel*/ void passive_power_gen( int b ); + /**Find fuel used by remote powered bionic*/ + itype_id find_remote_fuel( bool look_only = false ); + /**Consume fuel used by remote powered bionic, return amount of request unfulfilled (0 if totally successful).*/ + int consume_remote_fuel( int amount ); + void reset_remote_fuel(); /**Handle heat from exothermic power generation*/ void heat_emission( int b, int fuel_energy ); /**Applies modifier to fuel_efficiency and returns the resulting efficiency*/ diff --git a/src/iuse.cpp b/src/iuse.cpp index d381eb9a237c4..077d94d20613a 100644 --- a/src/iuse.cpp +++ b/src/iuse.cpp @@ -4256,11 +4256,12 @@ int iuse::dive_tank( player *p, item *it, bool t, const tripoint & ) int iuse::solarpack( player *p, item *it, bool, const tripoint & ) { - if( !p->has_bionic( bionic_id( "bio_cable" ) ) ) { // Cable CBM required + const bionic_id rem_bid = p->get_remote_fueled_bionic(); + if( rem_bid.is_empty() ) { // Cable CBM required p->add_msg_if_player( _( "You have no cable charging system to plug it in, so you leave it alone." ) ); return 0; - } else if( !p->has_active_bionic( bionic_id( "bio_cable" ) ) ) { // when OFF it takes no effect + } else if( !p->has_active_bionic( rem_bid ) ) { // when OFF it takes no effect p->add_msg_if_player( _( "Activate your cable charging system to take advantage of it." ) ); } @@ -8819,7 +8820,7 @@ int iuse::multicooker( player *p, item *it, bool t, const tripoint &pos ) int iuse::cable_attach( player *p, item *it, bool, const tripoint & ) { std::string initial_state = it->get_var( "state", "attach_first" ); - const bool has_bio_cable = p->has_bionic( bionic_id( "bio_cable" ) ); + const bool has_bio_cable = !p->get_remote_fueled_bionic().is_empty(); const bool has_solar_pack = p->is_wearing( "solarpack" ) || p->is_wearing( "q_solarpack" ); const bool has_solar_pack_on = p->is_wearing( "solarpack_on" ) || p->is_wearing( "q_solarpack_on" ); const bool wearing_solar_pack = has_solar_pack || has_solar_pack_on; @@ -8836,10 +8837,16 @@ int iuse::cable_attach( player *p, item *it, bool, const tripoint & ) const std::string dont_have_ups = _( "You don't have any UPS." ); const auto set_cable_active = []( player * p, item * it, const std::string & state ) { + const std::string prev_state = it->get_var( "state" ); it->set_var( "state", state ); it->active = true; it->process( p, p->pos(), false ); p->moves -= 15; + + if( !prev_state.empty() && ( prev_state == "cable_charger" || ( prev_state != "attach_first" && + ( state == "cable_charger_link" || state == "cable_charger" ) ) ) ) { + p->find_remote_fuel(); + } }; if( initial_state == "attach_first" ) { if( has_bio_cable ) { @@ -8943,6 +8950,7 @@ int iuse::cable_attach( player *p, item *it, bool, const tripoint & ) if( choice < 0 ) { return 0; // we did nothing. } else if( choice == 0 ) { // unconnect & respool + p->reset_remote_fuel(); it->reset_cable( p ); return 0; } else if( choice == 2 ) { // connect self while other end already connected From 2df9b661db0b7622a5f51c4bd2022cc8e057d72a Mon Sep 17 00:00:00 2001 From: Trioct Date: Sat, 11 Jan 2020 23:34:33 -0600 Subject: [PATCH 39/43] Fix monster evolution delay bug (#36842) --- src/monster.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/monster.cpp b/src/monster.cpp index d934edd9e283c..90618a33f2e46 100644 --- a/src/monster.cpp +++ b/src/monster.cpp @@ -352,7 +352,7 @@ void monster::try_upgrade( bool pin_time ) return; } - const int current_day = to_days( calendar::turn - calendar::start_of_cataclysm ); + const int current_day = to_days( calendar::turn - calendar::turn_zero ); //This should only occur when a monster is created or upgraded to a new form if( upgrade_time < 0 ) { upgrade_time = next_upgrade_time(); From d2ba189004409078dca08d3b33d3c04fd0ca7921 Mon Sep 17 00:00:00 2001 From: ZhilkinSerg Date: Sun, 12 Jan 2020 08:46:37 +0300 Subject: [PATCH 40/43] Jsonize species descriptions (#36906) --- data/json/species.json | 26 +++++++++++++++++++++++--- src/monster.cpp | 14 +------------- src/monstergenerator.cpp | 1 + src/monstergenerator.h | 1 + src/mtype.cpp | 10 ++++++++++ src/mtype.h | 1 + 6 files changed, 37 insertions(+), 16 deletions(-) diff --git a/data/json/species.json b/data/json/species.json index d41a8656f33e1..4b3fef2d02a05 100644 --- a/data/json/species.json +++ b/data/json/species.json @@ -2,98 +2,117 @@ { "type": "SPECIES", "id": "MAMMAL", + "description": "a mammal", "fear_triggers": [ "HURT", "FIRE", "FRIEND_DIED" ] }, { "type": "SPECIES", "id": "AMPHIBIAN", + "description": "an amphibian", "fear_triggers": [ "HURT", "FIRE" ] }, { "type": "SPECIES", "id": "BIRD", + "description": "a bird", "fear_triggers": [ "HURT", "SOUND" ] }, { "type": "SPECIES", "id": "REPTILE", + "description": "a reptile", "fear_triggers": [ "HURT", "FIRE" ] }, { "type": "SPECIES", "id": "FISH", + "description": "a fish", "fear_triggers": [ "HURT", "FRIEND_ATTACKED" ] }, { "type": "SPECIES", "id": "MUTANT", + "description": "a mutant", "fear_triggers": [ "FIRE" ] }, { "type": "SPECIES", "id": "NETHER", + "description": "a nether creature", "fear_triggers": [ "HURT" ] }, { "type": "SPECIES", "id": "BLOB", + "description": "a blob", "footsteps": "plop." }, { "type": "SPECIES", "id": "FUNGUS", + "description": "a fungus", "fear_triggers": [ "HURT", "FIRE" ] }, { "type": "SPECIES", "id": "LEECH_PLANT", + "description": "a leech plant", "fear_triggers": [ "HURT", "FIRE" ] }, { "type": "SPECIES", "id": "INSECT", + "description": "an insect", "anger_triggers": [ "FRIEND_DIED" ], "fear_triggers": [ "HURT", "FIRE" ] }, { "type": "SPECIES", "id": "SPIDER", + "description": "a spider", "anger_triggers": [ "FRIEND_DIED" ], "fear_triggers": [ "HURT", "FIRE" ] }, { "type": "SPECIES", "id": "PLANT", + "description": "a plant", "fear_triggers": [ "HURT", "FIRE" ] }, { "type": "SPECIES", "id": "MOLLUSK", + "description": "a mollusk", "fear_triggers": [ "HURT", "FIRE" ] }, { "type": "SPECIES", "id": "WORM", + "description": "a worm", "footsteps": "rustle.", "fear_triggers": [ "HURT" ] }, { "type": "SPECIES", "id": "ZOMBIE", + "description": "a zombie", "footsteps": "shuffling." }, { "type": "SPECIES", "id": "ROBOT", + "description": "a robot", "footsteps": "mechanical whirring." }, { "type": "SPECIES", - "id": "HORROR" + "id": "HORROR", + "description": "a horror" }, { "type": "SPECIES", - "id": "ABERRATION" + "id": "ABERRATION", + "description": "an aberration" }, { "type": "SPECIES", @@ -101,7 +120,8 @@ }, { "type": "SPECIES", - "id": "HUMAN" + "id": "HUMAN", + "description": "a human" }, { "type": "SPECIES", diff --git a/src/monster.cpp b/src/monster.cpp index 90618a33f2e46..7ddab4dc3f4c3 100644 --- a/src/monster.cpp +++ b/src/monster.cpp @@ -682,22 +682,10 @@ std::string monster::extended_description() const ss += string_format( _( "It is %s in size." ), size_names.at( get_size() ) ) + "\n"; - std::vector types; + std::vector types = type->species_descriptions(); if( type->has_flag( MF_ANIMAL ) ) { types.emplace_back( _( "an animal" ) ); } - if( type->in_species( ZOMBIE ) ) { - types.emplace_back( _( "a zombie" ) ); - } - if( type->in_species( FUNGUS ) ) { - types.emplace_back( _( "a fungus" ) ); - } - if( type->in_species( INSECT ) ) { - types.emplace_back( _( "an insect" ) ); - } - if( type->in_species( ABERRATION ) ) { - types.emplace_back( _( "an aberration" ) ); - } if( !types.empty() ) { ss += string_format( _( "It is %s." ), enumerate_as_string( types ) ) + "\n"; diff --git a/src/monstergenerator.cpp b/src/monstergenerator.cpp index 25a45d5833b6a..0e0fbb4d4cd10 100644 --- a/src/monstergenerator.cpp +++ b/src/monstergenerator.cpp @@ -887,6 +887,7 @@ void MonsterGenerator::load_species( const JsonObject &jo, const std::string &sr void species_type::load( const JsonObject &jo, const std::string & ) { + optional( jo, was_loaded, "description", description ); optional( jo, was_loaded, "footsteps", footsteps, "footsteps." ); footsteps = _( footsteps ); const auto flag_reader = enum_flags_reader { "monster flag" }; diff --git a/src/monstergenerator.h b/src/monstergenerator.h index ac5fe5daaa37c..ac00ab8bd5866 100644 --- a/src/monstergenerator.h +++ b/src/monstergenerator.h @@ -27,6 +27,7 @@ using mon_action_defend = void ( * )( monster &, Creature *, dealt_projectile_at struct species_type { species_id id; bool was_loaded = false; + translation description; std::string footsteps; enum_bitset flags; enum_bitset anger; diff --git a/src/mtype.cpp b/src/mtype.cpp index 366c394b3c6a4..b606a67b57fdf 100644 --- a/src/mtype.cpp +++ b/src/mtype.cpp @@ -119,6 +119,16 @@ bool mtype::in_species( const species_type &spec ) const { return species_ptrs.count( &spec ) > 0; } +std::vector mtype::species_descriptions() const +{ + std::vector ret; + for( const species_id &s : species ) { + if( !s->description.empty() ) { + ret.emplace_back( s->description.translated() ); + } + } + return ret; +} bool mtype::same_species( const mtype &other ) const { diff --git a/src/mtype.h b/src/mtype.h index 8d45b54d1cbdb..d28bc9f100be2 100644 --- a/src/mtype.h +++ b/src/mtype.h @@ -370,6 +370,7 @@ struct mtype { bool in_category( const std::string &category ) const; bool in_species( const species_id &spec ) const; bool in_species( const species_type &spec ) const; + std::vector species_descriptions() const; //Used for corpses. field_type_id bloodType() const; field_type_id gibType() const; From e6c70b7fddaa2a8df2feb705449208c57f6c9428 Mon Sep 17 00:00:00 2001 From: ZhilkinSerg Date: Sun, 12 Jan 2020 09:08:08 +0300 Subject: [PATCH 41/43] Refactor npc epilogues (through text snippets) (#36869) --- data/json/npcs/epilogues.json | 633 --------------------------- data/json/snippets/epilogue_npc.json | 434 ++++++++++++++++++ src/game.cpp | 8 +- src/init.cpp | 1 - src/npc.cpp | 56 +-- src/npc.h | 18 +- 6 files changed, 446 insertions(+), 704 deletions(-) delete mode 100644 data/json/npcs/epilogues.json create mode 100644 data/json/snippets/epilogue_npc.json diff --git a/data/json/npcs/epilogues.json b/data/json/npcs/epilogues.json deleted file mode 100644 index ea3249ebc7376..0000000000000 --- a/data/json/npcs/epilogues.json +++ /dev/null @@ -1,633 +0,0 @@ -[ - { - "type": "epilogue", - "//": "Class currently is male/female but will expand to dog/robot/mutant… whatever needs its own ending", - "group": "male", - "id": "npc_male_1", - "text": " Died several years later at the hands of a Hell's Raiders band. Till the end, he held out hope that his daughter was still alive in the wasteland." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_2", - "text": " Was making his way to Michigan to search for family when he broke his leg in the woods. Died of hypothermia a week later. A note found with his body read, 'I wish I could have saved her.'" - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_3", - "text": " Survived for a number of years and made a name for himself amongst other survivors. Eventually he began augmenting himself with bionics… when a failed surgery left him permanently blind he committed suicide without leaving a note." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_4", - "text": " Met with some success as a craftsman working in a small survivor outpost. Eventually he married a young refugee and had two children. Died during a typhoid outbreak a few years later. Survived by only his three year old son." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_5", - "text": " Became a skilled mechanic and assisted a number of refugees searching for settlements. He left one day on a routine trading run and failed to return. His wrecked truck was located by a scavenger band but he was never seen again." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_6", - "text": " Became a game hunter and trapper. Eventually he left on a hunting trip never to be seen again. Attempts to locate him were called off when one of the searchers disappeared without a trace." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_7", - "text": " Went on to enlist in the Old Guard. Was killed in action a year later fighting the Hell's Raiders in Vermont. In his will he requested that all entitlements and property be transferred to a young lady he had met while guarding a FEMA camp. Was survived by the young lady and a newborn son." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_9", - "text": " Became a laborer for hire in any outpost that needed assistance. Was hanged for stealing from an employer; weeks later it was revealed the employer never had the resources nor intention to pay him." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_10", - "text": " Never spent much time around settlements after your death. Was last seen near the Adirondacks in New York." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_11", - "text": " Died of an infected bite a few weeks later. Before he passed he told those present, 'Now I've lost everything in this world… but you haven't. Keep searching, the world is big enough that there has to be a place out there that hasn't been overrun.'" - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_12", - "text": " Managed to contract some form of fungal infection a few months after your passing. Unable to find treatment, he asked to be put down while listening to someone read from his favorite novel, Don Quixote." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_13", - "text": " Became a self-taught chemist and medic. His work eventually led him to a life of alcohol abuse and morphine addiction. Overdosed one night when left unattended. The community he helped said, 'He was probably the best thing to happen to us in years… there just isn't any turning back when you lose all hope.'" - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_14", - "text": " Went on to become a notable scout and urban explorer. Was tragically killed when cornered in an abandoned store when scavenging with a group of unskilled survivors." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_15", - "text": " After your death he became a reclusive but friendly guy. His continued supply runs helped keep many survivor colonies alive through the years. Unfortunately, he bled to death over the course of several days after having stepped on a landmine intended to target local raiders." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_16", - "text": " Lost his way long before he met you. The Cataclysm offered him the chance to denounce the former vices that had led to his incarceration… an offer that went unanswered. After you were killed, he returned to hunting those he saw as weak. The number of people he murdered is unknown but prior to his execution he claimed that, 'butchering the dead was never as fun as the living.'" - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_17", - "text": " Found new meaning in life after your death. Although he never informed you, his felonies in the departed world had prevented him from ever having a real place in society. With the destruction of existing criminal records he took it upon himself to prove his worth to his fellow man. Died from a heart attack while alone on a trip many years after the Cataclysm." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_18", - "text": " Spent his entire life secretly addicted to one substance or another. After your death he briefly worked as a laborer in a survivor camp before losing his grip on reality due to various side effects associated with his drugs of choice. He died from complications due to a seizure. In his last moments he saw Porkey the pig exclaim, 'That's all folks!' before an animated audience." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_19", - "text": " Was never known as a particularly brave individual nor an emotionally stable one. His regret for not helping people during the opening days of the Cataclysm led him to attempt suicide multiple times in the years that followed. Life improved briefly when he married a fellow survivor but was shattered when his spouse was killed by members of a mysterious apocalypse cult. He was killed when he attempted to sneak into the cult's compound to enact revenge himself." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_20", - "text": " Spent the remainder of his life assisting one adventurer party or another. Eventually his luck ran out when he became ill after eating something rotten. Was abandoned by his party in an infested neighborhood, never to be seen again." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_21", - "text": " Died from sepsis a few weeks after you. The cut on his leg that ultimately killed him would have been easily treatable in nearly any other situation. His final wish was that he be allowed to drink himself into his grave. Upon consideration, the party that he was with opted to shoot him in the head and divide his belongings rather than waste the alcohol." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_22", - "text": " Worked hard following your death to organize his own band of survivors. Went on to marry and have two children that were raised and taught every survival skill they would ever need. His past eventually caught up to him when he ran afoul with an Old Guard colonel. Since he fled his post as a National Guard soldier during the Cataclysm he was hanged for desertion despite the protests of a huge number of survivors that had benefited from his service over the years." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_23", - "text": " Went on to the coast and salvaged a small sailboat. Despite the protests of those that knew him, his decision to sail in search of some uninhabited tropical paradise in the north Atlantic was final. His disappearance after starting the journey was described by his fellow survivors as 'a waste of a perfectly good boat.'" - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_24", - "text": " Within a few weeks of your death he was robbed by a pair of bandits. For attempting to resist their demands they broke both of his arms in multiple places. Alone and wounded it took nearly a month before he found refuge and primitive medical assistance with other survivors. Having lost his ability to grasp or lift, he spent the last few years of his life begging for food and relying on charity from his fellow survivors." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_25", - "text": " Trained under your guidance, he became a renowned abomination hunter. With what weapons he could salvage he led parties to reclaim town after town from the undead and other horrors that wandered the wasteland. His success was temporal as monsters migrated into the cleared territories as quickly as he could clear them. His life ended when antibiotic resistant infection spread between his countless minor wounds." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_26", - "text": " Renounced the adventurous lifestyle after your death and chose to establish a self sufficient camp away from the horrors found in the old cities. His attempts at solitude were in vain as otherworldly visitors began to prey upon the weak and isolated. The last moments of his life were spent in bewilderment and horror as he was awoken one night to an alien insect the size of a man opening his cabin's door and screaming in a dozen perfectly human voices as it flew straight at him." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_27", - "text": " Was detained and handcuffed by a police robot on multiple counts of looting and vandalism that were tracked and recorded by the few remaining security systems. While being held on the ground awaiting additional police response units he was torn to pieces by the undead that were attracted by the commotion." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_28", - "text": " Became a hunter after your death, living alone in the woods. Traced back to his cabin, he was murdered and devoured in his sleep by an actual cannibal." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_29", - "text": " Survived for many years, and became a renowned scavenger, eventually setting up a small shop in a Free Merchant outpost. Survived by two sons, he died after a rare artifact poisoned his blood with acid." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_30", - "text": " He wandered and scavenged the land for years after your death, eventually becoming a skilled mechanic. Employed by the Free Merchants, he lived a comfortable, if rather uneventful life, dying of cancer, a rare luxury these days." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_31", - "text": " Became truly depressed after your death and hid in the woods. If rumors are to be believed, he spent years living as a deranged hermit in a distant cave, worshiping stones and sacrificing dogs." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_32", - "text": " After your death, he became obsessed with preserving old knowledge and eventually became known as 'the lorekeeper'. Hired by the Old Guard as a librarian, he spent his life amongst dusty old books, trying to convince others of their value. He even changed his name to Frederic Bastiat, in honor of an old French philosopher." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_33", - "text": " He found faith after your death, eventually joining an Anglican community and becoming a Vicar. The crucifix provided him with a sense of meaning, before dying horribly at the hands of raiders. He was still praying when they roasted him alive." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_34", - "text": " Lost and damned, he joined a bloody cult after your death, kidnapping and sacrificing young women. His entire group was killed after being discovered by the Old Guard. His head was put on a spike as a reminder that cultists will not be tolerated." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_35", - "text": " He did not survive for long after your death. Electrocuted in an old cellar, he kept screaming your name. His body was never found." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_36", - "text": " Survived you by just a few days, he drowned trying to escape from a horde." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_37", - "text": " He wandered alone for days, before finding a Free Merchant outpost. He spent a few years as a caravan guard, often drinking himself half blind and enjoying any woman he could find. Booze made his grip unsteady and he was eventually fired. He died of alcohol poisoning the same day." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_38", - "text": " Obsessed with the idea of settling down, he eventually found love and retired to a farm in the middle of nowhere. Relatively safe from the monsters, he thrived for years. Survived by seven sons and two daughters." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_39", - "text": " Became famous in the wastes after finding an old brewery and copying their recipe. His chilled beer, a known delicacy, is traded far and wide by the Free Merchants." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_40", - "text": " Found a whole cellar of single malt whisky. Drank himself to death." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_41", - "text": " Depressed after your death, he would hang himself after just a few days." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_42", - "text": " Wandered for months, before finding a small community that would accept him. Became a farmer and spent the rest of his uneventful life tending to crops, glad that he was no longer alone." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_43", - "text": " Obsessed with finding 'the Cure', he died a few weeks later in an old lab, torn to shreds by a security turret." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_44", - "text": " Became a runner for the Refugee Center and died after a few months." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_45", - "text": " Joined a raider gang and died in a firefight a few weeks later, trying to rob a Free Merchant caravan." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_46", - "text": " Traveled north, he eventually found an intact baseball field and built a prosperous farming community there." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_47", - "text": " He spent the rest of his short life looking for a new fix. Died of an overdose in an abandoned basement." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_48", - "text": " Traveled south and joined a small fishing village. Died a few years later in a raider attack, alongside his young son." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_49", - "text": " Thoroughly terrified by your death, he retired to an old LMOE shelter, vowing never to leave. He died of starvation inside." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_50", - "text": " He became a very prosperous game hunter, trading meat and furs, and providing many settlements with food in exchange for booze and male company. He died years later of an STD." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_51", - "text": " Retired to the woods, he spent the rest of his life fishing and hunting in a desolate cabin, rarely interacting with anyone else." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_52", - "text": " Died en route to California, deliriously dreaming of a better life as he was slowly devoured by spiders." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_53", - "text": " He tried to cope with loneliness after your death, but failed. He was blind drunk when a group of zombies found his hideout and didn't stand a chance." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_54", - "text": " He didn't survive for long, waking up to a horde of zombies. They smashed through his fortified windows in a pinch and only the last bullet prevented him from being devoured alive." - }, - { - "type": "epilogue", - "group": "male", - "id": "npc_male_55", - "text": " He got sick soon after your death, and died without any medical help. His last words were 'Why did I live long enough to suffer like that?'" - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_1", - "text": " Committed suicide rather than fall into the hands of the Hell's Raiders. Till the end, she held out hope that her son was still alive in the wasteland." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_2", - "text": " Was making her way to Ohio to search for family when she consumed a number of poisonous roots. Over the course of three or four days she passed. A note found with her body read, 'I wish I could have saved him.'" - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_3", - "text": " Survived for a number of years and made a name for herself amongst other survivors. Eventually she began experimenting with mutagen… when a mutation left her permanently disfigured and in pain she committed suicide without leaving a note." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_4", - "text": " Met with some success as a craftswoman working in a small survivor outpost. Eventually she married a refugee and had one child. Died during childbirth a few years later. Survived by her husband and two year old daughter." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_5", - "text": " Became a skilled mechanic and assisted a number of refugees searching for settlements. She left one day driving a number of migrants to another settlement when she disappeared. No trace of her or the vehicle was ever found." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_6", - "text": " Became a game hunter and trapper. Eventually she left on a hunting trip never to be seen again. Attempts to locate her were called off when a shredded jacket was found." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_7", - "text": " Went on to enlist in the Old Guard. Was captured a year later fighting the Hell's Raiders in the disastrous Vermont campaign. The hasty rescue mission that followed was one of the major defeats that forced the Old Guard to abandon the area. It is unknown if she survived." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_8", - "text": " Became a laborer for hire in any outposts that needed assistance. Was wrongly shot by her employer during a wage dispute." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_9", - "text": " Never spent much time around settlements after your death. Was last seen near the old Canadian border." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_10", - "text": " Died of an infected bite a few weeks later. Before she passed she told those present, 'I've outlived everyone that I have ever loved. If anything death is a few months late'." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_11", - "text": " Managed to contract some form of infection a few months after your passing. Unable to find treatment she asked to be put down while listening to someone read from her favorite novel, A Tale of Two Cities." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_12", - "text": " Became a self-taught chemist and medic. Her work eventually led her to a life of alcohol abuse and morphine addiction. Overdosed one night when left unattended. The community she helped said, 'I've never known a nicer woman nor one who had fought off depression for so long.'" - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_13", - "text": " Went on to become a notable scout and urban explorer. Was tragically killed by one of her students when leading a group of unskilled survivors on a night supply raid." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_14", - "text": " After your death she became a reclusive and eccentric individual. Her skills were invaluable to the outposts that she chose to assist. Unfortunately, competition for resources and salvage rights led a group of survivors to coax a mob of undead to surround her when she was on a lone raid. Without witnesses, no connection between her death and the other survivors could be proven." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_15", - "text": " Lost her way long before she met you. The Cataclysm offered her the chance to denounce the former vices that had led to her incarceration… an offer that went unanswered. After you were killed, she returned to preying upon those she saw as weak. It is rumored that she robbed dozens of survivors for everything they had before leaving them to die amongst the horrors that roamed the land. Her eventual fate is unknown." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_16", - "text": " Found new meaning in life after your death. Although she never informed you, her felonies in the departed world had prevented her from ever having a real place in society. With the destruction of the criminal record system, she took it upon herself to make amends for her crimes. Died on a dangerous rescue mission when witnesses saw an helicopter crash-land in a nearby town." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_17", - "text": " Spent her entire life secretly addicted to one substance or another. After your death she briefly worked in a survivor camp before finding a place in the lucrative drug trade. She died, predictably, from an overdose. Drugs allowed her to relive the memories of friends, family, and loved ones… she died happier than could have ever been expected." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_18", - "text": " Was never known as a particularly brave individual nor an emotionally stable one. Her inability to emotionally conform to life after the Cataclysm led her to attempt suicide multiple times in the years that followed. Attracted by promises of renewal and the prospect of belonging to a new family, she became involved with a charismatic cult. She was an innocent casualty when Old Guard soldiers stormed the compound on suspicion of crimes against humanity." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_19", - "text": " Spent the remainder of her life assisting one adventurer party or another. Eventually her luck ran out when she became ill after starvation led her to eat whatever she could forage from the woods. The party she was with deemed her a lost cause and put a bullet in her head instead of letting her turn. She had suffered from a treatable form of marasmus." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_20", - "text": " Was stabbed in the arm by an ill tempered survivor a few weeks after you passed. The cut quickly became infected and she died from sepsis a short time later. Her murderer was the first person to discover her corpse… and all the gear she had been saving." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_21", - "text": " Worked hard following your death to build her own band of survivors. Thanks to the skills she had acquired, she was able to turn a hefty profit looting abandoned towns. After a series of heated contract disputes with her followers she found herself locked in her own car as a pair of Molotovs were thrown through the windows. Her last desire was that she could have taken the bastards out with her." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_22", - "text": " Sought the coast in the hopes of finding an abandoned ship after your death. Her journey ended when she discovered an Old Guard controlled dock in an abandoned fishing town. Promised a new life if she agreed to serve as a contractor, she spent the next few years toiling to keep the camp supplied but never saw her reward. A stray bullet struck her down when the Hell's Raiders launched a raid in an attempt to gain access to the sea." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_23", - "text": " Within a few months of your death she was robbed by a group of bandits. When she shot the first dead in his tracks, one of his companions unleashed a blast from his flamethrower at close range. Her ashes and a few odd pieces of jewelry were all that could be recovered." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_24", - "text": " Trained under your guidance, she became a renowned monster hunter. Leading a band of warriors armed with primitive weapons she tracked down and killed numerous otherworldly horrors that wandered the wilderness. Her quest to end the threat led her party to a shimmering gate that appeared to spew forth abominations and alien material. With no means of closing the gate, her party was last seen venturing into the unknown to meet the threat at its source." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_25", - "text": " Renounced the adventurous lifestyle after your death and chose to start a family with a fellow survivor in an abandoned hunting cabin. Survival was grim but the family grew through the years until she had three sons and a daughter. Her end came when the horrors finally located her homestead… she and her husband were able to distract the monster as her children escaped." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_26", - "text": " Was detained and incarcerated by a police robot on multiple counts of looting and vandalism that were tracked and recorded by the few remaining security systems. Trapped in a cell awaiting police review, she spent weeks crying out for help and slowly consuming what supplies she carried. Two weeks after being dragged to her cell she died from dehydration." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_27", - "text": " Shot by the Old Guard a few weeks later, hunted down after she robbed an important caravan." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_28", - "text": " Traveled north, she eventually found a quiet community there and spent the rest of her life farming. She's survived by four daughters." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_29", - "text": " She became a runner for the Old Guard and was eventually permitted to join. She spent the rest of her life hunting raiders. She died in a skirmish after a few years, sacrificing her life to let her unit retreat. Her name is venerated in songs and inscriptions." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_30", - "text": " Shortly after your death she joined the Free Merchants, becoming a caravan guard and after a few months became the new liaison in the Refugee Center. She died a few years later of a mysterious illness." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_31", - "text": " She was found half-dead by the Old Guard who took her in. She became a famous scavenger, known for finding an intact stash of experimental antibiotics." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_32", - "text": " She retired to the forest, where she built her own cabin and spending the rest of her life fishing." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_33", - "text": " Captured by raiders, she spent the rest of her miserable life as a slave. Hopeless, she slit her wrists with a rusty knife." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_34", - "text": " Depressed, she joined a protestant community and became a paragon of virtue. Devoting her life to bible study, she spent the rest of her life in relative peace." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_35", - "text": " Killed and devoured by a cannibal just a few days after your death, hardly anyone remembers her name." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_36", - "text": " Became a renowned merchant after your death, she built her own outpost in the west. An avid book collector, she established a great library to keep the flame of knowledge burning." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_37", - "text": " Traveled around for months before finding an old farm. She spent a few years tending to her crops and living the life of a hermit before being killed by raiders for fun." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_38", - "text": " Traveled south and joined a settlement there. She became a renowned engineer, building the largest steam engine in New England." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_39", - "text": " Joined a gang after your death, she spent months preying on the innocent, before dying in a dispute with a fellow brute." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_40", - "text": " Devoured alive by a group of zombies, she kept thinking of you as she died." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_41", - "text": " She found an abandoned APC and spent years traveling around and collecting personal stories. She wrote one of the few post-apocalyptic books, detailing the life after the end." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_42", - "text": " Kept wandering for years. Her life was cut short when a group of raiders used her as a target practice." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_43", - "text": " She became a skilled game hunter and one of the best shots in the wasteland. Years later she joined the Old Guard and was given the position of Marshal." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_44", - "text": " Desperate to save humanity from extinction, she organized her own group of survivors, whose job was to hunt bandits and decorate roads with their mutilated bodies. She died in a skirmish a few months later." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_45", - "text": " She became an arsonist, and was incinerated a few weeks later in a fire she set." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_46", - "text": " She kept wandering for a few weeks but eventually died after drinking untreated water." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_47", - "text": " She wandered north and joined a local community there. She became known for her trapping skills and ensured that the locals always had fresh meat on their tables." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_48", - "text": " She joined the Free Merchants and led their first caravan to Canada. She died a few years later of dysentery." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_49", - "text": " She built a boat and sailed east towards Europe, hoping that it was not affected by the apocalypse. She was never heard from again." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_50", - "text": " She led a doomsday cult for a few years, she was sacrificed to their gods after a particularly terrible harvest." - }, - { - "type": "epilogue", - "group": "female", - "id": "npc_female_51", - "text": " Became obsessed with chems, and died of an overdose a few months after your death." - } -] diff --git a/data/json/snippets/epilogue_npc.json b/data/json/snippets/epilogue_npc.json new file mode 100644 index 0000000000000..b291449cc67b2 --- /dev/null +++ b/data/json/snippets/epilogue_npc.json @@ -0,0 +1,434 @@ +[ + { + "type": "snippet", + "category": "epilogue_npc_male", + "text": [ + { + "id": "epilogue_npc_male_1", + "text": " Died several years later at the hands of a Hell's Raiders band. Till the end, he held out hope that his daughter was still alive in the wasteland." + }, + { + "id": "epilogue_npc_male_2", + "text": " Was making his way to Michigan to search for family when he broke his leg in the woods. Died of hypothermia a week later. A note found with his body read, 'I wish I could have saved her.'" + }, + { + "id": "epilogue_npc_male_3", + "text": " Survived for a number of years and made a name for himself amongst other survivors. Eventually he began augmenting himself with bionics… when a failed surgery left him permanently blind he committed suicide without leaving a note." + }, + { + "id": "epilogue_npc_male_4", + "text": " Met with some success as a craftsman working in a small survivor outpost. Eventually he married a young refugee and had two children. Died during a typhoid outbreak a few years later. Survived by only his three year old son." + }, + { + "id": "epilogue_npc_male_5", + "text": " Became a skilled mechanic and assisted a number of refugees searching for settlements. He left one day on a routine trading run and failed to return. His wrecked truck was located by a scavenger band but he was never seen again." + }, + { + "id": "epilogue_npc_male_6", + "text": " Became a game hunter and trapper. Eventually he left on a hunting trip never to be seen again. Attempts to locate him were called off when one of the searchers disappeared without a trace." + }, + { + "id": "epilogue_npc_male_7", + "text": " Went on to enlist in the Old Guard. Was killed in action a year later fighting the Hell's Raiders in Vermont. In his will he requested that all entitlements and property be transferred to a young lady he had met while guarding a FEMA camp. Was survived by the young lady and a newborn son." + }, + { + "id": "epilogue_npc_male_9", + "text": " Became a laborer for hire in any outpost that needed assistance. Was hanged for stealing from an employer; weeks later it was revealed the employer never had the resources nor intention to pay him." + }, + { + "id": "epilogue_npc_male_10", + "text": " Never spent much time around settlements after your death. Was last seen near the Adirondacks in New York." + }, + { + "id": "epilogue_npc_male_11", + "text": " Died of an infected bite a few weeks later. Before he passed he told those present, 'Now I've lost everything in this world… but you haven't. Keep searching, the world is big enough that there has to be a place out there that hasn't been overrun.'" + }, + { + "id": "epilogue_npc_male_12", + "text": " Managed to contract some form of fungal infection a few months after your passing. Unable to find treatment, he asked to be put down while listening to someone read from his favorite novel, Don Quixote." + }, + { + "id": "epilogue_npc_male_13", + "text": " Became a self-taught chemist and medic. His work eventually led him to a life of alcohol abuse and morphine addiction. Overdosed one night when left unattended. The community he helped said, 'He was probably the best thing to happen to us in years… there just isn't any turning back when you lose all hope.'" + }, + { + "id": "epilogue_npc_male_14", + "text": " Went on to become a notable scout and urban explorer. Was tragically killed when cornered in an abandoned store when scavenging with a group of unskilled survivors." + }, + { + "id": "epilogue_npc_male_15", + "text": " After your death he became a reclusive but friendly guy. His continued supply runs helped keep many survivor colonies alive through the years. Unfortunately, he bled to death over the course of several days after having stepped on a landmine intended to target local raiders." + }, + { + "id": "epilogue_npc_male_16", + "text": " Lost his way long before he met you. The Cataclysm offered him the chance to denounce the former vices that had led to his incarceration… an offer that went unanswered. After you were killed, he returned to hunting those he saw as weak. The number of people he murdered is unknown but prior to his execution he claimed that, 'butchering the dead was never as fun as the living.'" + }, + { + "id": "epilogue_npc_male_17", + "text": " Found new meaning in life after your death. Although he never informed you, his felonies in the departed world had prevented him from ever having a real place in society. With the destruction of existing criminal records he took it upon himself to prove his worth to his fellow man. Died from a heart attack while alone on a trip many years after the Cataclysm." + }, + { + "id": "epilogue_npc_male_18", + "text": " Spent his entire life secretly addicted to one substance or another. After your death he briefly worked as a laborer in a survivor camp before losing his grip on reality due to various side effects associated with his drugs of choice. He died from complications due to a seizure. In his last moments he saw Porkey the pig exclaim, 'That's all folks!' before an animated audience." + }, + { + "id": "epilogue_npc_male_19", + "text": " Was never known as a particularly brave individual nor an emotionally stable one. His regret for not helping people during the opening days of the Cataclysm led him to attempt suicide multiple times in the years that followed. Life improved briefly when he married a fellow survivor but was shattered when his spouse was killed by members of a mysterious apocalypse cult. He was killed when he attempted to sneak into the cult's compound to enact revenge himself." + }, + { + "id": "epilogue_npc_male_20", + "text": " Spent the remainder of his life assisting one adventurer party or another. Eventually his luck ran out when he became ill after eating something rotten. Was abandoned by his party in an infested neighborhood, never to be seen again." + }, + { + "id": "epilogue_npc_male_21", + "text": " Died from sepsis a few weeks after you. The cut on his leg that ultimately killed him would have been easily treatable in nearly any other situation. His final wish was that he be allowed to drink himself into his grave. Upon consideration, the party that he was with opted to shoot him in the head and divide his belongings rather than waste the alcohol." + }, + { + "id": "epilogue_npc_male_22", + "text": " Worked hard following your death to organize his own band of survivors. Went on to marry and have two children that were raised and taught every survival skill they would ever need. His past eventually caught up to him when he ran afoul with an Old Guard colonel. Since he fled his post as a National Guard soldier during the Cataclysm he was hanged for desertion despite the protests of a huge number of survivors that had benefited from his service over the years." + }, + { + "id": "epilogue_npc_male_23", + "text": " Went on to the coast and salvaged a small sailboat. Despite the protests of those that knew him, his decision to sail in search of some uninhabited tropical paradise in the north Atlantic was final. His disappearance after starting the journey was described by his fellow survivors as 'a waste of a perfectly good boat.'" + }, + { + "id": "epilogue_npc_male_24", + "text": " Within a few weeks of your death he was robbed by a pair of bandits. For attempting to resist their demands they broke both of his arms in multiple places. Alone and wounded it took nearly a month before he found refuge and primitive medical assistance with other survivors. Having lost his ability to grasp or lift, he spent the last few years of his life begging for food and relying on charity from his fellow survivors." + }, + { + "id": "epilogue_npc_male_25", + "text": " Trained under your guidance, he became a renowned abomination hunter. With what weapons he could salvage he led parties to reclaim town after town from the undead and other horrors that wandered the wasteland. His success was temporal as monsters migrated into the cleared territories as quickly as he could clear them. His life ended when antibiotic resistant infection spread between his countless minor wounds." + }, + { + "id": "epilogue_npc_male_26", + "text": " Renounced the adventurous lifestyle after your death and chose to establish a self sufficient camp away from the horrors found in the old cities. His attempts at solitude were in vain as otherworldly visitors began to prey upon the weak and isolated. The last moments of his life were spent in bewilderment and horror as he was awoken one night to an alien insect the size of a man opening his cabin's door and screaming in a dozen perfectly human voices as it flew straight at him." + }, + { + "id": "epilogue_npc_male_27", + "text": " Was detained and handcuffed by a police robot on multiple counts of looting and vandalism that were tracked and recorded by the few remaining security systems. While being held on the ground awaiting additional police response units he was torn to pieces by the undead that were attracted by the commotion." + }, + { + "id": "epilogue_npc_male_28", + "text": " Became a hunter after your death, living alone in the woods. Traced back to his cabin, he was murdered and devoured in his sleep by an actual cannibal." + }, + { + "id": "epilogue_npc_male_29", + "text": " Survived for many years, and became a renowned scavenger, eventually setting up a small shop in a Free Merchant outpost. Survived by two sons, he died after a rare artifact poisoned his blood with acid." + }, + { + "id": "epilogue_npc_male_30", + "text": " He wandered and scavenged the land for years after your death, eventually becoming a skilled mechanic. Employed by the Free Merchants, he lived a comfortable, if rather uneventful life, dying of cancer, a rare luxury these days." + }, + { + "id": "epilogue_npc_male_31", + "text": " Became truly depressed after your death and hid in the woods. If rumors are to be believed, he spent years living as a deranged hermit in a distant cave, worshiping stones and sacrificing dogs." + }, + { + "id": "epilogue_npc_male_32", + "text": " After your death, he became obsessed with preserving old knowledge and eventually became known as 'the lorekeeper'. Hired by the Old Guard as a librarian, he spent his life amongst dusty old books, trying to convince others of their value. He even changed his name to Frederic Bastiat, in honor of an old French philosopher." + }, + { + "id": "epilogue_npc_male_33", + "text": " He found faith after your death, eventually joining an Anglican community and becoming a Vicar. The crucifix provided him with a sense of meaning, before dying horribly at the hands of raiders. He was still praying when they roasted him alive." + }, + { + "id": "epilogue_npc_male_34", + "text": " Lost and damned, he joined a bloody cult after your death, kidnapping and sacrificing young women. His entire group was killed after being discovered by the Old Guard. His head was put on a spike as a reminder that cultists will not be tolerated." + }, + { + "id": "epilogue_npc_male_35", + "text": " He did not survive for long after your death. Electrocuted in an old cellar, he kept screaming your name. His body was never found." + }, + { + "id": "epilogue_npc_male_36", + "text": " Survived you by just a few days, he drowned trying to escape from a horde." + }, + { + "id": "epilogue_npc_male_37", + "text": " He wandered alone for days, before finding a Free Merchant outpost. He spent a few years as a caravan guard, often drinking himself half blind and enjoying any woman he could find. Booze made his grip unsteady and he was eventually fired. He died of alcohol poisoning the same day." + }, + { + "id": "epilogue_npc_male_38", + "text": " Obsessed with the idea of settling down, he eventually found love and retired to a farm in the middle of nowhere. Relatively safe from the monsters, he thrived for years. Survived by seven sons and two daughters." + }, + { + "id": "epilogue_npc_male_39", + "text": " Became famous in the wastes after finding an old brewery and copying their recipe. His chilled beer, a known delicacy, is traded far and wide by the Free Merchants." + }, + { + "id": "epilogue_npc_male_40", + "text": " Found a whole cellar of single malt whisky. Drank himself to death." + }, + { + "id": "epilogue_npc_male_41", + "text": " Depressed after your death, he would hang himself after just a few days." + }, + { + "id": "epilogue_npc_male_42", + "text": " Wandered for months, before finding a small community that would accept him. Became a farmer and spent the rest of his uneventful life tending to crops, glad that he was no longer alone." + }, + { + "id": "epilogue_npc_male_43", + "text": " Obsessed with finding 'the Cure', he died a few weeks later in an old lab, torn to shreds by a security turret." + }, + { + "id": "epilogue_npc_male_44", + "text": " Became a runner for the Refugee Center and died after a few months." + }, + { + "id": "epilogue_npc_male_45", + "text": " Joined a raider gang and died in a firefight a few weeks later, trying to rob a Free Merchant caravan." + }, + { + "id": "epilogue_npc_male_46", + "text": " Traveled north, he eventually found an intact baseball field and built a prosperous farming community there." + }, + { + "id": "epilogue_npc_male_47", + "text": " He spent the rest of his short life looking for a new fix. Died of an overdose in an abandoned basement." + }, + { + "id": "epilogue_npc_male_48", + "text": " Traveled south and joined a small fishing village. Died a few years later in a raider attack, alongside his young son." + }, + { + "id": "epilogue_npc_male_49", + "text": " Thoroughly terrified by your death, he retired to an old LMOE shelter, vowing never to leave. He died of starvation inside." + }, + { + "id": "epilogue_npc_male_50", + "text": " He became a very prosperous game hunter, trading meat and furs, and providing many settlements with food in exchange for booze and male company. He died years later of an STD." + }, + { + "id": "epilogue_npc_male_51", + "text": " Retired to the woods, he spent the rest of his life fishing and hunting in a desolate cabin, rarely interacting with anyone else." + }, + { + "id": "epilogue_npc_male_52", + "text": " Died en route to California, deliriously dreaming of a better life as he was slowly devoured by spiders." + }, + { + "id": "epilogue_npc_male_53", + "text": " He tried to cope with loneliness after your death, but failed. He was blind drunk when a group of zombies found his hideout and didn't stand a chance." + }, + { + "id": "epilogue_npc_male_54", + "text": " He didn't survive for long, waking up to a horde of zombies. They smashed through his fortified windows in a pinch and only the last bullet prevented him from being devoured alive." + }, + { + "id": "epilogue_npc_male_55", + "text": " He got sick soon after your death, and died without any medical help. His last words were 'Why did I live long enough to suffer like that?'" + } + ] + }, + { + "type": "snippet", + "category": "epilogue_npc_female", + "text": [ + { + "id": "epilogue_npc_female_1", + "text": " Committed suicide rather than fall into the hands of the Hell's Raiders. Till the end, she held out hope that her son was still alive in the wasteland." + }, + { + "id": "epilogue_npc_female_2", + "text": " Was making her way to Ohio to search for family when she consumed a number of poisonous roots. Over the course of three or four days she passed. A note found with her body read, 'I wish I could have saved him.'" + }, + { + "id": "epilogue_npc_female_3", + "text": " Survived for a number of years and made a name for herself amongst other survivors. Eventually she began experimenting with mutagen… when a mutation left her permanently disfigured and in pain she committed suicide without leaving a note." + }, + { + "id": "epilogue_npc_female_4", + "text": " Met with some success as a craftswoman working in a small survivor outpost. Eventually she married a refugee and had one child. Died during childbirth a few years later. Survived by her husband and two year old daughter." + }, + { + "id": "epilogue_npc_female_5", + "text": " Became a skilled mechanic and assisted a number of refugees searching for settlements. She left one day driving a number of migrants to another settlement when she disappeared. No trace of her or the vehicle was ever found." + }, + { + "id": "epilogue_npc_female_6", + "text": " Became a game hunter and trapper. Eventually she left on a hunting trip never to be seen again. Attempts to locate her were called off when a shredded jacket was found." + }, + { + "id": "epilogue_npc_female_7", + "text": " Went on to enlist in the Old Guard. Was captured a year later fighting the Hell's Raiders in the disastrous Vermont campaign. The hasty rescue mission that followed was one of the major defeats that forced the Old Guard to abandon the area. It is unknown if she survived." + }, + { + "id": "epilogue_npc_female_8", + "text": " Became a laborer for hire in any outposts that needed assistance. Was wrongly shot by her employer during a wage dispute." + }, + { + "id": "epilogue_npc_female_9", + "text": " Never spent much time around settlements after your death. Was last seen near the old Canadian border." + }, + { + "id": "epilogue_npc_female_10", + "text": " Died of an infected bite a few weeks later. Before she passed she told those present, 'I've outlived everyone that I have ever loved. If anything death is a few months late'." + }, + { + "id": "epilogue_npc_female_11", + "text": " Managed to contract some form of infection a few months after your passing. Unable to find treatment she asked to be put down while listening to someone read from her favorite novel, A Tale of Two Cities." + }, + { + "id": "epilogue_npc_female_12", + "text": " Became a self-taught chemist and medic. Her work eventually led her to a life of alcohol abuse and morphine addiction. Overdosed one night when left unattended. The community she helped said, 'I've never known a nicer woman nor one who had fought off depression for so long.'" + }, + { + "id": "epilogue_npc_female_13", + "text": " Went on to become a notable scout and urban explorer. Was tragically killed by one of her students when leading a group of unskilled survivors on a night supply raid." + }, + { + "id": "epilogue_npc_female_14", + "text": " After your death she became a reclusive and eccentric individual. Her skills were invaluable to the outposts that she chose to assist. Unfortunately, competition for resources and salvage rights led a group of survivors to coax a mob of undead to surround her when she was on a lone raid. Without witnesses, no connection between her death and the other survivors could be proven." + }, + { + "id": "epilogue_npc_female_15", + "text": " Lost her way long before she met you. The Cataclysm offered her the chance to denounce the former vices that had led to her incarceration… an offer that went unanswered. After you were killed, she returned to preying upon those she saw as weak. It is rumored that she robbed dozens of survivors for everything they had before leaving them to die amongst the horrors that roamed the land. Her eventual fate is unknown." + }, + { + "id": "epilogue_npc_female_16", + "text": " Found new meaning in life after your death. Although she never informed you, her felonies in the departed world had prevented her from ever having a real place in society. With the destruction of the criminal record system, she took it upon herself to make amends for her crimes. Died on a dangerous rescue mission when witnesses saw an helicopter crash-land in a nearby town." + }, + { + "id": "epilogue_npc_female_17", + "text": " Spent her entire life secretly addicted to one substance or another. After your death she briefly worked in a survivor camp before finding a place in the lucrative drug trade. She died, predictably, from an overdose. Drugs allowed her to relive the memories of friends, family, and loved ones… she died happier than could have ever been expected." + }, + { + "id": "epilogue_npc_female_18", + "text": " Was never known as a particularly brave individual nor an emotionally stable one. Her inability to emotionally conform to life after the Cataclysm led her to attempt suicide multiple times in the years that followed. Attracted by promises of renewal and the prospect of belonging to a new family, she became involved with a charismatic cult. She was an innocent casualty when Old Guard soldiers stormed the compound on suspicion of crimes against humanity." + }, + { + "id": "epilogue_npc_female_19", + "text": " Spent the remainder of her life assisting one adventurer party or another. Eventually her luck ran out when she became ill after starvation led her to eat whatever she could forage from the woods. The party she was with deemed her a lost cause and put a bullet in her head instead of letting her turn. She had suffered from a treatable form of marasmus." + }, + { + "id": "epilogue_npc_female_20", + "text": " Was stabbed in the arm by an ill tempered survivor a few weeks after you passed. The cut quickly became infected and she died from sepsis a short time later. Her murderer was the first person to discover her corpse… and all the gear she had been saving." + }, + { + "id": "epilogue_npc_female_21", + "text": " Worked hard following your death to build her own band of survivors. Thanks to the skills she had acquired, she was able to turn a hefty profit looting abandoned towns. After a series of heated contract disputes with her followers she found herself locked in her own car as a pair of Molotovs were thrown through the windows. Her last desire was that she could have taken the bastards out with her." + }, + { + "id": "epilogue_npc_female_22", + "text": " Sought the coast in the hopes of finding an abandoned ship after your death. Her journey ended when she discovered an Old Guard controlled dock in an abandoned fishing town. Promised a new life if she agreed to serve as a contractor, she spent the next few years toiling to keep the camp supplied but never saw her reward. A stray bullet struck her down when the Hell's Raiders launched a raid in an attempt to gain access to the sea." + }, + { + "id": "epilogue_npc_female_23", + "text": " Within a few months of your death she was robbed by a group of bandits. When she shot the first dead in his tracks, one of his companions unleashed a blast from his flamethrower at close range. Her ashes and a few odd pieces of jewelry were all that could be recovered." + }, + { + "id": "epilogue_npc_female_24", + "text": " Trained under your guidance, she became a renowned monster hunter. Leading a band of warriors armed with primitive weapons she tracked down and killed numerous otherworldly horrors that wandered the wilderness. Her quest to end the threat led her party to a shimmering gate that appeared to spew forth abominations and alien material. With no means of closing the gate, her party was last seen venturing into the unknown to meet the threat at its source." + }, + { + "id": "epilogue_npc_female_25", + "text": " Renounced the adventurous lifestyle after your death and chose to start a family with a fellow survivor in an abandoned hunting cabin. Survival was grim but the family grew through the years until she had three sons and a daughter. Her end came when the horrors finally located her homestead… she and her husband were able to distract the monster as her children escaped." + }, + { + "id": "epilogue_npc_female_26", + "text": " Was detained and incarcerated by a police robot on multiple counts of looting and vandalism that were tracked and recorded by the few remaining security systems. Trapped in a cell awaiting police review, she spent weeks crying out for help and slowly consuming what supplies she carried. Two weeks after being dragged to her cell she died from dehydration." + }, + { + "id": "epilogue_npc_female_27", + "text": " Shot by the Old Guard a few weeks later, hunted down after she robbed an important caravan." + }, + { + "id": "epilogue_npc_female_28", + "text": " Traveled north, she eventually found a quiet community there and spent the rest of her life farming. She's survived by four daughters." + }, + { + "id": "epilogue_npc_female_29", + "text": " She became a runner for the Old Guard and was eventually permitted to join. She spent the rest of her life hunting raiders. She died in a skirmish after a few years, sacrificing her life to let her unit retreat. Her name is venerated in songs and inscriptions." + }, + { + "id": "epilogue_npc_female_30", + "text": " Shortly after your death she joined the Free Merchants, becoming a caravan guard and after a few months became the new liaison in the Refugee Center. She died a few years later of a mysterious illness." + }, + { + "id": "epilogue_npc_female_31", + "text": " She was found half-dead by the Old Guard who took her in. She became a famous scavenger, known for finding an intact stash of experimental antibiotics." + }, + { + "id": "epilogue_npc_female_32", + "text": " She retired to the forest, where she built her own cabin and spending the rest of her life fishing." + }, + { + "id": "epilogue_npc_female_33", + "text": " Captured by raiders, she spent the rest of her miserable life as a slave. Hopeless, she slit her wrists with a rusty knife." + }, + { + "id": "epilogue_npc_female_34", + "text": " Depressed, she joined a protestant community and became a paragon of virtue. Devoting her life to bible study, she spent the rest of her life in relative peace." + }, + { + "id": "epilogue_npc_female_35", + "text": " Killed and devoured by a cannibal just a few days after your death, hardly anyone remembers her name." + }, + { + "id": "epilogue_npc_female_36", + "text": " Became a renowned merchant after your death, she built her own outpost in the west. An avid book collector, she established a great library to keep the flame of knowledge burning." + }, + { + "id": "epilogue_npc_female_37", + "text": " Traveled around for months before finding an old farm. She spent a few years tending to her crops and living the life of a hermit before being killed by raiders for fun." + }, + { + "id": "epilogue_npc_female_38", + "text": " Traveled south and joined a settlement there. She became a renowned engineer, building the largest steam engine in New England." + }, + { + "id": "epilogue_npc_female_39", + "text": " Joined a gang after your death, she spent months preying on the innocent, before dying in a dispute with a fellow brute." + }, + { + "id": "epilogue_npc_female_40", + "text": " Devoured alive by a group of zombies, she kept thinking of you as she died." + }, + { + "id": "epilogue_npc_female_41", + "text": " She found an abandoned APC and spent years traveling around and collecting personal stories. She wrote one of the few post-apocalyptic books, detailing the life after the end." + }, + { + "id": "epilogue_npc_female_42", + "text": " Kept wandering for years. Her life was cut short when a group of raiders used her as a target practice." + }, + { + "id": "epilogue_npc_female_43", + "text": " She became a skilled game hunter and one of the best shots in the wasteland. Years later she joined the Old Guard and was given the position of Marshal." + }, + { + "id": "epilogue_npc_female_44", + "text": " Desperate to save humanity from extinction, she organized her own group of survivors, whose job was to hunt bandits and decorate roads with their mutilated bodies. She died in a skirmish a few months later." + }, + { + "id": "epilogue_npc_female_45", + "text": " She became an arsonist, and was incinerated a few weeks later in a fire she set." + }, + { + "id": "epilogue_npc_female_46", + "text": " She kept wandering for a few weeks but eventually died after drinking untreated water." + }, + { + "id": "epilogue_npc_female_47", + "text": " She wandered north and joined a local community there. She became known for her trapping skills and ensured that the locals always had fresh meat on their tables." + }, + { + "id": "epilogue_npc_female_48", + "text": " She joined the Free Merchants and led their first caravan to Canada. She died a few years later of dysentery." + }, + { + "id": "epilogue_npc_female_49", + "text": " She built a boat and sailed east towards Europe, hoping that it was not affected by the apocalypse. She was never heard from again." + }, + { + "id": "epilogue_npc_female_50", + "text": " She led a doomsday cult for a few years, she was sacrificed to their gods after a particularly terrible harvest." + }, + { + "id": "epilogue_npc_female_51", + "text": " Became obsessed with chems, and died of an overdose a few months after your death." + } + ] + } +] diff --git a/src/game.cpp b/src/game.cpp index 961878fb89c64..6ec94babc787e 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -3023,7 +3023,6 @@ void game::disp_NPC_epilogues() catacurses::window w = catacurses::newwin( FULL_SCREEN_HEIGHT, FULL_SCREEN_WIDTH, point( std::max( 0, ( TERMX - FULL_SCREEN_WIDTH ) / 2 ), std::max( 0, ( TERMY - FULL_SCREEN_HEIGHT ) / 2 ) ) ); - epilogue epi; // TODO: This search needs to be expanded to all NPCs for( auto elem : follower_ids ) { shared_ptr_fast npc_to_get = overmap_buffer.find_npc( elem ); @@ -3031,11 +3030,10 @@ void game::disp_NPC_epilogues() continue; } npc *guy = npc_to_get.get(); - epi.random_by_group( guy->male ? "male" : "female" ); - std::vector txt; - txt.emplace_back( epi.text ); + std::vector epilogue; + epilogue.emplace_back( guy->get_epilogue() ); draw_border( w, BORDER_COLOR, guy->name, c_black_white ); - multipage( w, txt, "", 2 ); + multipage( w, epilogue, "", 2 ); } refresh_all(); diff --git a/src/init.cpp b/src/init.cpp index 9ac4d539ec4fb..b6e985a7e4a72 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -353,7 +353,6 @@ void DynamicDataLoader::initialize() add( "npc", &npc_template::load ); add( "npc_class", &npc_class::load_npc_class ); add( "talk_topic", &load_talk_topic ); - add( "epilogue", &epilogue::load_epilogue ); add( "behavior", &behavior::load_behavior ); add( "MONSTER_FACTION", &monfactions::load_monster_faction ); diff --git a/src/npc.cpp b/src/npc.cpp index f106a0d9bb69f..4858ed573d10b 100644 --- a/src/npc.cpp +++ b/src/npc.cpp @@ -33,6 +33,7 @@ #include "skill.h" #include "sounds.h" #include "string_formatter.h" +#include "text_snippets.h" #include "trait_group.h" #include "veh_type.h" #include "vehicle.h" @@ -2772,54 +2773,6 @@ void npc_chatbin::add_new_mission( mission *miss ) missions.push_back( miss ); } -epilogue::epilogue() -{ - id = "NONE"; - group = "NONE"; - text = "Error: file lost!"; -} - -epilogue_map epilogue::_all_epilogue; - -void epilogue::load_epilogue( const JsonObject &jsobj ) -{ - epilogue base; - base.id = jsobj.get_string( "id" ); - base.group = jsobj.get_string( "group" ); - base.text = jsobj.get_string( "text" ); - - _all_epilogue[base.id] = base; -} - -epilogue *epilogue::find_epilogue( const std::string &ident ) -{ - epilogue_map::iterator found = _all_epilogue.find( ident ); - if( found != _all_epilogue.end() ) { - return &( found->second ); - } else { - debugmsg( "Tried to get invalid epilogue template: %s", ident.c_str() ); - static epilogue null_epilogue; - return &null_epilogue; - } -} - -void epilogue::random_by_group( std::string group ) -{ - std::vector v; - for( const auto &epi : _all_epilogue ) { - if( epi.second.group == group ) { - v.push_back( epi.second ); - } - } - if( v.empty() ) { - return; - } - epilogue epi = random_entry( v ); - id = epi.id; - group = epi.group; - text = epi.text; -} - constexpr tripoint npc::no_goal_point; bool npc::query_yn( const std::string &/*msg*/ ) const @@ -3093,6 +3046,13 @@ std::string npc::extended_description() const return replace_colors( ss ); } +std::string npc::get_epilogue() const +{ + return SNIPPET.random_from_category( + male ? "epilogue_npc_male" : "epilogue_npc_female" + ).value_or( translation() ).translated(); +} + void npc::set_companion_mission( npc &p, const std::string &mission_id ) { const tripoint omt_pos = p.global_omt_location(); diff --git a/src/npc.h b/src/npc.h index 5c1ee1510cd02..38999dc1e167d 100644 --- a/src/npc.h +++ b/src/npc.h @@ -755,9 +755,6 @@ struct npc_chatbin { }; class npc_template; -struct epilogue; - -using epilogue_map = std::map; class npc : public player { @@ -1195,6 +1192,7 @@ class npc : public player bool query_yn( const std::string &mes ) const override; std::string extended_description() const override; + std::string get_epilogue() const; std::pair hp_description() const; @@ -1393,20 +1391,6 @@ class npc_template static void check_consistency(); }; -struct epilogue { - epilogue(); - - std::string id; //Unique name for declaring an ending for a given individual - std::string group; //Male/female (dog/cyborg/mutant... whatever you want) - std::string text; - - static epilogue_map _all_epilogue; - - static void load_epilogue( const JsonObject &jsobj ); - epilogue *find_epilogue( const std::string &ident ); - void random_by_group( std::string group ); -}; - std::ostream &operator<< ( std::ostream &os, const npc_need &need ); /** Opens a menu and allows player to select a friendly NPC. */ From 1a4906a44d80f314703c21c76da8bda9206c8bbf Mon Sep 17 00:00:00 2001 From: LaVeyanFiend <51099123+LaVeyanFiend@users.noreply.github.com> Date: Sun, 12 Jan 2020 02:49:47 -0500 Subject: [PATCH 42/43] Vandalized evac shelter has closable windows (#36946) * Vandalized evac shelter has correct windows --- data/json/mapgen/nested/shelter_nested.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/json/mapgen/nested/shelter_nested.json b/data/json/mapgen/nested/shelter_nested.json index 528a9a1157c9e..5ff51b39a1405 100644 --- a/data/json/mapgen/nested/shelter_nested.json +++ b/data/json/mapgen/nested/shelter_nested.json @@ -136,7 +136,7 @@ " |||||:||+|:||||| " ], "terrain": { - ":": [ "t_window_frame", "t_window" ], + ":": [ "t_window_frame", "t_window_no_curtains" ], "+": [ "t_door_c", "t_door_b" ], "=": [ "t_door_b", "t_door_locked_interior", "t_door_c", "t_door_o" ], "6": "t_console_broken" From 11132d6941b45e02e2344bc56a378850c48b2dcd Mon Sep 17 00:00:00 2001 From: I-am-Erk <45136638+I-am-Erk@users.noreply.github.com> Date: Sat, 11 Jan 2020 23:51:51 -0800 Subject: [PATCH 43/43] Adds garden house 1 (#36914) --- data/json/mapgen/house/garden_house_1.json | 321 ++++++++++++++ data/json/mapgen/nested/basement_nested.json | 110 +++++ data/json/mapgen/nested/house_nested.json | 408 +++++++++++++++--- .../house_general_palette.json | 2 +- .../json/mapgen_palettes/house_w_palette.json | 10 +- .../overmap/multitile_city_buildings.json | 11 + .../overmap_terrain_residential.json | 27 ++ 7 files changed, 821 insertions(+), 68 deletions(-) create mode 100644 data/json/mapgen/house/garden_house_1.json diff --git a/data/json/mapgen/house/garden_house_1.json b/data/json/mapgen/house/garden_house_1.json new file mode 100644 index 0000000000000..69acaa1584dd7 --- /dev/null +++ b/data/json/mapgen/house/garden_house_1.json @@ -0,0 +1,321 @@ +[ + { + "type": "mapgen", + "method": "json", + "om_terrain": "garden_house_1_floor_1", + "object": { + "fill_ter": "t_floor", + "rows": [ + "....Gss.9.9.9.9.9.9.9.9.", + ".9...ss.................", + "...ssssCMMMMMMMCMM..9.9.", + ".9.s#*o#o#o#o#o#o##.....", + "...s#,,{ } #.9.9.", + ".9.s#,, #.....", + "...s# o.9.9.", + ".9.s# o.....", + "...s# #.9.9.", + "...s#<> #.....", + ".!!@####||+| #!!!!.", + ".!.s..^#t,,|Y,,1,,o...!.", + ".!.s...#88j|7,,,,,*.9.!.", + ".!9s9..#o###l,,,,3#...!.", + ".!.ssssssss#6c45i2#.9.!.", + ".!9.9.9.9.s###oo###...!.", + ".!]......9s.........9.!.", + ".!......9.s909.9[.....!.", + ".!.......9s0009.......!.", + ".!......9.s000.9......!.", + ".!.......9s0009.......!.", + ".!......9..909........!.", + ".!.......9..9..9......!.", + ".!!!!!!!!!!!!!!!!!!!!!!." + ], + "palettes": [ "house_w_foundation_palette" ], + "terrain": { + ".": "t_region_groundcover_urban", + "[": "t_region_groundcover_urban", + "]": "t_region_groundcover_urban", + "#": "t_brick_wall", + "!": "t_fence", + "@": "t_fencegate_c", + "1": "t_linoleum_white", + "2": "t_linoleum_white", + "3": "t_linoleum_white", + "4": "t_linoleum_white", + "5": "t_linoleum_white", + "6": "t_linoleum_white", + "7": "t_linoleum_white", + "8": "t_linoleum_white", + "9": [ + [ "t_region_groundcover_urban", 60 ], + "t_region_tree_shade", + [ "t_region_tree_fruit", 2 ], + [ "t_region_tree_nut", 2 ] + ], + "0": "t_water_pool_shallow_outdoors", + "c": "t_linoleum_white", + "i": "t_linoleum_white", + "j": "t_linoleum_white", + "l": "t_linoleum_white", + "t": "t_linoleum_white", + "Y": "t_linoleum_white" + }, + "furniture": { + "c": "f_cupboard", + "1": "f_cupboard", + "2": "f_cupboard", + "3": "f_cupboard", + "4": "f_cupboard", + "5": "f_sink", + "6": "f_cupboard", + "7": "f_cupboard", + "8": "f_counter" + }, + "items": { + "c": { "item": "kitchen_counters", "chance": 10 }, + "1": [ { "item": "SUS_dishes", "chance": 100 }, { "item": "SUS_silverware", "chance": 100 } ], + "2": { "item": "SUS_cookware", "chance": 100 }, + "3": [ { "item": "SUS_utensils", "chance": 50 }, { "item": "SUS_knife_drawer", "chance": 50 } ], + "4": { "item": "SUS_junk_drawer", "chance": 100 }, + "5": { "item": "SUS_kitchen_sink", "chance": 100 }, + "6": { "item": "SUS_pantry", "chance": 60 }, + "7": [ { "item": "SUS_breakfast_cupboard", "chance": 80 }, { "item": "SUS_coffee_cupboard", "chance": 70 } ], + "8": [ + { "item": "SUS_hair_drawer", "chance": 50 }, + { "item": "SUS_bathroom_cabinet", "chance": 50 }, + { "item": "softdrugs", "chance": 20, "repeat": [ 1, 2 ] }, + { "item": "harddrugs", "chance": 2 } + ] + }, + "nested": { + "{": { + "chunks": [ + [ "livingroom_5x5_N_1", 20 ], + [ "livingroom_5x5_S_1", 20 ], + [ "livingroom_5x5_E_1", 20 ], + [ "livingroom_5x5_W_1", 20 ] + ] + }, + "}": { + "chunks": [ + [ "diningroom_6x6_E_W_1", 20 ], + [ "diningroom_6x6_E_W_2", 20 ], + [ "diningroom_6x6_N_S_2", 20 ], + [ "diningroom_6x6_N_S_1B", 20 ] + ] + }, + "[": { + "chunks": [ + [ "roof_6x6_garden_4", 5 ], + [ "roof_6x6_garden_1", 15 ], + [ "firepit_5x5_1", 10 ], + [ "firepit_5x5_2", 10 ], + [ "reflecting_pool_5x5_1", 10 ], + [ "reflecting_pool_5x5_2", 10 ], + [ "garden_3x3_1", 10 ], + [ "garden_3x3_2", 10 ] + ] + }, + "]": { + "chunks": [ + [ "shed_6x6_junk", 5 ], + [ "shed_6x6_junk", 5 ], + [ "greenhouse_6x6_herbal", 10 ], + [ "greenhouse_6x6_vegetable", 10 ], + [ "pond_6x6", 15 ], + [ "garden_3x3_3", 10 ] + ] + } + } + } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": "garden_house_1_floor_2", + "object": { + "fill_ter": "t_floor", + "rows": [ + "------------------------", + "------------------------", + "----##oo##o#o##oo##-----", + "----#{ |HRH|} #-----", + "----o |___| o-----", + "----o |___| o-----", + "----# +___+ #-----", + "----#|||||__||||||#-----", + "----#_______+ [ #-----", + "----#>R|||+|| o-----", + "----####TT 8| o-----", + "------^# j| #-----", + "-------sw t8#u#oo##-----", + "-------##o###~~~~~s-----", + "-----------s~~~~~~s-----", + "-----------CssssssC-----", + "------------------------", + "------------------------", + "------------------------", + "------------------------", + "------------------------", + "------------------------", + "------------------------", + "------------------------" + ], + "palettes": [ "house_w_foundation_palette" ], + "terrain": { + "_": "t_carpet_red", + "#": "t_brick_wall", + "H": "t_carpet_red", + "s": "t_screened_porch_wall", + "R": "t_carpet_red", + "u": "t_door_glass_c" + }, + "furniture": { "8": "f_counter" }, + "items": { + "8": [ { "item": "shower", "chance": 10 }, { "item": "cleaning", "chance": 3 }, { "item": "softdrugs", "chance": 5 } ] + }, + "nested": { + "{": { + "chunks": [ + [ "bedroom_4x4_adult_1_N", 20 ], + [ "bedroom_4x4_adult_1_E", 20 ], + [ "bedroom_4x4_adult_1_W", 20 ], + [ "bedroom_4x4_adult_1_S", 20 ], + [ "bedroom_4x4_adult_2_N", 10 ], + [ "bedroom_4x4_adult_3_N", 20 ] + ] + }, + "}": { + "chunks": [ + [ "bedroom_4x4_adult_1_W", 10 ], + [ "bedroom_4x4_adult_1_S", 10 ], + [ "bedroom_4x4_adult_2_N", 5 ], + [ "bedroom_4x4_adult_3_N", 10 ], + [ "home_office_4x4_N", 30 ] + ] + }, + "[": { "chunks": [ [ "bedroom_4x4_adult_2_N", 20 ], [ "bedroom_4x4_adult_2_S", 20 ] ] } + } + } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": "garden_house_1_basement", + "//": "Unfinished basement", + "object": { + "fill_ter": "t_thconc_floor", + "rows": [ + "^^^^^^^^^^^^^^^^^^^^^^^^", + "^^^^^^^^^^^^^^^^^^^^^^^^", + "^^^^###############^^^^^", + "^^^^#.............#^^^^^", + "^^^^#.............#^^^^^", + "^^^^#.............#^^^^^", + "^^^^#.............#^^^^^", + "^^^^#Z......!!!...#^^^^^", + "^^^^#W............#^^^^^", + "^^^^#!<|...|NNUUUU#^^^^^", + "^^^^###############^^^^^", + "^^^^^^^^^^^^^^^^^^^^^^^^", + "^^^^^^^^^^^^^^^^^^^^^^^^", + "^^^^^^^^^^^^^^^^^^^^^^^^", + "^^^^^^^^^^^^^^^^^^^^^^^^", + "^^^^^^^^^^^^^^^^^^^^^^^^", + "^^^^^^^^^^^^^^^^^^^^^^^^", + "^^^^^^^^^^^^^^^^^^^^^^^^", + "^^^^^^^^^^^^^^^^^^^^^^^^", + "^^^^^^^^^^^^^^^^^^^^^^^^", + "^^^^^^^^^^^^^^^^^^^^^^^^", + "^^^^^^^^^^^^^^^^^^^^^^^^", + "^^^^^^^^^^^^^^^^^^^^^^^^", + "^^^^^^^^^^^^^^^^^^^^^^^^" + ], + "palettes": [ "standard_domestic_palette", "standard_domestic_basement_palette" ], + "furniture": { "!": "f_table" }, + "place_nested": [ + { "chunks": [ "utility_3x3_S" ], "x": 8, "y": 7 }, + { "chunks": [ "basement_storage_1x1" ], "x": [ 5, 17 ], "y": [ 3, 6 ], "repeat": [ 4, 16 ] } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": "garden_house_1_basement", + "//": "rec room basement", + "object": { + "fill_ter": "t_thconc_floor", + "rows": [ + "^^^^^^^^^^^^^^^^^^^^^^^^", + "^^^^^^^^^^^^^^^^^^^^^^^^", + "^^^^###############^^^^^", + "^^^^#.............#^^^^^", + "^^^^#.............#^^^^^", + "^^^^#.............#^^^^^", + "^^^^#.............#^^^^^", + "^^^^#Z............#^^^^^", + "^^^^#W............#^^^^^", + "^^^^#!<|...|......#^^^^^", + "^^^^###############^^^^^", + "^^^^^^^^^^^^^^^^^^^^^^^^", + "^^^^^^^^^^^^^^^^^^^^^^^^", + "^^^^^^^^^^^^^^^^^^^^^^^^", + "^^^^^^^^^^^^^^^^^^^^^^^^", + "^^^^^^^^^^^^^^^^^^^^^^^^", + "^^^^^^^^^^^^^^^^^^^^^^^^", + "^^^^^^^^^^^^^^^^^^^^^^^^", + "^^^^^^^^^^^^^^^^^^^^^^^^", + "^^^^^^^^^^^^^^^^^^^^^^^^", + "^^^^^^^^^^^^^^^^^^^^^^^^", + "^^^^^^^^^^^^^^^^^^^^^^^^", + "^^^^^^^^^^^^^^^^^^^^^^^^", + "^^^^^^^^^^^^^^^^^^^^^^^^" + ], + "palettes": [ "standard_domestic_palette", "standard_domestic_basement_palette" ], + "furniture": { "!": "f_table" }, + "place_nested": [ + { "chunks": [ "utility_3x3_S" ], "x": 8, "y": 7 }, + { "chunks": [ "livingroom_5x5_S_1" ], "x": [ 7, 12 ], "y": 3 }, + { "chunks": [ "basement_storage_1x1" ], "x": [ 12, 17 ], "y": 9, "repeat": [ 3, 6 ] } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": "garden_house_1_roof", + "object": { + "fill_ter": "t_shingle_flat_roof", + "rows": [ + " ", + " ", + " |22222222222223 ", + " |.............3 ", + " |.............3 ", + " |.............3 ", + " |.............3 ", + " |.............3 ", + " |.............3 ", + " |.............3 ", + " |--5..........3 ", + " |..........3 ", + " |..........3 ", + " |---|......3 ", + " |......3 ", + " |------3 ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " + ], + "palettes": [ "roof_palette" ], + "terrain": { ".": "t_shingle_flat_roof" } + } + } +] diff --git a/data/json/mapgen/nested/basement_nested.json b/data/json/mapgen/nested/basement_nested.json index 039e23701f736..804146ef48232 100644 --- a/data/json/mapgen/nested/basement_nested.json +++ b/data/json/mapgen/nested/basement_nested.json @@ -1,4 +1,114 @@ [ + { + "type": "mapgen", + "method": "json", + "//": "for dispersed scattering around a basement. This is a box of art.", + "nested_mapgen_id": "basement_storage_1x1", + "weight": 20, + "object": { + "mapgensize": [ 1, 1 ], + "rotation": [ 0, 3 ], + "rows": [ "x" ], + "terrain": { "x": "t_null" }, + "furniture": { "x": "f_cardboard_box" }, + "items": { "x": { "item": "art", "chance": 90, "repeat": [ 0, 3 ] } } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "for dispersed scattering around a basement. This is a box of hardware.", + "nested_mapgen_id": "basement_storage_1x1", + "weight": 100, + "object": { + "mapgensize": [ 1, 1 ], + "rotation": [ 0, 3 ], + "rows": [ "x" ], + "terrain": { "x": "t_null" }, + "furniture": { "x": [ "f_crate_c", "f_cardboard_box" ] }, + "items": { "x": { "item": "mischw", "chance": 90, "repeat": [ 0, 3 ] } } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "for dispersed scattering around a basement. This is a box of bedding.", + "nested_mapgen_id": "basement_storage_1x1", + "weight": 100, + "object": { + "mapgensize": [ 1, 1 ], + "rotation": [ 0, 3 ], + "rows": [ "x" ], + "terrain": { "x": "t_null" }, + "furniture": { "x": "f_cardboard_box" }, + "items": { "x": { "item": "bed", "chance": 90, "repeat": [ 0, 8 ] } } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "for dispersed scattering around a basement. This is a box of winter clothing.", + "nested_mapgen_id": "basement_storage_1x1", + "weight": 100, + "object": { + "mapgensize": [ 1, 1 ], + "rotation": [ 0, 3 ], + "rows": [ "x" ], + "terrain": { "x": "t_null" }, + "furniture": { "x": "f_cardboard_box" }, + "items": { "x": { "item": "clothing_outdoor_set", "chance": 90, "repeat": [ 0, 3 ] } } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "for dispersed scattering around a basement. This is a box of work clothing.", + "nested_mapgen_id": "basement_storage_1x1", + "weight": 50, + "object": { + "mapgensize": [ 1, 1 ], + "rotation": [ 0, 3 ], + "rows": [ "x" ], + "terrain": { "x": "t_null" }, + "furniture": { "x": "f_cardboard_box" }, + "items": { + "x": [ + { "item": "hardware_clothing", "chance": 90, "repeat": [ 0, 3 ] }, + { "item": "plumbing_clothing", "chance": 50, "repeat": [ 0, 3 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "for dispersed scattering around a basement. This is a box of old clothing.", + "nested_mapgen_id": "basement_storage_1x1", + "weight": 100, + "object": { + "mapgensize": [ 1, 1 ], + "rotation": [ 0, 3 ], + "rows": [ "x" ], + "terrain": { "x": "t_null" }, + "furniture": { "x": "f_cardboard_box" }, + "items": { "x": { "item": "donated_clothes", "chance": 90, "repeat": [ 0, 3 ] } } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "for dispersed scattering around a basement. This is a box of toys.", + "nested_mapgen_id": "basement_storage_1x1", + "weight": 100, + "object": { + "mapgensize": [ 1, 1 ], + "rotation": [ 0, 3 ], + "rows": [ "x" ], + "terrain": { "x": "t_null" }, + "furniture": { "x": "f_cardboard_box" }, + "items": { "x": { "item": "crate_toys", "chance": 90, "repeat": [ 0, 3 ] } } + } + }, { "type": "palette", "id": "basement_utility_nest_palette", diff --git a/data/json/mapgen/nested/house_nested.json b/data/json/mapgen/nested/house_nested.json index 6e9367fb5db27..995e69547779a 100644 --- a/data/json/mapgen/nested/house_nested.json +++ b/data/json/mapgen/nested/house_nested.json @@ -1,9 +1,90 @@ -[ + + "O " + ], + "palettes": [ "house_w_nest_palette" ], + "items": { + "O": [ { "item": "dresser_male", "chance": 50 }, { "item": "dresser_female", "chance": 50, "repeat": [ 1, 2 ] } ], + "E": { "item": "bed", "chance": 40, "repeat": [ 1, 2 ] }, + "I": { "item": "desks_bedroom_unisex", "chance": 40, "repeat": [ 1, 2 ] }, + "L": { "item": "bedroom", "chance": 20, "repeat": [ 1, 2 ] } + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "compass direction indicates head of bed", + "nested_mapgen_id": "bedroom_4x4_adult_1_W", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + "EE ", + "L I", + " BI", + "Oa " + ], + "palettes": [ "house_w_nest_palette" ], + "items": { + "O": [ { "item": "dresser_male", "chance": 50 }, { "item": "dresser_female", "chance": 50, "repeat": [ 1, 2 ] } ], + "E": { "item": "bed", "chance": 40, "repeat": [ 1, 2 ] }, + "I": { "item": "desks_bedroom_unisex", "chance": 40, "repeat": [ 1, 2 ] }, + "a": { "item": "unisex_coat_rack", "chance": 100, "repeat": [ 1, 2 ] }, + "L": { "item": "bedroom", "chance": 20, "repeat": [ 1, 2 ] } + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "compass direction indicates head of bed", + "nested_mapgen_id": "bedroom_4x4_adult_1_E", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + "II ", + "B L", + "y EE", + "O " + ], + "palettes": [ "house_w_nest_palette" ], + "items": { + "O": [ { "item": "dresser_male", "chance": 50 }, { "item": "dresser_female", "chance": 50, "repeat": [ 1, 2 ] } ], + "E": { "item": "bed", "chance": 40, "repeat": [ 1, 2 ] }, + "I": { "item": "desks_bedroom_unisex", "chance": 40, "repeat": [ 1, 2 ] }, + "L": { "item": "bedroom", "chance": 20, "repeat": [ 1, 2 ] } + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "compass direction indicates head of bed", + "nested_mapgen_id": "bedroom_4x4_adult_1_S", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + "IIy ", + "B O", + " E ", + "LE " + ], + "palettes": [ "house_w_nest_palette" ], + "items": { + "O": [ { "item": "dresser_male", "chance": 50 }, { "item": "dresser_female", "chance": 50, "repeat": [ 1, 2 ] } ], + "E": { "item": "bed", "chance": 40, "repeat": [ 1, 2 ] }, + "I": { "item": "desks_bedroom_unisex", "chance": 40, "repeat": [ 1, 2 ] }, + "L": { "item": "homebooks", "chance": 10, "repeat": [ 1, 2 ] } + } + } + }, { "type": "mapgen", "method": "json", "//": "compass direction indicates head of bed", - "nested_mapgen_id": "bedroom_4x4_adult_1_N", + "nested_mapgen_id": "bedroom_4x4_adult_2_N", "object": { "mapgensize": [ 4, 4 ], "rotation": [ 0, 3 ], @@ -15,7 +96,7 @@ ], "palettes": [ "house_w_nest_palette" ], "items": { - "O": [ { "item": "SUS_dresser_mens", "chance": 50 }, { "item": "SUS_dresser_womens", "chance": 50, "repeat": [ 1, 2 ] } ], + "O": [ { "item": "dresser_male", "chance": 50 }, { "item": "dresser_female", "chance": 50, "repeat": [ 1, 2 ] } ], "E": { "item": "bed", "chance": 40, "repeat": [ 1, 2 ] }, "L": { "item": "bedroom", "chance": 20, "repeat": [ 1, 2 ] } } @@ -24,7 +105,70 @@ { "type": "mapgen", "method": "json", - "nested_mapgen_id": "bedroom_4x4_adult_1_E", + "//": "compass direction indicates head of bed", + "nested_mapgen_id": "bedroom_4x4_adult_2_N", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + "OEEO", + " EE ", + " 66 ", + " 66 " + ], + "palettes": [ "house_w_nest_palette" ], + "items": { + "O": { "item": { "subtype": "distribution", "entries": [ { "group": "dresser_male" }, { "group": "dresser_female" } ] } }, + "E": { "item": "bed", "chance": 40, "repeat": [ 1, 2 ] } + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "compass direction indicates head of bed", + "nested_mapgen_id": "bedroom_4x4_adult_2_N", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + "OEEO", + " EE ", + " ", + " Ih " + ], + "palettes": [ "house_w_nest_palette" ], + "items": { + "O": { "item": { "subtype": "distribution", "entries": [ { "group": "dresser_male" }, { "group": "dresser_female" } ] } }, + "E": { "item": "bed", "chance": 40, "repeat": [ 1, 2 ] } + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "compass direction indicates head of bed", + "nested_mapgen_id": "bedroom_4x4_adult_2_N", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + "OEEO", + " EE ", + " ", + " bH " + ], + "palettes": [ "house_w_nest_palette" ], + "items": { + "O": { "item": { "subtype": "distribution", "entries": [ { "group": "dresser_male" }, { "group": "dresser_female" } ] } }, + "E": { "item": "bed", "chance": 40, "repeat": [ 1, 2 ] } + } + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "bedroom_4x4_adult_2_E", "//": "compass direction indicates head of bed", "object": { "mapgensize": [ 4, 4 ], @@ -37,7 +181,7 @@ ], "palettes": [ "house_w_nest_palette" ], "items": { - "O": [ { "item": "SUS_dresser_mens", "chance": 50 }, { "item": "SUS_dresser_womens", "chance": 50, "repeat": [ 1, 2 ] } ], + "O": [ { "item": "dresser_male", "chance": 50 }, { "item": "dresser_female", "chance": 50, "repeat": [ 1, 2 ] } ], "E": { "item": "bed", "chance": 40, "repeat": [ 1, 2 ] }, "a": { "item": "unisex_coat_rack", "chance": 100, "repeat": [ 1, 2 ] }, "L": { "item": "bedroom", "chance": 20, "repeat": [ 1, 2 ] } @@ -47,7 +191,70 @@ { "type": "mapgen", "method": "json", - "nested_mapgen_id": "bedroom_4x4_adult_1_W", + "//": "compass direction indicates head of bed", + "nested_mapgen_id": "bedroom_4x4_adult_2_E", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + " O", + "66EE", + "66EE", + " 0" + ], + "palettes": [ "house_w_nest_palette" ], + "items": { + "O": { "item": { "subtype": "distribution", "entries": [ { "group": "dresser_male" }, { "group": "dresser_female" } ] } }, + "E": { "item": "bed", "chance": 40, "repeat": [ 1, 2 ] } + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "compass direction indicates head of bed", + "nested_mapgen_id": "bedroom_4x4_adult_2_E", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + " O", + "I EE", + "h EE", + " 0" + ], + "palettes": [ "house_w_nest_palette" ], + "items": { + "O": { "item": { "subtype": "distribution", "entries": [ { "group": "dresser_male" }, { "group": "dresser_female" } ] } }, + "E": { "item": "bed", "chance": 40, "repeat": [ 1, 2 ] } + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "compass direction indicates head of bed", + "nested_mapgen_id": "bedroom_4x4_adult_2_E", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + " O", + "b EE", + "H EE", + " 0" + ], + "palettes": [ "house_w_nest_palette" ], + "items": { + "O": { "item": { "subtype": "distribution", "entries": [ { "group": "dresser_male" }, { "group": "dresser_female" } ] } }, + "E": { "item": "bed", "chance": 40, "repeat": [ 1, 2 ] } + } + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "bedroom_4x4_adult_2_W", "//": "compass direction indicates head of bed", "object": { "mapgensize": [ 4, 4 ], @@ -60,7 +267,7 @@ ], "palettes": [ "house_w_nest_palette" ], "items": { - "O": [ { "item": "SUS_dresser_mens", "chance": 50 }, { "item": "SUS_dresser_womens", "chance": 50, "repeat": [ 1, 2 ] } ], + "O": [ { "item": "dresser_male", "chance": 50 }, { "item": "dresser_female", "chance": 50, "repeat": [ 1, 2 ] } ], "E": { "item": "bed", "chance": 40, "repeat": [ 1, 2 ] }, "L": { "item": "bedroom", "chance": 20, "repeat": [ 1, 2 ] } } @@ -69,23 +276,21 @@ { "type": "mapgen", "method": "json", - "nested_mapgen_id": "bedroom_4x4_adult_1_S", "//": "compass direction indicates head of bed", + "nested_mapgen_id": "bedroom_4x4_adult_2_W", "object": { "mapgensize": [ 4, 4 ], "rotation": [ 0, 3 ], "rows": [ - " aO ", - " ", - " EE ", - "LEEL" + "0 ", + "EE66", + "EE66", + "O " ], "palettes": [ "house_w_nest_palette" ], "items": { - "O": [ { "item": "SUS_dresser_mens", "chance": 50 }, { "item": "SUS_dresser_womens", "chance": 50, "repeat": [ 1, 2 ] } ], - "E": { "item": "bed", "chance": 30, "repeat": [ 1, 2 ] }, - "a": { "item": "unisex_coat_rack", "chance": 100, "repeat": [ 1, 2 ] }, - "L": { "item": "bedroom", "chance": 20, "repeat": [ 1, 2 ] } + "O": { "item": { "subtype": "distribution", "entries": [ { "group": "dresser_male" }, { "group": "dresser_female" } ] } }, + "E": { "item": "bed", "chance": 40, "repeat": [ 1, 2 ] } } } }, @@ -93,22 +298,20 @@ "type": "mapgen", "method": "json", "//": "compass direction indicates head of bed", - "nested_mapgen_id": "bedroom_4x4_adult_2_N", + "nested_mapgen_id": "bedroom_4x4_adult_2_W", "object": { "mapgensize": [ 4, 4 ], "rotation": [ 0, 3 ], "rows": [ - "EL ", - "E I", - "y BI", + "0 ", + "EE h", + "EE I", "O " ], "palettes": [ "house_w_nest_palette" ], "items": { - "O": [ { "item": "SUS_dresser_mens", "chance": 50 }, { "item": "SUS_dresser_womens", "chance": 50, "repeat": [ 1, 2 ] } ], - "E": { "item": "bed", "chance": 40, "repeat": [ 1, 2 ] }, - "I": { "item": "SUS_desks_bedroom_unisex", "chance": 40, "repeat": [ 1, 2 ] }, - "L": { "item": "bedroom", "chance": 20, "repeat": [ 1, 2 ] } + "O": { "item": { "subtype": "distribution", "entries": [ { "group": "dresser_male" }, { "group": "dresser_female" } ] } }, + "E": { "item": "bed", "chance": 40, "repeat": [ 1, 2 ] } } } }, @@ -121,16 +324,36 @@ "mapgensize": [ 4, 4 ], "rotation": [ 0, 3 ], "rows": [ - "EE ", - "L I", - " BI", - "Oa " + "0 ", + "EE H", + "EE b", + "O " ], "palettes": [ "house_w_nest_palette" ], "items": { - "O": [ { "item": "SUS_dresser_mens", "chance": 50 }, { "item": "SUS_dresser_womens", "chance": 50, "repeat": [ 1, 2 ] } ], - "E": { "item": "bed", "chance": 40, "repeat": [ 1, 2 ] }, - "I": { "item": "SUS_desks_bedroom_unisex", "chance": 40, "repeat": [ 1, 2 ] }, + "O": { "item": { "subtype": "distribution", "entries": [ { "group": "dresser_male" }, { "group": "dresser_female" } ] } }, + "E": { "item": "bed", "chance": 40, "repeat": [ 1, 2 ] } + } + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "bedroom_4x4_adult_2_S", + "//": "compass direction indicates head of bed", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + " aO ", + " ", + " EE ", + "LEEL" + ], + "palettes": [ "house_w_nest_palette" ], + "items": { + "O": [ { "item": "dresser_male", "chance": 50 }, { "item": "dresser_female", "chance": 50, "repeat": [ 1, 2 ] } ], + "E": { "item": "bed", "chance": 30, "repeat": [ 1, 2 ] }, "a": { "item": "unisex_coat_rack", "chance": 100, "repeat": [ 1, 2 ] }, "L": { "item": "bedroom", "chance": 20, "repeat": [ 1, 2 ] } } @@ -140,22 +363,20 @@ "type": "mapgen", "method": "json", "//": "compass direction indicates head of bed", - "nested_mapgen_id": "bedroom_4x4_adult_2_E", + "nested_mapgen_id": "bedroom_4x4_adult_2_S", "object": { "mapgensize": [ 4, 4 ], "rotation": [ 0, 3 ], "rows": [ - "II ", - "B L", - "y EE", - "O " + " 66 ", + " 66 ", + " EE ", + "OEEO" ], "palettes": [ "house_w_nest_palette" ], "items": { - "O": [ { "item": "SUS_dresser_mens", "chance": 50 }, { "item": "SUS_dresser_womens", "chance": 50, "repeat": [ 1, 2 ] } ], - "E": { "item": "bed", "chance": 40, "repeat": [ 1, 2 ] }, - "I": { "item": "SUS_desks_bedroom_unisex", "chance": 40, "repeat": [ 1, 2 ] }, - "L": { "item": "bedroom", "chance": 20, "repeat": [ 1, 2 ] } + "O": { "item": { "subtype": "distribution", "entries": [ { "group": "dresser_male" }, { "group": "dresser_female" } ] } }, + "E": { "item": "bed", "chance": 40, "repeat": [ 1, 2 ] } } } }, @@ -168,17 +389,36 @@ "mapgensize": [ 4, 4 ], "rotation": [ 0, 3 ], "rows": [ - "IIy ", - "B O", - " E ", - "LE " + " Ih ", + " ", + " EE ", + "OEEO" ], "palettes": [ "house_w_nest_palette" ], "items": { - "O": [ { "item": "SUS_dresser_mens", "chance": 50 }, { "item": "SUS_dresser_womens", "chance": 50, "repeat": [ 1, 2 ] } ], - "E": { "item": "bed", "chance": 40, "repeat": [ 1, 2 ] }, - "I": { "item": "SUS_desks_bedroom_unisex", "chance": 40, "repeat": [ 1, 2 ] }, - "L": { "item": "homebooks", "chance": 10, "repeat": [ 1, 2 ] } + "O": { "item": { "subtype": "distribution", "entries": [ { "group": "dresser_male" }, { "group": "dresser_female" } ] } }, + "E": { "item": "bed", "chance": 40, "repeat": [ 1, 2 ] } + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "compass direction indicates head of bed", + "nested_mapgen_id": "bedroom_4x4_adult_2_S", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + " bH ", + " ", + " EE ", + "OEEO" + ], + "palettes": [ "house_w_nest_palette" ], + "items": { + "O": { "item": { "subtype": "distribution", "entries": [ { "group": "dresser_male" }, { "group": "dresser_female" } ] } }, + "E": { "item": "bed", "chance": 40, "repeat": [ 1, 2 ] } } } }, @@ -198,7 +438,7 @@ ], "palettes": [ "house_w_nest_palette" ], "items": { - "O": [ { "item": "SUS_dresser_mens", "chance": 50 }, { "item": "SUS_dresser_womens", "chance": 50, "repeat": [ 1, 2 ] } ], + "O": [ { "item": "dresser_male", "chance": 50 }, { "item": "dresser_female", "chance": 50, "repeat": [ 1, 2 ] } ], "E": { "item": "bed", "chance": 40, "repeat": [ 1, 2 ] }, "R": { "item": "homebooks", "chance": 10, "repeat": [ 1, 2 ] } } @@ -220,7 +460,7 @@ ], "palettes": [ "house_w_nest_palette" ], "items": { - "O": [ { "item": "SUS_dresser_mens", "chance": 50 }, { "item": "SUS_dresser_womens", "chance": 50, "repeat": [ 1, 2 ] } ], + "O": [ { "item": "dresser_male", "chance": 50 }, { "item": "dresser_female", "chance": 50, "repeat": [ 1, 2 ] } ], "E": { "item": "bed", "chance": 40, "repeat": [ 1, 2 ] }, "R": { "item": "homebooks", "chance": 10, "repeat": [ 1, 2 ] } } @@ -242,7 +482,7 @@ ], "palettes": [ "house_w_nest_palette" ], "items": { - "O": [ { "item": "SUS_dresser_mens", "chance": 50 }, { "item": "SUS_dresser_womens", "chance": 50, "repeat": [ 1, 2 ] } ], + "O": [ { "item": "dresser_male", "chance": 50 }, { "item": "dresser_female", "chance": 50, "repeat": [ 1, 2 ] } ], "E": { "item": "bed", "chance": 40, "repeat": [ 1, 2 ] }, "R": { "item": "homebooks", "chance": 10, "repeat": [ 1, 2 ] } } @@ -264,7 +504,7 @@ ], "palettes": [ "house_w_nest_palette" ], "items": { - "O": [ { "item": "SUS_dresser_mens", "chance": 50 }, { "item": "SUS_dresser_womens", "chance": 50, "repeat": [ 1, 2 ] } ], + "O": [ { "item": "dresser_male", "chance": 50 }, { "item": "dresser_female", "chance": 50, "repeat": [ 1, 2 ] } ], "E": { "item": "bed", "chance": 40, "repeat": [ 1, 2 ] }, "R": { "item": "homebooks", "chance": 10, "repeat": [ 1, 2 ] } } @@ -287,7 +527,7 @@ ], "palettes": [ "house_w_nest_palette" ], "items": { - "O": [ { "item": "SUS_dresser_mens", "chance": 50 }, { "item": "SUS_dresser_womens", "chance": 50, "repeat": [ 1, 2 ] } ], + "O": [ { "item": "SUS_dresser_male", "chance": 50 }, { "item": "SUS_dresser_female", "chance": 50, "repeat": [ 1, 2 ] } ], "E": { "item": "bed", "chance": 40, "repeat": [ 1, 2 ] }, "I": { "item": "SUS_desks_bedroom_unisex", "chance": 40, "repeat": [ 1, 2 ] }, "L": { "item": "homebooks", "chance": 10, "repeat": [ 1, 2 ] } @@ -311,7 +551,7 @@ ], "palettes": [ "house_w_nest_palette" ], "items": { - "O": [ { "item": "SUS_dresser_mens", "chance": 50 }, { "item": "SUS_dresser_womens", "chance": 50, "repeat": [ 1, 2 ] } ], + "O": [ { "item": "SUS_dresser_male", "chance": 50 }, { "item": "SUS_dresser_female", "chance": 50, "repeat": [ 1, 2 ] } ], "E": { "item": "bed", "chance": 40, "repeat": [ 1, 2 ] }, "I": { "item": "SUS_desks_bedroom_unisex", "chance": 40, "repeat": [ 1, 2 ] }, "L": { "item": "homebooks", "chance": 10, "repeat": [ 1, 2 ] } @@ -335,7 +575,7 @@ ], "palettes": [ "house_w_nest_palette" ], "items": { - "O": [ { "item": "SUS_dresser_mens", "chance": 50 }, { "item": "SUS_dresser_womens", "chance": 50, "repeat": [ 1, 2 ] } ], + "O": [ { "item": "SUS_dresser_male", "chance": 50 }, { "item": "SUS_dresser_female", "chance": 50, "repeat": [ 1, 2 ] } ], "E": { "item": "bed", "chance": 40, "repeat": [ 1, 2 ] }, "I": { "item": "SUS_desks_bedroom_unisex", "chance": 40, "repeat": [ 1, 2 ] }, "L": { "item": "homebooks", "chance": 10, "repeat": [ 1, 2 ] } @@ -359,7 +599,7 @@ ], "palettes": [ "house_w_nest_palette" ], "items": { - "O": [ { "item": "SUS_dresser_mens", "chance": 50 }, { "item": "SUS_dresser_womens", "chance": 50, "repeat": [ 1, 2 ] } ], + "O": [ { "item": "SUS_dresser_male", "chance": 50 }, { "item": "SUS_dresser_female", "chance": 50, "repeat": [ 1, 2 ] } ], "E": { "item": "bed", "chance": 40, "repeat": [ 1, 2 ] }, "I": { "item": "SUS_desks_bedroom_unisex", "chance": 40, "repeat": [ 1, 2 ] }, "L": { "item": "homebooks", "chance": 10, "repeat": [ 1, 2 ] } @@ -383,7 +623,7 @@ ], "palettes": [ "house_w_nest_palette" ], "items": { - "O": [ { "item": "SUS_dresser_mens", "chance": 50 }, { "item": "SUS_dresser_womens", "chance": 50, "repeat": [ 1, 2 ] } ], + "O": [ { "item": "SUS_dresser_male", "chance": 50 }, { "item": "SUS_dresser_female", "chance": 50, "repeat": [ 1, 2 ] } ], "E": { "item": "bed", "chance": 40, "repeat": [ 1, 2 ] }, "I": { "item": "SUS_desks_bedroom_unisex", "chance": 40, "repeat": [ 1, 2 ] }, "a": { "item": "unisex_coat_rack", "chance": 100, "repeat": [ 1, 2 ] }, @@ -408,7 +648,7 @@ ], "palettes": [ "house_w_nest_palette" ], "items": { - "O": [ { "item": "SUS_dresser_mens", "chance": 50 }, { "item": "SUS_dresser_womens", "chance": 50, "repeat": [ 1, 2 ] } ], + "O": [ { "item": "SUS_dresser_male", "chance": 50 }, { "item": "SUS_dresser_female", "chance": 50, "repeat": [ 1, 2 ] } ], "E": { "item": "bed", "chance": 40, "repeat": [ 1, 2 ] }, "I": { "item": "SUS_desks_bedroom_unisex", "chance": 40, "repeat": [ 1, 2 ] }, "a": { "item": "unisex_coat_rack", "chance": 100, "repeat": [ 1, 2 ] }, @@ -433,7 +673,7 @@ ], "palettes": [ "house_w_nest_palette" ], "items": { - "O": [ { "item": "SUS_dresser_mens", "chance": 50 }, { "item": "SUS_dresser_womens", "chance": 50, "repeat": [ 1, 2 ] } ], + "O": [ { "item": "SUS_dresser_male", "chance": 50 }, { "item": "SUS_dresser_female", "chance": 50, "repeat": [ 1, 2 ] } ], "E": { "item": "bed", "chance": 40, "repeat": [ 1, 2 ] }, "I": { "item": "SUS_desks_bedroom_unisex", "chance": 40, "repeat": [ 1, 2 ] }, "L": { "item": "homebooks", "chance": 10, "repeat": [ 1, 2 ] }, @@ -458,7 +698,7 @@ ], "palettes": [ "house_w_nest_palette" ], "items": { - "O": [ { "item": "SUS_dresser_mens", "chance": 50 }, { "item": "SUS_dresser_womens", "chance": 50, "repeat": [ 1, 2 ] } ], + "O": [ { "item": "SUS_dresser_male", "chance": 50 }, { "item": "SUS_dresser_female", "chance": 50, "repeat": [ 1, 2 ] } ], "E": { "item": "bed", "chance": 40, "repeat": [ 1, 2 ] }, "I": { "item": "SUS_desks_bedroom_unisex", "chance": 40, "repeat": [ 1, 2 ] }, "L": { "item": "homebooks", "chance": 10, "repeat": [ 1, 2 ] }, @@ -1559,7 +1799,7 @@ "rrrr", "P h ", " ", - "RHHH" + " RHH" ], "palettes": [ "standard_domestic_palette" ], "furniture": { "P": "f_filing_cabinet" }, @@ -1570,6 +1810,28 @@ } } }, + { + "//": "Home office. Cardinal direction indicates which wall the desk is on.", + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "home_office_4x4_N", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + "Prrr", + " hr", + " ", + " RR!" + ], + "palettes": [ "standard_domestic_palette" ], + "furniture": { "P": "f_filing_cabinet", "!": "f_paper_shredder" }, + "items": { + "P": [ { "item": "office_paper", "chance": 90, "repeat": [ 1, 5 ] }, { "item": "office", "chance": 95, "repeat": [ 1, 5 ] } ], + "R": [ { "item": "magazines", "chance": 75, "repeat": [ 1, 5 ] }, { "item": "homebooks", "chance": 75, "repeat": [ 1, 3 ] } ] + } + } + }, { "//": "Home office. Cardinal direction indicates which wall the desk is on.", "type": "mapgen", @@ -1579,7 +1841,7 @@ "mapgensize": [ 4, 4 ], "rotation": [ 0, 3 ], "rows": [ - "HHHR", + "HHR ", " ", " h ", "rrrP" @@ -1592,5 +1854,27 @@ "R": [ { "item": "magazines", "chance": 75, "repeat": [ 1, 5 ] }, { "item": "homebooks", "chance": 75, "repeat": [ 1, 3 ] } ] } } + }, + { + "//": "Home office. Cardinal direction indicates which wall the desk is on.", + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "home_office_4x4_S", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + "!RR ", + " ", + " hr", + "Prrr" + ], + "palettes": [ "standard_domestic_palette" ], + "furniture": { "P": "f_filing_cabinet", "!": "f_paper_shredder" }, + "items": { + "P": [ { "item": "office_paper", "chance": 90, "repeat": [ 1, 5 ] }, { "item": "office", "chance": 95, "repeat": [ 1, 5 ] } ], + "R": [ { "item": "magazines", "chance": 75, "repeat": [ 1, 5 ] }, { "item": "homebooks", "chance": 75, "repeat": [ 1, 3 ] } ] + } + } } ] diff --git a/data/json/mapgen_palettes/house_general_palette.json b/data/json/mapgen_palettes/house_general_palette.json index 16f0ba6bb403a..2dee912faf96a 100644 --- a/data/json/mapgen_palettes/house_general_palette.json +++ b/data/json/mapgen_palettes/house_general_palette.json @@ -201,7 +201,7 @@ "terrain": { "^": "t_rock", "#": "t_concrete_wall", ".": "t_thconc_floor" }, "furniture": { "c": "f_exercise", "u": "f_ergometer", "X": "f_punching_bag" }, "monsters": { - " ": [ { "monster": "GROUP_ROACH", "chance": 70 }, { "monster": "GROUP_ZOMBIE", "chance": 100 } ], + "!": [ { "monster": "GROUP_ROACH", "chance": 70 }, { "monster": "GROUP_ZOMBIE", "chance": 100 } ], ".": [ { "monster": "GROUP_ROACH", "chance": 80 }, { "monster": "GROUP_ZOMBIE", "chance": 60 } ] } } diff --git a/data/json/mapgen_palettes/house_w_palette.json b/data/json/mapgen_palettes/house_w_palette.json index eb5f1c8245fea..93ad23f4d79e5 100644 --- a/data/json/mapgen_palettes/house_w_palette.json +++ b/data/json/mapgen_palettes/house_w_palette.json @@ -125,8 +125,8 @@ "X": "t_region_groundcover_urban", " ": "t_floor", "|": "t_wall_w", - "<": "t_stairs_up", - ">": "t_stairs_down", + "<": "t_wood_stairs_up", + ">": "t_wood_stairs_down", "o": [ [ "t_window_domestic", 10 ], "t_window_no_curtains", @@ -193,10 +193,10 @@ ], "T": { "item": "shower", "chance": 30, "repeat": [ 1, 2 ] }, "n": { "item": "SUS_kitchen_sink", "chance": 10, "repeat": [ 1, 2 ] }, - "i": { "item": "oven", "chance": 25, "repeat": [ 1, 2 ] }, - "l": { "item": "fridge", "chance": 30, "repeat": [ 1, 2 ] }, + "i": { "item": "oven", "chance": 75, "repeat": [ 1, 2 ] }, + "l": { "item": "fridge", "chance": 90, "repeat": [ 1, 2 ] }, "Y": { "item": "trash", "chance": 30, "repeat": [ 1, 2 ] }, - "R": { "item": "homebooks", "chance": 30, "repeat": [ 1, 2 ] } + "R": { "item": "homebooks", "chance": 70, "repeat": [ 3, 8 ] } } }, { diff --git a/data/json/overmap/multitile_city_buildings.json b/data/json/overmap/multitile_city_buildings.json index 09f32ac4fa665..9b1a5ee91f188 100644 --- a/data/json/overmap/multitile_city_buildings.json +++ b/data/json/overmap/multitile_city_buildings.json @@ -15,6 +15,17 @@ { "point": [ 0, 0, -1 ], "overmap": "basement" } ] }, + { + "type": "city_building", + "id": "garden_house_1", + "locations": [ "land", "swamp" ], + "overmaps": [ + { "point": [ 0, 0, 0 ], "overmap": "garden_house_1_floor_1_north" }, + { "point": [ 0, 0, 1 ], "overmap": "garden_house_1_floor_2_north" }, + { "point": [ 0, 0, -1 ], "overmap": "garden_house_1_basement_north" }, + { "point": [ 0, 0, 2 ], "overmap": "garden_house_1_roof_north" } + ] + }, { "type": "city_building", "id": "house_dogs", diff --git a/data/json/overmap/overmap_terrain/overmap_terrain_residential.json b/data/json/overmap/overmap_terrain/overmap_terrain_residential.json index 86c76ea23f24b..922cce4a9f369 100644 --- a/data/json/overmap/overmap_terrain/overmap_terrain_residential.json +++ b/data/json/overmap/overmap_terrain/overmap_terrain_residential.json @@ -1089,5 +1089,32 @@ "copy-from": "generic_city_building", "color": "light_green", "see_cost": 2 + }, + { + "type": "overmap_terrain", + "id": "garden_house_1_floor_1", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2, + "flags": [ "SIDEWALK", "GENERIC_LOOT" ] + }, + { + "type": "overmap_terrain", + "id": "garden_house_1_floor_2", + "copy-from": "garden_house_1_floor_1" + }, + { + "type": "overmap_terrain", + "id": "garden_house_1_roof", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2 + }, + { + "type": "overmap_terrain", + "id": "garden_house_1_basement", + "copy-from": "generic_city_house_basement" } ]