diff --git a/build-scripts/build.sh b/build-scripts/build.sh index 74807d81cd0d8..cc9172489bd68 100755 --- a/build-scripts/build.sh +++ b/build-scripts/build.sh @@ -145,7 +145,7 @@ then cd android # Specify dumb terminal to suppress gradle's constatnt output of time spent building, which # fills the log with nonsense. - TERM=dumb ./gradlew assembleRelease -Pj=$num_jobs -Plocalize=false -Pabi32=false -Pabi64=true -Pdeps=/home/travis/build/CleverRaven/Cataclysm-DDA/android/app/deps.zip + TERM=dumb ./gradlew assembleRelease -Pj=$num_jobs -Plocalize=false -Pabi_arm_32=false -Pabi_arm_64=true -Pdeps=/home/travis/build/CleverRaven/Cataclysm-DDA/android/app/deps.zip else make -j "$num_jobs" RELEASE=1 CCACHE=1 BACKTRACE=1 CROSS="$CROSS_COMPILATION" LINTJSON=0 diff --git a/build-scripts/mod_test_blacklist b/build-scripts/mod_test_blacklist index c08830f779ff7..5fcc595c4ac3b 100644 --- a/build-scripts/mod_test_blacklist +++ b/build-scripts/mod_test_blacklist @@ -1,7 +1,5 @@ -aftershock blazemod crt_expansion -generic_guns Graphical_Overmap mapgen_demo more_locations diff --git a/data/json/itemgroups/SUS/domestic.json b/data/json/itemgroups/SUS/domestic.json index 2e6c025c0863d..34b11cd597c70 100644 --- a/data/json/itemgroups/SUS/domestic.json +++ b/data/json/itemgroups/SUS/domestic.json @@ -609,35 +609,63 @@ ] }, { - "id": "SUS_bathroom_toiletries", + "id": "SUS_bathroom_sink", "type": "item_group", "//": "SUS item groups are collections that contain a reasonable realistic distribution of items that might spawn in a given storage furniture.", - "//2": "This is a category for all the items which appear in bathrooms, which are NOT immediately useful medicines. This list is created in part to not ruin player's chances of finding antibiotics, antifungals and asprin, as it suppliments the current bathroom drops instead of replacing. Item probabilities are loosely based on how likely families would take an item with them when evacuating.", + "//2": "This group is for a bathroom sink.", "subtype": "collection", "entries": [ { "item": "soap_holder", "prob": 40 }, - { "item": "soap", "count": [ 1, 4 ], "prob": 60 }, + { "item": "soap", "count": [ 1, 4 ], "prob": 90 }, + { "item": "razor_shaving", "count": [ 1, 2 ], "prob": 20 }, { "item": "bleach", "prob": 15 }, { "item": "ammonia", "prob": 20 }, - { "item": "razor_shaving", "count": [ 1, 2 ], "prob": 75 }, - { "item": "shavingkit", "prob": 1 }, - { "item": "mirror", "prob": 25 }, - { "item": "toothbrush_plain", "count": [ 1, 3 ], "prob": 45 }, - { "item": "hairbrush", "count": [ 1, 2 ], "prob": 60 }, + { "item": "toothbrush_plain", "count": [ 1, 3 ], "prob": 45 } + ] + }, + { + "id": "SUS_hair_drawer", + "type": "item_group", + "//": "SUS item groups are collections that contain a reasonable realistic distribution of items that might spawn in a given storage furniture.", + "//2": "This group is for a drawer for haircare tools.", + "subtype": "collection", + "entries": [ + { "item": "hairbrush", "count": [ 1, 2 ], "prob": 90 }, + { "item": "comb_pocket", "count": [ 1, 2 ], "prob": 75 }, { "item": "curler_hair", "prob": 25 }, - { "item": "string_floss", "count": [ 1, 2 ], "prob": 50 }, - { "item": "comb_pocket", "count": [ 1, 2 ], "prob": 55 }, - { "item": "plunger_toilet", "prob": 90 }, - { "item": "plunger_futuristic", "prob": 20 }, - { "item": "cu_pipe", "prob": 10 }, - { "item": "hose", "prob": 10 }, - { "item": "sponge", "count": [ 1, 3 ], "prob": 75 }, - { "item": "candle", "count": [ 1, 2 ], "prob": 20 }, - { "item": "matches", "prob": 10 }, - { "item": "toilet_paper", "prob": 80 }, { "item": "hair_dryer", "prob": 60 }, - { "item": "curling_iron", "prob": 50 }, - { "item": "brush_toilet", "prob": 75 } + { "item": "curling_iron", "prob": 20 } + ] + }, + { + "id": "SUS_toilet", + "type": "item_group", + "//": "SUS item groups are collections that contain a reasonable realistic distribution of items that might spawn in a given storage furniture.", + "//2": "This group is for things you often find stored on or next to a toilet.", + "subtype": "collection", + "entries": [ + { "distribution": [ { "item": "plunger_toilet", "prob": 90 }, { "item": "plunger_futuristic", "prob": 10 } ] }, + { "item": "brush_toilet", "prob": 75 }, + { "item": "toilet_paper", "prob": 80 } + ] + }, + { + "id": "SUS_bathroom_cabinet", + "type": "item_group", + "//": "SUS item groups are collections that contain a reasonable realistic distribution of items that might spawn in a given storage furniture.", + "//2": "This group is for a bathroom cabinet.", + "subtype": "collection", + "entries": [ + { "item": "soap", "count": [ 1, 4 ], "prob": 70 }, + { + "distribution": [ { "item": "razor_shaving", "count": [ 1, 2 ], "prob": 50 }, { "item": "shavingkit", "prob": 50 } ], + "prob": 75 + }, + { "item": "mirror", "prob": 25 }, + { "item": "string_floss", "count": [ 1, 2 ], "prob": 60 }, + { "item": "sponge", "count": [ 1, 3 ], "prob": 75 }, + { "collection": [ { "item": "candle", "count": [ 1, 2 ] }, { "item": "matches" } ], "prob": 20 }, + { "item": "toilet_paper", "prob": 80 } ] } ] diff --git a/data/json/itemgroups/item_groups.json b/data/json/itemgroups/item_groups.json index 951751203405c..ec01d32cda91a 100644 --- a/data/json/itemgroups/item_groups.json +++ b/data/json/itemgroups/item_groups.json @@ -1407,6 +1407,7 @@ [ "10gal_hat", 4 ], [ "bb", 8 ], [ "bolt_steel", 7 ], + [ "bolt_cf", 5 ], [ "bbgun", 10 ], [ "crossbow", 2 ], [ "mag_survival", 40 ], @@ -2315,6 +2316,7 @@ [ "hat_boonie", 10 ], [ "helmet_riot", 25 ], [ "bolt_steel", 7 ], + [ "bolt_cf", 5 ], [ "shot_00", 8 ], [ "shot_flechette", 3 ], [ "20x66_shot", 4 ], diff --git a/data/json/itemgroups/main.json b/data/json/itemgroups/main.json index ed5a13cb02d33..68292fdaddb19 100644 --- a/data/json/itemgroups/main.json +++ b/data/json/itemgroups/main.json @@ -260,7 +260,8 @@ [ "arrow_field_point_fletched", 50 ], [ "arrow_cf", 100 ], [ "bolt_wood", 100 ], - [ "bolt_wood_bodkin", 50 ] + [ "bolt_wood_bodkin", 50 ], + [ "bolt_cf", 100 ] ] } ] diff --git a/data/json/items/crossbows.json b/data/json/items/crossbows.json index cdd1f20007dc9..06ce4388ebe0f 100644 --- a/data/json/items/crossbows.json +++ b/data/json/items/crossbows.json @@ -219,6 +219,28 @@ "count": 10, "effects": [ "RECOVER_45", "NOGIB" ] }, + { + "type": "AMMO", + "id": "bolt_cf", + "price": 2000, + "name": "carbon fiber hunting bolt", + "symbol": "=", + "color": "green", + "looks_like": "bolt_steel", + "description": "A fletched carbon fiber crossbow bolt shaft with an expanding broadhead tip. Deals impressive damage to targets. Stands a good chance of remaining intact once fired.", + "material": [ "kevlar_rigid", "steel" ], + "volume": "250 ml", + "weight": "30 g", + "bashing": 1, + "ammo_type": "bolt", + "prop_damage": 1.35, + "range": 4, + "dispersion": 50, + "loudness": 0, + "count": 10, + "stack_size": 10, + "effects": [ "RECOVER_30" ] + }, { "type": "AMMO", "id": "bolt_explosive", diff --git a/data/json/mapgen/city_blocks/city_block_2.json b/data/json/mapgen/city_blocks/city_block_2.json new file mode 100644 index 0000000000000..fdfb627b61eb6 --- /dev/null +++ b/data/json/mapgen/city_blocks/city_block_2.json @@ -0,0 +1,315 @@ +[ + { + "type": "mapgen", + "method": "json", + "om_terrain": [ [ "city_block2_1", "city_block2_2", "city_block2_3", "city_block2_4" ] ], + "weight": 250, + "object": { + "fill_ter": "t_floor", + "rows": [ + "..MMMsssMMMss|ooooo|+||~~$M|o+o|...sss...|o+o|M.M.X.s|oo|+|oo|s.X.M$~~$ss|ooooooooo|MMMsssMMMsss", + ".|ooo|+|ooo|s|y JE F|~~||| |o|sss>|o| yH|o|2 R|>|R 2 |--sssoRHy 2 |ooo|||ooo|--", + "-|2 3 |>| |--|4 ||!|!|| 4 | R|!|R |-->|o|y |2 yHR|s-", + "-| |!| |--| 9 |9 | ! ! |--s! | !ss", + "-| | | |--| | | %%| |%% |--s|E | R|>s", + "-| ! ! AA|--| | | %t|||t% |---|K | R|||", + "-| y|||%%Q YJJJ|--@ DLD R%%%%|%%%%R DD | * j|j * |---|K JA %%%%%%| l|", + "-| A AA Y|Ttj%Q n@--@ DLD R%tjT|Tjt%R LL | RR%TT|TT%RR @---|n J *7 | DLD J K@", + "-|JJJJJJ Q|T * i|--| * T|T * DD | %%%%%|%%%%% |---|i JA % | DLD AJ n@", + "-|Q Q|%%%%*% KKl|--@y %%%%%%|%%%%%% y| *7 |6 * |---|K % | DLD AJ i@", + "-|lKinKK Q|1 %*%%%|--|Y *8 |1 * Y|LD % | % AL|---|% %% % |y J K@", + "-|%%%%%% R| %7 |--|Q l% | %l Q|LD % | % AL@---|Q Q% %%%%%%|%%%%%% Q|", + "-|1 * R| % |--|Q K% | %K Q|LD % | %y AL|-;;|QQQ% *8 |1 * QQQ|", + "-| %%*%| % @--|Q K% | %K Q| %%%%%|%%%%% |-;S|%%%% % | %%*%|||", + "-@ %j t| % |--|KinK% | %KinK|Q *7 |6 * Y|-;;|jYt% % | %j t|S-", + "-| % ||@|@|||@|||--||@@||||@|||||@|||||@||Q K% | %Q K|--;@ * % | % y@;-", + "-| %TTy|S;;;;----------------;;S;S;;-------@Y K% | %Q K@--;|TTy% % | %YTT|;-", + "-||@|@|||@||;;--------------------;;;;;--------|lniK% | %linK|--;|||||||||@|||||@|||||||;-", + "--------;;;;;;---------------------------------||@|||||@|||@@||||@||----------------------------", + "----------------------------------------------------;;;;;S;;;-----------------------------------", + "------------------------------------------------------------------------------------------------", + "------------------------------------------------------------------------------------------------", + "------------------------------------------------------------------------------------------------", + "------------------------------------------------------------------------------------------------" + ], + "palettes": [ "city_block_foundation_palette" ], + "terrain": { "%": "t_wall_w" }, + "nested": { + "1": { + "chunks": [ + [ "bedroom_5x5_adult_N_1", 20 ], + [ "bedroom_5x5_adult_S_1", 20 ], + [ "bedroom_5x5_adult_W_1", 20 ], + [ "bedroom_5x5_adult_N_2", 20 ], + [ "bedroom_5x5_adult_E_2", 20 ], + [ "bedroom_5x5_adult_N_2", 20 ], + [ "bedroom_5x5_adult_N_2", 20 ], + [ "bedroom_5x5_adult_S_2", 20 ] + ] + }, + "2": { "chunks": [ [ "livingroom_5x5_E_1", 20 ], [ "livingroom_5x5_W_1", 20 ], [ "livingroom_5x5_E_2", 20 ] ] }, + "3": { "chunks": [ [ "bonus_room_3x3_4", 20 ], [ "bonus_room_3x3_N_6", 20 ], [ "bonus_room_3x3_N_8", 20 ] ] }, + "4": { + "chunks": [ + [ "livingroom_5x5_E_1", 20 ], + [ "livingroom_5x5_E_2", 20 ], + [ "bonus_room_3x3_5", 20 ], + [ "bonus_room_3x3_E_5", 20 ], + [ "bonus_room_2x2_1", 20 ] + ] + }, + "5": { + "chunks": [ + [ "bonus_room_3x3_E_5", 20 ], + [ "bonus_room_3x3_N_6", 20 ], + [ "bonus_room_3x3_S_6", 20 ], + [ "bonus_room_3x3_W_6", 20 ], + [ "bonus_room_3x3_N_8", 20 ], + [ "bonus_room_3x3_E_8", 20 ], + [ "bonus_room_3x3_E_6", 20 ] + ] + }, + "6": { + "chunks": [ + [ "bedroom_4x4_adult_1_W", 20 ], + [ "bedroom_4x4_adult_1_S", 20 ], + [ "bedroom_4x4_adult_2_N", 20 ], + [ "bedroom_4x4_adult_2_W", 20 ], + [ "bedroom_4x4_adult_2_E", 20 ], + [ "bedroom_4x4_adult_2_S", 20 ], + [ "bedroom_4x4_adult_3_S", 20 ], + [ "bedroom_4x4_adult_3_N", 20 ], + [ "bedroom_4x4_adult_3_E", 20 ], + [ "bedroom_4x4_adult_3_W", 20 ] + ] + }, + "7": { + "chunks": [ + [ "bedroom_4x4_adult_1_S", 20 ], + [ "bedroom_4x4_adult_3_S", 20 ], + [ "bedroom_4x4_adult_3_N", 20 ], + [ "bedroom_4x4_adult_3_E", 20 ], + [ "bedroom_4x4_adult_3_W", 20 ] + ] + }, + "8": { + "chunks": [ + [ "bedroom_5x5_adult_N_1", 20 ], + [ "bedroom_5x5_adult_S_1", 20 ], + [ "bedroom_5x5_adult_E_1", 20 ], + [ "bedroom_5x5_adult_N_2", 20 ], + [ "bedroom_5x5_adult_S_2", 20 ], + [ "bedroom_5x5_adult_E_2", 20 ], + [ "bedroom_5x5_adult_W_2", 20 ] + ] + }, + "9": { "chunks": [ [ "bonus_room_3x3_S_6", 20 ], [ "bonus_room_3x3_S_8", 20 ] ] } + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "combines candy shop front & back 9x9 front, 3x3 back crates.", + "nested_mapgen_id": "city_block_2_candy_shop", + "object": { + "mapgensize": [ 15, 15 ], + "place_nested": [ + { "chunks": [ "city_block_9x9_candy_shop_front" ], "x": 0, "y": 0 }, + { "chunks": [ "city_block_3x3_backroom_crates_candy" ], "x": 6, "y": 12 } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "//": "combines beauty shop front & back 9x9 front, 3x3 back crates.", + "nested_mapgen_id": "city_block_2_beauty_shop", + "object": { + "mapgensize": [ 15, 15 ], + "place_nested": [ + { "chunks": [ "city_block_9x9_beauty_shop_front" ], "x": 0, "y": 0 }, + { "chunks": [ "city_block_3x3_backroom_crates_beauty" ], "x": 6, "y": 12 } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "//": "combines beauty shop front & back 9x9 front, 3x3 back crates.", + "nested_mapgen_id": "city_block_2_vitamin_shop", + "object": { + "mapgensize": [ 15, 15 ], + "place_nested": [ + { "chunks": [ "city_block_9x9_vitamin_shop_front" ], "x": 0, "y": 0 }, + { "chunks": [ "city_block_3x3_backroom_crates_vitamin" ], "x": 6, "y": 12 } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "//": "combines cellphone shop front & back 9x9 front, 3x3 back crates.", + "nested_mapgen_id": "city_block_2_cellphone_shop", + "object": { + "mapgensize": [ 15, 15 ], + "place_nested": [ + { "chunks": [ "city_block_9x9_cellphone_shop_front" ], "x": 0, "y": 0 }, + { "chunks": [ "city_block_3x3_backroom_crates_cellphone" ], "x": 6, "y": 12 } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "//": "combines music shop front & back 9x9 front, 3x3 back crates.", + "nested_mapgen_id": "city_block_2_music_shop", + "object": { + "mapgensize": [ 15, 15 ], + "place_nested": [ + { "chunks": [ "city_block_9x9_music_shop_front" ], "x": 0, "y": 0 }, + { "chunks": [ "city_block_3x3_backroom_crates_music" ], "x": 6, "y": 12 } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "//": "combines electronics shop front & back 9x9 front, 3x3 back crates.", + "nested_mapgen_id": "city_block_2_electronics_shop", + "object": { + "mapgensize": [ 15, 15 ], + "place_nested": [ + { "chunks": [ "city_block_9x9_electronics_shop_front" ], "x": 0, "y": 0 }, + { "chunks": [ "city_block_3x3_backroom_crates_electronics" ], "x": 6, "y": 12 } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "//": "combines pizza shop front & back 9x9 front, 3x3 back crates.", + "nested_mapgen_id": "city_block_2_pizza_shop", + "object": { + "mapgensize": [ 15, 15 ], + "place_nested": [ + { "chunks": [ "city_block_9x9_pizza_shop_front" ], "x": 0, "y": 0 }, + { "chunks": [ "city_block_3x3_backroom_crates_pizza" ], "x": 6, "y": 12 } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "//": "combines general shop front & back 8x8 front, 4x4 back room.", + "nested_mapgen_id": "city_block_2_clothing_shop", + "object": { + "mapgensize": [ 12, 12 ], + "place_nested": [ + { "chunks": [ "city_block_8x8_clothing_shop_front" ], "x": 0, "y": 0 }, + { "chunks": [ "city_block_4x4_backroom_clothing" ], "x": 4, "y": 8 } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "//": "combines formal clothing shop front & back 8x8 front, 4x4 back room.", + "nested_mapgen_id": "city_block_2_formal_clothing_shop", + "object": { + "mapgensize": [ 12, 12 ], + "place_nested": [ + { "chunks": [ "city_block_8x8_formal_clothing_shop_front" ], "x": 0, "y": 0 }, + { "chunks": [ "city_block_4x4_backroom_clothing_formal" ], "x": 4, "y": 8 } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "//": "combines leather clothing shop front & back 8x8 front, 4x4 back room.", + "nested_mapgen_id": "city_block_2_leather_clothing_shop", + "object": { + "mapgensize": [ 12, 12 ], + "place_nested": [ + { "chunks": [ "city_block_8x8_leather_clothing_shop_front" ], "x": 0, "y": 0 }, + { "chunks": [ "city_block_4x4_backroom_clothing_leather" ], "x": 4, "y": 8 } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "//": "combines fur clothing shop front & back 8x8 front, 4x4 back room.", + "nested_mapgen_id": "city_block_2_fur_clothing_shop", + "object": { + "mapgensize": [ 12, 12 ], + "place_nested": [ + { "chunks": [ "city_block_8x8_fur_clothing_shop_front" ], "x": 0, "y": 0 }, + { "chunks": [ "city_block_4x4_backroom_clothing_fur" ], "x": 4, "y": 8 } + ] + } + } +] diff --git a/data/json/mapgen/house/house_inner_garden.json b/data/json/mapgen/house/house_inner_garden.json index ba19c5dd67965..542e3b906ea8f 100644 --- a/data/json/mapgen/house/house_inner_garden.json +++ b/data/json/mapgen/house/house_inner_garden.json @@ -16,12 +16,12 @@ "#h #~~~~~~U#", "## #~~~~~~U#", ".# +~~~~~~U#", - ".# y y8]888#8#88#8##", + ".# y y8]#88#888888##", ".###iL## #8sssssssssss#.", ".p#n 8s#3..3..sFs#.", ".M#K JA ]s.......sFs#.", ".^#QllJA 8s#......sFs#.", - "######## #8sSsssssssss#.", + "######## #8sssssssssss#.", "#y + y8]#8]#8]8888#.", "o 6 #R + 1 #.", "o #R #++#HLH #.", @@ -32,7 +32,15 @@ "........................" ], "palettes": [ "house_w_foundation_palette" ], - "terrain": { "8": "t_wall_glass", "#": "t_rock_wall", "]": "t_door_glass_c", "%": "t_wall_w" }, + "terrain": { + "8": "t_wall_glass", + "#": "t_rock_wall", + "]": "t_door_glass_c", + "%": "t_wall_w", + "F": "t_concrete", + "U": "t_thconc_floor", + "N": "t_thconc_floor" + }, "furniture": { "a": "f_displaycase" }, "place_vehicles": [ { "vehicle": "showroom_small_vehicles", "x": 17, "y": 5, "rotation": 270, "chance": 20, "status": 0 }, diff --git a/data/json/mapgen/nested/retail_nested.json b/data/json/mapgen/nested/retail_nested.json new file mode 100644 index 0000000000000..48f3c48b02fe2 --- /dev/null +++ b/data/json/mapgen/nested/retail_nested.json @@ -0,0 +1,1369 @@ +[ + { + "type": "mapgen", + "method": "json", + "//": "designed for spaces 9x9.", + "nested_mapgen_id": "city_block_9x9_candy_shop_front", + "object": { + "mapgensize": [ 9, 9 ], + "rotation": [ 0, 3 ], + "rows": [ + "LHL LHL", + " ", + "w L L L w", + "w L L L w", + "w L L L w", + "y ", + "MMM?MM Y", + " A ", + " VVV " + ], + "terrain": { " ": "t_floor", "?": "t_console_broken" }, + "furniture": { + "L": "f_table", + "H": "f_table", + "G": "f_table", + "M": "f_displaycase", + "w": "f_rack_wood", + "V": "f_glass_cabinet", + "Y": "f_trashcan", + "A": "f_stool", + "y": [ "f_indoor_plant", "f_indoor_plant_y" ] + }, + "items": { + "H": [ { "item": "toy_store", "chance": 30, "repeat": [ 1, 2 ] } ], + "Y": [ { "item": "trash", "chance": 30, "repeat": [ 1, 2 ] } ], + "L": [ { "item": "candy_chocolate", "chance": 30, "repeat": [ 0, 4 ] } ], + "w": [ { "item": "candy_chocolate", "chance": 30, "repeat": [ 0, 4 ] } ], + "M": [ + { "item": "candy_chocolate", "chance": 30, "repeat": [ 0, 4 ] }, + { "item": "toy_store", "chance": 30, "repeat": [ 1, 2 ] } + ], + "V": [ + { "item": "candy_chocolate", "chance": 30, "repeat": [ 0, 4 ] }, + { "item": "toy_store", "chance": 30, "repeat": [ 1, 2 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 3x3 candy shop crates.", + "nested_mapgen_id": "city_block_3x3_backroom_crates_candy", + "object": { + "mapgensize": [ 3, 3 ], + "rotation": [ 0, 3 ], + "rows": [ + "z z", + " z", + "z z" + ], + "terrain": { "z": "t_floor" }, + "furniture": { "z": [ [ "f_cardboard_box", 5 ], "f_crate_c" ] }, + "items": { + "z": [ + { "item": "candy_chocolate", "chance": 30, "repeat": [ 1, 6 ] }, + { "item": "toy_store", "chance": 30, "repeat": [ 1, 6 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for spaces 9x9. Beauty and cosmetics shop.", + "nested_mapgen_id": "city_block_9x9_beauty_shop_front", + "object": { + "mapgensize": [ 9, 9 ], + "rotation": [ 0, 3 ], + "rows": [ + "HHH HHH", + " ....... ", + "w.L.L.L.w", + "w.L.L.L.w", + "w.L.L.L.w", + "y....... ", + "MMM?MM Y", + " A ", + " VVV " + ], + "terrain": { " ": "t_floor", "L": "t_carpet_yellow", ".": "t_carpet_yellow", "?": "t_console_broken" }, + "furniture": { + "L": "f_table", + "H": "f_table", + "G": "f_table", + "M": "f_displaycase", + "w": "f_rack", + "V": "f_glass_cabinet", + "Y": "f_trashcan", + "A": "f_stool", + "y": [ "f_indoor_plant", "f_indoor_plant_y" ] + }, + "items": { + "H": [ { "item": "beauty", "chance": 30, "repeat": [ 1, 2 ] } ], + "Y": [ { "item": "beauty", "chance": 30, "repeat": [ 1, 2 ] } ], + "L": [ { "item": "beauty", "chance": 30, "repeat": [ 0, 4 ] } ], + "w": [ { "item": "beauty", "chance": 30, "repeat": [ 0, 4 ] } ], + "M": [ { "item": "beauty", "chance": 30, "repeat": [ 0, 4 ] } ], + "V": [ { "item": "beauty", "chance": 30, "repeat": [ 0, 4 ] } ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 3x3 beauty shop crates.", + "nested_mapgen_id": "city_block_3x3_backroom_crates_beauty", + "object": { + "mapgensize": [ 3, 3 ], + "rotation": [ 0, 3 ], + "rows": [ + "z z", + " z", + "z z" + ], + "terrain": { "z": "t_floor" }, + "furniture": { "z": [ [ "f_cardboard_box", 5 ], "f_crate_c" ] }, + "items": { "z": [ { "item": "beauty", "chance": 30, "repeat": [ 1, 6 ] } ] } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 9x9 vitamin shop.", + "nested_mapgen_id": "city_block_9x9_vitamin_shop_front", + "object": { + "mapgensize": [ 9, 9 ], + "rotation": [ 0, 3 ], + "rows": [ + "LHL LHL", + " ", + "V V V V V", + "V V V V V", + "V V V V V", + "y ", + "MMM?MM Y", + " A ", + "y VVV " + ], + "terrain": { + " ": "t_linoleum_white", + "L": "t_linoleum_white", + "H": "t_linoleum_white", + "V": "t_linoleum_white", + "M": "t_linoleum_white", + "A": "t_linoleum_white", + "y": "t_linoleum_white", + "Y": "t_linoleum_white", + "?": "t_console_broken" + }, + "furniture": { + "L": "f_table", + "H": "f_table", + "G": "f_table", + "M": "f_counter", + "V": "f_rack", + "Y": "f_trashcan", + "A": "f_stool", + "y": [ "f_indoor_plant", "f_indoor_plant_y" ] + }, + "items": { + "H": [ { "item": "vitamin_shop", "chance": 30, "repeat": [ 1, 2 ] } ], + "Y": [ { "item": "trash", "chance": 30, "repeat": [ 1, 2 ] } ], + "L": [ { "item": "vitamin_shop", "chance": 30, "repeat": [ 0, 4 ] } ], + "M": [ { "item": "office", "chance": 30, "repeat": [ 0, 4 ] } ], + "V": [ { "item": "vitamin_shop", "chance": 30, "repeat": [ 0, 4 ] } ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 3x3 vitamin shop crates.", + "nested_mapgen_id": "city_block_3x3_backroom_crates_vitamin", + "object": { + "mapgensize": [ 3, 3 ], + "rotation": [ 0, 3 ], + "rows": [ + "z z", + " z", + "z z" + ], + "terrain": { "z": "t_floor" }, + "furniture": { "z": [ [ "f_cardboard_box", 5 ], "f_crate_c" ] }, + "items": { "z": [ { "item": "vitamin_shop", "chance": 30, "repeat": [ 1, 6 ] } ] } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 9x9 cellphone shop.", + "nested_mapgen_id": "city_block_9x9_cellphone_shop_front", + "object": { + "mapgensize": [ 9, 9 ], + "rotation": [ 0, 3 ], + "rows": [ + "GGy yGG", + " ....... ", + "V.LL.HH.V", + "V.LL.HH.V", + "V.LL.HH.V", + " ....... ", + "M?MM?M Y", + " A A ", + "y MMMM y" + ], + "terrain": { + " ": "t_linoleum_white", + "G": "t_linoleum_white", + "V": "t_linoleum_white", + "M": "t_linoleum_white", + "A": "t_linoleum_white", + "y": "t_linoleum_white", + "Y": "t_linoleum_white", + "H": "t_carpet_green", + "L": "t_carpet_green", + ".": "t_carpet_green", + "?": "t_console_broken" + }, + "furniture": { + "L": "f_table", + "H": "f_table", + "G": "f_displaycase", + "M": "f_counter", + "V": "f_rack", + "Y": "f_trashcan", + "A": "f_stool", + "y": [ "f_indoor_plant", "f_indoor_plant_y" ] + }, + "items": { + "H": [ { "item": "elecsto_pcs", "chance": 30, "repeat": [ 1, 2 ] } ], + "G": [ { "item": "elecsto_persele", "chance": 30, "repeat": [ 1, 2 ] } ], + "Y": [ { "item": "trash", "chance": 30, "repeat": [ 1, 2 ] } ], + "L": [ { "item": "cell_shop", "chance": 30, "repeat": [ 0, 4 ] } ], + "M": [ { "item": "cell_shop", "chance": 30, "repeat": [ 0, 1 ] } ], + "V": [ { "item": "cell_shop", "chance": 30, "repeat": [ 0, 4 ] } ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 3x3 cellphone shop crates.", + "nested_mapgen_id": "city_block_3x3_backroom_crates_cellphone", + "object": { + "mapgensize": [ 3, 3 ], + "rotation": [ 0, 3 ], + "rows": [ + "z z", + " z", + "z z" + ], + "terrain": { "z": "t_floor" }, + "furniture": { "z": [ [ "f_cardboard_box", 5 ], "f_crate_c" ] }, + "items": { + "z": [ + { "item": "cell_shop", "chance": 30, "repeat": [ 1, 6 ] }, + { "item": "elecsto_pcs", "chance": 30, "repeat": [ 1, 6 ] }, + { "item": "elecsto_persele", "chance": 30, "repeat": [ 1, 6 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 9x9 music shop.", + "nested_mapgen_id": "city_block_9x9_music_shop_front", + "object": { + "mapgensize": [ 9, 9 ], + "rotation": [ 0, 3 ], + "rows": [ + "HHHy yHHH", + " ....... ", + "V.LL.GG.V", + "V.LL.GG.V", + "V.LL.GG.V", + " .......V", + "MMMM?M V", + " A ", + "y MMMM Y" + ], + "terrain": { " ": "t_floor", "G": "t_carpet_red", "L": "t_carpet_red", ".": "t_carpet_red", "?": "t_console_broken" }, + "furniture": { + "L": "f_table", + "H": "f_table", + "G": "f_displaycase", + "M": "f_counter", + "V": "f_bookcase", + "Y": "f_trashcan", + "A": "f_stool", + "y": [ "f_indoor_plant", "f_indoor_plant_y" ] + }, + "items": { + "H": [ { "item": "musicstore_showpiece", "chance": 30, "repeat": [ 1, 2 ] } ], + "G": [ { "item": "mussto_windinst", "chance": 30, "repeat": [ 1, 2 ] } ], + "Y": [ { "item": "trash", "chance": 30, "repeat": [ 1, 2 ] } ], + "L": [ { "item": "mussto_stringinst", "chance": 30, "repeat": [ 0, 4 ] } ], + "M": [ { "item": "office", "chance": 30, "repeat": [ 0, 1 ] } ], + "V": [ { "item": "musicstore_showpiece", "chance": 30, "repeat": [ 0, 4 ] } ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 3x3 music shop crates.", + "nested_mapgen_id": "city_block_3x3_backroom_crates_music", + "object": { + "mapgensize": [ 3, 3 ], + "rotation": [ 0, 3 ], + "rows": [ + "z z", + " z", + "z z" + ], + "terrain": { "z": "t_floor" }, + "furniture": { "z": [ [ "f_cardboard_box", 5 ], "f_crate_c" ] }, + "items": { + "z": [ + { "item": "musicstore_showpiece", "chance": 30, "repeat": [ 0, 2 ] }, + { "item": "mussto_windinst", "chance": 30, "repeat": [ 0, 2 ] }, + { "item": "mussto_stringinst", "chance": 30, "repeat": [ 0, 2 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 9x9 electronics shop.", + "nested_mapgen_id": "city_block_9x9_electronics_shop_front", + "object": { + "mapgensize": [ 9, 9 ], + "rotation": [ 0, 3 ], + "rows": [ + "HHHy yHHH", + " ....... ", + "V.LL.LL.V", + "V.GG.GG.V", + "V.BB.BB.V", + " .......V", + "MMMM?M y", + " A ", + "y MMMM Y" + ], + "terrain": { + " ": "t_floor", + "G": "t_carpet_yellow", + "L": "t_carpet_yellow", + "B": "t_carpet_yellow", + ".": "t_carpet_yellow", + "?": "t_console_broken" + }, + "furniture": { + "L": "f_table", + "B": "f_table", + "H": "f_displaycase", + "G": "f_displaycase", + "M": "f_counter", + "V": "f_rack", + "Y": "f_trashcan", + "A": "f_stool", + "y": [ "f_indoor_plant", "f_indoor_plant_y" ] + }, + "items": { + "H": [ { "item": "elecsto_pcs", "chance": 30, "repeat": [ 1, 2 ] } ], + "G": [ { "item": "elecsto_cameras", "chance": 30, "repeat": [ 1, 2 ] } ], + "Y": [ { "item": "trash", "chance": 30, "repeat": [ 1, 2 ] } ], + "L": [ { "item": "elecsto_entapl", "chance": 30, "repeat": [ 0, 4 ] } ], + "B": [ { "item": "elecsto_homapl", "chance": 30, "repeat": [ 0, 4 ] } ], + "M": [ { "item": "office", "chance": 30, "repeat": [ 0, 1 ] } ], + "V": [ + { "item": "elecsto_lights", "chance": 30, "repeat": [ 0, 4 ] }, + { "item": "elecsto_diy", "chance": 30, "repeat": [ 0, 4 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 3x3 electronics shop crates.", + "nested_mapgen_id": "city_block_3x3_backroom_crates_electronics", + "object": { + "mapgensize": [ 3, 3 ], + "rotation": [ 0, 3 ], + "rows": [ + "z z", + " z", + "z z" + ], + "terrain": { "z": "t_floor" }, + "furniture": { "z": [ [ "f_cardboard_box", 5 ], "f_crate_c" ] }, + "items": { + "z": [ + { "item": "elecsto_pcs", "chance": 30, "repeat": [ 0, 2 ] }, + { "item": "elecsto_cameras", "chance": 30, "repeat": [ 0, 2 ] }, + { "item": "elecsto_entapl", "chance": 30, "repeat": [ 0, 2 ] }, + { "item": "elecsto_homapl", "chance": 30, "repeat": [ 0, 2 ] }, + { "item": "elecsto_lights", "chance": 30, "repeat": [ 0, 2 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 9x9 pizza shop.", + "nested_mapgen_id": "city_block_9x9_pizza_shop_front", + "object": { + "mapgensize": [ 9, 9 ], + "rotation": [ 0, 3 ], + "rows": [ + "AAAY YMMM", + "MMM AAA", + "V ? ", + "B M R RR", + "i G L LL", + "B G R RR", + "s M ", + "F M R RR", + "Q RLyLL" + ], + "terrain": { + " ": "t_linoleum_gray", + "L": "t_linoleum_gray", + "R": "t_linoleum_gray", + "B": "t_linoleum_gray", + "G": "t_linoleum_gray", + "M": "t_linoleum_gray", + "F": "t_linoleum_gray", + "V": "t_linoleum_gray", + "Q": "t_linoleum_gray", + "Y": "t_linoleum_gray", + "y": "t_linoleum_gray", + "A": "t_linoleum_gray", + "s": "t_linoleum_gray", + "i": "t_linoleum_gray", + "?": "t_console_broken" + }, + "furniture": { + "L": "f_table", + "i": "f_oven", + "s": "f_sink", + "R": "f_bench", + "B": "f_counter", + "G": "f_displaycase", + "M": "f_counter", + "F": "f_glass_fridge", + "V": "f_rack", + "Q": "f_rack", + "Y": "f_trashcan", + "A": "f_stool", + "y": [ "f_indoor_plant", "f_indoor_plant_y" ] + }, + "items": { + "B": [ { "item": "pizza_kitchen", "chance": 30, "repeat": [ 1, 2 ] } ], + "G": [ { "item": "pizza_display", "chance": 30, "repeat": [ 1, 2 ] } ], + "L": [ { "item": "pizza_table", "chance": 30, "repeat": [ 1, 2 ] } ], + "Y": [ { "item": "trash", "chance": 30, "repeat": [ 1, 2 ] } ], + "F": [ { "item": "pizza_fridge", "chance": 30, "repeat": [ 0, 4 ] } ], + "V": [ { "item": "pizza_display", "chance": 30, "repeat": [ 0, 4 ] } ], + "Q": [ { "item": "pizza_kitchen", "chance": 30, "repeat": [ 0, 1 ] } ], + "M": [ + { "item": "pizza_table", "chance": 30, "repeat": [ 0, 4 ] }, + { "item": "pizza_display", "chance": 30, "repeat": [ 0, 1 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 3x3 pizza shop crates.", + "nested_mapgen_id": "city_block_3x3_backroom_crates_pizza", + "object": { + "mapgensize": [ 3, 3 ], + "rotation": [ 0, 3 ], + "rows": [ + "z z", + " z", + "z z" + ], + "terrain": { "z": "t_floor" }, + "furniture": { "z": [ [ "f_cardboard_box", 5 ], "f_crate_c" ] }, + "items": { + "z": [ + { "item": "pizza_kitchen", "chance": 30, "repeat": [ 0, 2 ] }, + { "item": "pizza_table", "chance": 30, "repeat": [ 0, 2 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 8x8 clothing shop.", + "nested_mapgen_id": "city_block_8x8_clothing_shop_front", + "object": { + "mapgensize": [ 8, 8 ], + "rotation": [ 0, 3 ], + "rows": [ + " BBB ", + " C GA b", + " C G?G ", + " d R", + " LdL ", + " C R", + " C QQVV ", + "|| |||||" + ], + "terrain": { " ": "t_floor", "?": "t_console_broken", "|": "t_brick_wall" }, + "furniture": { + "A": "f_stool", + "B": "f_counter", + "C": "f_table", + "G": "f_displaycase", + "b": "f_bigmirror", + "d": "f_mannequin", + "L": "f_table", + "Q": "f_rack_wood", + "R": "f_armchair", + "V": "f_rack_wood", + "y": [ "f_indoor_plant", "f_indoor_plant_y" ] + }, + "items": { + "d": [ + { "item": "jackets", "chance": 40 }, + { "item": "pants", "chance": 100 }, + { "item": "shirts", "chance": 100 }, + { "item": "hatstore_accessories", "chance": 100 }, + { "item": "shoestore_shoes", "chance": 100 } + ], + "C": [ { "item": "shirts", "chance": 30, "repeat": [ 1, 2 ] } ], + "L": [ { "item": "pants", "chance": 30, "repeat": [ 1, 2 ] } ], + "Q": [ { "item": "bags", "chance": 30, "repeat": [ 1, 2 ] } ], + "V": [ { "item": "shoestore_shoes", "chance": 30, "repeat": [ 1, 2 ] } ], + "G": [ + { "item": "hatstore_accessories", "chance": 30, "repeat": [ 0, 4 ] }, + { "item": "jewelry_front", "chance": 30, "repeat": [ 0, 1 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 4x4 general clothing shop crates.", + "nested_mapgen_id": "city_block_4x4_backroom_clothing", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + "z zz", + " z z", + "z z ", + "z z" + ], + "terrain": { "z": "t_floor" }, + "furniture": { "z": [ [ "f_cardboard_box", 5 ], "f_crate_c" ] }, + "items": { + "z": [ + { "item": "shirts", "chance": 30, "repeat": [ 1, 6 ] }, + { "item": "pants", "chance": 30, "repeat": [ 1, 6 ] }, + { "item": "jackets", "chance": 30, "repeat": [ 1, 6 ] }, + { "item": "hatstore_accessories", "chance": 30, "repeat": [ 1, 6 ] }, + { "item": "shoestore_shoes", "chance": 30, "repeat": [ 1, 6 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 4x4 general clothing backroom.", + "nested_mapgen_id": "city_block_4x4_backroom_clothing", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + "CCCC", + " ", + " ", + "CC C" + ], + "terrain": { " ": "t_floor" }, + "furniture": { "C": "f_rack" }, + "items": { + "C": [ + { "item": "shirts", "chance": 30, "repeat": [ 1, 6 ] }, + { "item": "pants", "chance": 30, "repeat": [ 1, 6 ] }, + { "item": "jackets", "chance": 30, "repeat": [ 1, 6 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 8x8 formal clothing shop.", + "nested_mapgen_id": "city_block_8x8_formal_clothing_shop_front", + "object": { + "mapgensize": [ 8, 8 ], + "rotation": [ 0, 3 ], + "rows": [ + " GGG ", + " e A b", + " C B?B ", + " d b", + " RCR ", + " b", + " b LLL ", + "|| |||||" + ], + "terrain": { " ": "t_floor", "?": "t_console_broken", "|": "t_brick_wall" }, + "furniture": { + "A": "f_stool", + "B": "f_counter", + "C": "f_table", + "G": "f_displaycase", + "b": "f_bigmirror", + "d": "f_mannequin", + "e": "f_mannequin", + "L": "f_wardrobe", + "R": "f_armchair" + }, + "items": { + "d": [ + { "item": "wedding_suits", "chance": 100 }, + { "item": "hatstore_accessories", "chance": 100 }, + { "item": "dress_shoes", "chance": 100 } + ], + "e": [ + { "item": "wedding_suits", "chance": 100 }, + { "item": "hatstore_accessories", "chance": 100 }, + { "item": "dress_shoes", "chance": 100 } + ], + "C": [ { "item": "dress_shoes", "chance": 30, "repeat": [ 1, 2 ] } ], + "L": [ { "item": "wedding_suits", "chance": 30, "repeat": [ 1, 2 ] } ], + "V": [ { "item": "shoestore_shoes", "chance": 30, "repeat": [ 1, 2 ] } ], + "G": [ + { "item": "neckties", "chance": 30, "repeat": [ 0, 4 ] }, + { "item": "accesories_personal_unisex", "chance": 30, "repeat": [ 0, 1 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 4x4 formal clothing shop crates.", + "nested_mapgen_id": "city_block_4x4_backroom_clothing_formal", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + "z zz", + " z z", + "z z ", + "z z" + ], + "terrain": { "z": "t_floor" }, + "furniture": { "z": [ [ "f_cardboard_box", 5 ], "f_crate_c" ] }, + "items": { + "z": [ + { "item": "wedding_suits", "chance": 30, "repeat": [ 0, 6 ] }, + { "item": "hatstore_accessories", "chance": 30, "repeat": [ 0, 6 ] }, + { "item": "dress_shoes", "chance": 30, "repeat": [ 0, 6 ] }, + { "item": "neckties", "chance": 30, "repeat": [ 0, 6 ] }, + { "item": "accesories_personal_unisex", "chance": 30, "repeat": [ 0, 6 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 4x4 formal clothing backroom.", + "nested_mapgen_id": "city_block_4x4_backroom_clothing_formal", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + "CCCC", + " ", + " ", + "CC C" + ], + "terrain": { " ": "t_floor" }, + "furniture": { "C": "f_rack" }, + "items": { + "C": [ + { "item": "wedding_suits", "chance": 30, "repeat": [ 0, 6 ] }, + { "item": "dress_shoes", "chance": 30, "repeat": [ 0, 6 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 4x4 formal clothing backroom.", + "nested_mapgen_id": "city_block_4x4_backroom_clothing_formal", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + "CBBB", + "e Ad", + " ", + "bb C" + ], + "terrain": { " ": "t_floor", "?": "t_console_broken" }, + "furniture": { "A": "f_stool", "B": "f_workbench", "C": "f_rack_wood", "d": "f_mannequin", "e": "f_mannequin", "b": "f_bench" }, + "items": { + "C": [ { "item": "SUS_tailoring_materials", "chance": 30, "repeat": [ 1, 2 ] } ], + "d": [ { "item": "SUS_mannequin_formal_mens", "chance": 30 } ], + "e": [ { "item": "SUS_mannequin_dresses", "chance": 30 } ], + "B": [ + { "item": "SUS_tailoring_tool_drawer", "chance": 30, "repeat": [ 0, 1 ] }, + { "item": "SUS_tailoring_fasteners", "chance": 30, "repeat": [ 2, 6 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 8x8 leather clothing shop.", + "nested_mapgen_id": "city_block_8x8_leather_clothing_shop_front", + "object": { + "mapgensize": [ 8, 8 ], + "rotation": [ 0, 3 ], + "rows": [ + " d B?B ", + " Q AB b", + " Q ", + " Q C G b", + " d C G ", + " b", + " b LLL ", + "|| |||||" + ], + "terrain": { " ": "t_floor", "?": "t_console_broken", "|": "t_brick_wall" }, + "furniture": { + "A": "f_stool", + "B": "f_counter", + "C": "f_table", + "G": "f_displaycase", + "b": "f_bigmirror", + "Q": "f_rack_wood", + "d": "f_mannequin", + "L": "f_wardrobe" + }, + "items": { + "d": [ + { "item": "leather_shop", "chance": 100 }, + { "item": "pants", "chance": 50 }, + { "item": "shirts", "chance": 50 }, + { "item": "leather_shop_accessories", "chance": 100 } + ], + "C": [ { "item": "leather_shop", "chance": 30, "repeat": [ 1, 2 ] } ], + "L": [ { "item": "leather_shop", "chance": 30, "repeat": [ 1, 2 ] } ], + "Q": [ { "item": "leather_shop", "chance": 30, "repeat": [ 1, 2 ] } ], + "G": [ + { "item": "leather_shop_accessories", "chance": 30, "repeat": [ 0, 4 ] }, + { "item": "accesories_personal_unisex", "chance": 30, "repeat": [ 0, 1 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 4x4 leather clothing shop crates.", + "nested_mapgen_id": "city_block_4x4_backroom_clothing_leather", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + "z zz", + " z z", + "z z ", + "z z" + ], + "terrain": { "z": "t_floor" }, + "furniture": { "z": [ [ "f_cardboard_box", 5 ], "f_crate_c" ] }, + "items": { + "z": [ + { "item": "leather_shop", "chance": 30, "repeat": [ 1, 6 ] }, + { "item": "leather_shop_accessories", "chance": 30, "repeat": [ 1, 6 ] }, + { "item": "accesories_personal_unisex", "chance": 30, "repeat": [ 1, 6 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 4x4 leather clothing backroom.", + "nested_mapgen_id": "city_block_4x4_backroom_clothing_leather", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + "CCCC", + " ", + " ", + "CC C" + ], + "terrain": { " ": "t_floor" }, + "furniture": { "C": "f_rack" }, + "items": { + "C": [ + { "item": "leather_shop", "chance": 30, "repeat": [ 0, 6 ] }, + { "item": "leather_shop_accessories", "chance": 30, "repeat": [ 0, 6 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 4x4 leather clothing backroom.", + "nested_mapgen_id": "city_block_4x4_backroom_clothing_leather", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + "CBBB", + " Ad", + "A ", + "BB C" + ], + "terrain": { " ": "t_floor", "?": "t_console_broken" }, + "furniture": { "A": "f_stool", "B": "f_workbench", "C": "f_rack_wood", "d": "f_mannequin", "e": "f_mannequin", "b": "f_bench" }, + "items": { + "C": [ + { "item": "SUS_tailoring_materials", "chance": 10, "repeat": [ 1, 2 ] }, + { "item": "leather_shop_repair", "chance": 30, "repeat": [ 2, 6 ] } + ], + "d": [ + { "item": "leather_shop", "chance": 100 }, + { "item": "pants", "chance": 50 }, + { "item": "shirts", "chance": 50 }, + { "item": "leather_shop_accessories", "chance": 100 } + ], + "B": [ + { "item": "SUS_tailoring_tool_drawer", "chance": 30, "repeat": [ 0, 1 ] }, + { "item": "SUS_tailoring_fasteners", "chance": 30, "repeat": [ 2, 6 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 8x8 fur clothing shop.", + "nested_mapgen_id": "city_block_8x8_fur_clothing_shop_front", + "object": { + "mapgensize": [ 8, 8 ], + "rotation": [ 0, 3 ], + "rows": [ + " d B?B ", + " L AB b", + " L ", + " L C G b", + " d C G ", + " b", + " b QQQ ", + "|| |||||" + ], + "terrain": { " ": "t_floor", "?": "t_console_broken", "|": "t_brick_wall" }, + "furniture": { + "A": "f_stool", + "B": "f_counter", + "C": "f_table", + "G": "f_displaycase", + "b": "f_bigmirror", + "Q": "f_rack_wood", + "d": "f_mannequin", + "L": "f_wardrobe" + }, + "items": { + "d": [ + { "item": "fancyfurs", "chance": 100 }, + { "item": "pants", "chance": 50 }, + { "item": "shirts", "chance": 50 }, + { "item": "dress_shoes", "chance": 100 } + ], + "C": [ { "item": "fancyfurs", "chance": 30, "repeat": [ 1, 2 ] } ], + "L": [ { "item": "fancyfurs", "chance": 30, "repeat": [ 1, 2 ] } ], + "Q": [ { "item": "fancyfurs", "chance": 30, "repeat": [ 1, 2 ] } ], + "G": [ + { "item": "neckties", "chance": 30, "repeat": [ 0, 4 ] }, + { "item": "jewelry_front", "chance": 30, "repeat": [ 0, 1 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 4x4 fur clothing shop crates.", + "nested_mapgen_id": "city_block_4x4_backroom_clothing_fur", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + "z z", + " z ", + "z z ", + "z z" + ], + "terrain": { "z": "t_floor" }, + "furniture": { "z": [ [ "f_cardboard_box", 5 ], "f_crate_c" ] }, + "items": { + "z": [ + { "item": "fancyfurs", "chance": 30, "repeat": [ 1, 6 ] }, + { "item": "neckties", "chance": 30, "repeat": [ 1, 6 ] }, + { "item": "accesories_personal_unisex", "chance": 30, "repeat": [ 1, 6 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 4x4 fur clothing backroom.", + "nested_mapgen_id": "city_block_4x4_backroom_clothing_fur", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + "CCCC", + " ", + " ", + "CC C" + ], + "terrain": { " ": "t_floor" }, + "furniture": { "C": "f_rack" }, + "items": { "C": [ { "item": "fancyfurs", "chance": 30, "repeat": [ 0, 6 ] } ] } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 4x4 fur clothing backroom.", + "nested_mapgen_id": "city_block_4x4_backroom_clothing_fur", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + "CBBB", + " Ad", + "A ", + "BB C" + ], + "terrain": { " ": "t_floor", "?": "t_console_broken" }, + "furniture": { "A": "f_stool", "B": "f_workbench", "C": "f_rack_wood", "d": "f_mannequin", "e": "f_mannequin", "b": "f_bench" }, + "items": { + "C": [ + { "item": "SUS_tailoring_materials", "chance": 10, "repeat": [ 1, 2 ] }, + { "item": "SUS_fur_tailoring_materials", "chance": 30, "repeat": [ 2, 6 ] } + ], + "d": [ { "item": "SUS_mannequin_fur", "chance": 100 } ], + "B": [ + { "item": "SUS_tailoring_tool_drawer", "chance": 30, "repeat": [ 0, 1 ] }, + { "item": "SUS_tailoring_fasteners", "chance": 30, "repeat": [ 2, 6 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 5x5 shop backroom.", + "nested_mapgen_id": "city_block_5x5_backroom_shop", + "object": { + "mapgensize": [ 5, 5 ], + "rotation": [ 0, 3 ], + "rows": [ + "d G", + "L G", + "BA ", + "B zz", + "Cyz " + ], + "terrain": { " ": "t_floor", "?": "t_console_broken" }, + "furniture": { + "A": "f_chair", + "B": "f_desk", + "C": "f_rack", + "G": "f_locker", + "b": "f_bench", + "d": "f_filing_cabinet", + "L": "f_shredder", + "y": [ "f_indoor_plant", "f_indoor_plant_y" ], + "z": [ [ "f_cardboard_box", 5 ], "f_crate_c" ] + }, + "items": { + "d": [ { "item": "office_paper", "chance": 25 } ], + "C": [ { "item": "cleaning", "chance": 30, "repeat": [ 1, 2 ] } ], + "B": [ { "item": "office", "chance": 30, "repeat": [ 1, 2 ] } ], + "G": [ { "item": "jackets", "chance": 30, "repeat": [ 0, 1 ] }, { "item": "bags", "chance": 30, "repeat": [ 0, 1 ] } ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 5x5 shop backroom.", + "nested_mapgen_id": "city_block_5x5_backroom_shop", + "object": { + "mapgensize": [ 5, 5 ], + "rotation": [ 0, 3 ], + "rows": [ + "y GG", + "b G", + "b z ", + " zz", + "CDF " + ], + "terrain": { " ": "t_floor", "?": "t_console_broken" }, + "furniture": { + "A": "f_chair", + "B": "f_desk", + "C": "f_rack", + "G": "f_locker", + "b": "f_bench", + "d": "f_filing_cabinet", + "L": "f_shredder", + "D": "f_vending_c", + "F": "f_vending_c", + "y": [ "f_indoor_plant", "f_indoor_plant_y" ], + "z": [ [ "f_cardboard_box", 5 ], "f_crate_c" ] + }, + "vendingmachines": { "D": { "item_group": "vending_drink" }, "F": { "item_group": "vending_food" } }, + "items": { + "C": [ { "item": "cleaning", "chance": 30, "repeat": [ 1, 2 ] } ], + "G": [ { "item": "jackets", "chance": 30, "repeat": [ 0, 1 ] }, { "item": "bags", "chance": 30, "repeat": [ 0, 1 ] } ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 4x4 shop backroom.", + "nested_mapgen_id": "city_block_4x4_backroom_shop", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + "FD d", + "G ", + "G ", + "ybb " + ], + "terrain": { " ": "t_floor", "?": "t_console_broken" }, + "furniture": { + "G": "f_locker", + "b": "f_bench", + "d": "f_filing_cabinet", + "D": "f_vending_c", + "F": "f_vending_c", + "y": [ "f_indoor_plant", "f_indoor_plant_y" ] + }, + "vendingmachines": { "D": { "item_group": "vending_drink" }, "F": { "item_group": "vending_food" } }, + "items": { + "G": [ { "item": "jackets", "chance": 30, "repeat": [ 0, 1 ] }, { "item": "bags", "chance": 30, "repeat": [ 0, 1 ] } ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 4x4 shop backroom.", + "nested_mapgen_id": "city_block_4x4_backroom_shop", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + "FD d", + "G ", + "G ", + "y C " + ], + "terrain": { " ": "t_floor", "?": "t_console_broken" }, + "furniture": { + "C": "f_rack", + "G": "f_sofa", + "d": "f_filing_cabinet", + "D": "f_vending_c", + "F": "f_vending_c", + "y": [ "f_indoor_plant", "f_indoor_plant_y" ] + }, + "vendingmachines": { "D": { "item_group": "vending_drink" }, "F": { "item_group": "vending_food" } }, + "items": { + "C": [ { "item": "cleaning", "chance": 30, "repeat": [ 1, 2 ] } ], + "G": [ { "item": "jackets", "chance": 30, "repeat": [ 0, 1 ] }, { "item": "bags", "chance": 30, "repeat": [ 0, 1 ] } ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 4x4 shop backroom.", + "nested_mapgen_id": "city_block_4x4_backroom_shop", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + "d L", + "B ", + "BA ", + "y GC" + ], + "terrain": { " ": "t_floor", "?": "t_console_broken" }, + "furniture": { + "A": "f_chair", + "B": "f_desk", + "C": "f_rack", + "G": "f_locker", + "d": "f_filing_cabinet", + "L": "f_shredder", + "y": [ "f_indoor_plant", "f_indoor_plant_y" ] + }, + "items": { + "C": [ { "item": "cleaning", "chance": 30, "repeat": [ 1, 2 ] } ], + "B": [ { "item": "office", "chance": 30, "repeat": [ 1, 2 ] } ], + "G": [ { "item": "jackets", "chance": 30, "repeat": [ 0, 1 ] }, { "item": "bags", "chance": 30, "repeat": [ 0, 1 ] } ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 5x5 shop backroom.", + "nested_mapgen_id": "city_block_5x5_backroom_shop", + "object": { + "mapgensize": [ 5, 5 ], + "rotation": [ 0, 3 ], + "rows": [ + "d FD", + "G b ", + "G b z", + "G b ", + "yz CC" + ], + "terrain": { " ": "t_floor", "?": "t_console_broken" }, + "furniture": { + "A": "f_chair", + "B": "f_desk", + "C": "f_rack", + "G": "f_locker", + "b": "f_bench", + "d": "f_filing_cabinet", + "L": "f_shredder", + "D": "f_vending_c", + "F": "f_vending_c", + "y": [ "f_indoor_plant", "f_indoor_plant_y" ], + "z": [ [ "f_cardboard_box", 5 ], "f_crate_c" ] + }, + "vendingmachines": { "D": { "item_group": "vending_drink" }, "F": { "item_group": "vending_food" } }, + "items": { + "C": [ { "item": "cleaning", "chance": 30, "repeat": [ 1, 2 ] } ], + "G": [ { "item": "jackets", "chance": 30, "repeat": [ 0, 1 ] }, { "item": "bags", "chance": 30, "repeat": [ 0, 1 ] } ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 5x5 shop backroom.", + "nested_mapgen_id": "city_block_5x5_backroom_shop", + "object": { + "mapgensize": [ 5, 5 ], + "rotation": [ 0, 3 ], + "rows": [ + "d FD", + "G ", + "G z", + "C ", + "yAAA " + ], + "terrain": { " ": "t_floor" }, + "furniture": { + "A": "f_sofa", + "C": "f_rack", + "G": "f_locker", + "d": "f_filing_cabinet", + "D": "f_vending_c", + "F": "f_vending_c", + "y": [ "f_indoor_plant", "f_indoor_plant_y" ], + "z": [ [ "f_cardboard_box", 5 ], "f_crate_c" ] + }, + "vendingmachines": { "D": { "item_group": "vending_drink" }, "F": { "item_group": "vending_food" } }, + "items": { + "C": [ { "item": "cleaning", "chance": 30, "repeat": [ 1, 2 ] } ], + "G": [ { "item": "jackets", "chance": 30, "repeat": [ 0, 1 ] }, { "item": "bags", "chance": 30, "repeat": [ 0, 1 ] } ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 3x3 candy shop crates.", + "nested_mapgen_id": "city_block_3x3_backroom_crates_candy", + "object": { + "mapgensize": [ 3, 3 ], + "rotation": [ 0, 3 ], + "rows": [ + "z z", + " z", + "z z" + ], + "terrain": { "z": "t_floor" }, + "furniture": { "z": [ [ "f_cardboard_box", 5 ], "f_crate_c" ] }, + "items": { + "z": [ + { "item": "candy_chocolate", "chance": 30, "repeat": [ 1, 6 ] }, + { "item": "toy_store", "chance": 30, "repeat": [ 1, 6 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for restaurant spaces 14x14.", + "nested_mapgen_id": "city_block_14x14_restaurant", + "object": { + "mapgensize": [ 14, 14 ], + "rotation": [ 0, 3 ], + "rows": [ + " ", + " ", + "HLH HLH GG ", + "HLH HLH LL ", + " GG ", + "HLH HLH y ", + "HLH HLH GG ", + " LL ", + "|||||||| GG ", + "JJiRiJJ| || ", + "F n| |t ", + "F RRR l| * ", + "F * | ", + "YPPQQSY| |j " + ], + "terrain": { "?": "t_console_broken", "|": "t_brick_wall", "*": "t_door_c" }, + "furniture": { + "L": "f_table", + "H": "f_chair", + "G": "f_sofa", + "t": "f_toilet", + "j": "f_sink", + "P": "f_rack", + "S": "f_rack", + "Q": "f_rack", + "Y": "f_trashcan", + "A": "f_stool", + "i": "f_oven", + "F": "f_fridge", + "n": "f_sink", + "l": "f_dishwasher", + "J": "f_counter", + "R": "f_counter", + "y": [ "f_indoor_plant", "f_indoor_plant_y" ] + }, + "items": { + "Y": [ { "item": "trash", "chance": 30, "repeat": [ 1, 2 ] } ], + "l": [ { "item": "restaur_sink", "chance": 30, "repeat": [ 1, 2 ] } ], + "n": [ { "item": "restaur_sink", "chance": 30, "repeat": [ 1, 2 ] } ], + "j": [ { "item": "restaur_bath", "chance": 30, "repeat": [ 1, 2 ] } ], + "i": [ { "item": "SUS_oven", "chance": 30, "repeat": [ 1, 2 ] } ], + "L": [ { "item": "restaur_table", "chance": 30, "repeat": [ 0, 4 ] } ], + "J": [ + { "item": "SUS_knife_drawer", "chance": 30, "repeat": [ 0, 4 ] }, + { "item": "restaur_kitchen", "chance": 30, "repeat": [ 1, 2 ] } + ], + "R": [ + { "item": "restaur_kitchen", "chance": 30, "repeat": [ 0, 4 ] }, + { "item": "diner_food", "chance": 30, "repeat": [ 1, 2 ] } + ], + "P": [ + { "item": "restaur_kitchen", "chance": 30, "repeat": [ 0, 4 ] }, + { "item": "restaur_rack", "chance": 30, "repeat": [ 1, 2 ] } + ], + "Q": [ + { "item": "restaur_kitchen", "chance": 30, "repeat": [ 0, 4 ] }, + { "item": "restaur_kitchen", "chance": 30, "repeat": [ 1, 2 ] } + ], + "S": [ + { "item": "groce_bread", "chance": 30, "repeat": [ 0, 4 ] }, + { "item": "restaur_kitchen", "chance": 30, "repeat": [ 1, 2 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for bar spaces 11x11.", + "nested_mapgen_id": "city_block_11x11_bar", + "object": { + "mapgensize": [ 11, 11 ], + "rotation": [ 0, 3 ], + "rows": [ + "y A xx ", + "F RRA xx ", + "n RA xx ", + "J RA ", + "J ARA LG ", + "F RA LLG ", + "F yGGG ", + "|| ||||||| ", + "t| |FFFllK ", + " * * K ", + "j|K|YnJK " + ], + "terrain": { " ": "t_null", "|": "t_brick_wall", "*": "t_door_c" }, + "furniture": { + "L": "f_table", + "x": "f_pool_table", + "G": "f_sofa", + "t": "f_toilet", + "j": "f_sink", + "Y": "f_trashcan", + "A": "f_stool", + "F": "f_glass_fridge", + "n": "f_sink", + "l": "f_dishwasher", + "J": "f_counter", + "R": "f_counter", + "y": [ "f_indoor_plant", "f_indoor_plant_y" ] + }, + "items": { + "K": { "item": "keg_beer", "chance": 50 }, + "Y": [ { "item": "trash", "chance": 30, "repeat": [ 1, 2 ] } ], + "x": [ { "item": "pool_table", "chance": 30, "repeat": [ 1, 2 ] } ], + "l": [ { "item": "restaur_sink", "chance": 30, "repeat": [ 1, 2 ] } ], + "n": [ { "item": "restaur_sink", "chance": 30, "repeat": [ 1, 2 ] } ], + "j": [ { "item": "restaur_bath", "chance": 30, "repeat": [ 1, 2 ] } ], + "L": [ { "item": "bar_table", "chance": 30, "repeat": [ 0, 4 ] } ], + "J": [ + { "item": "liqstore_brew", "chance": 30, "repeat": [ 0, 4 ] }, + { "item": "bar_alcohol", "chance": 30, "repeat": [ 1, 2 ] } + ], + "R": [ { "item": "bar_table", "chance": 30, "repeat": [ 0, 4 ] } ], + "F": [ + { "item": "bar_alcohol", "chance": 30, "repeat": [ 0, 4 ] }, + { "item": "bar_fridge", "chance": 30, "repeat": [ 1, 2 ] } + ] + } + } + } +] diff --git a/data/json/mapgen_palettes/city_block_palette.json b/data/json/mapgen_palettes/city_block_palette.json new file mode 100644 index 0000000000000..11ff96b47b26a --- /dev/null +++ b/data/json/mapgen_palettes/city_block_palette.json @@ -0,0 +1,122 @@ +[ + { + "type": "palette", + "id": "city_block_foundation_palette", + "furniture": { + "A": "f_stool", + "B": "f_beaded_door", + "D": "f_chair", + "E": "f_rack_coat", + "F": "f_bench", + "G": "f_bench", + "H": "f_armchair", + "I": "f_desk", + "J": "f_counter", + "K": "f_cupboard", + "L": "f_table", + "N": "f_workbench", + "O": "f_wardrobe", + "P": "f_locker", + "Q": "f_rack", + "R": "f_bookcase", + "T": "f_bathtub", + "U": "f_utility_shelf", + "W": "f_washer", + "X": "f_birdbath", + "Y": "f_trashcan", + "Z": "f_dryer", + "d": "f_shower", + "g": "f_water_heater", + "h": "f_fireplace", + "i": "f_oven", + "j": "f_sink", + "n": "f_sink", + "k": "f_woodstove", + "l": "f_fridge", + "m": "f_glass_fridge", + "p": [ "f_dumpster", "f_recycle_bin" ], + "r": "f_wood_keg", + "v": "f_safe_l", + "w": "f_rack_wood", + "y": [ "f_indoor_plant", "f_indoor_plant_y" ], + "z": "f_metal_butcher_rack" + }, + "terrain": { + ".": [ [ "t_region_groundcover_urban", 10 ], "t_region_shrub_decorative" ], + "-": "t_open_air", + "p": "t_concrete", + "X": "t_region_groundcover_urban", + " ": "t_floor", + "|": "t_brick_wall", + "%": "t_wall_w", + "<": "t_stairs_up", + ">": "t_stairs_down", + "o": "t_laminated_glass", + "+": "t_laminated_door_glass_c", + "@": "t_window_domestic", + "*": [ [ "t_door_c", 10 ], [ "t_door_o", 5 ], [ "t_door_locked_interior", 3 ] ], + "!": [ [ "t_door_locked_peep", 2 ], "t_door_locked_alarm", [ "t_door_locked", 10 ], "t_door_c" ], + "s": "t_concrete", + "~": "t_pavement", + "#": "t_chainfence", + "u": "t_chaingate_l", + "x": [ [ "t_door_metal_pickable", 20 ], [ "t_door_metal_c", 5 ], [ "t_door_metal_c_peep", 3 ] ], + "C": "t_column", + "^": "t_gutter_downspout", + ",": "t_glass_railing", + ";": "t_grate", + "M": "t_region_shrub_decorative", + "S": "t_ladder_down", + "V": "t_ladder_up", + "?": "t_console_broken", + "$": [ [ "t_region_tree_fruit", 2 ], [ "t_region_tree_nut", 2 ], "t_region_tree_shade" ] + }, + "toilets": { "t": { } }, + "liquids": { "g": { "liquid": "water_clean", "amount": [ 0, 100 ] } }, + "items": { + "O": [ { "item": "wardrobe_mens", "chance": 50 }, { "item": "wardrobe_womens", "chance": 50, "repeat": [ 1, 2 ] } ], + "Q": [ + { "item": "preserved_food", "chance": 20, "repeat": [ 1, 2 ] }, + { "item": "dry_goods", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "pet_food", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "condiments", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "pantry_liquids", "chance": 10 } + ], + "K": [ + { "item": "dishes_utility", "chance": 30 }, + { "item": "condiments", "chance": 40, "repeat": [ 1, 2 ] }, + { "item": "SUS_knife_drawer", "chance": 20, "repeat": [ 1, 2 ] }, + { "item": "SUS_junk_drawer", "chance": 10, "repeat": [ 1, 2 ] }, + { "item": "SUS_cookware", "chance": 20 } + ], + "w": [ + { "item": "shower", "chance": 20 }, + { "item": "cleaning", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "bed", "chance": 30, "repeat": [ 1, 2 ] } + ], + "v": [ + { "item": "art", "chance": 5 }, + { "item": "gemstones", "chance": 10, "repeat": [ 3, 6 ] }, + { "item": "jewelry_front", "chance": 5, "repeat": [ 1, 4 ] }, + { "item": "drugdealer", "chance": 10, "repeat": [ 1, 2 ] }, + { "item": "maps", "chance": 2 } + ], + "U": [ + { "item": "home_hw", "chance": 20, "repeat": [ 1, 2 ] }, + { "item": "cleaning", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "mechanics", "chance": 10, "repeat": [ 1, 2 ] } + ], + "j": [ + { "item": "softdrugs", "chance": 45, "repeat": [ 1, 3 ] }, + { "item": "cleaning", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "harddrugs", "chance": 5 } + ], + "T": { "item": "shower", "chance": 30, "repeat": [ 1, 2 ] }, + "n": { "item": "SUS_kitchen_sink", "chance": 10, "repeat": [ 1, 2 ] }, + "i": { "item": "SUS_oven", "chance": 25, "repeat": [ 1, 2 ] }, + "l": { "item": "SUS_fridge", "chance": 30, "repeat": [ 1, 2 ] }, + "Y": { "item": "trash", "chance": 30, "repeat": [ 1, 2 ] }, + "R": { "item": "homebooks", "chance": 30, "repeat": [ 1, 2 ] } + } + } +] diff --git a/data/json/monstergroups/monstergroups.json b/data/json/monstergroups/monstergroups.json index 4e1ab1dc23224..c93385f156532 100644 --- a/data/json/monstergroups/monstergroups.json +++ b/data/json/monstergroups/monstergroups.json @@ -2316,6 +2316,7 @@ { "monster": "mon_zombie_swimmer", "freq": 10, "cost_multiplier": 5 }, { "monster": "mon_zombie_static", "freq": 10, "cost_multiplier": 5 }, { "monster": "mon_zombie_survivor", "freq": 1, "cost_multiplier": 25 }, + { "monster": "mon_zombie_survivor_elite", "freq": 1, "cost_multiplier": 25, "starts": 60 }, { "monster": "mon_beekeeper", "freq": 1, "cost_multiplier": 5 }, { "monster": "mon_zombie_technician", "freq": 1, "cost_multiplier": 12 }, { "monster": "mon_zombie_runner", "freq": 20, "cost_multiplier": 5, "pack_size": [ 1, 4 ] }, @@ -4369,7 +4370,8 @@ { "monster": "mon_dog_zombie_rot", "freq": 5, "cost_multiplier": 2 }, { "monster": "mon_zombie_swimmer", "freq": 20, "cost_multiplier": 2 }, { "monster": "mon_zombie_static", "freq": 30, "cost_multiplier": 5 }, - { "monster": "mon_zombie_survivor", "freq": 1, "cost_multiplier": 25 } + { "monster": "mon_zombie_survivor", "freq": 1, "cost_multiplier": 25 }, + { "monster": "mon_zombie_survivor_elite", "freq": 1, "cost_multiplier": 25, "starts": 60 } ] }, { @@ -4391,7 +4393,8 @@ { "monster": "mon_dog_zombie_rot", "freq": 10, "cost_multiplier": 2 }, { "monster": "mon_zombie_swimmer", "freq": 20, "cost_multiplier": 2 }, { "monster": "mon_zombie_static", "freq": 30, "cost_multiplier": 5 }, - { "monster": "mon_zombie_survivor", "freq": 1, "cost_multiplier": 25 } + { "monster": "mon_zombie_survivor", "freq": 1, "cost_multiplier": 25 }, + { "monster": "mon_zombie_survivor_elite", "freq": 1, "cost_multiplier": 25, "starts": 60 } ] }, { @@ -4400,7 +4403,8 @@ "default": "mon_zombie", "monsters": [ { "monster": "mon_zombie_tough", "freq": 180, "cost_multiplier": 0 }, - { "monster": "mon_zombie_survivor", "freq": 400, "cost_multiplier": 0 } + { "monster": "mon_zombie_survivor", "freq": 400, "cost_multiplier": 0 }, + { "monster": "mon_zombie_survivor_elite", "freq": 20, "cost_multiplier": 25, "starts": 60 } ] }, { @@ -4423,6 +4427,7 @@ { "monster": "mon_zombie_swimmer", "freq": 20, "cost_multiplier": 2 }, { "monster": "mon_zombie_static", "freq": 30, "cost_multiplier": 5 }, { "monster": "mon_zombie_survivor", "freq": 1, "cost_multiplier": 25 }, + { "monster": "mon_zombie_survivor_elite", "freq": 1, "cost_multiplier": 25, "starts": 60 }, { "monster": "mon_zombie_runner", "freq": 130, "cost_multiplier": 3 } ] }, @@ -4445,7 +4450,8 @@ { "monster": "mon_dog_zombie_rot", "freq": 10, "cost_multiplier": 2 }, { "monster": "mon_zombie_swimmer", "freq": 20, "cost_multiplier": 2 }, { "monster": "mon_zombie_static", "freq": 180, "cost_multiplier": 5 }, - { "monster": "mon_zombie_survivor", "freq": 1, "cost_multiplier": 25 } + { "monster": "mon_zombie_survivor", "freq": 1, "cost_multiplier": 25 }, + { "monster": "mon_zombie_survivor_elite", "freq": 1, "cost_multiplier": 25, "starts": 60 } ] }, { @@ -4467,7 +4473,8 @@ { "monster": "mon_dog_zombie_rot", "freq": 10, "cost_multiplier": 2 }, { "monster": "mon_zombie_swimmer", "freq": 20, "cost_multiplier": 2 }, { "monster": "mon_zombie_static", "freq": 30, "cost_multiplier": 5 }, - { "monster": "mon_zombie_survivor", "freq": 1, "cost_multiplier": 25 } + { "monster": "mon_zombie_survivor", "freq": 1, "cost_multiplier": 25 }, + { "monster": "mon_zombie_survivor_elite", "freq": 1, "cost_multiplier": 25, "starts": 60 } ] }, { @@ -5161,6 +5168,7 @@ { "monster": "mon_zombie_swimmer", "freq": 10, "cost_multiplier": 5 }, { "monster": "mon_zombie_static", "freq": 10, "cost_multiplier": 5 }, { "monster": "mon_zombie_survivor", "freq": 1, "cost_multiplier": 25 }, + { "monster": "mon_zombie_survivor_elite", "freq": 1, "cost_multiplier": 25, "starts": 60 }, { "monster": "mon_beekeeper", "freq": 1, "cost_multiplier": 5 }, { "monster": "mon_zombie_technician", "freq": 1, "cost_multiplier": 12 }, { "monster": "mon_zombie_runner", "freq": 20, "cost_multiplier": 5, "pack_size": [ 1, 4 ] }, @@ -5186,6 +5194,7 @@ { "monster": "mon_zombie_hazmat", "freq": 10, "cost_multiplier": 3 }, { "monster": "mon_zombie_static", "freq": 10, "cost_multiplier": 5 }, { "monster": "mon_zombie_survivor", "freq": 1, "cost_multiplier": 25 }, + { "monster": "mon_zombie_survivor_elite", "freq": 1, "cost_multiplier": 25, "starts": 60 }, { "monster": "mon_zombie_technician", "freq": 1, "cost_multiplier": 12 }, { "monster": "mon_zombie_runner", "freq": 20, "cost_multiplier": 5, "pack_size": [ 1, 4 ] }, { "monster": "mon_zombie_brainless", "freq": 55, "cost_multiplier": 1 } @@ -5237,7 +5246,8 @@ { "monster": "mon_zombie_fat", "freq": 150, "cost_multiplier": 1 }, { "monster": "mon_zombie_wretched", "freq": 120, "cost_multiplier": 1 }, { "monster": "mon_zombie_crawler", "freq": 100, "cost_multiplier": 1 }, - { "monster": "mon_zombie_survivor", "freq": 70, "cost_multiplier": 1 } + { "monster": "mon_zombie_survivor", "freq": 70, "cost_multiplier": 1 }, + { "monster": "mon_zombie_survivor_elite", "freq": 10, "cost_multiplier": 1, "starts": 60 } ] }, { diff --git a/data/json/monsters/zed_survivor.json b/data/json/monsters/zed_survivor.json new file mode 100644 index 0000000000000..e11684b72e341 --- /dev/null +++ b/data/json/monsters/zed_survivor.json @@ -0,0 +1,14 @@ +[ + { + "id": "mon_zombie_survivor_elite", + "type": "MONSTER", + "name": "veteran survivor zombie", + "description": "This zombie once was a survivor like you, and a pretty good one at that. Unfortunately they didn't make it, despite the custom-made, heavy armor pieces they wear and the gear that they are still lugging around.", + "copy-from": "mon_zombie_survivor", + "looks_like": "mon_zombie_survivor", + "color": "light_red_green", + "armor_bash": 15, + "armor_cut": 25, + "death_drops": "mon_zombie_survivor_elite_death_drops" + } +] diff --git a/data/json/mutations/mutations.json b/data/json/mutations/mutations.json index 26c235393844e..932266ca20252 100644 --- a/data/json/mutations/mutations.json +++ b/data/json/mutations/mutations.json @@ -2627,7 +2627,8 @@ "points": 2, "description": "Your body is simply immune to diseases. You will never catch an ambient disease.", "prereqs": [ "DISRESISTANT" ], - "category": [ "PLANT", "SLIME", "TROGLOBITE" ] + "category": [ "PLANT", "SLIME", "TROGLOBITE" ], + "flags": [ "NO_DISEASE" ] }, { "type": "mutation", @@ -4853,6 +4854,7 @@ "description": "Your hands have fused into quasi-paws. Fine manipulation is a challenge: permanent hand encumbrance of 10, difficulty with delicate craftwork, and your gloves don't fit. But they handle water better.", "encumbrance_always": [ [ "HAND_L", 10 ], [ "HAND_R", 10 ] ], "restricts_gear": [ "HAND_L", "HAND_R" ], + "craft_skill_bonus": [ [ "electronics", -2 ], [ "tailor", -2 ], [ "mechanics", -2 ] ], "types": [ "HANDS" ], "prereqs": [ "CLAWS", "CLAWS_RETRACT", "CLAWS_RAT" ], "cancels": [ "TALONS" ], @@ -4868,6 +4870,17 @@ "ugliness": 3, "mixed_effect": true, "description": "Your paws are much larger now. Manual dexterity is difficult: permanent hand encumbrance of 20, serious problems crafting, and no gloves. But you can swim more effectively.", + "craft_skill_bonus": [ + [ "electronics", -4 ], + [ "tailor", -4 ], + [ "mechanics", -4 ], + [ "firstaid", -2 ], + [ "computer", -2 ], + [ "traps", -2 ], + [ "fabrication", -2 ], + [ "cooking", -2 ], + [ "survival", -2 ] + ], "encumbrance_always": [ [ "HAND_L", 20 ], [ "HAND_R", 20 ] ], "restricts_gear": [ "HAND_L", "HAND_R" ], "types": [ "HANDS" ], diff --git a/data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json b/data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json index 6605d27f48e8e..e510f29f105dd 100644 --- a/data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json +++ b/data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json @@ -93,7 +93,7 @@ "has_generic_rewards": false, "followup": "MISSION_ROBOFAC_INTERCOM_2", "dialogue": { - "describe": "No, I said … [*You hear a short, muffled conversation from across the intercom*]/nWell, it seems we do have a use for you. It's dangerous and you are likely to die, but if you complete it we will allow you limited access to our resources.", + "describe": "…", "offer": "One of our scientists recently left the lab to perform a field test on a prototype robot, but failed to return, and has not been heard of since. Investigate the test and return with her and the prototype. Failing that, return with the data recorder that was attached to our prototype.", "accepted": "We appreciate your help, good luck.", "rejected": "Don't expect our help then.", @@ -330,9 +330,18 @@ { "text": "Wait! Maybe I can help you!", "condition": { "not": { "u_has_mission": "MISSION_ROBOFAC_INTERCOM_1" } }, - "topic": "TALK_MISSION_LIST" + "topic": "MISSION_ROBOFAC_INTERCOM_1_INTRODUCTION" }, { "text": "Alright, I'll leave", "topic": "TALK_DONE" } ] + }, + { + "id": "MISSION_ROBOFAC_INTERCOM_1_INTRODUCTION", + "type": "talk_topic", + "dynamic_line": "Theres nothing you could do for us, now leave before I'm forced to…\n[You hear a short, muffled conversation from across the intercom]\n\nthe intercom: Well, it seems we do have some use for you. It's a dangerous task, but if you complete it we will allow you limited trading access.", + "responses": [ + { "text": "Tell me about it.", "topic": "TALK_MISSION_OFFER" }, + { "text": "I'm not risking myself for a deal that bad.", "topic": "TALK_DONE" } + ] } ] diff --git a/data/json/obsolete_terrains.json b/data/json/obsolete_terrains.json index 9f500f559f41f..ff08cf793d1f9 100644 --- a/data/json/obsolete_terrains.json +++ b/data/json/obsolete_terrains.json @@ -274,6 +274,22 @@ "haz_sar", "haz_sar_entrance_b1", "haz_sar_b1", + "haz_sar_entrance_north", + "haz_sar_north", + "haz_sar_entrance_b1_north", + "haz_sar_b1_north", + "haz_sar_entrance_east", + "haz_sar_east", + "haz_sar_entrance_b1_east", + "haz_sar_b1_east", + "haz_sar_entrance_south", + "haz_sar_south", + "haz_sar_entrance_b1_south", + "haz_sar_b1_south", + "haz_sar_entrance_west", + "haz_sar_west", + "haz_sar_entrance_b1_west", + "haz_sar_b1_west", "house_base_north", "house_base_south", "house_base_east", diff --git a/data/json/overmap/multitile_city_buildings.json b/data/json/overmap/multitile_city_buildings.json index d39f219c916f1..6acd7d0a7817e 100644 --- a/data/json/overmap/multitile_city_buildings.json +++ b/data/json/overmap/multitile_city_buildings.json @@ -2399,6 +2399,21 @@ { "point": [ 0, 1, 3 ], "overmap": "homeless_1_0_roof_north" } ] }, + { + "type": "city_building", + "id": "city_block_2", + "locations": [ "land" ], + "overmaps": [ + { "point": [ 0, 0, 0 ], "overmap": "city_block2_1_north" }, + { "point": [ 0, 0, 1 ], "overmap": "city_block2_flr2_1_north" }, + { "point": [ 1, 0, 0 ], "overmap": "city_block2_2_north" }, + { "point": [ 1, 0, 1 ], "overmap": "city_block2_flr2_2_north" }, + { "point": [ 2, 0, 0 ], "overmap": "city_block2_3_north" }, + { "point": [ 2, 0, 1 ], "overmap": "city_block2_flr2_3_north" }, + { "point": [ 3, 0, 0 ], "overmap": "city_block2_4_north" }, + { "point": [ 3, 0, 1 ], "overmap": "city_block2_flr2_4_north" } + ] + }, { "type": "city_building", "id": "craft_shop", diff --git a/data/json/overmap/overmap_terrain/overmap_terrain_commercial.json b/data/json/overmap/overmap_terrain/overmap_terrain_commercial.json index a2419b1db3a94..c3a56648cab83 100644 --- a/data/json/overmap/overmap_terrain/overmap_terrain_commercial.json +++ b/data/json/overmap/overmap_terrain/overmap_terrain_commercial.json @@ -3188,5 +3188,61 @@ "name": "hunting supply store roof", "sym": "H", "color": "brown" + }, + { + "type": "overmap_terrain", + "id": "city_block2_1", + "name": "urban city block", + "copy-from": "generic_city_building", + "color": "light_blue" + }, + { + "type": "overmap_terrain", + "id": "city_block2_2", + "name": "urban city block", + "copy-from": "generic_city_building", + "color": "light_blue" + }, + { + "type": "overmap_terrain", + "id": "city_block2_3", + "name": "urban city block", + "copy-from": "generic_city_building", + "color": "light_blue" + }, + { + "type": "overmap_terrain", + "id": "city_block2_4", + "name": "urban city block", + "copy-from": "generic_city_building", + "color": "light_blue" + }, + { + "type": "overmap_terrain", + "id": "city_block2_flr2_1", + "name": "urban city block", + "copy-from": "generic_city_building", + "color": "light_blue" + }, + { + "type": "overmap_terrain", + "id": "city_block2_flr2_2", + "name": "urban city block", + "copy-from": "generic_city_building", + "color": "light_blue" + }, + { + "type": "overmap_terrain", + "id": "city_block2_flr2_3", + "name": "urban city block", + "copy-from": "generic_city_building", + "color": "light_blue" + }, + { + "type": "overmap_terrain", + "id": "city_block2_flr2_4", + "name": "urban city block", + "copy-from": "generic_city_building", + "color": "light_blue" } ] diff --git a/data/json/overmap/overmap_terrain/overmap_terrain_waste_junk.json b/data/json/overmap/overmap_terrain/overmap_terrain_waste_junk.json index 5bab968600498..2959f76bfd649 100644 --- a/data/json/overmap/overmap_terrain/overmap_terrain_waste_junk.json +++ b/data/json/overmap/overmap_terrain/overmap_terrain_waste_junk.json @@ -172,40 +172,6 @@ "see_cost": 5, "flags": [ "RISK_HIGH" ] }, - { - "type": "overmap_terrain", - "id": "haz_sar_entrance", - "name": "hazardous waste sarcophagus", - "sym": "X", - "color": "pink", - "see_cost": 5, - "flags": [ "RISK_HIGH" ] - }, - { - "type": "overmap_terrain", - "id": "haz_sar", - "name": "hazardous waste sarcophagus", - "sym": "X", - "color": "pink", - "see_cost": 5 - }, - { - "type": "overmap_terrain", - "id": "haz_sar_entrance_b1", - "name": "hazardous waste sarcophagus", - "sym": "X", - "color": "pink", - "see_cost": 5, - "flags": [ "RISK_HIGH" ] - }, - { - "type": "overmap_terrain", - "id": "haz_sar_b1", - "name": "hazardous waste sarcophagus", - "sym": "X", - "color": "pink", - "see_cost": 5 - }, { "type": "overmap_terrain", "id": "sewer", diff --git a/data/json/recipes/other/tool.json b/data/json/recipes/other/tool.json index b0af9744cae1d..db9729a4b4133 100644 --- a/data/json/recipes/other/tool.json +++ b/data/json/recipes/other/tool.json @@ -419,7 +419,6 @@ "category": "CC_OTHER", "subcategory": "CSC_OTHER_TOOLS", "skill_used": "fabrication", - "skills_required": [ "cooking", 1 ], "difficulty": 1, "time": "20 m", "reversible": true, @@ -433,7 +432,6 @@ "category": "CC_OTHER", "subcategory": "CSC_OTHER_TOOLS", "skill_used": "fabrication", - "skills_required": [ "cooking", 1 ], "difficulty": 1, "time": "20 m", "reversible": true, diff --git a/data/json/regional_map_settings.json b/data/json/regional_map_settings.json index 1f8cb793d1ab8..2d60437c536ee 100644 --- a/data/json/regional_map_settings.json +++ b/data/json/regional_map_settings.json @@ -591,6 +591,7 @@ }, "shops": { "bus_station": 200, + "city_block_2": 300, "town_hall": 150, "craft_shop": 200, "craft_shop_1": 200, diff --git a/data/json/requirements/cooking_components.json b/data/json/requirements/cooking_components.json index df17297b53fa2..a46df90e4a795 100644 --- a/data/json/requirements/cooking_components.json +++ b/data/json/requirements/cooking_components.json @@ -672,6 +672,7 @@ [ "wine_barley", 1 ], [ "pale_ale", 1 ], [ "stout", 1 ], + [ "imperial_stout", 1 ], [ "mixed_alcohol_weak", 1 ] ] ] diff --git a/data/mods/Aftershock/afs_speech.json b/data/mods/Aftershock/afs_speech.json index aacc67356893a..94c20cee2f116 100644 --- a/data/mods/Aftershock/afs_speech.json +++ b/data/mods/Aftershock/afs_speech.json @@ -32,7 +32,7 @@ { "type": "speech", "speaker": "afs_mon_migoturret", - "sound": "\"The better to eat you! I don't actually think I eat anymore.\"", + "sound": "\"The better to eat you! I don't actually think I eat anymore.\"", "volume": 40 }, { diff --git a/data/mods/Aftershock/items/afs_item_groups.json b/data/mods/Aftershock/items/afs_item_groups.json index 68cd58024bde9..b3e60b7fac1dd 100644 --- a/data/mods/Aftershock/items/afs_item_groups.json +++ b/data/mods/Aftershock/items/afs_item_groups.json @@ -11,7 +11,7 @@ { "item": "pants_cargo" }, { "item": "kevlar" }, { "item": "leather_pouch" }, - { "item": "balclava", "chance": 75 }, + { "item": "balclava", "prob": 75 }, { "item": "bootsheath" } ] }, @@ -19,7 +19,7 @@ "type": "item_group", "id": "afs_gardener_carried", "subtype": "collection", - "entries": [ { "group": "hardware", "count": [ 1, 2 ] }, { "group": "snacks", "repeat": [ 1, 3 ] } ] + "entries": [ { "group": "hardware", "count": [ 1, 2 ] }, { "group": "snacks", "count": [ 1, 3 ] } ] }, { "type": "item_group", diff --git a/data/mods/Aftershock/items/afs_tools.json b/data/mods/Aftershock/items/afs_tools.json index 7229cbc3f8846..16a71330921f9 100644 --- a/data/mods/Aftershock/items/afs_tools.json +++ b/data/mods/Aftershock/items/afs_tools.json @@ -19,7 +19,7 @@ "active": true, "type": "transform" }, - { "type": "CAMERA" } + "CAMERA" ], "flags": [ "WATCH", "ALARMCLOCK" ] }, @@ -44,7 +44,7 @@ "type": "TOOL", "name": "Wraitheon executive's smartphone", "copy-from": "afs_atomic_smartphone", - "description": "Your custom crafted atomic smartphone. Most notably a confidential executive-level override program allows you to remotely control most robots.", + "description": "Your custom crafted atomic smartphone. Most notably a confidential executive-level override program allows you to remotely control most robots.", "price": 20000000, "price_postapoc": 250000, "material": [ "superalloy", "aluminum" ], @@ -55,8 +55,8 @@ "active": true, "type": "transform" }, - { "revert_to": "afs_atomic_smartphone", "type": "CAMERA" }, - { "type": "ROBOTCONTROL" } + "CAMERA", + "ROBOTCONTROL" ] }, { diff --git a/data/mods/Aftershock/maps/afs_regional_map_settings.json b/data/mods/Aftershock/maps/afs_regional_map_settings.json index a87db39cfa2ea..33ef3c8145ebc 100644 --- a/data/mods/Aftershock/maps/afs_regional_map_settings.json +++ b/data/mods/Aftershock/maps/afs_regional_map_settings.json @@ -2,7 +2,6 @@ { "type": "region_overlay", "regions": [ "all" ], - "city": { "basements": { "basement": 1000, "basement_hidden_lab_stairs": 100, "basement_bionic": 100 } }, - "weather": { "base_temperature": 0.0 } + "city": { "basements": { "basement": 1000, "basement_hidden_lab_stairs": 100, "basement_bionic": 100 } } } ] diff --git a/data/mods/Aftershock/maps/mapgen/prepnet_orchard.json b/data/mods/Aftershock/maps/mapgen/prepnet_orchard.json index f5d8745818874..e3147bb35c3e1 100644 --- a/data/mods/Aftershock/maps/mapgen/prepnet_orchard.json +++ b/data/mods/Aftershock/maps/mapgen/prepnet_orchard.json @@ -63,9 +63,9 @@ { "item": "supplies_farming", "x": 3, "y": 9, "chance": 99 } ], "sealed_item": { "p": { "items": { "item": "farming_seeds", "chance": 100 }, "furniture": "f_plant_harvest" } }, - "place_monsters": [ - { "monster": "GROUP_PARK_SCENIC", "x": 12, "y": 14, "chance": 2 }, - { "monster": "GROUP_PrepNet", "x": [ 3, 20 ], "y": [ 16, 20 ], "repeat": 4, "friendly": true } + "place_monster": [ + { "group": "GROUP_PARK_SCENIC", "x": 12, "y": 14, "chance": 2 }, + { "group": "GROUP_PrepNet", "x": [ 3, 20 ], "y": [ 16, 20 ], "repeat": 4, "friendly": true } ], "place_npcs": [ { "class": "prepnet_gardener", "x": 10, "y": 9 } ] } @@ -136,9 +136,9 @@ { "item": "supplies_farming", "x": 6, "y": 7, "chance": 15 } ], "sealed_item": { "p": { "items": { "item": "farming_seeds", "chance": 100 }, "furniture": "f_plant_harvest" } }, - "place_monsters": [ - { "monster": "GROUP_PARK_SCENIC", "x": 12, "y": 14, "chance": 2 }, - { "monster": "GROUP_PrepNet", "x": [ 3, 20 ], "y": [ 16, 20 ], "repeat": 3, "friendly": true } + "place_monster": [ + { "group": "GROUP_PARK_SCENIC", "x": 12, "y": 14, "chance": 2 }, + { "group": "GROUP_PrepNet", "x": [ 3, 20 ], "y": [ 16, 20 ], "repeat": 3, "friendly": true } ], "place_npcs": [ { "class": "prepnet_gardener", "x": 10, "y": 9 } ] } diff --git a/data/mods/Aftershock/npcs/afs_npc.json b/data/mods/Aftershock/npcs/afs_npc.json index 8b5617036d7ee..c420e2d9addb2 100644 --- a/data/mods/Aftershock/npcs/afs_npc.json +++ b/data/mods/Aftershock/npcs/afs_npc.json @@ -8,7 +8,6 @@ "attitude": 1, "mission": 0, "chat": "TALK_PrepNet_gardener_1", - "faction": "Prepnet_Phyle", - "mon_faction": "PrepNet" + "faction": "Prepnet_Phyle" } ] diff --git a/data/mods/Aftershock/player/afs_professions.json b/data/mods/Aftershock/player/afs_professions.json index befe3b51f381d..27d21f1b0159e 100644 --- a/data/mods/Aftershock/player/afs_professions.json +++ b/data/mods/Aftershock/player/afs_professions.json @@ -32,8 +32,10 @@ "points": 2, "skills": [ { "level": 5, "name": "computer" } ], "items": { - "both": [ "laptop", "software_useless", "linuxtshirt", "pants_cargo", "socks", "slingpack", "sneakers", "smart_phone" ], - "entries": [ { "item": "light_plus_battery_cell", "ammo-item": "battery", "charges": 150, "container-item": "eink_tablet_pc" } ], + "both": { + "items": [ "laptop", "software_useless", "linuxtshirt", "pants_cargo", "socks", "slingpack", "sneakers", "smart_phone" ], + "entries": [ { "item": "light_plus_battery_cell", "ammo-item": "battery", "charges": 150, "container-item": "eink_tablet_pc" } ] + }, "male": [ "briefs" ], "female": [ "bra", "panties" ] } diff --git a/data/mods/Aftershock/vehicles/afs_vehicle_overrides.json b/data/mods/Aftershock/vehicles/afs_vehicle_overrides.json index cf8d2507ee7dc..f4882e95aca6f 100644 --- a/data/mods/Aftershock/vehicles/afs_vehicle_overrides.json +++ b/data/mods/Aftershock/vehicles/afs_vehicle_overrides.json @@ -97,7 +97,7 @@ { "y": 1, "x": 3, - "parts": [ "turret_mount", { "ammo_type": [ "40x46mm_m433" ], "part": "mounted_mk19", "ammo": 60, "ammo_qty": [ 1, 25 ] } ] + "parts": [ "turret_mount", { "ammo_types": [ "40x46mm_m433" ], "part": "mounted_mk19", "ammo": 60, "ammo_qty": [ 1, 25 ] } ] }, { "y": 1, "x": 3, "parts": [ "seat", "seatbelt_heavyduty" ] }, { "y": 0, "x": 3, "parts": [ "hdframe_vertical_2", "stowboard_vertical", "hdroof" ] }, diff --git a/data/mods/CRT_EXPANSION/crt_materials.json b/data/mods/CRT_EXPANSION/crt_materials.json index ef039e86f09ae..dbb5b022129ff 100644 --- a/data/mods/CRT_EXPANSION/crt_materials.json +++ b/data/mods/CRT_EXPANSION/crt_materials.json @@ -16,11 +16,7 @@ "dmg_adj": [ "ripped", "torn", "shredded", "tattered" ], "bash_dmg_verb": "ripped", "cut_dmg_verb": "cut", - "burn_data": [ - { "fuel": 1, "smoke": 3, "burn": 1, "chance": 10 }, - { "fuel": 1, "smoke": 3, "burn": 2 }, - { "fuel": 1, "smoke": 3, "burn": 3 } - ] + "burn_data": [ { "fuel": 1, "smoke": 3, "burn": 1 }, { "fuel": 1, "smoke": 3, "burn": 2 }, { "fuel": 1, "smoke": 3, "burn": 3 } ] }, { "type": "AMMO", diff --git a/data/mods/CRT_EXPANSION/items/crt_armor.json b/data/mods/CRT_EXPANSION/items/crt_armor.json index f9bc5a91d1291..773440e8e17ee 100644 --- a/data/mods/CRT_EXPANSION/items/crt_armor.json +++ b/data/mods/CRT_EXPANSION/items/crt_armor.json @@ -33,7 +33,7 @@ "warmth": 40, "encumbrance": 17, "material_thickness": 5, - "enviromental_protection": 5 + "environmental_protection": 5 }, { "id": "crt_la_boots", diff --git a/data/mods/CRT_EXPANSION/items/crt_tools.json b/data/mods/CRT_EXPANSION/items/crt_tools.json index cb2823dbb3e76..839f6a4f83115 100644 --- a/data/mods/CRT_EXPANSION/items/crt_tools.json +++ b/data/mods/CRT_EXPANSION/items/crt_tools.json @@ -33,11 +33,9 @@ "weight": "350 g", "volume": "750 ml", "price": 20000, - "damage": { "damage_type": "cold", "amount": 100 }, "cutting": 8, "bashing": 3, "to_hit": 2, - "durability": 15, "symbol": ";", "qualities": [ [ "CUT_FINE", 1 ] ], "use_action": "CROWBAR", @@ -57,7 +55,6 @@ "price": 20000, "bashing": 10, "to_hit": 1, - "durability": 15, "symbol": "8", "flags": [ "UNARMED_WEAPON", "UNBREAKABLE_MELEE" ], "techniques": [ "WBLOCK_2", "UHAND", "HOOK" ] diff --git a/data/mods/CRT_EXPANSION/mutations/crt_mutatinoc.json b/data/mods/CRT_EXPANSION/mutations/crt_mutatinoc.json index cbcfeeb462795..df51f72b9801b 100644 --- a/data/mods/CRT_EXPANSION/mutations/crt_mutatinoc.json +++ b/data/mods/CRT_EXPANSION/mutations/crt_mutatinoc.json @@ -20,7 +20,7 @@ "visibility": -7, "ugliness": -7, "description": "Aside from your appearances, your movements are incredibly graceful and allow you to seemingly glide through every task.", - "thresheq": [ "THRESH_VAMP" ], + "threshreq": [ "THRESH_VAMP" ], "category": [ "VAMP" ], "stealth_modifier": 5, "noise_modifier": 0.2, diff --git a/data/mods/Generic_Guns/gg_vehicle_override.json b/data/mods/Generic_Guns/gg_vehicle_override.json index 116a1e4657f7a..6dd0374e21562 100644 --- a/data/mods/Generic_Guns/gg_vehicle_override.json +++ b/data/mods/Generic_Guns/gg_vehicle_override.json @@ -70,7 +70,6 @@ "color": "green", "broken_color": "green", "size": 2000, - "range": 12, "breaks_into": [ { "item": "m134", "prob": 50 } ], "requirements": { "install": { "skills": [ [ "mechanics", 6 ], [ "rifle", 3 ] ] }, "removal": { "skills": [ [ "mechanics", 4 ] ] } } } diff --git a/data/mods/Graphical_Overmap/overmap_terrain.json b/data/mods/Graphical_Overmap/overmap_terrain.json index bd7f583283041..3ab496e93534f 100644 --- a/data/mods/Graphical_Overmap/overmap_terrain.json +++ b/data/mods/Graphical_Overmap/overmap_terrain.json @@ -22865,34 +22865,6 @@ "sym": "ó", "color": "light_green" }, - { - "type": "overmap_terrain", - "id": "haz_sar_entrance", - "copy-from": "haz_sar_entrance", - "sym": "Õ", - "color": "green" - }, - { - "type": "overmap_terrain", - "id": "haz_sar", - "copy-from": "haz_sar", - "sym": "Õ", - "color": "green" - }, - { - "type": "overmap_terrain", - "id": "haz_sar_entrance_b1", - "copy-from": "haz_sar_entrance_b1", - "sym": "Õ", - "color": "green" - }, - { - "type": "overmap_terrain", - "id": "haz_sar_b1", - "copy-from": "haz_sar_b1", - "sym": "Õ", - "color": "green" - }, { "type": "overmap_terrain", "id": "pump_station_1", diff --git a/data/mods/Magiclysm/Spells/monsterspells.json b/data/mods/Magiclysm/Spells/monsterspells.json index 84b68d133b3bd..7976d85806aee 100644 --- a/data/mods/Magiclysm/Spells/monsterspells.json +++ b/data/mods/Magiclysm/Spells/monsterspells.json @@ -17,6 +17,49 @@ "effect": "projectile_attack", "extra_effects": [ { "id": "light_healing", "hit_self": true } ] }, + { + "id": "rocket_punch", + "type": "SPELL", + "name": "Rocket Punch", + "description": "Ejects giant fist from arm.", + "valid_targets": [ "hostile" ], + "flags": [ "NO_LEGS" ], + "damage_type": "bash", + "min_damage": 30, + "max_damage": 40, + "damage_increment": 2, + "max_level": 5, + "min_range": 1, + "max_range": 2, + "range_increment": 0.2, + "effect": "projectile_attack" + }, + { + "id": "gas_attack", + "type": "SPELL", + "name": "Gas Attack", + "description": "Spreads toxic gas around itself.", + "valid_targets": [ "self", "hostile", "ground" ], + "flags": [ "NO_HANDS", "NO_LEGS" ], + "damage_type": "bio", + "min_damage": 1, + "max_damage": 1, + "max_level": 5, + "min_range": 1, + "max_range": 3, + "range_increment": 0.2, + "effect": "target_attack", + "field_id": "fd_toxic_gas", + "field_chance": 10, + "min_field_intensity": 1, + "max_field_intensity": 1, + "min_duration": 1000, + "max_duration": 6000, + "duration_increment": 1000, + "min_aoe": 1, + "max_aoe": 2, + "aoe_increment": 0.2 + }, { "type": "SPELL", "id": "mon_demon_fireball", diff --git a/data/mods/Magiclysm/items/constructs.json b/data/mods/Magiclysm/items/constructs.json new file mode 100644 index 0000000000000..efc54880b3eb1 --- /dev/null +++ b/data/mods/Magiclysm/items/constructs.json @@ -0,0 +1,52 @@ +[ + { + "type": "GENERIC", + "id": "broken_claygolem", + "symbol": "x", + "color": "brown", + "name": "broken clay golem", + "category": "other", + "description": "A broken clay golem, looking like piece of post-modern art. Could be smashed for clay.", + "price": 10000, + "material": [ "clay" ], + "weight": "122 kg", + "volume": "120 L", + "bashing": 4, + "cutting": 4, + "to_hit": -3, + "flags": [ "TRADER_AVOID", "NO_REPAIR" ] + }, + { + "type": "GENERIC", + "id": "broken_stonegolem", + "symbol": "x", + "color": "light_gray", + "name": "broken stone golem", + "category": "other", + "description": "A broken stone golem, not that much different from big boulder. Could be smashed for stone.", + "price": 10000, + "material": [ "stone" ], + "weight": "162 kg", + "volume": "120 L", + "bashing": 4, + "cutting": 4, + "to_hit": -3, + "flags": [ "TRADER_AVOID", "NO_REPAIR" ] + }, + { + "type": "GENERIC", + "id": "broken_irongolem", + "symbol": "x", + "color": "dark_gray", + "name": "broken iron golem", + "category": "other", + "description": "A broken iron golem, with all iron you would possibly ever need. Could be smashed for iron.", + "price": 100000, + "material": [ "iron" ], + "weight": "945 kg", + "volume": "120 L", + "bashing": 30, + "to_hit": -5, + "flags": [ "TRADER_AVOID", "NO_REPAIR" ] + } +] diff --git a/data/mods/Magiclysm/monstergroups.json b/data/mods/Magiclysm/monstergroups.json index ac3c80a0802fc..ba251b0eba50a 100644 --- a/data/mods/Magiclysm/monstergroups.json +++ b/data/mods/Magiclysm/monstergroups.json @@ -14,6 +14,9 @@ { "monster": "mon_owlbear", "freq": 10, "cost_multiplier": 10 }, { "monster": "mon_wisp", "freq": 3, "cost_multiplier": 10, "conditions": [ "NIGHT" ] }, { "monster": "mon_troll", "freq": 3, "cost_multiplier": 10, "conditions": [ "DAY" ] }, + { "monster": "mon_claygolem", "freq": 8, "cost_multiplier": 3 }, + { "monster": "mon_stonegolem", "freq": 4, "cost_multiplier": 5 }, + { "monster": "mon_irongolem", "freq": 2, "cost_multiplier": 8 }, { "monster": "mon_demon_spiderling", "freq": 15, "cost_multiplier": 5, "pack_size": [ 3, 7 ] } ] }, diff --git a/data/mods/Magiclysm/monsters/monsters.json b/data/mods/Magiclysm/monsters/monsters.json index f9076f9f62f0f..7fc8d45db5cf3 100644 --- a/data/mods/Magiclysm/monsters/monsters.json +++ b/data/mods/Magiclysm/monsters/monsters.json @@ -330,5 +330,100 @@ "death_function": [ "NORMAL" ], "regenerates": 1, "flags": [ "SEES", "SMELLS", "HEARS", "STUMBLES", "PATH_AVOID_FIRE", "REVIVES" ] + }, + { + "id": "mon_claygolem", + "type": "MONSTER", + "name": "clay golem", + "description": "A large, humanoid golem made from clay. Its proportions are off and it seems fragile.", + "default_faction": "robot", + "bodytype": "human", + "species": [ "ROBOT" ], + "diff": 2, + "volume": "120 L", + "weight": "122 kg", + "hp": 100, + "speed": 80, + "material": [ "clay" ], + "symbol": "X", + "color": "brown", + "aggression": 10, + "morale": 100, + "melee_skill": 6, + "melee_dice": 2, + "melee_dice_sides": 10, + "melee_cut": 5, + "armor_bash": 10, + "armor_cut": 10, + "dodge": 0, + "vision_day": 40, + "vision_night": 40, + "anger_triggers": [ "PLAYER_CLOSE", "HURT" ], + "death_function": [ "BROKEN" ], + "flags": [ "SEES", "NO_BREATHE", "ACIDPROOF", "LOUDMOVES" ] + }, + { + "id": "mon_stonegolem", + "type": "MONSTER", + "name": "stone golem", + "description": "A large, humanoid golem made from stone. Its fists look similar to rockets.", + "default_faction": "robot", + "bodytype": "human", + "species": [ "ROBOT" ], + "diff": 2, + "volume": "120 L", + "weight": "162 kg", + "hp": 250, + "speed": 60, + "material": [ "stone" ], + "symbol": "X", + "color": "light_gray", + "aggression": 10, + "morale": 100, + "melee_skill": 6, + "melee_dice": 3, + "melee_dice_sides": 8, + "melee_cut": 6, + "armor_bash": 20, + "armor_cut": 20, + "dodge": 0, + "vision_day": 40, + "vision_night": 40, + "special_attacks": [ { "type": "spell", "spell_id": "rocket_punch", "spell_level": 5, "cooldown": 10 } ], + "anger_triggers": [ "PLAYER_CLOSE", "HURT" ], + "death_function": [ "BROKEN" ], + "flags": [ "SEES", "NO_BREATHE", "ACIDPROOF", "LOUDMOVES" ] + }, + { + "id": "mon_irongolem", + "type": "MONSTER", + "name": "iron golem", + "description": "A large, humanoid golem made from iron. Some sort of noxious gas seems to be seeping from its mouth.", + "default_faction": "robot", + "bodytype": "human", + "species": [ "ROBOT" ], + "diff": 2, + "volume": "120 L", + "weight": "945 kg", + "hp": 400, + "speed": 50, + "material": [ "iron" ], + "symbol": "X", + "color": "dark_gray", + "aggression": 10, + "morale": 100, + "melee_skill": 6, + "melee_dice": 3, + "melee_dice_sides": 10, + "melee_cut": 7, + "armor_bash": 32, + "armor_cut": 32, + "dodge": 0, + "vision_day": 40, + "vision_night": 40, + "special_attacks": [ { "type": "spell", "spell_id": "gas_attack", "spell_level": 5, "cooldown": 60 } ], + "anger_triggers": [ "PLAYER_CLOSE", "HURT" ], + "death_function": [ "BROKEN" ], + "flags": [ "SEES", "NO_BREATHE", "ACIDPROOF", "LOUDMOVES" ] } ] diff --git a/data/mods/Magiclysm/recipes/deconstruction.json b/data/mods/Magiclysm/recipes/deconstruction.json new file mode 100644 index 0000000000000..5fe9ad10e4cdd --- /dev/null +++ b/data/mods/Magiclysm/recipes/deconstruction.json @@ -0,0 +1,29 @@ +[ + { + "result": "broken_claygolem", + "type": "uncraft", + "skill_used": "spellcraft", + "difficulty": 2, + "time": "4 h", + "qualities": [ { "id": "HAMMER", "level": 1 } ], + "components": [ [ [ "clay_lump", 231 ] ] ] + }, + { + "result": "broken_stonegolem", + "type": "uncraft", + "skill_used": "spellcraft", + "difficulty": 4, + "time": "4 h", + "qualities": [ { "id": "HAMMER", "level": 1 } ], + "components": [ [ [ "rock", 222 ] ], [ [ "sharp_rock", 33 ] ] ] + }, + { + "result": "broken_irongolem", + "type": "uncraft", + "skill_used": "spellcraft", + "difficulty": 6, + "time": "6 h", + "qualities": [ { "id": "HAMMER", "level": 1 }, { "id": "SAW_M", "level": 1 } ], + "components": [ [ [ "scrap", 800 ] ], [ [ "steel_lump", 200 ] ] ] + } +] diff --git a/data/mods/My_Sweet_Cataclysm/sweet_mutations.json b/data/mods/My_Sweet_Cataclysm/sweet_mutations.json index 6677b631abd8d..260d1e73fe9c9 100644 --- a/data/mods/My_Sweet_Cataclysm/sweet_mutations.json +++ b/data/mods/My_Sweet_Cataclysm/sweet_mutations.json @@ -29,7 +29,7 @@ "ROBUST", "CARNIVORE" ], - "can_only_eat": [ "junk", "sugar" ], + "can_only_eat": [ "junk", "sugar", "honey" ], "can_only_heal_with": [ "caramel_ointement" ], "description": "You are literally made of sugar.", "vitamin_rates": [ [ "vitC", -900 ], [ "vitB", -900 ], [ "vitA", -900 ], [ "iron", -900 ], [ "calcium", -900 ] ], @@ -41,6 +41,7 @@ "fat_to_max_hp": 0.1, "allowed_category": [ "SUGAR" ], "no_cbm_on_bp": [ "TORSO", "HEAD", "EYES", "MOUTH", "ARM_L", "ARM_R", "HAND_L", "HAND_R", "LEG_L", "LEG_R", "FOOT_L", "FOOT_R" ], - "armor": [ { "parts": "ALL", "cut": 10, "bash": 5 } ] + "armor": [ { "parts": "ALL", "cut": 10, "bash": 5 } ], + "flags": [ "NO_THIRST", "NO_DISEASE", "NO_RADIATION" ] } ] diff --git a/data/mods/alt_map_key/overmap_terrain.json b/data/mods/alt_map_key/overmap_terrain.json index 11706a3080958..0ab94a4eeb173 100644 --- a/data/mods/alt_map_key/overmap_terrain.json +++ b/data/mods/alt_map_key/overmap_terrain.json @@ -1882,38 +1882,6 @@ "sym": "t", "color": "pink" }, - { - "type": "overmap_terrain", - "id": "haz_sar_entrance", - "copy-from": "haz_sar_entrance", - "name": "hazardous waste sarcophagus", - "sym": "H", - "color": "i_pink" - }, - { - "type": "overmap_terrain", - "id": "haz_sar", - "copy-from": "haz_sar", - "name": "hazardous waste sarcophagus", - "sym": "h", - "color": "i_pink" - }, - { - "type": "overmap_terrain", - "id": "haz_sar_entrance_b1", - "copy-from": "haz_sar_entrance_b1", - "name": "hazardous waste sarcophagus", - "sym": "H", - "color": "i_pink" - }, - { - "type": "overmap_terrain", - "id": "haz_sar_b1", - "copy-from": "haz_sar_b1", - "name": "hazardous waste sarcophagus", - "sym": "h", - "color": "i_pink" - }, { "type": "overmap_terrain", "id": "cave", diff --git a/data/mods/blazemod/blaze_blob_parts.json b/data/mods/blazemod/blaze_blob_parts.json index d98293f0776f7..3a797d6b08e98 100644 --- a/data/mods/blazemod/blaze_blob_parts.json +++ b/data/mods/blazemod/blaze_blob_parts.json @@ -47,12 +47,11 @@ "color": "blue", "broken_color": "blue", "durability": 400, - "range": 1, "damage_modifier": 10, "folded_volume": 1, "breaks_into": [ { "item": "bitergrow" } ], "requirements": { "repair": { "time": "5 m", "using": [ [ "blobrep", 1 ] ] } }, - "descriptions": "A living blob, transformed into a heavy vehicle weapon.", + "description": "A living blob, transformed into a heavy vehicle weapon.", "flags": [ "TURRET", "FOLDABLE", "OBSTACLE" ] }, { @@ -66,7 +65,6 @@ "color": "magenta", "broken_color": "magenta", "durability": 200, - "range": 8, "damage_modifier": 10, "folded_volume": 1, "breaks_into": [ { "item": "cluttergrow" } ], @@ -85,7 +83,6 @@ "color": "light_blue", "broken_color": "light_blue", "durability": 200, - "range": 18, "damage_modifier": 10, "folded_volume": 1, "breaks_into": [ { "item": "freeziegrow" } ], @@ -200,7 +197,6 @@ "color": "brown", "broken_color": "brown", "durability": 600, - "range": 1, "damage_modifier": 10, "folded_volume": 1, "breaks_into": [ { "item": "fuzzlegrow" } ], @@ -1179,7 +1175,6 @@ "color": "blue", "broken_color": "blue", "durability": 1000, - "range": 1, "damage_modifier": 10, "folded_volume": 1, "breaks_into": [ { "item": "horrorgrow" } ], @@ -1197,7 +1192,6 @@ "color": "brown", "broken_color": "brown", "durability": 200, - "range": 8, "damage_modifier": 10, "folded_volume": 1, "breaks_into": [ { "item": "inkiegrow" } ], @@ -1215,7 +1209,6 @@ "color": "light_red", "broken_color": "light_red", "durability": 200, - "range": 8, "damage_modifier": 10, "folded_volume": 1, "breaks_into": [ { "item": "meltiegrow" } ], @@ -1631,7 +1624,6 @@ "color": "red", "broken_color": "red", "durability": 200, - "range": 60, "damage_modifier": 10, "folded_volume": 1, "breaks_into": [ { "item": "queengrow" } ], @@ -1650,7 +1642,6 @@ "color": "cyan", "broken_color": "cyan", "durability": 200, - "range": 18, "damage_modifier": 10, "folded_volume": 1, "breaks_into": [ { "item": "razorqueengrow" } ], @@ -1669,7 +1660,6 @@ "color": "light_blue", "broken_color": "light_blue", "durability": 200, - "range": 16, "damage_modifier": 10, "folded_volume": 1, "breaks_into": [ { "item": "sharpgrow" } ], @@ -1688,7 +1678,6 @@ "color": "blue", "broken_color": "blue", "durability": 200, - "range": 12, "damage_modifier": 10, "folded_volume": 1, "breaks_into": [ { "item": "sicklegrow" } ], @@ -1707,7 +1696,6 @@ "color": "cyan", "broken_color": "cyan", "durability": 200, - "range": 16, "damage_modifier": 10, "folded_volume": 1, "breaks_into": [ { "item": "sparkiegrow" } ], @@ -1726,7 +1714,6 @@ "color": "yellow", "broken_color": "yellow", "durability": 200, - "range": 8, "damage_modifier": 10, "folded_volume": 1, "breaks_into": [ { "item": "stickiegrow" } ], @@ -1745,7 +1732,6 @@ "color": "light_red", "broken_color": "light_red", "durability": 200, - "range": 10, "damage_modifier": 10, "folded_volume": 1, "breaks_into": [ { "item": "torchiegrow" } ], @@ -1764,7 +1750,6 @@ "color": "cyan", "broken_color": "cyan", "durability": 200, - "range": 12, "damage_modifier": 10, "folded_volume": 1, "breaks_into": [ { "item": "voideatergrow" } ], diff --git a/data/mods/blazemod/blaze_other.json b/data/mods/blazemod/blaze_other.json index aa719cf24fc00..53ec86b273209 100644 --- a/data/mods/blazemod/blaze_other.json +++ b/data/mods/blazemod/blaze_other.json @@ -180,8 +180,7 @@ "id": "turretframe", "type": "GENERIC", "category": "veh_parts", - "name": "turret chassis", - "name_plural": "turret chassis", + "name": { "str": "turret chassis", "str_pl": "turret chassis" }, "description": "A frame capable of rotating a full 360 degrees, capable of mounting multiple weapon systems either welded directly onto it or secured via the straps. It comes with a easily modified container for ammunition storage, a rudimentary ammo feed system for easy access, and a section for a movement system. It is controlled by a targeting AI that can adapt to the usage of whatever weapon that has been loading, with proper programming.", "weight": "38604 g", "volume": "20 L", diff --git a/data/mods/blazemod/blaze_other_parts.json b/data/mods/blazemod/blaze_other_parts.json index 46e303a047f3a..3507132c350dc 100644 --- a/data/mods/blazemod/blaze_other_parts.json +++ b/data/mods/blazemod/blaze_other_parts.json @@ -46,11 +46,11 @@ "copy-from": "engine_combustion", "type": "vehicle_part", "fuel_type": "coal_lump", - "cold_affects_start": true, "looks_like": "diesel_engine_v12", "m2c": 75, "//": "45% energy efficiency", - "description": "A closed cycle, external combustion steam turbine. Burns coal from a bunker in the vehicle to produce steam." + "description": "A closed cycle, external combustion steam turbine. Burns coal from a bunker in the vehicle to produce steam.", + "extend": { "flags": [ "E_COLD_START" ] } }, { "id": "engine_steam_turbine_small", @@ -328,7 +328,6 @@ "id": "turretframe", "type": "vehicle_part", "name": "turret chassis", - "name_plural": "turret chassis", "item": "turretframe", "symbol": "Y", "broken_symbol": "#", diff --git a/data/mods/blazemod/blaze_override.json b/data/mods/blazemod/blaze_override.json index b8a9ec67a12dc..3ade71f8a5b37 100644 --- a/data/mods/blazemod/blaze_override.json +++ b/data/mods/blazemod/blaze_override.json @@ -14,8 +14,7 @@ "copy-from": "flamethrower", "type": "vehicle_part", "name": "manual flamethrower", - "broken_symbol": "#", - "range": 5 + "broken_symbol": "#" }, { "id": "auto_m1918", @@ -25,8 +24,7 @@ "symbol": "t", "broken_symbol": "#", "color": "brown", - "size": 40, - "range": 12 + "size": 40 }, { "id": "am249", @@ -34,16 +32,14 @@ "type": "vehicle_part", "name": "M249 turret", "broken_symbol": "#", - "size": 40, - "range": 12 + "size": 40 }, { "id": "aplasma_gun", "copy-from": "plasma_gun", "type": "vehicle_part", "name": "plasma turret", - "broken_symbol": "#", - "range": 12 + "broken_symbol": "#" }, { "id": "afusion_gun", @@ -51,8 +47,7 @@ "type": "vehicle_part", "name": "fusion turret", "broken_symbol": "#", - "size": 10, - "range": 12 + "size": 10 }, { "id": "am2browning", @@ -60,8 +55,7 @@ "type": "vehicle_part", "name": "M2 Browning turret", "broken_symbol": "#", - "size": 40, - "range": 12 + "size": 40 }, { "id": "auto_m240", @@ -69,8 +63,7 @@ "type": "vehicle_part", "name": "M240 turret", "broken_symbol": "#", - "size": 40, - "range": 12 + "size": 40 }, { "id": "auto_m60", @@ -78,8 +71,7 @@ "type": "vehicle_part", "name": "M60 turret", "broken_symbol": "#", - "size": 40, - "range": 12 + "size": 40 }, { "id": "auto_abzats", @@ -87,8 +79,7 @@ "type": "vehicle_part", "name": "auto-shotgun turret", "broken_symbol": "#", - "size": 40, - "range": 12 + "size": 40 }, { "id": "auto_m134", @@ -96,8 +87,7 @@ "type": "vehicle_part", "name": "M134D-H Minigun turret", "broken_symbol": "#", - "size": 40, - "range": 12 + "size": 40 }, { "id": "auto_mk19", @@ -105,8 +95,7 @@ "type": "vehicle_part", "name": "Mark 19 turret", "broken_symbol": "#", - "size": 40, - "range": 12 + "size": 40 }, { "id": "auto_rm614", @@ -115,8 +104,7 @@ "name": "RM614 turret", "broken_symbol": "#", "broken_color": "light_gray", - "size": 40, - "range": 12 + "size": 40 }, { "id": "auto_rm298", @@ -125,16 +113,14 @@ "name": "RM298 turret", "broken_symbol": "#", "broken_color": "light_gray", - "size": 40, - "range": 12 + "size": 40 }, { "id": "awatercannon", "copy-from": "watercannon", "type": "vehicle_part", "name": "water cannon turret", - "broken_symbol": "#", - "range": 7 + "broken_symbol": "#" }, { "id": "pool_ball", diff --git a/data/mods/blazemod/blaze_test.json b/data/mods/blazemod/blaze_test.json index b6cca51c99e42..38f1e0e0ce4e2 100644 --- a/data/mods/blazemod/blaze_test.json +++ b/data/mods/blazemod/blaze_test.json @@ -874,7 +874,6 @@ "color": "pink", "broken_color": "pink", "size": 10, - "range": 18, "folded_volume": 20, "breaks_into": [ { "item": "vortexcannon", "count": [ 0, 1 ] } ], "requirements": { "install": { "skills": [ [ "mechanics", 4 ] ] }, "removal": { "skills": [ [ "mechanics", 2 ] ] } } diff --git a/data/mods/blazemod/snippets.json b/data/mods/blazemod/snippets.json index 0e2670643db49..953a067c2d546 100644 --- a/data/mods/blazemod/snippets.json +++ b/data/mods/blazemod/snippets.json @@ -17,7 +17,7 @@ "text": "\"Day 40. Controls broken-- car's magic reactor makes it goes inexorably forward. Giant rollers on front demolish forest. Maine, here I come.\"" }, { "id": "note_blazemod_5", "text": "\"my car is a diamond in the rough… literally\"" }, - { "id": "note_blazemod_6", "text": "\"M249 TURRET NODDED. IS TURRET ALIVE? FINALLY, SOMEBODY TO TALK TO!\"" }, + { "id": "note_blazemod_6", "text": "\"M249 TURRET NODDED. IS TURRET ALIVE? FINALLY, SOMEBODY TO TALK TO!\"" }, { "id": "note_blazemod_7", "text": "\"Added so many things to my taxi that it went a-blaze. Whoops.\"" }, { "id": "note_blazemod_8", diff --git a/doc/JSON_FLAGS.md b/doc/JSON_FLAGS.md index ebab90d2fffba..714af7fe74781 100644 --- a/doc/JSON_FLAGS.md +++ b/doc/JSON_FLAGS.md @@ -1086,6 +1086,10 @@ Also see `monster_attacks.json` for more special attacks, for example, impale an - ```UNARMED_BONUS``` You get a bonus to unarmed bash and cut damage equal to unarmed_skill/2 up to 4. - ```NEED_ACTIVE_TO_MELEE``` This mutation gives bonus to unarmed melee only if it's active. +- ```NO_DISEASE``` This mutation grants immunity to diseases. +- ```NO_THIRST``` Your thirst is not modified by food or drinks. +- ```NO_RADIATION``` This mutation grants immunity to radiations. + ### Categories diff --git a/doc/JSON_INFO.md b/doc/JSON_INFO.md index 59e672ef1b7ee..9c0e13b01c8ab 100644 --- a/doc/JSON_INFO.md +++ b/doc/JSON_INFO.md @@ -474,12 +474,13 @@ The syntax listed here is still valid. | `name` | In-game name displayed. | `bash_resist` | How well a material resists bashing damage. | `cut_resist` | How well a material resists cutting damage. -| `bash_dmg_verb` | Verb used when material takes bashing damage. -| `cut_dmg_verb` | Verb used when material takes cutting damage. -| `dmg_adj` | Description added to damaged item in ascending severity. | `acid_resist` | Ability of a material to resist acid. | `elec_resist` | Ability of a material to resist electricity. | `fire_resist` | Ability of a material to resist fire. +| `chip_resist` | Returns resistance to being damaged by attacks against the item itself. +| `bash_dmg_verb` | Verb used when material takes bashing damage. +| `cut_dmg_verb` | Verb used when material takes cutting damage. +| `dmg_adj` | Description added to damaged item in ascending severity. | `dmg_adj` | Adjectives used to describe damage states of a material. | `density` | Density of a material. | `vitamins` | Vitamins in a material. Usually overridden by item specific values. @@ -1016,6 +1017,7 @@ Note that even though most statistics yield an integer, you should still use "good": 1 } ] // "neutral/good/ignored" // Good increases pos and cancels neg, neut cancels neg, ignored cancels both "vitamin_rates": [ [ "vitC", -1200 ] ], // How much extra vitamins do you consume per minute. Negative values mean production "vitamins_absorb_multi": [ [ "flesh", [ [ "vitA", 0 ], [ "vitB", 0 ], [ "vitC", 0 ], [ "calcium", 0 ], [ "iron", 0 ] ], [ "all", [ [ "vitA", 2 ], [ "vitB", 2 ], [ "vitC", 2 ], [ "calcium", 2 ], [ "iron", 2 ] ] ] ], // multiplier of vitamin absorption based on material. "all" is every material. supports multiple materials. +"craft_skill_bonus": [ [ "electronics", -2 ], [ "tailor", -2 ], [ "mechanics", -2 ] ], // Skill affected by the mutation and their bonuses. Bonuses can be negative, a bonus of 4 is worth 1 full skill level. "restricts_gear" : [ "TORSO" ], //list of bodyparts that get restricted by this mutation "allow_soft_gear" : true, //If there is a list of 'restricts_gear' this sets if the location still allows items made out of soft materials (Only one of the types need to be soft for it to be considered soft). (default: false) "destroys_gear" : true, //If true, destroys the gear in the 'restricts_gear' location when mutated into. (default: false) diff --git a/src/advanced_inv.cpp b/src/advanced_inv.cpp index 8f51b1b03ec59..aec50f7cbf500 100644 --- a/src/advanced_inv.cpp +++ b/src/advanced_inv.cpp @@ -1393,6 +1393,7 @@ void advanced_inventory::display() if( spane.get_area() == AIM_INVENTORY || spane.get_area() == AIM_WORN ) { int idx = spane.get_area() == AIM_INVENTORY ? sitem->idx : player::worn_position_to_index( sitem->idx ); + item_location loc( g->u, &g->u.i_at( idx ) ); // Setup a "return to AIM" activity. If examining the item creates a new activity // (e.g. reading, reloading, activating), the new activity will be put on top of // "return to AIM". Once the new activity is finished, "return to AIM" comes back @@ -1401,7 +1402,7 @@ void advanced_inventory::display() // "return to AIM". do_return_entry(); assert( g->u.has_activity( activity_id( "ACT_ADV_INVENTORY" ) ) ); - ret = g->inventory_item_menu( idx, info_startx, info_width, + ret = g->inventory_item_menu( loc, info_startx, info_width, src == advanced_inventory::side::left ? game::LEFT_OF_INFO : game::RIGHT_OF_INFO ); if( !g->u.has_activity( activity_id( "ACT_ADV_INVENTORY" ) ) ) { exit = true; diff --git a/src/advanced_inv_area.cpp b/src/advanced_inv_area.cpp index 73349dac5cf38..2890677790bef 100644 --- a/src/advanced_inv_area.cpp +++ b/src/advanced_inv_area.cpp @@ -454,3 +454,10 @@ advanced_inv_area::itemstack advanced_inv_area::i_stacked( T items ) } return stacks; } + +// instantiate the template +template +advanced_inv_area::itemstack advanced_inv_area::i_stacked( vehicle_stack items ); + +template +advanced_inv_area::itemstack advanced_inv_area::i_stacked( map_stack items ); diff --git a/src/advanced_inv_pane.cpp b/src/advanced_inv_pane.cpp index ad0fe4b50fa73..9b8e2161d28c6 100644 --- a/src/advanced_inv_pane.cpp +++ b/src/advanced_inv_pane.cpp @@ -1,3 +1,4 @@ +#include "advanced_inv_area.h" #include "auto_pickup.h" #include "avatar.h" #include "cata_utility.h" diff --git a/src/avatar.cpp b/src/avatar.cpp index 52e4191142c33..8079cf678c855 100644 --- a/src/avatar.cpp +++ b/src/avatar.cpp @@ -1164,7 +1164,7 @@ void avatar::reset_stats() } // Radiation - set_fake_effect_dur( effect_irradiated, 1_turns * radiation ); + set_fake_effect_dur( effect_irradiated, 1_turns * get_rad() ); // Morale const int morale = get_morale_level(); set_fake_effect_dur( effect_happy, 1_turns * morale ); diff --git a/src/bionics.cpp b/src/bionics.cpp index 2e517fa8b8b67..b6b4ee5909a94 100644 --- a/src/bionics.cpp +++ b/src/bionics.cpp @@ -464,7 +464,7 @@ bool player::activate_bionic( int b, bool eff_only ) std::vector good; std::vector bad; - if( radiation > 0 ) { + if( get_rad() > 0 ) { bad.push_back( _( "Irradiated" ) ); } @@ -537,12 +537,12 @@ bool player::activate_bionic( int b, bool eff_only ) mod_power_level( bionics[bionic_id( "bio_lighter" )].power_activate ); } } else if( bio.id == "bio_geiger" ) { - add_msg_if_player( m_info, _( "Your radiation level: %d" ), radiation ); + add_msg_if_player( m_info, _( "Your radiation level: %d" ), get_rad() ); } else if( bio.id == "bio_radscrubber" ) { - if( radiation > 4 ) { - radiation -= 5; + if( get_rad() > 4 ) { + mod_rad( -5 ); } else { - radiation = 0; + set_rad( 0 ); } } else if( bio.id == "bio_adrenaline" ) { if( has_effect( effect_adrenaline ) ) { diff --git a/src/character.cpp b/src/character.cpp index 1858a1f3c37b5..2fefebdea9db5 100644 --- a/src/character.cpp +++ b/src/character.cpp @@ -238,7 +238,7 @@ Character::Character() : thirst = 0; fatigue = 0; sleep_deprivation = 0; - radiation = 0; + set_rad( 0 ); tank_plut = 0; reactor_plut = 0; slow_rad = 0; @@ -3367,7 +3367,10 @@ std::pair Character::get_fatigue_description() const void Character::mod_thirst( int nthirst ) { - set_thirst( thirst + nthirst ); + if( has_trait_flag( "NO_THIRST" ) ) { + return; + } + set_thirst( std::max( -100, thirst + nthirst ) ); } void Character::set_thirst( int nthirst ) @@ -5297,6 +5300,24 @@ void Character::mod_stim( int mod ) stim += mod; } +int Character::get_rad() const +{ + return radiation; +} + +void Character::set_rad( int new_rad ) +{ + radiation = new_rad; +} + +void Character::mod_rad( int mod ) +{ + if( has_trait_flag( "NO_RADIATION" ) ) { + return; + } + set_rad( std::max( 0, get_rad() + mod ) ); +} + int Character::get_stamina() const { return stamina; diff --git a/src/character.h b/src/character.h index a368826da7281..362b39a4aa989 100644 --- a/src/character.h +++ b/src/character.h @@ -1267,7 +1267,6 @@ class Character : public Creature, public visitable std::list consumption_history; int oxygen; - int radiation; int tank_plut; int reactor_plut; int slow_rad; @@ -1375,6 +1374,10 @@ class Character : public Creature, public visitable void set_stim( int new_stim ); void mod_stim( int mod ); + int get_rad() const; + void set_rad( int new_rad ); + void mod_rad( int mod ); + int get_stamina() const; int get_stamina_max() const; void set_stamina( int new_stamina ); @@ -1701,6 +1704,8 @@ class Character : public Creature, public visitable int stim; int pkill; + int radiation; + scenttype_id type_of_scent; struct weighted_int_list melee_miss_reasons; diff --git a/src/computer.cpp b/src/computer.cpp index cf3828e432cd7..86feb60d722ab 100644 --- a/src/computer.cpp +++ b/src/computer.cpp @@ -1126,7 +1126,7 @@ void computer::activate_function( computer_action action ) print_newline(); } print_error( _( "GEIGER COUNTER @ CONSOLE:… %s mSv/h." ), g->m.get_radiation( g->u.pos() ) ); - print_error( _( "PERSONAL DOSIMETRY:… %s mSv." ), g->u.radiation ); + print_error( _( "PERSONAL DOSIMETRY:… %s mSv." ), g->u.get_rad() ); print_newline(); query_any( _( "Press any key…" ) ); break; diff --git a/src/crafting.cpp b/src/crafting.cpp index cea5d6c85cd02..65e81f1b2aff0 100644 --- a/src/crafting.cpp +++ b/src/crafting.cpp @@ -29,6 +29,7 @@ #include "map.h" #include "map_iterator.h" #include "messages.h" +#include "mutation.h" #include "npc.h" #include "options.h" #include "output.h" @@ -73,8 +74,6 @@ static const efftype_id effect_contacts( "contacts" ); void drop_or_handle( const item &newit, player &p ); static const trait_id trait_DEBUG_HS( "DEBUG_HS" ); -static const trait_id trait_PAWS_LARGE( "PAWS_LARGE" ); -static const trait_id trait_PAWS( "PAWS" ); static const trait_id trait_BURROW( "BURROW" ); static bool crafting_allowed( const player &p, const recipe &rec ) @@ -923,17 +922,12 @@ double player::crafting_success_roll( const recipe &making ) const // It's tough to craft with paws. Fortunately it's just a matter of grip and fine-motor, // not inability to see what you're doing - if( has_trait( trait_PAWS ) || has_trait( trait_PAWS_LARGE ) ) { - int paws_rank_penalty = 0; - if( has_trait( trait_PAWS_LARGE ) ) { - paws_rank_penalty += 1; - } - if( making.skill_used == skill_id( "electronics" ) - || making.skill_used == skill_id( "tailor" ) - || making.skill_used == skill_id( "mechanics" ) ) { - paws_rank_penalty += 1; + for( const std::pair< trait_id, trait_data > &mut : my_mutations ) { + for( const std::pair &skib : mut.first->craft_skill_bonus ) { + if( making.skill_used == skib.first ) { + skill_dice += skib.second; + } } - skill_dice -= paws_rank_penalty * 4; } // Sides on dice is 16 plus your current intelligence diff --git a/src/debug_menu.cpp b/src/debug_menu.cpp index a5442c61ed99e..e61b1222e809f 100644 --- a/src/debug_menu.cpp +++ b/src/debug_menu.cpp @@ -733,7 +733,7 @@ void character_edit_menu() uilist smenu; smenu.addentry( 0, true, 'h', "%s: %d", _( "Health" ), p.get_healthy() ); smenu.addentry( 1, true, 'm', "%s: %d", _( "Health modifier" ), p.get_healthy_mod() ); - smenu.addentry( 2, true, 'r', "%s: %d", _( "Radiation" ), p.radiation ); + smenu.addentry( 2, true, 'r', "%s: %d", _( "Radiation" ), p.get_rad() ); smenu.query(); int value; switch( smenu.ret ) { @@ -748,8 +748,8 @@ void character_edit_menu() } break; case 2: - if( query_int( value, _( "Set the value to? Currently: %d" ), p.radiation ) ) { - p.radiation = value; + if( query_int( value, _( "Set the value to? Currently: %d" ), p.get_rad() ) ) { + p.set_rad( value ); } break; default: diff --git a/src/game.cpp b/src/game.cpp index 4a9b0e624c1cc..a3e546ebfc4e6 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -1956,18 +1956,17 @@ void game::handle_key_blocking_activity() /* item submenu for 'i' and '/' * It use draw_item_info to draw item info and action menu * -* @param pos position of item in inventory +* @param locThisItem the item * @param iStartX Left coordinate of the item info window * @param iWidth width of the item info window (height = height of terminal) * @return getch */ -int game::inventory_item_menu( int pos, int iStartX, int iWidth, +int game::inventory_item_menu( item_location locThisItem, int iStartX, int iWidth, const inventory_item_menu_positon position ) { int cMenu = static_cast( '+' ); - item &oThisItem = u.i_at( pos ); - item_location locThisItem( u, &oThisItem ); + item &oThisItem = *locThisItem; if( u.has_item( oThisItem ) ) { #if defined(__ANDROID__) if( get_option( "ANDROID_INVENTORY_AUTOADD" ) ) { @@ -8949,16 +8948,28 @@ bool game::walk_move( const tripoint &dest_loc ) u.set_underwater( false ); if( !shifting_furniture && !pushing && is_dangerous_tile( dest_loc ) ) { - if( !u.movement_mode_is( CMM_RUN ) ) { - std::vector harmful_stuff = get_dangerous_tile( dest_loc ); + std::vector harmful_stuff = get_dangerous_tile( dest_loc ); + if( get_option( "DANGEROUS_TERRAIN_WARNING_PROMPT" ) == "ALWAYS" && + !prompt_dangerous_tile( dest_loc ) ) { + return true; + } else if( get_option( "DANGEROUS_TERRAIN_WARNING_PROMPT" ) == "RUNNING" && + ( !u.movement_mode_is( CMM_RUN ) || !prompt_dangerous_tile( dest_loc ) ) ) { + add_msg( m_warning, + _( "Stepping into that %1$s looks risky. Run into it if you wish to enter anyway." ), + enumerate_as_string( harmful_stuff ) ); + return true; + } else if( get_option( "DANGEROUS_TERRAIN_WARNING_PROMPT" ) == "CROUCHING" && + ( !u.movement_mode_is( CMM_CROUCH ) || !prompt_dangerous_tile( dest_loc ) ) ) { + add_msg( m_warning, + _( "Stepping into that %1$s looks risky. Crouch and move into it if you wish to enter anyway." ), + enumerate_as_string( harmful_stuff ) ); + return true; + } else if( get_option( "DANGEROUS_TERRAIN_WARNING_PROMPT" ) == "NEVER" && + !u.movement_mode_is( CMM_RUN ) ) { add_msg( m_warning, _( "Stepping into that %1$s looks risky. Run into it if you wish to enter anyway." ), enumerate_as_string( harmful_stuff ) ); return true; - } else if( !get_option( "DANGEROUS_RUNNING" ) ) { - if( !prompt_dangerous_tile( dest_loc ) ) { - return true; - } } } // Used to decide whether to print a 'moving is slow message @@ -11345,8 +11356,8 @@ void game::process_artifact( item &it, player &p ) break; case AEP_PBLUE: - if( p.radiation > 0 ) { - p.radiation--; + if( p.get_rad() > 0 ) { + p.mod_rad( -1 ); } break; @@ -11487,7 +11498,7 @@ bool check_art_charge_req( item &it ) reqsmet = p.has_effect( effect_sleep ); break; case( ACR_RAD ): - reqsmet = ( ( g->m.get_radiation( p.pos() ) > 0 ) || ( p.radiation > 0 ) ); + reqsmet = ( ( g->m.get_radiation( p.pos() ) > 0 ) || ( p.get_rad() > 0 ) ); break; case( ACR_WET ): reqsmet = std::any_of( p.body_wetness.begin(), p.body_wetness.end(), diff --git a/src/game.h b/src/game.h index bd898594a779c..df64522ef294f 100644 --- a/src/game.h +++ b/src/game.h @@ -568,7 +568,7 @@ class game RIGHT_OF_INFO, LEFT_TERMINAL_EDGE, }; - int inventory_item_menu( int pos, int startx = 0, int width = 50, + int inventory_item_menu( item_location locThisItem, int startx = 0, int width = 50, inventory_item_menu_positon position = RIGHT_OF_INFO ); /** Custom-filtered menu for inventory and nearby items and those that within specified radius */ diff --git a/src/game_inventory.cpp b/src/game_inventory.cpp index dd49c8693cef8..c1f2b746152e4 100644 --- a/src/game_inventory.cpp +++ b/src/game_inventory.cpp @@ -201,7 +201,7 @@ void game_menus::inv::common( avatar &you ) } g->refresh_all(); - res = g->inventory_item_menu( you.get_item_position( location.get_item() ) ); + res = g->inventory_item_menu( location ); g->refresh_all(); } while( loop_options.count( res ) != 0 ); diff --git a/src/item.cpp b/src/item.cpp index 7c41ae4cbda6a..8a3e7a54bfd95 100644 --- a/src/item.cpp +++ b/src/item.cpp @@ -4037,7 +4037,7 @@ std::string item::display_name( unsigned int quantity ) const if( is_money() ) { amt = string_format( " $%.2f", amount / 100.0 ); } else { - if( ammotext != "" ) { + if( !ammotext.empty() ) { ammotext = " " + ammotext; } @@ -4047,7 +4047,7 @@ std::string item::display_name( unsigned int quantity ) const amt = string_format( " (%i%s)", amount, ammotext ); } } - } else if( ammotext != "" ) { + } else if( !ammotext.empty() ) { amt = " (" + ammotext + ")"; } diff --git a/src/iuse.cpp b/src/iuse.cpp index 24b8c4c5f7a70..aeb1593c3b92f 100644 --- a/src/iuse.cpp +++ b/src/iuse.cpp @@ -1252,7 +1252,7 @@ static void marloss_common( player &p, item &it, const trait_id ¤t_color ) iuse dummy; dummy.purifier( &p, &it, false, p.pos() ); if( effect == 6 ) { - p.radiation = 0; + p.set_rad( 0 ); } } else if( effect == 7 ) { @@ -1397,7 +1397,7 @@ int iuse::mycus( player *p, item *it, bool t, const tripoint &pos ) p->add_msg_if_player( m_good, _( "You feel better all over." ) ); p->mod_painkiller( 30 ); this->purifier( p, it, t, pos ); // Clear out some of that goo you may have floating around - p->radiation = 0; + p->set_rad( 0 ); p->healall( 4 ); // Can't make you a whole new person, but not for lack of trying p->add_msg_if_player( m_good, _( "As it settles in, you feel ecstasy radiating through every part of your body…" ) ); @@ -3427,14 +3427,14 @@ int iuse::geiger( player *p, item *it, bool t, const tripoint &pos ) } const tripoint &pnt = *pnt_; if( pnt == g->u.pos() ) { - p->add_msg_if_player( m_info, _( "Your radiation level: %d mSv (%d mSv from items)" ), p->radiation, + p->add_msg_if_player( m_info, _( "Your radiation level: %d mSv (%d mSv from items)" ), p->get_rad(), p->leak_level( "RADIOACTIVE" ) ); break; } if( npc *const person_ = g->critter_at( pnt ) ) { npc &person = *person_; p->add_msg_if_player( m_info, _( "%s's radiation level: %d mSv (%d mSv from items)" ), - person.name, person.radiation, + person.name, person.get_rad(), person.leak_level( "RADIOACTIVE" ) ); } break; @@ -5819,12 +5819,12 @@ int iuse::radglove( player *p, item *it, bool, const tripoint & ) return 0; } else { p->add_msg_if_player( _( "You activate your radiation biomonitor." ) ); - if( p->radiation >= 1 ) { + if( p->get_rad() >= 1 ) { p->add_msg_if_player( m_warning, _( "You are currently irradiated." ) ); p->add_msg_player_or_say( m_info, _( "Your radiation level: %d mSv." ), _( "It says here that my radiation level is %d mSv." ), - p->radiation ); + p->get_rad() ); } else { p->add_msg_player_or_say( m_info, _( "You are not currently irradiated." ), @@ -6290,7 +6290,9 @@ static bool einkpc_download_memory_card( player &p, item &eink, item &mc ) for( const auto &e : recipe_dict ) { const auto &r = e.second; - + if( r.never_learn ) { + continue; + } if( science ) { if( r.difficulty >= 3 && one_in( r.difficulty + 1 ) ) { candidates.push_back( &r ); diff --git a/src/map.cpp b/src/map.cpp index 3ed741cfb49b3..76760fb5b6057 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -7332,44 +7332,29 @@ bool tinymap::inbounds( const tripoint &p ) const // set up a map just long enough scribble on it // this tinymap should never, ever get saved -bool tinymap::fake_load( const furn_id &fur_type, const ter_id &ter_type, const trap_id &trap_type, - int fake_map_z ) +fake_map::fake_map( const furn_id &fur_type, const ter_id &ter_type, const trap_id &trap_type, + const int fake_map_z ) { const tripoint tripoint_below_zero( 0, 0, fake_map_z ); - bool do_terset = true; set_abs_sub( tripoint_below_zero ); for( int gridx = 0; gridx < my_MAPSIZE; gridx++ ) { for( int gridy = 0; gridy < my_MAPSIZE; gridy++ ) { - const tripoint gridp( gridx, gridy, fake_map_z ); - submap *tmpsub = MAPBUFFER.lookup_submap( gridp ); - if( tmpsub == nullptr ) { - generate_uniform( gridp, ter_type ); - do_terset = false; - tmpsub = MAPBUFFER.lookup_submap( gridp ); - if( tmpsub == nullptr ) { - dbg( D_ERROR ) << "failed to generate a fake submap at 0,0,-9 "; - debugmsg( "failed to generate a fake submap at 0,0,-9" ); - return false; - } - } - const size_t gridn = get_nonant( gridp ); + std::unique_ptr sm = std::make_unique(); - setsubmap( gridn, tmpsub ); - } - } + std::uninitialized_fill_n( &sm->ter[0][0], SEEX * SEEY, ter_type ); + std::uninitialized_fill_n( &sm->frn[0][0], SEEX * SEEY, fur_type ); + std::uninitialized_fill_n( &sm->trp[0][0], SEEX * SEEY, trap_type ); + + setsubmap( get_nonant( { gridx, gridy, fake_map_z } ), sm.get() ); - for( const tripoint &pos : points_in_rectangle( tripoint_below_zero, - tripoint( MAPSIZE * SEEX, MAPSIZE * SEEY, fake_map_z ) ) ) { - if( do_terset ) { - ter_set( pos, ter_type ); + temp_submaps_.emplace_back( std::move( sm ) ); } - furn_set( pos, fur_type ); - trap_set( pos, trap_type ); } - return true; } +fake_map::~fake_map() = default; + void map::set_graffiti( const tripoint &p, const std::string &contents ) { if( !inbounds( p ) ) { diff --git a/src/map.h b/src/map.h index 65a89eb8d3c65..ba5ab3e96b3f9 100644 --- a/src/map.h +++ b/src/map.h @@ -1834,8 +1834,15 @@ class tinymap : public map public: tinymap( int mapsize = 2, bool zlevels = false ); bool inbounds( const tripoint &p ) const override; - bool fake_load( const furn_id &fur_type, const ter_id &ter_type, const trap_id &trap_type, - int fake_map_z ); }; +class fake_map : public tinymap +{ + private: + std::vector> temp_submaps_; + public: + fake_map( const furn_id &fur_type, const ter_id &ter_type, const trap_id &trap_type, + int fake_map_z ); + ~fake_map(); +}; #endif diff --git a/src/mapgen.cpp b/src/mapgen.cpp index eb641e5de8e18..4eb206c519909 100644 --- a/src/mapgen.cpp +++ b/src/mapgen.cpp @@ -7272,8 +7272,6 @@ std::pair, std::map> get_changed_ids_from_up const std::string &update_mapgen_id ) { const int fake_map_z = -9; - const tripoint tripoint_below_zero( 0, 0, fake_map_z ); - const tripoint tripoint_fake_map_edge( 23, 23, fake_map_z ); std::map terrains; std::map furnitures; @@ -7284,10 +7282,8 @@ std::pair, std::map> get_changed_ids_from_up return std::make_pair( terrains, furnitures ); } - tinymap fake_map; - if( !fake_map.fake_load( f_null, t_dirt, tr_null, fake_map_z ) ) { - return std::make_pair( terrains, furnitures ); - } + ::fake_map fake_map( f_null, t_dirt, tr_null, fake_map_z ); + oter_id any = oter_id( "field" ); // just need a variable here, it doesn't need to be valid const regional_settings dummy_settings; @@ -7296,20 +7292,13 @@ std::pair, std::map> get_changed_ids_from_up any, any, 0, dummy_settings, fake_map, any, 0.0f, calendar::turn, nullptr ); if( update_function->second[0]->update_map( fake_md ) ) { - for( const tripoint &pos : fake_map.points_in_rectangle( tripoint_below_zero, - tripoint_fake_map_edge ) ) { + for( const tripoint &pos : fake_map.points_on_zlevel( fake_map_z ) ) { ter_id ter_at_pos = fake_map.ter( pos ); if( ter_at_pos != t_dirt ) { - if( terrains.find( ter_at_pos ) == terrains.end() ) { - terrains[ter_at_pos] = 0; - } terrains[ter_at_pos] += 1; } if( fake_map.has_furn( pos ) ) { furn_id furn_at_pos = fake_map.furn( pos ); - if( furnitures.find( furn_at_pos ) == furnitures.end() ) { - furnitures[furn_at_pos] = 0; - } furnitures[furn_at_pos] += 1; } } diff --git a/src/mutation.h b/src/mutation.h index 053738d2c38cb..ee12948f04fbb 100644 --- a/src/mutation.h +++ b/src/mutation.h @@ -146,6 +146,9 @@ struct mutation_branch { cata::optional scent_mask; int bleed_resist = 0; + /**Map of crafting skills modifiers, can be negative*/ + std::map craft_skill_bonus; + /**What do you smell like*/ cata::optional scent_typeid; diff --git a/src/mutation_data.cpp b/src/mutation_data.cpp index c7bb5dbd88ab8..f3c9209783917 100644 --- a/src/mutation_data.cpp +++ b/src/mutation_data.cpp @@ -411,6 +411,15 @@ void mutation_branch::load( const JsonObject &jo, const std::string & ) spells_learned.emplace( sp, ja.next_int() ); } + for( JsonArray ja : jo.get_array( "craft_skill_bonus" ) ) { + const skill_id skid( ja.next_string() ); + if( skid.is_valid() ) { + craft_skill_bonus.emplace( skid, ja.next_int() ); + } else { + jo.throw_error( "invalid skill_id" ); + } + } + for( JsonArray ja : jo.get_array( "lumination" ) ) { const body_part bp = get_body_part_token( ja.next_string() ); lumination.emplace( bp, ja.next_float() ); diff --git a/src/npcmove.cpp b/src/npcmove.cpp index b08ee25201ded..80b52f8e5b41f 100644 --- a/src/npcmove.cpp +++ b/src/npcmove.cpp @@ -2178,7 +2178,7 @@ bool npc::can_move_to( const tripoint &p, bool no_bashing ) const { // Allow moving into any bashable spots, but penalize them during pathing // Doors are not passable for hallucinations - return( rl_dist( pos(), p ) <= 1 && + return( rl_dist( pos(), p ) <= 1 && g->m.has_floor( p ) && !g->is_dangerous_tile( p ) && ( g->m.passable( p ) || ( can_open_door( p, !g->m.is_outside( pos() ) ) && !is_hallucination() ) || ( !no_bashing && g->m.bash_rating( smash_ability(), p ) > 0 ) ) ); @@ -4319,13 +4319,13 @@ bool npc::complain() } // Radiation every 10 minutes - if( radiation > 90 ) { + if( get_rad() > 90 ) { activate_bionic_by_id( bio_radscrubber ); std::string speech = _( "I'm suffering from radiation sickness…" ); - if( complain_about( radiation_string, 10_minutes, speech, radiation > 150 ) ) { + if( complain_about( radiation_string, 10_minutes, speech, get_rad() > 150 ) ) { return true; } - } else if( !radiation ) { + } else if( !get_rad() ) { deactivate_bionic_by_id( bio_radscrubber ); } diff --git a/src/options.cpp b/src/options.cpp index a317848681e83..df472bb059c3b 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -1140,9 +1140,11 @@ void options_manager::add_options_general() false ); - add( "DANGEROUS_RUNNING", "general", translate_marker( "Dangerous running" ), - translate_marker( "If true, the player will not be prevented from moving into known hazardous tiles while running." ), - false + add( "DANGEROUS_TERRAIN_WARNING_PROMPT", "general", + translate_marker( "Dangerous terrain warning prompt" ), + translate_marker( "Always: You will be prompted to move onto dangerous tiles. Running: You will only be able to move onto dangerous tiles while running and will be prompted. Crouching: You will only be able to move onto a dangerous tile while crouching and will be prompted. Never: You will not be able to move onto a dangerous tile unless running and will not be warned or prompted." ), + { { "ALWAYS", to_translation( "Always" ) }, { "RUNNING", translate_marker( "Running" ) }, { "CROUCHING", translate_marker( "Crouching" ) }, { "NEVER", translate_marker( "Never" ) } }, + "ALWAYS" ); mOptionsSort["general"]++; @@ -1545,7 +1547,7 @@ void options_manager::add_options_interface() false ); add( "AMMO_IN_NAMES", "interface", translate_marker( "Add ammo to weapon/magazine names" ), - translate_marker( "If true, the default ammo is added to weapon and magazine names. For example \"Mosin-Nagant M44 (4/5)\" becomes \"Mosin-Nagant M44 (4/5 7.62x54mm)\"." ), + translate_marker( "If true, the default ammo is added to weapon and magazine names. For example \"Mosin-Nagant M44 (4/5)\" becomes \"Mosin-Nagant M44 (4/5 7.62x54mm)\"." ), true ); diff --git a/src/pickup.cpp b/src/pickup.cpp index 863209a068d37..288ea626d3f7b 100644 --- a/src/pickup.cpp +++ b/src/pickup.cpp @@ -567,6 +567,15 @@ void Pickup::pick_up( const tripoint &p, int min, from_where get_items_from ) int pickupH = maxitems + pickupBorderRows; int pickupW = 44; + //find max length of item name and resize pickup window width + for( const std::list &cur_list : stacked_here ) { + const item &this_item = *cur_list.front(); + int item_len = utf8_width( remove_color_tags( this_item.display_name() ) ) + 10; + if( item_len > pickupW && item_len < TERMX ) { + pickupW = item_len; + } + } + int itemsW = pickupW; int pickupX = 0; diff --git a/src/player.cpp b/src/player.cpp index 3beb518bf9891..067d76e01bf1e 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -2231,7 +2231,7 @@ void player::update_body( const time_point &from, const time_point &to ) reset_activity_level(); } // Radiation kills health even at low doses - update_health( has_trait( trait_RADIOGENIC ) ? 0 : -radiation ); + update_health( has_trait( trait_RADIOGENIC ) ? 0 : -get_rad() ); get_sick(); } @@ -2274,8 +2274,7 @@ void player::update_stomach( const time_point &from, const time_point &to ) // Digest nutrients in guts, they will be distributed to needs levels food_summary digested_to_body = guts.digest( *this, rates, five_mins, half_hours ); // Water from stomach skips guts and gets absorbed by body - set_thirst( std::max( - -100, get_thirst() - units::to_milliliter( digested_to_guts.water ) / 5 ) ); + mod_thirst( - units::to_milliliter( digested_to_guts.water ) / 5 ); guts.ingest( digested_to_guts ); // Apply nutrients, unless this is an NPC and NO_NPC_FOOD is enabled. if( !is_npc() || !get_option( "NO_NPC_FOOD" ) ) { @@ -2342,7 +2341,7 @@ void player::update_stomach( const time_point &from, const time_point &to ) void player::get_sick() { // NPCs are too dumb to handle infections now - if( is_npc() || has_trait( trait_DISIMMUNE ) ) { + if( is_npc() || has_trait_flag( "NO_DISEASE" ) ) { // In a shocking twist, disease immunity prevents diseases. return; } @@ -2832,8 +2831,8 @@ void player::regen( int rate_multiplier ) } } - if( radiation > 0 ) { - radiation = std::max( 0, radiation - roll_remainder( rate_multiplier / 50.0f ) ); + if( get_rad() > 0 ) { + mod_rad( -roll_remainder( rate_multiplier / 50.0f ) ); } } @@ -2999,10 +2998,10 @@ void player::process_one_effect( effect &it, bool is_new ) if( val != 0 ) { mod = 1; if( is_new || it.activated( calendar::turn, "RAD", val, reduced, mod ) ) { - radiation += bound_mod_to_vals( radiation, val, it.get_max_val( "RAD", reduced ), 0 ); + mod_rad( bound_mod_to_vals( get_rad(), val, it.get_max_val( "RAD", reduced ), 0 ) ); // Radiation can't go negative - if( radiation < 0 ) { - radiation = 0; + if( get_rad() < 0 ) { + set_rad( 0 ); } } } @@ -6436,7 +6435,7 @@ void player::environmental_revert_effect() set_stim( 0 ); set_pain( 0 ); set_painkiller( 0 ); - radiation = 0; + set_rad( 0 ); recalc_sight_limits(); reset_encumbrance(); diff --git a/src/savegame.cpp b/src/savegame.cpp index 1853de65d491f..136722172e72e 100644 --- a/src/savegame.cpp +++ b/src/savegame.cpp @@ -706,7 +706,6 @@ void overmap::convert_terrain( const std::unordered_map & old.compare( 0, 5, "cabin" ) == 0 || old.compare( 0, 5, "pond_" ) == 0 || old.compare( 0, 6, "bandit" ) == 0 || - old.compare( 0, 7, "haz_sar" ) == 0 || // remove after 0.E. old.compare( 0, 7, "shelter" ) == 0 || old.compare( 0, 8, "campsite" ) == 0 || old.compare( 0, 9, "pwr_large" ) == 0 || @@ -786,6 +785,52 @@ void overmap::convert_terrain( const std::unordered_map & } else { debugmsg( "Malformed Megastore" ); } + + } else if( old.compare( 0, 7, "haz_sar" ) == 0 ) { + if( old == "haz_sar_entrance" || old == "haz_sar_entrance_north" ) { + ter_set( pos, oter_id( "haz_sar_1_1_north" ) ); + ter_set( pos + point_west, oter_id( "haz_sar_1_2_north" ) ); + ter_set( pos + point_south, oter_id( "haz_sar_1_3_north" ) ); + ter_set( pos + point_south_west, oter_id( "haz_sar_1_4_north" ) ); + } else if( old == "haz_sar_entrance_south" ) { + ter_set( pos, oter_id( "haz_sar_1_1_south" ) ); + ter_set( pos + point_north, oter_id( "haz_sar_1_2_south" ) ); + ter_set( pos + point_west, oter_id( "haz_sar_1_3_south" ) ); + ter_set( pos + point_north_west, oter_id( "haz_sar_1_4_south" ) ); + } else if( old == "haz_sar_entrance_east" ) { + ter_set( pos, oter_id( "haz_sar_1_1_east" ) ); + ter_set( pos + point_north, oter_id( "haz_sar_1_2_east" ) ); + ter_set( pos + point_west, oter_id( "haz_sar_1_3_east" ) ); + ter_set( pos + point_north_west, oter_id( "haz_sar_1_4_east" ) ); + } else if( old == "haz_sar_entrance_west" ) { + ter_set( pos, oter_id( "haz_sar_1_1_west" ) ); + ter_set( pos + point_south, oter_id( "haz_sar_1_2_west" ) ); + ter_set( pos + point_east, oter_id( "haz_sar_1_3_west" ) ); + ter_set( pos + point_south_east, oter_id( "haz_sar_1_4_west" ) ); + } + + if( old == "haz_sar_entrance_b1" || old == "haz_sar_entrance_b1_north" ) { + ter_set( pos, oter_id( "haz_sar_b_1_north" ) ); + ter_set( pos + point_west, oter_id( "haz_sar_b_2_north" ) ); + ter_set( pos + point_south, oter_id( "haz_sar_b_3_north" ) ); + ter_set( pos + point_south_west, oter_id( "haz_sar_b_4_north" ) ); + } else if( old == "haz_sar_entrance_b1_south" ) { + ter_set( pos, oter_id( "haz_sar_b_1_south" ) ); + ter_set( pos + point_north, oter_id( "haz_sar_b_2_south" ) ); + ter_set( pos + point_west, oter_id( "haz_sar_b_3_south" ) ); + ter_set( pos + point_north_west, oter_id( "haz_sar_b_4_south" ) ); + } else if( old == "haz_sar_entrance_b1_east" ) { + ter_set( pos, oter_id( "haz_sar_b_1_east" ) ); + ter_set( pos + point_north, oter_id( "haz_sar_b_2_east" ) ); + ter_set( pos + point_west, oter_id( "haz_sar_b_3_east" ) ); + ter_set( pos + point_north_west, oter_id( "haz_sar_b_4_east" ) ); + } else if( old == "haz_sar_entrance_b1_west" ) { + ter_set( pos, oter_id( "haz_sar_b_1_west" ) ); + ter_set( pos + point_south, oter_id( "haz_sar_b_2_west" ) ); + ter_set( pos + point_east, oter_id( "haz_sar_b_3_west" ) ); + ter_set( pos + point_south_east, oter_id( "haz_sar_b_4_west" ) ); + } + } else if( old == "house_base_north" ) { ter_set( pos, oter_id( "house_north" ) ); } else if( old == "house_base_south" ) { diff --git a/src/sdltiles.cpp b/src/sdltiles.cpp index bdb00e4d0372b..382e836634376 100644 --- a/src/sdltiles.cpp +++ b/src/sdltiles.cpp @@ -709,8 +709,23 @@ void CachedTTFFont::OutputChar( const std::string &ch, const int x, const int y, bool BitmapFont::isGlyphProvided( const std::string &ch ) const { - uint32_t t = UTF8_getch( ch ); - return t < 256; + const uint32_t t = UTF8_getch( ch ); + switch( t ) { + case LINE_XOXO_UNICODE: + case LINE_OXOX_UNICODE: + case LINE_XXOO_UNICODE: + case LINE_OXXO_UNICODE: + case LINE_OOXX_UNICODE: + case LINE_XOOX_UNICODE: + case LINE_XXXO_UNICODE: + case LINE_XXOX_UNICODE: + case LINE_XOXX_UNICODE: + case LINE_OXXX_UNICODE: + case LINE_XXXX_UNICODE: + return true; + default: + return t < 256; + } } void BitmapFont::OutputChar( const std::string &ch, const int x, const int y, @@ -723,25 +738,64 @@ void BitmapFont::OutputChar( const std::string &ch, const int x, const int y, void BitmapFont::OutputChar( const int t, const int x, const int y, const unsigned char color, const float opacity ) { - if( t > 256 ) { - return; - } - SDL_Rect src; - src.x = ( t % tilewidth ) * fontwidth; - src.y = ( t / tilewidth ) * fontheight; - src.w = fontwidth; - src.h = fontheight; - SDL_Rect rect; - rect.x = x; - rect.y = y; - rect.w = fontwidth; - rect.h = fontheight; - if( opacity != 1.0f ) { - SDL_SetTextureAlphaMod( ascii[color].get(), opacity * 255 ); - } - RenderCopy( renderer, ascii[color], &src, &rect ); - if( opacity != 1.0f ) { - SDL_SetTextureAlphaMod( ascii[color].get(), 255 ); + if( t <= 256 ) { + SDL_Rect src; + src.x = ( t % tilewidth ) * fontwidth; + src.y = ( t / tilewidth ) * fontheight; + src.w = fontwidth; + src.h = fontheight; + SDL_Rect rect; + rect.x = x; + rect.y = y; + rect.w = fontwidth; + rect.h = fontheight; + if( opacity != 1.0f ) { + SDL_SetTextureAlphaMod( ascii[color].get(), opacity * 255 ); + } + RenderCopy( renderer, ascii[color], &src, &rect ); + if( opacity != 1.0f ) { + SDL_SetTextureAlphaMod( ascii[color].get(), 255 ); + } + } else { + unsigned char uc = 0; + switch( t ) { + case LINE_XOXO_UNICODE: + uc = LINE_XOXO_C; + break; + case LINE_OXOX_UNICODE: + uc = LINE_OXOX_C; + break; + case LINE_XXOO_UNICODE: + uc = LINE_XXOO_C; + break; + case LINE_OXXO_UNICODE: + uc = LINE_OXXO_C; + break; + case LINE_OOXX_UNICODE: + uc = LINE_OOXX_C; + break; + case LINE_XOOX_UNICODE: + uc = LINE_XOOX_C; + break; + case LINE_XXXO_UNICODE: + uc = LINE_XXXO_C; + break; + case LINE_XXOX_UNICODE: + uc = LINE_XXOX_C; + break; + case LINE_XOXX_UNICODE: + uc = LINE_XOXX_C; + break; + case LINE_OXXX_UNICODE: + uc = LINE_OXXX_C; + break; + case LINE_XXXX_UNICODE: + uc = LINE_XXXX_C; + break; + default: + return; + } + draw_ascii_lines( uc, x, y, color ); } } diff --git a/src/suffer.cpp b/src/suffer.cpp index 9167088c0442f..cb98005ec8bf4 100644 --- a/src/suffer.cpp +++ b/src/suffer.cpp @@ -1033,45 +1033,45 @@ void Character::suffer_from_radiation() } if( calendar::once_every( 15_minutes ) ) { - if( radiation < 0 ) { - radiation = 0; - } else if( radiation > 2000 ) { - radiation = 2000; + if( get_rad() < 0 ) { + set_rad( 0 ); + } else if( get_rad() > 2000 ) { + set_rad( 2000 ); } - if( get_option( "RAD_MUTATION" ) && rng( 100, 10000 ) < radiation ) { + if( get_option( "RAD_MUTATION" ) && rng( 100, 10000 ) < get_rad() ) { mutate(); - radiation -= 50; - } else if( radiation > 50 && rng( 1, 3000 ) < radiation && ( stomach.contains() > 0_ml || + mod_rad( -50 ); + } else if( get_rad() > 50 && rng( 1, 3000 ) < get_rad() && ( stomach.contains() > 0_ml || radiation_increasing || !in_sleep_state() ) ) { vomit(); - radiation -= 1; + mod_rad( -1 ); } } const bool radiogenic = has_trait( trait_RADIOGENIC ); - if( radiogenic && calendar::once_every( 30_minutes ) && radiation > 0 ) { + if( radiogenic && calendar::once_every( 30_minutes ) && get_rad() > 0 ) { // At 200 irradiation, twice as fast as REGEN - if( x_in_y( radiation, 200 ) ) { + if( x_in_y( get_rad(), 200 ) ) { healall( 1 ); if( rad_mut == 0 ) { // Don't heal radiation if we're generating it naturally // That would counter the main downside of radioactivity - radiation -= 5; + mod_rad( -5 ); } } } - if( !radiogenic && radiation > 0 ) { + if( !radiogenic && get_rad() > 0 ) { // Even if you heal the radiation itself, the damage is done. const int hmod = get_healthy_mod(); - if( hmod > 200 - radiation ) { - set_healthy_mod( std::max( -200, 200 - radiation ) ); + if( hmod > 200 - get_rad() ) { + set_healthy_mod( std::max( -200, 200 - get_rad() ) ); } } - if( radiation > 200 && calendar::once_every( 10_minutes ) && x_in_y( radiation, 1000 ) ) { + if( get_rad() > 200 && calendar::once_every( 10_minutes ) && x_in_y( get_rad(), 1000 ) ) { hurtall( 1, nullptr ); - radiation -= 5; + mod_rad( -5 ); } if( !reactor_plut && !tank_plut && !slow_rad ) { @@ -1146,7 +1146,7 @@ void Character::suffer_from_radiation() tank_plut *= 0.6; } while( slow_rad >= 1000 ) { - radiation += 1; + mod_rad( 1 ); slow_rad -= 1000; } } @@ -1504,7 +1504,7 @@ bool Character::irradiate( float rads, bool bypass ) } int rads_max = roll_remainder( rads ); - radiation += rng( 0, rads_max ); + mod_rad( rng( 0, rads_max ) ); // Apply rads to any radiation badges. for( item *const it : inv_dump() ) { @@ -1578,8 +1578,8 @@ void Character::mend( int rate_multiplier ) healing_factor *= addiction_scaling( 0.25f, 0.75f, addiction_level( ADD_ALCOHOL ) ); } - if( radiation > 0 && !has_trait( trait_RADIOGENIC ) ) { - healing_factor *= clamp( ( 1000.0f - radiation ) / 1000.0f, 0.0f, 1.0f ); + if( get_rad() > 0 && !has_trait( trait_RADIOGENIC ) ) { + healing_factor *= clamp( ( 1000.0f - get_rad() ) / 1000.0f, 0.0f, 1.0f ); } // Bed rest speeds up mending