diff --git a/data/json/itemgroups/Locations_MapExtras/locations.json b/data/json/itemgroups/Locations_MapExtras/locations.json index dac084b9aa2e..6512f17e7d06 100644 --- a/data/json/itemgroups/Locations_MapExtras/locations.json +++ b/data/json/itemgroups/Locations_MapExtras/locations.json @@ -1052,7 +1052,9 @@ [ "shot_paper_bird", 15 ], [ "shot_paper_slug", 10 ], [ "36navy", 50 ], - [ "44army", 50 ] + [ "44army", 50 ], + [ "cannonball_explosive", 5 ], + [ "cannonball_4lb", 20 ] ] }, { @@ -2483,5 +2485,112 @@ [ "coal_lump", 5 ], [ "material_limestone", 5 ] ] + }, + { + "id": "fort_giftshop", + "type": "item_group", + "subtype": "distribution", + "entries": [ + { "item": "tshirt", "prob": 40 }, + { "item": "ceramic_mug", "prob": 10 }, + { "item": "teapot", "prob": 14 }, + { "group": "tinware", "prob": 10 }, + { "item": "tricorne", "prob": 25 }, + { "item": "survnote", "prob": 1 } + ] + }, + { + "id": "fort_giftshop_rare", + "type": "item_group", + "subtype": "distribution", + "entries": [ + { "item": "pocketwatch", "prob": 20 }, + { "group": "jewelry_accessories", "prob": 30 }, + { "item": "cavalry_sabre_fake", "container-item": "scabbard", "prob": 20 }, + { "item": "knife_hunting", "container-item": "sheath", "prob": 5 }, + { "item": "flintlock_pouch", "prob": 20 }, + { "item": "bandolier_pistol", "prob": 3 }, + { "item": "spiral_stone", "prob": 2 } + ] + }, + { + "id": "fort_display_case", + "type": "item_group", + "subtype": "distribution", + "//": "Firearms are weighted 50% Civil War items, 30% Revolutionary War items, and 20% post-Civil War items.", + "entries": [ + { "item": "tricorne", "prob": 10 }, + { "item": "knee_high_boots", "prob": 3 }, + { "item": "breeches", "prob": 2 }, + { "item": "waistcoat", "prob": 3 }, + { "item": "peacoat", "prob": 2 }, + { "item": "greatcoat", "prob": 3 }, + { "item": "hat_fur", "prob": 2 }, + { "item": "cavalry_sabre", "prob": 10 }, + { "item": "hatchet", "prob": 5 }, + { "item": "cannonball_explosive", "prob": 10 }, + { "item": "shotgun_paper", "prob": 10 }, + { "item": "lemat_revolver", "prob": 5 }, + { "item": "colt_army", "prob": 5 }, + { "item": "colt_navy", "prob": 5 }, + { "item": "longrifle_flintlock", "prob": 7 }, + { "item": "rifle_flintlock", "prob": 3 }, + { "item": "carbine_flintlock", "prob": 2 }, + { "item": "pistol_flintlock", "prob": 3 }, + { "item": "sharps", "prob": 8 }, + { "item": "colt_saa", "prob": 2 } + ] + }, + { + "id": "fort_historic_wardrobe", + "type": "item_group", + "subtype": "collection", + "entries": [ + { + "distribution": [ + { "item": "knee_high_boots", "prob": 80, "damage": [ 1, 4 ] }, + { "item": "boots_fur", "prob": 20, "damage": [ 1, 4 ] } + ], + "prob": 20 + }, + { + "distribution": [ { "item": "breeches", "prob": 80, "damage": [ 1, 4 ] }, { "item": "pants_fur", "prob": 20, "damage": [ 1, 4 ] } ], + "prob": 50 + }, + { "item": "waistcoat", "prob": 30, "damage": [ 1, 4 ] }, + { + "distribution": [ { "item": "peacoat", "prob": 80, "damage": [ 1, 4 ] }, { "item": "greatcoat", "prob": 20, "damage": [ 1, 4 ] } ], + "prob": 50 + }, + { "item": "leather_belt", "prob": 10, "damage": [ 1, 4 ] }, + { "item": "knit_scarf", "prob": 10, "damage": [ 1, 4 ] }, + { + "distribution": [ { "item": "tricorne", "prob": 80, "damage": [ 1, 4 ] }, { "item": "hat_fur", "prob": 20, "damage": [ 1, 4 ] } ], + "prob": 30 + }, + { "item": "gloves_leather", "prob": 10, "damage": [ 1, 4 ] }, + { + "distribution": [ + { "item": "stockings", "prob": 50, "damage": [ 1, 4 ] }, + { "item": "stockings_wool", "prob": 50, "damage": [ 1, 4 ] } + ], + "prob": 30 + } + ] + }, + { + "id": "fort_crate", + "type": "item_group", + "subtype": "collection", + "entries": [ { "item": "cannonball_4lb", "prob": 100, "count": [ 1, 10 ] }, { "item": "rag", "prob": 50, "count": [ 1, 25 ] } ] + }, + { + "id": "fort_powderbarrel", + "type": "item_group", + "subtype": "collection", + "entries": [ + { "item": "chem_black_powder", "charges": [ 100, 2500 ], "container-item": "wooden_barrel_small" }, + { "item": "chem_black_powder", "charges": [ 100, 2500 ], "container-item": "wooden_barrel_small", "prob": 50 } + ] } ] diff --git a/data/json/items/ammo/cannon.json b/data/json/items/ammo/cannon.json new file mode 100644 index 000000000000..24371268d51d --- /dev/null +++ b/data/json/items/ammo/cannon.json @@ -0,0 +1,45 @@ +[ + { + "id": "cannon_explosive_shell", + "copy-from": "cannon_round_ball", + "type": "AMMO", + "name": { "str": "explosive cannon shell" }, + "description": "A bundle of wadding, black gunpowder, and a tightly-packed explosive shell with a percussion fuse. A Civil War era \"common shell\" for cannons of 3-inch bore, whatever it hits probably won't live to regret it.", + "//": "Exact weight of component items.", + "weight": "5051 g", + "volume": "1 L", + "price": "200 USD", + "price_postapoc": "20 USD", + "looks_like": "cannon_round_ball", + "//2": "Base damage of 544, rounded down to 450 to be close to 25% that of round shot, balanced as FMJ.", + "damage": { "damage_type": "bullet", "amount": 450, "armor_penetration": 215 }, + "dispersion": 500, + "recoil": 52500, + "extend": { "effects": [ "EXPLOSIVE", "FRAG" ] } + }, + { + "id": "cannon_round_ball", + "type": "AMMO", + "name": { "str": "cannon round shot" }, + "description": "A bundle of wadding, black gunpowder, and a 3-inch cast-iron cannonball. An explosive \"common shell\" would be preferable for a Civil War era cannon, but this can still ruin anyone's day.", + "//": "Exact weight of component items.", + "weight": "2576 g", + "volume": "500 ml", + "price": "120 USD", + "price_postapoc": "12 USD", + "material": [ "iron", "powder" ], + "symbol": "=", + "color": "white", + "looks_like": "blun_slug", + "count": 1, + "stack_size": 1, + "ammo_type": "cannon", + "range": 50, + "//2": "Base damage of 352, rounded down to 350, balanced as FMJ.", + "damage": { "damage_type": "bullet", "amount": 350, "armor_penetration": 150 }, + "dispersion": 620, + "recoil": 26250, + "loudness": 900, + "effects": [ "COOKOFF", "MUZZLE_SMOKE", "BLACKPOWDER" ] + } +] diff --git a/data/json/items/ammo_types.json b/data/json/items/ammo_types.json index af6071acc6d9..5f5974124d87 100644 --- a/data/json/items/ammo_types.json +++ b/data/json/items/ammo_types.json @@ -636,6 +636,12 @@ "name": "water", "default": "water" }, + { + "type": "ammunition_type", + "id": "cannon", + "name": "3-inch cannon", + "default": "cannon_explosive_shell" + }, { "id": "acid", "type": "ammunition_type", diff --git a/data/json/items/containers.json b/data/json/items/containers.json index 98b7539baf78..f087c20b5a6f 100644 --- a/data/json/items/containers.json +++ b/data/json/items/containers.json @@ -1172,6 +1172,20 @@ "watertight": true, "qualities": [ [ "CONTAIN", 1 ] ] }, + { + "id": "wooden_barrel_small", + "copy-from": "wooden_barrel", + "type": "CONTAINER", + "name": { "str": "small wooden barrel" }, + "description": "A wooden keg held together by copper bands, with a capacity of 20 liters. Good for storing liquor, or more volatile substances, in a size easily transported by hand.", + "weight": "12 kg", + "volume": "20 L", + "price": "50 USD", + "price_postapoc": "1 USD", + "bashing": 4, + "material": [ "wood", "copper" ], + "contains": "20 L" + }, { "id": "wrapper", "type": "CONTAINER", diff --git a/data/json/items/gun/cannon.json b/data/json/items/gun/cannon.json new file mode 100644 index 000000000000..50011361078c --- /dev/null +++ b/data/json/items/gun/cannon.json @@ -0,0 +1,28 @@ +[ + { + "id": "cannon_3in_ordnance", + "copy-from": "launcher_base", + "weapon_category": [ "1SHOT" ], + "type": "GUN", + "name": { "str": "3-inch ordnance rifle" }, + "description": "A light (by artillery standards) rifled cannon widely used in the American Civil War, noted for its reliability.", + "weight": "371946 g", + "volume": "134 L", + "price": "350 USD", + "price_postapoc": "10 USD", + "to_hit": -4, + "bashing": 50, + "material": [ "iron" ], + "color": "dark_gray", + "looks_like": "mark19", + "ammo": "cannon", + "dispersion": 855, + "durability": 5, + "blackpowder_tolerance": 96, + "loudness": 300, + "clip_size": 1, + "reload": 30000, + "valid_mod_locations": [ ], + "flags": [ "MOUNTED_GUN", "NEVER_JAMS" ] + } +] diff --git a/data/json/items/resources/misc.json b/data/json/items/resources/misc.json index 6911b35e4ad8..03e5a8f6442e 100644 --- a/data/json/items/resources/misc.json +++ b/data/json/items/resources/misc.json @@ -179,5 +179,42 @@ "flags": [ "STAB", "SHEATH_KNIFE" ], "price": 1000, "price_postapoc": 0 + }, + { + "type": "TOOL", + "category": "spare_parts", + "id": "cannonball_explosive", + "name": { "str": "unpacked cannon shell" }, + "description": "A metal case tightly packed with gunpowder and an impact fuse. With some gunpowder, wadding, and a fuse, it could be prepared to load into a cannon.", + "symbol": "o", + "color": "dark_gray", + "looks_like": "cannonball_4lb", + "weight": "4275 g", + "volume": "700 ml", + "material": [ "iron", "powder" ], + "to_hit": -6, + "flags": [ "TRADER_AVOID" ], + "bashing": 18, + "explosion": { + "damage": 50, + "radius": 3, + "fragment": { "impact": { "damage_type": "cut", "amount": 50, "armor_multiplier": 3 }, "range": 5 } + }, + "explode_in_fire": true + }, + { + "type": "GENERIC", + "id": "cannonball_4lb", + "category": "spare_parts", + "symbol": "o", + "color": "dark_gray", + "name": { "str": "cannonball" }, + "description": "A four-pound, cast-iron cannonball. With some gunpowder, wadding, and a fuse, it could be prepared to load into a cannon.", + "material": [ "iron" ], + "weight": "1800 g", + "volume": "200 ml", + "to_hit": -5, + "flags": [ "TRADER_AVOID" ], + "bashing": 15 } ] diff --git a/data/json/mapgen/Bastion_Fort.json b/data/json/mapgen/Bastion_Fort.json new file mode 100644 index 000000000000..a45453e4b15d --- /dev/null +++ b/data/json/mapgen/Bastion_Fort.json @@ -0,0 +1,525 @@ +[ + { + "type": "mapgen", + "method": "json", + "om_terrain": [ "Bastion_Fort_1_NW" ], + "weight": 1000, + "object": { + "rows": [ + " ", + " ###### ", + " ########## ", + " ############## ", + " ############## ", + " ############## ", + " ############## ", + " ######################", + " ######################", + " ######################", + " ######################", + " ########|||||||^^^ ", + " ########|&_-_&|vvv ", + " ########|__-__| ", + " ########|-+-+-| T ", + " ####|s_-_s| ", + " ####|t_-_t| T ", + " ####|-+-+-|< ", + " ####|B____|_ T ", + " ####|B____+_ ", + " ####|B____|_ T ", + " ####|--+--|< ", + " ####|e____| T ", + " ####|e____| " + ], + "palettes": [ "bastion_fort_palette" ], + "items": { "e": { "item": "fort_giftshop_rare", "chance": 50, "repeat": 2 } }, + "place_monster": [ { "group": "GROUP_PARK_SCENIC", "x": [ 18, 23 ], "y": [ 13, 23 ], "repeat": [ 5, 10 ] } ] + } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": [ "Bastion_Fort_1_NE" ], + "weight": 1000, + "object": { + "rows": [ + " ", + " ###### ", + " ########## ", + " ############## ", + " ############## ", + " ############## ", + " ############## ", + "###################### ", + "###################### ", + "###################### ", + "###################### ", + " ^^^|||||||######## ", + " vvv|CCCrr|######## ", + " |CC...|######## ", + " T |C...C|######## ", + " |C...C|#### ", + " T |||X|||#### ", + " |S____|#### ", + " T |D___D|#### ", + " wD___D|#### ", + " T |_____|#### ", + " |_____|#### ", + " T |D___D|#### ", + " |D___D|#### " + ], + "palettes": [ "bastion_fort_palette" ], + "terrain": { "S": "t_floor", "r": "t_rock_floor_no_roof" }, + "signs": { "S": { "signage": "Danger! Do not smoke! Risk of explosion!" } }, + "place_monster": [ { "group": "GROUP_PARK_SCENIC", "x": [ 0, 5 ], "y": [ 13, 23 ], "repeat": [ 5, 10 ] } ] + } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": [ "Bastion_Fort_1_SW" ], + "weight": 1000, + "object": { + "rows": [ + " ####|rrrc_w T ", + " ####|__hc_|4 ", + " ####|S__h_| T ", + " ####||||||| ", + " #### ", + " #### 4 _< ", + " #### |||w|+|||.", + " #### |b_b___b|.", + " #### |b_b___b|.", + " ######## |F______+.", + " ######## |__b_b_b|.", + " ########vvv|< ", + " #...|W____|_ ", + " ....we____+_ ", + " #...|W____|_ ", + " #...|--+--|> ", + " ....|b___b| ", + " #...|b___b| " + ], + "palettes": [ "bastion_fort_palette" ], + "terrain": { " ": "t_open_air", "#": "t_rock_wall_half", "^": "t_sidewalk_ramp_down_high", "v": "t_sidewalk_ramp_down_low" }, + "place_vehicles": [ + { "vehicle": "cannon_3in", "x": 8, "y": 22, "chance": 25, "rotation": 180 }, + { "vehicle": "cannon_3in", "x": 8, "y": 19, "chance": 25, "rotation": 180 }, + { "vehicle": "cannon_3in", "x": 8, "y": 16, "chance": 25, "rotation": 180 }, + { "vehicle": "cannon_3in", "x": 5, "y": 13, "chance": 25, "rotation": 90 }, + { "vehicle": "cannon_3in", "x": 4, "y": 11, "chance": 25, "rotation": 180 }, + { "vehicle": "cannon_3in", "x": 3, "y": 8, "chance": 25, "rotation": 180 }, + { "vehicle": "cannon_3in", "x": 2, "y": 4, "chance": 25, "rotation": 180 }, + { "vehicle": "cannon_3in", "x": 4, "y": 2, "chance": 25, "rotation": 270 }, + { "vehicle": "cannon_3in", "x": 8, "y": 3, "chance": 25, "rotation": 270 }, + { "vehicle": "cannon_3in", "x": 11, "y": 4, "chance": 25, "rotation": 270 }, + { "vehicle": "cannon_3in", "x": 13, "y": 5, "chance": 25 }, + { "vehicle": "cannon_3in", "x": 16, "y": 8, "chance": 25, "rotation": 270 }, + { "vehicle": "cannon_3in", "x": 19, "y": 8, "chance": 25, "rotation": 270 }, + { "vehicle": "cannon_3in", "x": 22, "y": 8, "chance": 25, "rotation": 270 } + ], + "//": "A small chance that some soldiers will have drifted here in desperation, as it's at least somewhat defensible.", + "place_monster": [ { "group": "GROUP_MIL_WEAK", "x": [ 3, 13 ], "y": [ 4, 9 ], "chance": 50, "repeat": 2 } ] + } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": [ "Bastion_Fort_2_NE" ], + "weight": 1000, + "object": { + "rows": [ + " ", + " ##.### ", + " ##.##....# ", + " ###.#........# ", + " #............. ", + " .............# ", + " #...........## ", + "#.##.##.##...........# ", + "...................... ", + ".....................# ", + "....................## ", + " ^^^|||w|||........ ", + " vvv|,,,,,|.......# ", + " |,,,,,|.......# ", + " w,,,,,w...##.## ", + " |,,,,,|...# ", + " |||||||.... ", + " |lll_t|...# ", + " |____n|...# ", + " wh___nw.... ", + " |e___n|...# ", + " |e___c|...# ", + " |h___c|.... ", + " |_____|...# " + ], + "palettes": [ "bastion_fort_palette" ], + "terrain": { + " ": "t_open_air", + ",": "t_open_air_rooved", + "#": "t_rock_wall_half", + "^": "t_sidewalk_ramp_down_high", + "v": "t_sidewalk_ramp_down_low" + }, + "items": { "e": { "item": "office_breakroom", "chance": 50, "repeat": 3 } }, + "place_vehicles": [ + { "vehicle": "cannon_3in", "x": 1, "y": 8, "chance": 25, "rotation": 270 }, + { "vehicle": "cannon_3in", "x": 4, "y": 8, "chance": 25, "rotation": 270 }, + { "vehicle": "cannon_3in", "x": 7, "y": 8, "chance": 25, "rotation": 270 }, + { "vehicle": "cannon_3in", "x": 10, "y": 5, "chance": 25, "rotation": 180 }, + { "vehicle": "cannon_3in", "x": 12, "y": 4, "chance": 25, "rotation": 270 }, + { "vehicle": "cannon_3in", "x": 15, "y": 3, "chance": 25, "rotation": 270 }, + { "vehicle": "cannon_3in", "x": 19, "y": 2, "chance": 25, "rotation": 270 }, + { "vehicle": "cannon_3in", "x": 21, "y": 4, "chance": 25 }, + { "vehicle": "cannon_3in", "x": 20, "y": 8, "chance": 25 }, + { "vehicle": "cannon_3in", "x": 19, "y": 11, "chance": 25 }, + { "vehicle": "cannon_3in", "x": 18, "y": 13, "chance": 25, "rotation": 90 }, + { "vehicle": "cannon_3in", "x": 15, "y": 16, "chance": 25 }, + { "vehicle": "cannon_3in", "x": 15, "y": 19, "chance": 25 }, + { "vehicle": "cannon_3in", "x": 15, "y": 22, "chance": 25 } + ], + "place_monster": [ { "group": "GROUP_MIL_WEAK", "x": [ 10, 20 ], "y": [ 4, 9 ], "chance": 50, "repeat": 2 } ] + } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": [ "Bastion_Fort_2_SW" ], + "weight": 1000, + "object": { + "rows": [ + " #...+_____w ", + " ....|b___b| ", + " #...|b_F_b|4 ", + " #...||||||| ", + " .... ", + " #... 4 _> ", + " #... |||w|+|||w", + " .... |b_b__-bb_", + " #... |b_b__-W__", + " ##.##... |F____+___", + " #....... |_____-W__", + " #.......vvv|>>eW_-bb_", + " ........^^^|||w|+|||+", + " ##....................", + " #.....................", + " ......................", + " #...........##.##.##.#", + " ##...........# ", + " #............. ", + " .............# ", + " #........#.### ", + " #....##.## ", + " ###.## ", + " " + ], + "palettes": [ "bastion_fort_palette" ], + "terrain": { " ": "t_open_air", "#": "t_rock_wall_half", "^": "t_sidewalk_ramp_down_high", "v": "t_sidewalk_ramp_down_low" }, + "place_vehicles": [ + { "vehicle": "cannon_3in", "x": 22, "y": 15, "chance": 25, "rotation": 90 }, + { "vehicle": "cannon_3in", "x": 19, "y": 15, "chance": 25, "rotation": 90 }, + { "vehicle": "cannon_3in", "x": 16, "y": 15, "chance": 25, "rotation": 90 }, + { "vehicle": "cannon_3in", "x": 13, "y": 18, "chance": 25 }, + { "vehicle": "cannon_3in", "x": 11, "y": 19, "chance": 25, "rotation": 90 }, + { "vehicle": "cannon_3in", "x": 8, "y": 20, "chance": 25, "rotation": 90 }, + { "vehicle": "cannon_3in", "x": 4, "y": 21, "chance": 25, "rotation": 90 }, + { "vehicle": "cannon_3in", "x": 2, "y": 19, "chance": 25, "rotation": 180 }, + { "vehicle": "cannon_3in", "x": 3, "y": 15, "chance": 25, "rotation": 180 }, + { "vehicle": "cannon_3in", "x": 4, "y": 12, "chance": 25, "rotation": 180 }, + { "vehicle": "cannon_3in", "x": 5, "y": 10, "chance": 25, "rotation": 270 }, + { "vehicle": "cannon_3in", "x": 8, "y": 7, "chance": 25, "rotation": 180 }, + { "vehicle": "cannon_3in", "x": 8, "y": 4, "chance": 25, "rotation": 180 }, + { "vehicle": "cannon_3in", "x": 8, "y": 1, "chance": 25, "rotation": 180 } + ], + "place_monster": [ { "group": "GROUP_MIL_WEAK", "x": [ 4, 13 ], "y": [ 13, 19 ], "chance": 50, "repeat": 2 } ] + } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": [ "Bastion_Fort_2_SE" ], + "weight": 1000, + "object": { + "rows": [ + " w_____w...# ", + " |____>|.... ", + " 4|__F_>|...# ", + " |||||||...# ", + " .... ", + " >_ 4 ...# ", + "w|||+|w||| ...# ", + "_bb-__b_b| .... ", + "__W-__b_b| ...# ", + "___+____F| ...##.## ", + "__W-_____| .......# ", + "_bb-_We>>|vvv.......# ", + "+|||+|w|||^^^........ ", + "....................## ", + ".....................# ", + "...................... ", + "#.##.##.##...........# ", + " #...........## ", + " .............# ", + " #............. ", + " ###.#........# ", + " ##.##....# ", + " ##.### ", + " " + ], + "palettes": [ "bastion_fort_palette" ], + "terrain": { " ": "t_open_air", "#": "t_rock_wall_half", "^": "t_sidewalk_ramp_down_high", "v": "t_sidewalk_ramp_down_low" }, + "place_vehicles": [ + { "vehicle": "cannon_3in", "x": 15, "y": 1, "chance": 25 }, + { "vehicle": "cannon_3in", "x": 15, "y": 4, "chance": 25 }, + { "vehicle": "cannon_3in", "x": 15, "y": 7, "chance": 25 }, + { "vehicle": "cannon_3in", "x": 18, "y": 10, "chance": 25, "rotation": 270 }, + { "vehicle": "cannon_3in", "x": 19, "y": 12, "chance": 25 }, + { "vehicle": "cannon_3in", "x": 20, "y": 15, "chance": 25 }, + { "vehicle": "cannon_3in", "x": 21, "y": 19, "chance": 25 }, + { "vehicle": "cannon_3in", "x": 19, "y": 21, "chance": 25, "rotation": 90 }, + { "vehicle": "cannon_3in", "x": 15, "y": 20, "chance": 25, "rotation": 90 }, + { "vehicle": "cannon_3in", "x": 12, "y": 19, "chance": 25, "rotation": 90 }, + { "vehicle": "cannon_3in", "x": 10, "y": 18, "chance": 25, "rotation": 180 }, + { "vehicle": "cannon_3in", "x": 7, "y": 15, "chance": 25, "rotation": 90 }, + { "vehicle": "cannon_3in", "x": 4, "y": 15, "chance": 25, "rotation": 90 }, + { "vehicle": "cannon_3in", "x": 1, "y": 15, "chance": 25, "rotation": 90 } + ], + "place_monster": [ { "group": "GROUP_MIL_WEAK", "x": [ 10, 19 ], "y": [ 13, 19 ], "chance": 50, "repeat": 2 } ] + } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": [ "Bastion_Fort_roof_NW" ], + "weight": 1000, + "object": { + "rows": [ + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " _______ ", + " |..~..3 ", + " |.....3 ", + " |.....3 ", + " |.....3 ", + " |.....3 ", + " |.....3, ", + " |.....3, ", + " |.....3, ", + " |.....3, ", + " |.....3, ", + " |.....3 ", + " |.....3 " + ], + "palettes": [ "roof_palette" ], + "terrain": { ".": "t_tile_flat_roof", "~": "t_tile_flat_roof", ",": "t_shingle_flat_roof", "_": "t_brick_wall_halfway" } + } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": [ "Bastion_Fort_roof_NE" ], + "weight": 1000, + "object": { + "rows": [ + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " _______ ", + " |.....3 ", + " |.....3 ", + " |.....3 ", + " |.....3 ", + " |.....3 ", + " |.....3 ", + " |.....3 ", + " |.....3 ", + " |.....3 ", + " |.....3 ", + " |.....3 ", + " |.....3 " + ], + "palettes": [ "roof_palette" ], + "terrain": { ".": "t_tile_flat_roof", "_": "t_brick_wall_halfway" } + } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": [ "Bastion_Fort_roof_SW" ], + "weight": 1000, + "object": { + "rows": [ + " |.....3 ", + " |.....3 ", + " |..~..5 ", + " _______ ", + " ", + " ,, ", + " _522222222", + " _.........", + " _.........", + " _~........", + " _.........", + " _.........", + " _---------", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " + ], + "palettes": [ "roof_palette" ], + "terrain": { ".": "t_tile_flat_roof", "~": "t_tile_flat_roof", ",": "t_shingle_flat_roof", "_": "t_brick_wall_halfway" } + } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": [ "Bastion_Fort_roof_SE" ], + "weight": 1000, + "object": { + "rows": [ + " |.....3 ", + " |.....3 ", + " 5..~..3 ", + " _______ ", + " ", + " ,, ", + "222222225_ ", + "........._ ", + "........._ ", + "........~_ ", + "........._ ", + "........._ ", + "---------_ ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " + ], + "palettes": [ "roof_palette" ], + "terrain": { ".": "t_tile_flat_roof", "~": "t_tile_flat_roof", ",": "t_shingle_flat_roof", "_": "t_brick_wall_halfway" } + } + } +] diff --git a/data/json/mapgen/mansion.json b/data/json/mapgen/mansion.json index 3ffd26c58f18..265f6aeac83c 100644 --- a/data/json/mapgen/mansion.json +++ b/data/json/mapgen/mansion.json @@ -2561,7 +2561,8 @@ "c": { "item": "table_sideboard", "chance": 40 }, "t": { "item": "dining", "chance": 40 } }, - "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.1 } ] + "place_monsters": [ { "monster": "GROUP_MANSION", "x": [ 2, 21 ], "y": [ 2, 21 ], "density": 0.1 } ], + "place_vehicles": [ { "vehicle": "cannon_3in", "x": 18, "y": 3, "chance": 25, "rotation": 270 } ] } }, { diff --git a/data/json/mapgen/museum.json b/data/json/mapgen/museum.json index 7c25f6752211..9d90236dca80 100644 --- a/data/json/mapgen/museum.json +++ b/data/json/mapgen/museum.json @@ -91,7 +91,8 @@ { "item": "museum_melee", "x": [ 4, 7 ], "y": [ 20, 21 ], "chance": 70 }, { "item": "museum_guns", "x": [ 4, 7 ], "y": [ 20, 21 ], "chance": 70 }, { "item": "museum_misc", "x": [ 4, 7 ], "y": [ 20, 21 ], "chance": 80 } - ] + ], + "place_vehicles": [ { "vehicle": "cannon_3in", "x": 11, "y": 7, "chance": 75, "rotation": 180 } ] } }, { diff --git a/data/json/mapgen_palettes/bastion_fort_palette.json b/data/json/mapgen_palettes/bastion_fort_palette.json new file mode 100644 index 000000000000..94e5ca0f2181 --- /dev/null +++ b/data/json/mapgen_palettes/bastion_fort_palette.json @@ -0,0 +1,77 @@ +[ + { + "type": "palette", + "id": "bastion_fort_palette", + "terrain": { + " ": "t_region_groundcover", + "#": "t_rock_wall", + "|": "t_brick_wall", + "-": "t_wall_wood", + "+": "t_door_c", + "_": "t_floor", + ".": "t_rock_floor_no_roof", + ">": "t_wood_stairs_down", + "<": "t_wood_stairs_up", + "^": "t_sidewalk_ramp_up_high", + "&": "t_floor", + "4": "t_gutter_downspout", + "B": "t_floor", + "C": "t_rock_floor_no_roof", + "D": "t_floor", + "F": "t_floor", + "T": "t_region_tree_shade", + "X": "t_door_locked_interior", + "W": "t_floor", + "b": "t_floor", + "c": "t_floor", + "e": "t_floor", + "g": "t_floor", + "h": "t_floor", + "l": "t_floor", + "n": "t_floor", + "t": "t_floor", + "s": "t_floor", + "r": "t_floor", + "v": "t_sidewalk_ramp_up_low", + "w": "t_window_no_curtains" + }, + "furniture": { + "B": "f_bookcase", + "C": "f_crate_c", + "D": "f_displaycase", + "F": "f_fireplace", + "W": "f_wardrobe", + "b": "f_bed", + "c": "f_counter", + "e": "f_table", + "g": "f_counter_gate_c", + "h": "f_chair", + "l": "f_locker", + "n": "f_cupboard", + "t": "f_trashcan", + "s": "f_sink", + "r": "f_rack_wood" + }, + "toilets": { "&": { } }, + "items": { + "B": [ + { "item": "manuals", "chance": 50, "repeat": 2 }, + { "item": "book_mag_interests", "chance": 50, "repeat": 2 }, + { "item": "book_mag_surv", "chance": 50, "repeat": 2 } + ], + "C": { "item": "fort_crate", "chance": 100 }, + "D": { "item": "fort_display_case", "chance": 100 }, + "W": { "item": "fort_historic_wardrobe", "chance": 100 }, + "b": { "item": "bed", "chance": 50 }, + "l": [ + { "item": "bags_unisex", "chance": 50, "repeat": 3 }, + { "item": "hats_unisex", "chance": 50, "repeat": 3 }, + { "item": "clothing_outdoor_torso", "chance": 50, "repeat": 3 }, + { "item": "clothing_outdoor_shoes", "chance": 50, "repeat": 3 } + ], + "n": { "item": "snacks", "chance": 50, "repeat": 5 }, + "r": { "item": "fort_powderbarrel", "chance": 100 }, + "t": { "item": "trash_cart", "chance": 50, "repeat": 5 } + } + } +] diff --git a/data/json/overmap/overmap_special/specials.json b/data/json/overmap/overmap_special/specials.json index 302fb8fa8b35..3d6df7fb5ca5 100644 --- a/data/json/overmap/overmap_special/specials.json +++ b/data/json/overmap/overmap_special/specials.json @@ -7046,6 +7046,29 @@ "occurrences": [ 50, 100 ], "flags": [ "CLASSIC", "UNIQUE", "ELECTRIC_GRID" ] }, + { + "type": "overmap_special", + "id": "Bastion Fort", + "overmaps": [ + { "point": [ 0, 0, 0 ], "overmap": "Bastion_Fort_1_NW_north" }, + { "point": [ 1, 0, 0 ], "overmap": "Bastion_Fort_1_NE_north" }, + { "point": [ 0, 1, 0 ], "overmap": "Bastion_Fort_1_SW_north" }, + { "point": [ 1, 1, 0 ], "overmap": "Bastion_Fort_1_SE_north" }, + { "point": [ 0, 0, 1 ], "overmap": "Bastion_Fort_2_NW_north" }, + { "point": [ 1, 0, 1 ], "overmap": "Bastion_Fort_2_NE_north" }, + { "point": [ 0, 1, 1 ], "overmap": "Bastion_Fort_2_SW_north" }, + { "point": [ 1, 1, 1 ], "overmap": "Bastion_Fort_2_SE_north" }, + { "point": [ 0, 0, 2 ], "overmap": "Bastion_Fort_roof_NW_north" }, + { "point": [ 1, 0, 2 ], "overmap": "Bastion_Fort_roof_NE_north" }, + { "point": [ 0, 1, 2 ], "overmap": "Bastion_Fort_roof_SW_north" }, + { "point": [ 1, 1, 2 ], "overmap": "Bastion_Fort_roof_SE_north" } + ], + "locations": [ "wilderness" ], + "city_distance": [ 10, 100 ], + "city_sizes": [ 0, 12 ], + "occurrences": [ 25, 100 ], + "flags": [ "CLASSIC", "UNIQUE", "ELECTRIC_GRID" ] + }, { "type": "overmap_special", "id": "Industrial_Center", diff --git a/data/json/overmap/overmap_terrain/overmap_terrain.json b/data/json/overmap/overmap_terrain/overmap_terrain.json index 123253f274a9..dc8206b798b3 100644 --- a/data/json/overmap/overmap_terrain/overmap_terrain.json +++ b/data/json/overmap/overmap_terrain/overmap_terrain.json @@ -280,6 +280,28 @@ "//": "RISK_LOW due to risk and safety being based on NPCs perception of what the area may contain", "flags": [ "RISK_LOW", "SOURCE_SAFETY" ] }, + { + "type": "overmap_terrain", + "id": [ + "Bastion_Fort_1_NW", + "Bastion_Fort_1_NE", + "Bastion_Fort_1_SW", + "Bastion_Fort_1_SE", + "Bastion_Fort_2_NW", + "Bastion_Fort_2_NE", + "Bastion_Fort_2_SW", + "Bastion_Fort_2_SE", + "Bastion_Fort_roof_NW", + "Bastion_Fort_roof_NE", + "Bastion_Fort_roof_SW", + "Bastion_Fort_roof_SE" + ], + "name": "bastion fort", + "sym": "+", + "color": "light_gray", + "see_cost": 5, + "flags": [ "SOURCE_SAFETY" ] + }, { "type": "overmap_terrain", "id": "looted_building", diff --git a/data/json/recipes/ammo/components.json b/data/json/recipes/ammo/components.json index 2a0db3a060e3..3a29dfb51561 100644 --- a/data/json/recipes/ammo/components.json +++ b/data/json/recipes/ammo/components.json @@ -249,5 +249,44 @@ "qualities": [ { "id": "SAW_M", "level": 1 } ], "tools": [ [ [ "press", -1 ] ] ], "components": [ [ [ "223_casing", 1 ] ] ] + }, + { + "result": "cannonball_explosive", + "type": "recipe", + "category": "CC_AMMO", + "subcategory": "CSC_AMMO_COMPONENTS", + "skill_used": "fabrication", + "difficulty": 6, + "time": "75 m", + "batch_time_factors": [ 90, 4 ], + "reversible": true, + "book_learn": [ [ "manual_launcher", 6 ], [ "textbook_anarch", 7 ] ], + "using": [ [ "blacksmithing_intermediate", 12 ], [ "steel_tiny", 12 ] ], + "tools": [ [ [ "crucible", -1 ], [ "crucible_clay", -1 ] ] ], + "components": [ + [ [ "volatile_explosive", 75, "LIST" ], [ "stable_explosive", 75, "LIST" ], [ "military_explosive", 75, "LIST" ] ], + [ + [ "impact_fuze", 1 ], + [ "smpistol_primer", 1 ], + [ "lgpistol_primer", 1 ], + [ "smrifle_primer", 1 ], + [ "lgrifle_primer", 1 ], + [ "shotgun_primer", 1 ] + ] + ] + }, + { + "result": "cannonball_4lb", + "type": "recipe", + "category": "CC_AMMO", + "subcategory": "CSC_AMMO_COMPONENTS", + "skill_used": "fabrication", + "difficulty": 3, + "time": "60 m", + "batch_time_factors": [ 90, 4 ], + "reversible": true, + "autolearn": true, + "using": [ [ "forging_standard", 8 ], [ "steel_tiny", 8 ] ], + "tools": [ [ [ "crucible", -1 ], [ "crucible_clay", -1 ] ] ] } ] diff --git a/data/json/recipes/ammo/other.json b/data/json/recipes/ammo/other.json index 86e52b66ae6b..8e0fdde73153 100644 --- a/data/json/recipes/ammo/other.json +++ b/data/json/recipes/ammo/other.json @@ -290,6 +290,39 @@ "qualities": [ { "id": "CUT", "level": 1 } ], "components": [ [ [ "splinter", 1 ] ] ] }, + { + "result": "cannon_explosive_shell", + "type": "recipe", + "category": "CC_AMMO", + "subcategory": "CSC_AMMO_OTHER", + "skill_used": "fabrication", + "difficulty": 3, + "skills_required": [ "gun", 1 ], + "time": "10 m", + "batch_time_factors": [ 60, 5 ], + "autolearn": true, + "charges": 1, + "reversible": true, + "qualities": [ { "id": "CUT", "level": 1 } ], + "//": "Rough lookup indicates 1 pound of powder was normal for the ordinance rifle, rounded down to 450 grams here.", + "components": [ [ [ "cannonball_explosive", 1 ] ], [ [ "rag", 4 ] ], [ [ "chem_black_powder", 225 ] ], [ [ "fuse", 1 ] ] ] + }, + { + "result": "cannon_round_ball", + "type": "recipe", + "category": "CC_AMMO", + "subcategory": "CSC_AMMO_OTHER", + "skill_used": "fabrication", + "difficulty": 3, + "skills_required": [ "gun", 1 ], + "time": "10 m", + "batch_time_factors": [ 60, 5 ], + "autolearn": true, + "charges": 1, + "reversible": true, + "qualities": [ { "id": "CUT", "level": 1 } ], + "components": [ [ [ "cannonball_4lb", 1 ] ], [ [ "rag", 4 ] ], [ [ "chem_black_powder", 225 ] ], [ [ "fuse", 1 ] ] ] + }, { "result": "sling_bullet", "type": "recipe", diff --git a/data/json/recipes/other/containers.json b/data/json/recipes/other/containers.json index 6e88c06a1e7c..1bf3505b832f 100644 --- a/data/json/recipes/other/containers.json +++ b/data/json/recipes/other/containers.json @@ -214,6 +214,19 @@ "qualities": [ { "id": "HAMMER", "level": 2 }, { "id": "SAW_W", "level": 1 } ], "components": [ [ [ "2x4", 30 ] ], [ [ "wire", 6 ] ] ] }, + { + "type": "recipe", + "result": "wooden_barrel_small", + "category": "CC_OTHER", + "subcategory": "CSC_OTHER_CONTAINERS", + "skill_used": "fabrication", + "difficulty": 3, + "time": "12 m", + "autolearn": true, + "tools": [ [ [ "surface_heat", 20, "LIST" ] ] ], + "qualities": [ { "id": "HAMMER", "level": 1 }, { "id": "SAW_W", "level": 1 } ], + "components": [ [ [ "2x4", 6 ] ], [ [ "copper_scrap_equivalent", 2, "LIST" ] ] ] + }, { "type": "recipe", "result": "55gal_drum", diff --git a/data/json/vehicleparts/turret.json b/data/json/vehicleparts/turret.json index 6858900eaf6f..0c1e3b731d40 100644 --- a/data/json/vehicleparts/turret.json +++ b/data/json/vehicleparts/turret.json @@ -422,5 +422,17 @@ "install": { "skills": [ [ "mechanics", 5 ], [ "electronics", 5 ] ] }, "removal": { "skills": [ [ "mechanics", 3 ] ] } } + }, + { + "id": "mounted_3in_ordnance_rifle", + "copy-from": "turret", + "type": "vehicle_part", + "name": { "str": "mounted 3-inch ordnance rifle" }, + "item": "cannon_3in_ordnance", + "color": "dark_gray", + "broken_color": "dark_gray", + "breaks_into": [ { "item": "scrap", "count": 72 }, { "item": "steel_chunk", "count": 30 }, { "item": "steel_lump", "count": 10 } ], + "requirements": { "install": { "skills": [ [ "mechanics", 3 ], [ "launcher", 1 ] ] }, "removal": { "skills": [ [ "mechanics", 2 ] ] } }, + "description": "A light (by artillery standards) rifled cannon widely used in the American Civil War, noted for its reliability." } ] diff --git a/data/json/vehicles/military.json b/data/json/vehicles/military.json index cfcef6cba040..9024689eb9b7 100644 --- a/data/json/vehicles/military.json +++ b/data/json/vehicles/military.json @@ -620,5 +620,21 @@ { "x": 0, "y": 2, "chance": 2, "item_groups": [ "mil_accessories" ] }, { "x": 0, "y": 2, "chance": 2, "item_groups": [ "gunmod_milspec" ] } ] + }, + { + "id": "cannon_3in", + "type": "vehicle", + "name": "cannon", + "blueprint": [ + [ " H" ], + [ "-U" ], + [ " H" ] + ], + "parts": [ + { "x": 0, "y": 0, "parts": [ "frame_cross", "turret_mount", "mounted_3in_ordnance_rifle" ] }, + { "x": 0, "y": -1, "parts": [ "frame_horizontal", "wheel_wood_b" ] }, + { "x": 0, "y": 1, "parts": [ "frame_horizontal", "wheel_wood_b" ] }, + { "x": -1, "y": 0, "parts": [ "frame_wood_handle" ] } + ] } ]