From 6b0b64f9faaac6f2b3f9c69d5f444bffab7ae9b5 Mon Sep 17 00:00:00 2001 From: Kevin Granade Date: Sun, 5 Jan 2020 20:57:13 +0000 Subject: [PATCH 01/36] Fixes to ant lair generation --- src/overmap.cpp | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/overmap.cpp b/src/overmap.cpp index 7190820786637..81f1d9308895b 100644 --- a/src/overmap.cpp +++ b/src/overmap.cpp @@ -471,17 +471,17 @@ bool is_river_or_lake( const oter_id &ter ) bool is_ot_match( const std::string &name, const oter_id &oter, const ot_match_type match_type ) { - const auto is_ot = []( const std::string & otype, const oter_id & oter ) { + static const auto is_ot = []( const std::string & otype, const oter_id & oter ) { return otype == oter.id().str(); }; - const auto is_ot_type = []( const std::string & otype, const oter_id & oter ) { + static const auto is_ot_type = []( const std::string & otype, const oter_id & oter ) { // Is a match if the base type is the same which will allow for handling rotations/linear features // but won't incorrectly match other locations that happen to contain the substring. return otype == oter->get_type_id().str(); }; - const auto is_ot_prefix = []( const std::string & otype, const oter_id & oter ) { + static const auto is_ot_prefix = []( const std::string & otype, const oter_id & oter ) { const size_t oter_size = oter.id().str().size(); const size_t compare_size = otype.size(); if( compare_size > oter_size ) { @@ -502,7 +502,7 @@ bool is_ot_match( const std::string &name, const oter_id &oter, return oter_str.str()[compare_size] == '_'; }; - const auto is_ot_subtype = []( const std::string & otype, const oter_id & oter ) { + static const auto is_ot_subtype = []( const std::string & otype, const oter_id & oter ) { // Checks for any partial match. return strstr( oter.id().c_str(), otype.c_str() ); }; @@ -3165,6 +3165,8 @@ void overmap::build_anthill( const tripoint &p, int s ) build_tunnel( p, s - rng( 0, 3 ), dir ); } + // @TODO: This should follow the tunnel network, + // as of now it can pick a tile from an adjacent ant network. std::vector queenpoints; for( int i = -s; i <= s; i++ ) { for( int j = -s; j <= s; j++ ) { @@ -3192,7 +3194,7 @@ void overmap::build_anthill( const tripoint &p, int s ) const oter_id &oter = ter( root ); for( auto dir : om_direction::all ) { const tripoint p = root + om_direction::displace( dir ); - if( check_ot( "ants", ot_match_type::type, p ) ) { + if( check_ot( "ants", ot_match_type::prefix, p ) ) { size_t line = oter->get_line(); line = om_lines::set_segment( line, dir ); if( line != oter->get_line() ) { @@ -3215,11 +3217,13 @@ void overmap::build_tunnel( const tripoint &p, int s, om_direction::type dir ) } const oter_id root_id( "ants_isolated" ); - if( check_ot( "ants", ot_match_type::type, p ) && root_id != ter( p )->id ) { - return; - } - if( !is_ot_match( "empty_rock", ter( p )->id, ot_match_type::type ) ) { - return; + if( root_id != ter( p )->id ) { + if( check_ot( "ants", ot_match_type::type, p ) ) { + return; + } + if( !is_ot_match( "empty_rock", ter( p ), ot_match_type::type ) ) { + return; + } } ter_set( p, oter_id( root_id ) ); @@ -3229,7 +3233,7 @@ void overmap::build_tunnel( const tripoint &p, int s, om_direction::type dir ) for( auto r : om_direction::all ) { const tripoint cand = p + om_direction::displace( r ); if( !check_ot( "ants", ot_match_type::type, cand ) && - !is_ot_match( "empty_rock", ter( cand )->id, ot_match_type::type ) ) { + is_ot_match( "empty_rock", ter( cand ), ot_match_type::type ) ) { valid.push_back( r ); } } From 44937179a4351a0a94950aa214f1132b3ae2e9f9 Mon Sep 17 00:00:00 2001 From: Qrox Date: Mon, 6 Jan 2020 15:06:18 +0800 Subject: [PATCH 02/36] Fix typo --- src/avatar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/avatar.cpp b/src/avatar.cpp index f81ab0fe29b2b..dd71f8450ea96 100644 --- a/src/avatar.cpp +++ b/src/avatar.cpp @@ -324,7 +324,7 @@ const player *avatar::get_book_reader( const item &book, std::vectordisp_name( true ) ) ); } else if( elem->is_blind() ) { - reasons.push_back( string_format( _( "% is blind." ), elem->disp_name( true ) ) ); + reasons.push_back( string_format( _( "%s is blind." ), elem->disp_name() ) ); } else { int proj_time = time_to_read( book, *elem ); if( proj_time < time_taken ) { From 57b6f2ffc1daeb6488ef72a2a92e80080a587eac Mon Sep 17 00:00:00 2001 From: curstwist <39442864+curstwist@users.noreply.github.com> Date: Mon, 6 Jan 2020 09:58:21 -0500 Subject: [PATCH 03/36] update next 5 houses (#36741) --- data/json/itemgroups/food.json | 40 +++ data/json/mapgen/house/house_library.json | 149 ++++------- data/json/mapgen/house/house_modern_lx.json | 170 ++++++------- data/json/mapgen/house/house_patio.json | 238 +++++++----------- data/json/mapgen/house/house_porch.json | 195 ++++++-------- data/json/mapgen/house/house_rv.json | 166 ++++++------ .../house_general_palette.json | 4 +- .../overmap/multitile_city_buildings.json | 50 ++++ .../overmap_terrain_residential.json | 77 ++++++ data/json/regional_map_settings.json | 9 +- 10 files changed, 541 insertions(+), 557 deletions(-) diff --git a/data/json/itemgroups/food.json b/data/json/itemgroups/food.json index ee72007a63973..4b86e646dddfd 100644 --- a/data/json/itemgroups/food.json +++ b/data/json/itemgroups/food.json @@ -851,5 +851,45 @@ [ "eggnog_spiked", 5 ], [ "drink_martini", 10 ] ] + }, + { + "id": "barbecue", + "type": "item_group", + "items": [ + [ "beer", 15 ], + [ "meat", 65 ], + [ "glazed_tenderloin", 55 ], + [ "fish", 10 ], + [ "fish_smoked", 5 ], + [ "meat_smoked", 60 ], + [ "sausage", 35 ], + [ "bratwurst_sausage", 30 ], + [ "hotdogs_frozen", 65 ], + [ "hotdogs_cooked", 65 ], + [ "chilidogs", 30 ], + [ "currywurst", 15 ], + [ "lettuce", 45 ], + [ "tomato", 45 ], + [ "onion", 30 ], + [ "chili_pepper", 30 ], + [ "corn", 20 ], + [ "irradiated_lettuce", 20 ], + [ "irradiated_tomato", 20 ], + [ "irradiated_onion", 5 ], + [ "irradiated_corn", 10 ], + [ "bacon", 20 ], + [ "potato_baked", 15 ], + [ "bread", 40 ], + [ "ketchup", 80 ], + [ "mustard", 75 ], + { "item": "pickle", "prob": 20, "charges": 6, "container-item": "jar_glass_sealed" }, + [ "pickle", 20 ], + [ "cheeseburger", 30 ], + [ "hamburger", 70 ], + [ "cheese", 45 ], + [ "ceramic_plate", 30 ], + [ "knife_steak", 45 ], + [ "tongs", 60 ] + ] } ] diff --git a/data/json/mapgen/house/house_library.json b/data/json/mapgen/house/house_library.json index 495ff05f76019..3440171434f8c 100644 --- a/data/json/mapgen/house/house_library.json +++ b/data/json/mapgen/house/house_library.json @@ -2,117 +2,56 @@ { "type": "mapgen", "method": "json", - "om_terrain": [ "house" ], - "weight": 100, + "om_terrain": [ "house_library" ], + "weight": 200, "object": { "fill_ter": "t_floor", "rows": [ - "...............P........", - ".--vv--;--vv-----------.", - ".|Y Y|ooooo R|.", - ".| |o v.", - ".| nn |o v.", - ".| h nnh | K r|.", - ".| nn 0|0 r|.", - ".v nnh | Kc r|.", - ".v nn |o v.", - ".| h C|o v.", - ".| h C|oooo R|.", - ".|h C|----+---|.", - ".|------ ----- K |.", - ".|f c| ????? K|.", - ".vO c| ? v.", - ".vC + n ? v.", - ".|S | |.", - ".|--+------+------+---|.", - ".|B | | |.", - ".|B + | v.", - ".v S| @@ | @@ v.", - ".|t | @@d | @@ 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": [ 0, 14 ], "y": [ 0, 0 ], "repeat": [ 5, 8 ] } + "......---......p........", + ".##oo##*##oo###########.", + ".#y h L y|RRRRRvyR#.", + ".# |R Ho.", + ".#r ff |R Ho.", + ".#rh ffh | EE r#.", + ".#r hff a|a ssT r#^", + ".o ffh | EE r#.", + ".oc h |R Ho.", + ".#||||||| |||R Ho.", + ".#y666 |>|RRRR R#.", + ".#7 | |||||+|||#.", + ".#4 JA T#.", + ".#O J A HHHHHs E#.", + ".o1 JA H ll so.", + ".o5 H Eo.", + ".#23 Y xxx #.", + ".#||+||||||+||||||+|||#.", + ".#B!!Q|TE ydd|sE II#.", + ".#B!!!+ |y ho.", + ".o!!!S|Ih @@ b| @@ o.", + ".#t!!8|I @@s D|D @@ d#.", + ".#########oo###########.", + "............^..........." ], + "palettes": [ "standard_domestic_palette" ], "terrain": { - "+": "t_door_c", - "-": "t_wall", - ".": "t_grass", - "0": "t_floor", - ";": "t_door_locked", - "?": "t_floor", - "@": "t_floor", - "B": "t_floor", - "C": "t_floor", - "Y": "t_floor", - "R": "t_floor", - "O": "t_floor", - "P": "t_grass", - "S": "t_floor", - "c": "t_floor", - "d": "t_floor", - "f": "t_floor", - "h": "t_floor", - "k": "t_floor", - "n": "t_floor", - "o": "t_floor", - "r": "t_floor", - "v": "t_window_domestic", - "|": "t_wall" - }, - "furniture": { - "0": "f_fireplace", - "?": "f_sofa", - "@": "f_bed", - "Y": "f_rack_coat", - "R": "f_stool", - "B": "f_bathtub", - "C": "f_cupboard", - "K": "f_armchair", - "O": "f_oven", - "P": "f_mailbox", - "S": "f_sink", - "c": "f_counter", - "d": "f_dresser", - "f": "f_fridge", - "h": "f_chair", - "n": "f_table", - "o": "f_bookcase", - "r": "f_rack" + "%": [ "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_railing_h", + "_": "t_pavement", + "G": "t_concrete", + "K": "t_concrete", + "~": "t_concrete", + "j": "t_concrete", + "!": "t_linoleum_gray", + "8": "t_linoleum_gray", + "t": "t_linoleum_gray", + "9": "t_linoleum_gray", + "S": "t_linoleum_gray", + "Q": "t_linoleum_gray", + "[": "t_door_glass_c" }, - "toilets": { "t": { } }, - "items": { - "Y": { "item": "coat_rack", "chance": 30, "repeat": [ 1, 4 ] }, - "P": { "item": "mail", "chance": 30, "repeat": [ 2, 5 ] } - }, - "place_loot": [ - { "group": "bed", "x": [ 10, 11 ], "y": [ 20, 21 ], "chance": 90, "repeat": [ 1, 3 ] }, - { "group": "bed", "x": [ 18, 19 ], "y": [ 20, 21 ], "chance": 90, "repeat": [ 1, 3 ] }, - { "group": "bedroom", "x": [ 7, 21 ], "y": [ 18, 21 ], "chance": 80, "repeat": [ 1, 6 ] }, - { "group": "livingroom", "x": [ 8, 21 ], "y": [ 13, 16 ], "chance": 85, "repeat": [ 1, 5 ] }, - { "group": "guns_pistol_common", "x": [ 12, 12 ], "y": [ 21, 21 ], "chance": 5, "ammo": 90, "magazine": 100 }, - { "group": "dresser", "x": [ 21, 21 ], "y": [ 21, 21 ], "chance": 85, "repeat": [ 1, 4 ] }, - { "group": "dresser", "x": [ 12, 12 ], "y": [ 21, 21 ], "chance": 85, "repeat": [ 1, 3 ] }, - { "group": "kitchen", "x": [ 2, 6 ], "y": [ 13, 16 ], "chance": 70, "repeat": [ 1, 3 ] }, - { "group": "kitchen", "x": [ 2, 2 ], "y": [ 15, 15 ], "chance": 90, "repeat": [ 1, 2 ] }, - { "group": "fridge", "x": [ 2, 2 ], "y": [ 13, 13 ], "chance": 80, "repeat": [ 1, 4 ] }, - { "group": "dining", "x": [ 6, 7 ], "y": [ 4, 8 ], "chance": 80, "repeat": [ 1, 4 ] }, - { "group": "oven", "x": [ 2, 2 ], "y": [ 14, 14 ], "chance": 75, "repeat": [ 1, 3 ] }, - { "group": "softdrugs", "x": [ 2, 4 ], "y": [ 18, 21 ], "chance": 75, "repeat": [ 1, 3 ] }, - { "group": "cleaning", "x": [ 2, 4 ], "y": [ 18, 21 ], "chance": 90, "repeat": [ 1, 2 ] }, - { "group": "homebooks", "x": [ 15, 18 ], "y": [ 2, 2 ], "chance": 75, "repeat": [ 1, 3 ] }, - { "group": "novels", "x": [ 14, 14 ], "y": [ 2, 4 ], "chance": 90, "repeat": [ 1, 4 ] }, - { "group": "textbooks", "x": [ 14, 14 ], "y": [ 2, 4 ], "chance": 50, "repeat": [ 1, 2 ] }, - { "group": "novels", "x": [ 14, 14 ], "y": [ 8, 10 ], "chance": 90, "repeat": [ 1, 4 ] }, - { "group": "textbooks", "x": [ 14, 14 ], "y": [ 8, 10 ], "chance": 50, "repeat": [ 1, 2 ] }, - { "group": "homebooks", "x": [ 15, 17 ], "y": [ 10, 10 ], "chance": 75, "repeat": [ 1, 3 ] }, - { "group": "homebooks", "x": [ 18, 18 ], "y": [ 7, 7 ], "chance": 40, "repeat": [ 1, 2 ] }, - { "group": "alcohol", "x": [ 21, 21 ], "y": [ 5, 7 ], "chance": 75, "repeat": [ 1, 2 ] } - ], + "furniture": { "&": "f_region_flower" }, "place_monsters": [ { "monster": "GROUP_ZOMBIE", "x": [ 2, 21 ], "y": [ 2, 21 ], "chance": 2 } ] } } diff --git a/data/json/mapgen/house/house_modern_lx.json b/data/json/mapgen/house/house_modern_lx.json index 3c1a5e1943e74..1647255f21199 100644 --- a/data/json/mapgen/house/house_modern_lx.json +++ b/data/json/mapgen/house/house_modern_lx.json @@ -2,114 +2,100 @@ { "type": "mapgen", "method": "json", - "om_terrain": [ "house" ], + "om_terrain": [ "house_modern_1" ], "weight": 200, "object": { "fill_ter": "t_floor", "rows": [ - "...........#.....s.....#", - "...........#....Zs.....#", - "...........#.....s.....#", - "...........#.....s.....#", - "...........RRRVVR+RVVRRR", - "...........R???? ? 0R", - ".~~~~~~~~~~V ? n V", - ".~~~~~~~~~~V ? ? V", - ".~~~~~~~~~~V???? ???V", - ".~~~~~~~~~~R V", - ".~~ ~~Rr V", - ".RRRR[RRRRRR R", - ".Ro oRP hhhhhh R", - ".V ppp oR nnnnnn R", - ".V ppp R RRRRRRRRRRRR", - ".V R + R.", - ".R n Rr c V.", - ".RoK hK ????cRr c R.", - ".RRRRRRR++RRRRRRR V.", - ".R d@@ kkkPROffccR.", - ".R @@ h RRRRRRR.", - ".R + tS BR.", - ".RRRVVVVVVVVVVRRR BR.", - "................RRVRVRR." + "...........%....&-&....%", + "........:..%....p-&..:.%", + "..:........%.:..&-&....%", + ".......:...%....&-&....%", + "...:.......###$$#*#$$###", + ".....jjj...#HHHHL H a#", + ".~~~~~~~~~~$ H l $", + ".~~~~~~~~~~$ H $", + ".~~~~~~~~~~# H $", + ".~~~~~~~~~~#HHHH sHHH$", + ".~~______~^#M $", + ".####[###### #", + ".#R R#y AAAAAA #", + ".$ eee R# ffffff #", + ".$ eee # ############", + ".$ # + y#^", + ".# l #6 J y$.", + ".#RE hE sHHH#>#6 J 7#.", + ".#######++#######4 3$.", + ".#T d@@ bIIIy#1FO52#.", + ".#D @@ h #######.", + ".#E +!tS!B#.", + ".###$$$$$$$$$$###8!!!B#.", + "................##$#$##." ], + "palettes": [ "standard_domestic_palette" ], "terrain": { - "#": "t_shrub", - "+": "t_door_metal_c", - ".": "t_grass", - "Z": "t_grass", - "0": "t_floor", - "?": "t_floor", - "@": "t_floor", - "B": "t_floor", - "D": "t_floor", - "K": "t_floor", - "O": "t_floor", - "P": "t_floor", - "R": "t_rock", - "S": "t_floor", - "V": "t_wall_glass", - "[": "t_door_glass_c", - "c": "t_floor", - "d": "t_floor", - "f": "t_floor", - "h": "t_floor", - "k": "t_floor", - "n": "t_floor", - "o": "t_floor", - "p": "t_floor", - "r": "t_floor", - "s": "t_sidewalk", - "~": "t_water_sh" + "%": [ "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", + "j": "t_region_groundcover_urban", + "#": "t_rock_wall", + "_": "t_concrete", + "~": "t_water_pool_shallow_outdoors", + "!": "t_linoleum_gray", + "8": "t_linoleum_gray", + "t": "t_linoleum_gray", + "B": "t_linoleum_gray", + "S": "t_linoleum_gray", + "Q": "t_linoleum_gray", + "$": "t_wall_glass", + "[": "t_door_glass_c" }, - "furniture": { - "0": "f_fireplace", - "?": "f_sofa", - "@": "f_bed", - "Z": "f_mailbox", - "B": "f_bathtub", - "D": "f_trashcan", - "K": "f_armchair", - "O": "f_oven", - "P": "f_indoor_plant", - "S": "f_sink", - "c": "f_counter", - "d": "f_dresser", - "f": "f_fridge", - "h": "f_chair", - "k": "f_desk", - "n": "f_table", - "o": "f_bookcase", - "p": "f_pool_table", - "r": "f_rack" - }, - "toilets": { "t": { } }, - "items": { "Z": { "item": "mail", "chance": 30, "repeat": [ 2, 5 ] } }, + "furniture": { "&": "f_region_flower" }, "place_loot": [ - { "group": "bed", "x": [ 5, 6 ], "y": [ 19, 20 ], "chance": 90, "repeat": [ 1, 4 ] }, - { "group": "bedroom", "x": [ 6, 7 ], "y": [ 19, 20 ], "chance": 80, "repeat": [ 1, 5 ] }, - { "group": "livingroom", "x": [ 12, 15 ], "y": [ 5, 8 ], "chance": 85, "repeat": [ 1, 2 ] }, - { "group": "livingroom", "x": [ 12, 15 ], "y": [ 19, 21 ], "chance": 85, "repeat": [ 1, 2 ] }, - { "group": "livingroom", "x": [ 9, 15 ], "y": [ 15, 17 ], "chance": 90, "repeat": [ 1, 3 ] }, - { "group": "dresser", "x": [ 4, 4 ], "y": [ 19, 19 ], "chance": 85, "repeat": [ 1, 4 ] }, - { "group": "fridge", "x": [ 18, 19 ], "y": [ 19, 19 ], "chance": 90, "repeat": [ 1, 6 ] }, - { "group": "kitchen", "x": [ 20, 21 ], "y": [ 19, 19 ], "chance": 60, "repeat": [ 1, 2 ] }, - { "group": "kitchen", "x": [ 17, 17 ], "y": [ 16, 16 ], "chance": 65, "repeat": [ 1, 2 ] }, - { "group": "kitchen", "x": [ 20, 20 ], "y": [ 16, 17 ], "chance": 50, "repeat": [ 1, 2 ] }, - { "group": "produce", "x": [ 17, 17 ], "y": [ 17, 17 ], "chance": 65, "repeat": [ 1, 2 ] }, - { "group": "novels", "x": [ 2, 2 ], "y": [ 17, 17 ], "chance": 85, "repeat": [ 1, 3 ] }, { "group": "textbooks", "x": [ 2, 2 ], "y": [ 17, 17 ], "chance": 40, "repeat": [ 1, 2 ] }, { "group": "alcohol", "x": [ 2, 2 ], "y": [ 12, 12 ], "chance": 65, "repeat": [ 1, 2 ] }, { "group": "alcohol", "x": [ 8, 8 ], "y": [ 12, 13 ], "chance": 80, "repeat": [ 1, 3 ] }, - { "group": "pool_table", "x": [ 4, 6 ], "y": [ 13, 14 ], "chance": 90, "repeat": [ 1, 6 ] }, - { "group": "office", "x": [ 11, 15 ], "y": [ 19, 21 ], "chance": 80, "repeat": [ 1, 3 ] }, - { "group": "oven", "x": [ 17, 17 ], "y": [ 19, 19 ], "chance": 75, "repeat": [ 1, 3 ] }, - { "group": "cleaning", "x": [ 17, 21 ], "y": [ 21, 22 ], "chance": 95, "repeat": [ 1, 2 ] }, - { "group": "softdrugs", "x": [ 17, 21 ], "y": [ 21, 22 ], "chance": 75, "repeat": [ 1, 3 ] }, { "item": "katana", "x": [ 12, 12 ], "y": [ 10, 10 ], "chance": 2 }, { "item": "katana_inferior", "x": [ 12, 12 ], "y": [ 10, 10 ], "chance": 8 }, { "item": "spiral_stone", "x": [ 12, 12 ], "y": [ 10, 10 ], "chance": 25 } ], "place_monsters": [ { "monster": "GROUP_ZOMBIE", "x": [ 2, 21 ], "y": [ 2, 21 ], "chance": 2 } ] } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": "house_modern_1_roof", + "object": { + "fill_ter": "t_shingle_flat_roof", + "rows": [ + " ", + " ", + " ", + " ", + " |222222222223", + " |..........~3", + " |..oo...oo..3", + " |...........3", + " |...........3", + " |...........3", + " |...........3", + " |2222222225......X....3", + " |.....................3", + " |...oooo..............3", + " |...oooo.............53", + " |....................3 ", + " |....................3 ", + " |.................=..3 ", + " |....................3 ", + " |.................&..3 ", + " |....................3 ", + " |....................3 ", + " |--------------|.....3 ", + " |-----3 " + ], + "palettes": [ "roof_palette" ], + "terrain": { ".": "t_shingle_flat_roof" } + } } ] diff --git a/data/json/mapgen/house/house_patio.json b/data/json/mapgen/house/house_patio.json index 6063efbaf828b..c683c5c331cb1 100644 --- a/data/json/mapgen/house/house_patio.json +++ b/data/json/mapgen/house/house_patio.json @@ -1,165 +1,117 @@ [ - { - "id": "barbecue", - "type": "item_group", - "items": [ - [ "beer", 15 ], - [ "meat", 65 ], - [ "glazed_tenderloin", 55 ], - [ "fish", 10 ], - [ "fish_smoked", 5 ], - [ "meat_smoked", 60 ], - [ "sausage", 35 ], - [ "bratwurst_sausage", 30 ], - [ "hotdogs_frozen", 65 ], - [ "hotdogs_cooked", 65 ], - [ "chilidogs", 30 ], - [ "currywurst", 15 ], - [ "lettuce", 45 ], - [ "tomato", 45 ], - [ "onion", 30 ], - [ "chili_pepper", 30 ], - [ "corn", 20 ], - [ "irradiated_lettuce", 20 ], - [ "irradiated_tomato", 20 ], - [ "irradiated_onion", 5 ], - [ "irradiated_corn", 10 ], - [ "bacon", 20 ], - [ "potato_baked", 15 ], - [ "bread", 40 ], - [ "ketchup", 80 ], - [ "mustard", 75 ], - { "item": "pickle", "prob": 20, "charges": 6, "container-item": "jar_glass_sealed" }, - [ "pickle", 20 ], - [ "cheeseburger", 30 ], - [ "hamburger", 70 ], - [ "cheese", 45 ], - [ "ceramic_plate", 30 ], - [ "knife_steak", 45 ], - [ "tongs", 60 ] - ] - }, { "type": "mapgen", "method": "json", - "om_terrain": [ "house" ], - "weight": 300, + "om_terrain": [ "house_patio" ], + "weight": 200, "object": { "fill_ter": "t_floor", "rows": [ - ".sssssss...s............", - ".sssssssP--;v--vv--vv--.", - ".sssssss.|Y oo ????n|.", - ".sssssss.v v.", - ".sssssss.| -- nnn |.", - ".sssssss.| hnh D|.", - ".sssssss.v hnh v.", - ".sssssss.| c|.", - ".sssssss.| -----| c|.", - ".ssssssss; |U((t| Sv.", - ".sssssss.| +((BB|fOC|.", - ".........| |----|---|.", - ".........| + + d|.", - ".........v |o |---|.", - "......1..v |d @@|.", - ".........|-[----v---v-|.", - ".........##ss##########.", - "...........ss...........", - "..#......ssssssssssss...", - "...#.....sssHsHssssss...", - ".T.......sssNNNssssss...", - ".........sssHsHssssss...", - "........................", - "........................" - ], - "set": [ - { "point": "terrain", "id": "t_tree_young", "x": [ 13, 22 ], "y": [ 0, 0 ], "chance": 10 }, - { "point": "terrain", "id": "t_dirt", "x": [ 23, 23 ], "y": [ 0, 23 ], "repeat": [ 5, 10 ] }, - { "point": "terrain", "id": "t_dirt", "x": [ 0, 0 ], "y": [ 0, 23 ], "repeat": [ 5, 10 ] }, - { "point": "terrain", "id": "t_dirt", "x": [ 0, 23 ], "y": [ 22, 23 ], "repeat": [ 9, 17 ] }, - { "point": "furniture", "id": "f_dahlia", "x": [ 8, 8 ], "y": [ 1, 8 ], "repeat": [ 1, 2 ] } + "._______p&---...........", + "._______.##*o##oo##oo##.", + "._______^#y RRR HHHHs#.", + "._______.o o.", + "._______.# ### lll #.", + "._______.# hfh Y#.", + "._______.o hfh 4o.", + "._______.# 3#.", + "._______.# ||||||6 2#.", + "._______~* |St8Q|7 5o.", + "._______~#L +(((9|FO1#.", + "~~~~~~~~~#IA |||||||||#.", + ".:.....~%#I + yb|Dzd#.", + "..&&&..~%o$ |@ ||+|#.", + "..&X&.:~%o> |@sT I#.", + "..&&&..~%##[####o###o##.", + ".:.....~.%%~~%%%%%%%%%^.", + ".......~...~~...........", + ".......~.~~~~~~~~jjj~...", + ".......~.~~~G~G~~~K~~...", + ".......~~~~~KKK~~~~~~...", + ".........~~~G~G~~~~~~...", + ".............:.......:..", + ".........:.............." ], + "palettes": [ "standard_domestic_palette" ], "terrain": { - "#": "t_shrub", + "%": [ "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_railing_h", + "_": "t_pavement", + "G": "t_concrete", + "K": "t_concrete", + "~": "t_concrete", + "j": "t_concrete", "(": "t_linoleum_gray", - "+": "t_door_c", - "-": "t_wall", - ".": "t_grass", - "P": "t_grass", - "1": "t_tree_peach", - ";": "t_door_locked", - "?": "t_floor", - "@": "t_floor", - "Y": "t_floor", - "B": "t_linoleum_gray", - "C": "t_floor", - "D": "t_floor", - "H": "t_sidewalk", - "N": "t_sidewalk", - "O": "t_floor", - "S": "t_floor", - "T": "t_tree", - "U": "t_linoleum_gray", - "[": "t_door_glass_c", - "c": "t_floor", - "d": "t_floor", - "f": "t_floor", - "h": "t_floor", - "n": "t_floor", - "o": "t_floor", - "s": "t_sidewalk", + "8": "t_linoleum_gray", "t": "t_linoleum_gray", - "v": "t_window_domestic", - "|": "t_wall" - }, - "furniture": { - "?": "f_sofa", - "@": "f_bed", - "B": "f_bathtub", - "C": "f_cupboard", - "D": "f_trashcan", - "H": "f_chair", - "N": "f_table", - "P": "f_mailbox", - "Y": "f_rack_coat", - "O": "f_oven", - "S": "f_sink", - "U": "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": 30, "repeat": [ 1, 4 ] }, - "P": { "item": "mail", "chance": 30, "repeat": [ 2, 5 ] } + "9": "t_linoleum_gray", + "S": "t_linoleum_gray", + "Q": "t_linoleum_gray", + "[": "t_door_glass_c" }, + "furniture": { "&": "f_region_flower" }, + "set": [ { "point": "furniture", "id": "f_dahlia", "x": [ 8, 8 ], "y": [ 1, 8 ], "repeat": [ 1, 2 ] } ], "place_loot": [ - { "group": "bedroom", "x": [ 15, 17 ], "y": [ 12, 14 ], "chance": 80, "repeat": [ 1, 4 ] }, - { "group": "bed", "x": [ 20, 21 ], "y": [ 14, 14 ], "chance": 90, "repeat": [ 1, 2 ] }, - { "group": "shirts", "x": [ 21, 21 ], "y": [ 12, 12 ], "chance": 90, "repeat": [ 1, 2 ] }, - { "group": "dresser", "x": [ 14, 14 ], "y": [ 14, 14 ], "chance": 85, "repeat": [ 1, 4 ] }, - { "group": "homebooks", "x": [ 14, 15 ], "y": [ 2, 2 ], "chance": 65, "repeat": [ 1, 2 ] }, - { "group": "homebooks", "x": [ 14, 14 ], "y": [ 13, 13 ], "chance": 75, "repeat": [ 1, 2 ] }, - { "group": "fridge", "x": [ 19, 19 ], "y": [ 10, 10 ], "chance": 90, "repeat": [ 1, 5 ] }, - { "group": "oven", "x": [ 20, 20 ], "y": [ 10, 10 ], "chance": 75, "repeat": [ 1, 3 ] }, - { "group": "pasta", "x": [ 21, 21 ], "y": [ 10, 10 ], "chance": 50, "repeat": [ 1, 2 ] }, - { "group": "cannedfood", "x": [ 21, 21 ], "y": [ 10, 10 ], "chance": 75, "repeat": [ 1, 3 ] }, - { "group": "kitchen", "x": [ 21, 21 ], "y": [ 7, 8 ], "chance": 80, "repeat": [ 1, 2 ] }, - { "group": "trash", "x": [ 21, 21 ], "y": [ 5, 5 ], "chance": 75, "repeat": [ 1, 3 ] }, - { "group": "dining", "x": [ 14, 14 ], "y": [ 5, 6 ], "chance": 80, "repeat": [ 1, 3 ] }, - { "group": "livingroom", "x": [ 17, 21 ], "y": [ 2, 3 ], "chance": 90, "repeat": [ 1, 4 ] }, - { "group": "softdrugs", "x": [ 14, 17 ], "y": [ 9, 10 ], "chance": 75, "repeat": [ 1, 3 ] }, - { "group": "cleaning", "x": [ 14, 17 ], "y": [ 9, 10 ], "chance": 90, "repeat": [ 1, 2 ] }, { "group": "barbecue", "x": [ 12, 14 ], "y": [ 20, 20 ], "chance": 75, "repeat": [ 1, 4 ] }, { "item": "television", "x": [ 19, 19 ], "y": [ 4, 4 ], "chance": 75 }, { "item": "char_smoker", "x": [ 18, 18 ], "y": [ 19, 19 ], "chance": 85 }, { "item": "charcoal", "x": [ 18, 18 ], "y": [ 19, 19 ], "chance": 60, "repeat": [ 1, 3 ] } ], + "place_nested": [ + { + "chunks": [ + [ "null", 10 ], + [ "roof_6x6_garden_4", 15 ], + [ "roof_6x6_garden_1", 15 ], + [ "greenhouse_6x6_herbal", 20 ], + [ "greenhouse_6x6_vegetable", 25 ], + [ "pond_6x6", 20 ], + [ "shed_6x6_junk", 25 ], + [ "shed_6x6_woodworker", 20 ] + ], + "x": 1, + "y": 17 + } + ], "place_vehicles": [ { "vehicle": "suburban_home", "x": 5, "y": 4, "chance": 10, "rotation": 90 } ] } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": "house_patio_roof", + "object": { + "fill_ter": "t_shingle_flat_roof", + "rows": [ + " ", + " |2222222222223 ", + " 5............3 ", + " |............3 ", + " |............3 ", + " |............3 ", + " |............3 ", + " |............3 ", + " |............3 ", + " |............3 ", + " |............3 ", + " |............3 ", + " |............3 ", + " |............3 ", + " |............3 ", + " |------------5 ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " + ], + "palettes": [ "roof_palette" ], + "terrain": { ".": "t_shingle_flat_roof" } + } } ] diff --git a/data/json/mapgen/house/house_porch.json b/data/json/mapgen/house/house_porch.json index ca5e375269780..d47c7666b51da 100644 --- a/data/json/mapgen/house/house_porch.json +++ b/data/json/mapgen/house/house_porch.json @@ -2,135 +2,96 @@ { "type": "mapgen", "method": "json", - "om_terrain": [ "house" ], - "weight": 300, + "om_terrain": [ "house_porch" ], + "weight": 200, "object": { "fill_ter": "t_floor", "rows": [ - ".....#ss#......sssssss..", - "......ss.......sssssss..", - ".....#ss#......sssssss..", - "......ssp......sssssss..", - ".....#ssssssssssssssss..", - "..igigssgigi...sssssss..", - ".IAAAI IAAAI..sssssss..", - ".a a..sssssss..", - ".anbb bb a..sssssss..", - ".|-v--::--v-|..sssssss..", - ".|nnnn P D|..sssssss..", - ".| |..#######..", - ".|??nK 0--vv---vv-|.", - ".| Kc f|.", - ".|6 hNNNh Kc Ov.", - ".|c hNNNh - Sv.", - ".|c D DC|.", - ".--vv-- -------+---+--|.", - "......| |@@ d|t(U|d n|.", - "...1..| + |BB(+ @@|.", - "......+ | |---|o @@|.", - "......|n|oo +d|d+ n|.", - "......-v--vv-------vv--.", + ".....:--p......!!!!!!!..", + "......--.......!!!!!!!..", + ".....:--:......!!!!!!!..", + "......--:......!!!!!!!..", + ".....:---------!!!!!!!..", + ".%%%%%--%%%%%..!!!!!!!..", + ".$___$~~$___$..!!!!!!!..", + "._~~~~~~~~~~_..!!!!!!!..", + "._GKG~~~~jj~_..!!!!!!!..", + ".##o##**##o##..!!!!!!!..", + ".#ssxx y y#..!!!!!!!..", + ".# #^.%%%%%%%..", + ".# a##oo###oo##.", + ".#HHsE AJ347F#.", + ".#r hfh AJ Oo.", + ".#rA hfh 5o.", + ".#r Y 66Y 12#.", + ".##oo## |||||||+|||+||#.", + ".....^# |@@ d|t(S|d s#.", + "...:..+ + AI|8(9|b @@#.", + "......# | I|||||R @@#.", + "......#>|RR +D|D+ s#.", + "......#o##oo#######oo##.", "........................" ], - "set": [ - { "point": "terrain", "id": "t_dirt", "x": [ 23, 23 ], "y": [ 0, 11 ], "repeat": [ 2, 5 ] }, - { "point": "terrain", "id": "t_dirt", "x": [ 23, 23 ], "y": [ 0, 23 ], "repeat": [ 5, 10 ] }, - { "point": "terrain", "id": "t_dirt", "x": [ 0, 0 ], "y": [ 0, 23 ], "repeat": [ 5, 10 ] }, - { "point": "terrain", "id": "t_dirt", "x": [ 0, 23 ], "y": [ 23, 23 ], "repeat": [ 4, 8 ] } - ], + "palettes": [ "standard_domestic_palette" ], "terrain": { - "#": "t_shrub", - "(": "t_linoleum_gray", - "+": "t_door_c", - "-": "t_wall", - ".": "t_grass", - "p": "t_grass", - "0": "t_floor", - "1": "t_tree_pine", - "6": "t_console_broken", - ":": "t_door_locked_interior", - "?": "t_floor", - "@": "t_floor", - "A": "t_railing_h", - "B": "t_linoleum_gray", - "C": "t_floor", - "D": "t_floor", - "I": "t_column", - "K": "t_floor", - "N": "t_carpet_red", - "O": "t_floor", - "P": "t_floor", - "S": "t_floor", - "U": "t_linoleum_gray", - "a": "t_railing_v", - "b": "t_floor", - "c": "t_floor", - "d": "t_floor", - "f": "t_floor", - "g": "t_grass", - "h": "t_carpet_red", - "i": "t_grass", - "n": "t_floor", - "o": "t_floor", - "s": "t_sidewalk", + "~": "t_thconc_floor", + "j": "t_thconc_floor", + "G": "t_thconc_floor", + "K": "t_thconc_floor", + "!": "t_concrete", + ":": [ [ "t_region_tree_fruit", 2 ], [ "t_region_tree_nut", 2 ], "t_region_tree_shade" ], + "_": "t_railing", + "%": "t_region_groundcover_urban", + "9": "t_linoleum_gray", "t": "t_linoleum_gray", - "v": "t_window_domestic", - "|": "t_wall" - }, - "furniture": { - "0": "f_fireplace", - "?": "f_sofa", - "@": "f_bed", - "B": "f_bathtub", - "C": "f_cupboard", - "D": "f_trashcan", - "K": "f_armchair", - "N": "f_table", - "O": "f_oven", - "P": "f_indoor_plant", - "S": "f_sink", - "U": "f_sink", - "b": "f_bench", - "p": "f_mailbox", - "c": "f_counter", - "d": "f_dresser", - "f": "f_fridge", - "g": "f_bluebell", - "h": "f_chair", - "i": "f_dahlia", - "n": "f_table", - "o": "f_bookcase" + "S": "t_linoleum_gray", + "8": "t_linoleum_gray", + "(": "t_linoleum_gray", + "$": "t_column", + "f": "t_carpet_red", + "h": "t_carpet_red" }, - "toilets": { "t": { } }, - "items": { "p": { "item": "mail", "chance": 30, "repeat": [ 2, 5 ] } }, + "furniture": { "%": "f_region_flower" }, "place_loot": [ - { "group": "bedroom", "x": [ 18, 21 ], "y": [ 18, 21 ], "chance": 80, "repeat": [ 1, 4 ] }, - { "group": "bed", "x": [ 20, 21 ], "y": [ 19, 20 ], "chance": 90, "repeat": [ 1, 3 ] }, - { "group": "dresser", "x": [ 18, 18 ], "y": [ 18, 18 ], "chance": 85, "repeat": [ 1, 3 ] }, - { "group": "shirts", "x": [ 16, 16 ], "y": [ 21, 21 ], "chance": 90, "repeat": [ 1, 2 ] }, - { "group": "bedroom", "x": [ 9, 12 ], "y": [ 18, 21 ], "chance": 80, "repeat": [ 1, 4 ] }, - { "group": "bed", "x": [ 9, 10 ], "y": [ 18, 18 ], "chance": 90, "repeat": [ 1, 2 ] }, - { "group": "dresser", "x": [ 12, 12 ], "y": [ 18, 18 ], "chance": 85, "repeat": [ 1, 3 ] }, - { "group": "shirts", "x": [ 14, 14 ], "y": [ 21, 21 ], "chance": 90, "repeat": [ 1, 2 ] }, - { "group": "homebooks", "x": [ 18, 18 ], "y": [ 20, 20 ], "chance": 70, "repeat": [ 1, 2 ] }, - { "group": "homebooks", "x": [ 9, 10 ], "y": [ 21, 21 ], "chance": 70, "repeat": [ 1, 2 ] }, - { "group": "magazines", "x": [ 7, 7 ], "y": [ 21, 21 ], "chance": 80, "repeat": [ 1, 3 ] }, - { "group": "fridge", "x": [ 21, 21 ], "y": [ 13, 13 ], "chance": 90, "repeat": [ 1, 5 ] }, - { "group": "oven", "x": [ 21, 21 ], "y": [ 14, 14 ], "chance": 75, "repeat": [ 1, 3 ] }, - { "group": "pasta", "x": [ 21, 21 ], "y": [ 16, 16 ], "chance": 50, "repeat": [ 1, 2 ] }, - { "group": "cannedfood", "x": [ 21, 21 ], "y": [ 16, 16 ], "chance": 70, "repeat": [ 1, 3 ] }, - { "group": "kitchen", "x": [ 17, 21 ], "y": [ 13, 16 ], "chance": 80, "repeat": [ 1, 3 ] }, - { "group": "trash", "x": [ 20, 20 ], "y": [ 16, 16 ], "chance": 70, "repeat": [ 1, 3 ] }, - { "group": "dining", "x": [ 9, 11 ], "y": [ 14, 15 ], "chance": 75, "repeat": [ 1, 2 ] }, - { "group": "livingroom", "x": [ 2, 10 ], "y": [ 10, 12 ], "chance": 90, "repeat": [ 1, 4 ] }, - { "group": "trash", "x": [ 11, 11 ], "y": [ 10, 10 ], "chance": 60, "repeat": [ 1, 2 ] }, - { "group": "softdrugs", "x": [ 14, 16 ], "y": [ 18, 19 ], "chance": 75, "repeat": [ 1, 3 ] }, - { "group": "cleaning", "x": [ 14, 16 ], "y": [ 18, 19 ], "chance": 90, "repeat": [ 1, 2 ] }, - { "group": "office", "x": [ 2, 4 ], "y": [ 13, 16 ], "chance": 50, "repeat": [ 1, 3 ] }, - { "group": "trash", "x": [ 5, 5 ], "y": [ 16, 16 ], "chance": 70, "repeat": [ 1, 2 ] }, { "group": "alcohol", "x": [ 2, 2 ], "y": [ 8, 8 ], "chance": 15 }, { "item": "television", "x": [ 4, 4 ], "y": [ 10, 10 ], "chance": 75 } ] } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": "house_porch_roof", + "object": { + "fill_ter": "t_shingle_flat_roof", + "rows": [ + " ", + " ", + " ", + " ", + " ", + " ", + " ............ ", + " ............ ", + " ............ ", + " |22222222223 ", + " |..........3 ", + " |..........3 ", + " |.........~52222222223 ", + " |....................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_rv.json b/data/json/mapgen/house/house_rv.json index 8bfbc34ccf9bb..9c1e4fe18d53a 100644 --- a/data/json/mapgen/house/house_rv.json +++ b/data/json/mapgen/house/house_rv.json @@ -2,112 +2,86 @@ { "type": "mapgen", "method": "json", - "om_terrain": [ "house" ], + "om_terrain": [ "house_rv" ], "weight": 300, "object": { "fill_ter": "t_floor", "rows": [ - ".#ssssssss..###...s.....", - ".#ssssssssp----vv-;----.", - ".#ssssssss.|ooo ?|.", - ".#ssssssss.| n ?|.", - ".#ssssssss.| ?|.", - ".#ssssssss.|???? |.", - ".#ssssssss.| |.", - ".#ssssssss.| hhh v.", - "..sssssssss; nnn v.", - "..ssssssss.|Y nnn v.", - "..ssssssss.| hhh v.", - "..ssssssss.| |.", - ".|---------|+-----+---|.", - ".vSCfO | | t B|.", - ".v + | BBv.", - ".v ccc rrr| + S BB|.", - ".|---------| |--------|.", - ".|d | | rrrr |.", - ".|@@ | | |.", - ".|@@ + + rrrr |.", - ".| | | |.", - ".| | | cccc |.", - ".----vv-----v----------.", - "........................" - ], - "set": [ - { "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 ] } + ".%~~~~~~~~p.%%%..---....", + ".%~~~~~~~~.####oo#*####.", + ".%~~~~~~~~.#RRR L E#.", + ".%~~~~~~~~.# s#.", + ".%~~~~~~~~.# ll E#.", + ".%~~~~~~~~.#HHHH T#.", + ".%~~~~~~~~.# #.", + ".%~~~~~~~~.#L hhh o.", + "..~~~~~~~~~* fff o.", + "..~~~~~~~~.# hhh o.", + "..~~~~~~~~.# o.", + "..~~~~~~~~^# AAA y#.", + ".########### ||| JJJ||#.", + ".#BBy + |66 7Fo.", + ".o || || |Y 5o.", + ".#S88Yt|Q U| 43O21o.", + ".#|||||||||| ||+||||||#.", + ".#d b +D| |zz666666#.", + ".#@@ y||| |z z#.", + ".#@@ + + UUUUUU#.", + ".#s h|+| A #.", + ".# TEy II|>|gzqqqNNN#.", + ".####oo#####o##########.", + ".....................^.." ], + "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", - "C": "t_floor", - "D": "t_floor", - "O": "t_floor", - "Y": "t_floor", - "S": "t_floor", - "c": "t_floor", - "d": "t_floor", - "f": "t_floor", - "h": "t_floor", - "n": "t_floor", - "o": "t_floor", - "r": "t_floor", - "s": "t_sidewalk", - "v": "t_window_domestic", - "|": "t_wall" - }, - "furniture": { - "?": "f_sofa", - "@": "f_bed", - "B": "f_bathtub", - "C": "f_cupboard", - "p": "f_mailbox", - "Y": "f_rack_coat", - "D": "f_trashcan", - "O": "f_oven", - "S": "f_sink", - "c": "f_counter", - "d": "f_dresser", - "f": "f_fridge", - "h": "f_chair", - "n": "f_table", - "o": "f_bookcase", - "r": "f_rack" - }, - "toilets": { "t": { } }, - "items": { - "Y": { "item": "coat_rack", "chance": 30, "repeat": [ 1, 4 ] }, - "p": { "item": "mail", "chance": 30, "repeat": [ 2, 5 ] } + "%": [ "t_region_shrub", "t_region_shrub_fruit", "t_region_shrub_decorative" ], + "G": "t_concrete", + "K": "t_concrete", + "~": "t_concrete", + "j": "t_concrete" }, "place_loot": [ - { "group": "bed", "x": [ 2, 3 ], "y": [ 18, 19 ], "chance": 90, "repeat": [ 1, 3 ] }, - { "group": "livingroom", "x": [ 12, 21 ], "y": [ 2, 6 ], "chance": 90, "repeat": [ 1, 4 ] }, - { "group": "dining", "x": [ 16, 18 ], "y": [ 8, 9 ], "chance": 80, "repeat": [ 1, 4 ] }, - { "group": "bedroom", "x": [ 1, 10 ], "y": [ 17, 21 ], "chance": 80, "repeat": [ 1, 5 ] }, - { "group": "dresser", "x": [ 2, 2 ], "y": [ 17, 17 ], "chance": 85, "repeat": [ 1, 4 ] }, - { "group": "consumer_electronics", "x": [ 1, 10 ], "y": [ 17, 21 ], "chance": 20, "repeat": [ 1, 2 ] }, - { "group": "guns_pistol_common", "x": [ 2, 2 ], "y": [ 17, 17 ], "chance": 5, "ammo": 90, "magazine": 100 }, - { "group": "novels", "x": [ 12, 14 ], "y": [ 2, 2 ], "chance": 85, "repeat": [ 1, 3 ] }, - { "group": "cleaning", "x": [ 14, 21 ], "y": [ 13, 15 ], "chance": 90, "repeat": [ 1, 2 ] }, - { "group": "softdrugs", "x": [ 14, 21 ], "y": [ 13, 15 ], "chance": 75, "repeat": [ 1, 3 ] }, - { "group": "kitchen", "x": [ 2, 10 ], "y": [ 13, 15 ], "chance": 75, "repeat": [ 1, 3 ] }, - { "group": "fridge", "x": [ 4, 4 ], "y": [ 13, 13 ], "chance": 90, "repeat": [ 1, 5 ] }, - { "group": "oven", "x": [ 5, 5 ], "y": [ 13, 13 ], "chance": 75, "repeat": [ 1, 3 ] }, - { "group": "cannedfood", "x": [ 9, 10 ], "y": [ 15, 15 ], "chance": 40, "repeat": [ 1, 2 ] }, - { "group": "pasta", "x": [ 3, 5 ], "y": [ 15, 15 ], "chance": 40, "repeat": [ 1, 2 ] }, - { "group": "knifeblock", "x": [ 3, 5 ], "y": [ 15, 15 ], "chance": 70, "repeat": [ 1, 2 ] }, - { "group": "cannedfood", "x": [ 16, 19 ], "y": [ 17, 17 ], "chance": 60, "repeat": [ 1, 3 ] }, - { "group": "camping", "x": [ 16, 19 ], "y": [ 19, 19 ], "chance": 70, "repeat": [ 1, 4 ] }, - { "group": "softdrugs", "x": [ 16, 19 ], "y": [ 21, 21 ], "chance": 60, "repeat": [ 1, 3 ] } + { "group": "guns_pistol_common", "x": 2, "y": 17, "chance": 5, "ammo": 90, "magazine": 100 }, + { "group": "camping", "x": [ 16, 19 ], "y": 19, "chance": 70, "repeat": [ 1, 4 ] } ], "place_monsters": [ { "monster": "GROUP_ZOMBIE", "x": [ 2, 21 ], "y": [ 2, 21 ], "chance": 2 } ], - "place_vehicles": [ { "vehicle": "rv", "x": 5, "y": 4, "chance": 10, "rotation": 270 } ] + "place_vehicles": [ { "vehicle": "rv", "x": 5, "y": 4, "chance": 5, "rotation": 270 } ] + } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": "house_rv_roof", + "object": { + "fill_ter": "t_shingle_flat_roof", + "rows": [ + " ", + " |22222222223 ", + " |..........3 ", + " |..........3 ", + " |..........3 ", + " |..........3 ", + " |....&.....3 ", + " |..........3 ", + " |..........3 ", + " |..........3 ", + " |..........3 ", + " |..........3 ", + " |2222222225..........3 ", + " |....................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_palettes/house_general_palette.json b/data/json/mapgen_palettes/house_general_palette.json index 240430bb81f81..d5a63d9b5ef0b 100644 --- a/data/json/mapgen_palettes/house_general_palette.json +++ b/data/json/mapgen_palettes/house_general_palette.json @@ -88,8 +88,8 @@ "t_window_no_curtains_open", [ "t_curtains", 5 ] ], - "<": "t_stairs_up", - ">": "t_stairs_down" + "<": "t_wood_stairs_up", + ">": "t_wood_stairs_down" }, "liquids": { "g": { "liquid": "water_clean", "amount": [ 0, 100 ] } }, "items": { diff --git a/data/json/overmap/multitile_city_buildings.json b/data/json/overmap/multitile_city_buildings.json index 1ae188424d61b..aa33aebc5ea00 100644 --- a/data/json/overmap/multitile_city_buildings.json +++ b/data/json/overmap/multitile_city_buildings.json @@ -2746,5 +2746,55 @@ "id": "s_hunting", "locations": [ "land" ], "overmaps": [ { "point": [ 0, 0, 0 ], "overmap": "s_hunting_north" }, { "point": [ 0, 0, 1 ], "overmap": "s_hunting_roof_north" } ] + }, + { + "type": "city_building", + "id": "house_rv", + "locations": [ "land" ], + "overmaps": [ + { "point": [ 0, 0, 0 ], "overmap": "house_rv_north" }, + { "point": [ 0, 0, 1 ], "overmap": "house_rv_roof_north" }, + { "point": [ 0, 0, -1 ], "overmap": "basement" } + ] + }, + { + "type": "city_building", + "id": "house_porch", + "locations": [ "land" ], + "overmaps": [ + { "point": [ 0, 0, 0 ], "overmap": "house_porch_north" }, + { "point": [ 0, 0, 1 ], "overmap": "house_porch_roof_north" }, + { "point": [ 0, 0, -1 ], "overmap": "basement" } + ] + }, + { + "type": "city_building", + "id": "house_patio", + "locations": [ "land" ], + "overmaps": [ + { "point": [ 0, 0, 0 ], "overmap": "house_patio_north" }, + { "point": [ 0, 0, 1 ], "overmap": "house_patio_roof_north" }, + { "point": [ 0, 0, -1 ], "overmap": "basement" } + ] + }, + { + "type": "city_building", + "id": "house_modern_1", + "locations": [ "land" ], + "overmaps": [ + { "point": [ 0, 0, 0 ], "overmap": "house_modern_1_north" }, + { "point": [ 0, 0, 1 ], "overmap": "house_modern_1_roof_north" }, + { "point": [ 0, 0, -1 ], "overmap": "basement" } + ] + }, + { + "type": "city_building", + "id": "house_library", + "locations": [ "land" ], + "overmaps": [ + { "point": [ 0, 0, 0 ], "overmap": "house_library_north" }, + { "point": [ 0, 0, 1 ], "overmap": "house_04_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 fde129afae937..9f482a2bdb9d3 100644 --- a/data/json/overmap/overmap_terrain/overmap_terrain_residential.json +++ b/data/json/overmap/overmap_terrain/overmap_terrain_residential.json @@ -801,5 +801,82 @@ "color": "light_green", "see_cost": 2, "flags": [ "SIDEWALK", "GENERIC_LOOT" ] + }, + { + "type": "overmap_terrain", + "id": "house_rv", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2, + "flags": [ "SIDEWALK", "GENERIC_LOOT" ] + }, + { + "type": "overmap_terrain", + "id": "house_rv_roof", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2 + }, + { + "type": "overmap_terrain", + "id": "house_porch", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2, + "flags": [ "SIDEWALK", "GENERIC_LOOT" ] + }, + { + "type": "overmap_terrain", + "id": "house_porch_roof", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2 + }, + { + "type": "overmap_terrain", + "id": "house_patio", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2, + "flags": [ "SIDEWALK", "GENERIC_LOOT" ] + }, + { + "type": "overmap_terrain", + "id": "house_patio_roof", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2 + }, + { + "type": "overmap_terrain", + "id": "house_library", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2, + "flags": [ "SIDEWALK", "GENERIC_LOOT" ] + }, + { + "type": "overmap_terrain", + "id": "house_modern_1", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2, + "flags": [ "SIDEWALK", "GENERIC_LOOT" ] + }, + { + "type": "overmap_terrain", + "id": "house_modern_1_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 bdd3c57a1daf3..fdc35e55c8eca 100644 --- a/data/json/regional_map_settings.json +++ b/data/json/regional_map_settings.json @@ -537,7 +537,7 @@ "houses": { "house_w_1": 50, "house_two_story_basement": 1, - "house": 1000, + "house": 700, "house_prepper": 20, "house_base": 333, "duplex": 40, @@ -566,7 +566,12 @@ "house_toolshed": 50, "house_suicide": 20, "house_quiverfull": 30, - "house_inner_garden": 40, + "house_rv": 50, + "house_porch": 50, + "house_patio": 50, + "house_modern_1": 50, + "house_library": 50, + "house_inner_garden": 50, "emptyresidentiallot": 20, "apartments_con_new": 10, "apartments_mod_new": 10, From 8ad1db2d12c3597ce0c6f8f9e79d04ca0d942563 Mon Sep 17 00:00:00 2001 From: John Candlebury Date: Mon, 6 Jan 2020 09:05:59 -0600 Subject: [PATCH 04/36] Magiclysm: Holographic transposition spell (#36714) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Holographic transposition spell * Add spawn for the holographic transposition scroll * Remove outdated flag * Remove unused function parameter * Changes suggested by code review. * Update data/mods/Magiclysm/items/spell_scrolls.json Co-Authored-By: Jianxiang Wang (王健翔) * Fix misplaced coma in spell_scrolls.json * Apply suggestions from code review Co-Authored-By: LaVeyanFiend <51099123+LaVeyanFiend@users.noreply.github.com> Co-authored-by: Jianxiang Wang (王健翔) Co-authored-by: LaVeyanFiend <51099123+LaVeyanFiend@users.noreply.github.com> --- data/mods/Magiclysm/Spells/technomancer.json | 23 +++++++++++++++++++ .../mods/Magiclysm/itemgroups/spellbooks.json | 1 + data/mods/Magiclysm/items/spell_scrolls.json | 8 +++++++ data/mods/Magiclysm/items/spellbooks.json | 10 +++++++- src/magic.cpp | 20 ++++++++++++++++ src/magic.h | 4 ++++ src/magic_spell_effect.cpp | 12 ++++++++++ 7 files changed, 77 insertions(+), 1 deletion(-) diff --git a/data/mods/Magiclysm/Spells/technomancer.json b/data/mods/Magiclysm/Spells/technomancer.json index a8e4091c56657..97b76dcd82b02 100644 --- a/data/mods/Magiclysm/Spells/technomancer.json +++ b/data/mods/Magiclysm/Spells/technomancer.json @@ -321,6 +321,29 @@ "max_duration": 6000, "duration_increment": 200 }, + { + "id": "holographic_transposition", + "type": "SPELL", + "name": "Holographic Transposition", + "description": "Allows you to swap places with a previously existing holographic image of yourself. If the universe itself can't tell you apart, who could?", + "valid_targets": [ "hostile", "ally" ], + "targeted_monster_ids": [ "mon_mirror_image", "mon_hologram" ], + "flags": [ "NO_LEGS", "LOUD", "SOMATIC", "SWAP_POS" ], + "effect": "target_attack", + "spell_class": "TECHNOMANCER", + "energy_source": "MANA", + "difficulty": 3, + "max_level": 20, + "base_casting_time": 100, + "casting_time_increment": -1, + "final_casting_time": 80, + "base_energy_cost": 150, + "energy_increment": -2, + "final_energy_cost": 100, + "min_range": 20, + "max_range": 30, + "range_increment": 1 + }, { "type": "SPELL", "name": "X-ray Vision", diff --git a/data/mods/Magiclysm/itemgroups/spellbooks.json b/data/mods/Magiclysm/itemgroups/spellbooks.json index a31b1c587008c..fb5a696259608 100644 --- a/data/mods/Magiclysm/itemgroups/spellbooks.json +++ b/data/mods/Magiclysm/itemgroups/spellbooks.json @@ -91,6 +91,7 @@ [ "spell_scroll_storm_hammer", 35 ], [ "spell_scroll_animated_blade", 35 ], [ "spell_scroll_mirror_image", 15 ], + [ "spell_scroll_holographic_transposition", 15 ], [ "spell_scroll_dark_sight", 30 ] ] }, diff --git a/data/mods/Magiclysm/items/spell_scrolls.json b/data/mods/Magiclysm/items/spell_scrolls.json index 38435e02f4f75..db87110388fcd 100644 --- a/data/mods/Magiclysm/items/spell_scrolls.json +++ b/data/mods/Magiclysm/items/spell_scrolls.json @@ -34,6 +34,14 @@ "description": "A magical aura distorts light around your body, making it easier to dodge enemy attacks.", "use_action": { "type": "learn_spell", "spells": [ "obfuscated_body" ] } }, + { + "type": "GENERIC", + "copy-from": "spell_scroll", + "id": "spell_scroll_holographic_transposition", + "name": { "str": "Scroll of Holographic Transposition", "str_pl": "Scrolls of Holographic Transposition" }, + "description": "Allows you to swap places with a previously existing holographic image of yourself. If the universe itself can't tell you apart, who could?", + "use_action": { "type": "learn_spell", "spells": [ "holographic_transposition" ] } + }, { "type": "GENERIC", "copy-from": "spell_scroll", diff --git a/data/mods/Magiclysm/items/spellbooks.json b/data/mods/Magiclysm/items/spellbooks.json index dfd7d15439f14..7220c7c489f0d 100644 --- a/data/mods/Magiclysm/items/spellbooks.json +++ b/data/mods/Magiclysm/items/spellbooks.json @@ -151,7 +151,15 @@ "color": "light_gray", "use_action": { "type": "learn_spell", - "spells": [ "dark_sight", "blinding_flash", "obfuscated_body", "create_atomic_light", "mirror_image", "invisibility" ] + "spells": [ + "dark_sight", + "blinding_flash", + "obfuscated_body", + "create_atomic_light", + "mirror_image", + "invisibility", + "holographic_transposition" + ] } }, { diff --git a/src/magic.cpp b/src/magic.cpp index 0ad585519c369..c0fe5b02a1eec 100644 --- a/src/magic.cpp +++ b/src/magic.cpp @@ -97,6 +97,7 @@ std::string enum_to_string( spell_flag data ) case spell_flag::NO_HANDS: return "NO_HANDS"; case spell_flag::NO_LEGS: return "NO_LEGS"; case spell_flag::UNSAFE_TELEPORT: return "UNSAFE_TELEPORT"; + case spell_flag::SWAP_POS: return "SWAP_POS"; case spell_flag::CONCENTRATE: return "CONCENTRATE"; case spell_flag::RANDOM_AOE: return "RANDOM_AOE"; case spell_flag::RANDOM_DAMAGE: return "RANDOM_DAMAGE"; @@ -248,6 +249,10 @@ void spell_type::load( const JsonObject &jo, const std::string & ) const auto effect_targets_reader = enum_flags_reader { "effect_targets" }; optional( jo, was_loaded, "effect_filter", effect_targets, effect_targets_reader ); + const auto targeted_monster_ids_reader = auto_flags_reader {}; + optional( jo, was_loaded, "targeted_monster_ids", targeted_monster_ids, + targeted_monster_ids_reader ); + const auto trigger_reader = enum_flags_reader { "valid_targets" }; mandatory( jo, was_loaded, "valid_targets", valid_targets, trigger_reader ); @@ -895,6 +900,7 @@ bool spell::is_valid_target( const Creature &caster, const tripoint &p ) const valid = valid || ( cr_att == Creature::A_FRIENDLY && is_valid_target( target_ally ) && p != caster.pos() ); valid = valid || ( is_valid_target( target_self ) && p == caster.pos() ); + valid = valid && target_by_monster_id( p ); } else { valid = is_valid_target( target_ground ); } @@ -906,6 +912,20 @@ bool spell::is_valid_effect_target( valid_target t ) const return type->effect_targets[t]; } +bool spell::target_by_monster_id( const tripoint &p ) const +{ + if( type->targeted_monster_ids.empty() ) { + return true; + } + bool valid = false; + if( monster *const target = g->critter_at( p ) ) { + if( type->targeted_monster_ids.find( target->type->id ) != type->targeted_monster_ids.end() ) { + valid = true; + } + } + return valid; +} + std::string spell::description() const { return type->description.translated(); diff --git a/src/magic.h b/src/magic.h index 32dc8d1e86328..fa5a15ba0e127 100644 --- a/src/magic.h +++ b/src/magic.h @@ -35,6 +35,7 @@ template struct enum_traits; enum spell_flag { PERMANENT, // items or creatures spawned with this spell do not disappear and die as normal IGNORE_WALLS, // spell's aoe goes through walls + SWAP_POS, // a projectile spell swaps the positions of the caster and target HOSTILE_SUMMON, // summon spell always spawns a hostile monster HOSTILE_50, // summoned monster spawns friendly 50% of the time SILENT, // spell makes no noise at target @@ -245,6 +246,8 @@ class spell_type // list of valid targets enum enum_bitset valid_targets; + std::set targeted_monster_ids; + // lits of bodyparts this spell applies its effect to enum_bitset affected_bps; @@ -400,6 +403,7 @@ class spell bool is_valid_target( const Creature &caster, const tripoint &p ) const; bool is_valid_target( valid_target t ) const; bool is_valid_effect_target( valid_target t ) const; + bool target_by_monster_id( const tripoint &p ) const; // picks a random valid tripoint from @area cata::optional random_valid_target( const Creature &caster, diff --git a/src/magic_spell_effect.cpp b/src/magic_spell_effect.cpp index c6fac1357fcf4..f31dd3a640b85 100644 --- a/src/magic_spell_effect.cpp +++ b/src/magic_spell_effect.cpp @@ -112,6 +112,15 @@ void spell_effect::teleport_random( const spell &sp, Creature &caster, const tri teleport::teleport( caster, min_distance, max_distance, safe, false ); } +static void swap_pos( Creature &caster, const tripoint &target ) +{ + Creature *const critter = g->critter_at( target ); + critter->setpos( caster.pos() ); + caster.setpos( target ); + //update map in case a monster swapped positions with the player + g->update_map( g->u ); +} + void spell_effect::pain_split( const spell &sp, Creature &caster, const tripoint & ) { player *p = caster.as_player(); @@ -447,6 +456,9 @@ void spell_effect::target_attack( const spell &sp, Creature &caster, { damage_targets( sp, caster, spell_effect_area( sp, epicenter, spell_effect_blast, caster, sp.has_flag( spell_flag::IGNORE_WALLS ) ) ); + if( sp.has_flag( spell_flag::SWAP_POS ) ) { + swap_pos( caster, epicenter ); + } } void spell_effect::cone_attack( const spell &sp, Creature &caster, From 2d14566cd6cef08baf6be8f5d91ab6c8dd707731 Mon Sep 17 00:00:00 2001 From: Ker-Nes <37450179+Ker-Nes@users.noreply.github.com> Date: Mon, 6 Jan 2020 13:49:23 -0300 Subject: [PATCH 05/36] Adding Grape Seeds to the cooking oil recipe Grape seed oil: https://en.wikipedia.org/wiki/Grape_seed_oil --- data/json/recipes/recipe_food.json | 1 + 1 file changed, 1 insertion(+) diff --git a/data/json/recipes/recipe_food.json b/data/json/recipes/recipe_food.json index 09279e59ea1a3..79b92ed0149ab 100644 --- a/data/json/recipes/recipe_food.json +++ b/data/json/recipes/recipe_food.json @@ -304,6 +304,7 @@ [ "seed_pumpkin", 4 ], [ "seed_sunflower", 2 ], [ "seed_canola", 4 ], + [ "seed_grapes", 6 ], [ "seed_weed", 6 ] ] ] From 17ceebeba5765bebf217dc9e1407235e3dca2aa8 Mon Sep 17 00:00:00 2001 From: Inglonias <2125926+Inglonias@users.noreply.github.com> Date: Mon, 6 Jan 2020 12:06:42 -0500 Subject: [PATCH 06/36] Take down the Christmas decorations --- src/main_menu.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main_menu.cpp b/src/main_menu.cpp index 3b82ff511309f..52975a0ad5929 100644 --- a/src/main_menu.cpp +++ b/src/main_menu.cpp @@ -41,7 +41,7 @@ #define dbg(x) DebugLog((DebugLevel)(x),D_GAME) << __FILE__ << ":" << __LINE__ << ": " -static const holiday current_holiday = holiday::new_year; +static const holiday current_holiday = holiday::none; void main_menu::on_move() const { From ff81bf2872abf5cf585cc569c103df87b719e744 Mon Sep 17 00:00:00 2001 From: anothersimulacrum Date: Mon, 6 Jan 2020 09:51:37 -0800 Subject: [PATCH 07/36] Add documentation for repairs_like --- doc/JSON_INFO.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/JSON_INFO.md b/doc/JSON_INFO.md index 7aaa43f3ad598..cf639b95e5599 100644 --- a/doc/JSON_INFO.md +++ b/doc/JSON_INFO.md @@ -1209,6 +1209,7 @@ See also VEHICLE_JSON.md "name": { "str": "pair of leather socks", "str_pl": "pairs of leather socks" } // Name field, same rules as above. } ], "container" : "null", // What container (if any) this item should spawn within +"repairs_like": "scarf", // If this item does not have recipe, what item to look for a recipe for when repairing it. "color" : "blue", // Color of the item symbol. "symbol" : "[", // The item symbol as it appears on the map. Must be a Unicode string exactly 1 console cell width. "looks_like": "rag", // hint to tilesets if this item has no tile, use the looks_like tile From 764aa9f790a31f5cc820990fe712a27d61b93220 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jianxiang=20Wang=20=28=E7=8E=8B=E5=81=A5=E7=BF=94=29?= Date: Tue, 7 Jan 2020 03:02:08 +0800 Subject: [PATCH 08/36] Use libbacktrace to generate readable backtrace on Windows (#36615) * Use libbacktrace to generate backtrace * Move dbghelp symbol initialization to debug_write_backtrace * Use libbacktrace on cross-compilation to Windows * Download prebuilt libbacktrace before building * Use square brackets instead of angle brackets * Add license text of libbacktrace --- CMakeLists.txt | 4 + LICENSE.txt | 32 +++ Makefile | 20 +- .../libbacktrace-i686-w64-mingw32-sha256 | 1 + build-scripts/requirements.sh | 7 + src/CMakeLists.txt | 6 + src/crash.cpp | 220 ++---------------- src/debug.cpp | 204 +++++++++++++--- 8 files changed, 262 insertions(+), 232 deletions(-) create mode 100644 build-scripts/libbacktrace-i686-w64-mingw32-sha256 diff --git a/CMakeLists.txt b/CMakeLists.txt index e09dd28c2312d..941dad92f708f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,6 +15,7 @@ option(TILES "Build graphical tileset version." "OFF") option(CURSES "Build curses version." "ON") option(SOUND "Support for in-game sounds & music." "OFF") option(BACKTRACE "Support for printing stack backtraces on crash" "ON") +option(LIBBACKTRACE "Print backtrace with libbacktrace." "OFF") option(USE_HOME_DIR "Use user's home directory for save files." "ON") option(LOCALIZE "Support for language localizations. Also enable UTF support." "ON") option(LANGUAGES "Compile localization files for specified languages." "") @@ -323,6 +324,9 @@ ENDIF(SOUND) IF(BACKTRACE) ADD_DEFINITIONS(-DBACKTRACE) + IF(LIBBACKTRACE) + ADD_DEFINITIONS(-DLIBBACKTRACE) + ENDIF(LIBBACKTRACE) ENDIF(BACKTRACE) # Ok. Now create build and install recipes diff --git a/LICENSE.txt b/LICENSE.txt index 1f0b1564e7661..2f024ae9588eb 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -9,3 +9,35 @@ CATCH unit-test framework (tests/catch/catch.hpp) is licensed under the Boost So PLF List and PLF Colony (src/list.h, src/colony.h) are licensed under the zLib license (https://www.zlib.net/zlib_license.html). getpost (tools/json_tools/format/getpost.h) is licensed under the MIT license, see file for text of license. + +libbacktrace is licensed under a BSD license (https://github.com/ianlancetaylor/libbacktrace/blob/master/LICENSE). The full license text is as follows: + +# Copyright (C) 2012-2016 Free Software Foundation, Inc. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: + +# (1) Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. + +# (2) Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. + +# (3) The name of the author may not be used to +# endorse or promote products derived from this software without +# specific prior written permission. + +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, +# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. diff --git a/Makefile b/Makefile index a99c7e495562e..66cda1b6d6318 100644 --- a/Makefile +++ b/Makefile @@ -40,6 +40,8 @@ # make LOCALIZE=0 # Disable backtrace support, not available on all platforms # make BACKTRACE=0 +# Use libbacktrace. Only has effect if BACKTRACE=1. (currently only for MinGW builds) +# make LIBBACKTRACE=1 # Compile localization files for specified languages # make localization LANGUAGES="[ lang_id_2][ ...]" # (for example: make LANGUAGES="zh_CN zh_TW" for Chinese) @@ -171,6 +173,14 @@ ifndef BACKTRACE BACKTRACE = 1 endif endif +ifdef BACKTRACE + # Also enable libbacktrace on cross-compilation to Windows + ifndef LIBBACKTRACE + ifneq (,$(findstring mingw32,$(CROSS))) + LIBBACKTRACE = 1 + endif + endif +endif ifeq ($(RUNTESTS), 1) TESTS = tests @@ -185,7 +195,7 @@ W32ODIR = $(BUILD_PREFIX)objwin W32ODIRTILES = $(W32ODIR)/tiles ifdef AUTO_BUILD_PREFIX - BUILD_PREFIX = $(if $(RELEASE),release-)$(if $(DEBUG_SYMBOLS),symbol-)$(if $(TILES),tiles-)$(if $(SOUND),sound-)$(if $(LOCALIZE),local-)$(if $(BACKTRACE),back-)$(if $(SANITIZE),sanitize-)$(if $(MAPSIZE),map-$(MAPSIZE)-)$(if $(USE_XDG_DIR),xdg-)$(if $(USE_HOME_DIR),home-)$(if $(DYNAMIC_LINKING),dynamic-)$(if $(MSYS2),msys2-) + BUILD_PREFIX = $(if $(RELEASE),release-)$(if $(DEBUG_SYMBOLS),symbol-)$(if $(TILES),tiles-)$(if $(SOUND),sound-)$(if $(LOCALIZE),local-)$(if $(BACKTRACE),back-$(if $(LIBBACKTRACE),libbacktrace-))$(if $(SANITIZE),sanitize-)$(if $(MAPSIZE),map-$(MAPSIZE)-)$(if $(USE_XDG_DIR),xdg-)$(if $(USE_HOME_DIR),home-)$(if $(DYNAMIC_LINKING),dynamic-)$(if $(MSYS2),msys2-) export BUILD_PREFIX endif @@ -340,7 +350,7 @@ endif CXXFLAGS += $(WARNINGS) $(DEBUG) $(DEBUGSYMS) $(PROFILE) $(OTHERS) -MMD -MP TOOL_CXXFLAGS = -DCATA_IN_TOOL -BINDIST_EXTRAS += README.md data doc +BINDIST_EXTRAS += README.md data doc LICENSE.txt BINDIST = $(BUILD_PREFIX)cataclysmdda-$(VERSION).tar.gz W32BINDIST = $(BUILD_PREFIX)cataclysmdda-$(VERSION).zip BINDIST_CMD = tar --transform=s@^$(BINDIST_DIR)@cataclysmdda-$(VERSION)@ -czvf $(BINDIST) $(BINDIST_DIR) @@ -666,11 +676,17 @@ ifeq ($(TARGETSYSTEM),WINDOWS) LDFLAGS += -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lversion ifeq ($(BACKTRACE),1) LDFLAGS += -ldbghelp + ifeq ($(LIBBACKTRACE),1) + LDFLAGS += -lbacktrace + endif endif endif ifeq ($(BACKTRACE),1) DEFINES += -DBACKTRACE + ifeq ($(LIBBACKTRACE),1) + DEFINES += -DLIBBACKTRACE + endif endif ifeq ($(LOCALIZE),1) diff --git a/build-scripts/libbacktrace-i686-w64-mingw32-sha256 b/build-scripts/libbacktrace-i686-w64-mingw32-sha256 new file mode 100644 index 0000000000000..fd72cd8459578 --- /dev/null +++ b/build-scripts/libbacktrace-i686-w64-mingw32-sha256 @@ -0,0 +1 @@ +52811183c904305ddfa28d4b2236cc14da5293cd4d038d02b57d53dc18701502 *libbacktrace-i686-w64-mingw32.tar.gz diff --git a/build-scripts/requirements.sh b/build-scripts/requirements.sh index 5470c7761d499..0d24a13768029 100644 --- a/build-scripts/requirements.sh +++ b/build-scripts/requirements.sh @@ -53,6 +53,13 @@ if [ -n "${MXE_TARGET}" ]; then # Need to overwrite CXX to make the Makefile $CROSS logic work right. export CXX="$COMPILER" export CCACHE=1 + + curl -L -o libbacktrace-i686-w64-mingw32.tar.gz https://github.com/Qrox/libbacktrace/releases/download/2020-01-03/libbacktrace-i686-w64-mingw32.tar.gz + if ! shasum -a 256 -c ./build-scripts/libbacktrace-i686-w64-mingw32-sha256; then + echo "Checksum failed for libbacktrace-i686-w64-mingw32.tar.gz" + exit 1 + fi + sudo tar -xzf libbacktrace-i686-w64-mingw32.tar.gz --exclude=LICENSE -C ${MXE_DIR}/../${PLATFORM} fi if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9f738828d1ba8..e985457186654 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -123,6 +123,9 @@ IF(TILES) target_link_libraries(libcataclysm-tiles version.lib) IF (BACKTRACE) target_link_libraries(libcataclysm-tiles dbghelp.lib) + IF(LIBBACKTRACE) + target_link_libraries(libcataclysm-tiles backtrace) + ENDIF(LIBBACKTRACE) ENDIF(BACKTRACE) ENDIF(WIN32) @@ -185,6 +188,9 @@ IF(CURSES) target_link_libraries(libcataclysm version.lib) IF (BACKTRACE) target_link_libraries(libcataclysm dbghelp.lib) + IF(LIBBACKTRACE) + target_link_libraries(libcataclysm backtrace) + ENDIF(LIBBACKTRACE) ENDIF(BACKTRACE) ENDIF(WIN32) diff --git a/src/crash.cpp b/src/crash.cpp index 763ba2d2dc95c..4a8f21d0c032d 100644 --- a/src/crash.cpp +++ b/src/crash.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include @@ -21,85 +22,22 @@ # endif #endif -#include "get_version.h" -#include "path_info.h" - -[[noreturn]] static void crash_terminate_handler(); - #if defined(_WIN32) #if 1 // Hack to prevent reordering of #include "platform_win.h" by IWYU #include "platform_win.h" #endif - #include +#endif + +#include "debug.h" +#include "get_version.h" +#include "path_info.h" // signal handlers are expected to have C linkage, and only use the // common subset of C & C++ extern "C" { -#define BUF_SIZE 4096 - static char buf[BUF_SIZE]; - -#define MODULE_PATH_LEN 512 - static char mod_path[MODULE_PATH_LEN]; - - // on some systems the number of frames to capture have to be less than 63 according to the documentation -#define BT_CNT 62 -#define MAX_NAME_LEN 512 - // ( MAX_NAME_LEN - 1 ) because SYMBOL_INFO already contains a TCHAR -#define SYM_SIZE ( sizeof( SYMBOL_INFO ) + ( MAX_NAME_LEN - 1 ) * sizeof( TCHAR ) ) - static PVOID bt[BT_CNT]; - static struct { - alignas( SYMBOL_INFO ) char storage[SYM_SIZE]; - } sym_storage; - static SYMBOL_INFO *const sym = reinterpret_cast( &sym_storage ); - - // compose message ourselves to avoid potential dynamical allocation. - static void append_str( FILE *const file, char **const beg, const char *const end, - const char *from ) - { - fputs( from, stderr ); - if( file ) { - fputs( from, file ); - } - for( ; *from && *beg + 1 < end; ++from, ++*beg ) { - **beg = *from; - } - } - - static void append_ch( FILE *const file, char **const beg, const char *const end, const char ch ) - { - fputc( ch, stderr ); - if( file ) { - fputc( ch, file ); - } - if( *beg + 1 < end ) { - **beg = ch; - ++*beg; - } - } - - static void append_uint( FILE *const file, char **const beg, const char *const end, - const uintmax_t value ) - { - if( value != 0 ) { - int cnt = 0; - for( uintmax_t tmp = value; tmp; tmp >>= 4, ++cnt ) { - } - for( ; cnt; --cnt ) { - char ch = "0123456789ABCDEF"[( value >> ( cnt * 4 - 4 ) ) & 0xF]; - append_ch( file, beg, end, ch ); - } - } else { - append_ch( file, beg, end, '0' ); - } - } - - static void append_ptr( FILE *const file, char **const beg, const char *const end, void *const p ) - { - append_uint( file, beg, end, uintptr_t( p ) ); - } - +#if defined(_WIN32) static void dump_to( const char *file ) { HANDLE handle = CreateFile( file, GENERIC_WRITE, 0, nullptr, CREATE_ALWAYS, @@ -113,122 +51,7 @@ extern "C" { nullptr, nullptr, nullptr ); CloseHandle( handle ); } - - static void log_crash( const char *type, const char *msg ) - { - dump_to( ".core" ); - const char *crash_log_file = "config/crash.log"; - char *beg = buf, *end = buf + BUF_SIZE; - FILE *file = fopen( crash_log_file, "w" ); - append_str( file, &beg, end, "CRASH LOG FILE: " ); - append_str( file, &beg, end, crash_log_file ); - append_str( file, &beg, end, "\nVERSION: " ); - append_str( file, &beg, end, getVersionString() ); - append_str( file, &beg, end, "\nTYPE: " ); - append_str( file, &beg, end, type ); - append_str( file, &beg, end, "\nMESSAGE: " ); - append_str( file, &beg, end, msg ); - append_str( file, &beg, end, "\nSTACK TRACE:\n" ); - sym->SizeOfStruct = sizeof( SYMBOL_INFO ); - sym->MaxNameLen = MAX_NAME_LEN; - USHORT num_bt = CaptureStackBackTrace( 0, BT_CNT, bt, nullptr ); - HANDLE proc = GetCurrentProcess(); - for( USHORT i = 0; i < num_bt; ++i ) { - DWORD64 off; - append_str( file, &beg, end, " " ); - if( SymFromAddr( proc, reinterpret_cast( bt[i] ), &off, sym ) ) { - append_str( file, &beg, end, sym->Name ); - append_str( file, &beg, end, "+0x" ); - append_uint( file, &beg, end, off ); - } - append_str( file, &beg, end, "@0x" ); - append_ptr( file, &beg, end, bt[i] ); - DWORD64 mod_base = SymGetModuleBase64( proc, reinterpret_cast( bt[i] ) ); - if( mod_base ) { - append_ch( file, &beg, end, '[' ); - DWORD mod_len = GetModuleFileName( reinterpret_cast( mod_base ), mod_path, - MODULE_PATH_LEN ); - // mod_len == MODULE_NAME_LEN means insufficient buffer - if( mod_len > 0 && mod_len < MODULE_PATH_LEN ) { - const char *mod_name = mod_path + mod_len; - for( ; mod_name > mod_path && *( mod_name - 1 ) != '\\'; --mod_name ) { - } - append_str( file, &beg, end, mod_name ); - } else { - append_str( file, &beg, end, "0x" ); - append_uint( file, &beg, end, mod_base ); - } - append_str( file, &beg, end, "+0x" ); - append_uint( file, &beg, end, reinterpret_cast( bt[i] ) - mod_base ); - append_ch( file, &beg, end, ']' ); - } - append_ch( file, &beg, end, '\n' ); - } - *beg = '\0'; -#if defined(TILES) - if( SDL_ShowSimpleMessageBox( SDL_MESSAGEBOX_ERROR, "Error", buf, nullptr ) != 0 ) { - append_str( file, &beg, end, "Error creating SDL message box: " ); - append_str( file, &beg, end, SDL_GetError() ); - append_ch( file, &beg, end, '\n' ); - } #endif - if( file ) { - fclose( file ); - } - } - - static void signal_handler( int sig ) - { - // TODO: thread-safety? - // TODO: make string literals & static variables atomic? - signal( sig, SIG_DFL ); - // undefined behavior according to the standard - // but we can get nothing out of it without these - const char *msg; - switch( sig ) { - case SIGSEGV: - msg = "SIGSEGV: Segmentation fault"; - break; - case SIGILL: - msg = "SIGILL: Illegal instruction"; - break; - case SIGABRT: - msg = "SIGABRT: Abnormal termination"; - break; - case SIGFPE: - msg = "SIGFPE: Arithmetical error"; - break; - default: - return; - } - log_crash( "Signal", msg ); - // end of UB - std::signal( SIGABRT, SIG_DFL ); - abort(); - } - -} // extern "C" - -void init_crash_handlers() -{ - SymInitialize( GetCurrentProcess(), nullptr, TRUE ); - for( auto sig : { - SIGSEGV, SIGILL, SIGABRT, SIGFPE - } ) { - - std::signal( sig, signal_handler ); - } - std::set_terminate( crash_terminate_handler ); -} - -#else -// Non-Windows implementation - -#include - -#include "debug.h" - -extern "C" { static void log_crash( const char *type, const char *msg ) { @@ -236,6 +59,9 @@ extern "C" { // reasons, including the memory allocations and the SDL message box. // But it should usually work in practice, unless for example the // program segfaults inside malloc. +#if defined(_WIN32) + dump_to( ".core" ); +#endif const std::string crash_log_file = PATH_INFO::crash(); std::ostringstream log_text; log_text << "The program has crashed." @@ -290,22 +116,8 @@ extern "C" { #pragma GCC diagnostic pop abort(); } - } // extern "C" -void init_crash_handlers() -{ - for( auto sig : { - SIGSEGV, SIGILL, SIGABRT, SIGFPE - } ) { - - std::signal( sig, signal_handler ); - } - std::set_terminate( crash_terminate_handler ); -} - -#endif - [[noreturn]] static void crash_terminate_handler() { // TODO: thread-safety? @@ -321,6 +133,7 @@ void init_crash_handlers() } catch( const std::exception &e ) { type = typeid( e ).name(); msg = e.what(); + // call here to avoid `msg = e.what()` going out of scope log_crash( type, msg ); std::exit( EXIT_FAILURE ); } catch( ... ) { @@ -331,6 +144,17 @@ void init_crash_handlers() std::exit( EXIT_FAILURE ); } +void init_crash_handlers() +{ + for( auto sig : { + SIGSEGV, SIGILL, SIGABRT, SIGFPE + } ) { + + std::signal( sig, signal_handler ); + } + std::set_terminate( crash_terminate_handler ); +} + #else // !BACKTRACE void init_crash_handlers() diff --git a/src/debug.cpp b/src/debug.cpp index c898f192741c1..a0e1553289876 100644 --- a/src/debug.cpp +++ b/src/debug.cpp @@ -48,6 +48,9 @@ #if defined(BACKTRACE) # if defined(_WIN32) # include +# if defined(LIBBACKTRACE) +# include +# endif # else # include # include @@ -212,27 +215,6 @@ void limitDebugClass( int class_bitmask ) // Debug only {{{1 // --------------------------------------------------------------------- -#if defined(BACKTRACE) -#if defined(_WIN32) -constexpr int module_path_len = 512; -// on some systems the number of frames to capture have to be less than 63 according to the documentation -constexpr int bt_cnt = 62; -constexpr int max_name_len = 512; -// ( max_name_len - 1 ) because SYMBOL_INFO already contains a TCHAR -constexpr int sym_size = sizeof( SYMBOL_INFO ) + ( max_name_len - 1 ) * sizeof( TCHAR ); -static char mod_path[module_path_len]; -static PVOID bt[bt_cnt]; -static struct { - alignas( SYMBOL_INFO ) char storage[sym_size]; -} sym_storage; -static SYMBOL_INFO &sym = reinterpret_cast( sym_storage ); -#else -#define TRACE_SIZE 20 - -void *tracePtrs[TRACE_SIZE]; -#endif -#endif - // Debug Includes {{{2 // --------------------------------------------------------------------- @@ -578,25 +560,122 @@ static cata::optional debug_compute_load_offset( } #endif +#if defined(_WIN32) && defined(LIBBACKTRACE) +// wrap libbacktrace to use std::function instead of function pointers +using bt_error_callback = std::function; +using bt_full_callback = std::function; +using bt_syminfo_callback = std::function; + +static backtrace_state *bt_create_state( const char *const filename, const int threaded, + const bt_error_callback &cb ) +{ + return backtrace_create_state( filename, threaded, + []( void *const data, const char *const msg, const int errnum ) { + const bt_error_callback &cb = *reinterpret_cast( data ); + cb( msg, errnum ); + }, + const_cast( &cb ) ); +} + +static int bt_pcinfo( backtrace_state *const state, const uintptr_t pc, + const bt_full_callback &cb_full, const bt_error_callback &cb_error ) +{ + using cb_pair = std::pair; + cb_pair cb { cb_full, cb_error }; + return backtrace_pcinfo( state, pc, + // backtrace callback + []( void *const data, const uintptr_t pc, const char *const filename, + const int lineno, const char *const function ) -> int { + cb_pair &cb = *reinterpret_cast( data ); + return cb.first( pc, filename, lineno, function ); + }, + // error callback + []( void *const data, const char *const msg, const int errnum ) { + cb_pair &cb = *reinterpret_cast( data ); + cb.second( msg, errnum ); + }, + &cb ); +} + +static int bt_syminfo( backtrace_state *const state, const uintptr_t addr, + const bt_syminfo_callback &cb_syminfo, const bt_error_callback cb_error ) +{ + using cb_pair = std::pair; + cb_pair cb { cb_syminfo, cb_error }; + return backtrace_syminfo( state, addr, + // syminfo callback + []( void *const data, const uintptr_t pc, const char *const symname, + const uintptr_t symval, const uintptr_t symsize ) { + cb_pair &cb = *reinterpret_cast( data ); + cb.first( pc, symname, symval, symsize ); + }, + // error callback + []( void *const data, const char *const msg, const int errnum ) { + cb_pair &cb = *reinterpret_cast( data ); + cb.second( msg, errnum ); + }, + &cb ); +} +#endif + +#if defined(_WIN32) +class sym_init +{ + public: + sym_init() { + SymInitialize( GetCurrentProcess(), nullptr, TRUE ); + } + + ~sym_init() { + SymCleanup( GetCurrentProcess() ); + } +}; +static std::unique_ptr sym_init_; + +constexpr int module_path_len = 512; +// on some systems the number of frames to capture have to be less than 63 according to the documentation +constexpr int bt_cnt = 62; +constexpr int max_name_len = 512; +// ( max_name_len - 1 ) because SYMBOL_INFO already contains a TCHAR +constexpr int sym_size = sizeof( SYMBOL_INFO ) + ( max_name_len - 1 ) * sizeof( TCHAR ); +static char mod_path[module_path_len]; +static PVOID bt[bt_cnt]; +static struct { + alignas( SYMBOL_INFO ) char storage[sym_size]; +} sym_storage; +static SYMBOL_INFO &sym = reinterpret_cast( sym_storage ); +#if defined(LIBBACKTRACE) +static std::map bt_states; +#endif +#else +constexpr int bt_cnt = 20; +static void *bt[bt_cnt]; +#endif + void debug_write_backtrace( std::ostream &out ) { #if defined(_WIN32) + if( !sym_init_ ) { + sym_init_ = std::make_unique(); + } sym.SizeOfStruct = sizeof( SYMBOL_INFO ); sym.MaxNameLen = max_name_len; - USHORT num_bt = CaptureStackBackTrace( 0, bt_cnt, bt, nullptr ); - HANDLE proc = GetCurrentProcess(); + // libbacktrace's own backtrace capturing doesn't seem to work on Windows + const USHORT num_bt = CaptureStackBackTrace( 0, bt_cnt, bt, nullptr ); + const HANDLE proc = GetCurrentProcess(); for( USHORT i = 0; i < num_bt; ++i ) { DWORD64 off; - out << "\n ("; + out << "\n #" << i; + out << "\n (dbghelp: "; if( SymFromAddr( proc, reinterpret_cast( bt[i] ), &off, &sym ) ) { out << sym.Name << "+0x" << std::hex << off << std::dec; } out << "@" << bt[i]; - DWORD64 mod_base = SymGetModuleBase64( proc, reinterpret_cast( bt[i] ) ); + const DWORD64 mod_base = SymGetModuleBase64( proc, reinterpret_cast( bt[i] ) ); if( mod_base ) { out << "["; - DWORD mod_len = GetModuleFileName( reinterpret_cast( mod_base ), mod_path, - module_path_len ); + const DWORD mod_len = GetModuleFileName( reinterpret_cast( mod_base ), mod_path, + module_path_len ); // mod_len == module_path_len means insufficient buffer if( mod_len > 0 && mod_len < module_path_len ) { const char *mod_name = mod_path + mod_len; @@ -610,6 +689,67 @@ void debug_write_backtrace( std::ostream &out ) std::dec << "]"; } out << "), "; +#if defined(LIBBACKTRACE) + backtrace_state *bt_state = nullptr; + if( mod_base ) { + const auto it = bt_states.find( mod_base ); + if( it != bt_states.end() ) { + bt_state = it->second; + } else { + const DWORD mod_len = GetModuleFileName( reinterpret_cast( mod_base ), mod_path, + module_path_len ); + if( mod_len > 0 && mod_len < module_path_len ) { + bt_state = bt_create_state( mod_path, 0, + // error callback + [&out]( const char *const msg, const int errnum ) { + out << "\n (backtrace_create_state failed: errno = " << errnum + << ", msg = " << ( msg ? msg : "[no msg]" ) << "),"; + } ); + } else { + out << "\n (executable path exceeds " << module_path_len << " chars),"; + } + if( bt_state ) { + bt_states.emplace( mod_base, bt_state ); + } + } + } else { + out << "\n (unable to get module base address),"; + } + if( bt_state ) { + bt_syminfo( bt_state, reinterpret_cast( bt[i] ), + // syminfo callback + [&out]( const uintptr_t pc, const char *const symname, + const uintptr_t symval, const uintptr_t ) { + out << "\n (libbacktrace: " << ( symname ? symname : "[unknown symbol]" ) + << "+0x" << std::hex << pc - symval << std::dec + << "@0x" << std::hex << pc << std::dec + << "),"; + }, + // error callback + [&out]( const char *const msg, const int errnum ) { + out << "\n (backtrace_syminfo failed: errno = " << errnum + << ", msg = " << ( msg ? msg : "[no msg]" ) + << "),"; + } ); + bt_pcinfo( bt_state, reinterpret_cast( bt[i] ), + // backtrace callback + [&out]( const uintptr_t pc, const char *const filename, + const int lineno, const char *const function ) -> int { + out << "\n (libbacktrace: 0x" << std::hex << pc << std::dec + << " " << ( filename ? filename : "[unknown src]" ) + << ":" << lineno + << " " << ( function ? function : "[unknown func]" ) + << "),"; + return 0; + }, + // error callback + [&out]( const char *const msg, const int errnum ) { + out << "\n (backtrace_pcinfo failed: errno = " << errnum + << ", msg = " << ( msg ? msg : "[no msg]" ) + << "),"; + } ); + } +#endif } out << "\n"; #else @@ -617,8 +757,8 @@ void debug_write_backtrace( std::ostream &out ) // BACKTRACE is not supported under CYGWIN! ( void ) out; # else - int count = backtrace( tracePtrs, TRACE_SIZE ); - char **funcNames = backtrace_symbols( tracePtrs, count ); + int count = backtrace( bt, bt_cnt ); + char **funcNames = backtrace_symbols( bt, count ); for( int i = 0; i < count; ++i ) { out << "\n " << funcNames[i]; } @@ -684,7 +824,7 @@ void debug_write_backtrace( std::ostream &out ) // From that we need to extract the binary name, the symbol // name, and the offset within the symbol. We don't need to // extract the address (the last thing) because that's already - // available in tracePtrs. + // available in bt. auto funcName = funcNames[i]; assert( funcName ); // To appease static analysis @@ -719,7 +859,7 @@ void debug_write_backtrace( std::ostream &out ) cata::optional offset = debug_compute_load_offset( binary_name, symbol_name, offset_within_symbol, - tracePtrs[i], out ); + bt[i], out ); if( offset ) { load_offsets.emplace( binary_name, *offset ); } @@ -739,7 +879,7 @@ void debug_write_backtrace( std::ostream &out ) } last_binary_name = binary_name; - addresses.push_back( reinterpret_cast( tracePtrs[i] ) ); + addresses.push_back( reinterpret_cast( bt[i] ) ); } if( !addresses.empty() ) { From d6dbad046eac91a563434c5190812c43b0958724 Mon Sep 17 00:00:00 2001 From: John Bytheway Date: Sun, 5 Jan 2020 17:51:06 -0500 Subject: [PATCH 09/36] Handle basecamp component selection cancellation Various basecamp actions require components and tools to be consumed. When there are choices to be made amongst these, the player is presented with the choice between the various options in the usual way. However, if the player cancels, the action proceeded regardless. This allowed the player to circumvent the consumption of the requirements. Fix this by separating the selection of the components from the consumption. Now the order of events is: - Select components and tools. - Select NPC. - Send NPC on mission. - Consume components and tools. We needed to perform the split because we need to select both the requirements and the NPC before performing alterations to either. Implemented by introducing a new class basecamp_action_components to store this selection state. --- src/basecamp.cpp | 111 +++++++++++++++++++++++++++++-------------- src/basecamp.h | 28 +++++++++-- src/faction_camp.cpp | 23 +++++++-- 3 files changed, 119 insertions(+), 43 deletions(-) diff --git a/src/basecamp.cpp b/src/basecamp.cpp index 1921c4126683b..1cddbd75f418b 100644 --- a/src/basecamp.cpp +++ b/src/basecamp.cpp @@ -9,6 +9,7 @@ #include "avatar.h" #include "clzones.h" +#include "coordinate_conversions.h" #include "output.h" #include "string_formatter.h" #include "translations.h" @@ -579,41 +580,6 @@ std::list basecamp::use_charges( const itype_id &fake_id, int &quantity ) return ret; } -void basecamp::consume_components( map &target_map, const recipe &making, int batch_size ) -{ - const tripoint &origin = target_map.getlocal( get_dumping_spot() ); - const auto &req = making.requirements(); - for( const auto &it : req.get_components() ) { - g->u.consume_items( target_map, g->u.select_item_component( it, batch_size, _inv, - true, is_crafting_component, !by_radio ), batch_size, - is_crafting_component, origin, range ); - } - // this may consume pseudo-resources from fake items - for( const auto &it : req.get_tools() ) { - g->u.consume_tools( target_map, g->u.select_tool_component( it, batch_size, _inv, - DEFAULT_HOTKEYS, true, !by_radio ), batch_size, origin, range, this ); - } - // go back and consume the actual resources - for( basecamp_resource &bcp_r : resources ) { - if( bcp_r.consumed > 0 ) { - target_map.use_charges( origin, range, bcp_r.ammo_id, bcp_r.consumed ); - bcp_r.consumed = 0; - } - } -} - -void basecamp::consume_components( const recipe &making, int batch_size ) -{ - if( by_radio ) { - tinymap target_map; - target_map.load( tripoint( omt_pos.x * 2, omt_pos.y * 2, omt_pos.z ), false ); - consume_components( target_map, making, batch_size ); - target_map.save(); - } else { - consume_components( g->m, making, batch_size ); - } -} - void basecamp::form_crafting_inventory( map &target_map ) { _inv.clear(); @@ -643,7 +609,7 @@ void basecamp::form_crafting_inventory( map &target_map ) } // find available fuel - for( const tripoint &pt : target_map.points_in_radius( origin, range ) ) { + for( const tripoint &pt : target_map.points_in_radius( origin, inv_range ) ) { if( target_map.accessible_items( pt ) ) { for( const item &i : target_map.i_at( pt ) ) { for( basecamp_fuel &bcp_f : fuels ) { @@ -712,3 +678,76 @@ void basecamp::load_data( const std::string &data ) // add space to name replace( name.begin(), name.end(), '_', ' ' ); } + +basecamp_action_components::basecamp_action_components( + const recipe &making, int batch_size, basecamp &base ) : + making_( making ), + batch_size_( batch_size ), + base_( base ) +{ +} + +bool basecamp_action_components::choose_components() +{ + const auto filter = is_crafting_component; + const requirement_data &req = making_.requirements(); + if( !item_selections_.empty() || !tool_selections_.empty() ) { + debugmsg( "Reused basecamp_action_components" ); + return false; + } + for( const auto &it : req.get_components() ) { + comp_selection is = + g->u.select_item_component( it, batch_size_, base_._inv, true, filter, + !base_.by_radio ); + if( is.use_from == cancel ) { + return false; + } + item_selections_.push_back( is ); + } + // this may consume pseudo-resources from fake items + for( const auto &it : req.get_tools() ) { + comp_selection ts = + g->u.select_tool_component( it, batch_size_, base_._inv, DEFAULT_HOTKEYS, true, + !base_.by_radio ); + if( ts.use_from == cancel ) { + return false; + } + tool_selections_.push_back( ts ); + } + return true; +} + +void basecamp_action_components::consume_components() +{ + map *target_map = &g->m; + if( base_.by_radio ) { + map_ = std::make_unique(); + map_->load( omt_to_sm_copy( base_.camp_omt_pos() ), false ); + target_map = map_.get(); + } + const tripoint &origin = target_map->getlocal( base_.get_dumping_spot() ); + const auto &req = making_.requirements(); + if( item_selections_.size() != req.get_components().size() || + tool_selections_.size() != req.get_tools().size() ) { + debugmsg( "Not all selections have been made for basecamp_action_components" ); + } + for( const comp_selection &sel : item_selections_ ) { + g->u.consume_items( *target_map, sel, batch_size_, is_crafting_component, origin, + base_.inv_range ); + } + // this may consume pseudo-resources from fake items + for( const comp_selection &sel : tool_selections_ ) { + g->u.consume_tools( *target_map, sel, batch_size_, origin, base_.inv_range, &base_ ); + } + // go back and consume the actual resources + for( basecamp_resource &bcp_r : base_.resources ) { + if( bcp_r.consumed > 0 ) { + target_map->use_charges( origin, base_.inv_range, bcp_r.ammo_id, bcp_r.consumed ); + bcp_r.consumed = 0; + } + } + if( map_ ) { + map_->save(); + map_.reset(); + } +} diff --git a/src/basecamp.h b/src/basecamp.h index d8dd4aefbc431..572170343fd84 100644 --- a/src/basecamp.h +++ b/src/basecamp.h @@ -24,8 +24,10 @@ class time_duration; enum class farm_ops; class item; class map; -class recipe; class mission_data; +class recipe; +class requirements_data; +class tinymap; struct expansion_data { std::string type; @@ -192,8 +194,6 @@ class basecamp void form_crafting_inventory(); void form_crafting_inventory( map &target_map ); std::list use_charges( const itype_id &fake_id, int &quantity ); - void consume_components( const recipe &making, int batch_size = false ); - void consume_components( map &target_map, const recipe &making, int batch_size ); std::string get_gatherlist() const; /** * spawn items or corpses based on search attempts @@ -322,7 +322,11 @@ class basecamp void serialize( JsonOut &json ) const; void deserialize( JsonIn &jsin ); void load_data( const std::string &data ); + + static constexpr int inv_range = 20; private: + friend class basecamp_action_components; + // lazy re-evaluation of available camp resources void reset_camp_resources(); void add_resource( const itype_id &camp_resource ); @@ -339,9 +343,25 @@ class basecamp std::set fuel_types; std::vector fuels; std::vector resources; - static const int range = 20; inventory _inv; bool by_radio; }; +class basecamp_action_components +{ + public: + basecamp_action_components( const recipe &making, int batch_size, basecamp & ); + + // Returns true iff all necessary components were successfully chosen + bool choose_components(); + void consume_components(); + private: + const recipe &making_; + int batch_size_; + basecamp &base_; + std::vector> item_selections_; + std::vector> tool_selections_; + std::unique_ptr map_; // Used for by-radio crafting +}; + #endif diff --git a/src/faction_camp.cpp b/src/faction_camp.cpp index f991eb5a8de6b..5b61a1982ddc8 100644 --- a/src/faction_camp.cpp +++ b/src/faction_camp.cpp @@ -1536,6 +1536,11 @@ void basecamp::start_upgrade( const std::string &bldg, const point &dir, if( making.requirements().can_make_with_inventory( _inv, making.get_component_filter(), 1 ) ) { bool must_feed = bldg != "faction_base_camp_1"; + basecamp_action_components components( making, 1, *this ); + if( !components.choose_components() ) { + return; + } + time_duration work_days = base_camps::to_workdays( making.batch_duration() ); npc_ptr comp = nullptr; if( making.required_skills.empty() ) { @@ -1554,7 +1559,7 @@ void basecamp::start_upgrade( const std::string &bldg, const point &dir, if( comp == nullptr ) { return; } - consume_components( making, 1 ); + components.consume_components(); update_in_progress( bldg, dir ); } else { popup( _( "You don't have the materials for the upgrade." ) ); @@ -1945,11 +1950,17 @@ void basecamp::start_fortifications( std::string &bldg_exp ) return; } + const int batch_size = fortify_om.size() * 2 - 2; + basecamp_action_components components( making, batch_size, *this ); + if( !components.choose_components() ) { + return; + } + npc_ptr comp = start_mission( "_faction_camp_om_fortifications", total_time, true, _( "begins constructing fortifications…" ), false, {}, making.required_skills ); if( comp != nullptr ) { - consume_components( making, fortify_om.size() * 2 - 2 ); + components.consume_components(); comp->companion_mission_role_id = bldg_exp; for( auto pt : fortify_om ) { comp->companion_mission_points.push_back( pt ); @@ -2019,12 +2030,18 @@ void basecamp::start_crafting( const std::string &cur_id, const point &cur_dir, popup( _( "Your batch is too large!" ) ); return; } + + basecamp_action_components components( making, batch_size, *this ); + if( !components.choose_components() ) { + return; + } + time_duration work_days = base_camps::to_workdays( making.batch_duration( batch_size ) ); npc_ptr comp = start_mission( miss_id + cur_dir_id, work_days, true, _( "begins to work…" ), false, {}, making.required_skills ); if( comp != nullptr ) { - consume_components( making, batch_size ); + components.consume_components(); for( const item &results : making.create_results( batch_size ) ) { comp->companion_mission_inv.add_item( results ); } From 64dedd5cad1c00ed7d9ffb1731dbcbf363229108 Mon Sep 17 00:00:00 2001 From: John Bytheway Date: Mon, 6 Jan 2020 22:00:38 -0500 Subject: [PATCH 10/36] Test and fix inventory caching bug --- src/visitable.cpp | 4 ++++ tests/visitable_remove.cpp | 13 +++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/visitable.cpp b/src/visitable.cpp index 343d4b3641bff..607c2589c9dc9 100644 --- a/src/visitable.cpp +++ b/src/visitable.cpp @@ -581,6 +581,10 @@ std::list visitable::remove_items_with( const ++stack; } } + + // Invalidate binning cache + inv->binned = false; + return res; } diff --git a/tests/visitable_remove.cpp b/tests/visitable_remove.cpp index 78833a83b89de..a12f5aba9c730 100644 --- a/tests/visitable_remove.cpp +++ b/tests/visitable_remove.cpp @@ -487,3 +487,16 @@ TEST_CASE( "visitable_remove", "[visitable]" ) } } } + +TEST_CASE( "inventory_remove_invalidates_binning_cache", "[visitable][inventory]" ) +{ + inventory inv; + std::list items = { item( "bone" ) }; + inv += items; + CHECK( inv.charges_of( "bone" ) == 1 ); + inv.remove_items_with( return_true ); + CHECK( inv.size() == 0 ); + // The following used to be a heap use-after-free due to a caching bug. + // Now should be safe. + CHECK( inv.charges_of( "bone" ) == 0 ); +} From b225c73015777d2980f1e7bfd0eb3e47a7d80216 Mon Sep 17 00:00:00 2001 From: Kevin Granade Date: Tue, 7 Jan 2020 05:19:04 +0000 Subject: [PATCH 11/36] Overhaul anthill generation to avoid conflicting with other map features. --- src/overmap.cpp | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/overmap.cpp b/src/overmap.cpp index 81f1d9308895b..34268bb425814 100644 --- a/src/overmap.cpp +++ b/src/overmap.cpp @@ -1534,13 +1534,10 @@ bool overmap::generate_sub( const int z ) } else if( oter_above == "cave_rat" && z == -2 ) { ter_set( p, oter_id( "cave_rat" ) ); } else if( oter_above == "anthill" || oter_above == "acid_anthill" ) { - mongroup_id ant_group( oter_above == "anthill" ? "GROUP_ANT" : "GROUP_ANT_ACID" ); - int size = rng( MIN_ANT_SIZE, MAX_ANT_SIZE ); + const int size = rng( MIN_ANT_SIZE, MAX_ANT_SIZE ); ant_points.push_back( city( p.xy(), size ) ); - add_mon_group( mongroup( ant_group, tripoint( i * 2, j * 2, z ), - ( size * 3 ) / 2, rng( 6000, 8000 ) ) ); } else if( oter_above == "slimepit_down" ) { - int size = rng( MIN_GOO_SIZE, MAX_GOO_SIZE ); + const int size = rng( MIN_GOO_SIZE, MAX_GOO_SIZE ); goo_points.push_back( city( p.xy(), size ) ); } else if( oter_above == "forest_water" ) { ter_set( p, oter_id( "cavern" ) ); @@ -1586,10 +1583,6 @@ bool overmap::generate_sub( const int z ) const string_id sewer_tunnel( "sewer_tunnel" ); connect_closest_points( sewer_points, z, *sewer_tunnel ); - for( auto &i : ant_points ) { - build_anthill( tripoint( i.pos, z ), i.size ); - } - // A third of overmaps have labs with a 1-in-2 chance of being subway connected. // If the central lab exists, all labs which go down to z=4 will have a subway to central. int lab_train_odds = 0; @@ -1735,6 +1728,17 @@ bool overmap::generate_sub( const int z ) ter_set( tripoint( i, z ), oter_id( "mine_shaft" ) ); requires_sub = true; } + for( auto &i : ant_points ) { + if( ter( { i.pos, z } ) != "empty_rock" ) { + continue; + } + mongroup_id ant_group( ter( i.pos + tripoint_above ) == "anthill" ? + "GROUP_ANT" : "GROUP_ANT_ACID" ); + add_mon_group( mongroup( ant_group, tripoint( i.pos.x * 2, i.pos.y * 2, z ), + ( i.size * 3 ) / 2, rng( 6000, 8000 ) ) ); + build_anthill( tripoint( i.pos, z ), i.size ); + } + return requires_sub; } @@ -3177,7 +3181,7 @@ void overmap::build_anthill( const tripoint &p, int s ) } } if( queenpoints.empty() ) { - debugmsg( "No queenpoints when building anthill" ); + debugmsg( "No queenpoints when building anthill, anthill over %s", ter( p ).id().str() ); } const tripoint target = random_entry( queenpoints ); ter_set( target, oter_id( "ants_queen" ) ); From 9493b393e2674dcceb3e8ea4319bac0c68218346 Mon Sep 17 00:00:00 2001 From: Valiant Date: Tue, 7 Jan 2020 10:37:25 +0400 Subject: [PATCH 12/36] Moved corpses.json from items dir to items/corpses Also fixed weight and volume of children corpses --- data/json/items/{ => corpses}/corpses.json | 32 ++++++++++++---------- 1 file changed, 18 insertions(+), 14 deletions(-) rename data/json/items/{ => corpses}/corpses.json (92%) diff --git a/data/json/items/corpses.json b/data/json/items/corpses/corpses.json similarity index 92% rename from data/json/items/corpses.json rename to data/json/items/corpses/corpses.json index fe7f6a936aa4e..0e8ffc54b559e 100644 --- a/data/json/items/corpses.json +++ b/data/json/items/corpses/corpses.json @@ -54,8 +54,8 @@ "name": "corpse", "description": "A dead body of a young woman.", "looks_like": "corpse", - "volume": "40000 ml", - "weight": "52000 g", + "volume": "40 L", + "weight": "52 kg", "material": "hflesh" }, { @@ -65,6 +65,8 @@ "name": "corpse", "description": "A dead body of a little boy.", "looks_like": "corpse", + "volume": "30 L", + "weight": "30 kg", "material": "hflesh" }, { @@ -74,6 +76,8 @@ "name": "corpse", "description": "A dead body of a little girl.", "looks_like": "corpse", + "volume": "30 L", + "weight": "30 kg", "material": "hflesh" }, { @@ -83,8 +87,8 @@ "name": "corpse", "description": "The dead body of a small child. Their corpse bears a calm facial expression, as if they died instantly.", "looks_like": "corpse", - "volume": "30000 ml", - "weight": "40750 g", + "volume": "30 L", + "weight": "30 kg", "material": "hflesh" }, { @@ -94,8 +98,8 @@ "name": "corpse", "description": "The dead body of a child, riddled by bullets to the extent that you can no longer tell their gender.", "looks_like": "corpse", - "volume": "30000 ml", - "weight": "40750 g", + "volume": "30 L", + "weight": "30 kg", "material": "hflesh" }, { @@ -106,8 +110,8 @@ "description": "A dead body of an old woman. Both of her earlobes are torn, several fingers on her hands have been chopped off, and several teeth have been knocked out.", "//": "Implied that someone hacked off her body parts for jewelry.", "looks_like": "corpse", - "volume": "40000 ml", - "weight": "52000 g", + "volume": "40 L", + "weight": "52 kg", "material": "hflesh" }, { @@ -153,8 +157,8 @@ "name": "corpse", "description": "The dead body of a person. Their forehead bears a large bullet entrance wound. An even larger exit wound is present on the back of their head.", "looks_like": "corpse", - "volume": "40000 ml", - "weight": "52000 g", + "volume": "40 L", + "weight": "52 kg", "material": "hflesh" }, { @@ -164,8 +168,8 @@ "name": "corpse", "description": "The upper half of a dead body, as if torn apart with enormous force. Some organs are hanging out.", "looks_like": "corpse", - "volume": "30000 ml", - "weight": "40000 g", + "volume": "30 L", + "weight": "40 kg", "material": "hflesh" }, { @@ -175,8 +179,8 @@ "name": "corpse", "description": "A half-decapitated dead body. It is unclear what could have caused such a wound.", "looks_like": "corpse", - "volume": "57000 ml", - "weight": "78000 g", + "volume": "57 L", + "weight": "78 kg", "material": "hflesh" } ] From 88009f49051d70b2d66ee1b02c55302b092f969d Mon Sep 17 00:00:00 2001 From: davidpwbrown <39344466+davidpwbrown@users.noreply.github.com> Date: Tue, 7 Jan 2020 07:12:45 +0000 Subject: [PATCH 13/36] Abandon camp NPC talk and bulletin board mission (#36697) --- data/json/npcs/TALK_FACTION_CAMP.json | 6 ++++++ src/basecamp.h | 1 + src/faction_camp.cpp | 26 ++++++++++++++++++++++++++ src/npctalk.cpp | 1 + src/npctalk.h | 1 + src/npctalk_funcs.cpp | 9 +++++++++ src/overmapbuffer.cpp | 4 ++-- src/overmapbuffer.h | 2 +- 8 files changed, 47 insertions(+), 3 deletions(-) diff --git a/data/json/npcs/TALK_FACTION_CAMP.json b/data/json/npcs/TALK_FACTION_CAMP.json index ca3fca864c806..9513984d1bc5c 100644 --- a/data/json/npcs/TALK_FACTION_CAMP.json +++ b/data/json/npcs/TALK_FACTION_CAMP.json @@ -20,6 +20,12 @@ "switch": true, "default": true }, + { + "text": "We need to abandon this camp.", + "condition": { "npc_at_om_location": "FACTION_CAMP_ANY" }, + "topic": "TALK_DONE", + "effect": "abandon_camp" + }, { "text": "Show me what needs to be done at the camp.", "topic": "TALK_DONE", diff --git a/src/basecamp.h b/src/basecamp.h index 572170343fd84..0a182560b6534 100644 --- a/src/basecamp.h +++ b/src/basecamp.h @@ -146,6 +146,7 @@ class basecamp //change name of camp void set_name( const std::string &new_name ); void query_new_name(); + void abandon_camp(); void add_expansion( const std::string &terrain, const tripoint &new_pos ); void add_expansion( const std::string &bldg, const tripoint &new_pos, const point &dir ); diff --git a/src/faction_camp.cpp b/src/faction_camp.cpp index 5b61a1982ddc8..6b646f4a569cc 100644 --- a/src/faction_camp.cpp +++ b/src/faction_camp.cpp @@ -1266,6 +1266,8 @@ void basecamp::get_available_missions( mission_data &mission_key ) "\n\nRisk: None\n" "Time: Ongoing" ) ); mission_key.add( "Assign Jobs", _( "Assign Jobs" ), entry ); + entry = _( "Notes:\nAbandon this camp" ); + mission_key.add( "Abandon Camp", _( "Abandon Camp" ), entry ); } // Missions assigned to the central tile that could be done by an expansion get_available_missions_by_dir( mission_key, base_camps::base_dir ); @@ -1319,6 +1321,9 @@ bool basecamp::handle_mission( const std::string &miss_id, cata::optional if( miss_id == "Assign Jobs" ) { job_assignment_ui(); } + if( miss_id == "Abandon Camp" ) { + abandon_camp(); + } if( miss_id == "Expand Base" ) { start_mission( "_faction_camp_expansion", 3_hours, true, @@ -1566,6 +1571,27 @@ void basecamp::start_upgrade( const std::string &bldg, const point &dir, } } +void basecamp::abandon_camp() +{ + validate_assignees(); + npc_ptr random_guy; + for( npc_ptr &guy : overmap_buffer.get_companion_mission_npcs( 10 ) ) { + npc_companion_mission c_mission = guy->get_companion_mission(); + if( c_mission.role_id != base_camps::id ) { + continue; + } + random_guy = guy; + const std::string return_msg = _( "responds to the emergency recall…" ); + finish_return( *guy, false, return_msg, "menial", 0, true ); + } + for( npc_ptr &guy : get_npcs_assigned() ) { + talk_function::stop_guard( *guy ); + } + overmap_buffer.remove_camp( *this ); + g->m.remove_submap_camp( random_guy->pos() ); + add_msg( m_info, _( "You abandon %s." ), name ); +} + void basecamp::job_assignment_ui() { int term_x = TERMY > FULL_SCREEN_HEIGHT ? ( TERMY - FULL_SCREEN_HEIGHT ) / 2 : 0; diff --git a/src/npctalk.cpp b/src/npctalk.cpp index b0fa2e0c49064..ac411410b7521 100644 --- a/src/npctalk.cpp +++ b/src/npctalk.cpp @@ -2571,6 +2571,7 @@ void talk_effect_t::parse_string_effect( const std::string &effect_id, const Jso WRAP( do_farming ), WRAP( assign_guard ), WRAP( assign_camp ), + WRAP( abandon_camp ), WRAP( stop_guard ), WRAP( start_camp ), WRAP( buy_cow ), diff --git a/src/npctalk.h b/src/npctalk.h index 0debe5e30486d..79da5d35ac5e0 100644 --- a/src/npctalk.h +++ b/src/npctalk.h @@ -51,6 +51,7 @@ void goto_location( npc & ); void assign_base( npc & ); void assign_guard( npc & ); void assign_camp( npc & ); +void abandon_camp( npc & ); void stop_guard( npc & ); void end_conversation( npc & ); void insult_combat( npc & ); diff --git a/src/npctalk_funcs.cpp b/src/npctalk_funcs.cpp index b9f3bed282182..256c59fd343fc 100644 --- a/src/npctalk_funcs.cpp +++ b/src/npctalk_funcs.cpp @@ -346,6 +346,15 @@ void talk_function::assign_guard( npc &p ) p.set_omt_destination(); } +void talk_function::abandon_camp( npc &p ) +{ + cata::optional bcp = overmap_buffer.find_camp( p.global_omt_location().xy() ); + if( bcp ) { + basecamp *temp_camp = *bcp; + temp_camp->abandon_camp(); + } +} + void talk_function::assign_camp( npc &p ) { cata::optional bcp = overmap_buffer.find_camp( p.global_omt_location().xy() ); diff --git a/src/overmapbuffer.cpp b/src/overmapbuffer.cpp index bccaff5c8395b..8200154ca4e6c 100644 --- a/src/overmapbuffer.cpp +++ b/src/overmapbuffer.cpp @@ -1089,11 +1089,11 @@ std::vector overmapbuffer::get_overmaps_near( const point &p, const i return get_overmaps_near( tripoint( p, 0 ), radius ); } -std::vector> overmapbuffer::get_companion_mission_npcs() +std::vector> overmapbuffer::get_companion_mission_npcs( int range ) { std::vector> available; // TODO: this is an arbitrary radius, replace with something sane. - for( const auto &guy : get_npcs_near_player( 100 ) ) { + for( const auto &guy : get_npcs_near_player( range ) ) { if( guy->has_companion_mission() ) { available.push_back( guy ); } diff --git a/src/overmapbuffer.h b/src/overmapbuffer.h index 7f8a84d07b84a..274796fe0b57f 100644 --- a/src/overmapbuffer.h +++ b/src/overmapbuffer.h @@ -233,7 +233,7 @@ class overmapbuffer * Get all (currently loaded!) npcs that have a companion * mission set. */ - std::vector> get_companion_mission_npcs(); + std::vector> get_companion_mission_npcs( int range = 100 ); /** * Uses overmap terrain coordinates, this also means radius is * in overmap terrain. From 0ee7ca48b0a90ee7d226a9af6f0364f3a71e9409 Mon Sep 17 00:00:00 2001 From: Kevin Granade Date: Tue, 7 Jan 2020 07:16:39 +0000 Subject: [PATCH 14/36] Correct sandbag recipe for charges --- data/json/recipes/recipe_others.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/json/recipes/recipe_others.json b/data/json/recipes/recipe_others.json index 91e0761bc3377..0ab7fd5efe5c0 100644 --- a/data/json/recipes/recipe_others.json +++ b/data/json/recipes/recipe_others.json @@ -4399,7 +4399,7 @@ "time": "2 m", "autolearn": true, "qualities": [ { "id": "DIG", "level": 3 } ], - "components": [ [ [ "bag_canvas", 1 ] ], [ [ "material_sand", 60 ] ] ] + "components": [ [ [ "bag_canvas", 1 ] ], [ [ "material_sand", 3200 ] ] ] }, { "type": "recipe", From bd22b048625dfc3d6b50bd38db847e8627f96a3d Mon Sep 17 00:00:00 2001 From: Jerimee Richir Date: Tue, 7 Jan 2020 04:06:41 -0500 Subject: [PATCH 15/36] reweight gemstones in item_groups.json (#36734) --- data/json/itemgroups/item_groups.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/data/json/itemgroups/item_groups.json b/data/json/itemgroups/item_groups.json index c0f4be4ef32d8..bb839f90f96c2 100644 --- a/data/json/itemgroups/item_groups.json +++ b/data/json/itemgroups/item_groups.json @@ -491,7 +491,7 @@ { "type": "item_group", "id": "fridge", - "//": "This is a terrible item group and should be phased out. See SUS_fridge for a more modern take on things.", + "//": "This is a terrible item group and should be phased out. See SUS_fridge in SUS - > domestic.json for a more modern take on things.", "items": [ [ "water_clean", 90 ], [ "water_mineral", 10 ], @@ -3102,7 +3102,7 @@ "type": "item_group", "items": [ [ "citrine", 50 ], - [ "diamond", 50 ], + [ "diamond", 100 ], [ "emerald", 50 ], [ "peridot", 50 ], [ "amethyst", 50 ], @@ -3111,7 +3111,7 @@ [ "blue_topaz", 50 ], [ "tourmaline", 50 ], [ "alexandrite", 50 ], - [ "pearl", 50 ], + [ "pearl", 100 ], [ "opal", 50 ], [ "ruby", 50 ], [ "garnet", 50 ] From 91c47b0f16d7536c86efcf8fe7a605563c63462c Mon Sep 17 00:00:00 2001 From: Maleclypse <54345792+Maleclypse@users.noreply.github.com> Date: Tue, 7 Jan 2020 10:03:08 -0500 Subject: [PATCH 16/36] AFS prefix removed (#36763) --- data/mods/Aftershock/items/{afs_armor.json => armor.json} | 0 data/mods/Aftershock/items/{afs_bioparts.json => bioparts.json} | 0 data/mods/Aftershock/items/{afs_books.json => books.json} | 0 data/mods/Aftershock/items/{afs_cbms.json => cbms.json} | 0 .../Aftershock/items/{afs_comestibles.json => comestibles.json} | 0 data/mods/Aftershock/items/{afs_furniture.json => furniture.json} | 0 .../items/{afs_inactiverobot.json => inactiverobot.json} | 0 .../Aftershock/items/{afs_item_groups.json => item_groups.json} | 0 .../items/{afs_item_overrides.json => item_overrides.json} | 0 data/mods/Aftershock/items/{afs__items.json => items.json} | 0 data/mods/Aftershock/items/{afs_materials.json => materials.json} | 0 .../Aftershock/items/{afs_tool_quality.json => tool_quality.json} | 0 data/mods/Aftershock/items/{afs_tools.json => tools.json} | 0 data/mods/Aftershock/items/{afs_weapons.json => weapons.json} | 0 data/mods/Aftershock/maps/{afs_furniture.json => furniture.json} | 0 .../Aftershock/maps/{afs_item_groups.json => item_groups.json} | 0 .../maps/{afs_lab_vehicle_track.json => lab_vehicle_track.json} | 0 .../maps/{afs_lab_weapons_range.json => lab_weapons_range.json} | 0 .../maps/{afs_overmap_specials.json => overmap_specials.json} | 0 .../maps/{afs_overmap_terrain.json => overmap_terrain.json} | 0 ...{afs_regional_map_settings.json => regional_map_settings.json} | 0 data/mods/Aftershock/maps/{afs_terrain.json => terrain.json} | 0 .../mobs/{afs_PrepPhyle_mobs.json => PrepPhyle_mobs.json} | 0 data/mods/Aftershock/mobs/{afs_harvest.json => harvest.json} | 0 .../mobs/{afs_monster_faction.json => monster_faction.json} | 0 .../mobs/{afs_monster_groups.json => monster_groups.json} | 0 data/mods/Aftershock/mobs/{afs_robots.json => robots.json} | 0 data/mods/Aftershock/mobs/{afs_zombies.json => zombies.json} | 0 .../Aftershock/mutations/{afs_mutations.json => mutations.json} | 0 data/mods/Aftershock/npcs/{afs_classes.json => classes.json} | 0 data/mods/Aftershock/npcs/{afs_factions.json => factions.json} | 0 data/mods/Aftershock/npcs/{afs_npc.json => npc.json} | 0 .../npcs/{afs_prepnet_dialogue.json => prepnet_dialogue.json} | 0 data/mods/Aftershock/player/{afs_bionics.json => bionics.json} | 0 .../mods/Aftershock/player/{afs_mutations.json => mutations.json} | 0 .../Aftershock/player/{afs_professions.json => professions.json} | 0 .../Aftershock/player/{afs_techniques.json => techniques.json} | 0 .../recipes/{afs_armor_recipes.json => armor_recipes.json} | 0 .../recipes/{afs_bionic_recipes.json => bionic_recipes.json} | 0 .../{afs_comestible_recipes.json => comestible_recipes.json} | 0 .../recipes/{afs_construction.json => construction.json} | 0 .../recipes/{afs_deconstruction.json => deconstruction.json} | 0 .../recipes/{afs_recipe_overrides.json => recipe_overrides.json} | 0 data/mods/Aftershock/recipes/{afs__recipes.json => recipes.json} | 0 .../recipes/{afs_requirements.json => requirements.json} | 0 data/mods/Aftershock/recipes/{afs_uncraft.json => uncraft.json} | 0 data/mods/Aftershock/{afs_speech.json => speech.json} | 0 .../Aftershock/vehicles/{afs_part_items.json => part_items.json} | 0 .../vehicles/{afs_vehicle_groups.json => vehicle_groups.json} | 0 .../{afs_vehicle_overrides.json => vehicle_overrides.json} | 0 .../vehicles/{afs_vehicle_parts.json => vehicle_parts.json} | 0 .../mods/Aftershock/vehicles/{afs_vehicles.json => vehicles.json} | 0 52 files changed, 0 insertions(+), 0 deletions(-) rename data/mods/Aftershock/items/{afs_armor.json => armor.json} (100%) rename data/mods/Aftershock/items/{afs_bioparts.json => bioparts.json} (100%) rename data/mods/Aftershock/items/{afs_books.json => books.json} (100%) rename data/mods/Aftershock/items/{afs_cbms.json => cbms.json} (100%) rename data/mods/Aftershock/items/{afs_comestibles.json => comestibles.json} (100%) rename data/mods/Aftershock/items/{afs_furniture.json => furniture.json} (100%) rename data/mods/Aftershock/items/{afs_inactiverobot.json => inactiverobot.json} (100%) rename data/mods/Aftershock/items/{afs_item_groups.json => item_groups.json} (100%) rename data/mods/Aftershock/items/{afs_item_overrides.json => item_overrides.json} (100%) rename data/mods/Aftershock/items/{afs__items.json => items.json} (100%) rename data/mods/Aftershock/items/{afs_materials.json => materials.json} (100%) rename data/mods/Aftershock/items/{afs_tool_quality.json => tool_quality.json} (100%) rename data/mods/Aftershock/items/{afs_tools.json => tools.json} (100%) rename data/mods/Aftershock/items/{afs_weapons.json => weapons.json} (100%) rename data/mods/Aftershock/maps/{afs_furniture.json => furniture.json} (100%) rename data/mods/Aftershock/maps/{afs_item_groups.json => item_groups.json} (100%) rename data/mods/Aftershock/maps/{afs_lab_vehicle_track.json => lab_vehicle_track.json} (100%) rename data/mods/Aftershock/maps/{afs_lab_weapons_range.json => lab_weapons_range.json} (100%) rename data/mods/Aftershock/maps/{afs_overmap_specials.json => overmap_specials.json} (100%) rename data/mods/Aftershock/maps/{afs_overmap_terrain.json => overmap_terrain.json} (100%) rename data/mods/Aftershock/maps/{afs_regional_map_settings.json => regional_map_settings.json} (100%) rename data/mods/Aftershock/maps/{afs_terrain.json => terrain.json} (100%) rename data/mods/Aftershock/mobs/{afs_PrepPhyle_mobs.json => PrepPhyle_mobs.json} (100%) rename data/mods/Aftershock/mobs/{afs_harvest.json => harvest.json} (100%) rename data/mods/Aftershock/mobs/{afs_monster_faction.json => monster_faction.json} (100%) rename data/mods/Aftershock/mobs/{afs_monster_groups.json => monster_groups.json} (100%) rename data/mods/Aftershock/mobs/{afs_robots.json => robots.json} (100%) rename data/mods/Aftershock/mobs/{afs_zombies.json => zombies.json} (100%) rename data/mods/Aftershock/mutations/{afs_mutations.json => mutations.json} (100%) rename data/mods/Aftershock/npcs/{afs_classes.json => classes.json} (100%) rename data/mods/Aftershock/npcs/{afs_factions.json => factions.json} (100%) rename data/mods/Aftershock/npcs/{afs_npc.json => npc.json} (100%) rename data/mods/Aftershock/npcs/{afs_prepnet_dialogue.json => prepnet_dialogue.json} (100%) rename data/mods/Aftershock/player/{afs_bionics.json => bionics.json} (100%) rename data/mods/Aftershock/player/{afs_mutations.json => mutations.json} (100%) rename data/mods/Aftershock/player/{afs_professions.json => professions.json} (100%) rename data/mods/Aftershock/player/{afs_techniques.json => techniques.json} (100%) rename data/mods/Aftershock/recipes/{afs_armor_recipes.json => armor_recipes.json} (100%) rename data/mods/Aftershock/recipes/{afs_bionic_recipes.json => bionic_recipes.json} (100%) rename data/mods/Aftershock/recipes/{afs_comestible_recipes.json => comestible_recipes.json} (100%) rename data/mods/Aftershock/recipes/{afs_construction.json => construction.json} (100%) rename data/mods/Aftershock/recipes/{afs_deconstruction.json => deconstruction.json} (100%) rename data/mods/Aftershock/recipes/{afs_recipe_overrides.json => recipe_overrides.json} (100%) rename data/mods/Aftershock/recipes/{afs__recipes.json => recipes.json} (100%) rename data/mods/Aftershock/recipes/{afs_requirements.json => requirements.json} (100%) rename data/mods/Aftershock/recipes/{afs_uncraft.json => uncraft.json} (100%) rename data/mods/Aftershock/{afs_speech.json => speech.json} (100%) rename data/mods/Aftershock/vehicles/{afs_part_items.json => part_items.json} (100%) rename data/mods/Aftershock/vehicles/{afs_vehicle_groups.json => vehicle_groups.json} (100%) rename data/mods/Aftershock/vehicles/{afs_vehicle_overrides.json => vehicle_overrides.json} (100%) rename data/mods/Aftershock/vehicles/{afs_vehicle_parts.json => vehicle_parts.json} (100%) rename data/mods/Aftershock/vehicles/{afs_vehicles.json => vehicles.json} (100%) diff --git a/data/mods/Aftershock/items/afs_armor.json b/data/mods/Aftershock/items/armor.json similarity index 100% rename from data/mods/Aftershock/items/afs_armor.json rename to data/mods/Aftershock/items/armor.json diff --git a/data/mods/Aftershock/items/afs_bioparts.json b/data/mods/Aftershock/items/bioparts.json similarity index 100% rename from data/mods/Aftershock/items/afs_bioparts.json rename to data/mods/Aftershock/items/bioparts.json diff --git a/data/mods/Aftershock/items/afs_books.json b/data/mods/Aftershock/items/books.json similarity index 100% rename from data/mods/Aftershock/items/afs_books.json rename to data/mods/Aftershock/items/books.json diff --git a/data/mods/Aftershock/items/afs_cbms.json b/data/mods/Aftershock/items/cbms.json similarity index 100% rename from data/mods/Aftershock/items/afs_cbms.json rename to data/mods/Aftershock/items/cbms.json diff --git a/data/mods/Aftershock/items/afs_comestibles.json b/data/mods/Aftershock/items/comestibles.json similarity index 100% rename from data/mods/Aftershock/items/afs_comestibles.json rename to data/mods/Aftershock/items/comestibles.json diff --git a/data/mods/Aftershock/items/afs_furniture.json b/data/mods/Aftershock/items/furniture.json similarity index 100% rename from data/mods/Aftershock/items/afs_furniture.json rename to data/mods/Aftershock/items/furniture.json diff --git a/data/mods/Aftershock/items/afs_inactiverobot.json b/data/mods/Aftershock/items/inactiverobot.json similarity index 100% rename from data/mods/Aftershock/items/afs_inactiverobot.json rename to data/mods/Aftershock/items/inactiverobot.json diff --git a/data/mods/Aftershock/items/afs_item_groups.json b/data/mods/Aftershock/items/item_groups.json similarity index 100% rename from data/mods/Aftershock/items/afs_item_groups.json rename to data/mods/Aftershock/items/item_groups.json diff --git a/data/mods/Aftershock/items/afs_item_overrides.json b/data/mods/Aftershock/items/item_overrides.json similarity index 100% rename from data/mods/Aftershock/items/afs_item_overrides.json rename to data/mods/Aftershock/items/item_overrides.json diff --git a/data/mods/Aftershock/items/afs__items.json b/data/mods/Aftershock/items/items.json similarity index 100% rename from data/mods/Aftershock/items/afs__items.json rename to data/mods/Aftershock/items/items.json diff --git a/data/mods/Aftershock/items/afs_materials.json b/data/mods/Aftershock/items/materials.json similarity index 100% rename from data/mods/Aftershock/items/afs_materials.json rename to data/mods/Aftershock/items/materials.json diff --git a/data/mods/Aftershock/items/afs_tool_quality.json b/data/mods/Aftershock/items/tool_quality.json similarity index 100% rename from data/mods/Aftershock/items/afs_tool_quality.json rename to data/mods/Aftershock/items/tool_quality.json diff --git a/data/mods/Aftershock/items/afs_tools.json b/data/mods/Aftershock/items/tools.json similarity index 100% rename from data/mods/Aftershock/items/afs_tools.json rename to data/mods/Aftershock/items/tools.json diff --git a/data/mods/Aftershock/items/afs_weapons.json b/data/mods/Aftershock/items/weapons.json similarity index 100% rename from data/mods/Aftershock/items/afs_weapons.json rename to data/mods/Aftershock/items/weapons.json diff --git a/data/mods/Aftershock/maps/afs_furniture.json b/data/mods/Aftershock/maps/furniture.json similarity index 100% rename from data/mods/Aftershock/maps/afs_furniture.json rename to data/mods/Aftershock/maps/furniture.json diff --git a/data/mods/Aftershock/maps/afs_item_groups.json b/data/mods/Aftershock/maps/item_groups.json similarity index 100% rename from data/mods/Aftershock/maps/afs_item_groups.json rename to data/mods/Aftershock/maps/item_groups.json diff --git a/data/mods/Aftershock/maps/afs_lab_vehicle_track.json b/data/mods/Aftershock/maps/lab_vehicle_track.json similarity index 100% rename from data/mods/Aftershock/maps/afs_lab_vehicle_track.json rename to data/mods/Aftershock/maps/lab_vehicle_track.json diff --git a/data/mods/Aftershock/maps/afs_lab_weapons_range.json b/data/mods/Aftershock/maps/lab_weapons_range.json similarity index 100% rename from data/mods/Aftershock/maps/afs_lab_weapons_range.json rename to data/mods/Aftershock/maps/lab_weapons_range.json diff --git a/data/mods/Aftershock/maps/afs_overmap_specials.json b/data/mods/Aftershock/maps/overmap_specials.json similarity index 100% rename from data/mods/Aftershock/maps/afs_overmap_specials.json rename to data/mods/Aftershock/maps/overmap_specials.json diff --git a/data/mods/Aftershock/maps/afs_overmap_terrain.json b/data/mods/Aftershock/maps/overmap_terrain.json similarity index 100% rename from data/mods/Aftershock/maps/afs_overmap_terrain.json rename to data/mods/Aftershock/maps/overmap_terrain.json diff --git a/data/mods/Aftershock/maps/afs_regional_map_settings.json b/data/mods/Aftershock/maps/regional_map_settings.json similarity index 100% rename from data/mods/Aftershock/maps/afs_regional_map_settings.json rename to data/mods/Aftershock/maps/regional_map_settings.json diff --git a/data/mods/Aftershock/maps/afs_terrain.json b/data/mods/Aftershock/maps/terrain.json similarity index 100% rename from data/mods/Aftershock/maps/afs_terrain.json rename to data/mods/Aftershock/maps/terrain.json diff --git a/data/mods/Aftershock/mobs/afs_PrepPhyle_mobs.json b/data/mods/Aftershock/mobs/PrepPhyle_mobs.json similarity index 100% rename from data/mods/Aftershock/mobs/afs_PrepPhyle_mobs.json rename to data/mods/Aftershock/mobs/PrepPhyle_mobs.json diff --git a/data/mods/Aftershock/mobs/afs_harvest.json b/data/mods/Aftershock/mobs/harvest.json similarity index 100% rename from data/mods/Aftershock/mobs/afs_harvest.json rename to data/mods/Aftershock/mobs/harvest.json diff --git a/data/mods/Aftershock/mobs/afs_monster_faction.json b/data/mods/Aftershock/mobs/monster_faction.json similarity index 100% rename from data/mods/Aftershock/mobs/afs_monster_faction.json rename to data/mods/Aftershock/mobs/monster_faction.json diff --git a/data/mods/Aftershock/mobs/afs_monster_groups.json b/data/mods/Aftershock/mobs/monster_groups.json similarity index 100% rename from data/mods/Aftershock/mobs/afs_monster_groups.json rename to data/mods/Aftershock/mobs/monster_groups.json diff --git a/data/mods/Aftershock/mobs/afs_robots.json b/data/mods/Aftershock/mobs/robots.json similarity index 100% rename from data/mods/Aftershock/mobs/afs_robots.json rename to data/mods/Aftershock/mobs/robots.json diff --git a/data/mods/Aftershock/mobs/afs_zombies.json b/data/mods/Aftershock/mobs/zombies.json similarity index 100% rename from data/mods/Aftershock/mobs/afs_zombies.json rename to data/mods/Aftershock/mobs/zombies.json diff --git a/data/mods/Aftershock/mutations/afs_mutations.json b/data/mods/Aftershock/mutations/mutations.json similarity index 100% rename from data/mods/Aftershock/mutations/afs_mutations.json rename to data/mods/Aftershock/mutations/mutations.json diff --git a/data/mods/Aftershock/npcs/afs_classes.json b/data/mods/Aftershock/npcs/classes.json similarity index 100% rename from data/mods/Aftershock/npcs/afs_classes.json rename to data/mods/Aftershock/npcs/classes.json diff --git a/data/mods/Aftershock/npcs/afs_factions.json b/data/mods/Aftershock/npcs/factions.json similarity index 100% rename from data/mods/Aftershock/npcs/afs_factions.json rename to data/mods/Aftershock/npcs/factions.json diff --git a/data/mods/Aftershock/npcs/afs_npc.json b/data/mods/Aftershock/npcs/npc.json similarity index 100% rename from data/mods/Aftershock/npcs/afs_npc.json rename to data/mods/Aftershock/npcs/npc.json diff --git a/data/mods/Aftershock/npcs/afs_prepnet_dialogue.json b/data/mods/Aftershock/npcs/prepnet_dialogue.json similarity index 100% rename from data/mods/Aftershock/npcs/afs_prepnet_dialogue.json rename to data/mods/Aftershock/npcs/prepnet_dialogue.json diff --git a/data/mods/Aftershock/player/afs_bionics.json b/data/mods/Aftershock/player/bionics.json similarity index 100% rename from data/mods/Aftershock/player/afs_bionics.json rename to data/mods/Aftershock/player/bionics.json diff --git a/data/mods/Aftershock/player/afs_mutations.json b/data/mods/Aftershock/player/mutations.json similarity index 100% rename from data/mods/Aftershock/player/afs_mutations.json rename to data/mods/Aftershock/player/mutations.json diff --git a/data/mods/Aftershock/player/afs_professions.json b/data/mods/Aftershock/player/professions.json similarity index 100% rename from data/mods/Aftershock/player/afs_professions.json rename to data/mods/Aftershock/player/professions.json diff --git a/data/mods/Aftershock/player/afs_techniques.json b/data/mods/Aftershock/player/techniques.json similarity index 100% rename from data/mods/Aftershock/player/afs_techniques.json rename to data/mods/Aftershock/player/techniques.json diff --git a/data/mods/Aftershock/recipes/afs_armor_recipes.json b/data/mods/Aftershock/recipes/armor_recipes.json similarity index 100% rename from data/mods/Aftershock/recipes/afs_armor_recipes.json rename to data/mods/Aftershock/recipes/armor_recipes.json diff --git a/data/mods/Aftershock/recipes/afs_bionic_recipes.json b/data/mods/Aftershock/recipes/bionic_recipes.json similarity index 100% rename from data/mods/Aftershock/recipes/afs_bionic_recipes.json rename to data/mods/Aftershock/recipes/bionic_recipes.json diff --git a/data/mods/Aftershock/recipes/afs_comestible_recipes.json b/data/mods/Aftershock/recipes/comestible_recipes.json similarity index 100% rename from data/mods/Aftershock/recipes/afs_comestible_recipes.json rename to data/mods/Aftershock/recipes/comestible_recipes.json diff --git a/data/mods/Aftershock/recipes/afs_construction.json b/data/mods/Aftershock/recipes/construction.json similarity index 100% rename from data/mods/Aftershock/recipes/afs_construction.json rename to data/mods/Aftershock/recipes/construction.json diff --git a/data/mods/Aftershock/recipes/afs_deconstruction.json b/data/mods/Aftershock/recipes/deconstruction.json similarity index 100% rename from data/mods/Aftershock/recipes/afs_deconstruction.json rename to data/mods/Aftershock/recipes/deconstruction.json diff --git a/data/mods/Aftershock/recipes/afs_recipe_overrides.json b/data/mods/Aftershock/recipes/recipe_overrides.json similarity index 100% rename from data/mods/Aftershock/recipes/afs_recipe_overrides.json rename to data/mods/Aftershock/recipes/recipe_overrides.json diff --git a/data/mods/Aftershock/recipes/afs__recipes.json b/data/mods/Aftershock/recipes/recipes.json similarity index 100% rename from data/mods/Aftershock/recipes/afs__recipes.json rename to data/mods/Aftershock/recipes/recipes.json diff --git a/data/mods/Aftershock/recipes/afs_requirements.json b/data/mods/Aftershock/recipes/requirements.json similarity index 100% rename from data/mods/Aftershock/recipes/afs_requirements.json rename to data/mods/Aftershock/recipes/requirements.json diff --git a/data/mods/Aftershock/recipes/afs_uncraft.json b/data/mods/Aftershock/recipes/uncraft.json similarity index 100% rename from data/mods/Aftershock/recipes/afs_uncraft.json rename to data/mods/Aftershock/recipes/uncraft.json diff --git a/data/mods/Aftershock/afs_speech.json b/data/mods/Aftershock/speech.json similarity index 100% rename from data/mods/Aftershock/afs_speech.json rename to data/mods/Aftershock/speech.json diff --git a/data/mods/Aftershock/vehicles/afs_part_items.json b/data/mods/Aftershock/vehicles/part_items.json similarity index 100% rename from data/mods/Aftershock/vehicles/afs_part_items.json rename to data/mods/Aftershock/vehicles/part_items.json diff --git a/data/mods/Aftershock/vehicles/afs_vehicle_groups.json b/data/mods/Aftershock/vehicles/vehicle_groups.json similarity index 100% rename from data/mods/Aftershock/vehicles/afs_vehicle_groups.json rename to data/mods/Aftershock/vehicles/vehicle_groups.json diff --git a/data/mods/Aftershock/vehicles/afs_vehicle_overrides.json b/data/mods/Aftershock/vehicles/vehicle_overrides.json similarity index 100% rename from data/mods/Aftershock/vehicles/afs_vehicle_overrides.json rename to data/mods/Aftershock/vehicles/vehicle_overrides.json diff --git a/data/mods/Aftershock/vehicles/afs_vehicle_parts.json b/data/mods/Aftershock/vehicles/vehicle_parts.json similarity index 100% rename from data/mods/Aftershock/vehicles/afs_vehicle_parts.json rename to data/mods/Aftershock/vehicles/vehicle_parts.json diff --git a/data/mods/Aftershock/vehicles/afs_vehicles.json b/data/mods/Aftershock/vehicles/vehicles.json similarity index 100% rename from data/mods/Aftershock/vehicles/afs_vehicles.json rename to data/mods/Aftershock/vehicles/vehicles.json From b63b941515ce7dba934e2c492f0aa3a90efed1c1 Mon Sep 17 00:00:00 2001 From: John Candlebury Date: Mon, 6 Jan 2020 23:18:03 -0600 Subject: [PATCH 17/36] Corporate Infiltrator Caster tweaks Tweak --- data/mods/Aftershock/items/armor.json | 13 +++ .../Aftershock/items/cast_spell_items.json | 66 +++++++++++++ data/mods/Aftershock/items/gun/5x50.json | 24 +++++ data/mods/Aftershock/player/professions.json | 41 +++++++++ .../Aftershock/spells/hologram_spells.json | 92 +++++++++++++++++++ 5 files changed, 236 insertions(+) create mode 100644 data/mods/Aftershock/items/cast_spell_items.json create mode 100644 data/mods/Aftershock/items/gun/5x50.json create mode 100644 data/mods/Aftershock/spells/hologram_spells.json diff --git a/data/mods/Aftershock/items/armor.json b/data/mods/Aftershock/items/armor.json index 00de3dbd548a1..f0aec8f9a3b08 100644 --- a/data/mods/Aftershock/items/armor.json +++ b/data/mods/Aftershock/items/armor.json @@ -277,6 +277,19 @@ }, "flags": [ "STURDY", "OUTER" ] }, + { + "id": "afs_holo_cloak_mk2", + "type": "TOOL_ARMOR", + "copy-from": "afs_sentinel_cloak", + "name": "hologram cloak mk.2", + "description": " A, when activated, will create an holographic decoy of its wearer. Powered by an experimental n-space energy generator, it slowly recharges itself for free, probably by syphoning excess energy from some unknown hyperdimensional space.", + "max_charges": 15, + "initial_charges": 15, + "charges_per_use": 1, + "use_action": "DIRECTIONAL_HOLOGRAM", + "artifact_data": { "charge_type": "ARTC_TIME" }, + "flags": [ "OVERSIZEs", "HOOD", "WATERPROOF", "STURDY", "OUTER", "NO_UNLOAD", "NO_RELOAD" ] + }, { "id": "afs_sentinel_cloak", "type": "ARMOR", diff --git a/data/mods/Aftershock/items/cast_spell_items.json b/data/mods/Aftershock/items/cast_spell_items.json new file mode 100644 index 0000000000000..f5d94b8d4a019 --- /dev/null +++ b/data/mods/Aftershock/items/cast_spell_items.json @@ -0,0 +1,66 @@ +[ + { + "abstract": "afs_caster", + "type": "TOOL_ARMOR", + "name": "caster", + "description": "A generic techno doodad used to cast spells.", + "weight": "100 g", + "volume": "250 ml", + "price": 5000, + "material": [ "superalloy" ], + "symbol": "[", + "color": "light_red", + "covers": [ "TORSO" ], + "coverage": 0, + "warmth": 0, + "flags": [ "WATER_FRIENDLY", "ALLOWS_NATURAL_ATTACKS", "ONLY_ONE", "TORSO" ] + }, + { + "id": "afs_holo_transposition_caster", + "type": "TOOL_ARMOR", + "name": "hologram transposition caster", + "copy-from": "afs_caster", + "description": "A small metallic sphere with a recessed bottom up top. When activated it will allow you to swap positions with an existing hologram.", + "max_charges": 15, + "initial_charges": 15, + "charges_per_use": 1, + "artifact_data": { "charge_type": "ARTC_TIME" }, + "use_action": { "type": "cast_spell", "spell_id": "afs_holo_transposition", "no_fail": true, "level": 1 } + }, + { + "id": "afs_holo_flare_caster", + "type": "TOOL_ARMOR", + "copy-from": "afs_caster", + "name": "hologram flare caster", + "description": "A small metallic sphere with a recessed bottom up top. When activated it will allow you to select an hologram, which will explode in a blinding flash, stunning anything nearby.", + "max_charges": 15, + "initial_charges": 15, + "charges_per_use": 1, + "artifact_data": { "charge_type": "ARTC_TIME" }, + "use_action": { "type": "cast_spell", "spell_id": "afs_holo_flare", "no_fail": true, "level": 1 } + }, + { + "id": "afs_holo_decoy_caster", + "type": "TOOL_ARMOR", + "copy-from": "afs_caster", + "name": "decoy caster", + "description": "A small metallic sphere with a recessed bottom up top. When activated it will a holographic decoy in a location of your choosing.", + "max_charges": 2, + "initial_charges": 2, + "charges_per_use": 1, + "artifact_data": { "charge_type": "ARTC_TIME" }, + "use_action": { "type": "cast_spell", "spell_id": "afs_holo_decoy", "no_fail": true, "level": 1 } + }, + { + "id": "afs_holo_field_caster", + "type": "TOOL_ARMOR", + "copy-from": "afs_caster", + "name": "decoy field caster", + "description": "A small metallic sphere with a recessed bottom up top. When activated it will create several holographic decoys around you.", + "max_charges": 1, + "initial_charges": 1, + "charges_per_use": 1, + "artifact_data": { "charge_type": "ARTC_TIME" }, + "use_action": { "type": "cast_spell", "spell_id": "afs_holo_field", "no_fail": true, "level": 1 } + } +] diff --git a/data/mods/Aftershock/items/gun/5x50.json b/data/mods/Aftershock/items/gun/5x50.json new file mode 100644 index 0000000000000..e2514b0b641d1 --- /dev/null +++ b/data/mods/Aftershock/items/gun/5x50.json @@ -0,0 +1,24 @@ +{ + "id": "afs_eidolon_derringer", + "type": "GUN", + "copy-from": "needlepistol", + "name": "eidolon derringer", + "volume": "500 ml", + "description": "A slick, miniature derringer designed as a backup weapon for covert operations and close range assassination. It will fire up to four 5x50mm penetrators simultaneously, to devastating effect.", + "dispersion": 410, + "range": -48, + "valid_mod_locations": [ + [ "accessories", 2 ] + ], + "modes": [ + [ "DEFAULT", "1 rd.", 1 ], + [ "MULTI", "4 rd.", 4 ] + ], + "clip_size": 4, + "flags": [ + "NEVER_JAMS", + "RELOAD_ONE", + "NEVER_JAMS", + "RELOAD_EJECT" + ] +} diff --git a/data/mods/Aftershock/player/professions.json b/data/mods/Aftershock/player/professions.json index 27d21f1b0159e..71a4266ce0769 100644 --- a/data/mods/Aftershock/player/professions.json +++ b/data/mods/Aftershock/player/professions.json @@ -253,6 +253,47 @@ "female": [ "panties", "hairpin", "pearl_collar" ] } }, + { + "type": "profession", + "ident": "afs_holo_fighter", + "name": "Corporate Infiltrator", + "description": "Before all this, you were an 'independent contractor', a spy and mercenary at the service of megacorporations. Using highly experimental holographic technology, you once took on impossible jobs one after the other.", + "points": 8, + "skills": [ + { "level": 4, "name": "gun" }, + { "level": 4, "name": "pistol" }, + { "level": 4, "name": "cutting" }, + { "level": 2, "name": "melee" }, + { "level": 2, "name": "dodge" }, + { "level": 1, "name": "firstaid" } + ], + "items": { + "both": { + "items": [ + "under_armor", + "under_armor_shorts", + "gloves_leather", + "pants_cargo", + "socks", + "boots_combat", + "gloves_leather", + "webbing_belt", + "sweater", + "powered_earmuffs", + "afs_holo_transposition_caster", + "afs_holo_decoy_caster", + "afs_holo_field_caster", + "afs_holo_flare_caster", + "afs_holo_cloak_mk2" + ], + "entries": [ + { "item": "kukri", "container-item": "sheath" }, + { "item": "afs_eidolon_derringer", "ammo-item": "5x50heavy", "charges": 4, "container-item": "holster" }, + { "item": "5x50heavy" } + ] + } + } + }, { "type": "profession", "ident": "afs_affluent_executive", diff --git a/data/mods/Aftershock/spells/hologram_spells.json b/data/mods/Aftershock/spells/hologram_spells.json new file mode 100644 index 0000000000000..9c713b8dea906 --- /dev/null +++ b/data/mods/Aftershock/spells/hologram_spells.json @@ -0,0 +1,92 @@ +[ + { + "id": "afs_holo_field", + "type": "SPELL", + "name": "Holographic Field", + "description": "Creates several short-lived holograms around you.", + "valid_targets": [ "ground" ], + "flags": [ "SILENT" ], + "effect": "summon", + "effect_str": "mon_hologram", + "max_level": 1, + "base_casting_time": 10, + "min_damage": 10, + "max_damage": 10, + "min_aoe": 5, + "max_aoe": 5, + "min_duration": 4000 + }, + { + "id": "afs_holo_decoy", + "type": "SPELL", + "name": "Holographic Decoy", + "description": "Creates a short-lived hologram.", + "valid_targets": [ "ground" ], + "flags": [ "SILENT" ], + "effect": "summon", + "effect_str": "mon_hologram", + "max_level": 1, + "base_casting_time": 10, + "min_range": 10, + "max_range": 10, + "min_damage": 1, + "max_damage": 1, + "min_aoe": 1, + "max_aoe": 1, + "min_duration": 4000 + }, + { + "id": "afs_holo_flare", + "type": "SPELL", + "name": "Holographic Flash", + "description": "Causes an existing hologram to explode into burning light, harming and stunning enemies close to it.", + "effect": "target_attack", + "valid_targets": [ "hostile", "ally" ], + "targeted_monster_ids": [ "mon_hologram" ], + "max_level": 1, + "flags": [ "SILENT" ], + "min_damage": 2, + "max_damage": 2, + "base_casting_time": 10, + "min_range": 20, + "max_range": 20, + "difficulty": 1, + "extra_effects": [ { "id": "afs_holo_flare_explosion" } ], + "damage_type": "none" + }, + { + "id": "afs_holo_flare_explosion", + "type": "SPELL", + "name": "Holographic Flash Explosion", + "description": "Causes an existing hologram to explode into burning light, harming and stunning enemies close to it.", + "valid_targets": [ "hostile", "ground", "ally" ], + "effect": "target_attack", + "effect_str": "stunned", + "min_duration": 1000, + "max_duration": 1000, + "max_level": 1, + "min_damage": 20, + "max_damage": 20, + "min_aoe": 3, + "max_aoe": 3, + "spell_class": "NONE", + "flags": [ "SILENT" ], + "base_casting_time": 0, + "damage_type": "none", + "difficulty": 1 + }, + { + "id": "afs_holo_transposition", + "type": "SPELL", + "name": "Holographic Transposition", + "description": "Allows you to swap places with a previously existing holographic image of yourself. If the universe itself can't tell you apart, who could?", + "valid_targets": [ "hostile", "ally" ], + "targeted_monster_ids": [ "mon_hologram" ], + "flags": [ "SILENT", "SWAP_POS" ], + "effect": "target_attack", + "max_level": 1, + "base_casting_time": 10, + "min_range": 20, + "max_range": 20 + } +] From 9ea9f81c01facbf2b3b2cd93de6e5ed211ff9b37 Mon Sep 17 00:00:00 2001 From: ZhilkinSerg Date: Tue, 7 Jan 2020 21:33:08 +0300 Subject: [PATCH 18/36] Fix ids in npc complaints for smoke fields (#36775) --- data/json/field_type.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/data/json/field_type.json b/data/json/field_type.json index c4eaec74e8863..b32d9cf74235a 100644 --- a/data/json/field_type.json +++ b/data/json/field_type.json @@ -755,7 +755,7 @@ { "name": "pot smoke", "color": "light_gray" }, { "name": "thick pot smoke", "color": "dark_gray" } ], - "npc_complain": { "chance": 20, "issue": "weed_smell", "duration": "10 minutes", "speech": "" }, + "npc_complain": { "chance": 20, "issue": "weed_smoke", "duration": "10 minutes", "speech": "" }, "decay_amount_factor": 5, "percent_spread": 200, "outdoor_age_speedup": "6 minutes", @@ -775,7 +775,7 @@ { "name": "crack smoke", "color": "light_gray" }, { "name": "thick crack smoke", "color": "dark_gray" } ], - "npc_complain": { "chance": 20, "issue": "crack_smell", "duration": "30 minutes", "speech": "" }, + "npc_complain": { "chance": 20, "issue": "crack_smoke", "duration": "30 minutes", "speech": "" }, "decay_amount_factor": 5, "percent_spread": 175, "outdoor_age_speedup": "8 minutes", @@ -795,7 +795,7 @@ { "name": "meth smoke", "color": "light_gray" }, { "name": "thick meth smoke", "color": "dark_gray" } ], - "npc_complain": { "chance": 20, "issue": "meth_smell", "duration": "30 minutes", "speech": "" }, + "npc_complain": { "chance": 20, "issue": "meth_smoke", "duration": "30 minutes", "speech": "" }, "decay_amount_factor": 5, "percent_spread": 175, "outdoor_age_speedup": "7 minutes", From 3734302628c8b39324539329e528ec533b02618f Mon Sep 17 00:00:00 2001 From: Xanmyral Date: Tue, 7 Jan 2020 16:04:08 -0600 Subject: [PATCH 19/36] Martial Arts missing Learn Diffculty and Incorrect Bonuses (#36772) * Martial Arts missing Learn Diffculty and Incorrect Bonuses Medieval Swordsmanship and Leopard Stance were missing the learn difficulty, making them potentially easier to learn than intended. Leopard stance's on move buff gave a flat bonus to damage instead of the intended multiplier. Eskrima stance was giving a 200% bonus to accuracy instead of the intended +2 accuracy. * Added missing primary_skills Fior Di Battaglia uses bashing skill, Medieval Swordsmanship uses cutting skill --- data/json/martialarts.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/data/json/martialarts.json b/data/json/martialarts.json index b5fda2a75409d..52236072d77a2 100644 --- a/data/json/martialarts.json +++ b/data/json/martialarts.json @@ -264,7 +264,7 @@ "name": "Eskrima Stance", "description": "You are skilled at getting the most out of your weapons. The term 'weapon' might be very subjective,\n\n+2 Accuracy.", "melee_allowed": true, - "mult_bonuses": [ [ "hit", 2.0 ] ] + "flat_bonuses": [ [ "hit", 2.0 ] ] } ], "oncrit_buffs": [ @@ -424,6 +424,7 @@ "description": "Medieval Europe's martial techniques for fighting with polearms. The \"Flower of Battle\" places great focus on countering one's opponent and knocking them down before landing a killing blow", "initiate": [ "You hold your weapon in a firm grip, ready to block any attack.", "%s grips their weapon tightly." ], "learn_difficulty": 6, + "primary_skill": "bashing", "strictly_melee": true, "static_buffs": [ { @@ -649,6 +650,7 @@ "name": "Leopard Kung Fu", "description": "One of the five Shaolin animal styles. The Leopard focuses on rapid, strategically planned strikes. Perception improves your accuracy instead of Dexterity. Moving increases dodge skill and accuracy further. Attacking after moving increases damage.", "initiate": [ "You prepare to pounce like a lepoard.", "%s assumes a leopard-like stance." ], + "learn_difficulty": 10, "static_buffs": [ { "id": "buff_leopard_static1", @@ -684,7 +686,7 @@ "unarmed_allowed": true, "req_buffs": [ "buff_leopard_onmove1" ], "buff_duration": 1, - "flat_bonuses": [ [ "damage", "bash", 1.25 ], [ "damage", "cut", 1.25 ], [ "damage", "stab", 1.25 ] ] + "mult_bonuses": [ [ "damage", "bash", 1.25 ], [ "damage", "cut", 1.25 ], [ "damage", "stab", 1.25 ] ] } ], "techniques": [ "tec_leopard_rapid", "tec_leopard_feint", "tec_leopard_counter", "tec_leopard_precise" ] @@ -696,6 +698,8 @@ "description": "The art of the longsword and sword & shield, preceding the later development of fencing. Designed for combat both unarmored and in armor, it includes grappling as well as defensive and offensive sword techniques. This treatise compares the Italian and German traditions of medieval combat with detailed step-by-step pictures.", "initiate": [ "You take on a knightly stance.", "%s takes on a knightly stance." ], "strictly_melee": true, + "learn_difficulty": 6, + "primary_skill": "cutting", "static_buffs": [ { "id": "buff_swordsmanship_static", From c4c7b91b7f2c3d47540c15c8fcbec56ce36f1156 Mon Sep 17 00:00:00 2001 From: ZhilkinSerg Date: Wed, 8 Jan 2020 02:19:17 +0300 Subject: [PATCH 20/36] Set debug mutation as such in Magiclysm (#36774) * Set debug mutation as such in Magiclysm * Apply suggestions from code review Co-Authored-By: anothersimulacrum Co-authored-by: anothersimulacrum --- data/mods/Magiclysm/traits/mutation.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/data/mods/Magiclysm/traits/mutation.json b/data/mods/Magiclysm/traits/mutation.json index 01c6b03bcdad8..159d1a79bdea9 100644 --- a/data/mods/Magiclysm/traits/mutation.json +++ b/data/mods/Magiclysm/traits/mutation.json @@ -258,7 +258,9 @@ "id": "DEBUG_spell_mutation", "name": "Debug Spell Mutation", "points": 20, + "valid": false, "description": "Gives all of the debug spells at max level.", + "debug": true, "spells_learned": [ [ "example_template", 10 ], [ "debug_stamina", 0 ], [ "debug_hp", 0 ], [ "debug_bionic", 0 ], [ "debug_effect", 0 ] ] } ] From bcff7ae22c2afb23a53bdaaeb3a86eb79309dcc2 Mon Sep 17 00:00:00 2001 From: 1n17 <59138068+1n17@users.noreply.github.com> Date: Wed, 8 Jan 2020 00:20:42 +0100 Subject: [PATCH 21/36] Electrochemical reactions (#36785) * Update recipe_medsandchemicals.json abstracting using chloralkali process (hot solution, unpartitioned cell) to produce sodium chlorate, then perchlorate by anodic oxidation on platinum, then ammonia perchlorate by double decomposition from sodium perchlorate and ammonium chloride; while we can't directly use bleach here but we do end up recovering some brine * Update recipe_medsandchemicals.json * Update recipe_medsandchemicals.json * Update recipe_medsandchemicals.json * Update recipe_medsandchemicals.json * Update recipe_medsandchemicals.json Reevaluating skill requirements --- .../json/recipes/recipe_medsandchemicals.json | 66 ++++++++++++++++--- 1 file changed, 56 insertions(+), 10 deletions(-) diff --git a/data/json/recipes/recipe_medsandchemicals.json b/data/json/recipes/recipe_medsandchemicals.json index 70551369783fc..4b314063d5384 100644 --- a/data/json/recipes/recipe_medsandchemicals.json +++ b/data/json/recipes/recipe_medsandchemicals.json @@ -550,11 +550,14 @@ "category": "CC_CHEM", "subcategory": "CSC_CHEM_CHEMICALS", "skill_used": "cooking", - "difficulty": 6, - "time": "24 m", - "book_learn": [ [ "adv_chemistry", 5 ], [ "textbook_chemistry", 5 ], [ "recipe_labchem", 5 ], [ "isherwood_herbal_remedies", 4 ] ], + "skills_required": [ "electronics", 2 ], + "difficulty": 5, + "time": "25 m", + "batch_time_factors": [ 90, 4 ], + "//": "another variation of chloralkali process, now used to produce bleach (sodium hypochlorite - or rather rough, technical grade hypochlorite/hydroxide/chloride mix), note we will not be heating anything and that the (mostly) electrochemical reaction easily scales in size, some hydrogen gas could be recoverable (optional byproduct)", + "book_learn": [ [ "adv_chemistry", 3 ], [ "textbook_chemistry", 3 ], [ "recipe_labchem", 3 ] ], "qualities": [ { "id": "CHEM", "level": 2 } ], - "tools": [ [ [ "surface_heat", 20, "LIST" ] ] ], + "tools": [ [ [ "electrolysis_kit", 250 ] ] ], "components": [ [ [ "salt_water", 2 ], [ "saline", 10 ] ] ] }, { @@ -577,15 +580,19 @@ { "type": "recipe", "result": "oxy_powder", + "byproducts": [ [ "salt_water", 2 ] ], "category": "CC_CHEM", "subcategory": "CSC_CHEM_CHEMICALS", "skill_used": "cooking", - "difficulty": 8, - "time": "12 m", - "book_learn": [ [ "adv_chemistry", 5 ], [ "textbook_chemistry", 5 ], [ "recipe_labchem", 5 ] ], - "qualities": [ { "id": "CHEM", "level": 2 } ], - "tools": [ [ [ "surface_heat", 25, "LIST" ] ] ], - "components": [ [ [ "bleach", 1 ] ], [ [ "water_clean", 1 ], [ "water", 1 ] ] ] + "skills_required": [ "electronics", 2 ], + "difficulty": 7, + "time": "45 m", + "batch_time_factors": [ 60, 4 ], + "//": "abstracting using chloralkali process (hot solution, unpartitioned cell) to produce sodium chlorate, then perchlorate by anodic oxidation on platinum, then ammonia perchlorate by double decomposition from sodium perchlorate and ammonium chloride; while we can't directly use bleach here but we do end up recovering some brine", + "book_learn": [ [ "adv_chemistry", 4 ], [ "textbook_chemistry", 4 ], [ "recipe_labchem", 4 ] ], + "qualities": [ { "id": "CHEM", "level": 2 }, { "id": "BOIL", "level": 1 } ], + "tools": [ [ [ "electrolysis_kit", 750 ] ], [ [ "surface_heat", 25, "LIST" ] ], [ [ "platinum_small", -1 ] ] ], + "components": [ [ [ "salt_water", 4 ], [ "saline", 20 ] ], [ [ "ammonia", 1 ] ], [ [ "chem_muriatic_acid", 1 ] ] ] }, { "type": "recipe", @@ -820,6 +827,28 @@ "tools": [ [ [ "surface_heat", 10, "LIST" ] ] ], "components": [ [ [ "salt", 210 ] ], [ [ "chem_sulphuric_acid", 1 ] ], [ [ "water_clean", 1 ] ] ] }, + { + "type": "recipe", + "result": "chem_muriatic_acid", + "id_suffix": "by_electrolysis", + "byproducts": [ [ "lye", 2 ] ], + "category": "CC_CHEM", + "subcategory": "CSC_CHEM_CHEMICALS", + "skill_used": "cooking", + "skills_required": [ [ "electronics", 2 ], [ "mechanics", 2 ] ], + "difficulty": 6, + "time": "40 m", + "batch_time_factors": [ 50, 5 ], + "//": "abstracted chloralkali process, followed by 'burning' resulting chlorine and hydrogen with electric arc as uv source and crucible serving as reaction furnace, then dissolving resulting hydrogen chloride gas in water", + "book_learn": [ [ "adv_chemistry", 4 ], [ "textbook_chemistry", 4 ] ], + "qualities": [ { "id": "CHEM", "level": 2 } ], + "tools": [ + [ [ "electrolysis_kit", 500 ] ], + [ [ "welder", 100 ], [ "welder_crude", 150 ] ], + [ [ "crucible", -1 ], [ "crucible_clay", -1 ] ] + ], + "components": [ [ [ "salt_water", 4 ] ], [ [ "water_clean", 1 ] ] ] + }, { "type": "recipe", "result": "chem_sulphuric_acid", @@ -1155,6 +1184,23 @@ "tools": [ [ [ "surface_heat", 5, "LIST" ] ] ], "components": [ [ [ "water", 1 ], [ "water_clean", 1 ] ], [ [ "ash", 500 ] ] ] }, + { + "result": "lye", + "type": "recipe", + "id_suffix": "by_electrolysis", + "category": "CC_CHEM", + "subcategory": "CSC_CHEM_CHEMICALS", + "skill_used": "cooking", + "skills_required": [ "electronics", 2 ], + "difficulty": 4, + "time": "20 m", + "batch_time_factors": [ 80, 4 ], + "//": "chloralkali process, same as with bleach except we wont be washing gases", + "book_learn": [ [ "adv_chemistry", 3 ], [ "textbook_chemistry", 3 ], [ "recipe_labchem", 3 ] ], + "qualities": [ { "id": "CHEM", "level": 2 } ], + "tools": [ [ [ "electrolysis_kit", 250 ] ] ], + "components": [ [ [ "salt_water", 2 ], [ "saline", 10 ] ] ] + }, { "result": "anesthetic", "type": "recipe", From 0de82eddfce2080edb967c28fc809d67b6fe813b Mon Sep 17 00:00:00 2001 From: arijust <54635208+arijust@users.noreply.github.com> Date: Wed, 8 Jan 2020 00:21:04 +0100 Subject: [PATCH 22/36] Lower material thickness for ballistic vest. --- data/json/items/armor/ballistic_armor.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/json/items/armor/ballistic_armor.json b/data/json/items/armor/ballistic_armor.json index 6a7aa7f2a38d8..48567c5fad332 100644 --- a/data/json/items/armor/ballistic_armor.json +++ b/data/json/items/armor/ballistic_armor.json @@ -16,7 +16,7 @@ "coverage": 85, "encumbrance": 10, "warmth": 15, - "material_thickness": 20, + "material_thickness": 7, "flags": [ "STURDY", "OUTER", "WATER_FRIENDLY" ] } ] From 29351f0e53cdd1560a65d5a693c9a83e1872808d Mon Sep 17 00:00:00 2001 From: k4gi Date: Wed, 8 Jan 2020 11:51:34 +1100 Subject: [PATCH 23/36] Boxpack (#36746) * add box backpack and recipe * add NO_REPAIR flag * edit description and recipe * Update data/json/recipes/armor/storage.json Co-Authored-By: I-am-Erk <45136638+I-am-Erk@users.noreply.github.com> * Update data/json/recipes/armor/storage.json Co-Authored-By: I-am-Erk <45136638+I-am-Erk@users.noreply.github.com> * Update data/json/recipes/armor/storage.json Co-Authored-By: I-am-Erk <45136638+I-am-Erk@users.noreply.github.com> * remove stray bracket Co-authored-by: I-am-Erk <45136638+I-am-Erk@users.noreply.github.com> --- data/json/items/armor/backpacks.json | 22 ++++++++++++++++++++++ data/json/recipes/armor/storage.json | 12 ++++++++++++ 2 files changed, 34 insertions(+) diff --git a/data/json/items/armor/backpacks.json b/data/json/items/armor/backpacks.json index 135c87e83754d..254206acd2998 100644 --- a/data/json/items/armor/backpacks.json +++ b/data/json/items/armor/backpacks.json @@ -570,5 +570,27 @@ "warmth": 8, "material_thickness": 2, "flags": [ "BELTED", "WATERPROOF" ] + }, + { + "id": "boxpack", + "type": "ARMOR", + "name": "box backpack", + "description": "A makeshift backpack comprised of a wooden box and a pair of ropes.", + "weight": "8000 g", + "to_hit": -5, + "color": "brown", + "symbol": "]", + "looks_like": "jerrypack", + "material": [ "wood", "cotton" ], + "volume": "15 L", + "storage": "15 L", + "covers": [ "TORSO" ], + "coverage": 40, + "encumbrance": 30, + "warmth": 5, + "bashing": 16, + "cutting": 4, + "price": 3500, + "flags": [ "BELTED", "OVERSIZE", "NO_REPAIR" ] } ] diff --git a/data/json/recipes/armor/storage.json b/data/json/recipes/armor/storage.json index a4785e43a926b..66b176a6977fc 100644 --- a/data/json/recipes/armor/storage.json +++ b/data/json/recipes/armor/storage.json @@ -387,6 +387,18 @@ "qualities": [ { "id": "HAMMER", "level": 3 } ], "components": [ [ [ "rag", 6 ], [ "leather", 6 ], [ "cordage_short", 3, "LIST" ] ], [ [ "jerrycan", 1 ] ] ] }, + { + "result": "boxpack", + "type": "recipe", + "category": "CC_ARMOR", + "subcategory": "CSC_ARMOR_STORAGE", + "skill_used": "fabrication", + "difficulty": 2, + "time": "60 m", + "autolearn": true, + "qualities": [ { "id": "HAMMER", "level": 2 }, { "id": "SAW_W", "level": 2 } ], + "components": [ [ [ "2x4", 3 ] ], [ [ "wood_panel", 1 ] ], [ [ "nail", 20 ] ], [ [ "rope_natural", 1, "LIST" ] ] ] + }, { "result": "leather_belt", "type": "recipe", From 1f9a072682d8b3135d61f293d47db600fea529b4 Mon Sep 17 00:00:00 2001 From: John Candlebury Date: Tue, 7 Jan 2020 18:54:20 -0600 Subject: [PATCH 24/36] Fix butchery results --- data/mods/Aftershock/items/afs_harvest.json | 37 +++++++++++++++++++-- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/data/mods/Aftershock/items/afs_harvest.json b/data/mods/Aftershock/items/afs_harvest.json index 1b3745a01eead..24274d2913963 100644 --- a/data/mods/Aftershock/items/afs_harvest.json +++ b/data/mods/Aftershock/items/afs_harvest.json @@ -3,16 +3,47 @@ "id": "zombie", "//": "your bog standard zombie", "type": "harvest", - "entries": [ { "drop": "afs_titanium_implant", "type": "bionic", "flags": [ "FILTHY", "NO_STERILE" ], "max": 1 } ] + "entries": [ + { "drop": "meat_tainted", "type": "flesh", "mass_ratio": 0.25 }, + { "drop": "fat_tainted", "type": "flesh", "mass_ratio": 0.08 }, + { "drop": "bone_tainted", "type": "bone", "mass_ratio": 0.1 }, + { "drop": "afs_titanium_implant", "type": "bionic", "flags": [ "FILTHY", "NO_STERILE" ], "max": 1 }, + { "drop": "pheromone", "type": "bionic", "max": 1 } + ] }, { "id": "CBM_CIV", "type": "harvest", - "entries": [ { "drop": "afs_titanium_implant", "type": "bionic", "flags": [ "FILTHY", "NO_STERILE" ], "max": 1 } ] + "entries": [ + { + "drop": "bio_power_storage", + "type": "bionic", + "flags": [ "FILTHY", "NO_STERILE", "NO_PACKED" ], + "faults": [ "fault_bionic_salvaged" ] + }, + { + "drop": "bionics_common", + "type": "bionic_group", + "flags": [ "FILTHY", "NO_STERILE", "NO_PACKED" ], + "faults": [ "fault_bionic_salvaged" ] + }, + { "drop": "afs_titanium_implant", "type": "bionic", "flags": [ "FILTHY", "NO_STERILE" ], "max": 1 }, + { "drop": "meat_tainted", "type": "flesh", "mass_ratio": 0.25 }, + { "drop": "fat_tainted", "type": "flesh", "mass_ratio": 0.08 }, + { "drop": "bone_tainted", "type": "bone", "mass_ratio": 0.1 } + ] }, { "id": "human", "type": "harvest", - "entries": [ { "drop": "afs_titanium_implant", "type": "bionic", "flags": [ "FILTHY", "NO_STERILE" ], "max": 1 } ] + "entries": [ + { "drop": "human_flesh", "type": "flesh", "mass_ratio": 0.2 }, + { "drop": "hstomach", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" }, + { "drop": "human_fat", "type": "flesh", "mass_ratio": 0.1 }, + { "drop": "bone_human", "type": "bone", "mass_ratio": 0.12 }, + { "drop": "sinew", "type": "bone", "mass_ratio": 0.001 }, + { "drop": "afs_titanium_implant", "type": "bionic", "flags": [ "FILTHY", "NO_STERILE" ], "max": 1 }, + { "drop": "raw_hleather", "type": "skin", "mass_ratio": 0.01 } + ] } ] From 89ef868ee8d5d10bfd52fc2ed20473bd9ea95ab9 Mon Sep 17 00:00:00 2001 From: CountAlex Date: Wed, 8 Jan 2020 04:16:10 +0300 Subject: [PATCH 25/36] Adds military helipad location (#36732) * Adds military helipad location * JSON fixes. * Moster placing fix. * Terrain id fix. * Replace mech lifter with a forklift. * Review changes * Set of small fixes - spawns etc. * Reduce number of perimeter turrets to 4. --- .../terrain-floors-outdoors.json | 18 ++ data/json/itemgroups/supplies.json | 11 + data/json/mapgen/helipad.json | 213 ++++++++++++++++++ data/json/mapgen_palettes/helipad.json | 83 +++++++ .../overmap/overmap_special/specials.json | 20 ++ .../overmap_terrain_military.json | 49 ++++ 6 files changed, 394 insertions(+) create mode 100644 data/json/mapgen/helipad.json create mode 100644 data/json/mapgen_palettes/helipad.json diff --git a/data/json/furniture_and_terrain/terrain-floors-outdoors.json b/data/json/furniture_and_terrain/terrain-floors-outdoors.json index 2f832f031efce..6bcbcdc05b17f 100644 --- a/data/json/furniture_and_terrain/terrain-floors-outdoors.json +++ b/data/json/furniture_and_terrain/terrain-floors-outdoors.json @@ -231,6 +231,24 @@ "items": [ { "item": "rock", "count": [ 2, 15 ] }, { "item": "rebar", "count": [ 0, 4 ] } ] } }, + { + "type": "terrain", + "id": "t_concrete_y", + "name": "concrete", + "description": "A newer segment of poured concrete with surface finishes for aesthetics and resistance to freeze-thaw cycles. Covered with a streak of yellow paint.", + "symbol": ".", + "color": "yellow", + "looks_like": "t_wall_y", + "move_cost": 2, + "flags": [ "TRANSPARENT", "FLAT", "ROAD", "MINEABLE" ], + "bash": { + "ter_set": "t_null", + "str_min": 50, + "str_max": 400, + "str_min_supported": 100, + "items": [ { "item": "rock", "count": [ 2, 15 ] }, { "item": "rebar", "count": [ 0, 4 ] } ] + } + }, { "type": "terrain", "id": "t_floor_noroof", diff --git a/data/json/itemgroups/supplies.json b/data/json/itemgroups/supplies.json index 94a0e2f301fac..d34df1cd111a7 100644 --- a/data/json/itemgroups/supplies.json +++ b/data/json/itemgroups/supplies.json @@ -496,5 +496,16 @@ [ "whistle", 5 ], [ "airhorn", 2 ] ] + }, + { + "id": "fuel_barrel", + "type": "item_group", + "//": "barrel with gasoline, diesel or motor oil like you would find at fuel depot", + "subtype": "distribution", + "entries": [ + { "item": "gasoline", "charges": [ 0, 50000 ], "container-item": "30gal_drum", "prob": 30 }, + { "item": "diesel", "charges": [ 0, 50000 ], "container-item": "30gal_drum", "prob": 10 }, + { "item": "motor_oil", "charges": [ 0, 10000 ], "container-item": "jerrycan", "prob": 5 } + ] } ] diff --git a/data/json/mapgen/helipad.json b/data/json/mapgen/helipad.json new file mode 100644 index 0000000000000..b461d1e3b63d8 --- /dev/null +++ b/data/json/mapgen/helipad.json @@ -0,0 +1,213 @@ +[ + { + "method": "json", + "om_terrain": [ [ "helipad_nw", "helipad_ne" ], [ "helipad_sw", "helipad_se" ] ], + "type": "mapgen", + "weight": 500, + "object": { + "fill_ter": "t_floor", + "rows": [ + "FFF.......pppppppp...........................FFF", + "FTFFWWWWWF!!!!!!!!FFFFFFFFFFFFFFFFFFFFFFFFFFFFTF", + "FFG.W4ddw.pppppppp...........................GFF", + ".F..W-c?w.pppppppp...|||||||||||||||||||||||..F.", + ".F..WmWWW.pppppppp...|%_____________C__B___|..F.", + ".F..pppppppppppppppppM___C_________C_CC_B__|..F.", + ".F..pppppppppppppppppM____________CCCCC____|..F.", + ".F..pppppppppppppppppM_B__C___B__B___C_B___|..F.", + ".F..pppppyppppyppppppM________*_________B__|..F.", + ".F..pppppyppppyppppppM__B___C___B__C__B____|..F.", + ".F..pppppyppppyppp...|____C___B____________|..F.", + ".F..pppppyppppypppooom___________B______%__|..F.", + ".F..pppppyppppyppp...||||||||m|MMMMMMMMM||||..F.", + ".F..pppppyppppyppp...|_rrrr|____________%__|..F.", + ".F..oooooooooooooo...|_____|_______________|..F.", + ".F..............oo...|_rrrr|___IIIIIIIII_RR|..F.", + ".F..WwWWwWwwWwwW++WwW|M|||||___IUUUUUUUI_sR|..F.", + ".F..W----+-----+-----m_____m___IUUUUUUUI_75|..F.", + ".F..W-?ddWdc--dW--WWW|||||||___IUUUUUUUI___|..F.", + ".F..Wz-cfWd?f?dW--W&W|_____m___IUUUUUUUI_RR|..F.", + ".F..WWWWWWWWWWWWz-+-W|ggggg|___IUUUUUUUI_sR|..F.", + ".F..W[[[HH##O#SW--WSW|||||||___IUUUUUUUI_85|..F.", + ".F..W----------+--WWW|lllll|___IUUUUUUUI___|..F.", + ".F..W-cttc---1WW--+-W|_____M___IUUUUUUUI___|..F.", + ".F..W-cttc-z-2W<--WhW|lllll|___IUUUUUUUI%__|..F.", + ".F..WWwwwWwwwWWW++WWW||||||||m|MMMMMMMMM||||..F.", + ".F.......3P.....oo...........o.=========6666..F.", + ".F..========================================..F.", + ".F..========================================..F.", + ".F..========================================..F.", + ".F..========================================..F.", + ".F...o,,,,,o..o,,,,,,,,,,,,,,,,,,o..o,,,,,o...F.", + ".F...o=====o..o==================o..o=====o...F.", + ".F..$=========o$==,,========,,$==o==========..F.", + ".F..==========o===,,========,,===o==========..F.", + ".F..=,=====,==o===,,========,,===o=,=====,==..F.", + ".F..=,=====,==o===,,========,,===o=,=====,==..F.", + ".F..=,=====,==o===,,,,,,,,,,,,===o=,=====,==..F.", + ".F..=,,,,,,,==o===,,,,,,,,,,,,===o=,,,,,,,==..F.", + ".F..=,,,,,,,==o===,,========,,===o=,,,,,,,==..F.", + ".F..=,=====,==o===,,========,,===o=,=====,==..F.", + ".F..=,=====,==o===,,========,,===o=,=====,==..F.", + ".F..=,=====,==o===,,========,,===o=,=====,==..F.", + ".F..==========o==================o==========..F.", + ".F..==========o==================o==========..F.", + "FFG..........................................GFF", + "FTFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFTF", + "FFF..........................................FFF" + ], + "palettes": [ "helipad_palette" ], + "toilets": { "&": { } }, + "gaspumps": { "$": { } }, + "items": { + "B": { + "item": { + "subtype": "distribution", + "entries": [ { "group": "fuel_barrel", "prob": 30 }, { "item": "30gal_drum", "prob": 70 } ] + }, + "chance": 75 + }, + "C": { + "item": { + "subtype": "distribution", + "entries": [ + { "group": "military_patrol_food", "prob": 50, "count": [ 3, 5 ] }, + { "group": "infantry_common_gear", "prob": 5, "count": [ 1, 2 ] }, + { "group": "mil_food", "prob": 40, "count": [ 1, 5 ] }, + { "group": "infantry_medical_gear", "prob": 5, "count": [ 1, 2 ] }, + { "group": "supplies_metal", "prob": 150, "count": [ 2, 6 ] }, + { "group": "supplies_mechanics", "prob": 50, "count": [ 0, 3 ] } + ] + }, + "chance": 50 + }, + "r": { + "item": { + "subtype": "distribution", + "entries": [ { "group": "military_standard_assault_rifles", "prob": 45 }, { "group": "military_standard_shotguns", "prob": 5 } ] + }, + "chance": 10 + }, + "l": { + "item": { + "subtype": "distribution", + "entries": [ + { "group": "army_personal_locker", "prob": 150 }, + { "group": "military_patrol_food", "prob": 50 }, + { "group": "supplies_plumbing", "prob": 20 }, + { "group": "supplies_electronics", "prob": 20 }, + { "group": "supplies_metal", "prob": 20 }, + { "group": "supplies_mechanics", "prob": 20 }, + { "group": "hardware", "prob": 20 } + ] + }, + "chance": 50, + "repeat": [ 2, 6 ] + }, + "L": { "item": "army_personal_locker", "chance": 50, "repeat": [ 0, 4 ] }, + "d": { "item": "SUS_office_desk", "chance": 50 }, + "f": { "item": "SUS_office_filing_cabinet", "chance": 90 }, + "4": { "item": "military_standard_shotguns", "chance": 50 }, + "#": { "item": "SUS_utensils", "chance": 25, "repeat": [ 1, 3 ] }, + "t": { "item": "SUS_dishes", "chance": 50, "repeat": [ 1, 2 ] }, + "[": { "item": "SUS_fridge", "chance": 50 }, + "O": { "item": "SUS_oven", "chance": 75, "repeat": [ 0, 2 ] }, + "H": { "item": "SUS_spice_collection", "chance": 75 }, + "&": { "item": "SUS_toilet", "chance": 50 } + }, + "place_monsters": [ { "monster": "GROUP_MIL_STRONG", "x": 36, "y": 15 }, { "monster": "GROUP_MIL_WEAK", "x": 24, "y": 30, "density": 2 } ], + "monster": { "T": { "monster": "mon_turret_rifle" } }, + "place_vehicles": [ + { "vehicle": "forklift", "x": 29, "y": 6, "chance": 95, "rotation": 180, "status": 1 }, + { "vehicle": "parkinglotbasic", "x": 4, "y": 9, "chance": 75, "rotation": 270, "status": -1 }, + { "vehicle": "flatbed_truck", "x": 11, "y": 4, "chance": 25, "rotation": 270, "status": -1 }, + { "vehicle": "helicopter_wreck_3a", "x": 9, "y": 42, "chance": 10, "rotation": 90, "status": -1 }, + { "vehicle": "helicopter_wreck_1a", "x": 18, "y": 34, "chance": 10, "rotation": 270, "status": -1 }, + { "vehicle": "helicopter_wreck_3a", "x": 39, "y": 42, "chance": 10, "rotation": 90, "status": -1 } + ] + } + }, + { + "method": "json", + "om_terrain": [ [ "helipad2f_nw", "helipad2f_ne" ], [ "helipad2f_sw", "helipad2f_se" ] ], + "type": "mapgen", + "weight": 500, + "object": { + "fill_ter": "t_floor", + "rows": [ + "************************************************", + "****RRRRR***************************************", + "****RRRRR***************************************", + "****RRRRR************=======================****", + "****RRRRR************=======================****", + "*********************=======================****", + "*********************=======================****", + "*********************=======================****", + "*********************=======================****", + "*********************=======================****", + "*********************=======================****", + "*********************=======================****", + "*********************=======================****", + "*********************=======================****", + "*********************=======================****", + "****WWWWWWWWWWWWWWWWW=======================****", + "****WbttbWbttbWSjjWhW=======================****", + "****Wb--bWb--bW-----W=======================****", + "****WL--LWL--LW-LLWhW=======================****", + "****WW+WWWW+WWW+WWWWW=======================****", + "****W-----------W&-SW=======================****", + "****WW+WWWW+WWW-WW+WW=======================****", + "****WL--LWL--LW-----+=======================****", + "****Wb--bWb--bW-WW+WW=======================****", + "****WbttbWbttbW>W&-SW===================DD==****", + "****WWWWWWWWWWWWWWWWW=======================****", + "************************************************", + "************************************************", + "************************************************", + "************************************************", + "************************************************", + "************************************************", + "************************************************", + "************************************************", + "************************************************", + "************************************************", + "************************************************", + "************************************************", + "************************************************", + "************************************************", + "************************************************", + "************************************************", + "************************************************", + "************************************************", + "************************************************", + "************************************************", + "************************************************", + "************************************************" + ], + "palettes": [ "helipad_palette_roof" ], + "toilets": { "&": { } }, + "items": { + "t": { "item": "bedroom", "chance": 50, "repeat": [ 0, 4 ] }, + "b": { "item": "bed", "repeat": [ 0, 3 ], "chance": 90 }, + "h": { "item": "SUS_bathroom_sink", "chance": 50 }, + "S": { "item": "SUS_bathroom_sink", "chance": 90 }, + "L": { "item": "army_personal_locker", "repeat": [ 0, 4 ], "chance": 50 }, + "=": { "item": "roof_trash", "chance": 2 }, + "&": { "item": "SUS_toilet", "chance": 50 } + }, + "place_monsters": [ { "monster": "GROUP_MIL_WEAK", "x": 10, "y": 20, "density": 0.5 } ], + "place_nested": [ + { + "chunks": [ [ "roof_2x2_infrastructure", 40 ], [ "roof_2x2_infrastructure_2", 30 ], [ "roof_2x2_utilities", 30 ] ], + "x": [ 24, 42 ], + "y": [ 4, 13 ] + }, + { + "chunks": [ [ "roof_2x2_infrastructure", 40 ], [ "roof_2x2_infrastructure_2", 30 ], [ "roof_2x2_utilities", 30 ] ], + "x": [ 24, 42 ], + "y": [ 14, 22 ] + } + ] + } + } +] diff --git a/data/json/mapgen_palettes/helipad.json b/data/json/mapgen_palettes/helipad.json new file mode 100644 index 0000000000000..5fd5e057155cb --- /dev/null +++ b/data/json/mapgen_palettes/helipad.json @@ -0,0 +1,83 @@ +[ + { + "type": "palette", + "id": "helipad_palette", + "terrain": { + "+": "t_door_c", + "W": "t_wall_w", + "-": "t_floor", + "w": "t_window", + "G": "t_chaingate_c", + "|": "t_concrete_wall", + "F": "t_chainfence", + "!": "t_guardrail", + "p": "t_pavement", + "m": "t_door_metal_c", + "y": "t_pavement_y", + ".": "t_region_groundcover_urban", + "T": "t_region_groundcover_urban", + "=": "t_concrete", + "%": "t_gates_mech_control", + "_": "t_thconc_floor", + "B": "t_thconc_floor", + "C": "t_thconc_floor", + "r": "t_thconc_floor", + "l": "t_thconc_floor", + "R": "t_thconc_floor", + "s": "t_thconc_floor", + "*": "t_thconc_floor", + "7": "t_thconc_floor", + "8": "t_thconc_floor", + "M": "t_door_metal_locked", + ",": "t_concrete_y", + "o": "t_sidewalk", + "?": "t_console_broken", + "g": "t_generator_broken", + "P": "t_water_pump", + "5": "t_machinery_light", + "6": "t_bulk_tank", + "I": "t_thconc_y", + "U": "t_metal_floor", + "<": "t_stairs_up" + }, + "furniture": { + "C": "f_crate_c", + "r": "f_rack", + "z": [ "f_indoor_plant_y", "f_indoor_plant" ], + "L": "f_locker", + "4": "f_locker", + "c": "f_chair", + "s": "f_chair", + "l": "f_utility_shelf", + "d": "f_desk", + "f": "f_filing_cabinet", + "[": "f_fridge", + "O": "f_oven", + "S": "f_sink", + "t": "f_table", + "R": "f_workbench", + "3": "f_standing_tank", + "H": "f_cupboard", + "7": "f_drill_press", + "8": "f_router", + "h": "f_shower", + "#": "f_counter" + } + }, + { + "type": "palette", + "id": "helipad_palette_roof", + "terrain": { + "+": "t_door_c", + "W": "t_wall_w", + "-": "t_floor", + "w": "t_window_domestic", + "*": "t_open_air", + "=": "t_flat_roof", + "R": "t_flat_roof", + "D": "t_flat_roof", + ">": "t_stairs_down" + }, + "furniture": { "L": "f_locker", "b": "f_bed", "h": "f_shower", "S": "f_sink", "t": "f_table", "D": "f_small_satelitte_dish" } + } +] diff --git a/data/json/overmap/overmap_special/specials.json b/data/json/overmap/overmap_special/specials.json index 646e756fe0b12..8c10b8fbdd678 100644 --- a/data/json/overmap/overmap_special/specials.json +++ b/data/json/overmap/overmap_special/specials.json @@ -6441,5 +6441,25 @@ "city_sizes": [ 4, 20 ], "occurrences": [ 0, 2 ], "flags": [ "CLASSIC" ] + }, + { + "type": "overmap_special", + "id": "military helipad", + "overmaps": [ + { "point": [ 0, 0, 0 ], "overmap": "helipad_nw_north" }, + { "point": [ 1, 0, 0 ], "overmap": "helipad_ne_north" }, + { "point": [ 0, 1, 0 ], "overmap": "helipad_sw_north" }, + { "point": [ 1, 1, 0 ], "overmap": "helipad_se_north" }, + { "point": [ 0, 0, 1 ], "overmap": "helipad2f_nw_north" }, + { "point": [ 1, 0, 1 ], "overmap": "helipad2f_ne_north" }, + { "point": [ 0, 1, 1 ], "overmap": "helipad2f_sw_north" }, + { "point": [ 1, 1, 1 ], "overmap": "helipad2f_se_north" } + ], + "locations": [ "land" ], + "connections": [ { "point": [ 0, -1, 0 ], "terrain": "road", "connection": "local_road" } ], + "city_distance": [ 10, 100 ], + "city_sizes": [ 3, 12 ], + "occurrences": [ 0, 2 ], + "flags": [ "CLASSIC" ] } ] diff --git a/data/json/overmap/overmap_terrain/overmap_terrain_military.json b/data/json/overmap/overmap_terrain/overmap_terrain_military.json index f8ae0a542a99a..990c8e4fc438b 100644 --- a/data/json/overmap/overmap_terrain/overmap_terrain_military.json +++ b/data/json/overmap/overmap_terrain/overmap_terrain_military.json @@ -359,5 +359,54 @@ "sym": "c", "color": "brown", "flags": [ "SOURCE_SAFETY", "SOURCE_PEOPLE" ] + }, + { + "type": "overmap_terrain", + "abstract": "generic_mil_helipad", + "name": "military helipad", + "sym": "H", + "color": "red", + "see_cost": 5, + "flags": [ "SOURCE_FUEL", "SOURCE_GUN", "SOURCE_VEHICLES", "RISK_HIGH" ] + }, + { + "type": "overmap_terrain", + "id": "helipad_nw", + "copy-from": "generic_mil_helipad" + }, + { + "type": "overmap_terrain", + "id": "helipad_ne", + "copy-from": "generic_mil_helipad" + }, + { + "type": "overmap_terrain", + "id": "helipad_sw", + "copy-from": "generic_mil_helipad" + }, + { + "type": "overmap_terrain", + "id": "helipad_se", + "copy-from": "generic_mil_helipad" + }, + { + "type": "overmap_terrain", + "id": "helipad2f_nw", + "copy-from": "generic_mil_helipad" + }, + { + "type": "overmap_terrain", + "id": "helipad2f_ne", + "copy-from": "generic_mil_helipad" + }, + { + "type": "overmap_terrain", + "id": "helipad2f_sw", + "copy-from": "generic_mil_helipad" + }, + { + "type": "overmap_terrain", + "id": "helipad2f_se", + "copy-from": "generic_mil_helipad" } ] From 2a8c48d68ab351cdead3950c9a19df0cb3fe6fa6 Mon Sep 17 00:00:00 2001 From: John Bytheway Date: Tue, 7 Jan 2020 16:46:27 -0500 Subject: [PATCH 26/36] Use -Wno-unknown-warning to simplify warnings A gcc-specific warning option had been added (-Wsuggest-override). In theory this was guarded against being used with clang, but that didn't work if a compilation database was built with gcc and then used with e.g. clang-tidy. In that situation clang would complain about the unrecognized warning. The suggested workaround in the DEVELOPER_TOOLING docs was to add -Wno-unknown-warning-option, a clang option to suppress such warnings. However, we might as well just add that option always, then we don't need to make the -Wsuggest-override conditional and the build logic is simplified. Technically, gcc has no such option, but gcc doesn't complain about unrecognized disabled warning options (unless there's another error) so we get lucky there. Hopefully that remains true back to our earliest supported gcc. This might cause problems for compiling with another compiler e.g. icc, but the way the Makefile was written, it would have had that problem anyway, since it was added for any non-clang compiler. --- CMakeLists.txt | 11 +++++------ Makefile | 5 ++--- doc/DEVELOPER_TOOLING.md | 2 +- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 941dad92f708f..505b0ccb64e8c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -222,12 +222,11 @@ ELSE() SET(CATA_WARNINGS "-Werror -Wall -Wextra \ -Wmissing-declarations \ - -Wold-style-cast \ - -Woverloaded-virtual \ - -Wpedantic") - IF(NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang") - SET(CATA_WARNINGS "${CATA_WARNINGS} -Wsuggest-override") - ENDIF(NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang") + -Wold-style-cast \ + -Woverloaded-virtual \ + -Wsuggest-override \ + -Wno-unknown-warning-option \ + -Wpedantic") # Compact the whitespace in the warning string string(REGEX REPLACE "[\t ]+" " " CATA_WARNINGS "${CATA_WARNINGS}") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CATA_WARNINGS}") diff --git a/Makefile b/Makefile index 66cda1b6d6318..aee2300aa49c6 100644 --- a/Makefile +++ b/Makefile @@ -92,10 +92,9 @@ WARNINGS = \ -Wmissing-declarations \ -Wold-style-cast \ -Woverloaded-virtual \ + -Wsuggest-override \ + -Wno-unknown-warning-option \ -Wpedantic -ifndef CLANG - WARNINGS += -Wsuggest-override -endif # Uncomment below to disable warnings #WARNINGS = -w DEBUGSYMS = -g diff --git a/doc/DEVELOPER_TOOLING.md b/doc/DEVELOPER_TOOLING.md index ae2f14f195809..3c50ab19cf580 100644 --- a/doc/DEVELOPER_TOOLING.md +++ b/doc/DEVELOPER_TOOLING.md @@ -263,7 +263,7 @@ to avoid compiler errors. python3 /clang-tools-extra/clang-tidy/tool/run-clang-tidy.py \ -clang-tidy-binary=build/tools/clang-tidy-plugin/CataAnalyzerPlugin.exe \ -p=build "\.cpp$" \ - -extra-arg=-target -extra-arg=x86_64-pc-windows-gnu -extra-arg=-pthread -extra-arg=-DSDL_DISABLE_ANALYZE_MACROS -extra-arg=-Wno-unknown-warning-option \ + -extra-arg=-target -extra-arg=x86_64-pc-windows-gnu -extra-arg=-pthread -extra-arg=-DSDL_DISABLE_ANALYZE_MACROS \ -extra-arg=-isystem -extra-arg=/clang/lib/Headers ``` From 8c94bf55423851ca4d5b857de1c46af138f3a0d7 Mon Sep 17 00:00:00 2001 From: captnblood <59030614+captnblood@users.noreply.github.com> Date: Wed, 8 Jan 2020 03:55:33 +0100 Subject: [PATCH 27/36] various little changes in retrodays+ (#36780) --- gfx/RetroDays+Tileset/tiles.png | Bin 119186 -> 119585 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/gfx/RetroDays+Tileset/tiles.png b/gfx/RetroDays+Tileset/tiles.png index 053092449a4193fb30b7d7f1edd9d96f76615f82..8014df7f307d7e68f77ac98f21499ec17b70e54d 100644 GIT binary patch delta 117884 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 z zEB5}JEjQk?#t2gs1{dZ$FQPdOVN{b882n}+sV}dd0={$AD=}qf@ssnl;9Z; z30cDJC~0Byr;+KDN1Gm%52N$pCv?W8@tq&}@(t=;*)a(9l>K<4(Fz3_Zn0N8SZ7aj zmm9mKa03i~nI2OU-=WdcJ*VnV;&g(rS0F zvTpp@-&1p=X;Z;lX)yxU{z-G^P`xNCPjl<&4 zX_t2N5WrXklBkRZv6!5BnUKQi{*T0I8;TmFpK-rl?!#k51zT}%U6R#51!-=Vk+P@BtOD?=kuO?d8ud$(`GMwW5j&J%*M;V5kIr zl5^JuoC-)ox>2)~HlSFXbhF2Tm`h<<-y)rR*dsj|IID>1`Jy6{)OO<7cw&^6U!#_$ zlqwJLGVEL{OW zfo`pDJZ~MUrj63^q>q|)t~PWI{zP)U`!IhVQ!sFcxS~z9&+P0tz1=|239zQ~j82Q8 zvmG`yyCJ3jEp&tltX)iZ@K?^(Zq$nZ0cd}0^TYi*L*7^_67K^OX5jl?pB)@nT{P;J z7r|L|HZWk3x)O{R?}K%>{^RgkoxuGp8Waxn*pEap-sWqM(yt-{n|Wttm$(O|0GZt% zm~f(tM^m+fuJl!-ztXe|e~C8ca0$2!jBa2)RLyaID&D9KlF#fjy#)JnF0$^_Q*xRE}5EuB5qt`ZppZa+*t&15V_{v2MkUd?0p!Zw=4qgigL$cY@_r#U*?nZhDS z=Fq&0U%j52&_+cl!8OeGg7bai9v}?o$E~&t*O?5$MR`Bdrp_0zX4XMz;pWDJ^oiMz z4DGPt@%S9!w@iZmM!xAUQ9lCI(%IjC`Qwd}!{q!XIS9z6{pv)@ftMd}!%xY`R1IvF z?^uusX9(i2>ZaQ#Wm7Re@n?@C(|vy6OWZ1l)2vOEerC?4nC?yM^r zJxM>-+00xICcR}qExaEJ zZvf1@WF!_Uw|`lIXb+usy@{%Xiz)nn7mla? zVnV;w0=Dzbs16LP32&mti(pX62VhB1AamMq`{sq^{MSp^7izZ2gPqA?>ZNDvu|R41 z7()k&3HP`MG*P8huWWO^45q5()Y&?4MdXUg`R++J2LBTx1xUPa@6M_N$4H-|sSf

%wg~%05v-&Sh{$e9`$AmzAd~ z>WGepSJ1e4J~{PT_2y-HYq&mjOt1HicerIkwv4oF_QWMv7(*+4_ApSS$#$9;XM1Kg}l$ClY`6yC^T;T(<{6 zs)OlXGZqIZA1_6P4GsKkfgBRK8ZZQGSRxc1*OvLPx9R7!a+_UnA;80D&fedza_ku;YI2^fBYeEBlczU(irLTcPQ`V7r{}=Z#l+bZJMu z*g^_?(rQ1<865H*H=Xi|^(v3G0}ME-N3+u)Q6NVdc+TEzbQaB*kXNX{<5naf1lvnZ zSF~HfLgj}3g%oV`=2Sx~?#UnLuLNg%VRE1zclm)*d%ie7+-}i{c54UsfARF_W4-=i z6^HZOk`Ot?ag@DGo2fT%toxwysO|R=NK!uHo zFUT0^g?y|i=K^c+zr=7AHUQUvS7W)bSo5!n?cEV#Pg3)%Urx^y=JNJ0EErqwB34i5 zZoT>}X4)Ya9&fpbBtZTfS#tvh`fT%GKdEfz%TuGSJ)1}0_=5WWxe%lXMSlRtH@VF` z??5LZKEpMhy@%U;uNOuHl)3I#tmnU!@7kXn1oD4en(rMp zdSmGYI0Hh~G4uo0tF>R;s(T-i3S`$|Or_VcTOpI+jv`rgbZMpK7_#`ft+qD#j+mj z%?XX`MuK9GLO`bQT{!~T^H6GfY+q7bfpcf^#4gJl9bA(xooZ-t%z7%9BRguuZ7nqvu2RaXM%&8e`e6{n53cM}{Oj{N7S47yB7ZiI|eEh%5QjaV73H|2=jwF+7V^ z0(BJOn)!`A!};I!j#tB7Ky@`I;m~6|KIr7i*9%*!$d1PW(r)25qBCbzhY-T)x!92I z5Y$(k#RNYdG?nACb893-9!)NSJ}wMAU_LGl16cl7BQcaV>v|1XE79fD>|NP+#qSL> zQ#wzv-Te|29?vWtnkrkTDav$e>FVt*V_1L7hz)L}%VjU8D1CA@HVa0`Li~U(%o4VQ z7vpMN2YvI&xT`MUnpzfgmv8BhIPkLc4a9HvALFq99)k%( zxMh_!H`^u_7j8jE@1b>00g>BU%R zB)*xh2ivn zGG4yp>`i_11r8P7u;xjB2~mMXD0^CXWl102V7u_=FO zB1pEo>ZB-LoA*zEE7FHIpCIpkzDs-;Wo)44@(Xn?&FN5&B3{np^)C2Ar$H>8U^tji zAqSj&w3ypI=KChIEp0)T0xT9zTA9r`Lu{>ih);4)ulT}Fc-Q8wc(`C&*LC*TDQj#9 z+;2_72AVtxBMz`)Og;Xhda54?vejZ}u^q~Hx*8D59V1P5ByuNq$BCpw6+hQl6OM+| zJDSURI!^jY5wUbvat6mnI*7#Hr(eJ|s<8ZBu&fwKUiQ0kBq#e_3fQYmCE%|+@|@T} znWs7>^m&b{ICLauoA+z}%@~0=sM%@{O~gk`NK4f+^PZ!3@NZX;#y-ZbM8uxB42(9j zue1!G4CZS!7~Jb3tQHj|a+g=Qv~_O5heLyOR&n>7?Ao&NqHjC{a%H8$ex z&%Lk2$@8}zp?91(sr#oXL0Bc&^Brwvd82T9vlxtNz&4q@46+4{8N+2NoRmd_PcA_V z@SRCrH(z#$+OgFOO)aHP#7x{}(uzr<F8yRfP|njjW}ZTV&g&L%HXBGxdgv)pZpZ zTAHbF4}SYtM5SUQyd0t%zHJO_=V6!?7t-CIfyFY^+K{W0x+$3O2K`Ng=yzE0a5B;) zG-af5`ylD(j7|NFPu9w{Y7GHLorBoD(y(Z=XXUT?a?_GTkzW$+(+&!;u*R!%plk4?^^gC5KCk*U*+n6ynaqE$ono~uxNrdOi;lW9kpM%JHQK$NJ{h3^0>nc;aCXIeQLQ=5M%iQX(C$ufVhhpL@^CkT8JH>eSoWla){PY2tWXcoDU>kq)3n>3 z{q;Wxxq`FzUVFZK{G{Zk+xU4n&zz7$t{3E1G#vkoO`CzE&AWlRDV?Y^KY^O^3_F~q z=s-KdSw|emx**kH`0Km8DtNw#%%&w@ptn!`r+I|r@cx5wRQ5r_%C%UuDd5q5@V2GH zfhAH!z&Zzt(QcQnZPTE{asu{y4+`LqZf7W;ht`HxSBY(1D3!5@?$YpI{WVq2l!_59 znwpkBxUZ|RH(>;cYl%r_$w+fF`2y8{oXg-VG$rSY-?O4hey3Gwb(NSKJ2sUt8brX2 ze#7WQQ*}@Het!R<{LjSPAkg8xOQ?k`!DW#z`(fp9=ZVj{Y)}oM&+9o`LfsGVx4e4AsW1yAS zo=YCBt73!it`*|<;W)JmI*Aj0D3w0h8;Z23ELWJ>7|`+8;qV`TfhTmy0*_fyN~DnS zvtbfB1r|uL0ow)ab9b&^wZuFI8LKU<;EDQn>)~15*eakn%Ap=+4ZDAjgwtZ!X}0`l z3bBj``Pd>_g$uI!ju`17HJ?Jww(|;k@I~P+;3>H;lAuv}CsztV$LJhnU+4Fo7p1nt z0kME|G3p9l8z1u$kl32UCfw`$mrN?2T3cz3&2;HLI%_>P=C6fJtB8X|SdMm@QiA>e zrpa5F9}!H9r>u}utOFz2g+ER<{e(w=wp>ZV^Q*k@5M-rU=}QL&x*LG0;4+E<;_R5= z#ig1dJJW_-M$)QnR*1ylr|w)Or%pxvPR0L0K(XrGD*iQGeHWBKwH~Z1{<=6Mjq)sf zRU5n|>YQk&t}U*)TBW+f?B;m7sUiTGRf*>cE=+X8_%5Km=4mzg#}70RC=~)B`gM!Td#ra6CUOEd>Dz zF=Z)kkCQ8lM-y$AlSa5$_X$HD?5*}DTdsm7OQkt!` zpt>$9rMlx3jKS*u_$HcglZ)8uD*OV7Ad>S0UXx>W6P5Rp?AzPh7QVj1UqnBCELm83GwMqn=;t zfI8Cj&nX#x*Ne(si!F6vDP&T4Mv7R3_r(Jc>*3(lC|wi-cBdJ^1F(6%G2?xbKljIv zyFY)1Ve%(ZDq2CtYl!E1<2cQGs6b)r4EM0Wn4?8|4Cz)8#0}M!e&4hcjdv_x=~mI2 z)LRS+lv5tN2OZ%-0V(ZAd;lD1V_^M-;MK#lTnUuAWoj0*B(n%p)%&gI%Y16T>|a9# zfgVUy!oj*|2CqgOANMxu&w*P~UVJ;v*-sQ6?F24s3nU2%A`}H$1A2@@>N7>23JeNz z55pXr`nbco?Iwf9pu|^AQ)9?Ww0&Y^Ac^83{zc<&T_~?sDkp;v;MA2<6g|DX?)4$1 zq{!XL-YE!h{cq^&Uf8$xyaBzq)EIa>Utj&g;`jD@WS|Xm#YJ0S|3+30Ae=BSqEU6q ziMy(bdEWx4w<_Rg#VR&SN=P|!l{VU&lw5k*6J@%a2AhfwHo68D5r}T+bESMgRng74 zRcx_{&Y{InnE?EXx@!oZY;|0GeKX8^K3JsAQ8mK@P8aFwbPHVTo-hA|7eq_WK)7Vo@_-Zu3Lg{g+%|;@GA<=HYxG0?=ib~=WCs*>2XZv*Rw8`zG z?W;Oi)NP*L`lbGAa_7^1V@ANm3B{1{aQJx2wCLgz2GIR;-nO>2^WP^erQIC4%4oii zZ>K6p9&#}Ju9d-|jxG;ux5t@6uT&BtsMG-F)@B|4-q)EB#)gCIb#3!?Lq1dz;|v5P zT`UTD(ix``sF%8T&3F3XQOrTQbD<$jc|*KLsv*d*>@Ok+#|g)i?)db04x{kUmw2>bM%#?bQ_&NJ~nZHDCyoWO+w@0ed#^v9XB_TfT~+9=|B{ zDZM5uI1oq}d^21z{)6c8H%{*RN1_gm`_!+{5WRi|w9zXt{x-*bulPWDmjataA3 z5JLUibnl}ugclGW2qUMb{SRUrm;;;gkdk%l5Ehp1&sZARch}#8G}-2q#z(krXKUHWYgHnR_?>N85C@V{=XPZeUEK@e2)JSffC! ze3$#|bU6vV$_p5|YYO5LcBa8#Kec-$fA}omTP$pi_sXa#;|(XD<&2CeqJu}cCyM~d zq8}`(1Z=voXeP)5C~aQ;aNj!a0;c{INlRXs9i$kwVuL^)jxC(Bp`vDfx`2-FkX*^h zt2n1SYQOCK*^|;S<#x1d&1dG98$(b*xy<*ytg*bkV=i|;_9vR5|49oXCfi;A+Bk}c zKrVEc`s|VYd1vmmk;b7lt=oTX8mOFLTabGCW}LsyKkjOY?sz zjFKHr8nSJ#pc zXE}K)fx2Ic)1r9#+pwsMatc-}W*cJ(Wn*OcoMD!2zs0cf z7@(%J5X@CIbTd9%anti~{gv!F6T_)KLwsbq6J9(!zhUQ~?SlUE`6xWvi?~g=VzcoF z#$R=1UlUisvtn@qHhtPiEdr&|;m__#aE{W$y6~cH>{zFC>M^B69D?c%U&SZiGA~U$%ae#J}TJv=|`_z&G~Cq z*1RlI_TcqeLo(oO(`r~53D#`<557vmY)#@QX&WCqJH?sWhjTE*qws#O9j)Iu6^DzL zSCd%Pbquk!A3gH#prd}`%p&vL$=qn}w*#FMgssS!fuq+wu6W1MgdrE$3mnQdWTW#! zI(TU&LJ+H=Tibr>0`JkuSyQV@JYcU^)qY{qP*M^Syw^C`%;{}65Qu37#EBxClKmA? zTX(WkS<`%w5oHoHyO3<>Z;|zy@pz*~>OWOFftrd2&hU){B!-ro6{dJB@Tc(LKwbDy)_ zhK{K*7_jx`HP{Ev17}3<17NzT1Oi+9q2O{}<|jFKTy>f+(I_gaEg6#Ak0e~x~F)A*0q0eEG#3=I|)ID4T zvphmGM|RFYC)>k}QfqkxJo)Ut?dA70TrX@p6{&y&W0!5Eg+d>+tJuF7Hg$Mpy61L) z+p`XWWt(iE)7R`8d7hLzIv4%h&Y3r%%pHI7po6+fTeZh%Bk8w_0Rcz((Y2K^#F@fi z7FC}Kpfm8THBE4h%8}Wo-w5^Yu_Hn@q1H>pYrMQn%NMA+-;Q#HC)7)1Aft5EGRk4y zIqtM^ASBa1H=go~WZCeDfLqYIz-q<#{8+7pSDQiXigjvMkYlWG>gGR>&rC$cUtKJ; zgf4`L+w;^LfLtgExuZ6yA259XR6Zk0z{~^#&_CD1-OB(8{O6Kx_yg6gqUDC&+pMpu zo8|wZ>8zvLc>b@SAi)b1iWk@7QXC2tFHVaUcXueHKybGfcZcE>DGtGlLve}(DDIHp z^2_J@oac|^Y(kjqZf4KE=gxiI@sKS#5S8K2m(XKd#^rs`9$}kY>i)NxFGi{mml<$% zng0IDMeuj_SBg^O+UE507ED+R>o{vJe8Q3AL&k{o7!b_(n3E{3RuNv9_cq7hr!&@r zs=jOL_^J}ppckDG3L}z8HiVdCCdpZ;R+!nA9O04v!SI|F5~5M`pD#``9(L0#Qyr4) z3yhJu@z9hy(}aeZx+(ZGWW+FW%5h0LE$W(Nc(;b6*5A`5=>B!a3ZFgE<}dcnOPvEJ9{wVBqC}iPI=<~cF44tIZR6oq_hsllQEi4nN(K2$Z(6vEvzW5e zHXJfmU6~xAC1H(=(v+K7AV;PcmrPr)BWlTC3+XFIM$HP|&w&^ES;3UHYs@b#o> zzWyUEKaMMV&?;B+dxCt+EBUqVKl0(uIB(|@z&ZG=z*s^3a!S?=)QA))C9yN>VK|>m zsD{qgMx8CM{kJyMSq|5I;b!MeLBp%fWr)yg8`aRRuN<8R06@~{Q>~hR_oKqaeG5X( z-%T5Y(slL;!<0FVD$iLLh2%hO#gQiBQ1f}KP!QD~W6>i}n+&DYArD98Wn!^E7i_y6 zKV+PV%yGhp?oU#J%qs{dC|L_5J~=oBSRPf{`#3nDH(R^|{7miLzl~H&L=JBzityie z8tWe30!+z&V+4i<)Se;Y7TZZ6ZD1xWPR(pXX?KeK!2?64!s>t0B>6Ha=_QJ@LOqt+WQ+v*x06;C~+Q}UOo6WH9hU_ zD{+iVaa&TGr?2I4Qo=3BxGs+LmdAe0&vrT9D@iXMxkEaBZaD{j`p5h8^*)CEwV~j| zya!Tu4BzOG`K8VQtL+<03Oo2*e}?w!p-UmbQ>AWa>no-DEmO;WX%_6H{WIyqipOUu z=wF%#7zPmFez;K|djt=3nQI+xi2lk&Ng5=7Z5Oo6Eiuj;TH|uxk3wkcnFspu-!Kjk zhq~jR0HGeE~zQ1yC*9_LmiMbSnKG*X3?fifd;)E8=m9NSr zLfv(bZ?aW%!!#ro0>VN{4LuNQ*P+$6dg@`K+B<)r%}?F)H>$&kctxJe_>jj^Vs4RYCcnN#o{?H^3I0=-kkI zhvRHt0*09_)|Yf34P*bQ+tb@Bb)0?7>G9UE^&1thC79I}e?GonrS-ZWtDJMJG+!2- z)fEpc5RERcw%f?6z6orl=Zoxgm4&9GuG!ArGuoQ>{6Mt~7n4^s%J@LczArN25I#)i z#k8NP{ZH`+VKw-%u6eQpYq0OR-b?v@_9cJa9}x=;+qx$HUiSCgPn+BZ6Ay|*Iq$%5 zR==A*8nylH3>bfLZc2H1xsL0v0RL3rv0R?dJr>X9*|)Ja_N?*!|JwY9{1Mm!MO*#T zFa_Gwab^?2Bz_n#r~=Q=&&MEb=o?K7#yAWN46c(B*U+0AVKNICasngBV?qQYmKO`t zNS$TN-#h1tv%)4wK{{ge`(NwLWBtL+5#jKer(Y`m1|r8U0b^Vt%#=FaG=fzD-7U}1 zAk?*bi+B;xN$YNI?3%>&N|Jeh02XLDcXTj`))uL>U@=UzDqPS!^g+__WZy|P?+O9{ zK0{(_K$EA7w6A}52IDA`yhc+yzjOQVe<0_N?TKKx|L-TTf+o6OvF8PyKJ_iY+Mmzf z3g4$pTK?jFCVX0!gf-EMPr>2nU+E_3mR{zzuD`3x@Dj@&&@p9lodO znGVYR`cDsVBMP9xnYo4wwz`e{Jhf|nre<;OXBEc3K}x^)#<@3c!kGJxU%~?%`R2;f zB7pj)FZij$`mZx^)Aaa9nc9!L&;paEg~R{5qEd`=@Ae>F^<$!}lBSOvS;{3|Kk$cc zJqO8zce6c~r328!PF5q+e>UU#9I;K(< z(oXTUAEU%sLyS8Ky1UP+C(8i4C?@KG3!F5rg1n|{IQvK?Fn?+`O+g)1#@SyDo$k?6 zipo|4c%AMM4P=tK<#IOeEW}kbLdlEC=k0;i ztcU(^QR6rL#=1BZxDr;f-Sztu&RJnO<;a*}J2CAnOY&mEf!$$N8g69JjL z7oO{PF+5AejYD$Aoo*p4O+7A4i2FbvU7RBrg|VdY&4qQP`Qn&9*rtm80yqtUwX=xShYn!V0* zTl9eazBexrY0 z-hJXO6M}7896HZk-@Ax$8bMWvEqfMz3~*}TWg_t-A#%*nCiOWn#~nb5j!RugiLkA| zfe9g?Bd~Yu`iqHwU7sV9oR~=*0=<*j=e-nxGEhOYvmi7{gSL@*ku+J4Xbhd{727f= zPOm{V$jvYe+<8eF3ZZ4J8PuqqOX}9czjv%@jG9b1Oby-3V`n`_M^b~RQ?#MJkdTAN zRb84;g#;12gK-w6ioHfP=(OOr8&w&+m^KuZe)rjoRtLIq?F9J3oaL+yH9s>Wu;!vi zp#jmU^(j6jx*#v2j+bo^E*gTv*)+}%S`149V@YfTcW_$>ML3SBEn`(wpc{b}D?VoK zM;u|O4S5x!Eb}2n#r0Li)Lm_+mKd^^x^PVyv(jwY!v750b{pqDq1&v3CCs?&Ob8|7 z_UDp6K>N0l-gl7tQ4y7V!TSMBQTe4(9hLa4GlibgN4V6#EV~g&E7&yu@snJxBx@y+ zKjnUWi7$lL?#cYPof^J@y==1Od)J$*yZ)Y{acx>ytZStzK_tku6j(S{?oSAS)?10= zoUXPvPZ{+hRQHOw@QCCH$t)gdW9hFQKMiXtm_mJ|e^jZxB}zhH-{w~@?Q-bxe-4%; zh#qCVv88$Ys2cE51@{YYYmD0H;0x46Jyv`InR_FF(->(tZ)MECf&b+~t?Q z2$}p8-n08=D_3R*Nj11xX%b5}862;4z`1)Zn<(BB-vS*=ffO-=P?f`4?*>UwoSf*C z+n7!1=NNQ^?TR8v)OIF<7i(`2M7Lt@Wj)Ebou9|}tv*K}r2Xn!Mb$8(E*OcXShwN@ z_Cu1v(h5rxz-U>0yl%G9JL9LtQU!6Hu(;8FvIMHV@=uj z@;v2no-dj&*?aw8b*}0TCA}d;&%+2M1dw4YVyn_*S+9Dp&g^$J`i=7*d05}cF_<{Z z7Wd|eyJ(o#hO}0yVW?U#Ao3%ImAYDXK#HnEjK2nXx%ec2qCi zeoV@84p7YIy$A4)5NDnP+weYaMVnu);I^EY&Kl5+Dl>6o$b#B`Vsc#EX z@3TbUrG-a{+beZ;;jDoa(E##EFEr=V_LKnq$L3c>V^Ij=)?hPwQH{;T-5(B!i$;e# z&yF4~LCyH20+~j^=cGSdhJ|3Ags-_x65rGQBvIF}F4vSv&P3oC9*N`U8_QYj`VUWu z2fSxC-^x|DJ)pOmK=DxULtP+*IJFnh9v~+`{$IjC=AC`Kw&Ag`V)MHf9T8BLL+kk zRt&)BaA8%(O$J^EW_7K(Dg}X~f$^x6#!#SO2Q7I|>|5`af_R^?lLs~wrTK14i7H6c zGa=0DaK5k23%e6>XtoL-U>JC-(d4k~6`nXf$SN?DnbA$&dB7^*ph{NVw!WQg%y?1q z-cYI^dKp|-{84rWvS$&t%}F3X+Cym;HyF2qm~2xlrv3>j&(jZ~2<&9pH}P9rhB?e< z@?i5}w$csr!48}1B=bQW6lY7|UD2BrV!79yFIu2xR9d);Q@p0tI->)@-xUM$M|gKF zOTGic%u;IjX|MVWnF;S9T-vdZZ_D34kRI0q@&t7V8yd5c<%bMa3KZP&KwrOi zuK~$LeqtUx`2w+9CUHOtzviA`1fQ`#wC%M>$0 z=<~}BR+Aq|#te%7GL6j5F^GAQ1JpQlN2!=;iW5&2WErxr@9NeU;q$IcXsWA$&n%sf zK|=YXJq;V=wAuKF$3pGpif*U)E9Fy40B*!(_)9+Q)CVDWbk2q!?!@#bi5(inuBL6I zGUqe1gOR=cCuX*B<$CAcqXZ)F$GU(7=ezDkFydeZ%w<$1w5?QFYx7|6K-mT{H6 z;!54x2}fi=UC(M_Mn(oPzdMIrki8dg%W-Q3no<^~by{!@X_u)jXpF(vPl~24IvwGh z<*plD!K&erfc{m*)tM&oUOr+JZ7XIZ0~Ww%Y7EsNAerlf&Fo#hXUyM;3XbbV%c9rh z5&A6t>flmITCtf-LyWtAzTaLth18FNscSBRHes=J#Tr^nn39-hLRe{ z0wff>?Igkak?L>ni z8qX6GxFPjJiOb~6s+Z#}au|X0I#Hng{Wna%hBExm8tV>C1{ZpMo4N_{_58hH1jkL+ z3jl;A2_Ywr*<7Qd-sCo?_9W+dTv@&PLXx9Mhw+TAeX(zptqVmjVZA2km|;eKV}X^sp$wFD)y*y!^xqPpWZ zn|GpOhywLA38HZ$d&=ShT`5X_N2FDgueG=_7$Og`@U{el0f95Q2UAAH;wLNqCuHA* z=2}xP{&L|^!zDztW?_4XMqM5%mSH1@BaY=t{E;H5(tk+SBA~><^7@lZhQhw|FhnCD z^i=BNE{aQI)1N&rfWn&^;-_r0J)_Awhxg#21Fb|S>8{fb!oOc9Zv{XGs0#jPJ zian7ue}|x(Yd=O&XZa*)Um$zCr;$p+zDkLw;rhzJSj5r`3`Q>ISri<8!|9=3$*T?g zzMO$OptN*sJrO<4jzWN6+q-3(3+&T7!1;oP7G9T<1LHvqHBkD5@)B_KsyF3-jkBFi z^W_~T^Je*yO*NPl@vF$TGrH2ZaRAyko;PS2YdJ6WDb;<^HcYxQJ_o)K*yNQs51${w z!56-+&Ak;Auy6Yfxvn(vhqgXDxrn_Utnd;(W>T*RoK4vu5NDvmsw>9o|C^-D3|^49 z!0GDJ4q)@3s<|fDaz--`<0U1637CFz`}vpDli;Aw>qe>wJxzWHL#Hw+a9{_o=VDblajJAZjp zrS&{`(oqED4!6>kPzg94Qp;-{07qq}b*)rpxPm0fUg78Iru@IQ(g@lf$<7PVa1v>MxTl&OD!2+}NkH*0uRw(*}-o-fpE~bMb(&J4KGU6?r5O_fc=OTU$U^FPFC31Ao>mLl9Tn4u>Psn0=A&n$TQ>Vku_>w0 z6da`Dr!Od60@>C5wTxcjlDrUT84C_WRb{r_dr!cZ?5ZUwH9bF9P3m=@8cwc!E^hkn z507RMNftfp#0+NHmm8<<3Q=B!J^$@fwYt2*DiK&HOVxJ1=X0LCg8hu7bL~D(nQpD% zeZ)K@CHGMbDDRN-B-lM4I^7&^Jr4wA&Xsmc0)B)RFFQw~2VVuJR@W{$0@oIdg|_8% zJ6W3^ALe&AkXx9!$boo;-`pU)vOuinvcsN&-;NnY61Q;H_crr|#_}DQ0zKi=VTPdw z7Xb(qQrTsUQmen~lD*q3i9hM$PrbI_L;M~^5nB?c<@G{bUqUyS3FkNQnR$}BE-556 z@0MioG0X+(?t|k8KKhG=$wnpy*6kf#^G2;&_MsgOMW^=ZF&*P6@La<=s&sua_@Ve) z@|Br>oo38{XcnR|iUWsB)&HQa%{654>FptaKxjZzgkS`Wg6aR{*ePB)?T#yaKqIPp zrq`4kSQ=|L06UD{ueknIBkrVJngR({XK(L5i%S;q-v7DNa-xrP3GfpOQQ&*~Kaz}v z26U1Tm6FwQq0zZX5@>0^$*^~NO%4brEB&^p&e!Lwnu%}dd!SwR83kZq{w|Naly(Jg zT_dP2wmb!pqTGaO>iL+PxuvY1H@W*4-DV^Z81}1%-pO8?37z)FMPDL?CK3YexpnX* zbJod(6%>1({irp= z(n>Mw^}`R=P_+i}+mvWkgYVMZW+3UiG4R7-Cu5s#Y)3hPMFg zw{CnMj3)y}R9Z#NZs+oTLI8!P4Sx-2-I=wc6-zec*29e34!cg|!klPrp|1+NO4?6C zMld7~ow!@2C8rgLION3VU4Cz|7(NMJ$d3PA-cICNf0{$jDRW)h@$qyRe9hV@*}I3| zNYNy0CQZuzQSxjlRHP*)0w|+zv0roleI4e-+2H2%s@i3p=|da%J;ZAqgX24!y3z|1 zbEI}FbdzqYO0?MnEQl)3?=ONv3k*>W+vTlt}gMS?_kmJtIVS$?%(twvQe7Lj)? zp!*+bk|a}j{|Wr?IgjLruS=pCv3NvDl^vIs?r*_+6e+LLhw4kBkEv#LQS2TC?-zEH z=+*NhqJnYKO>Ii4GJ%&#Fntoppmu;pKxv(a(Syhn!n@}E<2>@yGPAx?>|LkqW&7f0~k1q%QGoBu!p zwQB!U&S7Z%t9$x$UdpJq#D3K&@@*+E4lRU>ZLm%GV$28Wz#a_;GKd>w?asB6?p_ED z#zFGcjg6J-FT%1{)|&Ik9s*VFE<_8Knlx2N=y9vtf4mskY?4(Yyj=V?bL<1 zFKtb(v@r4z8y}Mz}!ML@%s{dY1+;u_D!nmP5AsGLoWzJyI>F_;A z+vhlm1gZHfz+dLnie)1t8;CrKLfq~Pw@6$IDbFCMwXG%2_!(b0m97{IW24}LjtAyu zBM$MF-kE&WnGo?I003%;t!KLnj3bngxgtL(ao5GGFo;17AVa!?hR4gMG{uIwlj7Y{ zv`NUgU6A4QGQ3mw3l|sqK!#0j2G6(EAtT$$kmk!kmA>TVCtu(mAP;>9?|9$Oi1c(k zCbgoc(CXKJl1I`Wm8;M;2>*t2?{J(7*N53cUS#ILf(-j*O&3xw4!VnQbUo-_PKsL) z5&X$QSxY+ipW{`)+(im(>`Y74`8jX~@}xh7Pc%J}gx71t%^R2Cb#db+*-%-nuB}Vm zNw8~$2?eH!o8o;!c4>b;w0xO5{nnmy&Autzq#?A3s@k;OlEU%i)6PtM#vdlz*fJM4 zo&_jG<;Et@6Xdi+N0+A;=`an+H;6Ei=Y)F+Jn)-kmD`Np8M|E6opoKNP;?$hwegbT z(%d^?pDA)zSkiHOy2m)0i>*R06-b%*XiW~dSnO&{z1_gkaR&wEyr<4 zX^`dX-@?}IR7Z`2+m{Qz@5qW?C0$;ZN_{Q0q=}(cM|*#+Tr|ydh0bdie>^=sJ@G-w zCfg14dHV5sJ@2}o5)in*ZwCNC^g6*!r`M&cW&i*gCFM-;NTN%h9J&i5UdtF9-ngR| z{wEd5j0z*OsdRX528U*5?rDTw0TaSoxVSPYu$ZvYWyo% zkY_f~T^93^W<~+q9$V`~IMycP3pn$-A#2=P6tgGL0$Sz|5k>)oWT2RshTG8tc>3Y? zev*lSN2XFgxln2%QK>=fqA#Fa5gIOqEdD*6{`^efgyZg@IkEi?c5QHOZJc+!Hh7OM zS_`@Tox-o-D@Pne*}XHF@ir>B+qMOVBmJi$ssQ*L6O~!2lm#P*ySJ1g3Q>qKH4}lf<6+G-rmEhRC50m(aOR;>}wLxpOv^MWB0ze(E`VpH8AKxBPNZib@(OU z)hSX8`asBd-lRvH=@X!8n7_yjKL>p9M+t-DbQWA3*pY$N_UvYOR&VHAD<=%uQnJ4b z;oG_&$O1>gqiop-j~k9#=yk(pn_s>hs}T5b|7Eqy#~>f~P5#Kro|VhpAFYDGGfnGw zG1^Zw=!M?Y-2hWQN&Z4r9(H(RUkHW7+xN&?zZjBlQ2j?B4Wvg{9g*a{Dvglm5Y8O8 z=FxCPEIDyrig0DS<$UDYKUU<6pjzbt037D4f{@yEi&Qci{qNehTC~=aq@phJD0!aK zwUB$Z&0Ze7k6EgL)6;NKbakrth_Hpmr$R&r;*(+NFI?2SV%A0fz~QVScGCbk{RV5i z6^Q#NXNH&Vg!%~HpADs~_5PYz^eihX-Mrd>8$y!w)zpJUGAYV*?@m#{RCuTPQUwPO z>;3c{M<6H8{GrjUmOCG|MG)x$5QS}WC`f~$=Eqvw8{aDQAwRP8P5|ZKT6xq83k!|v zh0lk_-BW{dOla(OdJ``sF|MxZIf;;E9|T|15<9eu5EO(icXe3a&pVswJBTaHzK-Qq z_e~fDHU8WrO)b7Y85z64Ed`!^Pmx*V_?wsB`|3QH?A^#Qs&^k+b9IhUZNZiXkf-sv zthzz5JsClz-c~%;INEQIs9OJm~_0ER`VhZh8YUVEstBsu4}YI8pZ!ExAWMVtwW^;$M=pv^ z=L=U{#-mh&-Gj&>~ieewe=4Y-y>ffH7FfqtLMNzr0b*FoUw}Gt~lZ>21`~qQYCJiT4S;d=4PxWm+H9c1D9? z*!7qQWZwRjXNFXCksAX-SB0(V>%1vgPicA){sadTH)SiFU1O~CP~GrgauQJ}gps+* za&N*JVaIEoV)`Z>KD<<-p1)h*w#0FVR*QVYuMMD`cXPEM+`%jFQq?;s>+(rp!pJLt zs|S{Xy2DCJbmZ-d9fUE$i&}}!7U5exIM=L{0w_{gc4R&dR$GaV1tam$qlp-6t?um+2n;E{i)?CJ?led`^%I%@ zqZ8Cg(6mI5f&P1_z~!~#Y9zTkC8dyQYAhKi+oNeLIOwUxhkrK6=7bs}q$5;ZC4D2! z+Sym6rv~zjhHJD7sRTNeqrJbZtn&7Vomd;8j<<7?a)HD4FbWmP3Rz$FgsO7Qd&rJq zX$bR}SwoWGRce2A#{lyvDSS-mueo;VT~ZOYvd{}9+giH0k- zf_vMlvJUI5dlAOm59l>HQ>U$=KG|KiHGHADSCIV^#e@9m;^ezx(%BL;--D=D<|T{j zCeq1dNYxqR2sEPQ(adhlyaN`vlf+8+ld6F2lvODi$>*KJ}dzMMG7HJUS zBC#ty01GAy*z}N}pqU>C{80VZicvi|r1K4m*(5-7%#>RCZ z&T;W(Q3^ucKI-XQ{);s19RZd!i-b6rm(S_lWY3cJZrKR(%in41B(I{_c0Qr0@?->6Q z07EukS0;#sjIvYubu4#VQb1+mmKT=%k#Q{9T?X|Hn#;I_WQPdy6EVzc#Sf*H$$ zUP#E=45C$c>tb+-Oq#>|d;%7jQ+o&3ne@xD5^Tq>y@%6>M*#qS8BTp2#74^Mf1MK$ zvFJ%D8popF>j#7L{ilP1`%0Y zaQFKo($)vLs=(b|GnfiKs6KU)^pa zQ!1;HyD=9{mT%!LI=Sk}2akSPrtzOvueKcHWJkT%$(juyOuGn zd}YLurIbWyF175%g%`s8-FuLua(9N*nuOKRM5z(-#kDWVl1y{BFs76q)NkWc-O$amJR1=!(FS%9f9fjMY4826Ex zpNYF>GFSU##eL^(@y*y7W>!PHTydBMFx`oJUz$RE*(sY@)Oj3|z`KEp* zXgaAchxmli?SsGAu5mg$nR8G-{DW?DUsJz$~Erc=UY=dE11lo{Ti}fx;^quUITKkBQo={ zi|$uVmu%y1{e;alR~tg=8`wREMJ(U6nqrm9HD?6=RvDdc8Lil*@Z?{K(|Xa~F(DKQ ziXkyEGqI@ajs9I^w@6$X^kw~M9eQE8p3*L+x>hGXA{&w^u0tAF0h&i<1=M+4(;#8Q z%s0(eNY@IJ>3_*3YPi)9z7ADsw$1!S;!O|$y5@SE#VIoRDvhQuC~2Z{Y^)(0MIS}J zEiRD6Ks@6P_vT0tqjyd$&-V5Dh|tKZgOlduMs8U)Q+=b8YhUz`kF(OIVN@26NHdyx zJZWtiAbo-S)1)L#*avQXP!Y!-618BxAtM+W8VB%2-<NVFaO8hVr><`a?<5?-Y2o^5! zPSUB?p|gS5t$S8*g(+3))crWp+BT?4n{iRw^lAYOcn=>Ci)a?ZydO#HH{nd zVa;eKclC@Njpi{mey5Hzq7gWosms;^-RA}V&}0MQG8rHdGXs5-si)kpjhHu4Q$Q5| zIs-}{Ti_=WA2~lMKirxvH{e^8fospNv~t!qBjPAEkl5Huzv)gI6P42uky8u$WnWI4 zzh(d8UMAA1n`RIh!QaoeUN{1!R^teH=R5+Aq!RG(W}!tQ&Q)&W5L}^{U}V!OV{u%`-41pV>i(&GbMJkDmGU$X3?!! z{vXsx*4HX16-d9PD?8DB(~X=l*gbh5@_vSttOv-|+zA}X<{8BG{>;&xM2D)l698Zy z2~Ygl-Dk~wgt6=kTPT%i91CRxe*6m#GqO|`TKvBQd7Ax@IRGa(G1CP^sO4TltmEm|EJ zAaLjf&6PfhlRp-W1M^(;ZIf?5hIsYL73hhdlm(OYw*MDCc`us7;aB9jr^7Z2X1mWp z9?Z+L4gZh$A^69m{8?R@h#z(m5W8vmvR3%qm*>apK60DvZ{`x%y?m0nBN%ReEKI~R ziYyY?8Ybkh5`fQcpL!&=PoBezo3y|d|NK|v8PK*-pw)PF9~ zcqnK%C;#6A;0L+nZ>}ylm9V~#F4w__K6YVHODFUg4-DELy(gt@kJM3gk#brQs*QKQP<8HKwmT=BI0eh4!`$&I$(tet{ zsGhCd+b}sA7;=Y@2mB7KUE`_RAE51*f{){gG?~81!WcV5-9e!aAXhqj#fz%!$Qq{C za2zzKh$+t6qY3f^QP1PgizO^9L!* zxzZLAa_8s11t??|QtzHlW2WDIy%9pUkvmiSkgeS3ip+!zFPO%Q@^n9(qZNx{cr%(+ zqx4&I12uDhe}C4YM5ayNhz3sv#D-UN{_}FrPC=)U+riF8>JOvqUXq^LEhB?-V_K0VWlRQc2K4SSDoe$Zwn=D=5S zJNYv{045gk%v5suH6|b_m~8~LLw+Ujr>HV+S+jP+iHEwzm-})G^$rp|J^v+8X=$mf z=)k?q;r87D{gXVeLDd?|^~qZ&kie-S1Tk68RFjb$f7KzdIsYa8*rYw*2>|ez*SGmO zBsCI~4wqT*sP9Cp_$yUCZveL#wAVKJMxW|+xDca}RvJ9Ou}g`Xt!lnB!AE1&O&`l= zx5VoxU;Y+h*miPpWW&ND1(fe2BWqxzho||yr+}u%s-Xe~4Zs(>2BVSIxKo)Bb%f13 zvmo8cw{sXvWfyF0XTn6{t^TCY?KG%JWB4yD$z7N<-~wfa5k-kMzxd!q7V~D2(F;E; zOigM%6cc3IG4upLpRHM9DXd=?+mI@g2q5DzGS-xElBE+DL%ieURm6I;G=7^jeAi%i z5Kpppf(%>6J!>e@dKQ5uPY98CdvkChdB+%yZXsGVQJ-_Qxsf1)3V0&(WUjDQX(AG) z#B8??v?1q|ux3a7X>gownsDm`fFg6fmD48*w1@ljeBpO={QUd`-A-jKr;X?H+T%5~ zyd}(b(LFe`cxfgmHaT9Y4JH`))WkhDqpX{&S(5KXn-BiFeG`?BHkhpEU~>1 z6=lQcmNNQ4pBe*z#_IFD+-X4Qx=z7H^>*hjf7<+3@7^U`XclYC!|Ma@c6@0~w?`(w zkD^T7%DJQU{;8*f=cr0m0P>dmBLdd*O``TD;*Qm19hk0d%)^MBv8g^6G-G?*1y~*6 zh+-w5hNfh!vYqxMLvCZGGt#~nerFL|_0B#gEaD2Ln`~u6p`JN@vZAOzE&o33t_3dY zr*oMf!se$0M{43p?T8I@ty73rvMo)Fv$EdB^TALFL&NVngsqy$e1*)4g>;e&Eu1$EkNicJ9|PGMXnC8|uCkpiAUxatk~4|xb|>}?{^rt! zE(@9&rK=zHt%+IWAr@N9`%R-r+=IscBV)PEq}5i2L&Q2GqsyyktJOW48kc?@d-BP6 zcR~`C^xENny_txgxa{=aBULyY`&7BT>MMNe>)yvbW-lMe1eqA+M!kBY<9~>1hv zZX7o$Z-ZUZ&YyoIL_LZfooaR`EM1{f&hDZfpwdIw8;Y+6pfwD6m>5Jkj}LA07_-+2 zd2Yd1>YwwdSPSmn%yU9_NEP~zkCDOy0>QfVjW2{e2DxIUCAH)C=|g|`G5>qd?@wk8 z_6x_P5N@ok3~@WAai7b7-?v_oyVla!3MXam`u2uCQa^uOdy-3h45`y3>iqnp8@#N265Tb9M9}cct3~v;1R!P}rcs5lUqdg)mU3K+L7jVvAFbFIdHc?2 zbQ*}zIu?3~=EWO#)?uu8#YmAHlnk_yqIbf~=zLhoBz`fIPo&}C z^)49ORlcg5z|2kU3szUO&)VO&EErP&+K@s<{D>p}`w|jAT7T#t~( zPBzUH>)(_InNhz~tS0)~Fk+RLEj%}VrsJ<1>>p%Y@555hk>{^${w?xvWPV(Uttzfe ztc${DSWhObbxQx4JX?YZ@G$*F)h_>9)kUSDW*A}l)gb2(7}IV)5ljd?y9=`k^`6C? zJH~)z+8ZDC@Z-%8wzmaeA&{iGqU{xp*ScNKOEh)hM#D-Bd9sC)ZCy-oqaXNPt-@#u z_>TrVr%CH~nu?NbicT{M>)aAEKX9j7A1=}K`_3+w!h0aJzR%!&r$}L1;D9g>k@OuF zxya7mEZaU^PO%4k1ARY>C_d<*aSeZFM-)7O(~(>Lt?T^QS+Y%}1k!9}i333$jr!tF zB`?~&NxC@QYO(xEU8SvSRo1CBUtxv*AGQe1j%n^sfhw_SH#&n;bV?q!M6Y}YMQ8oz zSFV9axH*=hvA8$sE^1^ag677B`+Ia}`mhWdYKw(wT2)R|aSMBIiRnIA1N5(-XM>SY zxi|~DG0U}Gi--NB2t@QbT&(QID=Kn!SA;j`&f6x)#+&6Z{BoG{Y$`Hk!_W2()38EU zmj`+n3s1k=#W!Gqdboclf{BP2fCOsnjL*092Q3a6Kz_+ULQMX#h@eQRbTdg@Su`16 z6tk?@1bSC}@~{Z% zk2cFSA%8qFGVNK3C5Vd))E{H%{HdxEjS^c}oTJ8p6rHLIJ7tJ)e#BN?rO~jwj4Dkx zp=iCTO+AhW;%-(HYe}b}PFgCps(zZ|``d^M7~3hz z;{V%N<@KC-BzRr_PNK|7Zc-%0goJ-gkbl$M+osu$oTo^`8l3t1=ce(6xk7r4=`YPC zXo(pnL$qD`?{Aa;=*>(h!g&hQ!|7sK%gm@wXI*=8A>4RdV1*$!^L_zbGg)4|_hg#L zi8m7@MTy`1p>{7I8mf64O~Ez@WO3w!y|Gc$1Ql049hXRbSRRV zaw?IKlL6h;n>gxV!^5Q(>kYqFzD$B|F>4;=Z)E$wBWg;t-b8frm0`R>n0A*jW@ z3-n7?y5&HhN}(|)NIQo2K4sq+1%)jkf*UhOQdY(M?}j*Vs!;-42Fw7H-1JYTJ!|T_ z--}DA#adHHz_A!S@j$67_}$^qu)aKv=|qxe@eV8UO{W1>{ntCqnD4znrN3Rj5|$kx zWu44q{0u5k-el@%@J$6;zERN|pS)4!4S%k~kn7f}qE#XD9vgqjc17sFH`^mEA!hhI ze+J@^cT216VXINHq|sEiK7$i_1&OwD2^A8yyR?>;+{4s8-x`I&-JTDOrDlUSWA{9r zT58vy#GfdBQb#7!~Hoy9>?1F*cGLr{aa$`C-(p$wx21^1Yk4<~ul$*Tv3b13X zKUu$~*N|Z_x!0ucf&`|TxK>?dKCVt%5j^Rrov=8@V8 z>2*JM>cB)L=!S&VAXn-0^!yExOcmo*xbgEq+e%{gWS{2&p=oBQseQFv z=G{;*XS_w^mT+J2#1|REnfE^w$cW=}z@E|~Mj5@=A>v&o&@U`nkkW;ETHb-MOUO-i z>#XGd*X)18suS=*x3Pd-yEr9Hrw)lz7D zKuIY(dHzb>6|&;EW>~<@6t?c9dES5lSa!+QJCn<-1>XO)8uC^ZTpc(pKoA;|G%@50 z$Cq5ib&}~!4q#eL4F@I+DxC-Re`4W>C zrc-Oosg@oO9P%U2#>h^zEXxaL+8*AA4h^Q8_iZbZYiIA7?O3R|?eevBF-609E_q8^ zX1a+p`AXBBbcN%I&&KvxWyhI^0x}jJT6#ia@yVJlB{35TF?vP$dX8fVf6`Vd5GQhA zH<{RJi9kATtv{Wm++Oiq(jCqFGQ${z%xwa54F%XB3Ox#ByykViR!FoTTe3GY=ZWx) zP=1zL0py8`TAFkUA%h5oILJ`xG|u$fy|XBJoeRGU7V*Gbwwsxq=@*F)3FLA2TE$fO zb872JtMx)gfQqeXqnCl@e;a=k$?+6MZ1uiU8U7p1F=6Nz&;(WgZ&RvcniJscW z#t;8|{-6V3Z3+R%`Y6Elt0J)x->jAHlN1O?B zl7@lid}Y(C%5T~UjC~9hi5y9`W`9I-ZnG5}hByDjSR`>|Q|COVk1^%!P5VYpgWI~~ z`_koiaS|Z55+z?&8M=A?GYp3`FWvnXpRtwj@34HbXw0oi7;|w7MY=@i-ZUT|A*@@;k12o+Pg} zZ}#)Niel33rTj-DZcuWD{mOczSMGZ_=308(w}o*9*J(D9P$-{=y-D3~2^TH;=Vy=i zNFg481MnCy36UCA8pjtz2@rua{3ihKLQ&{wC1H&mD$DjgPmiyrely29LyJ3My#yrThOCqf%=w!(~txn=5SN@9+C>LA7HdWow>DlvH}e;EOs65)lUH zC~z+bVvx=@(K6kdi)qg<1Dju#v(U<{Me5)~dbrX)U~)e!65)jgi-VK$rfo9Q%0T}e z!Au*sEB5orc`i^QFXGM5m3;^Oxj;SaZe{gybI{*oIh!@p7I0nbWW+J=-buSnuAvKC zwJLYPM5Ta??L&#g^X;N;?qrstQ`#kc**?Z%bS}D~z0AYyqI&kRLa@v?wYg+Av;2ak zGH(~|d5JG@fN!b#ySC>RlI&v~Q1|6$#!j)F!19a7IN{^_u;+g_caJymY6@UxNyzjE zPQVW^H$pyw%!I~;0F-5gi7dSbMG`p-A4Y_y6k%Q$tPZq5`oH^f5N&DF{}Et^ohy>z zF+x(#J%|Fa(2D<5W1!J}$we4EUQa!X-E_i0!<-9O1y}$0kNDXkCYbVm5^SSg$^=UhCF8h!oK_}F;7%sJG*SKT)=p*J&PbxFt-D$E>_@?!>K zZ&QFVErh(`=K5XK+Hs|3lb8;gHDAdab-i;;^e2g2EG|GQIbo=P)tB|ySj4WpR}jB5 z=wf7qsZ0#ox$?$)CGcs(9rC%3O_FCT*R8jyAYeyt2lY$u-daZ_7 ztuHE{Mdw@uV`q>576m(Y5H|;P!K~x6_zQ6!FTul95IHM6ytyLce&21sBOo#@3Vi(v zjC!vSzhZpvH{<(rNoGIpXPz$^ItWIaO8VQe%%du|l-=Rh!W>|Uw|7MZCJlp${h!lj zc&M{>+02WTwOa6@13FT*KU7hYLh23;XLz)EBrFJEGW$5k*MNQif90F~eIhuLbtvYP zErQK^g#o==CYX;yF4hk5xgLF(Y$buLm1K3r6$=^*Os1H&1cDhKk^~Cj;(KDq?Cq3c zTw+Q7SjB;5UL^$Pv@@7pZcn1FA4Nt+DUitc)R~f6TOHhfiD~Ro?rVfR=x8+g+lz8; zPqK<2AgS0afikfCok`}A9!c(z^)#*aALW?)<6LxnW;NaoZcj_kZ9<_PW6JL^XyixH zGp#bwNrjCZMem20548Nsn9!pcDTwx{39be%Ock~vfqMYN@}2gA|ZH{ZW&oP5{M zR2V(tKQXt+G#?nVOJxPnTF)tM%T!V+W2gYk0MsaS53DR9wmkhhPxRn8=d4Kqf6Ihq zC2sog;_&WqWEcV@OnmCUYLE$N4eSN9LluE64rj^t)cs7Lpp0ttXpR;spY}lHhdC6W zK=$yPo}xEqjlZ?s!iZ$O_kL%usVg1beMecQl9M3na4Kf2tB{w5;?Yx+4_NI#Rq>6e z<87vdl#gHa{?)omfnvBAzw0DqQX|T@*gvjkVnN@QvHG||X3mw3)vNlC*Oki|hQNp0 z3P?wg^ik|kLGi~9Bn6Yhpr0Kfu_)R=GfHm;kR`woG6eY59|`#0j#8RIfT#|jp~&hF zR;S?lXJq&zLT#won1pXa8AW3B%_v3_lWQ*-qvSt}6otqSAb8UnYjp)fi>~fgp5Dp$ zV#(<5S#?O)sZCL|9lJYhw4}QSC^XxN_#j?j;}i^7jK2#R^o_tRFT^WIEdw$C%&U_U zmQ#|d$W=yvrpaw6u4s73T#0OiHMVV!=`m#;VzBfzew~Y&Vi=!l=_?NmPu{zq{S*yS zOv$4+?6C@B_`7erYTELe))sF_D*vgIU00XzK2@l87)-=T*L>ma+6%eC#PBLAt{r@NPKVTNUlUPQ5SxV*WwminDqCH1hKvuW^iu`BRqK_-BMn}hLU(%ev+`j~J z&c|QjdN%A@DS{*gf_&A9`He9Gd5kdbf3y+rCCP$ zK@M5Lh}5eh*r+~gBu|ujCE*;`?T*Nf(Dpq8+H;Dr%6qw~RyCzoKG!+nE^5>~ZUq^E z$&x-w6M$I)CzgF{pCpXeySMrYH!<7#zMqz`Y}eW~b(?S|Xxw_73rsS~bRO$w0$SIp zbVtYwxz>p*H~&d(XunFlfoF|EyCRGSszws!+$|hE8SF*rrA0*X!}EHt7gPuua!Fq`j4bp zE}7!r?t9I~D4>0h)2P$-k6Ti5*m z2)q}3%|$Q#c-Xp%k&&zq8`Y1s4(h!PeXzP|h6$572Gz~ULdrJq7V7={KX{V~3eomn z473I1aelR@20$u1I;>g5+c>W(tLoI!2fciL{FP5+669C&9h(|&xzW-N_1<3Id)NHf zvc!yLRI*NwIwQyeihdO0`bX>U2YuP;hK9m^5~r&(D4)hJCY4Ap>?eB?C#c&SGSjUp zx#6ei*#Lx*x{<;tk7%E8qD?psoTb;lo!J6itn>TWm^fxI9-Jb+vH5P_T^}^wlQM_i;c5B7`*;{a9NT|n z`pnx#E(pwV5^?8XTFT*Ntx1o?6^EtEWDdep(afo9_YY!SRYRMPghPuyusEgg}P z)3nP$rr023a)pjpT*{;k=(FY}lLXh~Gd~Hf$tTV=X`Y9Dac9EKU&AVW3B8Kn)0BnY z^vib?B1ukSd*z_14zM!GXxC2y=ZUKGG9-TIoRFe&D!x=jBaRxJ99FD4n5Q16{#TU% z;OU=_+O?zC2vC04G4!jB%;0@ldyM;nYMT$*p!yXo2z+PVPqA10x?48$4?%m>G6gXH z>)z|@$x3$-B;+<_JOABNgE99C(OTkR$U4!q&vd;m3Hp|&^dE2p%YIlw1%kLFF_>7G z`Zt_5D^%qFSN+UYcq)VUSGUgo$fk<6n($)*vXyIsR5bBJ`s%=4ks zQdK>%1-VmI`ew;KFD(!hl16IunTfx;e=+@#?0ri#!SX;$`=_AV+w?;bHLm9#W8O?QyYIL6D#!o%KB-%kh;$irsv|&_8ieAFZ?dAFoyoVNn#xlo zM_D=|ejek^Z(`snl081OgJ_8J;l_{WSlj?uhR(0&dN$2r07PGaq@5Q<=%Lnn^3u}DMlsPG0I%JUpC*?XncWz)21z-7e zjii6e@4zzD`874_jw9-v66~n_sYOw|N?H$G%Q5=fpEzm(yKUlc*p27O=C7N{r8z%Z ze~o>w7MKZ(*;`aeEE$dd$oJ#(77%m@B8E7K4MwY-F`K;O+96y}MmC5hVy@B^z3Wez zYZsg`XK;G{p4>hU00cRL8|KLRQ5l43z&T>v*J14hF;Q&RY*9#oLReI)25f7|f!oVE zr``G})9d?|9gAct_3v_%CFypgk~^Xh`d{+X629H!c$-#Xr+DmivZmkjF5hdCyHA0L z222xfmQ6~!bWr^DgC}y*7qrYqH-O5rUm9C913ox{{xa%JJqB;vwmbY>EEr)eY3)&s zo6jT|nZd!5kx}ro(=h)kr;@gg{IqP(T>@4U z#dL|nV6HJOFQ#GvOSjE0aaDQaM?bdd0j%7jb??63UKN?X>)v5FZ^!2BfC zsG7x`(i_vPfRC5CtLN|q&qI^0O3V!<9duV+mZGcF)Guydr`8Q+w}&7V2OIP!`^CCS zb}U4FuD>O6mmkXGmumoZc$5DQdVzoW9>r{J8oTsrMQO!Zu#k`W@RS>MdLn@H;ojfk zkpoc@0Pf+cZJBg_XOdcRO7g{t_fQdC^5mm-+19sEt~r5B@}ZQ$)T)WEjGrSBX@GC* zlFso(D7oN_8wyAPzMXGyB$Gh>W8uoye_mvdE(9s~xv&C)J}jIV)^p!6dbRIkXQ!W# zV2v7}ZcY}dvOjo5u%LtktOro#puzZo=14U9159K=9L>q|JsZvdl=xqITi)9=q|Pyx zWg=a4ovl|H>3>{YG)q$#g@atPz4ILl2q)D&+9x~yJ$mOY`&*sZqjR7&^!;1KzWhR% z^8Ag8!QfWf(Wm};c>k^@*ez?&Z0*+t6yi$r(G6OI^#U}X! z**2F+;*&Br!Li`>7p$GCabOE;#=EV->GhO>WJ$!6g_;zE6hp)>wk|1VDIY*vT`TpF zjUKVy#H}X@%-*f1NWu}5v5!WzWV%bTKFs%RJ$z28f~Djq$q)(_4U~)k+`}CQbYJfD zZ>WVh#a?3E`V;Y;GdKO&%T5$EN61Bv2#}g=5(_VCopQ)@u3~)0;LLzccVp8!akuZ zo_>QVNI$@%LA(&r9X47CEkPJ23=Fc)F$8~ZX?Dg~s-p=S-JcD08>mQ{BFqZCOMh~w zvVjR+^oImuD7jCVW}g8E1uWOp^qrrEuK!R()FcF_EZ|8@(q?$DS%LZpdf>}Av#t|A z6>_Wr-B2D<>{@DPOopntVDrPH^H0QJ&VX=6ON9pwiSm8sV`ns?W%f?Jz8s8Lx93SV zAi%sbBVN1Nc?UKr3B5mFexdc|9UVtwe;;KNmyP}-?`8i-GZKaxx|I5E6WEV40lB69o{btSA*>EZ{XJqOa-SF?+ezr zVIk~&OBz^co%gGs_wXYYf%4?gSNNz0^%4cD7#hxos4EQ*%kIo$hpIgFaLZoh8W@3b z+gyvk>9=A+cUxIZwz}b6q~G3ahrZ*x)37JzqW*dvge)%xy2_~K>h+2@+z}BCR5_JL z$oG0w)&$q3m1E+H$&>VlpI|}Qz@k!8`R*|HxZ)w&U&q{N=(*%U8OrAB6kX(H8}`yG z8nf>RS@oUv!6O}^P@c;#qApI5Vs8Ri@(U7FQxqo<_TCdR^mKD`1FaRxVSdD<4P2p6 zGoS1K_fMSPdApGz8JQCBUtPHI=Yk`2tp<0HV<+Lny%W1rfZ{Ok%vyt9m=i|g=Evia z=3(r96`P`&&dS@g^PRc>X3Y&t(xIyhx4;k3P7$;q_}VEshp_!yo7}0;<7~)0Eve6U zDz?%_4E*0|HR;Sij+EteVbFwaRIMer_C_*&YDUm?pYkVf#}SW8ZjyGXUvQe9qTUzQ z__`BQCSgQggSL_KB96ZC{!@3F2veumr&Kh3)c#6t`&e zo%wP(NpNrldFVpz^lbSiAQA?ZKWjH7y^oWGRrhz=m$oGH#A`QH7=ChvTqnxM>jUE%> zNDCByfz#T;Ot9XQzkAG9n zIC#_`+K2tH$3pASb(gN-M3dk=`FY#^TVNpmS{ynS{)X|^7Zaw1ciVno;K4S>jTZtM zpB}Kb`n4Cbv=RmJ!p|ifAeq;!=P^Ye3ywGVwx^GW(<|>ygZ#+kMtD<_SI)lsO^<6jLq)2WiFM)s9wjrYAnnOK0nSm3y!#} zO#`!kmenFZ$sro&hwlfqDvzD>F>Ql(YXE@y-RLf1M-D7*MVm&Yu|+CzQYr9>gOm=4 zi2m6j<>G3!!K&WpVx1i(nv3J47uOGoMmY?_GC&AbJ4S%XoP~0W+O?x^E<4qlP@s&} zESz`~1tNu&K4F>T{h3KA%GAD;KldZLW_6xN z98xAZB^{-gc0G~)$8yLB&W;%`@)dq<;$}1=lX1R&F=tV+w)<4es2qAlRiCEqSmQ#x zkx1mHPKJ^uq~c#D3H|=2*sFrM1-&E{GhUo4v6AWDDFk94*#(rs_^_x7k?BxPY&5)k zA}dlda;Z_D9v)mgMB^2NXy!n}ZSr(hP`giugvKSU)iyVqsta z$Z*i)aF`cZ)_N>Uxevh~?(FWO6nC>Zcai4%sq zvd8@WgbT{A`GV$3djCrPH}3VGpk)Cdzhf<~42iWgV8&;l*(%?c3sh}$oDj6vQ=g8g zG4e7jiEr054*D#>DI%(O*{jmz&*1sj3qg9CcjJ4@!h6Lr$?I)Hu7b;#^dfA`UXCBq zak?+k3XLqRSQa3LVD}}$WCtR9w@&XWUBiLt=T_%60-)yJSD{O>va+sXW4BTd>5T7m zTA9p6Vm`DrD$Vyb>}sY$=E_;QGICR>z?!m6#w+)K%d^pZO)DzN66 z!kMfqP;5nv13vq{7vGhg(!}db=*@T>ndYrNpc#*&&lhI24hE-C-4jwyK93+LM`DoB zlNVAD=p0f<>6I6=9&tVsB;jf4{pncxxYEQlGgHQUmO!;9tPA3hwJJ1-`O*IE;|%%| zKu+Xq@p0GXnf9!JnAlVTpD1;vg*aUb?!^aeF1m8XW7?uVn6y9Mu` zFXWSIP1*XY2vF|hah@+qtH6eGX{TjR!V(PdY}AJ1jBLW${3F}Kt9kvmM=y~Zyr11y zRtdl7@H1;g^!qn9?EbK!Kt0S$w4sU{)!RS>c2t1r9(W$4Q={01)0oq?93m>N<(D6D z-bM{b(AKB37z#y2m1Zmz6n4)7*lj3(#{>MWm~tWiX|D#?E+eqg0ge zj|^|-i;_owGT3AN*L29xT6Nw+>dc!!es@yI1irpZtg3 zE5a8y5dh**QufQGPSK12V!60;C<@K&8r!^*4bzKcEhHTyJS!{iJrYSuk*TF(wU0M;2TCEj%ZO9oqO<>enU?85Q0v5kqzDkb5UlcgKxr{G)DdrZ@`-t+vw zoQc?R_&|9aYxNQOSZh4M#CJlSn*sFf-uMn$R0S;Ih^P4K-O`(most8{mK@!rrJKNr zJ?N0FUQuy!f8oNX3E83dwv>xujQU^v-9$s*b2irvm9wRLibY1A3P%b-TZ(8YA_KWD z3yJvKP~1?pN^aSXtsKYun2y|3tSHa-u1c+(x$>Kw2vn#lwbdL#3GL}THBOYdZMghc zq8QUobv=TA`MFob(fKbTe?busNheL0zR+X9U`}TN%M>a4leKZ(Hy=nPaQuKmXacIp!kN0ZMK`-WS!6Ii079{|1 z+4uTY_|F^-(awt5ooNG628O7j?8Yz~lc`X3=Mux;A%}<=US#FHSf5S9_e$9z4j?1Y zQb4hK#q-5ZV8?32r>=@W@2k31nX~HFr)%lxh6UDe)AjGg3^u++z5tfZ?zW={l_&T%gn`&VQ6x|sh`(a?U90zHH>d=FXg95>=EC8}0igkZ@Z!xzjG`|6GG zl!&AI?O9hPhc8B0^4WpB27d}^GJ>TTI(@pRf|R`B+Amd*Ob00%DWNDX0Q7aG*5oCc zDUVqay+;^jvO#m?XX7-SXw=;%bTIdeLoYaC4#XM}C6Zi7jnj|A9dj zS?eDb)>}8`99xQJeY$ez!f(l8goj{!WoR^b9tOe)rMlp^mzx;K^>{9rJyK?( zCxrm68Xz!}Dr{^s z|IFfN``_KQLkBS}p6)NuVVvF2!8e5x9|2f7>X>^2hTKb0kqCvu*yw0{nMD|QN}EX` z8ha7Jh~GT$S{#aaKr!Cm39Huqs(Bh|M`+<>2V+!U(NoZ)L|UC41CySQs`|EklguK~;aWerYiw0W2fC(gj=B zsM)zrn~6V)8lzyQ^($o+#t6Clw6F|3y(=M6?BN%;kcqq^+47QMN_|#3-o6uS5ISz^ zd**m~42vYK8Qw;6-$QgV-}?}nCOiM7S-0+51(A4`O1$p)DNh_)R$jgf83>(l+wCoV zLbjSIWM~5`gS=IK8lC&nnuS(eGIT zZ@%y6!ld0CD1Jv#jyZ`h!gI9nJ8r&S$C{P2e5D#Xya9Q2{h?GVoknA;`N-MM;lJ(R zN6x646F~+A0yg15B+%Bj9*(C42e3|MMlFIn1DK2H0CgsE0KPzVGPj(aLMJIPcNSj+ zf7FK?;Q*w8bOtQV82t_51*)<>! zA4ho%3O`fga>sp?eIlgs7g=^j?i}$Vq3h&=|3u{Dbc8@Fbm^!M$ZCq6fB*iahVpuv zF>+c#L2{jKJr^$cXlDp!?P;*|J;J!B$^-4_TE`mvirLC*euJ)(g0QGG5;W~EpSa9L zdJv1N-FxY^)h3=u?K(w6T8da!5dkW0ezEtU#PCnq2FF|DE+bp34y1T!y zG5Sn4EbRr)QP^L*ML|2$EDvwLa0IxNR`8jDN15iAT@`I3()L#FNqs3e1G}@xMmelN zoBC;9Yz4O=a|2H{$_%IDif-H9R&tGDH!a4>2VcK2yr0Y);Y%n%|7_F<8EPW}LQlOw zm>&IXDxr<3{egQc`{9@*lJz$2I3nsbggMMu{fd90NJ5wNfuV>BMc*HjcJq-BRy@AH*=<2)ZzVHdOzNaNuPNcCy1a7z3jii|g znUB9V_gt|x%`0Ug?jVs>9`V9Z25q#t(SS9~Ic!u34yU;Vs-8pOOk_qHdZ5uCte=I| z1o%{z8#KQJCs$M1qlrrG-RP!aoOLE@FPI9Gp{<+!`;=aJ*Q##bkS)+(X;ZC{@`rL! zZV&5#!ij0HhL)o7&Z~-UZZ%)$t>?|H$oxYW?#r5n!cL2m9`BvUML=IS&*O_#zVZ0v zLe{b8kO>GssPAF9P1oNh=m`|tx9&yJli~~$>Tt>`{#Z)aF#0Z+zzT1^(AP3;2GgTL zV+QWluPeyT&5f@N#XPF2seDo@pjUXTkF|B;OZRpqHQ5{!>!S#h6sZD%)wmpV?XZH z5X};1xCM?bh5Vb)Vbx~{>J!9>P?E5qjUfOXtRGF1I|MflLU=`oIJo(IU$khdukDN! zSoIUBfA%fp89{`&?@$Dqrsj|i%ohror5HGhr`+`KbKeX9DtzE%TC2Sw$&iHz039B_ z$}x!Ej=y4lH#!i`PeH082Icx%V5@Zhw!s+oFq#u2yKR-NCZ zD!tP8345ozuB%V=3p^0*jYTTQ(|I2Uyv%{Qgpg8^~Vxfa-5lYnE)GSaRmm)w^*~`B^5cT6JyuKJ)yZ zT4P!_0cTy&XZ1EGKEh3i9RB^IPq8MW(`h5(+(Rlq2tIj^^fEn6hFmQhxs}q!P$P`n zpcK6lO6P*r0hS;HQeYH142kw#{Ms)XOv$otAf}`nve^cXBoO=w<039=1`$YuVr4D3 z-=5ark}N)ET!RjP!n65q;f4MFn(2}Y%rOMSbhj2Z2ewk8Vg;SAw^aS8C8tqVdZ-N;gD$p5fq0=ad^>MJzc72xYP$&hIL6(BI%-m@WqBPc z`#PNVfhC|GlIDT#8eDdnh6ow0Ww%B6M}Ct=8pw9 zZ|gTe7maVDdR}*MCWo#=1_z$<7HQafov&?Xz_`q?=0?olX}hF>O4puPk}SUl-`6=e zUu`HLLIZc)xn_=hmF_PX*$`P5HTjqJD!%_q9|x}!sgzs9EP$|JFGRH zlkXyg7NugUkT*s*XJKU_f7cY68hiNu1jG#i{fg9+Q)X=3Y1FgVITlZQVh?F=!#H=L zpt{+M@~k+NA({<&P2FecsPtJs*}-S41``r)lyl$~ z=*!N75*%xLDVM9#8ztcrd*Lbi_zXmPyw8E@aXsA%`x>!RUOj*a0N@NbY1|AFMno-` z8nCXLEmN4Q;{!MGG7Y8U9kghPkW{>WyQN7T>?Ls4=aT(@Uf%DUN3uxbxX{&e0a7DqOZ+YKc34}eW%O8e#!s?lu=i0;CcIOwVFI;;2?)nye ze*Sgiry5#O*F8MW`dy|)IWhRj%Qn+Km(CRq$*k9aEFJNanZR%2-P_C|xHb*wR`$V? zete4j-YodWgONu$8*LL85f>5P zYv8K)Dh(gXjmJZR)hd*LxNJ_U+dsX@f}nj`R4<`-q#f5g(;7>NY_P z$rI9EN+%Y56yKsBVeR=KLRElVIe>{y-O^RQg9h0K;*uOSM6T3&YGw*e$0o*1w_ zy3vx-W|YfJ7Imtd%i*BWGh$cW2l_Mmc}9g+QI^#$nv@!u?u{D4wu=t1hBeH0n|-G< zB)h}Q0u%iI_KjZAjaqw#Pv%DAhP`>OvofqE$b)h7p^X`wvF#vpz@E)zV?mq_0?luK znEt{&y^_L$LNxmc=~0CT9EE5#kRh1k8+v(J8A@%tvQJ`s6DjcHjd-?d2 z+m@6&%Yp#Uz7b^lYN>RjB(hOmMjSKB5O^{(C5a@&G!U)(q#t+uQbBq;l|W}xEEYHco)KT-f~u<{#Q+p{^6#9O}C1$oW8qI>c60%@GJ`itO>y0LQ_~R0RZuV z?Kr@g8zjl zR2K)}z(YU(3)^*0uuPK>S=drditT^eZ#A@H86c5dYrI&BL zI){V4J2fl4B952#TxJN4lU zmMu{{P)&u*^2YCTqx_p_d40q{?Yl!X3!DrR&0digKB0f`fqbnL%~XE}Jw$Tx07lT0 zXw{A}({2VSpmY7?OGOR@x|0UlW2k{M?jFMk=TnMfmG<6+=|?yEREwS*^M2Ndt7Qa< zrXmPC$p<{1ls_-m7%iRQS`>IAGR_RU&)!PH{WfAv%c<`&CH3CQ4I_eIYiN95jijJ| z0sp>EN$w0x#zoEe6(MMFj_bG6eU#OZCirio^^xAp!m}bHO?ln@4PV^scMIdRGdc_f zgR}4v-UfbKQmg1i?GZeQ7$=HwGLY>ES-#%+NS>w3ccnicvOhass+VLN2fHmQ`Rzv% zqq=sow6=YPV{71Z5WL@A>jQxb2xr5e((L1(-!wlxTt#A22>z(b{Rae(lmp1!xCn4z z=xThj2FgL$xP`U)+k3G8t6F|G*=Gjpu?h~o=I_{{3p%gjxez6NG6VsZBd{stJa3kr z&IPT+%z?dgNzp})l6}-a2X_a)#b?C0G1T_{)Y;|)M{fLgDY&+p5S!a*zq}d;5Pzrx zeJJ_ck17cO0B9cPA}7_BKFAX<|H@xyY$ zL{fVLXn4ef{1U?W<7Vw-bDs`F1x8yYgCO15GXg4>v4#_n`?JdYe<#9OG6p(7p9$kJ znq&XT_vzDr8FEQR-~y{7SO7NRJONX{r2MZbqbhyKFc3T-!d=2gK#-0!002J18RKjb zGU-e!B|L}^n>h_;X%d$ldzLYR|GARA{4pfuEG!1vU_|{oOeh720QL9d*m%gMuo()h z9K|%doco0RkYGed+Jj9qV|EN=Ghw;+$Db{J!2F0He3M{g)Mf-tZRx=xj7^$ybi4i| z;hz~Hpu`X3!sH1b$&yqi<_TCCShS)UPcu;gIqQ=bHkCb5H0kvT(Jr~&3#Ku)Ao6qAZ04V)``s(xZ zuOu?0E!ts6S4P#^E;wsoW6D7b7ijEeS4axr4hNp>zY01&BaMn~{e%)`(=1V=NLj~V zy}1p4s&zxF7hI)oaRE~Q@_`V#dBo+o3AAe4S~63VTC-gnf^yYPbCJh#Z(!4@L1qbL zXmlDr$eM%^!rZrvyvFqk<|SZmKeo`|)XTbNpQl0)^SzYsVIm1+)Vu-Y`3|$5Kg)P$ z@8*p@60ih!(al~;;F%EsfZdby0i}uQ=pp;tMZD|gNv}u-bI5869GA)rB&vR1!*EBD)X^#~EcCRLO!~Tl35_dc-NvuIyOtm=&4rfZ{sY%02`8;-BQGCuH zAsT<|P{`RHs=PYIpUy!|yXQ@_)VedQ!se@z@Lx4_vh%9r@RxVaz}lS6WbJp3gz2#n zYJR92RbWCI&;ky~T%?TcCrSx`5eQi%BX^wWBW3`7^Lm9pH~&YG2LQN_lG*(*rrRgs z5H5I!XgDTPqX{w|vD>}BQhMMSP&Fe{?iFb> z>Do#VZ2HFc3QE2sW+r`N`|N7rCw@6q|BD(P{i-@iYu_xe8F|;e`~(iq0GivgfP##r|NS`jdDo z(!$t$zqbzo7f0~&smkzjsO|7H3-FBgn(f+I0ZSDw0JX#%{66ve2QP7Nn0lgJXGjmM zIRw$3&kVi`F{pcAXHzIULUJUJ7Rnl}Gl0rm) zv*l(`y7uoO#A8yIL`i-WJa#lB@WkrT%60F|6W*oGnB%SB z;NKji)Ot_R49u%cslSTC428vwRyl?Vj%Gmw}eBo0`)PcXn2jp2~@U_kE-Xb%vG@X!RX zVHwa{+R&H`7y!df8je1N!P5G+>u)?k8NHHc&%BV>y$}&W^3S&oi9zgpfygjPDmV#Y z{}`Fn&cE~)WLN^#>LB_$yGFA;CzhlIhT5a`BZbj_mcrLBSCLPzm(T9&ZhcaZc8|G; z`P|3>#kuM?wLc)m+V!Yxe7;wHvjHgyUG$*uA-Mjfj2N^F_hsr*WbuW@9BhKI9@}pc z5^ieUz0o1UIQG(>3kWa-p#$>6kXwYIpI`6T#voN@(ft`qV0?Y}Dscv_H+T#fs;((n zy>E9%YYz3ua6-U=lmI0BinO4(t5sN0>|t97>e6Musi5ReSpzNZ zvwR;9jCN7_?zz?$kMC(-2^@XgUeSu%AC-{Z*#Qro5-DElZ}gWv1k0X`6T7in zf9S{}VnP)yCfJKpQt;7~p-EEXwO_XAuWmf(s@9W1a#Z!+xAmsBb*_wiN}h|~FW_uJ zExeR2Xsn&q+^&0r_t{TXNeCV_SP#;DWbkK(^XRyM8}Z;XwGF)%&Ij6Y@rpC9Ns^`kO8P@p0v(!+PnptM7n$|v{q%f{tGOYJ8o z!C36$g`hx*f1mHpbL{^Hx{^sWu}c{^&I}_o1*vX|XgUKR7KAiHIdec59H9Pd&p`n$ zXzTOJ$9x#|cVF|?NB;uN^vfpYi+O^e+4!a+VD^kyu*L~*NRVtfGc|s0k?-*HM2vi( z>f~M8#BhH%=v#ssVfr-i`~I68x5RI1q?n<$lv^J-+c9=hh-16Cy-?uL_M$k$e<`U* zILs&gw@VfJwNbY`!%^czmy6GNpDI!AD%U2w!|NkF$R0v|DW`Eb<`{h+u zk(6Qxc7gqHGMODpX30GPNf;#bWdN1N zSV|0fwtLXpH z7r+1V36$R&Ngc>tl%2gF+TQ9Cz&t0iFTvE33-ZV`>81%uKW2L2Q0W;!4VJog+tlal zu%#5bh=_2M>5ArceS<~c?I5Y6qJBd9d7JfSAf3a=9w~QimL)jxh4Fuj`rn@xb39ze zSEch+oAPRiSi(O~M|8xMvVeio@rP7<_TR%id$sEToM#S@$4~9%>6mlJB32;cA89}C zY+L644{A3&WST3k?uTaI-$SnY?W6^sw;}V3EQ^iyw54n+^aad|wZ$k}44A)Scm}3t zXXUf%h1JH!nFHjjh7&&={QlYdz9Hx2mQ0Bb`O5VmAx?&V9 z!;B4^Mm~!CL4Uok#5`ajeFfdmh2q9|!`fUns0mI=cHnQTcUx^kw8In#W(OTbwxoMw zUr57zi}AfbmsV9-YMMFHIeo&FU$b1^->e*-j9b7nsnT=&F8a1u>1}JyAKhGs<4J%+ zDU#HZASF&ZDV-kN#j z1g)Ljm~#zKbBw%;m_EnGG>!e?X8U(m!@Gk3HAaYmw~Wo;lY}$Ef9Bis@_K$YGWDsR zf>L{%#(G`qY@aTZ%DOnFu%2G@$ve-E-#_r17}qMJy4TyU>Y$bOb@MFmWo-6@8?iT} zI&N}d{p8R;{Ujfp&no{Q|Z{_XOH5s626doo?qIft&Rb;>UtvB^2DO` zZ+ZsUGKAA#c_er%rW2BIkRA_bFIg{4S7rrs==x0JTKA|XAwpt+G|`3VK>|JYF_E_83_f(fSN?Qumg2Nn-|_DBzffOj3q)JO@nLlgRa19w(}!alj|@U z#wxc|$}gMGE_d?HU*=SNt$mpG7xua4a1qv%MkGtG_L#38j(GNusXuDEHt-db+t-_H zJjo$RKI}1zsO*S6_EM}8Kt_;EX1XXbe7m+$QHfr5&4v zq~E*<6dFD|^ahS`2mrhsPbS)4d>MyactVQVQoJgXF#X!7m@wQp1g}^1$KY`(4~1vV zPoGYVe?q(f5FVHe$m;z#!>Qu?W7>T#?9olzCUi5{Ac=lf{_Ed-F6mWgAqeJ|zVStu zuQq_fSmC?}$m9MlD&k;S@2Xf6abEW^Jm;N!}7K3?CQbe;S30HZQqRuxqKA^y`ti8m0xEs(U z0a&5%00wwRM9Ne9A+@@0i3*R~gg?>*;k9bj1&22Q0hCYqJ&_&v@HckDs~^_#3zpPR z(qqbkZjoMGnHW6Iq2<4cuLf6q_iDbEucT1F%1TT~Y&-Qm!Cm6VSq}HU{(~v7n+Nv{ zGHeFUkq+AX@<#$;r{`hYXl@HI|3#?6Q&Lixb~lipF<7mu@GZ2X_wT#kz9Uhih>Nam zYadG%2DQ-LKb^26i23mF^jc{yr}W#gSN(rHePvi1P1tS%#ob*B1&X@`r?^v~NTIk> zAV6_Qa41?R?(XjH?ogcK?iBZv_k8C&KXx+LCYhN`_S&6!o?Fy-CZy#JOxvBQwgn8& z`;Y(|l^{Up5m1yW zo`4foASy7jSXOr0?WT8K=EXwK@E1ytl1DkLBV<*OBe6f=L=GyRLo?cSF37tip}*kF zr-=;NKRNd$s)i)&hNkbt*F}*j|#N(0HpYyF`XEiO48-X;t|#h9`s`;&kHyx_JTIS_q_R> zC-V11`#1qR?ncQrWvTR_Z$5J}0O-~t>|}Of!uk!7<9WG55ZT!yn$BVkCf@|rDN6B+ z>D}5REPLLgkL4Gm#rAuZF8|P*EDOGUJwVnt3G&KuFMw^sjWvJ3>e8GJVCG>d`M3R+h*{5EjJ?B46<^-V}M*|Q*La;f&TU+{O|#c z%$^-OEJ_Jx!P`hVv!x0!2w&Uzr~5)EtUlrC0Z#b@f}?KZgen1|NJ?~YDBfQ{fKX^Y z#1EZn_CP1zfB^6`-%((MwB!BVUaq|aKq;Py##Yn?5A{cL+Au9JWLRab!$ziC{*Q~Z zlr9Mw=M%@vNyLpv!$MD+v<7go*I*yOg+@_|pgx_oR=Qn09!onSTm<=G1oqaUz~7UX zijzf9y*-sg_FtFQM_$PaZV+Guu%SUje^05v16>n~H$J^gZ;j6ISco`G@GTs==oq@e zJ*yxsBepPoU-!A|?sz&22j~g`$~T3ThA?JcS$>r#}hNXiLd|2QNd`M5HK zB>2hL1ENW;+IYV&u+EiYfF9SOUBi^Z)lT2Vbz5lF7C%us>?-hWMZr>2Qb$nCY61rH zF(nWkQ0!xFgfo~k|GT}YGN6MR3H~ErILX8{KDCx^Uiw?aLSJjof0t5+cS5AEOzZM- zpn!PVi~@0);9Z4@<8P_GFbh-LY}3d}j}KK#GBEfS%D2mhXsJLk_d(^V?Xua}x7~ux z*Xv_mdwiy>S#$kZ;8H!;T?*^wSmJJa9lBCK|BvFYoPVDmuOTKVlmhqb(s;r2CvT&7 zZao965G=H-H$r-ddtn^=hzJDs8UG(|m!ri7$CHq#mvtB#kMKXR++U@--ScqOiRDd_ z!&Od}(5Pb0YSn3rOdm!^3HGH|Ckrxk(V!>k4UHx$WW~XmL^uOlHYLH~_F+jl8!_Iw zA@u2-A3u+P$H_7Ujjvl%(qAFwFbs??>_TN3d;8i4yqf9Q9@kZeSa`HmHXl2#fak4= z0}<{c(pKRCWx99 zqPYpcF?Q8fDgF@We@aRIM3V+}9DlwACMYCU`bg|{(#?44t7LB;z!k!XsVUlRI47f$ z{JIvDhA5Hnq@NXJT-_!LZs;|t{t)cCG*|F0O^#S622>EeWQGZ`?u=i4kz{G$;!6c^ zR(|*vg`Q3nk#A!cz6m6({`i?(VF0}sJW{Qs!ow7B=#&I8KB^)};Ju!wIDS9f`u=P? z&)w<^EWu~6U4^B#L&F#f5LEPBDP zMfT;y;3Uhehb&hK!SH2-^MHl4Ntvm#iPTUfF)h3}QQ?q~kkDv*V6BF~Ewh!6rnUuF zK`G}0=g4OWI1(T0W&d19h?>N3HpTLt)bU*DHYU9#M1;n6P;jE&yyoJjS5WD}#g_!obhz@|U} z*cdy4lIu6_D7c@Bt%Y9pUz-ywg@)T#5uGEbcn>~wZ5}2P8{mO+`d)Ur3qROR4+KR; zXX`J0{Hia>ORGJvV@ro64tn9zsMhG(FLQ|EnoDUm+VD)C>q!ZAKxuGgxlhvwI$dqj zS?Pg{kpLDd5s*7pUPW)#*~Zd}`9I{9m9Bn1B>gNSJHp#+Xh|{WS46vNk?2-noah|%4JM2e#uVb`3K&LeP6J3C- zV*hE@o(*&Np)(_Z7V?-|QeG1gL6nl0qykas;#O%rQMTIXJ)GmY_yNK|?huID=G3by z0xBxVy-u5V6DgMl`!A2i?iU#C2Uu(W`3E`geCB-KgFMl>pF$Stzr`(0Lpws=vOATf z_(&2bxZKy_L;-5uA%aL|B!Y%D*F(Sf zv)>4-T*zy|DvboLpmdl=+&d_uc%y{(&u|S9>E<{UX9dm!iG~9AW<2E4OeY+B90MKD z01FP@J|CBF20@p3XT#m&4{1>Qt?-ASpl^mb2BR<5z~{r*XY_j}wCg{80S*bZ+jNL~ zDh{Y;0Mo1EAwCGh=x?cn#}CZDN$Qf4$`S`uUZ zgxgz|YOaw}YlghN)@(5A#Q;Zic@*kIDOWU35Afb(l!1{0_&)A=_uu7P8;s$2GY8Suo@SxgxiS~r+fr!!(ui)zf&6{i| zAhhJ}{~*Wosc}DWa{VT3736T4OH+-ngA%RdmH$fTuo$Gh&L<=BdY zdDf)q%igMKN6aplzOBw|#4zIlHmYU=bDL10#6l7b%lVCq9={)jkQKS+8s}^$So5a* zwVK`IXxp9O6%&h2w3N2JyeOz&vNXiq=B@*8PmE5ZdF_K+Ya1~H@6OYE>WVs640Trq)EGfvbJGY?9Vca<#3YZ z-nTuZ`&RGI3DZrwWuDSPHCOxDk57*6Ku+U=$4ff9u-pr9%s>M7+uw<^&V~=~#-m_l%ED*YQR4GkD^rWG zy+8y+yZ>Uth2!aT2pS>Ga#CN%awZ(kwj5-sT+lgfaJY~!)&-RbK#YQ<5@`7iotQI+ z+XXNK7c&GUJSxAS(N1kb2{;GC?hy82M(_HaEcbz;x(I%Z{|5bFQPajeQ2~0sJV=5~ zvYtMhXdz*`tf{|(&0Pih-z*bPa<7t-=W+{;uLYFT^=WB=gF1vXK&m|*E67QANI>iX z&zN#Jk00H>>R;Hp!Exn#BfCT!MwxN8;x4|^m+%|8gNTNYjP7akIvQO>261qr z>}`P=EVZ9YN0?o{!M{VK*1iu;C4q3P+571?b zjY`g0oci9e&sVV8PQnuDWhY)saI1(c(I6fHZGx%fohE{A^pLmf#aw!7P5iVD*D@VP zii2xzv00N%$k55oVE9c} zfh0!6%^O^8AWMN?aR3(MG&xzcNT>`#;HtB;{yQQ(dM>=l~=PVQFH_rkYpWVNQ z9aeWRWh~f2J9&q4iW3mq!J60;iDIAgQ%Vx8Exg<<%D#2+g7Z-+^dD{WTbau+clO9! z-kizz4R3g)j)@2I!HH_JC?#daeIZ|RQRl})+&jgC9yf*av;g~Bl<;ywp5@bzs!CRF zRL`}PgGZ{J%}j}7_~eoBwvc#geJ#BiRRM$UY{vcERSw6FoiR2DpoVjvf%-R0~>d zISj?^nE|89O$doY2yn&&-n(-)t=EmA|Kf_h`9^&H>FQBO*vLHMcWwlV?vb;0xyM$* zfo~~s4#iI5Z1jw8N&09S1@qlxE)y?rNmgcygr?hu28D~(;jynV^ISYmy-}UNK*iy& z$^~`#UOE)kb{F`*0Hc&GjB0!f+U6Mf?80Ash>5e|m_JV1A%TxDcF=zk2>NMCm2z&a zeve-R`!TD655(Wb_8lTIGoGSaYoH@L#f;K-W0}up=WQ^%q^^sxe-^}Wl7h(j6f2ku zFKeKN&fHFq-xOA!P=Ah9@vD%p{qiYD0ML5$U)_6UaDyLrfB-GC%*L?~l8(O8(X7-4 zJU{>@xDWzq$M(bic<=eb3rOLD(X8;N%-e~3rw}f55vOzuXxkDhbW9hJNNk~IfJG$z z>G_wnmYt+)P%V)wv}(ro{tYeD-GE{XI(!&G+DgO&Qtc+Pu7Fobf@1Oaq2OKgzYtJI zNab3JLYNUVYyB0zo-iSd&jxpgG#PS=ioKmR%|PafUai`PfX#AuRw=szBQPNbJL~WA zO%#JDoXG7xdP$z-YX;na_i*bQZosw#MvHef`=5EEn_;Oi3S4hYfN+Kl_r_=gN{*+q zH6dd1K>ZR|n1ej)zgT2s2nUKDC8hs*VD>WHNY#Lx1ftn9L zer%%~olamb{$(!AtgTe3^@(hcCUJB1NAv2@JE#}+I)PG46dwmAKt#1D9Sh1(i9LyA>6p7~E zRKiN7UY-c#j=OTwoskRXNx=DaZyP_+h{Rk#Pc!z}l>88L;ZOgrGPvD<`p~FZRejL9 zeq%S6Z(;JYWw{H(D~ExjRz zvV6&f%;#M9ktIzW|0!NVFAGuGT2mk^4~rb8*_Cpxxko`mBbsJ--V!p-Fp7#)sG!EVYG>n4m+MZ%;8uefBv*z z53Xmchi+%9B*X4$V}sN3HB_|l^w}9b3dV>0)%1EY>RUBGYW9C~wJUICI{C==Gs*iB z9K;^m@{u0NoFk0-$-Oc&!xt=l4+Md6DGWF>ncn|wDE&xf7hy#Lxv&-=0;s}emZdi+ z5=f8PZntqE^1^XsGXuq|^aLem7+Q3p@xuIM6wOWep)3^eQaI?bx3-a-!+k1JDU~Q3 zr!&ow+}xp!{Ud+SyS68(v>V?+rO*;GQUM+0RrlcGDJ@o=@7c_FnN|8=${!1y#ao=k zUc;|N7}L3^j2zAoKrKa?MK7Ob6K1?h(Xdd>)f`8Z`M{EP7PA+Y+Gg|8UvWtk`cB&g zHUMC;!>2XWmrcmJlU>_Sg(nh#KjEA&^?Q*1gR3;pwBAxj(myg4Y?7m+NxWLsf2}Y& ztz)IHAQx7U>3uSS7iGaGKGDHY?nTcHmV_|zXv?SeiP%TlV+=h(SJ2u5rU_JSdG6ha!{g73rbh`_F9?;}i@Hwmt7v{IQ!tEuBdb?qv@CJZPMqKpfn?%_bpGb2TVF z8?9qezaT%xf+&B*;34fitW|0Dq~b{w->5XMaa{|tx?CiTnR^@f`>=NAn&(L2FgFy9 zM4@7mKujua8S9ecs7ckZTFh_|O%i=Nf5b*9VUuPNMET|NcA-Yvwx7%8->2?@s-y7r z5#f!KfVlbVY3rc?_Ic&tl9U;cLP~8*X8v3vpv;^i2Pv1o82h`VdwB+sRj{yuEzTFb z)0hT9qaXEz?d{3fi(E+mPJXM=auRyTv$+=k$P_Ng&QhewjmYsY3?{6`1YmX)uLRa$ zNlk0H-*&#qg67MV=%)@hn32RaK&`N_|00Z6mHI&QoZv2*q)FKS#{DWmWkPyU@{Ntk zFw|B&g4OpE=YH?{X&M{SJ9d--bU*e zA+(a;mGvDDBLUTxcS7KCvvn9OzyX6K*l8wACb}P#-7-v6Fy1Te_Eeq5a@W<^v-pWj zdz9Kdhrtsmk8(&M&H|WDN$T`i-On!UBVm*#F8otbxUceK{?BdJaIUPgGWXy8y&y&R zetLRr1%CdK-ghJy)lpZD>E@LLZf7wsF_g7Ke)x{}(Q&{_P1_Am1f7d}1q5#{7fJ<- z^2z#`WhoM}#KU#qKZM$i+Pp*lRVj7q6h~1@0F{vnQB%4_W8b{*_@crmr9;j~YHMCv z6_jDeu6Gg5AU9%`9f?+47xg4N1Bh-1I(NY2qGOK0x6yz1#zcDm>bGXx{qj2hLjhux zum&qzIZ50a3+m~p1SclZ0RP&RW);$C)>4C3}*YYvj&tvX$TDCuP-ysv<~-k1^~@hP{f#RSL?6a5ELV z@CF#;ONeC+4Z!rCFL^|UAnO!V>;=ZBy4I6;Zw)X^<08>RISZ!y#f@~Pd}%+(?XwC6 z)n|(xm`f2(bPAq4yy~&196KEE-q%5glG!kx-6~a>-CBpKF8`{%(MZ=_v?=_ucBc~y z>NV=qf3aEjtFQAZ15Bnhq*kXxGuYP5Jk+3P`u1jpDS=d0ztRqfh)v5+eMQAloR@+; zxM?0$7FAy?=dq3J)OTv-{ZLuvqmz`{@RQjK=q}>-EJClLs@YwSjAvz_JxB zO*Pv%UO5W>J8cD|==)kP`S#Bv7oUIag1bt0ztAKwDtjaQwm4A;7BVr^u>`VTRuc_j z68Y!P&F5d#nSLG*cFmG15}m#JKqqLgvQv8GbTc-R4%}K4a0pV ze>>IAaj6RM-i>G1PXgKiede=*6o3=eoi;mWV?*YfsiJ*If76(a{I2P!4|Xzpc|tKG z=|Q8F+L02jyx>MIM5jEHClfoVI07?AB;j4BWfQ+@F2AWf(0 z=3P)9HA^B+&yJkY0ulcR8aAG^%`WFAE*X0W0d5ukH^}t&mw^AD;A2_@}=4YqlhD*Ti>|!az{b* zbpV}JF+N{ZDVES-M_PVd8zWwdLHH2gFKlIeoQ5jJ&;f14)uRTcS;M?QIqI~Olr38t zS`Z7-W~9Cs7v`2;C*Q-^Dm&sTY&~6O&^rIFgG+1nSpU67;p(S$bdwg&V&d@Fy}9UE zdsuk!#TRz;KXzQCZ|hqrQze>_L3Pf0MYXF2w(0?G6BXYTqvucVdWEBRl0~i_U|dAC zHjU5AWt>sgA8@4g~JXW+A@SzvhI~y zkcdlP^uIB)1J0UFi3oqHwy8dO91TJCw(!maHfs9VSt&d7OhCq?(=EOh%lY;3e+F0+ zsR;hUV_oZ$MvL4M>pKn8{lSL^0197jpXSbKt=hpk+0kRa+ssD^6{9+=mg#04a0|zG z5W$*f&Sd-rMD1YH4_Kl<%(&ZpUjCx|U0GPC7!LRx?_sxXJQdR5o| zCqLS!860({(E{K?@Q#8vUL4_}L8GtX)K#Ig{i(dZvRw1bz(@_VLgf$)lJMtqGZDO{$uc<@~s5G%;Rwj#RT7-pkOPbRimEuG`vK!3bpZgkU3#{r2 z`93P_`y8nYxSkNV9YZh}HfY~o$S#%~l&W6jUFtd&uyVg|)g|=AsOtw`v@O2DZ=;H= zI`HfoX?4yXzRO4AipOQI z5`p|d9o_h~b2F8z5;X76U@}xu)E@Ht*kj3MOF+hDhk~k#G3XMo5o1vt)FtiWInPl^ z;w*SZ#Po|yVDciez|ocw(cXc%=`?lRqE5bSAx;%r!6V4Wlf`Z`=?>cm7qnsbJ^J5zy38#Efl>`u5he)Vv<078U-|_3m4R|RTA!L`4k*I;@ep*2lZ1AT|btUK)R&Lpv z{@=mi=}QHeAQm{` z`vTTZC~C>E{oou1zYEpe4oyN{ucq(Z+O{dGtxM)`4L^C)>eDkpC8%-2_CIzt`o264 zU7r_uhbR=>h9lI7`|e{*5+RAYo!csJw^daE$h^X(eeCHsw;KM-@JB%&LSjwrs(T=5 zC5AQs_}U54N95JpDetenrOQz*&Xbg({WsOy4HO7!^+Zs(2~fKbEd`!jpMP{}fMc^J zY!{;5thowz|6lu?>HNZ2=WUx0fF2gvPt=;-4E3{+v&`?fB#6Wf`Bu1T{R6#qW~laj zj~bgMA*nz6)jCWEqX_hmVS9Nr$c4HQ1?1Je8v%B~O7sHbow~`9VBTZhvxZW&zpMp- znFIcC8;&pEDqv|I?7fP0IAL^A`(FbH3>l_x9!Lx;>Jy2?=j0A%WmPjE1nO%bvM_&4 zS7AMX&2LniJT5g#5x`cT+^_-&*5W>OC4=G{?{yJnXx>M{`niWA8iPPpw>;Y*jh(16 z+!{U>TgrUR=_9V3MX-$s3p@whw-C+~j>rx$>_5H^McXUJ~o;~C%H;Lhb&@RL^)%Ft*b;8w+slU-QGcDokhvm{W1BdCRwu?uF@$*_NT z^!YaH>#U@(2MtdjQ{3X!9XDnxvhIvcD=gP5?gEB1V3BrdyFPL*aH{WgBsImKrw()m zn(F3%D7<7^W-q*}7(E2>z}UotWpcrf&O(Nr@3)VA zZ-J#ya%w3MKNs=X2?07Mvk&N+oWR_vpb&bjA$E>HGv0|Z4j00tDI9c!3Mt2gMuT_j z7EP0JkOxV}yLs7N3-V0kd+?i&L#FSup6Cmjgp)MO4NCsymLJ6Qi$M`_6N!WZ&coix z60yY)@Ic~-&1!3FQ7$grSQOPZ)F0q1g|h}7(X2@i0&$2})RI($OF^vSwW@y_VW+=oq^gk8d|0)15oSIYi(vmJra1d$NJIYRah z#o&S$cOnr+9+MC-l-zG;KYF5>NSw)L7o~g(t(ZRPF|qvV)bVlYGcg3KWwKqknZDmm z&cg!#`^+eNhJJ1mH>a+0K#b3?f}l8!(YZ>lJwaWG!V95S4MDk3JbSrrlr6!B?T(GO3EOYjEqrz_$mc7rzfAR~d#^<#dMnf< zA0z*S3pZ*B>Bv2!-t}HlxnY4rQDv1rlvP0zj)gM8obuTu{)(om<%H0gZYPk6;5L47 zgq=1AbySAZxbzb12+(^NX>@aktCo2Zc*?(KX{z@oU}rK5cKS1$^n26( z2@YEIZIW!LPMCDvgd9d}`&Xw#u*&J)JZOGkr0{?sir4HgoYpbhha^(I8ht@-J}A@f zfek@NSFy*H^Lf~MUxKzjGcAD}eePa^YjH+ZB^)c*M|3Im@vYqZ-cL$p7TMbVlJ%T3;Ci*^^G)3#81~UaLo+^Zrh_LIbeZ zyHLnrrVkEV>l^p<_0vH;QJ1u3J1)J0Z(dR`*|-FYRgy0e5s`8AY--9SPa6nq^;*zedf{NQ zNb{h~GA`{K*M#>n4r2QP3SQ|?!%3(N13=JO#4M?OpO=WxFpJ2%pQ!D$xy8R??6`ia zkDRcPn>6d6bm}Sz_P|S@T>Va!wyHQ0*($i4f#)-HrRz%KSkEef_C9WguS=^fDG+kF z)K5hZvRC-V+Z$1c{;~a86Q}ytZP@jjl&9SSLJq5%qgaXVFwZ1jW2pNaN2`Li%@;^{ zYQ;|kZ+W!jv_KavJqjb@TTxuo9~3TO==ZQta8n<^E1=s?HKC3npGY!>4|8$vU~kHW zYtYcWuF8+)M)jblZUR3k>giaOGa{Y21M3{`i9nWUATq+3Rl@K-Lo@HzG)%t!s%WPD z^X1z1{!dsIAECZghUYg-~kcZ zfSH@X&)t%)<>{J6F?tVlqhj@IiiAEOi!lMr-j_U3KMMsT2eMkuqPu&>Dq?fs@!_Ll zCGUZkq_9r_oqebv)ob2U($%JFix`9VjL+CZkqPvUF|lhE?%Z@jmVmqs5-muj<#-{w z=j}qCyws;JLT=dF5KHRZsdkmR5XD1Jz`O>>;0znPw{C~42voJI!lR&XLK z(r=e{IP$d!XcSjb41 zUCQ8ee&TtHFi_e83F5p20M_5`gSXycd7n)-TMNb##ZS%m#0Adgab(v7i4YTA682a9 zU&-uKAGqsVl9vAmW;u3*iIKpf`|zs1A~~ia@T*`}KKS?TcYnRG&_a+p5?@8*z}Z!6 zcxa-nTd9oSM`mCV=8pmJW^G7WWP#2uufY_uIqMLIMesYS04qB)EG3D%muQF3gO0aL z4E_1gw0%p*Z-3)7r_6;x0hc-gGA;{gZ!+FxmPmiTkZYU;S=TQ{ zaHY{A&vyGqm)*-VK2!xNe`GX#H@>|i|1li?80(97cmG{slpPzNwGB**#9JZqs>_kp zQG5)7LYGQ2o%e9XmGPkhOi9szFhL|5L?~c*pJ$QuIg-BWPZ$4Fdu8`Yg+cqNmtn1y zQ@`jBI{AF2gMXcXj;SW86isgXAh6_K)u3@|9;ovWFP< zOaXw}R@eN&fvJxy&?x$tSnH1-q7^KfM^FbbYYBY;^b$VkOn z*|Yg~Bp!tT8*vkry<$ItY7ifzbsM3h?oJZ0<4X9UC9U zkI33zBLN?GaZ%DKpb)bNYzvhopxua;x?PF%7p6 zTe(Z*r%u;bGT>uDlKL=vFKJG`Et!_NQ)EM#pKpAHS#t2Ic=Q;5%Lvs#N%O97@vw7{Bn`i*HT0NaG?SG zI*VwM<0Pr<)c5*vLVFIxi-)W2i9ZJ+#CG@URLpf704DU06OLB-XdAsettw<3nom+CL7lAyqp)mKjY$Dz}+`}kRf&ldgHtE z5LCNF%xnLOn)c*ctwxDZ=r=iKM5fzN$5!Z4gv#iX-SZzmiX1;m9=Avwdv+y2K9}IW zSr{-_8@LSvBcGHv9Gln6XlB%0@D}sbiLu0^d@>7|eVI)z?<@_dsXjfpmMWtJkAop-5(Xyjx!TLa_AM zDNjXcbNT=QXX9)W&7Lc%cHb&QW&3B+ihNo$_r!jMa;vBfB>tp&EjJ#`*s!QteQG)$ zLp~Gfky!^5{Z_Dr%)ZIE>Ze&%=9KPn(%2<<5XIoXN%qC|3csCwRrBUqRy{!fp#)Gv z)T+tMxC`z^C9Io_V!vR{i9LoBwIGN7iR&h-U^OjH>iB?R+o@MuU=1l1!bssgC7bu1 zdyToZP2O`Fj~$M%=_J4V#5R)ig>u*5cv!TA>1g^cbme{J@8baWEq_dKy$Ps)L>l5r z(cI1fz*g?|{)=NufhPn1E%xz41mf6TqD|MQIZk69qt~`#L>7^+$3O3~4}ym?G%dfD zt8#sFVQ9SZs*gPBkI#TOXd!MhU*EudKyNQy3FcldQbsrPp_2Xl3J{x;PFziDM+X9F zAX)*ViL{;GJ2Zt2ayiK^abIQ9Wnx8i(x#c1cN0OH7dZ9#aOG{Q1s9C}X8hO4;DBL1 zRerA-4Z@uzyK{vYJ;IPQ?x!-{+WE1R_Pb{G_i>XGOJ27vwT6(r)`gX^GCHvEEeLPx zbWLj^5$i7;K=?Jx8HPv^f%srJ4pvwl3Q#0_B0Ii<8jI44ueidvz9DYw2Jn2P)gIi5 zH##;_cT@aR?*1dl;PU9F8AVtb-F!Jp`L~8B-Tkh4&SUyT5Fe8!jRu3JVYms^TVM0- zrD~e3>64&Knl=RbYGDU3OGizVsN>Y7yjb8!M*vvm#B|W6b95wVY-qTgKOEa`z`lTX z-dsPrq$1i_)Z0I2;Pvza0V&U=T9~y79Se)-DV&I%@EBl@M9@@{StLX8?iY&oK!Ws+ z_DAM#2AeMh`b3OG1El%PGOhPAtx1CgI66=pGqb$K6o|36HGzSW_m;B)s5fi`fvgc& zcLU5IJ~OBj0fA6+b8{~ynzefltSmR@p>FRzja6#%KGDt$buIUS8_URbNJQ8wKFOfx z;RMo!nQB`J6ESw6MJm$v7jr7)Px>)w@wn(jdp++sqn(9Js<$|cy7Hx6Ro4o(VCpPy zz)uvr!W_231ju1OL2)(O+|1B(7ycq&TU3o4%P~tan_|!_JfR+Zp*|(Qk(;F$>rFxC>Hf{fg45?cY3oeW0 zmJ|s3uK>*>8y^VJ2DY=A20FT=;q**{Wgy71gCy@yUN~itk;9%=V+crQP#^nPyBN?e z;Uhi={<6I!0pukkrNW8dFX9 zQege0sSu|H%rYs*CF#v@FI zVwer28lC$PRhY+2IIboV1FdQjv+v~*P_Do?MVvL=KoQ(v8C)tMC0OR=Sgxo2F>Af> zr*GL-EsBVl^g^8z2d@|+YVe8GGry9RFIZXHfM!5Ry$VR|HgUH8k`88|h3|0-ICPcFYVN?Si(1-^?Fuk{W5D$eG|!7KOe`EaMnC zjp4p^JNoJwK4*vt7t`w>xni;rfJ}U>(@V;#N9W1aB`Zk#ckxMsZT-(ro9ONGx%RbXTffg>5P=->?NcVnH`Itmg+6AMJirR%#KNMz_U0hh~&HvbjvCYXuO`F&pMf-9G z9js%>$;c^Xs^yVkK)BMJZ@SEk_K*CA9og>L10oLn5va@r_K*HvhPkC9-zUz)|D1@1 zSc?F<(i<~Q(sKuOGIL+vA9+;bQmB6X8P<|weY^IO;rr|ru6zl+S=Q~->HhIkAq^j4 zGB>yO=U;z|ma1g7p#q6N`B(@H-?JYUihhg=CLC6+{MWo2B+XIwGW-|}MyojNvBmU8 zcIm%#$n<7DhRgkA%K~6O@xPD+G{w%Hvxr;z?vP&W$?J{C@B2K%+ZEbBpNS#98j+@< z%BtWsuhAGH-AGk&;Nn&}8IR3!kVhe8mTsG@ZF*`CMmb0}$)%Gu?v$w>>1A&?{~$Ia zzt>O4#!QNYs4ByVI>g?7Ls5Y_$3Ucj^PU`M5u?qZ$DSM?q4RAjM{zV%kwl!KE~It6 zNdz;*BMXQUY0<~~BGb=sRQw9Pe$ih6u;TIZ!-erif0t~)8OKd9G!i~@-`!Bm!Qxl% zJ0Jb*LO{T|!nbQSAf(_PcPfNEJIMchpp|MC+ySZ2egkJk2xfB479W@sUJ)a4v3Mp6 zd_)YVv>!nFfrFBZLrFo%O>V<}vqeK_Np|0f|9ZCq^BN2W*zD^kv%z8=&IWd(2pjEaX0dYmnfuZ1CxWX?-CDptbb`rQw0>_KJ@`1>>9($(D4 z;BXHe*ljJWPXw+vJJ$s^0|`-%GQXl62R4Mad>c$4JMIiHr->F;T&kIxG!ON)8=g3I z=L2yRQ8j<8-y86B_y1GH-8kO&nmAntt<=1 zg$xczi?eZ$bm9->mbKW6atmXK@dS99V~7merwijWY~x4ta<*u)iBEo#vCDfMEpu4)k9s5AHqk1-;k25@$j&SeOn6#^uXsMMoSl@C^Wr~~??+3nX;3|_2o1~AntqcyzCly2@7@>R1poqeh@N?J_ zki8O)b2ag~7%eIR9$U|>Vdln3wnPbIIg+Trt!ba{@ zwGkY-=J)(AeGH(bs_w1zq@~jwi%mneG#fEiki4)k14wO5r zj~REVNC@_n*7v_Kapii0?BRW@#E-C!^cyl}Nzy+JhqZyyAWcPbl#(6Dw16sSuJMPm zz8kp=3}&zhSDqyS$zq{r7G0?>``DpdU@6J)Kb6BA&R?01-F?zveWD$G4&hN%Kc-LT z$tU&r8u9RZtLJ8Bu(v_n()OQM9Q!srEEl|cKFU(npoNPQ4R(Y+@?`n zTrvuviDq7r>BzWVhCRoE-Kiyl zi-Fp)7~Z=P-p{=G#mHK`Xfw7t%JHtlXuAO}v{m7S?hrs&|+Ify%)?2KtQ+||xt2WtO7B_l{M$|gmO(J9l@Ao|yL zr1@6E+U!ErI7)6+xG_-xa*%F-x`BcQj$tSMI5(Zdmf;9vY@ZrSHTPW^%YI9oX#V>h z?%R`6(K_0#FJ_>!eruP5PQ4iM2ogThV1;~0!ymVysW8|xElDXVu(@W_BDo;#Khz=$ z;_p|&XjBrBWmd*(T&%C&7GkbW?Nvdz$fvQxdDPRc=3NOm5oHy~d533^^U>7wyQ`sN zW!2zB&~}4P`mrh~j(p)Jc0#r3&mG0KU<%|O_q7$U2TF{g5R{M+rBRKo%*+-6EwqA-) z6pBsEipq=t7Xi!qAK?b+%jWIcKSFl(Z$Z&_BdHh6R2tKqUA->fLZc&^z2zw_r?pr* zvv_!o=dS(O7P^YGkgf&S;)Rj$1>%ZU%$XMC7f=#k{g^*Phq6TKk`%W5V?S2d=}o=& z3Od+55||#H1LtVZz>i+*{s4Rn6<8125ddOVsKEbmR(Y;-HyslU@FOM(=YtT3{z~pd zgjd&FBAR~ENkH(?zUBIrp>n2u8pQ^ozcYY)|_P@t9fCC;+cVdm~9YmF-VZZA8mP zDiaK!SZnP4)LS6XQwQddwSY8V_rEPhBOPj|_{k#~@1bRsOy>AZpm+q6cm4i8`}?Hp zaK_qPXh8|6ru_JXnIPkY$74W2Wbo~$fGPpl>BPBH`xhUn%xs+y3=0~??o#7*b{S+m zUi)X)v61TQqg#LXX`&BIF1V>>7+?(_5FsP6l|!%*@vAP%Kk_OTi4gJ|K2wpmOX{=b zJnNvip!wB4Xyf$0$E1-xD4v=8%&eQ}t*rfy0Ac%ksVYF{FRh^UlEK=;?r37TxNf~o zd~mIWDyH>yQ27=M6gjl)!Pj^LJ2tl5{r@oa)j@5%VYdmvo#O6ViWUo6iaQhv#idx$ z;J!hMODSI5ixe%zDeg{@q5+C~(V{oMZ|*nu{_##W$AsSIO9))Pl+Tz~4v~^y9QTm0keC&@U`=z=w9HHr#$rYIsU<`s zLzxaKSh@q!C($K$1+#<)6OC0KM7j2!npEM*>;Wvl4B5$U|89-oAha1Q2^A`XGTnY_ zw}63Nt97~BK`Hpa%HOiPXb9cqxkLDGu5P+(Fr~2N)Q`>iKcsZu z9d&O1NH^HNH6o70*3>ymzJIS<lXx%y+I^}uBuyfvZ<5`h@#)rp#60<5YlWL$z@T+2m zdhf{`W6Zlizqz;M&L4T3RjlxfFWL1}P1Bbo_Q=#p{pcsT6JWD^&ydD*EjETayXB_) zk#xyQbvkIYCQ@D~X%~HPY(9fF0?7O@A#YWHW7gY7H>i@Z^JIX^)k0cbr8L!-lj-@q zcYk*gvkae%s0X)YAcm`1c7If0i_}K)$5?($AH;@UhA1~9(17jG@Y84ALC8)Y2fiiQ z<^hl82AQA-vhtw)s~TAq@#en#_9-v1!uEBy{a*C1ikIl;754p|z3b>zYe4$7F}GvP z5e|K2dWVSoJmMaBrkWsX27!fdPsq=dx^)OS7X_bd78EU5E1*Z$x#jf)zin&jKC1V4 ziHbRZCG_Sx$wTz~pWz0plB;wXhk}O$(etAj+dQV_bSLGO*$VxhkmGhaMcL1sU$jC= zvUUqrZ!O|NDk$vv@FSz{1c6|GCfPZjW?EJdj^wxLmo`j%Edprf|14( zOsr@K6~+rOqn|yqWD@YQ*T497ySJndTmu6o*&WjFJRbhiYm^jcFYvP{ml z2bkNwi)Tnx7{bpP1jc7=%m@}$P)&JvmoEeur}9Z9{&8o!>B``7JDvK-uc@=PxT;8r zkaM@-Gh{uEMVs3|#Z(ndzbmrKQ0a1uw{8^2B?5;29&9{2fOp!Uz}KLJSR7tSr$S<#8T zB14`jp`F%B3i^J?+C(5==@_XKAmT>C^V9STk;XysHR&(apjmm}6Bm$sXRq$zkjlT~ zZ(n=XCq%21LcghA0}IOJ?DAE2mR4D~C*p>GMNIuE0&p=Qr}nQ4?b*|(F9me8Bi#y4*QfZjhh+tI2ATr}aIMQ$cdqE$kKAxoc>OAHa)u)3 zcR2`1#Yh5<^?N?*bjGmecXhho(dhSf#;~ot8#%QhrNYXxU4^#g7q~qzt=_`l}t_s#qC4FB8tlmJu!&)DVlhl5+1R zG*g?z+vN2Ul%*?zdv+Srqt35b@!dkEUl>BWV$@s!x1B{ly$OOWXJ)viCWN0gr=s_g?a*@MT``WHt4 z7}EtlMFVe)R%61JSmwgZ_A*NK_=$1T%l|&87`FO_YR&za&yrSqtl)aS zT1{DuQ<8o0wOMa!*N9k#f#B+ciPvxI8jro{KmN_MQLR2BH&rcP|*1d0HgBjqj*-c5N6Y!F$f5NPyi#9ZcsKg`VQP(xDfWgp28_<86B>In0LCL+0umO*~@i2Msv^ zM}u(WhFlaP9w+X#HEyKI(|NVTzGisnp7*C)ZL-xpW@{eKvu8C7tMtWZ%p?U43b%r+ zq|`XS2AG8sue*|YauynD206Zm$ME*J${YP%A_|V^`?=KAYRnX{8}c2iJN!MBM%N(0 z&|A_Yqqv!@aB?E>*Es4r)b4=JPfyl{3|TUmQdYF5c5UQ8Bt4#{>&eHq;3HouXK8x%~`qp zR$!1dLNXH+g*NiKqA;@r{@DW^g4t_?hYYu$n2b)WL;oNejG+ zMJZd4GX!PBG;FJ&@W1HA#fvCzkv4@Jbke`E5f#6vmvz)_yJCO$tZC@cA7w?BnNMB0)s z)pi~7CMuD}t7{Pc36YVV*VzQUC+Hok#U+k7_kHVHjuSo}b#=KS7OA>HZ{rwQC(M?7 zXg)pUrQU6#wd~{gci*s~SS*8v&)_|Y5p}nE*jBQelYi85pcE}oh4X6Aa1Iw!asutz zm~#SEge%4J1Ku~La#(7#c?_Jt3mh7+$}#u}0heqM#fUW}cCTF!vXA(%G&3%7yjp~S%FQ%xLzMw$hu0{b%D+Jd-FfU2wYn+sPFatO=ga^I5PDhqHP$fGqTO|o+=p?1>#?wJ# z`D9h;zAABb^QU*P58}g-yIuA*-HHqrxk|PNTdg{miH!nq9mT8vc?~C{g$HrUyB*-4 zW^5BJYU0t3NlZIm=rCE$*Jocu^oezPzU4=lT?UhU=9G!J03q?u)#e73DG3HwnQlWe zOqx%o^MX?NBs;gH1*s!L5tp(OwXbvv+Y&!v-kb)2TUm}n_G*7OXp@iX@_yWR9goTl zN2As!F?Q(!`bqWf9WQ5^1N`G5Ra<*kIU>Z!^o|bW!o)yqJ`OLz&m%EmT#cMT%`2mB z&x}2zYOXrK7G2Fuhf1yMZp0+vbG=ug3#$lp?)#u@uiRJ5y`>{z5C};-iK-fPwe-u< zA3RXa)z1WaNG&9z|0v=v77h&;w|p~dB=d}*^ZN=Q_2B;4n-uzRI&Iq+t;TuH87&W9 z^zPwi3s@41e4LO^@AMe65zM2eq}29QW2&U;1yP>;A)ikHO_-)ZKcn%Phq?wzM8B1~ zHcS>q7wX#MJS{lFa?T3J=pZ{HB0y^Vw7?G}AL8gR`*8Q{a`G{xpzH(k#-)e@lq!xf zn>PSnw}AZS5Vi^1gcI@YRo8Fs8I7W@*;$l zSiVDM$rBY^nHQ4NbR^l9)w8a^YLf7gb=TvFQG+~g*=(wTDcWLEu{;6z7vu4$W$~)X zfbZtCPU|Fyhb1%qTpdn&DCd;PFKgIw(;yrs%ZN^~+%e*pRvZDbYDJ_$q_ zayct1DAd@^*;v&rAe5ra4u^mz-!%|?{MSR|tE8Tk=K!C_1Ail72Sdl_t=N~2b$-TK z`vE#paU|+#EE8Pbn6@unTc~Qif>G*>T-;7Hi7umazdl!E&{LSIBRch5RI&bTES?`U zsSNAT2oG(nyemFLDv~mjThoqKD+8cZb+R|xeLIz&*|A?OtdCs^<~nu%$&f%1EFmtg zlifE>iSdOR`Zi+4&{JPaqSi5zu6Gjw8z$_2Dc;E1^=Vsti9e5Mi4&Gb-ve+zBZ8#9 zd;j!g^FB1moLTuDA$B61d%U0YojxlAn`RPPgNJYE+67*Qk%t}XEA|*6fXlXMEooPx zwm057w!{LZD#E^241EhIh4z1zADV5yiJKtvybId)E33NMpegC^$G(o43Q159G_R{t zBwo{+ClU#u*bJwce=i!zzQG~GQWe?760FHp>)u?BMJX$kb>r!&i<{&@4O&scrvuq* z;0;BDw%^spt|Noq!jHp$0-x%Ytk%Km=r?VhQS~-sAuo)6bOPDlt4KcgZlKOMM*zsmHx)MKLKoL1Pm&C+%C%3y2B@h~y7jzIfDT z(zK6#2!7U7FplKgkcrkcWLOf0_c>!MO*x5Bwp1oH6wxg^T{-BflCjqFsuR(5e6r<* zQ-u8A41U^1fMk~sf#f=ZG1LqK*fzMzROZo$K~Y*{FKBK~g=mqc5PP2dN=4O~F%+pA zsNc`O=cz|&V;OVuYlty6gfIf8R-+r%o-PAtO`W<5vW_g#Dc^USaI?2W>1yHM2-}D4 zI$D0Y+Xa|JE&NW+3?hR#%AxwxKbr+po^iEUsTh0%F2r;$Kj2fuM5Z3-RcBTW$8ORn zx{!Lm$r#iX-t^sfy_lzuoIEEdN5wanj~EliYi4}CWDM@n&AYu>|`*Ynb)?xl(= zKB?j-w&-cf(K$oA2E$3`#&$F4-R~Ix5Mbz!#^G^SUvsFaBx~xb5YcM|wSX6_J#+n4 zMC^p0fSuXiCa_k7*jvDLc^Vf4*aXCLnhpAWw6-%D)ML9S2ZJ)d6fdKt1#|Lk58aeS zpCe1qgr#g#?mFELs2%o1c(FXKh*XO_R*H3ff2*5DWB;mgBT~iJ7XmVelle7wpw4~} zn>n$VW&Lm5CbQNR{1;>LxYzDozFOLHQ*|hSNF8fmA{Z2Nj*o-L{7XX^8h7lTx4He% zjV5uNvG2$|>O-3l4Y=Ds!^O`7>vSs6xMonOpJd=w7n3*Wo{t0tQDkpWpp5Y@9Xw*LY#T=PTwd61>1_f{( z@^N8$m~H|2obgaA!*`?6gz{ixiILIFYxUOt853_)=Q5b@xtl3A&kH>H{ebYFI8NJk zUORLg^$mT(Z;T-SA;h=vb$6?mm#op*Yy&>F#*}ii-RlGCf)+UFt&`UnF*1C(F>8kFNs$O)u8|&zO6b8`aVtE3nr!=~76u++uXdLCJjn3B1QYx07ON$wumXT>Otlr- zW_NNiaiu+T#@=GsXmeDiy#64GyQ*4B*1(tmehE@T#OU1($yrHtecS6&rIIkU;<5h$gQxU$`Oj`CRS9W_} zamp&@4Y$Z0A*K9R^Bs}}@ag5oV!@qQx9cL;(Qg_iGhH~k{g z$0nGpM?8yid4=(}F>&ZOcDp4tGqH#W}p!JX@F z2fyO#_h>N34SrOK{=1yTf$-VIK-Lh6CuiBqne^8J12YaS57nz4ECez;W&PtyL#i5k zEH2H3#ZKBamu-LU&>o9}C}@^X8Ov}w*)@!t2>tfz;P6Cvv7{))y{|)n#3$UucL=&{ zwxD&&kvY;Vf;7R@Z|6WKLX>`GAnQ}ASZ))V!qaWihOf8D9v!x#2Zr&Tat=(>*v-6v zCI;`fR|_s-$(XYKsvZJzI#5JQXmTvv3l=+V_CuA0ZPBanQ^$qA-XwRU<((C;(I(r3*w%tX&6$v=E39k!Yh-H6Y+w@?< z#406z^;KJtPc%FI;dcLHpTb2;2dN*PUluJReyAP_Cz=IrfS5;!=RwNOnx_rl6yl$E z_K=&tNUTygF{~Vmc`qnOK6apJ9>r|UDF$NU5I{3ejTQF#_3JJ_3i~s16O?smM`^?Z z03BCNVyaRMzIA zY;bzI&T@sVk6*;Xi($kyJ@z8aoEA(5IPnh9mpbw8w1`#3T8>iu?MG5)%j%^Wyre_~ zeX=;!M(i24j{_`xVv585_{{c=m|tCeobZvuTX*Op_8YfO>9G zh}~4@dGMCkt(~Mfnd;5*-J6Mp)U-|;Yi>L9Q;Yh0B=F@4yODOtZO6x})u4_$y8VnZ z5wjpK5VuOtWI0H`|6SnatbUL0PPV>UOSUu+q^%!rrCmel&rC_wP@X~lFUV(sa; z&RC$;+?jkc8u*t6>^U{lW^l2VoN4xRXvf!f4qgis1J2<}Z&NdUaz2%z%hobu zFbC)LYcs&Rw#~!v$0notQe325r`99XpLFt325d;R&%kGW{&L`vKHSA;1xp0k=-mFC}Is*|LM+V3>C zr-$p(4y^;pbl?=e_HW!fTAjPA~deaxptJ z1NYxdW%l~zLKt!SC7#QT{lo0U9oTvq%(UZjuN@8f&^13n;4C`=LZex=>)H@Tmjc0y zRnxiw>ok*+jQ~zsLTVcPfDd2wvNE$!=ywO4XRX=}cE-XYI-Z_MTs)+)oF2V|nvWY| zkL(6KV83VCj<%9>4S1;Dnw2W1W;>wdAb$^c5R)W?Nkcf!TMzia0m3$Djg$V-@4CL_ zr;cMg?^T*FOY=Wp82erMEX%Io;k`AI8@wL_c>ejV)ROEb#ln$>wW8+P5~L72?baA% zDjng>Bvlg>*Qw?ak}q%~>>QR%6y@w@c#nVYRu`BYUH*3e-uu|^B{FE% zVGr&U-la!|qq$saLz-imA1^m|eZd;Nv|}`$#32~{GcUxCbWIHETKt4*%OQ&$lWMVI zX|MhH&N>Y$n&-~8sfPCLZN*pi6JS8#nA?@JYPY$yT9*9B) z4~DyM?7ZPFbl%Uiye5WD8&6uY(AdWMsFkCrAi3Hh2|`~Z$<62@j@kSvH_jbNJa{;9 zGZU;58B*upZj>8m4;A;oT5x*ORjI=6coKgpp{)Jz7m0>4jEeqQtQ3(EH3yDSP8qzb zbxHo4`M_>b^b%(~CTH%Xb{OWt#BJ-^Hn6tZB42yrs>~Icx!Z!jw%S%QCj7ai1QkB` zT^fW^*pwS{5V1oad5ivg2y-b{v~=MmlYt>8I>>cVl3lS+0G(c)lr6BG==9zAJV~MW zeTqN-jhy;ou!|jw)YW092q2~7)QyV%>@n`&+&))-x@>F3NK>R?SNi7GEs7o3yE`(v2&+lYF&jxn{4r)Blu%^hfA74HA@QXB1HhRAqL z52uu;sQ2Eh=B%CvMVk^uxq(q0R=0n+DU--AZq7 z3f4pk1yotNF=YLW)r?d)vVsAyY#dQP0#n#B_G?weOW8K3e}A{Ukn3}|WHaTE=gc^0 z*p`w*b;mkP@!h)9=uIc}wR6oYRl!Aa2f~-kn7`171rn%@-=!*RK_COvkO`57L=c@|PKtYz{uVs+ScigV1Dedv;;*b3>v!hb*j>dg5) z(r)A2^r~p7#^SZ6+(fRKZK)9mj`S4oMw%B|9_PkOJN2ORWgnE@!%e9p#-MFhL(aaa zGRvA zJ%kkrM+WXac;*ul0CDJq8?7kt7_d-d0YT4IhpClXDHucPkUm<4h}R4k0kDM^pZ{9r zxE@BdZ?<-Lo1Jzw+p$bcdv0ZO}`3Cxkf$m2kM%DOJV>y!4|DENtn-4@p6IYGHWajpwo6OT+l;KF- zs@j{dPnwk#vO*#t^y_e@8%&I3Xp%|H-`!M2M3|NIA$TGVs+D+L8qWAiW%0wKo!JHYS*8J~(JJP$fZ&_n^j8^N88`2H^1PkYksW1G<@ z|3>JXOD-D0AQh_9n-j@nSfBfZWaEPLMkI6egF{twNtzi4_$9y@LF1-$aX+IeO}iC@ zblkhtIqAtbqvoxsLbk(2^B}A*@EzkJP_1bl_>n4Va*=3_7=GldcObrPS5^jG4;cl5 z?^*a1QxMiEhg&SEF2+iMs$o}YV^g1Xw38dpYJZc?3?cl}?0gb?DjG~NXQg0v3c8Qo zsw8Jc33hdzr2s199ZYXMmc*4c?vqZvf6ZXr$KQQS`T{B_um2>x7jTS31oEmww!<(3 z&}yN(yQH`XFdR+T0O z^^cI6wV=DMFG3EMb36eDHP_wLS1YuSr~OajHb-6_U4RIvv#+fo#8y*aC`IdO-!Vm0LWa7@bg#W zx6}U!k+oBeo!5xxy9U`O8-%L5I}kWZKqszC8ZGJG4pl4`PV$>G)BW)Ser>E4_LM4> zABW|TNOvo3z0w|*j5gL| z#a<%i0KQU8lFvO_?S6bj)md=O3}8Rk+@C7hQ-KM6QDD+j3aj3Yj4wFa2%=xO5Ek{j z`dPE%UiI$p>u5jPPuTBQfUD1~PqRG8;4bC(Wk3%(PRVSqv$K!S!iL$W68U$}tK@@i zooow%(1VtWrJb=%@?)2#7kLh?v!_1vGoGdX>v(@l#975c2)Ca5XgZg_u{`=1Xg;%a z2+3R}i)-pLPRdPf@N4iJUNG>Vyi;$d7h!b*fy|Ex%)&+JZ)|QZnb9qfZ+L#FCP+s* z0j$EahFs|o^sI>nf3FE`YPFHIwNo>SvRv=0-!*3~2O$sea~aN)G@zrp!=4r+tf^&3X`Ex#J6=$NN z%r%jC^}8#rJ<^gA_%W;P;@p1M$3qIqKroGD#TU|_E5C4o_3(l1_mVVesmxr9~=i@~zxq^ao=1hjF3IF-t2s7~==ZTIzO1XEvW2 zZenVt&)P`BF+)hRy~&VRC{C3>ig{r^9n%N}(=QJG2g0s#%Mwd+Sl4u_Irl1_sS6{w zFRm#4hMy%LTlwOr18-3(Dq6~Cma=o}G;G*C$W}R8@TQlK(Opm45v%u8MbjgrWtb9r z#EqWLYZki+N`?i(v$$sTi0cRQp$f2~q7r%!k|b;drHtpvwvh>g^Qr%$lVR=Drg- zfWOR>Q?2*c;Q?RFcc=YAmf^OKw*y_`2O`fh`Wb7-A#k(2V`HH~lTAqo5a+alC*&zDw5##!kDMVr{nZ#(Io0O_Z5l3pQp6{Fn zneiiO91M@^xevc{FX3}Q+-kzedi63+Sz_G6t^!KfE0_$b^se709KZFsk2S|y--S!j zHYA&ASn$IvJ-A74pyJcZE!?c{KxRmRb%iJ8q4yC*9dFT)28-vNiovd3XyiT&g*$8o zG?I5_68y&H??Vz$2msNkT?5R3a5Q@OALF9m5e0%gVHpD4t(su~5vPqOZxA+YvLQcO zCU_vyOmk<3ts@^%Nb{ip&erZQa4+y?^nV-rXI#OAlG9Lzif5T1zV4rj7_x_;iKzG# zG${wC#BJqCMTv28Y9UzmznBw1k5qmHLJu03`y*o@=fi{$e75lMQ(wV?wT{Zd5GoyM zot9_>)Ht%Cpt~ZSB)jNEq&Z? z^Zfo4?{-3Y5LkO%h?ZOQq^+S`S9E>rHCc*mu>lsvIBsL<0v#jyx?lKNF@7Pq#9y?B z{4jG6-N)Xt5m**!R&Kr%^D|F*C^6~K+I~o(g$Y=j$$4b9`lNDEiDQ#A*Qat#{To5A z__eAy{-7>uauI{yOW-L_MfYz);vBc_@|z1%%B#&xhf^dFJwE(3n|^_^g;T34OCgO> zVl)tIG-4qjft{z6NxHig@`WVQLRlL1wA9c)uNk}RrN~xGck)R zKc6bvJu?p;f$ADj5gB#A(Q@jOJBcj;`7g=MF}7&;+a=F`_?YboPDs3QZMMzvEdlbx zpYG4)otr<*awP~(`v@JYCXkrL>Xg298 z%Q!jlKsu1AZC?Dh6t+|IG73C0m4dqVol7T&aHNHmB4*y7R^f*aKVcc>oIzLmQvL&1 z{CZ2Jc>)iX_9ciXRA$KIv=CRZ#CN_jrTsafDlsq>|1v z53H^Q+|Ojg)Bo!X9{ToShIGt7OI3ScLSPd6B97-0^63!cn}K+NnbqgIAfvszBpW%5 zFsreWCRw_fVlpE8pQAw2aRBH>#s-)UiIbL=F92J^WwHg+kwpPxGvGKys5crR!($#Sg zOrC_@7>zL;UHAm_m;+6E0R2_3NE-2oCaRe;B^6Cr?HTN>>BCRgH-CSpGoS{bhc!^w zW{hUZ%Ll7~uM5qjacGBVv=Bk5E&LP}Gr%?|di;yVH~KE)gl(Gq0~H;j{#{u*g^x8M z)>5;^0;}HxMkA?cO07Bv+@SKO`R}Jt##1yOQjbuyybv4so5pmtv1`F3O1#E@Jvt%> zxn&~7a%;vHEXQAr`dwX&wsa~so8T?;?pHgq+zW*hH)6L;&;7!f=)k6CEEASYlmn1L z&EffZmS#Z#POc=8-EL@mlJB5PU))~X;C=HMgNo(8MP>JpB)xh0*44h(A?`CKA|$i@ z@%EtoVIt_NzT@np0_FEa;_p*xLIvrd2|HstexgxsN9-yQPRmBL2Ka)FO zN1{b-%8>|E_-2eB1nva$Av&U_(18X`wY_joJHh%qRoLAyPZD7q@wchsqBqjHUh0v* zIIWYk^rJv}Htn*r2l}wpZIqJo%wn^Nsf4c<<=)c?A7%9DOAa@f-&iSTU=>wh&joFJ zb3%?Q5A;0cR6DpDcCsN=Y^Mo%*b7{F3ETzOFEkmSTxFj)N5ES`(7MZP0U&%IG5JcG zy}%&4r0b5TwT*}Rw@Dw)O4Tq2ATS7 zIJm^$LQHfq7pwjp&as(s&-|PgCzh?1!(c(zK~P7B%|@z!@sKI}*~H-%_x@)eD~^=D zV>5zU+0_rD1M`{~5@H)N0c5@l=~8UYg;1}c63C2?mf9u1*b9}v?DIrl5?-K*qo9oe z@%r~ywG!Q`%2$!NXcC(BEn?WCk#C0(A*ool$%q++LJ^hITA2N*%VuEiHB*SSoAft- zZee$$WE&bj6Z(|}$;TCEuj`+;UB`S2KloM!`0`GdY6QKk5HoHvq}SfgY(K&s%n`6E zI_{A9$|u8Gb@ns^VK5^gLfMcy)lR{Y;T^UfX7dHE$vRwottRD{v}t3dkoft8DvqJ{ zpgwW%#jwwaSy#z0GkBPW99f_J@!K)_r%0mGEN%?;o-Pbm*GYLaHZ0WG?k zX$V}qBWc5Fd7Q>yXG#3FW)Fq0{~sSn==Xg6oQ<8aEYWq`RGTf8&~vNx&p#4E4+Lpy zym*6ViDK%;_se}9*#G*nvotDvyf(JY`DBO=8D7@<>8^ZuSe&D=dNlzhpB*(5{BWA% z!`f+djUxI1z4H#R@!0S9NsH(@0!`eLchZu7faQ7R3h9UpL_vmciR&Zl3)K2zi?F|! zbdwujsgf)DX}R5auoeBT0AJaG+U~JC*LaFGR^1S5PTp`4T9ngpZA!-UwhKXzBNVNq9dW!5QjDB zO~3#7EH|hV*(@>55XBRVIxSiFx3plU%&spHXU^viG8dE7b0^#G& z9XCePrM#EX@}ClkWEwFrXfX?yrG)JDT=hsV z*#;G;;e_pbRhd`RxsaRDT*$qpqR=Fbk7#E#EkVsmW(6lv^-~J|H3R~x_Iln*bH@IJ zdV2q}ER*Wfz2?hm2!EMXiI;aiky(>F{lg-Fb$Ti398!G(BM!K5V6Oq@KM04$JtuM8 zU1)W|{z0~0@T^gBK)6Tq!yqDT2a(ntft*VL+Lzbi{x8ejrLa3zydewTnsBpK@#;QE z0%*YjfP-;r)_6UCfS1a|Pb2Zicu&497Wm3W-qbu(%*#ISs;|cGt%8_3mRZw&bOR&? zh{`xhXeMBCT+y5Z%vsVD9_%&cS}9u z2D-ND4?0}ilD#{c6&vTg>mW530r~WFfH02M%I-d*`RqxH?|?u-o#$2$5(0Bc6NEWD(SeS950y@($>r0bSqC zu0H0(#V@S5RO8>Q-rfe#x|)l?+o`gD-laT1k)C$4rN_l)9`OXz?wy8W^jjgMwClmt z%v14T(1<}h_YGx5TCr8mQsKzGPaMQzROn4WKxS%+pRMWdyErKfVA=gTej)I|R8k}T z&8RcT-$QHStD;=xfPKZ0XAgLsv|6!G! z1bEAsp2Oq@f=uo}pa?pu>vpG=7E&Z7B&|g{az*69Xffx!m1)STMMvwh4M*5HhSx!6 z^;?f^pY2EKI%^=4z94PYBg5vSftd{+z`zY%bs_;-%TR!`eAfOf9-hyE zx=}ow3u!bV-RQ^0%V(tfxM62!1(rWb4$2RVBeda7<3$@hX;!mET%E`Qsg6_maThoa z<AklarE8hnXdr}~Nr!q}!6)snf*Z1H%Tsv8&aDcJg;#q+m zzzH2#e`!8vO8k%Wg^&{FY3v-q4YCKxby~ceMd5t2>MIsPh9Lmp>r&#|;O{C=eh_us zf27X()(IO|9h%-lEvBRnJIjZSSF?(90=8(`SSg}hk%%D(#c$vQp_8=!@GNGK z1=;iCau_$>O|gI>!Mq1Uz6?WlhKXpr-j?qONEk*S$@h##oNMHt%Kbeh22D z4{8#jWL!6RNrTC%@q5c{|CTD|Td$bd=~$GTZcm6SnVN2`o+vv;hu3v3$fhUwQ=z9H z{oKE=beNO0SnK^bSl1&tE{(41vShCED|U@Q538hu2HFZQPsleNwQD;YYd57}NL**+ zSKEdpN|5ymFXLmSjvD#Pbd4UyJ{;+LK5o(5T~HWB9$wUe1;0_h(Q#J!LAYO#@XMK^ z!ZcTv`&8`PH5%4y<(YSh3IehM9?!Y!XgEe(Ym-+~UfHrz4Pg%Tb@}yPlF^@FP*0fw8US&>KF5Qc1}_}K{~jGOQMnv@3_5XOkm zp!X`+G89wHe&Z8UVa`I@#XoP2&f0KK*@|`1^zku&lUv4%cDoH*9d2bX$8#hr%boc4 z*6w8HpOrf1Us3oaGEX{axrl#@kua(Q?k|8Nq&71~z!q!uV5Pzca>z- z{olSPQl|rH-ZdQjn_*Q)|38nTnosjmT=6QoBPoH`bZ~OuvHZq+jryqam$=us{)2zO zK7sB@ad67(otNC)6!JTaeyYKdw25JCAe<|Lb$^82yCYOvChmUm~sq~{^iPX8F z87>PEXt|Kp!lhLTP-4jBRMQ4v2L@4Ts96x|Fvc?s2n- zb=|_Cr?5K`OsZM~_9nMQ)rJ(+>!kHYl=OB)7BQZL|DANqe4xh?wIp9kzP%QIAGllU zo=?UW_!Am2EhIj7n-2bAa1*)Xsa?;4@j12+A}NT9RV_K z96Pn1D0u=$)Uf0nH?iZ6XvVw<`m19nx_1n!rPs|G85I z_0m$f&P|U`9~;|XW)8KC7-N7Gr=rQsN6fiN`iikF#N*ipyv=Wma zC={&#QG?}y`9h&Am&DepA`BIC_1IsXU^Cw`R|hSAgO7LiUBz2Ai$5$q6gwPv7w*3C z_AEx=-CJG~yAE;Qbv^=rnI!It$<57&&dv27o@HHqd*U*F@e6NLCbj3GAl_nJ>_w9; z$G4s3RM8AbUhkCXj*zWm(S4{2yZ;*Plp(VW-~e-=om)(>M2uA@`|;}0PJuxtq5P}@ zHg5FdI~Cy$3Cnr^R(E&wu4JmL>N)PI@LilOD^Ue~nd;rqdE*+zf`)uVJGhr~{m3T2 zN(Xq44=#v+K~+xp+2IF@{igp)N}9JPks4k{uq}~z38uw40%2*I

WzK1_F5N6Z!2 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�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 From 09cf3e4242e65a3a0b020fb95ed1a32b5adabfb0 Mon Sep 17 00:00:00 2001 From: Kevin Granade Date: Tue, 7 Jan 2020 22:58:12 -0800 Subject: [PATCH 28/36] Revert "Lower material thickness for ballistic vest." --- data/json/items/armor/ballistic_armor.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/json/items/armor/ballistic_armor.json b/data/json/items/armor/ballistic_armor.json index 48567c5fad332..6a7aa7f2a38d8 100644 --- a/data/json/items/armor/ballistic_armor.json +++ b/data/json/items/armor/ballistic_armor.json @@ -16,7 +16,7 @@ "coverage": 85, "encumbrance": 10, "warmth": 15, - "material_thickness": 7, + "material_thickness": 20, "flags": [ "STURDY", "OUTER", "WATER_FRIENDLY" ] } ] From 8355299ba887999c26ff8412fcc6704a3b02ecac Mon Sep 17 00:00:00 2001 From: ZhilkinSerg Date: Tue, 7 Jan 2020 12:35:42 +0300 Subject: [PATCH 29/36] Fix redraw in vehicle interaction menu --- src/veh_interact.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/veh_interact.cpp b/src/veh_interact.cpp index 99399eb2751e6..906aac3e87493 100644 --- a/src/veh_interact.cpp +++ b/src/veh_interact.cpp @@ -337,6 +337,8 @@ void veh_interact::do_main_loop() move_cursor( vec->xy() ); } else if( action == "QUIT" ) { finish = true; + } else if( action == "HELP_KEYBINDINGS" ) { + redraw = true; } else if( action == "INSTALL" ) { if( !veh->handle_potential_theft( dynamic_cast( g->u ) ) ) { redraw = true; From a74605ad2511d87b9c22ead1db92214aaf7531c6 Mon Sep 17 00:00:00 2001 From: Fris0uman <41293484+Fris0uman@users.noreply.github.com> Date: Wed, 8 Jan 2020 08:14:52 +0100 Subject: [PATCH 30/36] Increase assisted effect from nurse bot (#36798) * Increase max_intensity of assisted effect * Increase intensity of assisted effect from nurse bot --- data/json/effects.json | 1 + src/monattack.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/data/json/effects.json b/data/json/effects.json index 7d4b43497fcde..b68c18f36d1e1 100644 --- a/data/json/effects.json +++ b/data/json/effects.json @@ -258,6 +258,7 @@ "type": "effect_type", "id": "assisted", "name": [ "Assisted" ], + "max_intensity": 1000, "desc": [ "You're receiving assistance to practice a surgery." ] }, { diff --git a/src/monattack.cpp b/src/monattack.cpp index b645ca62b5c28..bdde69f4c9298 100644 --- a/src/monattack.cpp +++ b/src/monattack.cpp @@ -2927,7 +2927,7 @@ bool mattack::nurse_assist( monster *z ) string_format( _( "a soft robotic voice say, \"Welcome doctor %s. I'll be your assistant today.\"" ), Name::generate( target->male ) ) ); - target->add_effect( effect_assisted, 20_turns, num_bp, false, 3 ); + target->add_effect( effect_assisted, 20_turns, num_bp, false, 12 ); return true; } } From b6c48d830a7ec649ccc561f9f3742f4e9fdbeab8 Mon Sep 17 00:00:00 2001 From: Maleclypse <54345792+Maleclypse@users.noreply.github.com> Date: Wed, 8 Jan 2020 03:02:43 -0500 Subject: [PATCH 31/36] [Aftershock] Wraitheon exec helicopter crash (#36766) --- data/mods/Aftershock/scenarios.json | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 data/mods/Aftershock/scenarios.json diff --git a/data/mods/Aftershock/scenarios.json b/data/mods/Aftershock/scenarios.json new file mode 100644 index 0000000000000..dcc2c12b6abbc --- /dev/null +++ b/data/mods/Aftershock/scenarios.json @@ -0,0 +1,8 @@ +[ + { + "copy-from": "heli_crash", + "type": "scenario", + "extend": { "map_special": "mx_helicopter", "professions": [ "afs_affluent_executive", "afs_wraitheon_executive" ] }, + "ident": "heli_crash" + } +] From 44b584ec37da53fdb9776c639088541cea57898e Mon Sep 17 00:00:00 2001 From: 1n17 <59138068+1n17@users.noreply.github.com> Date: Wed, 8 Jan 2020 09:24:31 +0100 Subject: [PATCH 32/36] Update game.cpp (#36787) remove superfluous refresh calls from list item/monster views set item list width to match default/minimal monster list width --- src/game.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/game.cpp b/src/game.cpp index 93361bff9b1cb..bffd0f45d37c7 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -7131,8 +7131,6 @@ void game::reset_item_list_state( const catacurses::window &window, int height, xpos += shortcut_print( window, point( xpos, ypos ), c_white, c_light_green, tokens[i] ) + gap_spaces; } - - refresh_all(); } void game::list_items_monsters() @@ -7174,7 +7172,6 @@ void game::list_items_monsters() } } - refresh_all(); if( ret == game::vmenu_ret::FIRE ) { avatar_action::fire( u, m, u.weapon ); } @@ -7184,7 +7181,7 @@ void game::list_items_monsters() game::vmenu_ret game::list_items( const std::vector &item_list ) { int iInfoHeight = std::min( 25, TERMY / 2 ); - const int width = 44; + const int width = 45; const int offsetX = TERMX - VIEW_OFFSET_X - width; catacurses::window w_items = catacurses::newwin( TERMY - 2 - iInfoHeight - VIEW_OFFSET_Y * 2, From 0e8715448270838d007c38a4f02a23a177e00141 Mon Sep 17 00:00:00 2001 From: Kilvoctu Date: Wed, 8 Jan 2020 08:55:34 -0600 Subject: [PATCH 33/36] Construction recipe for barred window with curtains (#36797) * Construction recipe for barred window with curtains * lint * add conditional for tear down Add conditional handler for tearing down curtains from a barred window * fix missing declaration No shortcuts... download a compiler, learn c++, and finish what I started. Game compiles, load save, no error, tear down curtain and they stayed down * astyle learn what astyle is and attempt application. minor fix, remove unneeded "."'s --- data/json/construction.json | 11 ++++ .../terrain-windows.json | 59 +++++++++++++++++++ src/iexamine.cpp | 2 + src/mapdata.cpp | 4 +- src/mapdata.h | 2 +- 5 files changed, 76 insertions(+), 2 deletions(-) diff --git a/data/json/construction.json b/data/json/construction.json index eb0efc5dc9345..306424fd9555c 100644 --- a/data/json/construction.json +++ b/data/json/construction.json @@ -1988,6 +1988,17 @@ "pre_terrain": "t_window_alarm", "post_terrain": "t_window_bars_alarm" }, + { + "type": "construction", + "description": "Install Bars Onto Window", + "category": "CONSTRUCT", + "required_skills": [ [ "fabrication", 2 ] ], + "time": "30 m", + "qualities": [ [ { "id": "SAW_W", "level": 1 } ], [ { "id": "HAMMER", "level": 2 } ] ], + "components": [ [ [ "nail", 4 ] ], [ [ "sheet", 2 ] ], [ [ "stick", 1 ] ], [ [ "string_36", 1 ] ] ], + "pre_terrain": "t_window_bars", + "post_terrain": "t_window_bars_curtains" + }, { "type": "construction", "description": "Build Large Metal Support", diff --git a/data/json/furniture_and_terrain/terrain-windows.json b/data/json/furniture_and_terrain/terrain-windows.json index 1452fec5999a0..3d5a9f3c42b92 100644 --- a/data/json/furniture_and_terrain/terrain-windows.json +++ b/data/json/furniture_and_terrain/terrain-windows.json @@ -571,6 +571,65 @@ "items": [ { "item": "glass_shard", "count": [ 34, 50 ] } ] } }, + { + "type": "terrain", + "id": "t_window_bars_curtains", + "name": "window with metal bars and curtains", + "description": "A barred window with fancy curtains that have been drawn shut, blocking sunlight and visibility. The curtains can only be opened on the inside. If you examined the curtains more closely, you could peek through the drapes or tear down everything.", + "symbol": "\"", + "looks_like": "t_curtains", + "color": "light_gray", + "move_cost": 0, + "coverage": 95, + "roof": "t_flat_roof", + "flags": [ "NOITEM", "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW_CURTAINS", "REDUCE_SCENT", "CONNECT_TO_WALL", "BLOCK_WIND" ], + "examine_action": "curtains", + "open": "t_window_bars_domestic", + "bash": { + "str_min": 3, + "str_max": 6, + "sound": "glass breaking!", + "sound_fail": "whack!", + "sound_vol": 16, + "sound_fail_vol": 10, + "ter_set": "t_window_bars", + "items": [ + { "item": "glass_shard", "count": [ 34, 50 ] }, + { "item": "sheet", "count": 2 }, + { "item": "stick", "count": 1 }, + { "item": "string_36", "count": 1 } + ] + } + }, + { + "type": "terrain", + "id": "t_window_bars_domestic", + "name": "window with metal bars and curtains", + "description": "A giant sheet of glass inserted into a window with thick security grilles, making it impossible to crawl through. Typically installed for high-value stores, or at least stores in bad neighborhoods. This one has been retrofitted with curtains.", + "symbol": "#", + "looks_like": "t_window_bars", + "color": "light_gray", + "move_cost": 0, + "roof": "t_flat_roof", + "flags": [ "TRANSPARENT", "NOITEM", "OPENCLOSE_INSIDE", "BARRICADABLE_WINDOW_CURTAINS", "REDUCE_SCENT", "CONNECT_TO_WALL" ], + "examine_action": "curtains", + "close": "t_window_bars_curtains", + "bash": { + "str_min": 3, + "str_max": 6, + "sound": "glass breaking!", + "sound_fail": "whack!", + "sound_vol": 16, + "sound_fail_vol": 10, + "ter_set": "t_window_bars", + "items": [ + { "item": "glass_shard", "count": [ 34, 50 ] }, + { "item": "sheet", "count": 2 }, + { "item": "stick", "count": 1 }, + { "item": "string_36", "count": 1 } + ] + } + }, { "type": "terrain", "id": "t_window_stained_green", diff --git a/src/iexamine.cpp b/src/iexamine.cpp index 49e06d07ace1c..523663f6c22de 100644 --- a/src/iexamine.cpp +++ b/src/iexamine.cpp @@ -3753,6 +3753,8 @@ void iexamine::curtains( player &p, const tripoint &examp ) g->m.ter_set( examp, t_window_no_curtains_open ); } else if( ter == t_window_domestic_taped ) { g->m.ter_set( examp, t_window_no_curtains_taped ); + } else if( ter == t_window_bars_domestic || ter == t_window_bars_curtains ) { + g->m.ter_set( examp, t_window_bars ); } g->m.spawn_item( p.pos(), "nail", 1, 4, calendar::turn ); diff --git a/src/mapdata.cpp b/src/mapdata.cpp index d9579265ff03f..522a261cfe2bc 100644 --- a/src/mapdata.cpp +++ b/src/mapdata.cpp @@ -520,7 +520,7 @@ ter_id t_null, t_door_glass_c, t_door_glass_o, t_door_glass_frosted_c, t_door_glass_frosted_o, t_portcullis, t_recycler, t_window, t_window_taped, t_window_domestic, t_window_domestic_taped, t_window_open, - t_curtains, + t_curtains, t_window_bars_curtains, t_window_bars_domestic, t_window_alarm, t_window_alarm_taped, t_window_empty, t_window_frame, t_window_boarded, t_window_boarded_noglass, t_window_reinforced, t_window_reinforced_noglass, t_window_enhanced, t_window_enhanced_noglass, t_window_bars_alarm, t_window_bars, @@ -712,8 +712,10 @@ void set_ter_ids() t_window_taped = ter_id( "t_window_taped" ); t_window_domestic = ter_id( "t_window_domestic" ); t_window_domestic_taped = ter_id( "t_window_domestic_taped" ); + t_window_bars_domestic = ter_id( "t_window_bars_domestic" ); t_window_open = ter_id( "t_window_open" ); t_curtains = ter_id( "t_curtains" ); + t_window_bars_curtains = ter_id( "t_window_bars_curtains" ); t_window_alarm = ter_id( "t_window_alarm" ); t_window_alarm_taped = ter_id( "t_window_alarm_taped" ); t_window_empty = ter_id( "t_window_empty" ); diff --git a/src/mapdata.h b/src/mapdata.h index 864f5a17640e0..bb1f1d138bad2 100644 --- a/src/mapdata.h +++ b/src/mapdata.h @@ -434,7 +434,7 @@ extern ter_id t_null, t_door_glass_c, t_door_glass_o, t_door_glass_frosted_c, t_door_glass_frosted_o, t_portcullis, t_recycler, t_window, t_window_taped, t_window_domestic, t_window_domestic_taped, t_window_open, - t_curtains, + t_curtains, t_window_bars_curtains, t_window_bars_domestic, t_window_alarm, t_window_alarm_taped, t_window_empty, t_window_frame, t_window_boarded, t_window_boarded_noglass, t_window_bars_alarm, t_window_bars, t_window_stained_green, t_window_stained_red, t_window_stained_blue, From e7fabcaec840d769866ac43b0ff9f2866631aabd Mon Sep 17 00:00:00 2001 From: Matthew Taylor Date: Wed, 8 Jan 2020 14:58:12 +0000 Subject: [PATCH 34/36] Allow armor inserts in ballistic vests (#36778) * Allow armor inserts in ballistic vests * Reduce assembly time * Update ballistic plate descriptions --- data/json/itemgroups/clothing.json | 4 ++-- data/json/items/armor/ballistic_armor.json | 25 ++++++++++++++++++--- data/json/items/migration.json | 5 +++++ data/json/items/resources/misc.json | 26 ++++++++++++++++++++++ data/json/recipes/armor/torso.json | 13 +++++++++++ 5 files changed, 68 insertions(+), 5 deletions(-) diff --git a/data/json/itemgroups/clothing.json b/data/json/itemgroups/clothing.json index 904e54d2700f2..87dfd1d08c068 100644 --- a/data/json/itemgroups/clothing.json +++ b/data/json/itemgroups/clothing.json @@ -102,7 +102,7 @@ { "item": "boots_combat" }, { "item": "helmet_army", "prob": 80 }, { "item": "gloves_tactical", "prob": 60 }, - { "item": "ballistic_vest", "prob": 90 }, + { "item": "ballistic_vest_esapi", "prob": 90 }, { "item": "molle_pack", "prob": 85 }, { "group": "clothing_tactical_leg", "prob": 15 }, { @@ -139,7 +139,7 @@ { "item": "boots_combat" }, { "collection": [ { "item": "helmet_army" }, { "item": "helmet_liner" } ], "prob": 80 }, { "collection": [ { "item": "gloves_liner", "prob": 60 }, { "item": "winter_gloves_army" } ], "prob": 80 }, - { "item": "ballistic_vest", "prob": 90 }, + { "item": "ballistic_vest_esapi", "prob": 90 }, { "item": "molle_pack", "prob": 85 }, { "group": "clothing_tactical_leg", "prob": 15 }, { diff --git a/data/json/items/armor/ballistic_armor.json b/data/json/items/armor/ballistic_armor.json index 6a7aa7f2a38d8..18d3116985f97 100644 --- a/data/json/items/armor/ballistic_armor.json +++ b/data/json/items/armor/ballistic_armor.json @@ -1,10 +1,29 @@ [ { - "id": "ballistic_vest", + "id": "ballistic_vest_empty", "type": "ARMOR", "category": "armor", "//": "Based on US Army SPCS", - "name": { "str": "ballistic vest" }, + "name": { "str": "empty ballistic vest" }, + "description": "Ballistic armor without any armor inserts. The soft armor plate carrier is still protective but it won't stop high energy projectiles.", + "weight": "2911 g", + "volume": "6 L", + "price": 160000, + "material": [ "nylon" ], + "symbol": "[", + "color": "light_gray", + "covers": [ "TORSO" ], + "coverage": 85, + "encumbrance": 6, + "warmth": 15, + "material_thickness": 6, + "flags": [ "STURDY", "OUTER", "WATER_FRIENDLY" ] + }, + { + "id": "ballistic_vest_esapi", + "type": "ARMOR", + "category": "armor", + "name": { "str": "ESAPI ballistic vest" }, "description": "Ballistic armor with ESAPI ceramic armor plates.", "weight": "9911 g", "volume": "6 L", @@ -17,6 +36,6 @@ "encumbrance": 10, "warmth": 15, "material_thickness": 20, - "flags": [ "STURDY", "OUTER", "WATER_FRIENDLY" ] + "flags": [ "STURDY", "OUTER", "WATER_FRIENDLY", "NO_REPAIR" ] } ] diff --git a/data/json/items/migration.json b/data/json/items/migration.json index ea376a7942e66..d930b0e8d342d 100644 --- a/data/json/items/migration.json +++ b/data/json/items/migration.json @@ -958,5 +958,10 @@ "id": "40mm_teargas", "type": "MIGRATION", "replace": "40x46mm_m651" + }, + { + "id": "ballistic_vest", + "type": "MIGRATION", + "replace": "ballistic_vest_esapi" } ] diff --git a/data/json/items/resources/misc.json b/data/json/items/resources/misc.json index 32eeb54d5f63d..68bc9ef95cce7 100644 --- a/data/json/items/resources/misc.json +++ b/data/json/items/resources/misc.json @@ -79,5 +79,31 @@ "symbol": "=", "color": "dark_gray", "ammo_type": "components" + }, + { + "id": "esapi_plate", + "type": "GENERIC", + "category": "spare_parts", + "name": { "str": "ESAPI ballistic plate" }, + "description": "A polygonal ceramic ballistic plate with a slightly concave profile. Its inner surface is coated with Ultra High Molecular Weight Polyethylene, and is labelled \"TOP\", while its outer surface is labelled \"STRIKE FACE\". This is intended to be worn in a ballistic vest and can withstand several high energy rifle rounds before breaking.", + "weight": "2500 g", + "volume": "1533 ml", + "price": 60000, + "material": "ceramic", + "symbol": ",", + "color": "dark_gray" + }, + { + "id": "esbi_plate", + "type": "GENERIC", + "category": "spare_parts", + "name": { "str": "ESBI ballistic plate" }, + "description": "A polygonal ceramic ballistic plate with a slightly concave profile. \"STRIKE FACE\" is printed on its outer surface. This is designed to be worn in the sides of a plate carrier and can withstand several high energy rifle rounds before breaking.", + "weight": "1 kg", + "volume": "600 ml", + "price": 60000, + "material": "ceramic", + "symbol": ",", + "color": "dark_gray" } ] diff --git a/data/json/recipes/armor/torso.json b/data/json/recipes/armor/torso.json index fcc61ac240e22..b447dc1e799ce 100644 --- a/data/json/recipes/armor/torso.json +++ b/data/json/recipes/armor/torso.json @@ -491,6 +491,19 @@ [ [ "kevlar", 1 ], [ "modularvest", 1 ], [ "swat_armor", 1 ], [ "kevlar_plate", 16 ] ] ] }, + { + "result": "ballistic_vest_esapi", + "type": "recipe", + "category": "CC_ARMOR", + "subcategory": "CSC_ARMOR_TORSO", + "skill_used": "tailor", + "time": "2 m", + "reversible": true, + "decomp_learn": 0, + "autolearn": true, + "components": [ [ [ "ballistic_vest_empty", 1 ] ], [ [ "esapi_plate", 2 ] ], [ [ "esbi_plate", 2 ] ] ], + "flags": [ "BLIND_EASY" ] + }, { "result": "modularvest", "type": "recipe", From bb7e3c421785083a2d02c8dbd02c4aa46c450f93 Mon Sep 17 00:00:00 2001 From: Matthew Taylor Date: Wed, 8 Jan 2020 17:27:39 +0000 Subject: [PATCH 35/36] Update s_clothes chances (#36823) --- data/json/regional_map_settings.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/data/json/regional_map_settings.json b/data/json/regional_map_settings.json index fdc35e55c8eca..15516b1b8a73e 100644 --- a/data/json/regional_map_settings.json +++ b/data/json/regional_map_settings.json @@ -644,13 +644,13 @@ "s_gun_2": 200, "s_gun_3": 200, "s_gun_4": 200, - "s_clothes": 200, + "s_clothes": 450, "s_clothes_1": 200, "s_clothes_2": 200, - "s_clothes_3": 200, - "s_clothes_4": 200, - "s_clothes_5": 200, - "s_clothes_6": 200, + "s_clothes_3": 100, + "s_clothes_4": 300, + "s_clothes_5": 100, + "s_clothes_6": 450, "s_library": 200, "s_library_1": 200, "s_library_2": 200, From 4322f1562689636c1149adab72a227a66664d101 Mon Sep 17 00:00:00 2001 From: Jerimee Richir Date: Wed, 8 Jan 2020 17:38:54 -0500 Subject: [PATCH 36/36] Update JSON_INFO.md (#36827) --- doc/JSON_INFO.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/doc/JSON_INFO.md b/doc/JSON_INFO.md index cf639b95e5599..9b148c1726db6 100644 --- a/doc/JSON_INFO.md +++ b/doc/JSON_INFO.md @@ -26,7 +26,7 @@ Use the `Home` key to return to the top. + [Monster Factions](#monster-factions) + [Monsters](#monsters) + [Names](#names) - + [Professions](#professions) + + [Profession item substitution](#profession_item_substitution) - [`description`](#-description-) - [`name`](#-name-) - [`points`](#-points-) @@ -37,7 +37,6 @@ Use the `Home` key to return to the top. - [`flags`](#-flags-) - [`cbms`](#-cbms-) - [`traits`](#-traits-) - + [Profession item substitution](#profession_item_substitutions) + [Recipes](#recipes) + [Constructions](#constructions) + [Scent Types](#scent_types)