From 553859707409a1e19fecc8d65ab88fcf189d82e7 Mon Sep 17 00:00:00 2001 From: Karol1223 <68503002+Karol1223@users.noreply.github.com> Date: Fri, 21 Jun 2024 12:10:44 +0200 Subject: [PATCH 01/14] the rice !!! --- data/json/items/comestibles/mre.json | 18 +++++++++--------- data/json/items/comestibles/raw_grain.json | 1 + data/json/materials.json | 2 +- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/data/json/items/comestibles/mre.json b/data/json/items/comestibles/mre.json index 2f45f350b5b53..deb4682668e0e 100644 --- a/data/json/items/comestibles/mre.json +++ b/data/json/items/comestibles/mre.json @@ -337,7 +337,7 @@ "type": "COMESTIBLE", "id": "mre_potato", "copy-from": "mre_side", - "name": { "str": "potatoes, Au Gratin" }, + "name": { "str_sp": "potatoes, Au Gratin" }, "description": "Golden-fried potatoes.", "material": [ "veggy" ] }, @@ -345,15 +345,15 @@ "type": "COMESTIBLE", "id": "mre_fried_rice", "copy-from": "mre_side", - "name": { "str_sp": "fried rice(small portion)" }, + "name": { "str": "fried rice (small portion)", "str_pl": "fried rice (small portions)" }, "description": "Fried rice, a simple dish made by stir-frying rice with other ingredients.", - "material": [ "wheat" ] + "material": [ "veggy" ] }, { "type": "COMESTIBLE", "id": "mre_zapplesauce", "copy-from": "mre_side", - "name": { "str": "zapplesauce" }, + "name": { "str_sp": "zapplesauce" }, "description": "Golden, jelly-like food with the flavor of apples.", "material": [ "fruit" ], "fun": 5 @@ -362,7 +362,7 @@ "type": "COMESTIBLE", "id": "mre_blackbeans", "copy-from": "mre_side", - "name": { "str": "black beans in sauce" }, + "name": { "str_sp": "black beans in sauce" }, "description": "A savory and flavorful combination of black beans and sauce.", "material": [ "bean" ], "calories": 130 @@ -388,7 +388,7 @@ { "type": "COMESTIBLE", "id": "mre_carrot_cake", - "name": { "str_sp": "carrot pound cake" }, + "name": { "str": "carrot pound cake" }, "copy-from": "mre_dessert", "description": "Delicious cake with carrots blended seamlessly." }, @@ -396,7 +396,7 @@ "type": "COMESTIBLE", "id": "mre_poppyseed_cake", "copy-from": "mre_carrot_cake", - "name": { "str_sp": "lemon poppy seed pound cake" }, + "name": { "str": "lemon poppy seed pound cake" }, "calories": 290, "description": "Cake filled with the goodness of lemon and poppy seeds." }, @@ -413,7 +413,7 @@ "type": "COMESTIBLE", "id": "mre_chocolate_cake", "copy-from": "mre_dessert", - "name": { "str_sp": "chocolate chip toaster pastry" }, + "name": { "str": "chocolate chip toaster pastry", "str_pl": "chocolate chip toaster pastries" }, "calories": 210, "description": "Pastry with chocolate chips." }, @@ -421,7 +421,7 @@ "type": "COMESTIBLE", "id": "mre_strawberry_cake", "copy-from": "mre_dessert", - "name": { "str_sp": "strawberry toaster pastry" }, + "name": { "str": "strawberry toaster pastry", "str_pl": "strawberry toaster pastries" }, "calories": 210, "description": "Strawberry-flavor pastry." } diff --git a/data/json/items/comestibles/raw_grain.json b/data/json/items/comestibles/raw_grain.json index 94ef0a785aa11..7374d3d49efd9 100644 --- a/data/json/items/comestibles/raw_grain.json +++ b/data/json/items/comestibles/raw_grain.json @@ -383,6 +383,7 @@ "id": "wild_rice", "name": { "str_sp": "wild rice" }, "copy-from": "oats", + "material": [ "veggy" ], "calories": 120, "description": "Raw wild rice, still in its fibrous shell. It'll need to be milled before it's edible for humans.", "milling": { "into": "dry_wild_rice", "recipe": "dry_wild_rice_mill_1_5" }, diff --git a/data/json/materials.json b/data/json/materials.json index 4f0fc2f6a7541..1bc0dd4a13748 100644 --- a/data/json/materials.json +++ b/data/json/materials.json @@ -2436,7 +2436,7 @@ { "type": "material", "id": "veggy", - "name": "Vegetable Matter", + "name": "Plant Matter", "density": 1.1, "specific_heat_liquid": 3.9, "specific_heat_solid": 1.9, From 0c5459f6a90f4fd4f6522c88393a759c460c94ae Mon Sep 17 00:00:00 2001 From: anothersimulacrum Date: Sun, 23 Jun 2024 02:55:30 +0000 Subject: [PATCH 02/14] Ensure all keys are preserved for later checks Why were there two places keys were defined? The world wonders. --- tools/json_tools/gun_variant_validator.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/tools/json_tools/gun_variant_validator.py b/tools/json_tools/gun_variant_validator.py index 1f16312e97f18..4c46d3c3e64db 100755 --- a/tools/json_tools/gun_variant_validator.py +++ b/tools/json_tools/gun_variant_validator.py @@ -309,11 +309,10 @@ def simplify_object(jo): return False req_keys = {"weight", "volume", "ammo", "id"} - extra_keys = {"longest_side", "pocket_data", "ranged_damage", "modes", - "recoil", "dispersion", "name"} + all_keys = req_keys | set(INHERITED_KEYS) + # Drop all the other keys - removed = list(filter(lambda key: key not in req_keys | extra_keys, - jo.keys())) + removed = list(filter(lambda key: key not in all_keys, jo.keys())) # Need to iterate over removed because we can't delete from dict in for for key in removed: del jo[key] From f90bbb80cae46b4acd35a5de8148f3dcbd64cb43 Mon Sep 17 00:00:00 2001 From: theyareclose <50838271+theyareclose@users.noreply.github.com> Date: Sat, 22 Jun 2024 21:30:53 -0600 Subject: [PATCH 03/14] Update components of retractable telescope This removes the "spring" component of the retractable telescope ("survivor_scope") and fixes the disassembly to correctly give a small high-quality lens. --- data/json/recipes/recipe_others.json | 2 +- data/json/uncraft/tools.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/data/json/recipes/recipe_others.json b/data/json/recipes/recipe_others.json index 209770bb5da16..08b29ac8f796f 100644 --- a/data/json/recipes/recipe_others.json +++ b/data/json/recipes/recipe_others.json @@ -1367,7 +1367,7 @@ "book_learn": [ [ "plastics_book", 3 ] ], "proficiencies": [ { "proficiency": "prof_plasticworking" } ], "using": [ [ "soldering_standard", 10 ], [ "plastic_molding", 3 ] ], - "components": [ [ [ "plastic_chunk", 4 ] ], [ [ "lens", 1 ] ], [ [ "lens", 1 ], [ "lens_small", 1 ] ], [ [ "spring", 1 ] ] ] + "components": [ [ [ "plastic_chunk", 4 ] ], [ [ "lens", 1 ] ], [ [ "lens", 1 ], [ "lens_small", 1 ] ] ] }, { "type": "recipe", diff --git a/data/json/uncraft/tools.json b/data/json/uncraft/tools.json index 3ab58e87ac364..dfff880509c0f 100644 --- a/data/json/uncraft/tools.json +++ b/data/json/uncraft/tools.json @@ -204,7 +204,7 @@ "difficulty": 1, "time": "5 m", "qualities": [ { "id": "CUT", "level": 2 } ], - "components": [ [ [ "plastic_chunk", 4 ] ], [ [ "lens", 1 ] ], [ [ "lens", 1 ], [ "lens_small", 1 ] ], [ [ "spring", 1 ] ] ] + "components": [ [ [ "plastic_chunk", 4 ] ], [ [ "lens", 1 ] ], [ [ "lens_small", 1 ] ] ] }, { "result": "fishing_rod_professional", From 8eb2473381977a4ddc9ba27233e07267beae566f Mon Sep 17 00:00:00 2001 From: PatrikLundell Date: Sun, 23 Jun 2024 11:32:30 +0200 Subject: [PATCH 04/14] Fixed rotation and spawning issues --- src/map_selector.cpp | 13 ++++ src/mapgen.cpp | 67 ++++++++++++------ src/mapgen_functions.cpp | 147 +++++++++++++++++++++++++++------------ src/rng.h | 4 ++ 4 files changed, 162 insertions(+), 69 deletions(-) diff --git a/src/map_selector.cpp b/src/map_selector.cpp index 7aca740188f4f..809dee0688a07 100644 --- a/src/map_selector.cpp +++ b/src/map_selector.cpp @@ -37,6 +37,13 @@ tripoint_range points_in_range_bub( const map &m ) tripoint_bub_ms( SEEX * m.getmapsize() - 1, SEEY * m.getmapsize() - 1, OVERMAP_HEIGHT ) ); } +tripoint_range points_in_level_range( const map &m, const int z ) +{ + return tripoint_range( + tripoint_bub_ms( 0, 0, z ), + tripoint_bub_ms( SEEX * m.getmapsize() - 1, SEEY * m.getmapsize() - 1, z ) ); +} + std::optional random_point( const map &m, const std::function &predicate ) { @@ -49,6 +56,12 @@ std::optional random_point( const map &m, return random_point( points_in_range_bub( m ), predicate ); } +std::optional random_point_on_level( const map &m, const int z, + const std::function &predicate ) +{ + return random_point( points_in_level_range( m, z ), predicate ); +} + std::optional random_point( const tripoint_range &range, const std::function &predicate ) { diff --git a/src/mapgen.cpp b/src/mapgen.cpp index 21389f0c6a6af..532a750295794 100644 --- a/src/mapgen.cpp +++ b/src/mapgen.cpp @@ -367,11 +367,11 @@ void map::generate( const tripoint_abs_omt &p, const time_point &when, bool save if( !mgr.name ) { continue; } - if( const std::optional pt = - random_point( *this, [this]( const tripoint & n ) { + if( const std::optional pt = + random_point_on_level( *this, gridz, [this]( const tripoint_bub_ms & n ) { return passable( n ); } ) ) { - const tripoint_bub_ms pnt = tripoint_bub_ms( pt.value() ); + const tripoint_bub_ms pnt = pt.value(); add_spawn( mgr, pnt ); } } @@ -5356,7 +5356,9 @@ void mapgen_function_json::generate( mapgendata &md ) // Note that we need to perform rotations even if there is no predecessor, as other Z levels // have to be kept aligned regardless. - m->rotate( ( -rotation.get() + 4 ) % 4 ); + // rotation.get can return a random value if val differs from valmax. Use same value in both directions. + const int rot = rotation.get() % 4; + m->rotate( 4 - rot ); if( ter.is_rotatable() || ter.is_linear() ) { m->rotate( ( -ter.get_rotation() + 4 ) % 4 ); @@ -5367,7 +5369,7 @@ void mapgen_function_json::generate( mapgendata &md ) apply_mapgen_in_phases( md_with_params, setmap_points, objects, tripoint_rel_ms( tripoint_zero ), context_ ); - m->rotate( rotation.get() ); + m->rotate( rot ); if( ter.is_rotatable() || ter.is_linear() ) { m->rotate( ter.get_rotation() ); @@ -5549,6 +5551,19 @@ void map::draw_lab( mapgendata &dat ) lw = EAST_EDGE + 1; } if( dat.zlevel() == 0 ) { // We're on ground level + int rot = 0; + + if( dat.east()->get_type_id() == oter_type_road ) { + rot = 1; + } else if( dat.south()->get_type_id() == oter_type_road ) { + rot = 2; + } else if( dat.west()->get_type_id() == oter_type_road ) { + rot = 3; + } + + // Rotate the map backwards so contents can be placed in the 'normal' orientation. + rotate( 4 - rot ); + for( int i = 0; i < SEEX * 2; i++ ) { for( int j = 0; j < SEEY * 2; j++ ) { if( i <= 1 || i >= SEEX * 2 - 2 || @@ -5577,13 +5592,9 @@ void map::draw_lab( mapgendata &dat ) place_spawns( GROUP_TURRET, 1, point_bub_ms( SEEX, 5 ), point_bub_ms( SEEX, 5 ), dat.zlevel(), 1, true ); - if( dat.east()->get_type_id() == oter_type_road ) { - rotate( 1 ); - } else if( dat.south()->get_type_id() == oter_type_road ) { - rotate( 2 ); - } else if( dat.west()->get_type_id() == oter_type_road ) { - rotate( 3 ); - } + // Rotate everything back to normal, giving rotated addition its proper rotation. + rotate( rot ); + } else if( tw != 0 || rw != 0 || lw != 0 || bw != 0 ) { // Sewers! for( int i = 0; i < SEEX * 2; i++ ) { for( int j = 0; j < SEEY * 2; j++ ) { @@ -5657,19 +5668,29 @@ void map::draw_lab( mapgendata &dat ) //A lab area with only one entrance if( boarders == 1 ) { // If you remove the usage of "lab_1side" here, remove it from mapgen_factory::get_usages above as well. - if( oter_mapgen.generate( dat, "lab_1side" ) ) { - if( tw == 2 ) { - rotate( 2 ); - } - if( rw == 2 ) { - rotate( 1 ); - } - if( lw == 2 ) { - rotate( 3 ); - } - } else { + int rot = 0; + + if( tw == 2 ) { + rot += 2; + } + if( rw == 2 ) { + rot += 1; + } + if( lw == 2 ) { + rot += 3; + } + rot %= 4; + + // Rotate the map backwards so the new material can be placed in its 'normal' orientation. + rotate( 4 - rot ); + + if( !oter_mapgen.generate( dat, "lab_1side" ) ) { debugmsg( "Error: Tried to generate 1-sided lab but no lab_1side json exists." ); } + + // Rotate the map back to its normal orientation, resulting in the new addition being rotated properly. + rotate( rot ); + maybe_insert_stairs( dat.above(), ter_t_stairs_up ); maybe_insert_stairs( terrain_type, ter_t_stairs_down ); } else { diff --git a/src/mapgen_functions.cpp b/src/mapgen_functions.cpp index bdb3933bff20a..6c9967644dd76 100644 --- a/src/mapgen_functions.cpp +++ b/src/mapgen_functions.cpp @@ -328,6 +328,9 @@ void mapgen_subway( mapgendata &dat ) break; } + // Rotate the map backwards so things can can be placed in their 'normal' orientation. + m->rotate( 4 - rot ); + // rotate the arrays left by rot steps nesw_array_rotate( subway_nesw, rot ); nesw_array_rotate( curvedir_nesw, rot ); @@ -554,7 +557,7 @@ void mapgen_subway( mapgendata &dat ) break; } - // finally, unrotate the map + // finally, unrotate the map back to its normal orientation, resulting in the new addition being rotated. m->rotate( rot ); } @@ -566,6 +569,19 @@ void mapgen_river_center( mapgendata &dat ) void mapgen_river_curved_not( mapgendata &dat ) { map *const m = &dat.m; + int rot = 0; + + if( dat.terrain_type() == oter_river_c_not_se ) { + rot = 1; + } else if( dat.terrain_type() == oter_river_c_not_sw ) { + rot = 2; + } else if( dat.terrain_type() == oter_river_c_not_nw ) { + rot = 3; + } + + // Rotate the map backwards so things can can be placed in their 'normal' orientation. + m->rotate( 4 - rot ); + fill_background( m, ter_t_water_moving_dp ); // this is not_ne, so deep on all sides except ne corner, which is shallow // shallow is 20,0, 23,4 @@ -586,20 +602,26 @@ void mapgen_river_curved_not( mapgendata &dat ) } } - if( dat.terrain_type() == oter_river_c_not_se ) { - m->rotate( 1 ); - } - if( dat.terrain_type() == oter_river_c_not_sw ) { - m->rotate( 2 ); - } - if( dat.terrain_type() == oter_river_c_not_nw ) { - m->rotate( 3 ); - } + // finally, unrotate the map back to its normal orientation, resulting in the new addition being rotated. + m->rotate( rot ); } void mapgen_river_straight( mapgendata &dat ) { map *const m = &dat.m; + int rot = 0; + + if( dat.terrain_type() == oter_river_east ) { + rot = 1; + } else if( dat.terrain_type() == oter_river_south ) { + rot = 2; + } else if( dat.terrain_type() == oter_river_west ) { + rot = 3; + } + + // Rotate the map backwards so things can can be placed in their 'normal' orientation. + m->rotate( 4 - rot ); + fill_background( m, ter_t_water_moving_dp ); for( int x = 0; x < SEEX * 2; x++ ) { @@ -612,20 +634,26 @@ void mapgen_river_straight( mapgendata &dat ) line( m, ter_t_water_moving_sh, point( x, ++ground_edge ), point( x, shallow_edge ), dat.zlevel() ); } - if( dat.terrain_type() == oter_river_east ) { - m->rotate( 1 ); - } - if( dat.terrain_type() == oter_river_south ) { - m->rotate( 2 ); - } - if( dat.terrain_type() == oter_river_west ) { - m->rotate( 3 ); - } + // finally, unrotate the map back to its normal orientation, resulting in the new addition being rotated. + m->rotate( rot ); } void mapgen_river_curved( mapgendata &dat ) { map *const m = &dat.m; + int rot = 0; + + if( dat.terrain_type() == oter_river_se ) { + rot = 1; + } else if( dat.terrain_type() == oter_river_sw ) { + rot = 2; + } else if( dat.terrain_type() == oter_river_nw ) { + rot = 3; + } + + // Rotate the map backwards so things can can be placed in their 'normal' orientation. + m->rotate( 4 - rot ); + fill_background( m, ter_t_water_moving_dp ); // NE corner deep, other corners are shallow. do 2 passes: one x, one y for( int x = 0; x < SEEX * 2; x++ ) { @@ -647,15 +675,8 @@ void mapgen_river_curved( mapgendata &dat ) line( m, ter_t_water_moving_sh, point( shallow_edge, y ), point( --ground_edge, y ), dat.zlevel() ); } - if( dat.terrain_type() == oter_river_se ) { - m->rotate( 1 ); - } - if( dat.terrain_type() == oter_river_sw ) { - m->rotate( 2 ); - } - if( dat.terrain_type() == oter_river_nw ) { - m->rotate( 3 ); - } + // finally, unrotate the map back to its normal orientation, resulting in the new addition being rotated. + m->rotate( rot ); } void mapgen_rock_partial( mapgendata &dat ) @@ -2111,47 +2132,81 @@ void mapgen_ravine_edge( mapgendata &dat ) //With that done, we generate the maps. if( straight ) { - for( int x = 0; x < SEEX * 2; x++ ) { - int ground_edge = 12 + rng( 1, 3 ); - line( m, ter_str_id::NULL_ID(), point( x, ++ground_edge ), point( x, SEEY * 2 ), dat.zlevel() ); - } + int rot = 0; + if( w_ravine ) { - m->rotate( 1 ); + rot += 1; } if( n_ravine ) { - m->rotate( 2 ); + rot += 2; } if( e_ravine ) { - m->rotate( 3 ); + rot += 3; } - } else if( interior_corner ) { + + rot %= 4; + + // Rotate the map 'backwards' to allow the new addition to be placed at its normal orientation. + m->rotate( 4 - rot ); + for( int x = 0; x < SEEX * 2; x++ ) { - int ground_edge = 12 + rng( 1, 3 ) + x; + int ground_edge = 12 + rng( 1, 3 ); line( m, ter_str_id::NULL_ID(), point( x, ++ground_edge ), point( x, SEEY * 2 ), dat.zlevel() ); } + + // Rotate the map back to its normal rotation, resulting in the new contents becoming rotated. + m->rotate( rot ); + + } else if( interior_corner ) { + int rot = 0; + if( nw_ravine ) { - m->rotate( 1 ); + rot += 1; } if( ne_ravine ) { - m->rotate( 2 ); + rot += 2; } if( se_ravine ) { - m->rotate( 3 ); + rot += 3; } - } else if( exterior_corner ) { + + rot %= 4; + + // Rotate the map 'backwards' to allow the new addition to be placed at its normal orientation. + m->rotate( 4 - rot ); + for( int x = 0; x < SEEX * 2; x++ ) { - int ground_edge = 12 + rng( 1, 3 ) - x; - line( m, ter_str_id::NULL_ID(), point( x, --ground_edge ), point( x, SEEY * 2 - 1 ), dat.zlevel() ); + int ground_edge = 12 + rng( 1, 3 ) + x; + line( m, ter_str_id::NULL_ID(), point( x, ++ground_edge ), point( x, SEEY * 2 ), dat.zlevel() ); } + + // Rotate the map back to its normal rotation, resulting in the new contents becoming rotated. + m->rotate( rot ); + + } else if( exterior_corner ) { + int rot = 0; + if( w_ravine && s_ravine ) { - m->rotate( 1 ); + rot += 1; } if( w_ravine && n_ravine ) { - m->rotate( 2 ); + rot += 2; } if( e_ravine && n_ravine ) { - m->rotate( 3 ); + rot += 3; + } + + rot %= 4; + + // Rotate the map 'backwards' to allow the new addition to be placed at its normal orientation. + m->rotate( 4 - rot ); + + for( int x = 0; x < SEEX * 2; x++ ) { + int ground_edge = 12 + rng( 1, 3 ) - x; + line( m, ter_str_id::NULL_ID(), point( x, --ground_edge ), point( x, SEEY * 2 - 1 ), dat.zlevel() ); } + // Rotate the map back to its normal rotation, resulting in the new contents becoming rotated. + m->rotate( rot ); } // The placed t_null terrains are converted into the regional groundcover in the ravine's bottom level, // in the other levels they are converted into open air to generate the cliffside. diff --git a/src/rng.h b/src/rng.h index cfca39b3d87f1..3fad41c60578f 100644 --- a/src/rng.h +++ b/src/rng.h @@ -197,6 +197,8 @@ inline V random_entry_removed( C &container ) // TODO: Remove untyped overload tripoint_range points_in_range( const map &m ); tripoint_range points_in_range_bub( const map &m ); +// Restricts the points to the specified Z level. +tripoint_range points_in_level_range( const map &m, const int z ); /// Returns a random point in the given range that satisfies the given predicate ( if any ). // TODO: Remove untyped overload std::optional random_point( const tripoint_range &range, @@ -209,5 +211,7 @@ std::optional random_point( const map &m, const std::function &predicate ); std::optional random_point( const map &m, const std::function &predicate ); +std::optional random_point_on_level( const map &m, const int z, + const std::function &predicate ); #endif // CATA_SRC_RNG_H From e531dd0ce8f141c8e66e3fd7b643812b0ddbc322 Mon Sep 17 00:00:00 2001 From: PatrikLundell Date: Sun, 23 Jun 2024 16:11:08 +0200 Subject: [PATCH 05/14] stupid demand to obfuscate info --- src/rng.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/rng.h b/src/rng.h index 3fad41c60578f..885461bca3c6b 100644 --- a/src/rng.h +++ b/src/rng.h @@ -198,7 +198,7 @@ inline V random_entry_removed( C &container ) tripoint_range points_in_range( const map &m ); tripoint_range points_in_range_bub( const map &m ); // Restricts the points to the specified Z level. -tripoint_range points_in_level_range( const map &m, const int z ); +tripoint_range points_in_level_range( const map &m, int z ); /// Returns a random point in the given range that satisfies the given predicate ( if any ). // TODO: Remove untyped overload std::optional random_point( const tripoint_range &range, @@ -211,7 +211,7 @@ std::optional random_point( const map &m, const std::function &predicate ); std::optional random_point( const map &m, const std::function &predicate ); -std::optional random_point_on_level( const map &m, const int z, +std::optional random_point_on_level( const map &m, int z, const std::function &predicate ); #endif // CATA_SRC_RNG_H From 014078a4b8f688776b750c8638e493a7ce9ce893 Mon Sep 17 00:00:00 2001 From: KeremBaba Date: Sun, 23 Jun 2024 21:00:26 +0300 Subject: [PATCH 06/14] Colt Python (#74576) * colt python * finalize the gun * generic guns + typo * descriptive gun name * spawns * Update guns_by_calibre.json Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * fuck you * fucking merge it already * fuck you Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .../itemgroups/Weapons_Mods_Ammo/guns.json | 7 ++- .../Weapons_Mods_Ammo/guns_by_calibre.json | 6 +-- .../Weapons_Mods_Ammo/nested_guns.json | 8 +++ data/json/items/gun/38.json | 52 +++++++++++++++++++ .../firearms/gg_firearms_migration.json | 2 +- 5 files changed, 69 insertions(+), 6 deletions(-) diff --git a/data/json/itemgroups/Weapons_Mods_Ammo/guns.json b/data/json/itemgroups/Weapons_Mods_Ammo/guns.json index e040ba7de9e94..a8d01435781a4 100644 --- a/data/json/itemgroups/Weapons_Mods_Ammo/guns.json +++ b/data/json/itemgroups/Weapons_Mods_Ammo/guns.json @@ -98,6 +98,7 @@ { "item": "glock_40", "variant": "glock_40", "prob": 1 }, { "item": "sw_610", "prob": 1 }, { "item": "sw_619", "prob": 40 }, + { "item": "colt_python", "prob": 40 }, { "item": "bfr", "prob": 10 }, { "item": "raging_bull", "prob": 15 }, { "item": "sw_500", "prob": 10 }, @@ -1667,7 +1668,8 @@ { "item": "m9", "variant": "m9", "prob": 5, "charges": [ 0, 15 ] }, { "item": "sig_40", "prob": 20, "charges": [ 0, 12 ] }, { "item": "usp_45", "prob": 10, "charges": [ 0, 12 ] }, - { "item": "usp_9mm", "prob": 10, "charges": [ 0, 15 ] } + { "item": "usp_9mm", "prob": 10, "charges": [ 0, 15 ] }, + { "item": "colt_python", "prob": 5, "charges": [ 0, 6 ] } ] }, { @@ -1752,7 +1754,8 @@ { "item": "garand", "prob": 1, "charges": [ 0, 8 ] }, { "item": "mk47", "prob": 1, "charges": [ 0, 30 ] }, { "item": "ak556", "prob": 2, "charges": [ 0, 30 ] }, - { "item": "ak556", "variant": "zpapm90", "prob": 1 } + { "item": "ak556", "variant": "zpapm90", "prob": 1 }, + { "item": "colt_python", "prob": 1, "charges": [ 0, 6 ] } ] } ] diff --git a/data/json/itemgroups/Weapons_Mods_Ammo/guns_by_calibre.json b/data/json/itemgroups/Weapons_Mods_Ammo/guns_by_calibre.json index 9589f4eeca8ed..1e064d8b88455 100644 --- a/data/json/itemgroups/Weapons_Mods_Ammo/guns_by_calibre.json +++ b/data/json/itemgroups/Weapons_Mods_Ammo/guns_by_calibre.json @@ -63,7 +63,7 @@ { "type": "item_group", "id": "guns_pistol_common_357mag", - "items": [ { "group": "nested_sw_619", "prob": 3 } ] + "items": [ { "group": "nested_sw_619", "prob": 3 }, { "group": "nested_colt_python", "prob": 3 } ] }, { "type": "item_group", @@ -145,7 +145,7 @@ { "type": "item_group", "id": "guns_pistol_common_everyday_carry_357mag", - "items": [ { "item": "sw_619", "prob": 5, "charges": [ 0, -1 ] } ] + "items": [ { "item": "sw_619", "prob": 5, "charges": [ 0, -1 ] }, { "item": "colt_python", "prob": 5, "charges": [ 0, -1 ] } ] }, { "type": "item_group", @@ -232,7 +232,7 @@ { "type": "item_group", "id": "guns_pistol_common_display_357mag", - "items": [ { "item": "sw_619", "prob": 1 } ] + "items": [ { "item": "sw_619", "prob": 1 }, { "item": "colt_python", "prob": 2 } ] }, { "type": "item_group", diff --git a/data/json/itemgroups/Weapons_Mods_Ammo/nested_guns.json b/data/json/itemgroups/Weapons_Mods_Ammo/nested_guns.json index f0cf5ebd9cc78..c7929ca7f65dc 100644 --- a/data/json/itemgroups/Weapons_Mods_Ammo/nested_guns.json +++ b/data/json/itemgroups/Weapons_Mods_Ammo/nested_guns.json @@ -283,6 +283,14 @@ "ammo": 100, "entries": [ { "item": "sw_619", "charges": [ 0, 7 ] }, { "group": "on_hand_38" } ] }, + { + "id": "nested_colt_python", + "type": "item_group", + "//": "this is a distribution for the gun, reasonable number of backup mags, and some ammo to repack", + "subtype": "collection", + "ammo": 100, + "entries": [ { "item": "colt_python", "charges": [ 0, 6 ] }, { "group": "on_hand_357" } ] + }, { "id": "nested_model_10_revolver", "type": "item_group", diff --git a/data/json/items/gun/38.json b/data/json/items/gun/38.json index 4a58a4f912f62..1bf810526f6fa 100644 --- a/data/json/items/gun/38.json +++ b/data/json/items/gun/38.json @@ -146,6 +146,58 @@ ], "melee_damage": { "bash": 8 } }, + { + "id": "colt_python", + "copy-from": "pistol_revolver", + "looks_like": "sw_619", + "type": "GUN", + "name": { "str_sp": ".357 revolver" }, + "//": "This is the Colt Python 2020 6-inch version.", + "description": "A six inch revolver chambered in .357 Magnum/.38 Special. Favorite of sheriffs and post-Cataclysm survivor group leaders.", + "//s": "omg twd reference :O", + "weight": "1300 g", + "volume": "703 ml", + "longest_side": "292 mm", + "barrel_length": "152 mm", + "symbol": "(", + "color": "light_gray", + "//2": "Price of one according to colt's own website. Goddamn.", + "price": "1 kUSD 599 USD", + "price_postapoc": "20 USD", + "to_hit": { "grip": "solid", "length": "short", "balance": "neutral", "surface": "point" }, + "material": [ "steel", "wood" ], + "ammo": [ "357mag", "38" ], + "dispersion": 280, + "durability": 10, + "blackpowder_tolerance": 48, + "clip_size": 6, + "valid_mod_locations": [ + [ "barrel", 1 ], + [ "grip", 1 ], + [ "mechanism", 2 ], + [ "rail mount", 1 ], + [ "sights", 1 ], + [ "stocks mount", 1 ], + [ "underbarrel mount", 1 ] + ], + "pocket_data": [ + { + "pocket_type": "MAGAZINE", + "rigid": true, + "ammo_restriction": { "357mag": 6, "38": 6 }, + "allowed_speedloaders": [ "38_speedloader" ] + } + ], + "variant_type": "gun", + "variants": [ + { + "id": "colt_python", + "name": { "str_sp": "Colt Python" }, + "description": "Made by Colt, this six inch six-shooter is one of the most lauded revolvers ever produced. Can fire .38 Special and .357 Magnum." + } + ], + "melee_damage": { "bash": 9 } + }, { "id": "sw_619", "copy-from": "pistol_revolver", diff --git a/data/mods/Generic_Guns/firearms/gg_firearms_migration.json b/data/mods/Generic_Guns/firearms/gg_firearms_migration.json index a73c95a1543d7..70a88a7184948 100644 --- a/data/mods/Generic_Guns/firearms/gg_firearms_migration.json +++ b/data/mods/Generic_Guns/firearms/gg_firearms_migration.json @@ -71,7 +71,7 @@ "replace": "pistol_magnum_pipe" }, { - "id": [ "sw_619", "sw629", "bfr", "sw_500", "raging_bull", "chiappa_rhino" ], + "id": [ "sw_619", "sw629", "bfr", "sw_500", "raging_bull", "chiappa_rhino", "colt_python" ], "type": "MIGRATION", "replace": "pistol_magnum_revolver" }, From 7c65121e9306fae278ab8932570f1582532e9ca0 Mon Sep 17 00:00:00 2001 From: Holli <78005870+Holli-Git@users.noreply.github.com> Date: Sun, 23 Jun 2024 12:02:08 -0600 Subject: [PATCH 07/14] Adds the Rossi Gallery (#74724) * Add the gun * add to item groups * Add mod support * Undo marlin 9a migration * Fix wording * Add plural of gallery * Add to item demographics * misc fix --- .../Weapons_Mods_Ammo/guns_by_calibre.json | 8 ++- .../Weapons_Mods_Ammo/nested_guns.json | 8 +++ data/json/items/gun/22.json | 49 +++++++++++++++++++ .../firearms/gg_firearms_migration.json | 2 +- data/mods/TEST_DATA/item_demographics.json | 4 +- data/mods/classic_zombies/items/guns.json | 14 ++++++ 6 files changed, 81 insertions(+), 4 deletions(-) diff --git a/data/json/itemgroups/Weapons_Mods_Ammo/guns_by_calibre.json b/data/json/itemgroups/Weapons_Mods_Ammo/guns_by_calibre.json index 1e064d8b88455..de3d4d8ff514c 100644 --- a/data/json/itemgroups/Weapons_Mods_Ammo/guns_by_calibre.json +++ b/data/json/itemgroups/Weapons_Mods_Ammo/guns_by_calibre.json @@ -462,7 +462,11 @@ { "type": "item_group", "id": "guns_rifle_common_worn_22", - "items": [ { "item": "marlin_9a", "prob": 8, "charges": [ 0, 19 ] }, { "item": "ruger_1022", "prob": 28, "charges": [ 0, 10 ] } ] + "items": [ + { "item": "marlin_9a", "prob": 8, "charges": [ 0, 19 ] }, + { "item": "ruger_1022", "prob": 28, "charges": [ 0, 10 ] }, + { "item": "rossi_gallery", "prob": 12, "charges": [ 0, 19 ] } + ] }, { "type": "item_group", @@ -537,7 +541,7 @@ { "type": "item_group", "id": "guns_rifle_common_display_22", - "items": [ { "item": "ruger_1022", "prob": 160 } ] + "items": [ { "item": "ruger_1022", "prob": 160 }, { "item": "rossi_gallery", "prob": 18 } ] }, { "type": "item_group", diff --git a/data/json/itemgroups/Weapons_Mods_Ammo/nested_guns.json b/data/json/itemgroups/Weapons_Mods_Ammo/nested_guns.json index c7929ca7f65dc..7e783ee51c153 100644 --- a/data/json/itemgroups/Weapons_Mods_Ammo/nested_guns.json +++ b/data/json/itemgroups/Weapons_Mods_Ammo/nested_guns.json @@ -1377,6 +1377,14 @@ "ammo": 100, "entries": [ { "item": "marlin_9a", "charges": [ 0, 19 ] }, { "group": "on_hand_22" } ] }, + { + "id": "nested_rossi_gallery", + "type": "item_group", + "//": "this is a distribution for the gun, reasonable number of backup mags, and some ammo to repack", + "subtype": "collection", + "ammo": 100, + "entries": [ { "item": "rossi_gallery", "charges": [ 0, 15 ] }, { "group": "on_hand_22" } ] + }, { "id": "nested_mosin44", "type": "item_group", diff --git a/data/json/items/gun/22.json b/data/json/items/gun/22.json index b1028df3c0c84..30c95f61b7145 100644 --- a/data/json/items/gun/22.json +++ b/data/json/items/gun/22.json @@ -444,5 +444,54 @@ ], "price_postapoc": "10 USD", "modes": [ [ "DEFAULT", "semi-auto", 1 ], [ "AUTO", "auto", 4 ] ] + }, + { + "id": "rossi_gallery", + "looks_like": "ar15", + "type": "GUN", + "reload_noise_volume": 10, + "name": { "str": "pump action varmint rifle" }, + "description": "A lightweight, wood framed pump action rifle, holding 15 rounds of .22 with an 18 inch barrel. While pump actions tend to be largely shotguns, they can be made in calibers such as .22 LR.", + "variant_type": "gun", + "variants": [ + { + "id": "rossi_gallery", + "name": { "str": "Rossi Gallery", "str_pl": "Rossi Galleries" }, + "description": "A modern take on the Winchester 1890, the Rossi Gallery is a .22 LR rifle, notably using a pump action. Much like a pump action shotgun, the magazine tube is below it's 18 inch barrel and can hold 15 rounds. While pump actions are quite often associated with shotguns, the mechanism can be applied to rifles as well, though in practice it's limited to .22 LR." + } + ], + "weight": "2344 g", + "volume": "2054 ml", + "longest_side": "913 mm", + "barrel_length": "457 mm", + "price": "394 USD", + "price_postapoc": "10 USD", + "to_hit": { "grip": "solid", "length": "hand", "surface": "any", "balance": "uneven" }, + "material": [ "steel", "wood", "aluminum" ], + "symbol": "(", + "color": "brown", + "range": 7, + "ammo": [ "22" ], + "skill": "rifle", + "ranged_damage": { "damage_type": "bullet", "amount": 3 }, + "dispersion": 140, + "durability": 8, + "blackpowder_tolerance": 56, + "clip_size": 15, + "valid_mod_locations": [ + [ "brass catcher", 1 ], + [ "grip", 1 ], + [ "mechanism", 2 ], + [ "rail mount", 1 ], + [ "sights", 1 ], + [ "sling", 1 ], + [ "stock mount", 1 ], + [ "stock accessory", 2 ], + [ "underbarrel mount", 1 ] + ], + "faults": [ "fault_gun_blackpowder", "fault_gun_dirt" ], + "flags": [ "RELOAD_ONE", "NO_TURRET" ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "22": 15 } } ], + "melee_damage": { "bash": 12 } } ] diff --git a/data/mods/Generic_Guns/firearms/gg_firearms_migration.json b/data/mods/Generic_Guns/firearms/gg_firearms_migration.json index 70a88a7184948..8085b696f68c7 100644 --- a/data/mods/Generic_Guns/firearms/gg_firearms_migration.json +++ b/data/mods/Generic_Guns/firearms/gg_firearms_migration.json @@ -179,7 +179,7 @@ "replace": "pistol_smg" }, { - "id": [ "ruger_1022", "ruger_1022_auto", "ruger_charger_auto" ], + "id": [ "ruger_1022", "ruger_1022_auto", "ruger_charger_auto", "rossi_gallery" ], "type": "MIGRATION", "replace": "pistol_tiny_rifle" }, diff --git a/data/mods/TEST_DATA/item_demographics.json b/data/mods/TEST_DATA/item_demographics.json index 4a921b39cfdbf..59876b8233c9e 100644 --- a/data/mods/TEST_DATA/item_demographics.json +++ b/data/mods/TEST_DATA/item_demographics.json @@ -699,7 +699,8 @@ "cp33": 10, "ruger_charger": 10, "ruger_charger_auto": 10, - "ruger_1022_auto": 10 + "ruger_1022_auto": 10, + "rossi_gallery": 10 } }, { @@ -1176,6 +1177,7 @@ "rm51_assault_rifle": 1, "rm614_lmg": 1, "rm88_battle_rifle": 1, + "rossi_gallery": 1, "ruger_1022": 1, "ruger_1022_auto": 1, "ruger_arr": 1, diff --git a/data/mods/classic_zombies/items/guns.json b/data/mods/classic_zombies/items/guns.json index d545be25be33f..519cd39743766 100644 --- a/data/mods/classic_zombies/items/guns.json +++ b/data/mods/classic_zombies/items/guns.json @@ -88,5 +88,19 @@ "name": { "str": "C6" }, "copy-from": "m60", "description": "The Colt Canada C6 is a general-purpose machine gun developed to replace the .30-caliber C5 GPMG. Heavy and difficult to handle fired from the shoulder, as most people aren't action-movie heroes." + }, + { + "type": "GUN", + "id": "rossi_gallery", + "name": { "str": "pump action varmint rifle" }, + "copy-from": "rossi_gallery", + "variant_type": "gun", + "variants": [ + { + "id": "rossi_gallery", + "name": { "str": "Winchester 1890" }, + "description": "The Winchester 1890 is a pump action rifle, chambered in .22 LR. Holds 15 rounds of ammo, so go get plinking!" + } + ] } ] From 68ea0cc741a5561ac503beb748d9ade52c86df79 Mon Sep 17 00:00:00 2001 From: SomeGuyIGues <154325171+SomeGuyIGues@users.noreply.github.com> Date: Mon, 24 Jun 2024 04:27:39 +1000 Subject: [PATCH 08/14] Fixing raw copper wire weight consistency with copper (#74702) * Removed copper wire disassembly recipe, creating mass is UNACCEPTABLE * Added copper recipe using raw copper wire. * Removed unnecessary quotation marks * Is this copper loss? * Lint and fixed up copper recipe to no longer disassembly into several raw copper wires * Updated comment to be more accurate --- data/json/recipes/other/materials.json | 15 +++++++++++++++ data/json/recipes/recipe_deconstruction.json | 8 -------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/data/json/recipes/other/materials.json b/data/json/recipes/other/materials.json index 09a274de68fb1..c9a276d23bc3e 100644 --- a/data/json/recipes/other/materials.json +++ b/data/json/recipes/other/materials.json @@ -423,6 +423,21 @@ "tools": [ [ [ "surface_heat", 10, "LIST" ] ] ], "components": [ [ [ "copper", 50 ] ] ] }, + { + "type": "recipe", + "activity_level": "MODERATE_EXERCISE", + "result": "copper", + "category": "CC_OTHER", + "subcategory": "CSC_OTHER_MATERIALS", + "skill_used": "fabrication", + "time": "1 h", + "autolearn": false, + "qualities": [ { "id": "HAMMER", "level": 1 } ], + "charges": 19, + "tools": [ [ [ "surface_heat", 10, "LIST" ] ] ], + "//": "There is a loss of approximately 4.687 grams, for the math check #74702.", + "components": [ [ [ "copper_wire", 21 ] ] ] + }, { "type": "recipe", "activity_level": "LIGHT_EXERCISE", diff --git a/data/json/recipes/recipe_deconstruction.json b/data/json/recipes/recipe_deconstruction.json index 1be86f462b301..7cf0cb8bfa080 100644 --- a/data/json/recipes/recipe_deconstruction.json +++ b/data/json/recipes/recipe_deconstruction.json @@ -2022,14 +2022,6 @@ "qualities": [ { "id": "CUT", "level": 2 } ], "components": [ [ [ "copper_wire", 1 ] ] ] }, - { - "result": "copper_wire", - "type": "uncraft", - "time": "1 s", - "//": "I made this a near instant conversion. Raw copper wire is essentially just copper and imo should be freely converted without a huge time investment or tool requirement, they are effectively identical items.", - "activity_level": "LIGHT_EXERCISE", - "components": [ [ [ "copper", 1 ] ] ] - }, { "result": "camera", "type": "uncraft", From a37660f696ae0604afed9af1b3ead6f914add853 Mon Sep 17 00:00:00 2001 From: Rocket-F-1024 <83650722+Rocket-F-1024@users.noreply.github.com> Date: Mon, 24 Jun 2024 06:58:14 +0800 Subject: [PATCH 09/14] Balancing recipe imbalances due to red phosphorus weight changes (#74722) * Balance the amount of red phosphorus * Balance the amount of red phosphorus * Balance the amount of red phosphorus * Balance the amount of red phosphorus * Balance the amount of red phosphorus * Add small portion of red phosphorus * Update data/json/recipes/chem/drugs.json Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * Update data/json/recipes/recipe_medsandchemicals.json Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * Balance the amount of red phosphorus --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- data/json/items/chemicals_and_resources.json | 18 +++++- data/json/recipes/ammo/pistol.json | 56 +++++++++---------- data/json/recipes/ammo/rifle.json | 8 +-- data/json/recipes/chem/drugs.json | 2 +- .../json/recipes/recipe_medsandchemicals.json | 46 +++++++++++++++ data/json/requirements/explosives.json | 3 +- 6 files changed, 98 insertions(+), 35 deletions(-) diff --git a/data/json/items/chemicals_and_resources.json b/data/json/items/chemicals_and_resources.json index 946218071ac64..b12fa6ed072e4 100644 --- a/data/json/items/chemicals_and_resources.json +++ b/data/json/items/chemicals_and_resources.json @@ -1934,7 +1934,7 @@ "ammo_type": "components", "category": "chems", "name": { "str_sp": "red phosphorous" }, - "description": "An allotrope of the element phosphorous. It's what you use to light matches, but can also be used in the synthesis of methamphetamine. You could use it to make bombs, and if you were truly desperate you might even be able to use it as a propellant for bullets.", + "description": "An allotrope of the element phosphorous. It's what you use to light matches, but can also be used in the synthesis of methamphetamine. You could use it to make bombs, and if you were truly desperate you might even be able to use it in small portions as a propellant for bullets.", "weight": "10 g", "volume": "5 ml", "//": "Density around 2.2g/cm3, but since it's a powder, it's a bit lower, around 1.8-2.0 g/cm3", @@ -1945,6 +1945,22 @@ "price_postapoc": "2 cent", "stack_size": 25 }, + { + "id": "red_phosphorous_small", + "type": "AMMO", + "ammo_type": "components", + "category": "chems", + "name": { "str_sp": "small portion of red phosphorous" }, + "description": "An allotrope of the element phosphorous. It's what you use to light matches, but can also be used in the synthesis of methamphetamine. You could use it to make bombs, and if you were truly desperate you might even be able to use it as a propellant for bullets.", + "weight": "100 mg", + "volume": "1 ml", + "container": "bottle_plastic_small", + "symbol": "=", + "color": "red", + "price": "50 cent", + "price_postapoc": "2 cent", + "stack_size": 25 + }, { "id": "white_phosphorous", "type": "AMMO", diff --git a/data/json/recipes/ammo/pistol.json b/data/json/recipes/ammo/pistol.json index 5b1ddda248126..50562ba03ebd7 100644 --- a/data/json/recipes/ammo/pistol.json +++ b/data/json/recipes/ammo/pistol.json @@ -1593,7 +1593,7 @@ "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 2 ], [ "ammo_9mm", 1 ] ], "proficiencies": [ { "proficiency": "prof_handloading" } ], - "components": [ [ [ "red_phosphorous", 3 ] ], [ [ "copper", 1 ] ] ] + "components": [ [ [ "red_phosphorous_small", 3 ] ], [ [ "copper", 1 ] ] ] }, { "result": "matchhead_9mmfmj", @@ -1611,7 +1611,7 @@ "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 2 ], [ "ammo_9mm", 1 ] ], "proficiencies": [ { "proficiency": "prof_handloading" } ], - "components": [ [ [ "red_phosphorous", 3 ] ], [ [ "copper", 1 ] ] ] + "components": [ [ [ "red_phosphorous_small", 3 ] ], [ [ "copper", 1 ] ] ] }, { "result": "matchhead_40fmj", @@ -1629,7 +1629,7 @@ "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 4 ] ], "proficiencies": [ { "proficiency": "prof_handloading" } ], - "components": [ [ [ "40_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "red_phosphorous", 3 ] ], [ [ "copper", 1 ] ] ] + "components": [ [ [ "40_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "red_phosphorous_small", 3 ] ], [ [ "copper", 1 ] ] ] }, { "result": "matchhead_40sw", @@ -1647,7 +1647,7 @@ "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 4 ] ], "proficiencies": [ { "proficiency": "prof_handloading" } ], - "components": [ [ [ "40_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "red_phosphorous", 6 ] ], [ [ "copper", 1 ] ] ] + "components": [ [ [ "40_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "red_phosphorous_small", 6 ] ], [ [ "copper", 1 ] ] ] }, { "result": "matchhead_32_acp", @@ -1665,7 +1665,7 @@ "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 2 ], [ "ammo_32", 1 ] ], "proficiencies": [ { "proficiency": "prof_handloading" } ], - "components": [ [ [ "red_phosphorous", 2 ] ], [ [ "copper", 1 ] ] ] + "components": [ [ [ "red_phosphorous_small", 2 ] ], [ [ "copper", 1 ] ] ] }, { "result": "matchhead_32_acp_jhp", @@ -1683,7 +1683,7 @@ "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 2 ], [ "ammo_32", 1 ] ], "proficiencies": [ { "proficiency": "prof_handloading" } ], - "components": [ [ [ "red_phosphorous", 2 ] ], [ [ "copper", 1 ] ] ] + "components": [ [ [ "red_phosphorous_small", 2 ] ], [ [ "copper", 1 ] ] ] }, { "result": "matchhead_38_fmj", @@ -1701,7 +1701,7 @@ "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 2 ], [ "ammo_38spc", 1 ] ], "proficiencies": [ { "proficiency": "prof_handloading" } ], - "components": [ [ [ "red_phosphorous", 3 ] ], [ [ "copper", 1 ] ] ] + "components": [ [ [ "red_phosphorous_small", 3 ] ], [ [ "copper", 1 ] ] ] }, { "result": "matchhead_38_special", @@ -1719,7 +1719,7 @@ "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 2 ], [ "ammo_38spc", 1 ] ], "proficiencies": [ { "proficiency": "prof_handloading" } ], - "components": [ [ [ "red_phosphorous", 3 ] ] ] + "components": [ [ [ "red_phosphorous_small", 3 ] ] ] }, { "result": "matchhead_38_super_fmj", @@ -1737,7 +1737,7 @@ "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 2 ], [ "ammo_38super", 1 ] ], "proficiencies": [ { "proficiency": "prof_handloading" } ], - "components": [ [ [ "red_phosphorous", 4 ] ], [ [ "copper", 1 ] ] ] + "components": [ [ [ "red_phosphorous_small", 4 ] ], [ [ "copper", 1 ] ] ] }, { "result": "matchhead_38_super", @@ -1755,7 +1755,7 @@ "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 2 ], [ "ammo_38super", 1 ] ], "proficiencies": [ { "proficiency": "prof_handloading" } ], - "components": [ [ [ "red_phosphorous", 4 ] ], [ [ "copper", 1 ] ] ] + "components": [ [ [ "red_phosphorous_small", 4 ] ], [ [ "copper", 1 ] ] ] }, { "result": "matchhead_45_acp", @@ -1773,7 +1773,7 @@ "reversible": true, "using": [ [ "bullet_forming", 3 ], [ "ammo_bullet", 4 ] ], "proficiencies": [ { "proficiency": "prof_handloading" } ], - "components": [ [ [ "45_casing", 1 ] ], [ [ "lgpistol_primer", 1 ] ], [ [ "red_phosphorous", 3 ] ], [ [ "copper", 2 ] ] ] + "components": [ [ [ "45_casing", 1 ] ], [ [ "lgpistol_primer", 1 ] ], [ [ "red_phosphorous_small", 3 ] ], [ [ "copper", 2 ] ] ] }, { "result": "matchhead_45_jhp", @@ -1791,7 +1791,7 @@ "reversible": true, "using": [ [ "bullet_forming", 3 ], [ "ammo_bullet", 4 ] ], "proficiencies": [ { "proficiency": "prof_handloading" } ], - "components": [ [ [ "45_casing", 1 ] ], [ [ "lgpistol_primer", 1 ] ], [ [ "red_phosphorous", 5 ] ], [ [ "copper", 1 ] ] ] + "components": [ [ [ "45_casing", 1 ] ], [ [ "lgpistol_primer", 1 ] ], [ [ "red_phosphorous_small", 5 ] ], [ [ "copper", 1 ] ] ] }, { "result": "matchhead_762_25", @@ -1809,7 +1809,7 @@ "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 2 ], [ "ammo_762_25", 1 ] ], "proficiencies": [ { "proficiency": "prof_handloading" } ], - "components": [ [ [ "red_phosphorous", 4 ] ], [ [ "copper", 1 ] ] ] + "components": [ [ [ "red_phosphorous_small", 4 ] ], [ [ "copper", 1 ] ] ] }, { "result": "matchhead_9x18mm", @@ -1827,7 +1827,7 @@ "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 2 ] ], "proficiencies": [ { "proficiency": "prof_handloading" } ], - "components": [ [ [ "9x18mm_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "red_phosphorous", 4 ] ], [ [ "copper", 1 ] ] ] + "components": [ [ [ "9x18mm_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "red_phosphorous_small", 4 ] ], [ [ "copper", 1 ] ] ] }, { "result": "matchhead_9x18mmfmj", @@ -1845,7 +1845,7 @@ "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 2 ] ], "proficiencies": [ { "proficiency": "prof_handloading" } ], - "components": [ [ [ "9x18mm_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "red_phosphorous", 4 ] ], [ [ "copper", 1 ] ] ] + "components": [ [ [ "9x18mm_casing", 1 ] ], [ [ "smpistol_primer", 1 ] ], [ [ "red_phosphorous_small", 4 ] ], [ [ "copper", 1 ] ] ] }, { "result": "matchhead_380_JHP", @@ -1863,7 +1863,7 @@ "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 2 ], [ "ammo_380", 1 ] ], "proficiencies": [ { "proficiency": "prof_handloading" } ], - "components": [ [ [ "red_phosphorous", 3 ] ], [ [ "copper", 1 ] ] ] + "components": [ [ [ "red_phosphorous_small", 3 ] ], [ [ "copper", 1 ] ] ] }, { "result": "matchhead_380_FMJ", @@ -1881,7 +1881,7 @@ "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 2 ], [ "ammo_380", 1 ] ], "proficiencies": [ { "proficiency": "prof_handloading" } ], - "components": [ [ [ "red_phosphorous", 3 ] ], [ [ "copper", 1 ] ] ] + "components": [ [ [ "red_phosphorous_small", 3 ] ], [ [ "copper", 1 ] ] ] }, { "result": "matchhead_357sig_fmj", @@ -1899,7 +1899,7 @@ "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 7 ], [ "ammo_357sig", 1 ] ], "proficiencies": [ { "proficiency": "prof_handloading" } ], - "components": [ [ [ "red_phosphorous", 4 ] ], [ [ "copper", 1 ] ] ] + "components": [ [ [ "red_phosphorous_small", 4 ] ], [ [ "copper", 1 ] ] ] }, { "result": "matchhead_357sig_jhp", @@ -1917,7 +1917,7 @@ "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 8 ], [ "ammo_357sig", 1 ] ], "proficiencies": [ { "proficiency": "prof_handloading" } ], - "components": [ [ [ "red_phosphorous", 5 ] ], [ [ "copper", 1 ] ] ] + "components": [ [ [ "red_phosphorous_small", 5 ] ], [ [ "copper", 1 ] ] ] }, { "result": "matchhead_357mag_fmj", @@ -1935,7 +1935,7 @@ "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 3 ], [ "ammo_357mag", 1 ] ], "proficiencies": [ { "proficiency": "prof_handloading" } ], - "components": [ [ [ "red_phosphorous", 5 ] ], [ [ "copper", 1 ] ] ] + "components": [ [ [ "red_phosphorous_small", 5 ] ], [ [ "copper", 1 ] ] ] }, { "result": "matchhead_357mag_jhp", @@ -1953,7 +1953,7 @@ "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 4 ], [ "ammo_357mag", 1 ] ], "proficiencies": [ { "proficiency": "prof_handloading" } ], - "components": [ [ [ "red_phosphorous", 5 ] ], [ [ "copper", 1 ] ] ] + "components": [ [ [ "red_phosphorous_small", 5 ] ], [ [ "copper", 1 ] ] ] }, { "result": "matchhead_10mm_fmj", @@ -1971,7 +1971,7 @@ "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 3 ], [ "ammo_10mm", 1 ] ], "proficiencies": [ { "proficiency": "prof_handloading" } ], - "components": [ [ [ "red_phosphorous", 3 ] ], [ [ "copper", 1 ] ] ] + "components": [ [ [ "red_phosphorous_small", 3 ] ], [ [ "copper", 1 ] ] ] }, { "result": "matchhead_10mm_jhp", @@ -1989,7 +1989,7 @@ "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 3 ], [ "ammo_10mm", 1 ] ], "proficiencies": [ { "proficiency": "prof_handloading" } ], - "components": [ [ [ "red_phosphorous", 3 ] ], [ [ "copper", 1 ] ] ] + "components": [ [ [ "red_phosphorous_small", 3 ] ], [ [ "copper", 1 ] ] ] }, { "result": "matchhead_45colt_fmj", @@ -2007,7 +2007,7 @@ "reversible": true, "using": [ [ "bullet_forming", 3 ], [ "ammo_bullet", 5 ], [ "ammo_45colt", 1 ] ], "proficiencies": [ { "proficiency": "prof_handloading" } ], - "components": [ [ [ "red_phosphorous", 5 ] ], [ [ "copper", 2 ] ] ] + "components": [ [ [ "red_phosphorous_small", 5 ] ], [ [ "copper", 2 ] ] ] }, { "result": "matchhead_45colt_cowboy", @@ -2025,7 +2025,7 @@ "reversible": true, "using": [ [ "bullet_forming", 3 ], [ "ammo_bullet", 5 ], [ "ammo_45colt", 1 ] ], "proficiencies": [ { "proficiency": "prof_handloading" } ], - "components": [ [ [ "red_phosphorous", 3 ] ] ] + "components": [ [ [ "red_phosphorous_small", 3 ] ] ] }, { "result": "matchhead_45colt_jhp", @@ -2043,7 +2043,7 @@ "reversible": true, "using": [ [ "bullet_forming", 3 ], [ "ammo_bullet", 5 ], [ "ammo_45colt", 1 ] ], "proficiencies": [ { "proficiency": "prof_handloading" } ], - "components": [ [ [ "red_phosphorous", 5 ] ], [ [ "copper", 2 ] ] ] + "components": [ [ [ "red_phosphorous_small", 5 ] ], [ [ "copper", 2 ] ] ] }, { "result": "matchhead_50ae_jhp", @@ -2061,7 +2061,7 @@ "reversible": true, "using": [ [ "bullet_forming", 6 ], [ "ammo_bullet", 8 ] ], "proficiencies": [ { "proficiency": "prof_handloading" } ], - "components": [ [ [ "50ae_casing", 1 ] ], [ [ "lgpistol_primer", 1 ] ], [ [ "red_phosphorous", 16 ] ], [ [ "copper", 5 ] ] ] + "components": [ [ [ "50ae_casing", 1 ] ], [ [ "lgpistol_primer", 1 ] ], [ [ "red_phosphorous_small", 16 ] ], [ [ "copper", 5 ] ] ] }, { "result": "matchhead_50ae_fmj", @@ -2079,6 +2079,6 @@ "reversible": true, "using": [ [ "bullet_forming", 6 ], [ "ammo_bullet", 8 ] ], "proficiencies": [ { "proficiency": "prof_handloading" } ], - "components": [ [ [ "50ae_casing", 1 ] ], [ [ "lgpistol_primer", 1 ] ], [ [ "red_phosphorous", 16 ] ], [ [ "copper", 6 ] ] ] + "components": [ [ [ "50ae_casing", 1 ] ], [ [ "lgpistol_primer", 1 ] ], [ [ "red_phosphorous_small", 16 ] ], [ [ "copper", 6 ] ] ] } ] diff --git a/data/json/recipes/ammo/rifle.json b/data/json/recipes/ammo/rifle.json index a0551a623779f..a5da1a57fd8f7 100644 --- a/data/json/recipes/ammo/rifle.json +++ b/data/json/recipes/ammo/rifle.json @@ -1534,7 +1534,7 @@ "reversible": true, "using": [ [ "bullet_forming", 20 ], [ "ammo_bullet", 1 ], [ "ammo_30carbine", 1 ] ], "proficiencies": [ { "proficiency": "prof_handloading" } ], - "components": [ [ [ "red_phosphorous", 10 ] ], [ [ "copper", 1 ] ] ] + "components": [ [ [ "red_phosphorous_small", 10 ] ], [ [ "copper", 1 ] ] ] }, { "result": "reloaded_30carbine_jsp", @@ -1589,7 +1589,7 @@ "reversible": true, "using": [ [ "bullet_forming", 20 ], [ "ammo_bullet", 1 ], [ "ammo_30carbine", 1 ] ], "proficiencies": [ { "proficiency": "prof_handloading" } ], - "components": [ [ [ "red_phosphorous", 10 ] ], [ [ "copper", 1 ] ] ] + "components": [ [ [ "red_phosphorous_small", 10 ] ], [ [ "copper", 1 ] ] ] }, { "result": "reloaded_123ln", @@ -1987,7 +1987,7 @@ "reversible": true, "using": [ [ "bullet_forming", 3 ], [ "ammo_bullet", 1 ] ], "proficiencies": [ { "proficiency": "prof_handloading" } ], - "components": [ [ [ "22_casing_new", 1 ] ], [ [ "red_phosphorous", 1 ] ], [ [ "copper", 1 ] ] ] + "components": [ [ [ "22_casing_new", 1 ] ], [ [ "red_phosphorous_small", 1 ] ], [ [ "copper", 1 ] ] ] }, { "result": "matchhead_22_lr", @@ -2005,6 +2005,6 @@ "reversible": true, "using": [ [ "bullet_forming", 2 ], [ "ammo_bullet", 1 ] ], "proficiencies": [ { "proficiency": "prof_handloading" } ], - "components": [ [ [ "22_casing_new", 1 ] ], [ [ "red_phosphorous", 1 ] ] ] + "components": [ [ [ "22_casing_new", 1 ] ], [ [ "red_phosphorous_small", 1 ] ] ] } ] diff --git a/data/json/recipes/chem/drugs.json b/data/json/recipes/chem/drugs.json index b6033067e9556..2c91eb4decd72 100644 --- a/data/json/recipes/chem/drugs.json +++ b/data/json/recipes/chem/drugs.json @@ -77,7 +77,7 @@ "components": [ [ [ "dayquil", 15 ] ], [ [ "iodine_crystal", 15 ] ], - [ [ "red_phosphorous", 270 ] ], + [ [ "red_phosphorous", 3 ], [ "red_phosphorous_small", 270 ] ], [ [ "chem_acetone", 1 ] ], [ [ "chem_methanol", 3 ] ], [ [ "lye_powder", 5 ], [ "chem_potassium_hydroxide", 25 ], [ "lye", 1 ], [ "lye_potassium", 1 ] ] diff --git a/data/json/recipes/recipe_medsandchemicals.json b/data/json/recipes/recipe_medsandchemicals.json index b263af4ed6e5e..4b86ec7b6d1a5 100644 --- a/data/json/recipes/recipe_medsandchemicals.json +++ b/data/json/recipes/recipe_medsandchemicals.json @@ -1494,6 +1494,7 @@ "type": "recipe", "activity_level": "LIGHT_EXERCISE", "result": "red_phosphorous", + "id_suffix": "with_white_phosphorous", "charges": 3, "batch_time_factors": [ 95, 1 ], "category": "CC_CHEM", @@ -1505,6 +1506,35 @@ "book_learn": [ [ "textbook_gaswarfare", 2 ], [ "textbook_chemistry", 3 ], [ "adv_chemistry", 3 ], [ "textbook_anarch", 3 ] ], "components": [ [ [ "white_phosphorous", 4 ] ] ] }, + { + "type": "recipe", + "activity_level": "NO_EXERCISE", + "result": "red_phosphorous", + "charges": 1, + "category": "CC_OTHER", + "subcategory": "CSC_OTHER_OTHER", + "skill_used": "chemistry", + "time": "1 s", + "reversible": true, + "autolearn": true, + "tools": [ ], + "components": [ [ [ "red_phosphorous_small", 100 ] ] ] + }, + { + "type": "recipe", + "activity_level": "LIGHT_EXERCISE", + "result": "red_phosphorous_small", + "charges": 1, + "batch_time_factors": [ 60, 5 ], + "category": "CC_CHEM", + "subcategory": "CSC_CHEM_OTHER", + "skill_used": "fabrication", + "time": "10 m", + "autolearn": true, + "qualities": [ { "id": "FINE_GRIND", "level": 1 }, { "id": "CUT", "level": 1 }, { "id": "SIEVE", "level": 1 } ], + "//": "calculation based on https://www.youtube.com/watch?v=5ZrfNAHDjWU; 1 matchbox contains 30 mg phosphorus and 1 unit of phosphor is 100 mg", + "components": [ [ [ "survival_match", 1 ], [ "ref_matches", 3 ], [ "matches", 5 ] ] ] + }, { "type": "recipe", "activity_level": "LIGHT_EXERCISE", @@ -1521,6 +1551,22 @@ "tools": [ [ [ "surface_heat", 50, "LIST" ] ], [ [ "water", 1 ], [ "water_clean", 1 ] ] ], "components": [ [ [ "bone_meal_any", 1, "LIST" ] ], [ [ "material_sand", 3 ] ], [ [ "charcoal", 7 ], [ "coal_lump", 7 ] ] ] }, + { + "type": "recipe", + "activity_level": "LIGHT_EXERCISE", + "result": "white_phosphorous", + "id_suffix": "with_red_phosphorous", + "charges": 4, + "batch_time_factors": [ 95, 1 ], + "category": "CC_CHEM", + "subcategory": "CSC_CHEM_CHEMICALS", + "difficulty": 3, + "skill_used": "chemistry", + "time": "6 m", + "tools": [ [ [ "vac_oven_small", 100 ] ] ], + "book_learn": [ [ "textbook_gaswarfare", 2 ], [ "textbook_chemistry", 3 ], [ "adv_chemistry", 3 ], [ "textbook_anarch", 3 ] ], + "components": [ [ [ "red_phosphorous", 3 ] ] ] + }, { "type": "recipe", "activity_level": "LIGHT_EXERCISE", diff --git a/data/json/requirements/explosives.json b/data/json/requirements/explosives.json index 6b426cbfc1058..3f5254e7c1384 100644 --- a/data/json/requirements/explosives.json +++ b/data/json/requirements/explosives.json @@ -51,7 +51,8 @@ [ [ "chem_black_powder", 90 ], [ "gunpowder", 90 ], - [ "red_phosphorous", 100 ], + [ "red_phosphorous_small", 100 ], + [ "red_phosphorous", 1 ], [ "gunpowder_pistol", 90 ], [ "gunpowder_shotgun", 90 ], [ "gunpowder_magnum_pistol", 80 ], From 5660f1ab542b29ec65074cc35c2668a4866c4e44 Mon Sep 17 00:00:00 2001 From: Anton Simakov <67688115+GuardianDll@users.noreply.github.com> Date: Mon, 24 Jun 2024 07:10:54 +0200 Subject: [PATCH 10/14] fix displayed .223 guns do not have receiver installed (#74736) --- data/json/itemgroups/Weapons_Mods_Ammo/guns_by_calibre.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/data/json/itemgroups/Weapons_Mods_Ammo/guns_by_calibre.json b/data/json/itemgroups/Weapons_Mods_Ammo/guns_by_calibre.json index de3d4d8ff514c..1f1c7bc652072 100644 --- a/data/json/itemgroups/Weapons_Mods_Ammo/guns_by_calibre.json +++ b/data/json/itemgroups/Weapons_Mods_Ammo/guns_by_calibre.json @@ -551,10 +551,10 @@ { "item": "ak556", "variant": "zpapm90", "prob": 10 }, { "item": "bren2_556", "prob": 10 }, { "item": "ak556", "variant": "zpapm90", "prob": 10 }, - { "item": "modular_ar15", "prob": 45 }, + { "group": "modular_ar15", "prob": 45 }, { "item": "ruger_mini", "prob": 9 }, - { "item": "mdrx", "prob": 10 }, - { "item": "cz600", "prob": 10 }, + { "group": "mdrx", "prob": 10 }, + { "group": "cz600", "prob": 10 }, { "group": "nested_ar15_with_kits", "prob": 15 }, { "group": "nested_mdrx_with_kits", "prob": 10 }, { "group": "nested_cz600_with_kits", "prob": 10 }, From d720e220a087932a5749781bbd9a91e99e280902 Mon Sep 17 00:00:00 2001 From: DoctorBoomstick <102766473+DoctorBoomstick@users.noreply.github.com> Date: Mon, 24 Jun 2024 07:19:05 +0200 Subject: [PATCH 11/14] =?UTF-8?q?Miscellaneous=20Clothing=20Disassembly?= =?UTF-8?q?=E2=80=99s:=203=20(#74705)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fixes merge errors. * adds the uncrafts. * removes extra uncraft for briefs. * Update data/json/uncraft/armor/torso.json Co-authored-by: Karol1223 <68503002+Karol1223@users.noreply.github.com> --------- Co-authored-by: Karol1223 <68503002+Karol1223@users.noreply.github.com> --- data/json/uncraft/armor.json | 8 ------- data/json/uncraft/armor/legs.json | 37 +++++++++++++++++++++++++----- data/json/uncraft/armor/torso.json | 8 +++++++ 3 files changed, 39 insertions(+), 14 deletions(-) diff --git a/data/json/uncraft/armor.json b/data/json/uncraft/armor.json index b41b4dec0c5dd..950b9a611a5cc 100644 --- a/data/json/uncraft/armor.json +++ b/data/json/uncraft/armor.json @@ -79,14 +79,6 @@ "qualities": [ { "id": "CUT_FINE", "level": 1 } ], "components": [ [ [ "thread", 60 ] ] ] }, - { - "result": "briefs", - "type": "uncraft", - "activity_level": "LIGHT_EXERCISE", - "time": "30 m", - "qualities": [ { "id": "CUT_FINE", "level": 1 } ], - "components": [ [ [ "thread", 35 ] ] ] - }, { "result": "panties", "type": "uncraft", diff --git a/data/json/uncraft/armor/legs.json b/data/json/uncraft/armor/legs.json index 11af29eb5a2e9..019d15053b0ff 100644 --- a/data/json/uncraft/armor/legs.json +++ b/data/json/uncraft/armor/legs.json @@ -3,24 +3,49 @@ "result": "pants_leather", "type": "uncraft", "activity_level": "LIGHT_EXERCISE", - "time": "10 m", + "time": "5 m", "qualities": [ { "id": "FABRIC_CUT", "level": 1 }, { "id": "CUT", "level": 2 } ], - "components": [ [ [ "sheet_leather", 3 ] ], [ [ "thread", 20 ] ], [ [ "button_steel", 3 ] ] ] + "components": [ [ [ "sheet_leather", 3 ] ], [ [ "leather", 2 ] ], [ [ "thread", 18 ] ], [ [ "button_steel", 3 ] ] ] }, { "result": "shorts", "type": "uncraft", "activity_level": "LIGHT_EXERCISE", - "time": "5 m", - "qualities": [ { "id": "FABRIC_CUT", "level": 1 }, { "id": "CUT", "level": 2 } ], - "components": [ [ [ "sheet_cotton", 3 ] ], [ [ "thread", 15 ] ], [ [ "button_plastic", 3 ] ] ] + "time": "2 m 30 s", + "qualities": [ { "id": "FABRIC_CUT", "level": 1 }, { "id": "CUT", "level": 1 } ], + "//": "Assuming these to be cotton running shorts with an elastic and drawstring closure,.", + "//2": "Every suitable draw string I found, such as here, https://www.amazon.com/Replacement-Drawstrings-Sweatpants-Flexible-Universal/dp/B07ZCTQRVT, is stated to be 51–54 cm in length. We don’t have anything with that exact length, and the idea of sticking in one long string and some short strings to make up the difference seemed stupid, so we’ll hand wave away the exact difference and keep it to a single string.", + "components": [ [ [ "sheet_cotton", 4 ] ], [ [ "cotton_patchwork", 8 ] ], [ [ "thread", 25 ] ], [ [ "string_36", 1 ] ] ] + }, + { + "result": "briefs", + "type": "uncraft", + "activity_level": "LIGHT_EXERCISE", + "time": "2 m", + "qualities": [ { "id": "FABRIC_CUT", "level": 1 }, { "id": "CUT", "level": 1 } ], + "components": [ [ [ "cotton_patchwork", 4 ] ], [ [ "thread", 12 ] ] ] }, { "result": "tights", "type": "uncraft", "activity_level": "LIGHT_EXERCISE", - "time": "3 m", + "time": "2 m", "qualities": [ { "id": "FABRIC_CUT", "level": 1 }, { "id": "CUT", "level": 1 } ], "components": [ [ [ "cotton_patchwork", 20 ] ], [ [ "thread", 14 ] ] ] + }, + { + "result": "shorts_cargo", + "type": "uncraft", + "activity_level": "LIGHT_EXERCISE", + "time": "3 m 20 s", + "qualities": [ { "id": "FABRIC_CUT", "level": 1 }, { "id": "CUT", "level": 1 } ], + "//": "1 plastic button for the fly closure, and another 4 for the various pockets. Assuming 2 of the 6 pockets are open-style hip pockets with no closure, while the other 4 do have.", + "components": [ + [ [ "sheet_cotton", 5 ] ], + [ [ "cotton_patchwork", 20 ] ], + [ [ "thread", 40 ] ], + [ [ "button_plastic", 5 ] ], + [ [ "zipper_short_plastic", 1 ] ] + ] } ] diff --git a/data/json/uncraft/armor/torso.json b/data/json/uncraft/armor/torso.json index 21b40edee48a2..02dd1ac98bddf 100644 --- a/data/json/uncraft/armor/torso.json +++ b/data/json/uncraft/armor/torso.json @@ -199,5 +199,13 @@ "time": "4 m", "qualities": [ { "id": "FABRIC_CUT", "level": 1 }, { "id": "CUT", "level": 2 } ], "components": [ [ [ "felt_patch", 38 ] ], [ [ "sheet_felt", 20 ] ], [ [ "button_plastic", 5 ] ] ] + }, + { + "result": "cheerleader_top_short", + "type": "uncraft", + "activity_level": "LIGHT_EXERCISE", + "time": "2 m 30 s", + "qualities": [ { "id": "FABRIC_CUT", "level": 1 }, { "id": "CUT", "level": 1 } ], + "components": [ [ [ "sheet_cotton", 2 ] ], [ [ "cotton_patchwork", 3 ] ], [ [ "thread", 9 ] ] ] } ] From 1b599f02227f6c2ffa9dff02d9a12262849c2f7b Mon Sep 17 00:00:00 2001 From: BalthazarArgall <116303491+BalthazarArgall@users.noreply.github.com> Date: Mon, 24 Jun 2024 07:20:28 +0200 Subject: [PATCH 12/14] Add a teeth necklace (#74692) * initial commit * finish the things * punify the description * less player-centric description * Update data/json/items/armor/jewelry.json Co-authored-by: DoctorBoomstick <102766473+DoctorBoomstick@users.noreply.github.com> * remove recipe nest --------- Co-authored-by: DoctorBoomstick <102766473+DoctorBoomstick@users.noreply.github.com> --- data/json/items/armor/jewelry.json | 22 ++++++++++++++++++++++ data/json/recipes/armor/jewelry.json | 20 ++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/data/json/items/armor/jewelry.json b/data/json/items/armor/jewelry.json index f4610d49b7e26..8f53b942dd477 100644 --- a/data/json/items/armor/jewelry.json +++ b/data/json/items/armor/jewelry.json @@ -4821,5 +4821,27 @@ "symbol": ".", "color": "white", "flags": [ "FANCY", "NO_WEAR_EFFECT" ] + }, + { + "id": "necklace_teeth", + "type": "ARMOR", + "name": { "str": "teeth necklace" }, + "description": "A simple teeth necklace, this is sure to add some bite to an outfit.", + "symbol": "u", + "color": "white", + "price": "10 USD", + "price_postapoc": "10 USD", + "weight": "42 g", + "volume": "30 ml", + "material": "bone", + "flags": [ "NO_WEAR_EFFECT", "BELTED" ], + "variants": [ + { + "id": "necklace_teeth_monster", + "name": { "str": "monster teeth necklace" }, + "description": "The teeth hanging from this one look alien, with a hypnotizing, iridescent shine.", + "append": true + } + ] } ] diff --git a/data/json/recipes/armor/jewelry.json b/data/json/recipes/armor/jewelry.json index 63efaf19718a2..c0704eca99e6a 100644 --- a/data/json/recipes/armor/jewelry.json +++ b/data/json/recipes/armor/jewelry.json @@ -121,5 +121,25 @@ "qualities": [ { "id": "DRILL", "level": 1 }, { "id": "FILE", "level": 1 }, { "id": "SAW_M", "level": 1 } ], "//3": "Metal sawing for removing the base, rim, and primer, and filing for smoothing down the resulting edges.", "components": [ [ [ "wire", 1 ] ] ] + }, + { + "type": "recipe", + "activity_level": "NO_EXERCISE", + "result": "necklace_teeth", + "variant": "necklace_teeth_monster", + "category": "CC_OTHER", + "subcategory": "CSC_OTHER_OTHER", + "skill_used": "fabrication", + "difficulty": 1, + "skills_required": [ [ "fabrication", 1 ] ], + "time": "15 m", + "autolearn": true, + "proficiencies": [ { "proficiency": "prof_gem_setting" } ], + "//": "Pliers to cut and manipulate the wire.", + "tools": [ [ [ "pliers", -1 ] ] ], + "using": [ [ "cordage_short", 1 ] ], + "//2": "The filing quality is only there to blunt the 'impossibly-sharp' monster teeth, probably not needed for other teeth.", + "qualities": [ { "id": "FILE", "level": 1 } ], + "components": [ [ [ "wire", 1 ] ], [ [ "nm_teeth", 1 ] ] ] } ] From 6cc49a368116d7e62de02817a1689b799a36cd2a Mon Sep 17 00:00:00 2001 From: PatrikLundell Date: Mon, 24 Jun 2024 10:17:28 +0200 Subject: [PATCH 13/14] Added roofs to greenhouses --- .../mapgen/nested/nested_chunks_roof.json | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/data/json/mapgen/nested/nested_chunks_roof.json b/data/json/mapgen/nested/nested_chunks_roof.json index 314880b10c5ac..93c9edc8e0d2c 100644 --- a/data/json/mapgen/nested/nested_chunks_roof.json +++ b/data/json/mapgen/nested/nested_chunks_roof.json @@ -122,7 +122,7 @@ "xxxxx" ], "flags": [ "ERASE_ALL_BEFORE_PLACING_TERRAIN" ], - "terrain": { "_": "t_floor_primitive", "+": "t_chickenwire_gate_c", "x": "t_chickenwire_fence", "t": "t_dirtfloor" }, + "terrain": { "_": "t_dirtfloor_no_roof", "+": "t_chickenwire_gate_c", "x": "t_chickenwire_fence", "t": "t_dirtfloor_no_roof" }, "furniture": { "t": "f_table" }, "place_loot": [ { "item": "straw_pile", "x": [ 1, 3 ], "y": 3, "chance": 75, "repeat": [ 1, 3 ] }, @@ -330,6 +330,23 @@ ] } }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "roof_6x6_greenhouse_roof", + "object": { + "mapgensize": [ 6, 6 ], + "rows": [ + "RRRRRR", + "RRRRRR", + "RRRRRR", + "RRRRRR", + "RRRRRR", + "RRRRRR" + ], + "terrain": { "R": "t_glass_roof" } + } + }, { "type": "mapgen", "method": "json", @@ -352,7 +369,8 @@ "$": "t_wall_glass" }, "furniture": { "S": "f_statue" }, - "sealed_item": { "1": { "item": { "item": "seed_rose" }, "furniture": "f_planter_mature" } } + "sealed_item": { "1": { "item": { "item": "seed_rose" }, "furniture": "f_planter_mature" } }, + "place_nested": [ { "chunks": [ "roof_6x6_greenhouse_roof" ], "x": 0, "y": 0, "z": 1 } ] } }, { @@ -377,7 +395,8 @@ "$": "t_wall_glass" }, "sealed_item": { "1": { "item": { "item": "seed_sugar_beet" }, "furniture": "f_planter_mature" } }, - "furniture": { "S": "f_statue", "b": "f_bench" } + "furniture": { "S": "f_statue", "b": "f_bench" }, + "place_nested": [ { "chunks": [ "roof_6x6_greenhouse_roof" ], "x": 0, "y": 0, "z": 1 } ] } }, { @@ -406,7 +425,8 @@ { "item": "stepladder", "x": 3, "y": 5, "chance": 75, "repeat": [ 1, 3 ] }, { "item": "seed_weed", "x": [ 2, 3 ], "y": [ 2, 3 ], "chance": 75, "repeat": [ 1, 3 ] } ], - "sealed_item": { "1": { "item": { "item": "seed_weed" }, "furniture": "f_planter_harvest" } } + "sealed_item": { "1": { "item": { "item": "seed_weed" }, "furniture": "f_planter_harvest" } }, + "place_nested": [ { "chunks": [ "roof_6x6_greenhouse_roof" ], "x": 0, "y": 0, "z": 1 } ] } }, { From 45f9e31d26a2ec0270622c1a47f7faf2edb935cb Mon Sep 17 00:00:00 2001 From: PatrikLundell Date: Mon, 24 Jun 2024 16:06:10 +0200 Subject: [PATCH 14/14] Added roofs to tents and desolate barns (#74737) * Parking half done work * Roofs on outdoor locations and desolate bans --- data/json/mapgen/abandoned_barn.json | 398 +++++++++++++++++- .../mapgen/hells_raiders/bandit_camp.json | 11 +- .../hells_raiders/bandit_work_camp.json | 13 +- .../mapgen/nested/rural_outdoors_nested.json | 71 +++- .../json/mapgen/nested/strip_mall_nested.json | 90 +++- .../mapgen_palettes/abandoned_barn_p.json | 3 + data/json/mapgen_palettes/mil_surplus.json | 20 +- 7 files changed, 559 insertions(+), 47 deletions(-) diff --git a/data/json/mapgen/abandoned_barn.json b/data/json/mapgen/abandoned_barn.json index d07ad501fed07..d5c355ae8a29f 100644 --- a/data/json/mapgen/abandoned_barn.json +++ b/data/json/mapgen/abandoned_barn.json @@ -1,4 +1,39 @@ [ + { + "nested_mapgen_id": "desolatebarn_1_roof", + "type": "mapgen", + "method": "json", + "object": { + "mapgensize": [ 24, 24 ], + "rows": [ + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " .......... ", + " .......... ", + " .......... ", + " .......... ", + " .......... ", + " .......... ", + " .......... ", + " .......... ", + " .......... ", + " .......... ", + " .......... ", + " ", + " ", + " " + ], + "nested": { ".": { "chunks": [ "desolate_shingle_roof_chunk" ] } } + } + }, { "om_terrain": "desolatebarn", "type": "mapgen", @@ -45,10 +80,46 @@ "place_nested": [ { "chunks": [ [ "ruins_4x4_front", 60 ], [ "ruins_4x4_junk", 40 ] ], "x": 6, "y": 11 }, { "chunks": [ [ "null", 60 ], [ "ruins_4x4_junk", 30 ], [ "ruins_4x4_camp", 10 ] ], "x": 10, "y": 16 }, - { "chunks": [ [ "null", 70 ], [ "ruins_8x8_yard", 30 ] ], "x": 16, "y": 10 } + { "chunks": [ [ "null", 70 ], [ "ruins_8x8_yard", 30 ] ], "x": 16, "y": 10 }, + { "chunks": [ "desolatebarn_1_roof" ], "x": 0, "y": 0, "z": 1 } ] } }, + { + "method": "json", + "nested_mapgen_id": "desolatebarn_2_roof", + "type": "mapgen", + "object": { + "mapgensize": [ 24, 24 ], + "rows": [ + " ", + " ", + " ", + " .......... ", + " .......... ", + " .......... ", + " .......... ", + " .......... ", + " .......... ", + " .......... ", + " .......... ", + " .......... ", + " .......... ", + " .......... ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " + ], + "nested": { ".": { "chunks": [ "desolate_shingle_roof_chunk" ] } } + } + }, { "method": "json", "om_terrain": "desolatebarn", @@ -85,7 +156,45 @@ "palettes": [ "desolatebarn_palette" ], "flags": [ "ERASE_ALL_BEFORE_PLACING_TERRAIN" ], "place_rubble": [ { "x": 10, "y": 5 }, { "x": 11, "y": 5 }, { "x": 11, "y": 8 } ], - "place_nested": [ { "chunks": [ [ "null", 80 ], [ "ruins_8x8_yard", 20 ] ], "x": [ 0, 15 ], "y": 16 } ] + "place_nested": [ + { "chunks": [ [ "null", 80 ], [ "ruins_8x8_yard", 20 ] ], "x": [ 0, 15 ], "y": 16 }, + { "chunks": [ "desolatebarn_2_roof" ], "x": 0, "y": 0, "z": 1 } + ] + } + }, + { + "method": "json", + "nested_mapgen_id": "desolatebarn_3_roof", + "type": "mapgen", + "object": { + "mapgensize": [ 24, 24 ], + "rows": [ + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " .......... ", + " ...... .......... ", + " ..... ......... ", + " ..... ......... ", + " ...... .......... ", + " ... .. .......... ", + " .... . ........ ", + " . .. ...... .. ", + " .......... ", + " ........ ", + " ... .. ... ", + " ..... ... ", + " . ..... . ", + " ", + " ", + " " + ], + "nested": { ".": { "chunks": [ "desolate_shingle_roof_chunk" ] } } } }, { @@ -142,7 +251,45 @@ "P": { "items": { "item": "farming_seeds", "chance": 100 }, "furniture": "f_plant_seedling" } }, "place_monster": [ { "monster": "mon_cat", "chance": 30, "x": 19, "y": 10 } ], - "place_nested": [ { "chunks": [ [ "ruins_4x4_front", 80 ], [ "ruins_4x4_junk", 20 ] ], "x": 15, "y": 11 } ] + "place_nested": [ + { "chunks": [ [ "ruins_4x4_front", 80 ], [ "ruins_4x4_junk", 20 ] ], "x": 15, "y": 11 }, + { "chunks": [ "desolatebarn_3_roof" ], "x": 0, "y": 0, "z": 1 } + ] + } + }, + { + "method": "json", + "nested_mapgen_id": "desolatebarn_4_roof", + "type": "mapgen", + "object": { + "mapgensize": [ 24, 24 ], + "rows": [ + " ", + " ", + " ........ ", + " . . . ....... ", + " ...... ......... ", + " ...... ......... ", + " ..... ...... .. ", + " ..... ", + " ...... ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " + ], + "nested": { ".": { "chunks": [ "desolate_shingle_roof_chunk" ] } } } }, { @@ -187,7 +334,46 @@ { "chance": 20, "item": "hand_tools", "x": 6, "y": 7 } ], "place_rubble": [ { "x": [ 17, 18 ], "y": 2 }, { "x": 18, "y": 3 }, { "x": 6, "y": 3 } ], - "place_nested": [ { "chunks": [ [ "null", 70 ], [ "ruins_8x8_yard", 30 ] ], "x": 8, "y": 10 } ] + "place_nested": [ + { "chunks": [ [ "null", 70 ], [ "ruins_8x8_yard", 30 ] ], "x": 8, "y": 10 }, + { "chunks": [ "desolatebarn_4_roof" ], "x": 0, "y": 0, "z": 1 } + ] + } + }, + { + "method": "json", + "nested_mapgen_id": "desolatebarn_5_roof", + "//": "barn with chance of spawning antique gun", + "type": "mapgen", + "object": { + "mapgensize": [ 24, 24 ], + "rows": [ + " ", + " ", + " ", + " ", + " ", + " . ...... .. ", + " ............ ", + " ............ ", + " ............ ", + " ............ ", + " ........... ", + " ............ ", + " ............ ", + " ........... ", + " ........... ", + " ............ ", + " ............ ", + " ........... ", + " .. ..... ... ", + " ", + " ", + " ", + " ", + " " + ], + "nested": { ".": { "chunks": [ "desolate_shingle_roof_chunk" ] } } } }, { @@ -247,10 +433,47 @@ "place_nested": [ { "chunks": [ [ "ruins_4x4_front", 60 ], [ "ruins_4x4_junk", 40 ] ], "x": 11, "y": 6 }, { "chunks": [ [ "null", 80 ], [ "ruins_4x4_junk", 20 ] ], "x": 8, "y": 10 }, - { "chunks": [ [ "null", 60 ], [ "ruins_4x4_camp", 30 ], [ "ruins_4x4_NPCs", 10 ] ], "x": 13, "y": 10 } + { "chunks": [ [ "null", 60 ], [ "ruins_4x4_camp", 30 ], [ "ruins_4x4_NPCs", 10 ] ], "x": 13, "y": 10 }, + { "chunks": [ "desolatebarn_5_roof" ], "x": 0, "y": 0, "z": 1 } ] } }, + { + "method": "json", + "nested_mapgen_id": "desolatebarn_6_roof", + "//": "Barn with chance of drug stash", + "type": "mapgen", + "object": { + "mapgensize": [ 24, 24 ], + "rows": [ + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " . . . ..... ", + " .............. ", + " ................ ", + " ........... ... ", + " ................ ", + " ................ ", + " ................ ", + " ............... ", + " ............... ", + " . ... .... . .. ", + " ", + " ", + " ", + " ", + " ", + " ", + " " + ], + "nested": { ".": { "chunks": [ "desolate_shingle_roof_chunk" ] } } + } + }, { "method": "json", "om_terrain": "desolatebarn", @@ -296,11 +519,48 @@ ], "place_rubble": [ { "repeat": [ 5, 40 ], "x": [ 4, 19 ], "y": [ 7, 16 ] } ], "place_nested": [ - { "chunks": [ [ "null", 60 ], [ "ruins_4x4_junk", 40 ] ], "x": 9, "y": 8 }, - { "chunks": [ [ "null", 80 ], [ "ruins_4x4_camp", 20 ] ], "x": 5, "y": 8 } + { "chunks": [ [ "null", 60 ], [ "ruins_4x4_junk", 40 ] ], "x": 10, "y": 8 }, + { "chunks": [ [ "null", 80 ], [ "ruins_4x4_camp", 20 ] ], "x": 5, "y": 8 }, + { "chunks": [ "desolatebarn_6_roof" ], "x": 0, "y": 0, "z": 1 } ] } }, + { + "method": "json", + "nested_mapgen_id": "desolatebarn_7_roof", + "//": "Barn with a plant growing in it", + "type": "mapgen", + "object": { + "mapgensize": [ 24, 24 ], + "rows": [ + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ..... ", + " .... ", + " .. . ", + " .... ", + " .... ", + " .... ", + " . ", + " ", + " " + ], + "nested": { ".": { "chunks": [ "desolate_shingle_roof_chunk" ] } } + } + }, { "method": "json", "om_terrain": "desolatebarn", @@ -350,10 +610,47 @@ "place_rubble": [ { "repeat": [ 0, 20 ], "x": [ 5, 9 ], "y": [ 15, 21 ] } ], "place_nested": [ { "chunks": [ [ "null", 85 ], [ "ruins_8x8_yard", 15 ] ], "x": 4, "y": 5 }, - { "chunks": [ [ "null", 85 ], [ "ruins_8x8_yard", 15 ] ], "x": 11, "y": 13 } + { "chunks": [ [ "null", 85 ], [ "ruins_8x8_yard", 15 ] ], "x": 11, "y": 13 }, + { "chunks": [ "desolatebarn_7_roof" ], "x": 0, "y": 0, "z": 1 } ] } }, + { + "method": "json", + "nested_mapgen_id": "desolatebarn_8_roof", + "//": "barn with a small shelter inside. NOTE: TK - high chance of a survivor spawning in this map.", + "type": "mapgen", + "object": { + "mapgensize": [ 24, 24 ], + "rows": [ + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " .......... ", + " .......... ", + " ............. ", + " ............. ", + " ............. ", + " ............. ", + " ............. ", + " ............. ", + " ............. ", + " .......... ", + " .......... ", + " ", + " ", + " ", + " ", + " " + ], + "nested": { ".": { "chunks": [ "desolate_shingle_roof_chunk" ] } } + } + }, { "method": "json", "om_terrain": "desolatebarn", @@ -401,7 +698,46 @@ { "chance": 25, "item": "trash", "x": 16, "y": 10 } ], "place_rubble": [ { "repeat": [ 0, 80 ], "x": [ 11, 20 ], "y": [ 8, 18 ] }, { "repeat": [ 0, 15 ], "x": [ 8, 10 ], "y": [ 10, 16 ] } ], - "place_nested": [ { "chunks": [ [ "null", 40 ], [ "ruins_4x4_camp", 20 ], [ "ruins_4x4_NPCs", 40 ] ], "x": 12, "y": 11 } ] + "place_nested": [ + { "chunks": [ [ "null", 40 ], [ "ruins_4x4_camp", 20 ], [ "ruins_4x4_NPCs", 40 ] ], "x": 12, "y": 11 }, + { "chunks": [ "desolatebarn_8_roof" ], "x": 0, "y": 0, "z": 1 } + ] + } + }, + { + "method": "json", + "nested_mapgen_id": "desolatebarn_9_roof", + "//": "Fairly intact barn with a well", + "type": "mapgen", + "object": { + "mapgensize": [ 24, 24 ], + "rows": [ + " ", + " ", + " ", + " ", + " ", + " ", + " . . ....... ", + " ........... ", + " ............ ", + " ............ ", + " ............. ", + " ............. ", + " ............. ", + " ............. ", + " ............. ", + " ............ ", + " ...... .... . ", + " ", + " ", + " ", + " ", + " ", + " ", + " " + ], + "nested": { ".": { "chunks": [ "desolate_shingle_roof_chunk" ] } } } }, { @@ -458,7 +794,46 @@ { "chance": 10, "item": "plumbing_bulk", "x": 17, "y": 14 }, { "chance": 10, "item": "hardware_bulk", "x": 17, "y": 15 } ], - "place_nested": [ { "chunks": [ [ "null", 40 ], [ "ruins_4x4_camp", 40 ], [ "ruins_4x4_NPCs", 20 ] ], "x": 8, "y": 8 } ] + "place_nested": [ + { "chunks": [ [ "null", 40 ], [ "ruins_4x4_camp", 40 ], [ "ruins_4x4_NPCs", 20 ] ], "x": 8, "y": 8 }, + { "chunks": [ "desolatebarn_9_roof" ], "x": 0, "y": 0, "z": 1 } + ] + } + }, + { + "method": "json", + "nested_mapgen_id": "desolatebarn_10_roof", + "//": "Fairly intact barn with a tractor and fenced off animal areas", + "type": "mapgen", + "object": { + "mapgensize": [ 24, 24 ], + "rows": [ + " ", + " ", + " ", + " ", + " ", + " .. ..... .. ", + " ........... ", + " ............. ", + " ............ ", + " ............. ", + " ............ ", + " ............. ", + " ............ ", + " .. . ... . ", + " ", + " ", + " ", + " .... ... ", + " .... .... ", + " .... .... ", + " ... .... ", + " .... .... ", + " .. . .... ", + " " + ], + "nested": { ".": { "chunks": [ "desolate_shingle_roof_chunk" ] } } } }, { @@ -514,7 +889,8 @@ { "repeat": [ 0, 2 ], "x": 6, "y": [ 14, 16 ] }, { "repeat": [ 0, 2 ], "x": 18, "y": [ 14, 16 ] }, { "repeat": [ 0, 3 ], "x": [ 10, 14 ], "y": 22 } - ] + ], + "place_nested": [ { "chunks": [ "desolatebarn_10_roof" ], "x": 0, "y": 0, "z": 1 } ] } } ] diff --git a/data/json/mapgen/hells_raiders/bandit_camp.json b/data/json/mapgen/hells_raiders/bandit_camp.json index 5558a477acec2..d7d1c2caebc01 100644 --- a/data/json/mapgen/hells_raiders/bandit_camp.json +++ b/data/json/mapgen/hells_raiders/bandit_camp.json @@ -125,12 +125,12 @@ " -,,,5-------------,,,- ... ", " -,,,,,,,,,,,,,,,,,,,,-............ ", " -,,,,,,,,,,,,,,,,,,,,- ... ", - " --,,,,,,,,,,,,,,,,,,-- ä ä . ", + " --,,,,,,,,,,,,,,,,,,-- . ", + " -,,,,,,,,,,,,,,,,,,- . ", " -,,,,,,,,,,,,,,,,,,- . ", " -,,,,,,,,,,,,,,,,,,- . ", " -,,,,,,,,,,,,,,,,,,- . ", " -,,,,,,,,,,,,,,,,,,- . ", - " -,,,,,,,,,,,,,,,,,,- ä ä . ", " --,,,,,,,,,,,,,,,,,,-- . ", " -,,,,,,,,,,,,,,,,,,,,- . ", " -,,,,,,,,,,,,,,,,,,,,- . ", @@ -139,7 +139,7 @@ " . .. ", " . ", " . ", - " . Ä Ä ", + " . ", " . .. ", " . .. ", " .. ,,,,,,, . ", @@ -148,7 +148,7 @@ " ,,,,,,, . ", " ,,,,,,, . ", " .. ,,,,,,, . ", - " .. Ä Ä ,,,,,,, . ", + " .. ,,,,,,, . ", " . ,,,,,,, . ", " . ,,,,,,, . ", " . ,,,,,,, . ", @@ -166,8 +166,7 @@ ], "palettes": [ "roof_palette" ], "items": { ",": { "item": "roof_trash", "chance": 5 } }, - "terrain": { ",": "t_shingle_flat_roof", ".": "t_flat_roof" }, - "nested": { "Ä": { "chunks": [ "tent_5x5_roof" ] }, "ä": { "chunks": [ "tent_3x3_roof" ] } } + "terrain": { ",": "t_shingle_flat_roof", ".": "t_flat_roof" } } } ] diff --git a/data/json/mapgen/hells_raiders/bandit_work_camp.json b/data/json/mapgen/hells_raiders/bandit_work_camp.json index e981b8acac2b0..4149f8d0ecb69 100644 --- a/data/json/mapgen/hells_raiders/bandit_work_camp.json +++ b/data/json/mapgen/hells_raiders/bandit_work_camp.json @@ -170,18 +170,18 @@ " ", " ", " ", - " Ä Ä ", + " ", + " ################### ", + " ################### ", + " ################### ", + " ################### ", " ################### ", " ################### ", " ################### ", " ################### ", - " ################### Ä ", - " ################### Ä ", " ################### ", - " ################### Ä ", " ################### ", " ################### ", - " ################### Ä ", " ################### ", " ################### ", " ################### ", @@ -192,8 +192,7 @@ " ", " " ], - "terrain": { "#": "t_tar_flat_roof" }, - "nested": { "Ä": { "chunks": [ "tent_5x5_roof" ] } } + "terrain": { "#": "t_tar_flat_roof" } } } ] diff --git a/data/json/mapgen/nested/rural_outdoors_nested.json b/data/json/mapgen/nested/rural_outdoors_nested.json index 8712cc5ec2881..302a4c2a8643d 100644 --- a/data/json/mapgen/nested/rural_outdoors_nested.json +++ b/data/json/mapgen/nested/rural_outdoors_nested.json @@ -1,4 +1,10 @@ [ + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "desolate_shingle_roof_chunk", + "object": { "mapgensize": [ 1, 1 ], "rows": [ "." ], "terrain": { ".": [ [ "t_shingle_flat_roof", 90 ], [ "t_open_air", 10 ] ] } } + }, { "type": "mapgen", "method": "json", @@ -64,6 +70,7 @@ "__R_" ], "palettes": [ "desolatebarn_palette" ], + "terrain": { "^": "t_dirtfloor" }, "items": { "^": { "item": "hardware", "chance": 10 }, "R": { "item": "hardware", "chance": 25 } }, "place_monster": [ { "monster": "mon_dog_skeleton", "chance": 60, "x": 2, "y": 1 } ], "flags": [ "ALLOW_TERRAIN_UNDER_OTHER_DATA" ] @@ -100,6 +107,7 @@ "_mg^" ], "palettes": [ "desolatebarn_palette" ], + "terrain": { "^": "t_dirtfloor" }, "items": { "^": { "item": "hardware", "chance": 10 } }, "flags": [ "ALLOW_TERRAIN_UNDER_OTHER_DATA" ] } @@ -527,7 +535,7 @@ "type": "mapgen", "method": "json", "nested_mapgen_id": "ruins_8x8_yard", - "//": "yard with shed", + "//": "yard with ruined shed", "object": { "mapgensize": [ 8, 8 ], "rotation": [ 0, 3 ], @@ -546,6 +554,26 @@ "items": { "r": { "item": "hardware", "chance": 10 } } } }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "small_camp_8x8_tent_roof", + "//": "a tent and firepit", + "object": { + "mapgensize": [ 8, 8 ], + "rows": [ + " RRR ", + " RRR ", + " RRR ", + " ", + " ", + " ", + " ", + " " + ], + "terrain": { "R": "t_canvas_roof" } + } + }, { "type": "mapgen", "method": "json", @@ -565,14 +593,15 @@ " " ], "flags": [ "ERASE_ALL_BEFORE_PLACING_TERRAIN" ], - "terrain": { "k": "t_trunk" }, + "terrain": { "#": "t_dirt", "x": "t_dirt", "+": "t_dirt", "b": "t_dirt", "k": "t_trunk" }, "furniture": { "#": "f_canvas_wall", "x": "f_groundsheet", "+": "f_canvas_door", "b": "f_firering" }, "place_items": [ { "item": "cannedfood", "x": 3, "y": 1, "chance": 75 }, { "item": "cannedfood", "x": 3, "y": 1, "chance": 75 }, { "item": "camping", "x": 1, "y": 5, "chance": 30, "repeat": [ 1, 3 ] }, { "item": "stash_wood", "x": 3, "y": 6, "chance": 100, "repeat": [ 6, 10 ] } - ] + ], + "place_nested": [ { "chunks": [ "small_camp_8x8_tent_roof" ], "x": 0, "y": 0, "z": 1 } ] } }, { @@ -623,7 +652,8 @@ "#+#" ], "flags": [ "ERASE_ALL_BEFORE_PLACING_TERRAIN" ], - "furniture": { "#": "f_canvas_wall", "x": "f_groundsheet", "+": "f_canvas_door" } + "furniture": { "#": "f_canvas_wall", "x": "f_groundsheet", "+": "f_canvas_door" }, + "place_nested": [ { "chunks": [ "tent_3x3_roof" ], "x": 0, "y": 0, "z": 1 } ] } }, { @@ -639,7 +669,8 @@ "###" ], "flags": [ "ERASE_ALL_BEFORE_PLACING_TERRAIN" ], - "furniture": { "#": "f_canvas_wall", "x": "f_groundsheet", "+": "f_canvas_door" } + "furniture": { "#": "f_canvas_wall", "x": "f_groundsheet", "+": "f_canvas_door" }, + "place_nested": [ { "chunks": [ "tent_3x3_roof" ], "x": 0, "y": 0, "z": 1 } ] } }, { @@ -655,7 +686,8 @@ "###" ], "flags": [ "ERASE_ALL_BEFORE_PLACING_TERRAIN" ], - "furniture": { "#": "f_canvas_wall", "x": "f_groundsheet", "+": "f_canvas_door" } + "furniture": { "#": "f_canvas_wall", "x": "f_groundsheet", "+": "f_canvas_door" }, + "place_nested": [ { "chunks": [ "tent_3x3_roof" ], "x": 0, "y": 0, "z": 1 } ] } }, { @@ -671,7 +703,8 @@ "###" ], "flags": [ "ERASE_ALL_BEFORE_PLACING_TERRAIN" ], - "furniture": { "#": "f_canvas_wall", "x": "f_groundsheet", "+": "f_canvas_door" } + "furniture": { "#": "f_canvas_wall", "x": "f_groundsheet", "+": "f_canvas_door" }, + "place_nested": [ { "chunks": [ "tent_3x3_roof" ], "x": 0, "y": 0, "z": 1 } ] } }, { @@ -705,7 +738,8 @@ "##+##" ], "flags": [ "ERASE_ALL_BEFORE_PLACING_TERRAIN" ], - "furniture": { "#": "f_large_canvas_wall", "X": "f_center_groundsheet", "x": "f_large_groundsheet", "+": "f_large_canvas_door" } + "furniture": { "#": "f_large_canvas_wall", "X": "f_center_groundsheet", "x": "f_large_groundsheet", "+": "f_large_canvas_door" }, + "place_nested": [ { "chunks": [ "tent_5x5_roof" ], "x": 0, "y": 0, "z": 1 } ] } }, { @@ -723,13 +757,15 @@ "#####" ], "flags": [ "ERASE_ALL_BEFORE_PLACING_TERRAIN" ], - "furniture": { "#": "f_large_canvas_wall", "X": "f_center_groundsheet", "x": "f_large_groundsheet", "+": "f_large_canvas_door" } + "furniture": { "#": "f_large_canvas_wall", "X": "f_center_groundsheet", "x": "f_large_groundsheet", "+": "f_large_canvas_door" }, + "place_nested": [ { "chunks": [ "tent_5x5_roof" ], "x": 0, "y": 0, "z": 1 } ] } }, { "type": "mapgen", "method": "json", "nested_mapgen_id": "leather_tent_5x5_S", + "//": "Canvas roof since we don't have a skin/leather one", "object": { "mapgensize": [ 5, 5 ], "rotation": [ 0, 3 ], @@ -746,7 +782,8 @@ "X": "f_skin_center_groundsheet", "x": "f_large_skin_groundsheet", "+": "f_large_skin_door" - } + }, + "place_nested": [ { "chunks": [ "tent_5x5_roof" ], "x": 0, "y": 0, "z": 1 } ] } }, { @@ -764,7 +801,8 @@ "#####" ], "flags": [ "ERASE_ALL_BEFORE_PLACING_TERRAIN" ], - "furniture": { "#": "f_large_canvas_wall", "X": "f_center_groundsheet", "x": "f_large_groundsheet", "+": "f_large_canvas_door" } + "furniture": { "#": "f_large_canvas_wall", "X": "f_center_groundsheet", "x": "f_large_groundsheet", "+": "f_large_canvas_door" }, + "place_nested": [ { "chunks": [ "tent_5x5_roof" ], "x": 0, "y": 0, "z": 1 } ] } }, { @@ -782,13 +820,15 @@ "#####" ], "flags": [ "ERASE_ALL_BEFORE_PLACING_TERRAIN" ], - "furniture": { "#": "f_large_canvas_wall", "X": "f_center_groundsheet", "x": "f_large_groundsheet", "+": "f_large_canvas_door" } + "furniture": { "#": "f_large_canvas_wall", "X": "f_center_groundsheet", "x": "f_large_groundsheet", "+": "f_large_canvas_door" }, + "place_nested": [ { "chunks": [ "tent_5x5_roof" ], "x": 0, "y": 0, "z": 1 } ] } }, { "type": "mapgen", "method": "json", "nested_mapgen_id": "tent_b_3x3_S", + "//": "No roof due to the ruined state. Could make chunks to sync roof and wall/floor, but too insignificant to bother", "object": { "mapgensize": [ 3, 3 ], "rotation": [ 0, 3 ], @@ -810,6 +850,7 @@ "type": "mapgen", "method": "json", "nested_mapgen_id": "tent_b_3x3_E", + "//": "No roof due to the ruined state. Could make chunks to sync roof and wall/floor, but too insignificant to bother", "object": { "mapgensize": [ 3, 3 ], "rotation": [ 0, 3 ], @@ -831,6 +872,7 @@ "type": "mapgen", "method": "json", "nested_mapgen_id": "tent_b_3x3_N", + "//": "No roof due to the ruined state. Could make chunks to sync roof and wall/floor, but too insignificant to bother", "object": { "mapgensize": [ 3, 3 ], "rotation": [ 0, 3 ], @@ -852,6 +894,7 @@ "type": "mapgen", "method": "json", "nested_mapgen_id": "tent_b_3x3_W", + "//": "No roof due to the ruined state. Could make chunks to sync roof and wall/floor, but too insignificant to bother", "object": { "mapgensize": [ 3, 3 ], "rotation": [ 0, 3 ], @@ -873,6 +916,7 @@ "type": "mapgen", "method": "json", "nested_mapgen_id": "tent_b_5x5_S", + "//": "No roof due to the ruined state. Could make chunks to sync roof and wall/floor, but too insignificant to bother", "object": { "mapgensize": [ 5, 5 ], "rotation": [ 0, 3 ], @@ -896,6 +940,7 @@ "type": "mapgen", "method": "json", "nested_mapgen_id": "tent_b_5x5_E", + "//": "No roof due to the ruined state. Could make chunks to sync roof and wall/floor, but too insignificant to bother", "object": { "mapgensize": [ 5, 5 ], "rotation": [ 0, 3 ], @@ -919,6 +964,7 @@ "type": "mapgen", "method": "json", "nested_mapgen_id": "tent_b_5x5_N", + "//": "No roof due to the ruined state. Could make chunks to sync roof and wall/floor, but too insignificant to bother", "object": { "mapgensize": [ 5, 5 ], "rotation": [ 0, 3 ], @@ -942,6 +988,7 @@ "type": "mapgen", "method": "json", "nested_mapgen_id": "tent_b_5x5_W", + "//": "No roof due to the ruined state. Could make chunks to sync roof and wall/floor, but too insignificant to bother", "object": { "mapgensize": [ 5, 5 ], "rotation": [ 0, 3 ], diff --git a/data/json/mapgen/nested/strip_mall_nested.json b/data/json/mapgen/nested/strip_mall_nested.json index 695f323eb9c4e..cde697b5365b6 100644 --- a/data/json/mapgen/nested/strip_mall_nested.json +++ b/data/json/mapgen/nested/strip_mall_nested.json @@ -1,4 +1,76 @@ [ + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "indoor_tent_5x5_S", + "object": { + "mapgensize": [ 5, 5 ], + "rotation": [ 0, 3 ], + "rows": [ + "#####", + "#xxx#", + "#xXx#", + "#xxx#", + "##+##" + ], + "flags": [ "ERASE_ALL_BEFORE_PLACING_TERRAIN" ], + "furniture": { "#": "f_large_canvas_wall", "X": "f_center_groundsheet", "x": "f_large_groundsheet", "+": "f_large_canvas_door" } + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "indoor_tent_5x5_E", + "object": { + "mapgensize": [ 5, 5 ], + "rotation": [ 0, 3 ], + "rows": [ + "#####", + "#xxx#", + "#xXx+", + "#xxx#", + "#####" + ], + "flags": [ "ERASE_ALL_BEFORE_PLACING_TERRAIN" ], + "furniture": { "#": "f_large_canvas_wall", "X": "f_center_groundsheet", "x": "f_large_groundsheet", "+": "f_large_canvas_door" } + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "indoor_tent_5x5_N", + "object": { + "mapgensize": [ 5, 5 ], + "rotation": [ 0, 3 ], + "rows": [ + "##+##", + "#xxx#", + "#xXx#", + "#xxx#", + "#####" + ], + "flags": [ "ERASE_ALL_BEFORE_PLACING_TERRAIN" ], + "furniture": { "#": "f_large_canvas_wall", "X": "f_center_groundsheet", "x": "f_large_groundsheet", "+": "f_large_canvas_door" } + } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "indoor_tent_5x5_W", + "object": { + "mapgensize": [ 5, 5 ], + "rotation": [ 0, 3 ], + "rows": [ + "#####", + "#xxx#", + "+xXx#", + "#xxx#", + "#####" + ], + "flags": [ "ERASE_ALL_BEFORE_PLACING_TERRAIN" ], + "furniture": { "#": "f_large_canvas_wall", "X": "f_center_groundsheet", "x": "f_large_groundsheet", "+": "f_large_canvas_door" } + } + }, { "type": "mapgen", "method": "json", @@ -837,10 +909,10 @@ }, "furniture": { ".": "f_null", "#": "f_sign", "B": "f_brazier", "C": "f_camp_chair", "T": "f_tourist_table" }, "nested": { - "N": { "chunks": [ "tent_5x5_N" ] }, - "S": { "chunks": [ "tent_5x5_S" ] }, - "E": { "chunks": [ "tent_5x5_E" ] }, - "W": { "chunks": [ "tent_5x5_W" ] } + "N": { "chunks": [ "indoor_tent_5x5_N" ] }, + "S": { "chunks": [ "indoor_tent_5x5_S" ] }, + "E": { "chunks": [ "indoor_tent_5x5_E" ] }, + "W": { "chunks": [ "indoor_tent_5x5_W" ] } }, "items": { ".": { "item": "trash", "chance": 4 }, @@ -932,10 +1004,10 @@ "m": "f_makeshift_bed" }, "nested": { - "N": { "chunks": [ "tent_5x5_N" ] }, - "S": { "chunks": [ "tent_5x5_S" ] }, - "E": { "chunks": [ "tent_5x5_E" ] }, - "W": { "chunks": [ "tent_5x5_W" ] } + "N": { "chunks": [ "indoor_tent_5x5_N" ] }, + "S": { "chunks": [ "indoor_tent_5x5_S" ] }, + "E": { "chunks": [ "indoor_tent_5x5_E" ] }, + "W": { "chunks": [ "indoor_tent_5x5_W" ] } }, "items": { ".": { "item": "trash", "chance": 5 }, @@ -2364,7 +2436,7 @@ }, "toilets": { "*": { } }, "place_signs": [ { "signage": "Ultimate Explorers of ", "x": 10, "y": 21 } ], - "nested": { "V": { "chunks": [ "tent_5x5_S" ] } }, + "nested": { "V": { "chunks": [ "indoor_tent_5x5_S" ] } }, "place_loot": [ { "item": "money_strap_one", "x": 3, "y": 10, "chance": 75, "repeat": [ 1, 4 ] }, { "item": "money_strap_five", "x": 3, "y": 10, "chance": 75, "repeat": [ 1, 4 ] }, diff --git a/data/json/mapgen_palettes/abandoned_barn_p.json b/data/json/mapgen_palettes/abandoned_barn_p.json index dbe90c71c89de..e3b285bab613e 100644 --- a/data/json/mapgen_palettes/abandoned_barn_p.json +++ b/data/json/mapgen_palettes/abandoned_barn_p.json @@ -19,11 +19,14 @@ "b": "t_dirtfloor", "B": "t_door_boarded", "c": "t_dirtfloor", + "C": "t_dirtfloor", "d": "t_region_groundcover_barren", "D": "t_door_boarded_damaged", + "g": "t_dirtfloor", "h": "t_dirtfloor", "I": "t_dirtfloor", "L": [ "t_covered_well", [ "t_water_pump", 2 ] ], + "m": "t_dirtfloor", "M": "t_milking_machine", "n": "t_dirtfloor", "N": "t_dirtfloor", diff --git a/data/json/mapgen_palettes/mil_surplus.json b/data/json/mapgen_palettes/mil_surplus.json index fbb7cf8b863a3..71c601762a9cc 100644 --- a/data/json/mapgen_palettes/mil_surplus.json +++ b/data/json/mapgen_palettes/mil_surplus.json @@ -1,4 +1,20 @@ [ + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "indoor_tent_3x3_N", + "object": { + "mapgensize": [ 3, 3 ], + "rotation": [ 0, 3 ], + "rows": [ + "#+#", + "#x#", + "###" + ], + "flags": [ "ERASE_ALL_BEFORE_PLACING_TERRAIN" ], + "furniture": { "#": "f_canvas_wall", "x": "f_groundsheet", "+": "f_canvas_door" } + } + }, { "type": "palette", "id": "mil_surplus", @@ -142,7 +158,7 @@ ], "U": { "item": "trash" } }, - "nested": { "T": { "chunks": [ "tent_3x3_N" ] } } + "nested": { "T": { "chunks": [ "indoor_tent_3x3_N" ] } } }, { "type": "palette", @@ -327,6 +343,6 @@ }, "L": { "item": "SUS_janitors_closet", "chance": 50 } }, - "nested": { "T": { "chunks": [ [ "tent_3x3_N", 25 ], [ "deployed_small_tent", 25 ], [ "null", 50 ] ] } } + "nested": { "T": { "chunks": [ [ "indoor_tent_3x3_N", 25 ], [ "deployed_small_tent", 25 ], [ "null", 50 ] ] } } } ]