diff --git a/data/json/itemgroups/Locations_MapExtras/map_extras.json b/data/json/itemgroups/Locations_MapExtras/map_extras.json index 5ddbe159f1e5e..f0d6fa2f00a5d 100644 --- a/data/json/itemgroups/Locations_MapExtras/map_extras.json +++ b/data/json/itemgroups/Locations_MapExtras/map_extras.json @@ -14,16 +14,6 @@ { "item": "corpse", "damage": 3, "//": "always a corpse, pulped!" } ] }, - { - "type": "item_group", - "subtype": "collection", - "id": "map_extra_military", - "entries": [ - { "group": "mon_zombie_soldier_death_drops" }, - { "group": "military_standard_sniper_rifles", "prob": 10 }, - { "item": "corpse", "damage": 3 } - ] - }, { "type": "item_group", "subtype": "collection", diff --git a/data/json/monsterdrops/zombie_soldier.json b/data/json/monsterdrops/zombie_soldier.json index 62c96f5b71063..2a740f5b06828 100644 --- a/data/json/monsterdrops/zombie_soldier.json +++ b/data/json/monsterdrops/zombie_soldier.json @@ -18,7 +18,7 @@ { "group": "military_standard_lmgs", "contents-item": "shoulder_strap", "prob": 10 }, { "group": "military_standard_shotguns", "contents-item": "shoulder_strap", "prob": 5 } ], - "prob": 70 + "prob": 10 }, { "group": "infantry_common_gear" }, { "group": "military_standard_grenades", "count": [ 1, 3 ], "prob": 20 }, @@ -53,7 +53,7 @@ { "group": "military_standard_lmgs", "contents-item": "shoulder_strap", "prob": 10 }, { "group": "military_standard_shotguns", "contents-item": "shoulder_strap", "prob": 5 } ], - "prob": 70 + "prob": 10 }, { "group": "infantry_common_gear" }, { "group": "military_standard_grenades", "count": [ 1, 3 ], "prob": 20 }, diff --git a/data/json/vehicles/military.json b/data/json/vehicles/military.json index ac8fa48b99f40..84e2514cab410 100644 --- a/data/json/vehicles/military.json +++ b/data/json/vehicles/military.json @@ -388,7 +388,8 @@ ], "items": [ { "x": 0, "y": 0, "chance": 5, "items": [ "id_military" ] }, - { "x": -2, "y": 2, "chance": 15, "item_groups": [ "fuel_diesel" ] } + { "x": -2, "y": 2, "chance": 15, "item_groups": [ "fuel_diesel" ] }, + { "x": -2, "y": 1, "chance": 7, "item_groups": [ "military_standard_sniper_rifles" ] } ] }, { diff --git a/src/map_extras.cpp b/src/map_extras.cpp index e6c4c7ac49b48..afc4681bb9006 100644 --- a/src/map_extras.cpp +++ b/src/map_extras.cpp @@ -469,16 +469,39 @@ static bool mx_military( map &m, const tripoint & ) if( const auto p = random_point( m, [&m]( const tripoint & n ) { return m.passable( n ); } ) ) { - if( one_in( 10 ) ) { - m.add_spawn( mon_zombie_soldier, 1, *p ); - } else if( one_in( 25 ) ) { + if( one_in( 25 ) ) { if( one_in( 2 ) ) { m.add_spawn( mon_zombie_bio_op, 1, *p ); + + int splatter_range = rng( 1, 3 ); + for( int j = 0; j <= splatter_range; j++ ) { + m.add_field( *p + point( -j * 1, j * 1 ), fd_blood, 1, 0_turns ); + } } else { m.add_spawn( mon_dispatch, 1, *p ); } } else { - m.place_items( "map_extra_military", 100, *p, *p, true, calendar::start_of_cataclysm ); + m.add_spawn( mon_zombie_soldier, 1, *p ); + // 10% chance of zombie carrying weapon so 90% chance of it being on the ground + if( !one_in( 10 ) ) { + std::string group; + // 75% assault rifles, 10% LMGs, 5% shotguns, 5% sniper rifles + if( one_in( 20 ) ) { + group = "military_standard_sniper_rifles"; + } else if( one_in( 20 ) ) { + group = "military_standard_shotguns"; + } else if( one_in( 10 ) ) { + group = "military_standard_lmgs"; + } else { + group = "military_standard_assault_rifles"; + } + m.place_items( group, 100, *p, *p, true, calendar::start_of_cataclysm ); + } + + int splatter_range = rng( 1, 3 ); + for( int j = 0; j <= splatter_range; j++ ) { + m.add_field( *p + point( -j * 1, j * 1 ), fd_blood, 1, 0_turns ); + } } } @@ -656,7 +679,22 @@ static bool mx_roadblock( map &m, const tripoint &abs_sub ) if( const auto p = random_point( m, [&m]( const tripoint & n ) { return m.passable( n ); } ) ) { - m.place_items( "map_extra_military", 100, *p, *p, true, calendar::start_of_cataclysm ); + m.add_spawn( mon_zombie_soldier, 1, *p ); + // 10% chance of zombie carrying weapon so 90% chance of it being on the ground + if( !one_in( 10 ) ) { + std::string group; + // 75% assault rifles, 10% LMGs, 5% shotguns, 5% sniper rifles + if( one_in( 20 ) ) { + group = "military_standard_sniper_rifles"; + } else if( one_in( 20 ) ) { + group = "military_standard_shotguns"; + } else if( one_in( 10 ) ) { + group = "military_standard_lmgs"; + } else { + group = "military_standard_assault_rifles"; + } + m.place_items( group, 100, *p, *p, true, calendar::start_of_cataclysm ); + } int splatter_range = rng( 1, 3 ); for( int j = 0; j <= splatter_range; j++ ) {