From b3a8d58ff1182762b4e2368aca247c261cd6d285 Mon Sep 17 00:00:00 2001 From: Moumix3 Date: Sat, 11 Apr 2020 03:09:44 +0100 Subject: [PATCH] New monster: SWAT Zombie (#37815) * Add SWAT zombie Adding a SWAT zombie, which is between a cop zombie and a soldier zombie in terms of strength and resistances * Create SWAT zombie monsterdrop Largely based on the zombie cop loot table. Used existing swat_guns item group. Group "swat_gear" already exist (hence the "_zombie" in the name), but has a mixture of all item slots (head, torso, boots, equipment), so couldn't be used here (or there would be a possibility to have duplicate of things that don't make sense, like two helmets, or two pairs of boots, etc...) * Adding SWAT zombie spawn points Added SWAT zombies everywhere cop zombies can spawn, with half the chance * Modernize item_groups + standardize torso items As per comments from ymber, modernizing the item groups (for the SWAT zombie) to use distribution or collection. Didn't change the cop zombie item_groups as it's not part of this PR. Also changed the torso item group to have less diverse type of items, and remove things that made less sense for SWAT than cops (dress shirt & jacket). --- data/json/monsterdrops/zombie_cop.json | 113 +++++++++++++++++++++++++ data/json/monstergroups/zombies.json | 11 +++ data/json/monsters/zed-classic.json | 49 +++++++++++ 3 files changed, 173 insertions(+) diff --git a/data/json/monsterdrops/zombie_cop.json b/data/json/monsterdrops/zombie_cop.json index 2ace5aae10dfb..fb955cb5b1b2d 100644 --- a/data/json/monsterdrops/zombie_cop.json +++ b/data/json/monsterdrops/zombie_cop.json @@ -79,5 +79,118 @@ "id": "cop_weapons", "type": "item_group", "items": [ { "group": "cop_melee", "prob": 60 }, { "group": "guns_cop", "prob": 40 } ] + }, + { + "id": "mon_zombie_swat_death_drops", + "type": "item_group", + "subtype": "collection", + "magazine": 100, + "ammo": 40, + "entries": [ + { "group": "swat_zombie_gear", "prob": 100, "damage": [ 0, 2 ] }, + { "group": "swat_gloves", "prob": 30, "damage": [ 0, 4 ] }, + { "group": "swat_helmet", "prob": 20, "damage": [ 0, 4 ] }, + { "group": "swat_pants", "damage": [ 0, 4 ] }, + { "group": "swat_shoes", "damage": [ 0, 4 ] }, + { "group": "swat_torso", "damage": [ 0, 4 ] }, + { "group": "swat_weapons", "prob": 50, "damage": [ 0, 1 ], "dirt": [ 0, 7050 ] }, + { "group": "underwear", "damage": [ 0, 4 ] }, + { "group": "clothing_glasses", "prob": 5 }, + { "group": "clothing_watch", "prob": 10 }, + { "item": "badge_swat", "prob": 10 }, + { "item": "cash_card", "charges-min": 0, "charges-max": 50000, "prob": 50 } + ] + }, + { + "type": "item_group", + "id": "swat_zombie_gear", + "subtype": "collection", + "entries": [ + { "collection": [ { "item": "bandages", "prob": 60 }, { "item": "1st_aid", "prob": 20 } ], "prob": 25 }, + { + "collection": [ { "item": "swat_armor", "prob": 50 }, { "item": "kevlar", "prob": 25 }, { "item": "tacvest", "prob": 5 } ], + "prob": 75 + }, + { + "collection": [ + { "item": "heavy_flashlight", "prob": 20 }, + { "item": "airhorn", "prob": 5 }, + { "item": "two_way_radio", "prob": 30 }, + { "item": "whistle", "prob": 5 }, + { "item": "flashbang", "prob": 10 }, + { "item": "sm_extinguisher", "prob": 5 }, + { "item": "rope_30", "prob": 10 } + ], + "prob": 30 + }, + { + "collection": [ + { "item": "holster", "prob": 35 }, + { "item": "chestpouch", "prob": 15 }, + { "item": "ammo_satchel", "prob": 10 }, + { "item": "bholster", "prob": 25 }, + { "item": "bandolier_shotgun", "prob": 10 }, + { "item": "legpouch_large", "prob": 25 }, + { "item": "police_belt", "prob": 15 } + ], + "prob": 25 + } + ] + }, + { + "id": "swat_gloves", + "type": "item_group", + "subtype": "distribution", + "entries": [ + { "item": "gloves_fingerless", "prob": 15 }, + { "item": "gloves_leather", "prob": 15 }, + { "item": "gloves_tactical", "prob": 45 } + ] + }, + { + "id": "swat_helmet", + "type": "item_group", + "subtype": "distribution", + "entries": [ + { "item": "mask_gas", "prob": 10 }, + { "item": "helmet_riot", "prob": 20 }, + { "item": "tac_helmet", "prob": 10 }, + { "item": "tac_fullhelmet", "prob": 5 } + ] + }, + { + "id": "swat_pants", + "type": "item_group", + "subtype": "distribution", + "entries": [ { "item": "pants", "prob": 75 }, { "item": "pants_cargo", "prob": 70 }, { "item": "pants_army", "prob": 30 } ] + }, + { + "id": "swat_shoes", + "type": "item_group", + "subtype": "distribution", + "entries": [ + { "item": "boots", "prob": 20 }, + { "item": "boots_steel", "prob": 40 }, + { "item": "boots_hiking", "prob": 5 }, + { "item": "boots_combat", "prob": 30 } + ] + }, + { + "id": "swat_torso", + "type": "item_group", + "subtype": "distribution", + "entries": [ + { "item": "tank_top", "prob": 30 }, + { "item": "army_top", "prob": 40 }, + { "item": "tshirt", "prob": 20 }, + { "item": "longshirt", "prob": 10 }, + { "item": "thermal_shirt", "prob": 10 } + ] + }, + { + "id": "swat_weapons", + "type": "item_group", + "subtype": "collection", + "entries": [ { "group": "cop_melee", "prob": 25 }, { "group": "guns_swat", "prob": 75 } ] } ] diff --git a/data/json/monstergroups/zombies.json b/data/json/monstergroups/zombies.json index 6726d99c11c79..5693f0f9e30af 100644 --- a/data/json/monstergroups/zombies.json +++ b/data/json/monstergroups/zombies.json @@ -80,6 +80,7 @@ { "monster": "mon_dog_zombie_rot", "freq": 5, "cost_multiplier": 5 }, { "monster": "mon_zombie_soldier", "freq": 10, "cost_multiplier": 2 }, { "monster": "mon_zombie_cop", "freq": 20, "cost_multiplier": 3 }, + { "monster": "mon_zombie_swat", "freq": 10, "cost_multiplier": 3 }, { "monster": "mon_zombie_hazmat", "freq": 10, "cost_multiplier": 3 }, { "monster": "mon_zombie_fireman", "freq": 10, "cost_multiplier": 2 }, { "monster": "mon_zombie_swimmer", "freq": 10, "cost_multiplier": 5 }, @@ -118,6 +119,7 @@ { "monster": "mon_zombie_rot", "freq": 20, "cost_multiplier": 2 }, { "monster": "mon_zombie_crawler", "freq": 10, "cost_multiplier": 2 }, { "monster": "mon_zombie_cop", "freq": 280, "cost_multiplier": 3 }, + { "monster": "mon_zombie_swat", "freq": 140, "cost_multiplier": 3 }, { "monster": "mon_zombie_hazmat", "freq": 10, "cost_multiplier": 2 }, { "monster": "mon_zombie_fireman", "freq": 20, "cost_multiplier": 2 }, { "monster": "mon_dog_zombie_cop", "freq": 40, "cost_multiplier": 2 }, @@ -141,6 +143,7 @@ { "monster": "mon_zombie_crawler", "freq": 5, "cost_multiplier": 2 }, { "monster": "mon_zombie_child", "freq": 150, "cost_multiplier": 2 }, { "monster": "mon_zombie_cop", "freq": 20, "cost_multiplier": 2 }, + { "monster": "mon_zombie_swat", "freq": 10, "cost_multiplier": 2 }, { "monster": "mon_zombie_hazmat", "freq": 10, "cost_multiplier": 2 }, { "monster": "mon_zombie_fireman", "freq": 10, "cost_multiplier": 2 }, { "monster": "mon_zombie_dog", "freq": 40, "cost_multiplier": 2 }, @@ -174,6 +177,7 @@ { "monster": "mon_zombie_rot", "freq": 10, "cost_multiplier": 2 }, { "monster": "mon_zombie_crawler", "freq": 5, "cost_multiplier": 2 }, { "monster": "mon_zombie_cop", "freq": 20, "cost_multiplier": 2 }, + { "monster": "mon_zombie_swat", "freq": 10, "cost_multiplier": 2 }, { "monster": "mon_zombie_hazmat", "freq": 10, "cost_multiplier": 2 }, { "monster": "mon_zombie_fireman", "freq": 10, "cost_multiplier": 2 }, { "monster": "mon_zombie_dog", "freq": 130, "cost_multiplier": 2 }, @@ -198,6 +202,7 @@ { "monster": "mon_zombie_rot", "freq": 10, "cost_multiplier": 2 }, { "monster": "mon_zombie_crawler", "freq": 5, "cost_multiplier": 2 }, { "monster": "mon_zombie_cop", "freq": 20, "cost_multiplier": 2 }, + { "monster": "mon_zombie_swat", "freq": 10, "cost_multiplier": 2 }, { "monster": "mon_zombie_hazmat", "freq": 10, "cost_multiplier": 2 }, { "monster": "mon_zombie_fireman", "freq": 10, "cost_multiplier": 2 }, { "monster": "mon_zombie_dog", "freq": 40, "cost_multiplier": 2 }, @@ -221,6 +226,7 @@ { "monster": "mon_zombie_rot", "freq": 10, "cost_multiplier": 2 }, { "monster": "mon_zombie_crawler", "freq": 5, "cost_multiplier": 2 }, { "monster": "mon_zombie_cop", "freq": 20, "cost_multiplier": 2 }, + { "monster": "mon_zombie_swat", "freq": 10, "cost_multiplier": 2 }, { "monster": "mon_zombie_hazmat", "freq": 10, "cost_multiplier": 2 }, { "monster": "mon_zombie_fireman", "freq": 10, "cost_multiplier": 2 }, { "monster": "mon_zombie_dog", "freq": 40, "cost_multiplier": 2 }, @@ -408,6 +414,7 @@ "default": "mon_zombie_cop", "monsters": [ { "monster": "mon_zombie_cop", "freq": 100, "cost_multiplier": 0 }, + { "monster": "mon_zombie_swat", "freq": 50, "cost_multiplier": 0 }, { "monster": "mon_dog_zombie_cop", "freq": 50, "cost_multiplier": 2, "pack_size": [ 1, 2 ] } ] }, @@ -423,6 +430,7 @@ { "monster": "mon_zombie_child", "freq": 10, "cost_multiplier": 1 }, { "monster": "mon_dog_zombie_rot", "freq": 5, "cost_multiplier": 4 }, { "monster": "mon_zombie_cop", "freq": 10, "cost_multiplier": 3 }, + { "monster": "mon_zombie_swat", "freq": 5, "cost_multiplier": 3 }, { "monster": "mon_zombie_static", "freq": 5, "cost_multiplier": 5 }, { "monster": "mon_zombie_runner", "freq": 10, "cost_multiplier": 5, "pack_size": [ 1, 2 ] } ] @@ -459,6 +467,7 @@ { "monster": "mon_zombie_crawler", "freq": 25, "cost_multiplier": 3 }, { "monster": "mon_zombie_soldier", "freq": 10, "cost_multiplier": 2 }, { "monster": "mon_zombie_cop", "freq": 20, "cost_multiplier": 3 }, + { "monster": "mon_zombie_cop", "freq": 10, "cost_multiplier": 3 }, { "monster": "mon_zombie_hazmat", "freq": 10, "cost_multiplier": 3 }, { "monster": "mon_zombie_fireman", "freq": 10, "cost_multiplier": 2 }, { "monster": "mon_zombie_swimmer", "freq": 10, "cost_multiplier": 5 }, @@ -504,6 +513,7 @@ { "monster": "mon_zombie", "freq": 100, "cost_multiplier": 1 }, { "monster": "mon_zombie_fat", "freq": 30, "cost_multiplier": 1 }, { "monster": "mon_zombie_cop", "freq": 10, "cost_multiplier": 2 }, + { "monster": "mon_zombie_swat", "freq": 5, "cost_multiplier": 2 }, { "monster": "mon_zombie_child", "freq": 20, "cost_multiplier": 1 }, { "monster": "mon_zombie_crawler", "freq": 10, "cost_multiplier": 1 } ] @@ -514,6 +524,7 @@ "default": "mon_zombie", "monsters": [ { "monster": "mon_zombie_cop", "freq": 250, "cost_multiplier": 2 }, + { "monster": "mon_zombie_swat", "freq": 125, "cost_multiplier": 2 }, { "monster": "mon_zombie", "freq": 150, "cost_multiplier": 1 }, { "monster": "mon_zombie_swimmer", "freq": 100, "cost_multiplier": 2 } ] diff --git a/data/json/monsters/zed-classic.json b/data/json/monsters/zed-classic.json index 4c6d03f6f174c..005c81a53c859 100644 --- a/data/json/monsters/zed-classic.json +++ b/data/json/monsters/zed-classic.json @@ -399,6 +399,55 @@ "FILTHY" ] }, + { + "id": "mon_zombie_swat", + "type": "MONSTER", + "name": "SWAT zombie", + "description": "This zombie was part of a specialized unit of law enforcement. It still wears a battered armor with the SWAT logo emblazoned on the front.", + "looks_like": "mon_zombie_cop", + "bodytype": "human", + "default_faction": "cop_zombie", + "categories": [ "CLASSIC" ], + "species": [ "ZOMBIE", "HUMAN" ], + "volume": "62500 ml", + "weight": "81500 g", + "hp": 90, + "speed": 75, + "material": [ "flesh" ], + "symbol": "Z", + "color": "blue", + "aggression": 100, + "morale": 100, + "melee_skill": 6, + "melee_dice": 2, + "melee_dice_sides": 5, + "melee_cut": 0, + "armor_bash": 10, + "armor_cut": 16, + "vision_day": 30, + "vision_night": 3, + "harvest": "zombie", + "special_attacks": [ [ "GRAB", 7 ], [ "scratch", 15 ] ], + "death_drops": "mon_zombie_swat_death_drops", + "death_function": [ "NORMAL" ], + "upgrades": { "half_life": 28, "into": "mon_zombie_kevlar_1" }, + "burn_into": "mon_zombie_scorched", + "flags": [ + "SEES", + "HEARS", + "SMELLS", + "STUMBLES", + "WARM", + "BASHES", + "GROUP_BASH", + "POISON", + "BLEED", + "NO_BREATHE", + "REVIVES", + "PUSH_MON", + "FILTHY" + ] + }, { "id": "mon_zombie_tough", "type": "MONSTER",