--- a/data/json/mapgen/bunker_shop.json +++ b/data/json/mapgen/bunker_shop.json @@ -0,0 +1,180 @@ +[ + { + "type": "mapgen", + "method": "json", + "om_terrain": [ "bunker_shop_g" ], + "object": { + "fill_ter": "t_floor", + "rows": [ + "kkkkkkkkkkkkkkkkkkkkkkkk", + "kkkkkkkkkkkkkkkkkkkkkkkk", + "kkkkkkkkkkkkkkkkkkkkkkkk", + "kkaasaaGnnGnnGnnGnnoookk", + "kkaEDDakkkkkkkkkkkkoqokk", + "GnaEDDakkkkzkkkkkkkopokk", + "nkaaCaakkkkkkkkAkkkktnkk", + "nkkktttttttttttttttttnkk", + "GkkktkkkiicjaraaaajktGkk", + "nkkktkkkjkkkwwyakkjktnkk", + "nttttttkjkkkww a krktnkk", + "Gttttttkakk a jktGkk", + "nttttttkaaagaaaaagaagaak", + "nttttttka lj akkkak", + "Gttttttka ljvv gkk sk", + "nttttttbbd i akk ak", + "nttttttbedk iia a sk", + "Gttttttbbdkk a ak", + "nttttttkakkkk iijjak", + "nttttttFjkkkkkk jkkkkk", + "GBBBBBBGiijrcjgjjijkkkkk", + "kttttttFkf kkkkgkkkAkkk", + "kttttttkkj kkkjkkkkkkk", + "kttttttkkjjrrcrjjkkkkkkk" + ], + "terrain": { + "a": "t_wall_wood", + "b": "t_rock", + "c": "t_window_empty", + "d": "t_rock_floor", + "e": "t_rock_floor", + "f": "t_door_b", + "g": "t_door_frame", + "h": "t_door_c", + "i": "t_wall_wood_broken", + "j": "t_wall_wood_chipped", + "k": [ "t_grass", "t_grass", "t_grass", "t_dirt" ], + "m": "t_dirt", + "n": "t_chainfence_h", + "o": "t_concrete_wall", + "p": "t_door_metal_c", + "q": "t_stairs_down", + "r": "t_window_frame", + "s": "t_window_boarded", + "t": "t_dirt", + "l": "t_floor", + "u": "t_floor", + "v": "t_floor", + "w": "t_floor", + "x": "t_wall_wood_chipped", + "y": "t_floor", + "z": "t_tree_plum", + "A": "t_tree_apple", + "B": "t_door_metal_locked", + "C": "t_door_c", + "D": "t_dirtfloor", + "E": "t_dirtfloor", + "F": "t_gates_mech_control", + "G": "t_wall" + }, + "furniture": { + "e": "f_brazier", + "m": "f_rubble", + "l": "f_crate_o", + "u": "f_woodstove", + "v": "f_table", + "w": "f_bed", + "y": "f_dresser", + "E": "f_locker" + }, + "place_loot": [ + { "group": "floor_trash", "chance": 90, "repeat": 5, "x": [ 9, 12 ], "y": [ 13, 19 ] }, + { "group": "floor_trash", "chance": 90, "repeat": 5, "x": [ 13, 17 ], "y": [ 17, 19 ] }, + { "group": "floor_trash", "chance": 90, "repeat": 5, "x": [ 14, 17 ], "y": [ 13, 15 ] }, + { "group": "floor_trash", "chance": 90, "repeat": 5, "x": [ 9, 14 ], "y": [ 9, 11 ] }, + { "group": "floor_trash", "chance": 90, "repeat": 5, "x": [ 19, 21 ], "y": [ 13, 17 ] }, + { "group": "floor_trash", "chance": 90, "repeat": 5, "x": [ 10, 15 ], "y": [ 21, 22 ] }, + { "group": "floor_trash", "chance": 90, "repeat": 3, "x": [ 16, 17 ], "y": [ 9, 11 ] } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": [ "bunker_shop_b" ], + "object": { + "fill_ter": "t_rock", + "rows": [ + " fff ", + " fvffffff ", + " fbbbbbbf ", + " fbffffbf ", + " fffff fbf faf ", + " fftsrf fbf fff ", + " fvbbbf fbf ", + " ffffffdfffdfffff ", + " fnccmfbfjubbxfvf ", + " fllccbbdbbbbbebf ", + " fvccofjfbbbbbfbf ", + " fffffffffgggffbf ", + " fjhhhbfbf ", + " fffffffffbbpbbdbf ", + " fviiiiivfibbbbfff ", + " fffbbbbbbbfibvbwf ", + " fkdbiiiiibdbbbbhf ", + " fffbbbbbbbfiqqbhf ", + " fviiiiivffffdff ", + " ffffffffffnlcmf ", + " fvbbbdclcmf ", + " fftsrfcccvf ", + " ffffffffff ", + " " + ], + "terrain": { + "a": "t_stairs_up", + "b": "t_thconc_floor", + "c": "t_floor", + "d": "t_door_metal_c", + "e": "t_door_metal_locked", + "f": "t_concrete_wall", + "g": "t_reinforced_glass", + "h": "t_thconc_floor", + "i": "t_thconc_floor", + "j": "t_thconc_floor", + "k": "t_plut_generator", + "l": "t_floor", + "m": "t_floor", + "n": "t_floor", + "o": "t_floor", + "p": "t_thconc_floor", + "q": "t_thconc_floor", + "r": "t_thconc_floor", + "s": "t_thconc_floor", + "t": "t_thconc_floor", + "u": "t_thconc_floor", + "v": "t_utility_light", + "w": "t_console_broken", + "x": "t_atm" + }, + "furniture": { + "h": "f_table", + "i": "f_rack", + "j": "f_locker", + "l": "f_bed", + "m": "f_dresser", + "n": "f_table", + "o": "f_sofa", + "p": "f_chair", + "q": "f_sofa", + "r": "f_toilet", + "s": "f_sink", + "t": "f_shower", + "u": "f_crate_o" + }, + "place_loot": [ + { "group": "mil_food_nodrugs", "chance": 90, "repeat": [ 10 ], "x": [ 6, 10 ], "y": [ 18, 18 ] }, + { "group": "ammo_rifle_milspec", "chance": 90, "repeat": [ 10 ], "x": [ 6, 10 ], "y": [ 16, 16 ] }, + { "group": "camping", "chance": 90, "repeat": [ 10 ], "x": [ 6, 10 ], "y": [ 14, 14 ] }, + { "group": "allclothes", "chance": 90, "repeat": [ 4 ], "x": [ 17, 17 ], "y": [ 19, 20 ] }, + { "group": "allclothes", "chance": 90, "repeat": [ 4 ], "x": [ 9, 9 ], "y": [ 8, 8 ] }, + { "group": "book_military", "chance": 90, "repeat": [ 1 ], "x": [ 6, 6 ], "y": [ 8, 8 ] }, + { "group": "book_military", "chance": 90, "repeat": [ 1 ], "x": [ 14, 14 ], "y": [ 12, 12 ] }, + { "group": "cleaning_bulk", "chance": 90, "repeat": [ 2 ], "x": [ 11, 11 ], "y": [ 10, 10 ] }, + { "group": "cleaning_bulk", "chance": 90, "repeat": [ 2 ], "x": [ 13, 13 ], "y": [ 12, 12 ] }, + { "group": "guns_milspec", "chance": 90, "repeat": [ 2 ], "x": [ 13, 13 ], "y": [ 14, 15 ] }, + { "group": "mil_food_nodrugs", "chance": 90, "repeat": [ 5 ], "x": [ 13, 13 ], "y": [ 17, 17 ] }, + { "group": "mil_armor", "chance": 90, "repeat": [ 5 ], "x": [ 17, 17 ], "y": [ 15, 17 ] } + ], + "place_npcs": [ { "class": "bunker_merchant", "x": 15, "y": 13 } ] + } + } +] --- a/data/json/npcs/bunker_shop/NC_BUNKER_MERCHANT.json +++ b/data/json/npcs/bunker_shop/NC_BUNKER_MERCHANT.json @@ -0,0 +1,72 @@ +[ + { + "type": "item_group", + "id": "NC_BUNKER_MERCHANT_pants_male", + "items": [ [ "pants_cargo", 60 ], [ "pants", 20 ], [ "shorts_cargo", 20 ] ] + }, + { + "type": "item_group", + "id": "NC_BUNKER_MERCHANT_pants_female", + "items": [ [ "pants_cargo", 60 ], [ "pants", 20 ], [ "shorts_cargo", 20 ] ] + }, + { + "type": "item_group", + "id": "NC_BUNKER_MERCHANT_shoes", + "items": [ [ "boots_combat", 90 ], [ "boots", 10 ] ] + }, + { + "type": "item_group", + "id": "NC_BUNKER_MERCHANT_shirt_male", + "items": [ [ "undershirt", 30 ], [ "sweatshirt", 20 ], [ "under_armor", 20 ], [ "longshirt", 20 ] ] + }, + { + "type": "item_group", + "id": "NC_BUNKER_MERCHANT_shirt_female", + "items": [ [ "undershirt", 30 ], [ "sweatshirt", 20 ], [ "under_armor", 20 ], [ "longshirt", 20 ] ] + }, + { + "type": "item_group", + "id": "NC_BUNKER_MERCHANT_gloves", + "items": [ [ "null", 20 ], [ "gloves_tactical", 60 ], [ "gloves_fingerless", 20 ] ] + }, + { + "type": "item_group", + "id": "NC_BUNKER_MERCHANT_coat", + "items": [ [ "hoodie", 50 ], [ "kevlar", 50 ] ] + }, + { + "type": "item_group", + "id": "NC_BUNKER_MERCHANT_extra", + "items": [ [ "rucksack", 100 ] ] + }, + { + "type": "item_group", + "id": "NC_BUNKER_MERCHANT_hat", + "items": [ [ "hat_ball", 100 ] ] + }, + { + "type": "item_group", + "id": "NC_BUNKER_MERCHANT_eyes", + "items": [ [ "null", 80 ], [ "glasses_bal", 20 ] ] + }, + { + "type": "item_group", + "id": "NC_BUNKER_MERCHANT_masks", + "items": [ [ "scarf", 100 ] ] + }, + { + "type": "item_group", + "id": "NC_BUNKER_MERCHANT_misc", + "items": [ + { "group": "ammo_reloaded", "prob": 100, "count-min": 5, "count-max": 10 }, + { "group": "everyday_gear", "prob": 100, "count-min": 5, "count-max": 25 }, + { "group": "guns_survival", "prob": 100, "count-min": 5, "count-max": 5 }, + { "group": "tools_survival", "prob": 100, "count-min": 5, "count-max": 5 }, + { "group": "supplies_electronics", "prob": 100, "count-min": 5, "count-max": 5 }, + { "group": "clothing_outdoor_torso", "prob": 100, "count-min": 5, "count-max": 5 }, + { "group": "clothing_outdoor_pants", "prob": 100, "count-min": 5, "count-max": 5 }, + { "group": "clothing_outdoor_shoes", "prob": 100, "count-min": 5, "count-max": 5 }, + { "group": "drugs_soldier", "prob": 100, "count-min": 5, "count-max": 5 } + ] + } +] --- a/data/json/npcs/bunker_shop/TALK_BUNKER_MERCHANT.json +++ b/data/json/npcs/bunker_shop/TALK_BUNKER_MERCHANT.json @@ -0,0 +1,46 @@ +[ + { + "type": "talk_topic", + "id": "TALK_BUNKER_MERCHANT", + "dynamic_line": "Heya, scav.", + "responses": [ + { "text": "Did you build this place?", "topic": "TALK_BUNKER_MERCHANT_HERE" }, + { "text": "Who are you?", "topic": "TALK_BUNKER_MERCHANT_WHO" }, + { "text": "Why do you still use cash?", "topic": "TALK_BUNKER_MERCHANT_WHY" }, + { "text": "You're a trader?", "topic": "TALK_BUNKER_MERCHANT_TRADE" }, + { "text": "I need some supplies.", "effect": "start_trade", "topic": "TALK_BUNKER_MERCHANT" }, + { "text": "Need help with anything?", "topic": "TALK_BUNKER_MERCHANT_MISSION" }, + { "text": "Well, bye.", "topic": "TALK_DONE" } + ] + }, + { + "type": "talk_topic", + "id": "TALK_BUNKER_MERCHANT_HERE", + "dynamic_line": "No, no… well, maybe a little. It was just as wrecked down here as it is up top when I found it, wasn't too hard to fix up. You're welcome to stay in the spare room awhile, just don't hog it. You're not the only scav out there.", + "responses": [ { "text": "Interesting…", "topic": "TALK_BUNKER_MERCHANT" } ] + }, + { + "type": "talk_topic", + "id": "TALK_BUNKER_MERCHANT_WHO", + "dynamic_line": "Just a scav who got lucky. Now I'm content to sit around here on my pile of treasure. I'm more than willing to trade if you've got the cash.", + "responses": [ { "text": "I see…", "topic": "TALK_BUNKER_MERCHANT" } ] + }, + { + "type": "talk_topic", + "id": "TALK_BUNKER_MERCHANT_WHY", + "dynamic_line": "Why not? Everyone else does, so I suppose that's all that matters. My ATM over there still works, connected to the bank servers and everything.", + "responses": [ { "text": "Hmm…", "topic": "TALK_BUNKER_MERCHANT" } ] + }, + { + "type": "talk_topic", + "id": "TALK_BUNKER_MERCHANT_TRADE", + "dynamic_line": "I suppose I am. Scavs like you need supplies, right? And I could always use more money.", + "responses": [ { "text": "Alright…", "topic": "TALK_BUNKER_MERCHANT" } ] + }, + { + "type": "talk_topic", + "id": "TALK_BUNKER_MERCHANT_MISSION", + "dynamic_line": "Not at the moment, check back later perhaps.", + "responses": [ { "text": "Sure…", "topic": "TALK_BUNKER_MERCHANT" } ] + } +] --- a/data/json/npcs/bunker_shop/classes.json +++ b/data/json/npcs/bunker_shop/classes.json @@ -0,0 +1,21 @@ +[ + { + "type": "npc_class", + "id": "NC_BUNKER_MERCHANT", + "name": "Merchant", + "common": false, + "job_description": "", + "bonus_str": { "rng": [ -1, 2 ] }, + "bonus_dex": { "rng": [ -1, 1 ] }, + "bonus_int": { "rng": [ -1, 4 ] }, + "bonus_per": { "rng": [ -1, 2 ] }, + "skills": [ + { "skill": "ALL", "level": { "mul": [ { "one_in": 3 }, { "sum": [ { "dice": [ 2, 2 ] }, { "constant": 0 } ] } ] } }, + { "skill": "gun", "bonus": { "rng": [ 1, 5 ] } }, + { "skill": "rifle", "bonus": { "rng": [ 1, 5 ] } }, + { "skill": "pistol", "bonus": { "rng": [ 1, 4 ] } }, + { "skill": "smg", "bonus": { "rng": [ 1, 3 ] } }, + { "skill": "speech", "bonus": { "rng": [ 1, 6 ] } } + ] + } +] --- a/data/json/npcs/bunker_shop/npc.json +++ b/data/json/npcs/bunker_shop/npc.json @@ -0,0 +1,12 @@ +[ + { + "type": "npc", + "id": "bunker_merchant", + "name_suffix": "Merchant", + "class": "NC_BUNKER_MERCHANT", + "attitude": 0, + "mission": 3, + "chat": "TALK_BUNKER_MERCHANT", + "faction": "no_faction" + } +] --- a/data/json/overmap/overmap_special/specials.json +++ b/data/json/overmap/overmap_special/specials.json @@ -7151,5 +7151,19 @@ "city_sizes": [ 4, -1 ], "occurrences": [ 0, 2 ], "flags": [ "CLASSIC", "WILDERNESS", "ELECTRIC_GRID" ] + }, + { + "type": "overmap_special", + "id": "bunker shop", + "overmaps": [ + { "point": [ 0, 0, 0 ], "overmap": "bunker_shop_g_south" }, + { "point": [ 0, 0, -1 ], "overmap": "bunker_shop_b_south" } + ], + "connections": [ { "point": [ 0, -1, 0 ], "existing": true, "connection": "local_road", "from": [ 0, 0, 0 ] } ], + "locations": [ "wilderness" ], + "city_distance": [ 10, -1 ], + "city_sizes": [ 1, 12 ], + "occurrences": [ 5, 100 ], + "flags": [ "CLASSIC", "UNIQUE", "WILDERNESS", "ELECTRIC_GRID" ] } ] --- a/data/json/overmap/overmap_terrain/overmap_terrain_residential.json +++ b/data/json/overmap/overmap_terrain/overmap_terrain_residential.json @@ -491,5 +491,25 @@ "name": "derelict property", "sym": "X", "color": "i_brown" + }, + { + "type": "overmap_terrain", + "id": "bunker_shop_g", + "name": "derelict property", + "sym": "X", + "color": "i_brown", + "see_cost": 5, + "extras": "build", + "mondensity": 2 + }, + { + "type": "overmap_terrain", + "id": "bunker_shop_b", + "name": "scavenger bunker", + "sym": "B", + "color": "light_green", + "see_cost": 5, + "extras": "build", + "mondensity": 2 } ]