diff --git a/data/json/effects.json b/data/json/effects.json index caa847afebbfe..936e542e602d4 100644 --- a/data/json/effects.json +++ b/data/json/effects.json @@ -306,6 +306,7 @@ "desc": [ "You've been knocked off-balance by an attack'." ], "apply_message": "You're staggered off-balance.", "base_mods": { "speed_mod": [ -20 ] }, + "removes_effects": [ "grabbing" ], "rating": "bad", "show_in_info": true }, diff --git a/data/json/monster_weakpoints/generic_weakpoints.json b/data/json/monster_weakpoints/generic_weakpoints.json new file mode 100644 index 0000000000000..21e23c94caa0e --- /dev/null +++ b/data/json/monster_weakpoints/generic_weakpoints.json @@ -0,0 +1,88 @@ +[ + { + "type": "weakpoint_set", + "id": "wps_natural_armor", + "weakpoints": [ + { + "id": "gap", + "name": "a small gap in the thick hide", + "coverage": 5, + "difficulty": { "melee": 4, "ranged": 5 }, + "coverage_mult": { "broad": 0.5 }, + "armor_mult": { "all": 0.25 } + }, + { + "id": "joint", + "name": "a soft fold in the thick hide", + "coverage": 10, + "difficulty": { "melee": 3, "ranged": 5 }, + "coverage_mult": { "point": 0.75 }, + "armor_mult": { "all": 0.5 } + }, + { + "id": "hard_hide", + "name": "a particularly thick patch of hide", + "armor_mult": { "all": 1.25 }, + "crit_mult": { "all": 0.75 }, + "coverage_mult": { "melee": 0.75 }, + "coverage": 3 + } + ] + }, + { + "type": "weakpoint_set", + "id": "wps_bone_armor", + "weakpoints": [ + { + "id": "gap", + "name": "a small gap in the bony plates", + "coverage": 5, + "difficulty": { "melee": 4, "ranged": 5 }, + "coverage_mult": { "broad": 0.5 }, + "armor_mult": { "all": 0.25 } + }, + { + "id": "joint", + "name": "a joint in the bony plates", + "coverage": 10, + "difficulty": { "melee": 3, "ranged": 7 }, + "coverage_mult": { "ranged": 0.25 }, + "armor_mult": { "all": 0.5 } + }, + { + "id": "hard_point", + "name": "a particularly thick patch of bone", + "armor_mult": { "all": 1.25 }, + "crit_mult": { "all": 0.75 }, + "coverage_mult": { "melee": 0.75 }, + "coverage": 3 + } + ] + }, + { + "type": "weakpoint_set", + "id": "wps_eyes_big", + "//": "Let's assume that larger-than-tiny eyes are mildly more resistant to damage.", + "weakpoints": [ + { + "id": "eye", + "name": "the eye", + "armor_mult": { "physical": 0.2 }, + "coverage": 2, + "crit_mult": { "all": 1.25 }, + "difficulty": { "ranged": 7, "melee": 5 }, + "coverage_mult": { "broad": 0.5 }, + "effects": [ + { "effect": "blind", "duration": [ 1, 2 ], "chance": 40, "message": "The %s is blinded!", "damage_required": [ 1, 40 ] }, + { + "effect": "blind", + "permanent": true, + "chance": 20, + "message": "The %s's eyes are obliterated!", + "damage_required": [ 41, 100 ] + } + ] + } + ] + } +] diff --git a/data/json/monster_weakpoints/humanoid_weakpoints.json b/data/json/monster_weakpoints/humanoid_weakpoints.json new file mode 100644 index 0000000000000..59dac4b852aa9 --- /dev/null +++ b/data/json/monster_weakpoints/humanoid_weakpoints.json @@ -0,0 +1,565 @@ +[ + { + "type": "weakpoint_set", + "id": "wps_humanoid_body", + "weakpoints": [ + { + "id": "arm", + "name": "the arm", + "crit_mult": { "all": 0.75 }, + "difficulty": { "ranged": 4, "melee": 1 }, + "coverage_mult": { "point": 0.75 }, + "effects": [ + { "effect": "staggered", "chance": 15, "message": "The %s is knocked off-balance!", "damage_required": [ 10, 30 ] }, + { + "effect": "staggered", + "chance": 25, + "message": "The %s is knocked off-balance!", + "damage_required": [ 31, 100 ] + } + ], + "coverage": 8 + }, + { + "id": "part_grabbing", + "name": "the arm", + "//": "Gives you a higher chance of hitting the arm if the enemy is grabbing you.", + "crit_mult": { "all": 0.75 }, + "effects": [ + { "effect": "staggered", "chance": 15, "message": "The %s is knocked off-balance!", "damage_required": [ 10, 30 ] }, + { + "effect": "staggered", + "chance": 25, + "message": "The %s is knocked off-balance!", + "damage_required": [ 31, 100 ] + } + ], + "required_effects": [ "grabbing" ], + "coverage": 8 + }, + { + "id": "leg", + "name": "the leg", + "crit_mult": { "all": 0.75 }, + "difficulty": { "ranged": 3, "melee": 1 }, + "coverage_mult": { "point": 0.75 }, + "effects": [ + { "effect": "downed", "chance": 5, "message": "The %s is knocked down!", "damage_required": [ 10, 30 ] }, + { "effect": "downed", "chance": 15, "message": "The %s is knocked down!", "damage_required": [ 31, 50 ] }, + { "effect": "downed", "chance": 25, "message": "The %s is knocked down!", "damage_required": [ 51, 100 ] } + ], + "coverage": 15 + }, + { + "id": "head", + "name": "the head", + "coverage": 5, + "crit_mult": { "all": 1.1 }, + "armor_mult": { "physical": 0.75 }, + "difficulty": { "melee": 2, "ranged": 5 }, + "effects": [ + { + "effect": "stunned", + "duration": [ 1, 2 ], + "chance": 5, + "message": "The %s is stunned!", + "damage_required": [ 1, 10 ] + }, + { + "effect": "stunned", + "duration": [ 1, 2 ], + "chance": 25, + "message": "The %s is stunned!", + "damage_required": [ 11, 50 ] + }, + { + "effect": "stunned", + "duration": [ 1, 2 ], + "chance": 45, + "message": "The %s is stunned!", + "damage_required": [ 51, 100 ] + } + ] + }, + { + "id": "eye", + "name": "the eye", + "armor_mult": { "physical": 0 }, + "coverage": 1, + "crit_mult": { "all": 1.25 }, + "difficulty": { "ranged": 8, "melee": 6 }, + "coverage_mult": { "broad": 0.5 }, + "effects": [ + { "effect": "blind", "duration": [ 1, 2 ], "chance": 40, "message": "The %s is blinded!", "damage_required": [ 1, 25 ] }, + { + "effect": "blind", + "permanent": true, + "chance": 30, + "message": "The %s's eyes are obliterated!", + "damage_required": [ 26, 100 ] + } + ] + } + ] + }, + { + "type": "weakpoint_set", + "id": "wps_humanoid_head_big", + "weakpoints": [ + { + "id": "head", + "name": "the head", + "coverage": 6, + "crit_mult": { "all": 1.1 }, + "armor_mult": { "physical": 0.75 }, + "difficulty": { "melee": 3, "ranged": 5 }, + "effects": [ + { + "effect": "stunned", + "duration": [ 1, 2 ], + "chance": 5, + "message": "The %s is stunned!", + "damage_required": [ 1, 10 ] + }, + { + "effect": "stunned", + "duration": [ 1, 2 ], + "chance": 25, + "message": "The %s is stunned!", + "damage_required": [ 11, 50 ] + }, + { + "effect": "stunned", + "duration": [ 1, 2 ], + "chance": 45, + "message": "The %s is stunned!", + "damage_required": [ 51, 100 ] + } + ] + }, + { + "id": "eye", + "name": "the eye", + "armor_mult": { "physical": 0 }, + "coverage": 1, + "crit_mult": { "all": 1.25 }, + "difficulty": { "ranged": 7, "melee": 5 }, + "coverage_mult": { "broad": 0.5 }, + "effects": [ + { "effect": "blind", "duration": [ 1, 2 ], "chance": 40, "message": "The %s is blinded!", "damage_required": [ 1, 25 ] }, + { + "effect": "blind", + "permanent": true, + "chance": 30, + "message": "The %s's eyes are obliterated!", + "damage_required": [ 26, 100 ] + } + ] + } + ] + }, + { + "type": "weakpoint_set", + "id": "wps_humanoid_head_small", + "weakpoints": [ + { + "id": "head", + "name": "the head", + "coverage": 3, + "crit_mult": { "all": 1.1 }, + "armor_mult": { "physical": 0.75 }, + "difficulty": { "melee": 3, "ranged": 6 }, + "effects": [ + { + "effect": "stunned", + "duration": [ 1, 2 ], + "chance": 5, + "message": "The %s is stunned!", + "damage_required": [ 1, 10 ] + }, + { + "effect": "stunned", + "duration": [ 1, 2 ], + "chance": 25, + "message": "The %s is stunned!", + "damage_required": [ 11, 50 ] + }, + { + "effect": "stunned", + "duration": [ 1, 2 ], + "chance": 45, + "message": "The %s is stunned!", + "damage_required": [ 51, 100 ] + } + ] + }, + { + "id": "eye", + "name": "the eye", + "armor_mult": { "physical": 0 }, + "coverage": 1, + "crit_mult": { "all": 1.25 }, + "difficulty": { "ranged": 10, "melee": 8 }, + "coverage_mult": { "broad": 0.5 }, + "effects": [ + { "effect": "blind", "duration": [ 1, 2 ], "chance": 40, "message": "The %s is blinded!", "damage_required": [ 1, 25 ] }, + { + "effect": "blind", + "permanent": true, + "chance": 30, + "message": "The %s's eyes are obliterated!", + "damage_required": [ 26, 100 ] + } + ] + } + ] + }, + { + "type": "weakpoint_set", + "id": "wps_humanoid_turnout_gear", + "weakpoints": [ + { + "id": "arm", + "name": "a tear in its turnout gear", + "armor_mult": { "physical": 0.5, "acid": 0.5 }, + "difficulty": { "ranged": 3, "melee": 1 }, + "coverage_mult": { "broad": 0.65 }, + "effects": [ + { "effect": "staggered", "chance": 15, "message": "The %s is knocked off-balance!", "damage_required": [ 10, 30 ] }, + { + "effect": "staggered", + "chance": 25, + "message": "The %s is knocked off-balance!", + "damage_required": [ 31, 100 ] + } + ], + "coverage": 5 + }, + { + "id": "leg", + "name": "a tear in its turnout gear", + "armor_mult": { "physical": 0.5, "acid": 0.5 }, + "difficulty": { "ranged": 3, "melee": 1 }, + "coverage_mult": { "broad": 0.55 }, + "effects": [ + { "effect": "downed", "chance": 5, "message": "The %s is knocked down!", "damage_required": [ 10, 30 ] }, + { "effect": "downed", "chance": 15, "message": "The %s is knocked down!", "damage_required": [ 31, 50 ] }, + { "effect": "downed", "chance": 25, "message": "The %s is knocked down!", "damage_required": [ 51, 100 ] } + ], + "coverage": 5 + } + ] + }, + { + "type": "weakpoint_set", + "id": "wps_humanoid_body_armor", + "weakpoints": [ + { + "id": "arm", + "name": "the arm", + "armor_mult": { "bullet": 0.5, "cut": 0.5, "stab": 0.25, "bash": 0.25 }, + "crit_mult": { "all": 0.75 }, + "difficulty": { "ranged": 4, "melee": 1 }, + "coverage_mult": { "point": 0.75 }, + "effects": [ + { "effect": "staggered", "chance": 15, "message": "The %s is knocked off-balance!", "damage_required": [ 10, 30 ] }, + { + "effect": "staggered", + "chance": 25, + "message": "The %s is knocked off-balance!", + "damage_required": [ 31, 100 ] + } + ], + "coverage": 8 + }, + { + "id": "armpit", + "name": "the armpit", + "armor_mult": { "bullet": 0.3, "cut": 0.3, "stab": 0.15, "bash": 0.15 }, + "difficulty": { "all": 5 }, + "coverage_mult": { "ranged": 0.1 }, + "coverage": 1 + }, + { + "id": "side_armour", + "name": "the weak armor on the side", + "armor_mult": { "bullet": 0.3, "cut": 0.3, "stab": 0.15, "bash": 0.15 }, + "difficulty": { "broad": 4, "point": 1 }, + "coverage_mult": { "ranged": 0.65 }, + "coverage": 4 + }, + { + "id": "stomach_armour", + "name": "a gap in the stomach armor", + "armor_mult": { "bullet": 0.5, "cut": 0.5, "stab": 0.25, "bash": 0.25 }, + "coverage_mult": { "broad": 0.5 }, + "difficulty": { "ranged": 4, "melee": 1 }, + "coverage": 4 + }, + { + "id": "leg", + "name": "an unarmored part of the leg", + "armor_mult": { "bullet": 0.5, "cut": 0.5, "stab": 0.25, "bash": 0.25 }, + "crit_mult": { "all": 0.75 }, + "difficulty": { "ranged": 3, "melee": 1 }, + "coverage_mult": { "point": 0.75 }, + "effects": [ + { "effect": "downed", "chance": 5, "message": "The %s is knocked down!", "damage_required": [ 10, 30 ] }, + { "effect": "downed", "chance": 15, "message": "The %s is knocked down!", "damage_required": [ 31, 50 ] }, + { "effect": "downed", "chance": 25, "message": "The %s is knocked down!", "damage_required": [ 51, 100 ] } + ], + "coverage": 8 + } + ] + }, + { + "type": "weakpoint_set", + "id": "wps_humanoid_light_armor", + "weakpoints": [ + { + "id": "arm", + "name": "the arm", + "armor_mult": { "physical": 0.25 }, + "crit_mult": { "all": 0.75 }, + "difficulty": { "ranged": 4, "melee": 1 }, + "coverage_mult": { "point": 0.75 }, + "effects": [ + { "effect": "staggered", "chance": 15, "message": "The %s is knocked off-balance!", "damage_required": [ 10, 30 ] }, + { + "effect": "staggered", + "chance": 25, + "message": "The %s is knocked off-balance!", + "damage_required": [ 31, 100 ] + } + ], + "coverage": 8 + }, + { + "id": "side_armour", + "name": "the weak armor on the side", + "armor_mult": { "physical": 0.15 }, + "difficulty": { "broad": 2, "point": 1 }, + "coverage_mult": { "ranged": 0.65 }, + "coverage": 4 + }, + { + "id": "stomach_armour", + "name": "a gap in the stomach armor", + "armor_mult": { "physical": 0.25 }, + "coverage_mult": { "broad": 0.75 }, + "difficulty": { "ranged": 3, "melee": 1 }, + "coverage": 4 + }, + { + "id": "leg", + "name": "an unarmored part of the leg", + "armor_mult": { "physical": 0.25 }, + "crit_mult": { "all": 0.75 }, + "difficulty": { "ranged": 3, "melee": 1 }, + "effects": [ + { "effect": "downed", "chance": 5, "message": "The %s is knocked down!", "damage_required": [ 10, 30 ] }, + { "effect": "downed", "chance": 15, "message": "The %s is knocked down!", "damage_required": [ 31, 50 ] }, + { "effect": "downed", "chance": 25, "message": "The %s is knocked down!", "damage_required": [ 51, 100 ] } + ], + "coverage": 12 + } + ] + }, + { + "type": "weakpoint_set", + "id": "wps_humanoid_open_helmet", + "weakpoints": [ + { + "id": "helmet", + "//": "the hard part of the helmet is actually the opposite of a weakpoint.", + "name": "the helmet", + "armor_mult": { "physical": 1.5 }, + "crit_mult": { "all": 0.5 }, + "coverage_mult": { "melee": 0.75 }, + "coverage": 3 + }, + { + "id": "head", + "name": "the face", + "armor_mult": { "physical": 0 }, + "crit_mult": { "all": 1.1 }, + "difficulty": { "melee": 3, "ranged": 7 }, + "coverage_mult": { "ranged": 0.5 }, + "coverage": 3, + "effects": [ + { + "effect": "stunned", + "duration": [ 1, 2 ], + "chance": 5, + "message": "The %s is stunned!", + "damage_required": [ 1, 10 ] + }, + { + "effect": "stunned", + "duration": [ 1, 2 ], + "chance": 25, + "message": "The %s is stunned!", + "damage_required": [ 11, 50 ] + }, + { + "effect": "stunned", + "duration": [ 1, 2 ], + "chance": 45, + "message": "The %s is stunned!", + "damage_required": [ 51, 100 ] + } + ] + }, + { + "id": "eye", + "name": "the eye", + "armor_mult": { "physical": 0 }, + "coverage": 1, + "crit_mult": { "all": 1.25 }, + "coverage_mult": { "ranged": 0.5 }, + "difficulty": { "point": 7, "broad": 9 }, + "effects": [ + { "effect": "blind", "duration": [ 1, 2 ], "chance": 25, "message": "The %s is blinded!", "damage_required": [ 1, 25 ] }, + { + "effect": "blind", + "permanent": true, + "chance": 30, + "message": "The %s's eyes are obliterated!", + "damage_required": [ 26, 100 ] + } + ] + }, + { + "id": "neck", + "name": "the neck", + "armor_mult": { "physical": 0.25 }, + "difficulty": { "melee": 4, "ranged": 6 }, + "coverage_mult": { "broad": 0.5 }, + "coverage": 1 + } + ] + }, + { + "type": "weakpoint_set", + "id": "wps_humanoid_full_helmet", + "weakpoints": [ + { + "id": "helmet", + "name": "the helmet", + "//": "the hard part of the helmet is actually the opposite of a weakpoint.", + "armor_mult": { "physical": 1.5 }, + "crit_mult": { "all": 0.5 }, + "coverage_mult": { "melee": 0.75 }, + "coverage": 3 + }, + { + "id": "head", + "name": "the face shield", + "crit_mult": { "all": 1.1 }, + "difficulty": { "melee": 3, "ranged": 7 }, + "coverage_mult": { "ranged": 0.5 }, + "coverage": 3, + "effects": [ + { + "effect": "stunned", + "duration": [ 1, 2 ], + "chance": 1, + "message": "The %s is stunned!", + "damage_required": [ 1, 10 ] + }, + { + "effect": "stunned", + "duration": [ 1, 2 ], + "chance": 5, + "message": "The %s is stunned!", + "damage_required": [ 11, 50 ] + }, + { + "effect": "stunned", + "duration": [ 1, 2 ], + "chance": 10, + "message": "The %s is stunned!", + "damage_required": [ 51, 100 ] + } + ] + }, + { + "id": "eye", + "name": "the goggles", + "armor_mult": { "physical": 1 }, + "coverage": 1, + "coverage_mult": { "ranged": 0.5 }, + "difficulty": { "point": 7, "broad": 9 }, + "effects": [ + { + "effect": "blind", + "duration": [ 1, 2 ], + "chance": 1, + "message": "The %s is blinded! The goggles, they did nothing!", + "damage_required": [ 20, 100 ] + } + ], + "//": "All right, I'll admit it, I only added this effect so I could make the joke. What you gonna do about it?" + } + ] + }, + { + "type": "weakpoint_set", + "id": "wps_humanoid_gasmask", + "weakpoints": [ + { + "id": "eye", + "name": "the goggles", + "armor_mult": { "physical": 1 }, + "coverage": 1, + "coverage_mult": { "ranged": 0.5 }, + "difficulty": { "point": 7, "broad": 9 }, + "effects": [ + { + "effect": "blind", + "duration": [ 1, 2 ], + "chance": 1, + "message": "The %s is blinded! The goggles, they did nothing!", + "damage_required": [ 20, 100 ] + } + ] + } + ] + }, + { + "type": "weakpoint_set", + "id": "wps_humanoid_child_body", + "weakpoints": [ + { + "id": "leg", + "name": "the leg", + "crit_mult": { "all": 0.75 }, + "difficulty": { "ranged": 3, "melee": 2 }, + "coverage_mult": { "point": 0.75 }, + "effects": [ + { "effect": "downed", "chance": 5, "message": "The %s is knocked down!", "damage_required": [ 10, 30 ] }, + { "effect": "downed", "chance": 15, "message": "The %s is knocked down!", "damage_required": [ 31, 50 ] }, + { "effect": "downed", "chance": 25, "message": "The %s is knocked down!", "damage_required": [ 51, 100 ] } + ], + "coverage": 9 + }, + { + "id": "arm", + "name": "the arm", + "crit_mult": { "all": 0.75 }, + "difficulty": { "ranged": 3, "melee": 1 }, + "coverage_mult": { "point": 0.75 }, + "effects": [ + { "effect": "staggered", "chance": 15, "message": "The %s is knocked off-balance!", "damage_required": [ 10, 30 ] }, + { + "effect": "staggered", + "chance": 25, + "message": "The %s is knocked off-balance!", + "damage_required": [ 31, 100 ] + } + ], + "coverage": 7 + } + ] + } +] diff --git a/data/json/monsters/feral_humans.json b/data/json/monsters/feral_humans.json index 7b583b7c6ea7f..723fe7f333088 100644 --- a/data/json/monsters/feral_humans.json +++ b/data/json/monsters/feral_humans.json @@ -21,6 +21,7 @@ "melee_dice": 1, "melee_dice_sides": 3, "melee_cut": 0, + "weakpoint_sets": [ "wps_humanoid_body" ], "dodge": 1, "harvest": "human", "vision_day": 30, @@ -84,6 +85,7 @@ "armor_bash": 9, "armor_cut": 7, "armor_bullet": 12, + "weakpoint_sets": [ "wps_humanoid_body", "wps_humanoid_light_armor" ], "special_attacks": [ [ "PARROT_AT_DANGER", 0 ], { @@ -132,6 +134,7 @@ "melee_dice": 2, "melee_dice_sides": 4, "melee_cut": 3, + "weakpoint_sets": [ "wps_humanoid_body" ], "dodge": 4, "vision_night": 15, "special_attacks": [ { "id": "scratch", "min_mul": 0.5, "cooldown": 10 }, { "type": "bite", "min_mul": 0.7, "cooldown": 15 } ], @@ -239,6 +242,7 @@ "melee_dice": 1, "melee_dice_sides": 3, "melee_cut": 2, + "weakpoint_sets": [ "wps_humanoid_body" ], "dodge": 1, "harvest": "human", "path_settings": { "max_dist": 30, "avoid_traps": true, "avoid_sharp": true }, @@ -286,6 +290,7 @@ "armor_cut": 6, "armor_bullet": 4, "armor_stab": 4, + "weakpoint_sets": [ "wps_humanoid_body", "wps_humanoid_body_armor" ], "dodge": 1, "harvest": "human", "vision_day": 50, @@ -358,6 +363,7 @@ "melee_dice": 1, "melee_dice_sides": 3, "melee_cut": 0, + "weakpoint_sets": [ "wps_humanoid_body" ], "dodge": 1, "harvest": "human", "vision_day": 30, @@ -446,99 +452,8 @@ "armor_cut": 20, "armor_bullet": 12, "armor_stab": 15, - "death_drops": "feral_armored_death_drops_mace", - "weakpoints": [ - { - "name": "the face", - "armor_mult": { "physical": 0 }, - "crit_mult": { "all": 1.1 }, - "difficulty": { "melee": 1, "ranged": 3 }, - "coverage_mult": { "ranged": 0.75 }, - "coverage": 3, - "effects": [ - { "effect": "stunned", "duration": 1, "chance": 5, "message": "The %s is stunned!", "damage_required": [ 1, 10 ] }, - { - "effect": "stunned", - "duration": [ 1, 2 ], - "chance": 10, - "message": "The %s is stunned!", - "damage_required": [ 11, 50 ] - }, - { - "effect": "stunned", - "duration": [ 1, 3 ], - "chance": 25, - "message": "The %s is stunned!", - "damage_required": [ 51, 100 ] - } - ] - }, - { - "name": "the eye", - "armor_mult": { "physical": 0 }, - "coverage": 1, - "crit_mult": { "all": 1.25 }, - "difficulty": { "ranged": 6, "melee": 4 }, - "coverage_mult": { "broad": 0.5 }, - "effects": [ - { "effect": "blind", "duration": [ 1, 2 ], "chance": 40, "message": "The %s is blinded!", "damage_required": [ 1, 25 ] }, - { - "effect": "blind", - "permanent": true, - "chance": 25, - "message": "The %s is blinded!", - "damage_required": [ 26, 100 ] - }, - { - "effect": "blind", - "permanent": true, - "chance": 10, - "message": "The %s's eyes are obliterated!", - "damage_required": [ 51, 100 ] - } - ] - }, - { - "name": "an unarmored part of the leg", - "armor_mult": { "bullet": 0.5, "cut": 0.5, "stab": 0.25, "bash": 0.25 }, - "crit_mult": { "all": 0.75 }, - "difficulty": { "ranged": 2, "melee": 1 }, - "coverage_mult": { "point": 0.75 }, - "effects": [ - { "effect": "downed", "chance": 8, "message": "The %s is knocked down!", "damage_required": [ 10, 25 ] }, - { "effect": "downed", "chance": 20, "message": "The %s is knocked down!", "damage_required": [ 26, 100 ] } - ], - "coverage": 8 - }, - { - "name": "the armpit", - "armor_mult": { "bullet": 0.3, "cut": 0.3, "stab": 0.15, "bash": 0.15 }, - "difficulty": { "all": 3 }, - "coverage_mult": { "ranged": 0.1 }, - "coverage": 1 - }, - { - "name": "the weak armor on the side", - "armor_mult": { "bullet": 0.3, "cut": 0.3, "stab": 0.15, "bash": 0.15 }, - "coverage_mult": { "ranged": 0.65 }, - "coverage": 4 - }, - { - "name": "the arm", - "crit_mult": { "all": 0.75 }, - "difficulty": { "ranged": 2, "melee": 1 }, - "coverage_mult": { "point": 0.75 }, - "armor_mult": { "bullet": 0.5, "cut": 0.5, "stab": 0.25, "bash": 0.25 }, - "coverage": 8 - }, - { - "name": "a gap in the stomach armor", - "armor_mult": { "bullet": 0.5, "cut": 0.5, "stab": 0.25, "bash": 0.25 }, - "coverage_mult": { "broad": 0.5 }, - "difficulty": { "ranged": 4, "melee": 1 }, - "coverage": 4 - } - ] + "weakpoint_sets": [ "wps_humanoid_body", "wps_humanoid_body_armor", "wps_humanoid_open_helmet" ], + "death_drops": "feral_armored_death_drops_mace" }, { "id": "mon_feral_armored_battleaxe", @@ -575,6 +490,7 @@ "armor_cut": 4, "armor_bullet": 4, "armor_acid": 4, + "weakpoint_sets": [ "wps_humanoid_body", "wps_humanoid_light_armor" ], "vision_day": 50, "vision_night": 3, "harvest": "human", @@ -638,6 +554,7 @@ "armor_cut": 4, "armor_bullet": 4, "armor_acid": 4, + "weakpoint_sets": [ "wps_humanoid_body", "wps_humanoid_light_armor" ], "vision_day": 50, "vision_night": 4, "luminance": 500, @@ -687,11 +604,7 @@ "armor_cut": 7, "armor_bullet": 10, "armor_acid": 5, - "weakpoints": [ - { "name": "the leg", "armor_mult": { "physical": 0 }, "coverage": 18 }, - { "name": "the arm", "armor_mult": { "physical": 0 }, "coverage": 9 }, - { "name": "the head", "armor_mult": { "physical": 0 }, "coverage": 4 } - ], + "weakpoint_sets": [ "wps_humanoid_body", "wps_humanoid_body_armor", "wps_humanoid_open_helmet" ], "vision_day": 50, "vision_night": 4, "harvest": "human", diff --git a/data/json/monsters/zed-classic.json b/data/json/monsters/zed-classic.json index 925407d01d2d0..23c393c7a767c 100644 --- a/data/json/monsters/zed-classic.json +++ b/data/json/monsters/zed-classic.json @@ -23,7 +23,7 @@ "armor_bash": 6, "armor_cut": 8, "armor_bullet": 6, - "weakpoints": [ { "name": "the eye", "armor_mult": { "physical": 0 }, "coverage": 1 } ], + "weakpoint_sets": [ "wps_humanoid_body" ], "harvest": "zombie", "special_attacks": [ { "type": "bite", "cooldown": 5 } ], "death_drops": { @@ -70,6 +70,7 @@ "melee_dice_sides": 3, "melee_cut": 0, "vision_night": 3, + "weakpoint_sets": [ "wps_humanoid_body" ], "harvest": "zombie", "special_attacks": [ { "type": "bite", "cooldown": 5 }, [ "GRAB", 7 ], [ "scratch", 20 ] ], "death_drops": "default_zombie_death_drops", @@ -117,28 +118,7 @@ "armor_cut": 6, "armor_bullet": 6, "armor_stab": 6, - "weakpoints": [ - { - "name": "an unarmored part of the leg", - "armor_mult": { "bullet": 0.5, "cut": 0.5, "stab": 0.25, "bash": 0.25 }, - "coverage": 8 - }, - { "name": "the arm", "armor_mult": { "bullet": 0.5, "cut": 0.5, "stab": 0.25, "bash": 0.25 }, "coverage": 8 }, - { "name": "the armpit", "armor_mult": { "bullet": 0.3, "cut": 0.3, "stab": 0.15, "bash": 0.15 }, "coverage": 1 }, - { - "name": "the weak armor on the side", - "armor_mult": { "bullet": 0.3, "cut": 0.3, "stab": 0.15, "bash": 0.15 }, - "coverage": 4 - }, - { - "name": "a gap in the stomach armor", - "armor_mult": { "bullet": 0.5, "cut": 0.5, "stab": 0.25, "bash": 0.25 }, - "coverage": 4 - }, - { "name": "the face", "armor_mult": { "physical": 0 }, "coverage": 3 }, - { "name": "the eye", "armor_mult": { "physical": 0 }, "coverage": 1 }, - { "name": "the neck", "armor_mult": { "physical": 0 }, "coverage": 1 } - ], + "weakpoint_sets": [ "wps_humanoid_body", "wps_humanoid_body_armor", "wps_humanoid_open_helmet" ], "vision_day": 30, "vision_night": 3, "harvest": "zombie", @@ -184,6 +164,7 @@ "melee_dice_sides": 3, "melee_cut": 0, "vision_day": 10, + "weakpoint_sets": [ "wps_humanoid_head_big" ], "harvest": "zombie", "special_attacks": [ { "type": "bite", "attack_upper": false, "cooldown": 5 }, { "id": "scratch", "attack_upper": false } ], "death_drops": "default_zombie_death_drops", @@ -229,6 +210,7 @@ "armor_bash": 12, "armor_cut": 8, "armor_bullet": 6, + "weakpoint_sets": [ "wps_humanoid_body" ], "vision_day": 50, "vision_night": 3, "harvest": "zombie_leather", @@ -263,11 +245,7 @@ "armor_bash": 5, "armor_cut": 3, "armor_bullet": 2, - "weakpoints": [ - { "name": "the leg", "armor_mult": { "physical": 0.5 }, "coverage": 18 }, - { "name": "the head", "armor_mult": { "physical": 0.5 }, "coverage": 3 }, - { "name": "the eye", "armor_mult": { "physical": 0 }, "coverage": 1 } - ], + "weakpoint_sets": [ "wps_humanoid_body", "wps_humanoid_head_small" ], "vision_night": 3, "harvest": "zombie", "special_attacks": [ { "type": "bite", "cooldown": 5, "min_mul": 0.75, "//": "Fat zombies have stronger jaws" }, [ "scratch", 20 ] ], @@ -317,7 +295,7 @@ "armor_bullet": 5, "armor_acid": 3, "armor_fire": 10, - "weakpoints": [ { "name": "a tear in its turnout gear", "armor_mult": { "physical": 0.5, "acid": 0.5 }, "coverage": 10 } ], + "weakpoint_sets": [ "wps_humanoid_body", "wps_humanoid_turnout_gear", "wps_humanoid_full_helmet" ], "vision_night": 3, "harvest": "zombie", "special_attacks": [ [ "GRAB", 7 ] ], @@ -364,7 +342,16 @@ "armor_bash": 5, "armor_cut": 4, "armor_bullet": 3, - "weakpoints": [ { "name": "a tear in its hazmat suit", "armor_mult": { "physical": 0.5 }, "coverage": 10 } ], + "weakpoint_sets": [ "wps_humanoid_body", "wps_humanoid_gasmask" ], + "weakpoints": [ + { + "name": "a tear in its hazmat suit", + "armor_mult": { "all": 0.5 }, + "coverage": 5, + "difficulty": { "ranged": 3, "melee": 1 }, + "coverage_mult": { "broad": 0.65 } + } + ], "vision_night": 3, "harvest": "zombie", "special_attacks": [ [ "GRAB", 7 ] ], @@ -409,6 +396,7 @@ "melee_dice_sides": 2, "melee_cut": 0, "vision_night": 3, + "weakpoint_sets": [ "wps_humanoid_body" ], "harvest": "zombie", "special_attacks": [ { "type": "bite", "cooldown": 2, "accuracy": 3, "infection_chance": 10 }, [ "GRAB", 7 ], [ "scratch", 20 ] ], "death_drops": "default_zombie_death_drops", @@ -456,28 +444,7 @@ "armor_bash": 10, "armor_cut": 16, "armor_bullet": 18, - "weakpoints": [ - { - "name": "an unarmored part of the leg", - "armor_mult": { "bullet": 0.5, "cut": 0.5, "stab": 0.25, "bash": 0.25 }, - "coverage": 8 - }, - { "name": "the arm", "armor_mult": { "bullet": 0.5, "cut": 0.5, "stab": 0.25, "bash": 0.25 }, "coverage": 8 }, - { "name": "the armpit", "armor_mult": { "bullet": 0.3, "cut": 0.3, "stab": 0.15, "bash": 0.15 }, "coverage": 1 }, - { - "name": "the weak armor on the side", - "armor_mult": { "bullet": 0.3, "cut": 0.3, "stab": 0.15, "bash": 0.15 }, - "coverage": 4 - }, - { - "name": "a gap in the stomach armor", - "armor_mult": { "bullet": 0.5, "cut": 0.5, "stab": 0.25, "bash": 0.25 }, - "coverage": 4 - }, - { "name": "the face", "armor_mult": { "physical": 0 }, "coverage": 3 }, - { "name": "the eye", "armor_mult": { "physical": 0 }, "coverage": 1 }, - { "name": "the neck", "armor_mult": { "physical": 0 }, "coverage": 1 } - ], + "weakpoint_sets": [ "wps_humanoid_body", "wps_humanoid_body_armor", "wps_humanoid_open_helmet" ], "vision_day": 30, "vision_night": 3, "harvest": "zombie", @@ -527,10 +494,7 @@ "armor_bash": 2, "armor_cut": 1, "armor_bullet": 1, - "weakpoints": [ - { "name": "the head", "armor_mult": { "physical": 0.5 }, "coverage": 3 }, - { "name": "the eye", "armor_mult": { "physical": 0 }, "coverage": 1 } - ], + "weakpoint_sets": [ "wps_humanoid_body", "wps_humanoid_head_small" ], "vision_night": 3, "harvest": "zombie", "special_attacks": [ { "type": "bite", "cooldown": 5, "min_mul": 0.7 }, [ "GRAB", 7 ], [ "scratch", 20 ] ], diff --git a/data/json/monsters/zed-testing.json b/data/json/monsters/zed-testing.json new file mode 100644 index 0000000000000..bcef413602a63 --- /dev/null +++ b/data/json/monsters/zed-testing.json @@ -0,0 +1,18 @@ +[ + { + "id": "mon_zombie_survivor_no_weakpoints", + "type": "MONSTER", + "name": { "str": "zombie survivor test only" }, + "description": "This zombie survivor is for testing purposes only.", + "copy-from": "mon_zombie_survivor", + "delete": { "weakpoint_sets": [ "wps_humanoid_body", "wps_humanoid_light_armor", "wps_humanoid_open_helmet" ] } + }, + { + "id": "mon_zombie_soldier_no_weakpoints", + "type": "MONSTER", + "name": { "str": "zombie soldier test only" }, + "description": "This zombie soldier is for testing purposes only.", + "copy-from": "mon_zombie_soldier", + "delete": { "weakpoint_sets": [ "wps_humanoid_body", "wps_humanoid_body_armor", "wps_humanoid_open_helmet" ] } + } +] diff --git a/data/json/monsters/zed-winged.json b/data/json/monsters/zed-winged.json index 05a104928fcec..63ab392391f7e 100644 --- a/data/json/monsters/zed-winged.json +++ b/data/json/monsters/zed-winged.json @@ -22,6 +22,18 @@ "melee_cut": 0, "bleed_rate": 50, "vision_night": 3, + "weakpoint_sets": [ "wps_humanoid_body" ], + "weakpoints": [ + { + "id": "arm", + "name": "the wing", + "crit_mult": { "all": 0.75 }, + "difficulty": { "ranged": 2, "melee": 1 }, + "coverage_mult": { "point": 0.25 }, + "effects": [ { "effect": "staggered", "chance": 15, "message": "The %s is knocked off-balance!", "damage_required": [ 10, 100 ] } ], + "coverage": 12 + } + ], "harvest": "zombie", "special_attacks": [ { "type": "bite", "cooldown": 5 }, @@ -75,6 +87,18 @@ "armor_bullet": 2, "bleed_rate": 0, "vision_night": 7, + "weakpoint_sets": [ "wps_humanoid_body", "wps_humanoid_head_small" ], + "weakpoints": [ + { + "id": "arm", + "name": "the wing", + "crit_mult": { "all": 0.75 }, + "difficulty": { "ranged": 2, "melee": 1 }, + "coverage_mult": { "point": 0.25 }, + "effects": [ { "effect": "staggered", "chance": 15, "message": "The %s is knocked off-balance!", "damage_required": [ 10, 100 ] } ], + "coverage": 12 + } + ], "harvest": "zombie", "special_attacks": [ { "type": "leap", "cooldown": 2, "max_range": 8 }, diff --git a/data/json/monsters/zed_acid.json b/data/json/monsters/zed_acid.json index 4035a63d03c58..87daac48cfb5c 100644 --- a/data/json/monsters/zed_acid.json +++ b/data/json/monsters/zed_acid.json @@ -23,6 +23,7 @@ "melee_cut": 0, "dodge": 1, "vision_night": 3, + "weakpoint_sets": [ "wps_humanoid_body" ], "harvest": "zombie", "special_attacks": [ [ "ACID_BARF", 10 ] ], "death_drops": "default_zombie_death_drops", @@ -75,7 +76,7 @@ "armor_stab": 12, "bleed_rate": 50, "vision_night": 3, - "luminance": 0, + "weakpoint_sets": [ "wps_humanoid_body", "wps_natural_armor" ], "harvest": "zombie", "special_attacks": [ { @@ -138,6 +139,7 @@ "dodge": 1, "bleed_rate": 50, "vision_night": 3, + "weakpoint_sets": [ "wps_humanoid_body" ], "harvest": "zombie", "special_attacks": [ [ "ACID", 20 ] ], "death_drops": "default_zombie_death_drops", @@ -187,6 +189,7 @@ "melee_dice_sides": 2, "melee_cut": 1, "vision_day": 14, + "weakpoint_sets": [ "wps_humanoid_body" ], "harvest": "zombie", "special_attacks": [ [ "ACID_BARF", 22 ] ], "death_drops": "default_zombie_death_drops", diff --git a/data/json/monsters/zed_burned.json b/data/json/monsters/zed_burned.json index 2e35c6a6544b0..be731b20508f6 100644 --- a/data/json/monsters/zed_burned.json +++ b/data/json/monsters/zed_burned.json @@ -26,6 +26,7 @@ "armor_bullet": 4, "armor_acid": 3, "armor_fire": 15, + "weakpoint_sets": [ "wps_humanoid_body", "wps_humanoid_child_body", "wps_humanoid_head_big", "wps_natural_armor" ], "bleed_rate": 0, "vision_day": 10, "vision_night": 3, diff --git a/data/json/monsters/zed_children.json b/data/json/monsters/zed_children.json index 1fb2a20ba33e4..22c87a8c979ad 100644 --- a/data/json/monsters/zed_children.json +++ b/data/json/monsters/zed_children.json @@ -23,6 +23,7 @@ "dodge": 3, "bleed_rate": 50, "harvest": "zombie", + "weakpoint_sets": [ "wps_humanoid_body", "wps_humanoid_child_body", "wps_humanoid_head_big" ], "vision_day": 30, "vision_night": 3, "special_attacks": [ { "type": "bite", "attack_upper": false, "cooldown": 2 } ], @@ -55,6 +56,7 @@ "melee_dice_sides": 4, "melee_cut": 2, "dodge": 2, + "weakpoint_sets": [ "wps_humanoid_body", "wps_humanoid_child_body", "wps_humanoid_head_big" ], "vision_day": 30, "vision_night": 3, "harvest": "zombie", @@ -91,6 +93,7 @@ "melee_dice_sides": 2, "melee_cut": 1, "dodge": 1, + "weakpoint_sets": [ "wps_humanoid_body", "wps_humanoid_child_body", "wps_humanoid_head_big" ], "bleed_rate": 50, "vision_day": 10, "vision_night": 10, @@ -126,6 +129,7 @@ "melee_cut": 1, "bleed_rate": 50, "dodge": 1, + "weakpoint_sets": [ "wps_humanoid_body", "wps_humanoid_child_body", "wps_humanoid_head_big" ], "vision_day": 30, "vision_night": 5, "harvest": "zombie", @@ -162,6 +166,7 @@ "bleed_rate": 50, "vision_day": 30, "vision_night": 5, + "weakpoint_sets": [ "wps_humanoid_body", "wps_humanoid_child_body", "wps_humanoid_head_big" ], "harvest": "zombie", "special_attacks": [ [ "GRAB", 5 ] ], "death_drops": { "subtype": "collection", "groups": [ [ "default_zombie_clothes", 100 ], [ "child_items", 65 ] ] }, @@ -193,6 +198,7 @@ "melee_dice_sides": 4, "melee_cut": 3, "dodge": 2, + "weakpoint_sets": [ "wps_humanoid_body", "wps_humanoid_child_body", "wps_humanoid_head_big", "wps_eyes_big" ], "bleed_rate": 50, "vision_day": 10, "vision_night": 10, @@ -232,6 +238,7 @@ "bleed_rate": 50, "vision_day": 30, "vision_night": 5, + "weakpoint_sets": [ "wps_humanoid_body", "wps_humanoid_child_body", "wps_humanoid_head_big" ], "harvest": "zombie", "special_attacks": [ [ "SHRIEK", 15 ], { "id": "scratch", "attack_upper": false, "cooldown": 10 } ], "death_drops": { "subtype": "collection", "groups": [ [ "default_zombie_clothes", 100 ], [ "child_items", 65 ] ] }, diff --git a/data/json/monsters/zed_electric.json b/data/json/monsters/zed_electric.json index fe12ffacdef5f..e2174b8247cdb 100644 --- a/data/json/monsters/zed_electric.json +++ b/data/json/monsters/zed_electric.json @@ -25,6 +25,7 @@ "armor_bash": 3, "armor_cut": 8, "armor_bullet": 6, + "weakpoint_sets": [ "wps_humanoid_body", "wps_natural_armor", "wps_humanoid_head_small" ], "bleed_rate": 0, "vision_night": 3, "luminance": 16, @@ -72,6 +73,7 @@ "melee_damage": [ { "damage_type": "electric", "amount": 8 } ], "melee_cut": 0, "dodge": 2, + "weakpoint_sets": [ "wps_humanoid_body" ], "bleed_rate": 50, "luminance": 8, "harvest": "zombie", @@ -118,6 +120,7 @@ "melee_skill": 5, "melee_dice": 1, "melee_dice_sides": 2, + "weakpoint_sets": [ "wps_humanoid_body" ], "bleed_rate": 0, "//2": "melee damage is quite weak since the shockfield around it is its most dangerous function", "melee_damage": [ { "damage_type": "electric", "amount": 6 } ], @@ -152,6 +155,7 @@ "melee_damage": [ { "damage_type": "electric", "amount": 4 } ], "melee_cut": 0, "dodge": 2, + "weakpoint_sets": [ "wps_humanoid_body" ], "luminance": 4, "harvest": "zombie", "special_when_hit": [ "ZAPBACK", 100 ], diff --git a/data/json/monsters/zed_ferrous.json b/data/json/monsters/zed_ferrous.json index e4f32142da0d3..95b2c75769405 100644 --- a/data/json/monsters/zed_ferrous.json +++ b/data/json/monsters/zed_ferrous.json @@ -21,6 +21,7 @@ "melee_dice": 2, "melee_dice_sides": 3, "melee_cut": 0, + "weakpoint_sets": [ "wps_humanoid_body" ], "vision_night": 3, "harvest": "zombie", "special_attacks": [ { "type": "bite", "cooldown": 5 }, [ "GRAB", 7 ], [ "scratch", 20 ] ], @@ -68,6 +69,7 @@ "armor_cut": 8, "armor_bullet": 8, "armor_stab": 8, + "weakpoint_sets": [ "wps_humanoid_body", "wps_natural_armor" ], "bleed_rate": 50, "vision_night": 3, "harvest": "zombie", @@ -117,6 +119,7 @@ "armor_cut": 15, "armor_bullet": 15, "armor_stab": 15, + "weakpoint_sets": [ "wps_humanoid_body", "wps_natural_armor" ], "bleed_rate": 0, "vision_night": 3, "luminance": 0, @@ -161,6 +164,7 @@ "melee_dice": 2, "melee_dice_sides": 6, "melee_cut": 12, + "weakpoint_sets": [ "wps_humanoid_body" ], "dodge": 1, "bleed_rate": 0, "vision_night": 3, @@ -209,6 +213,7 @@ "melee_dice": 3, "melee_dice_sides": 8, "melee_cut": 2, + "weakpoint_sets": [ "wps_humanoid_body" ], "bleed_rate": 0, "vision_day": 14, "harvest": "zombie", diff --git a/data/json/monsters/zed_skeletal.json b/data/json/monsters/zed_skeletal.json index b984290897789..7bf833ee54553 100644 --- a/data/json/monsters/zed_skeletal.json +++ b/data/json/monsters/zed_skeletal.json @@ -25,11 +25,7 @@ "armor_bullet": 24, "armor_stab": 30, "armor_acid": 3, - "weakpoints": [ - { "name": "a small gap in the armor", "armor_mult": { "physical": 0.5 }, "coverage": 15 }, - { "name": "a hole in the bony plates", "armor_mult": { "physical": 0.25 }, "coverage": 10 }, - { "name": "the eye", "armor_mult": { "physical": 0 }, "coverage": 1 } - ], + "weakpoint_sets": [ "wps_humanoid_body", "wps_bone_armor" ], "bleed_rate": 50, "vision_day": 30, "vision_night": 3, @@ -67,11 +63,7 @@ "armor_bullet": 30, "armor_bash": 12, "armor_acid": 1, - "weakpoints": [ - { "name": "a small gap in the armor", "armor_mult": { "physical": 0.5 }, "coverage": 8 }, - { "name": "a hole in the bony plates", "armor_mult": { "physical": 0.25 }, "coverage": 5 }, - { "name": "the eye", "armor_mult": { "physical": 0 }, "coverage": 1 } - ], + "weakpoint_sets": [ "wps_humanoid_body", "wps_bone_armor", "wps_humanoid_head_small" ], "bleed_rate": 0, "vision_day": 35, "vision_night": 3, @@ -113,11 +105,7 @@ "armor_bullet": 30, "armor_stab": 30, "armor_acid": 3, - "weakpoints": [ - { "name": "a small gap in the armor", "armor_mult": { "physical": 0.5 }, "coverage": 8 }, - { "name": "a hole in the bony plates", "armor_mult": { "physical": 0.25 }, "coverage": 5 }, - { "name": "the eye", "armor_mult": { "physical": 0 }, "coverage": 1 } - ], + "weakpoint_sets": [ "wps_humanoid_body", "wps_bone_armor" ], "bleed_rate": 0, "vision_day": 30, "vision_night": 3, @@ -152,11 +140,7 @@ "armor_bash": 20, "armor_cut": 45, "armor_bullet": 36, - "weakpoints": [ - { "name": "a small gap in the armor", "armor_mult": { "physical": 0.5 }, "coverage": 5 }, - { "name": "a hole in the bony plates", "armor_mult": { "physical": 0.25 }, "coverage": 3 }, - { "name": "the eye", "armor_mult": { "physical": 0 }, "coverage": 1 } - ], + "weakpoint_sets": [ "wps_humanoid_body", "wps_bone_armor", "wps_humanoid_head_small" ], "bleed_rate": 0, "vision_day": 50, "vision_night": 4, diff --git a/data/json/monsters/zed_soldiers.json b/data/json/monsters/zed_soldiers.json index 15928fcff4784..b5b0c35c5df07 100644 --- a/data/json/monsters/zed_soldiers.json +++ b/data/json/monsters/zed_soldiers.json @@ -25,28 +25,7 @@ "armor_bash": 12, "armor_cut": 25, "armor_bullet": 20, - "weakpoints": [ - { - "name": "an unarmored part of the leg", - "armor_mult": { "bullet": 0.5, "cut": 0.5, "stab": 0.25, "bash": 0.25 }, - "coverage": 8 - }, - { "name": "the arm", "armor_mult": { "bullet": 0.5, "cut": 0.5, "stab": 0.25, "bash": 0.25 }, "coverage": 8 }, - { "name": "the armpit", "armor_mult": { "bullet": 0.3, "cut": 0.3, "stab": 0.15, "bash": 0.15 }, "coverage": 1 }, - { - "name": "the weak armor on the side", - "armor_mult": { "bullet": 0.3, "cut": 0.3, "stab": 0.15, "bash": 0.15 }, - "coverage": 4 - }, - { - "name": "a gap in the stomach armor", - "armor_mult": { "bullet": 0.5, "cut": 0.5, "stab": 0.25, "bash": 0.25 }, - "coverage": 2 - }, - { "name": "the face", "armor_mult": { "physical": 0 }, "coverage": 3 }, - { "name": "the eye", "armor_mult": { "physical": 0 }, "coverage": 1 }, - { "name": "the neck", "armor_mult": { "physical": 0 }, "coverage": 1 } - ], + "weakpoint_sets": [ "wps_humanoid_body", "wps_humanoid_body_armor", "wps_humanoid_open_helmet" ], "vision_day": 30, "vision_night": 3, "harvest": "zombie", @@ -57,14 +36,6 @@ "fungalize_into": "mon_zombie_fungus", "flags": [ "SEES", "HEARS", "SMELLS", "WARM", "BASHES", "GROUP_BASH", "POISON", "NO_BREATHE", "REVIVES", "PUSH_MON", "FILTHY" ] }, - { - "id": "mon_zombie_soldier_no_weakpoints", - "type": "MONSTER", - "name": { "str": "zombie soldier test only" }, - "description": "This zombie soldier is for testing purposes only.", - "copy-from": "mon_zombie_soldier", - "weakpoints": [ ] - }, { "id": "mon_zombie_soldier_blackops_1", "type": "MONSTER", @@ -92,28 +63,7 @@ "armor_cut": 25, "armor_bullet": 20, "bleed_rate": 50, - "weakpoints": [ - { - "name": "an unarmored part of the leg", - "armor_mult": { "bullet": 0.5, "cut": 0.5, "stab": 0.25, "bash": 0.25 }, - "coverage": 8 - }, - { "name": "the arm", "armor_mult": { "bullet": 0.5, "cut": 0.5, "stab": 0.25, "bash": 0.25 }, "coverage": 8 }, - { "name": "the armpit", "armor_mult": { "bullet": 0.3, "cut": 0.3, "stab": 0.15, "bash": 0.15 }, "coverage": 1 }, - { - "name": "the weak armor on the side", - "armor_mult": { "bullet": 0.3, "cut": 0.3, "stab": 0.15, "bash": 0.15 }, - "coverage": 4 - }, - { - "name": "a gap in the stomach armor", - "armor_mult": { "bullet": 0.5, "cut": 0.5, "stab": 0.25, "bash": 0.25 }, - "coverage": 2 - }, - { "name": "the face", "armor_mult": { "physical": 0 }, "coverage": 3 }, - { "name": "the eye", "armor_mult": { "physical": 0 }, "coverage": 1 }, - { "name": "the neck", "armor_mult": { "physical": 0 }, "coverage": 1 } - ], + "weakpoint_sets": [ "wps_humanoid_body", "wps_humanoid_body_armor", "wps_humanoid_open_helmet" ], "vision_day": 30, "vision_night": 35, "harvest": "zombie", @@ -261,94 +211,7 @@ "armor_bash": 20, "armor_cut": 30, "armor_bullet": 24, - "weakpoints": [ - { - "name": "an unarmored part of the leg", - "armor_mult": { "bullet": 0.5, "cut": 0.5, "stab": 0.25, "bash": 0.25 }, - "crit_mult": { "all": 0.75 }, - "difficulty": { "ranged": 2, "melee": 1 }, - "coverage_mult": { "point": 0.75 }, - "effects": [ { "effect": "downed", "chance": 25, "message": "The %s is knocked down!", "damage_required": [ 15, 100 ] } ], - "coverage": 8 - }, - { - "name": "the arm", - "armor_mult": { "bullet": 0.5, "cut": 0.5, "stab": 0.25, "bash": 0.25 }, - "crit_mult": { "all": 0.75 }, - "difficulty": { "ranged": 2, "melee": 1 }, - "coverage_mult": { "point": 0.75 }, - "effects": [ { "effect": "staggered", "chance": 25, "message": "The %s is knocked off-balance!", "damage_required": [ 10, 100 ] } ], - "coverage": 8 - }, - { - "name": "the armpit", - "armor_mult": { "bullet": 0.3, "cut": 0.3, "stab": 0.15, "bash": 0.15 }, - "difficulty": { "all": 3 }, - "coverage_mult": { "ranged": 0.1 }, - "coverage": 1 - }, - { - "name": "the weak armor on the side", - "armor_mult": { "bullet": 0.3, "cut": 0.3, "stab": 0.15, "bash": 0.15 }, - "coverage_mult": { "ranged": 0.65 }, - "coverage": 4 - }, - { - "name": "a gap in the stomach armor", - "armor_mult": { "bullet": 0.5, "cut": 0.5, "stab": 0.25, "bash": 0.25 }, - "coverage_mult": { "broad": 0.5 }, - "difficulty": { "ranged": 4, "melee": 1 }, - "coverage": 4 - }, - { - "name": "the face", - "armor_mult": { "physical": 0 }, - "crit_mult": { "all": 1.1 }, - "difficulty": { "melee": 1, "ranged": 3 }, - "coverage_mult": { "ranged": 0.75 }, - "coverage": 3, - "effects": [ - { - "effect": "stunned", - "duration": [ 1, 2 ], - "chance": 5, - "message": "The %s is stunned!", - "damage_required": [ 1, 10 ] - }, - { - "effect": "stunned", - "duration": [ 1, 2 ], - "chance": 25, - "message": "The %s is stunned!", - "damage_required": [ 11, 100 ] - } - ] - }, - { - "name": "the eye", - "armor_mult": { "physical": 0 }, - "coverage": 1, - "crit_mult": { "all": 1.25 }, - "coverage_mult": { "ranged": 0.5 }, - "difficulty": { "point": 4, "broad": 6 }, - "effects": [ - { "effect": "blind", "duration": [ 1, 2 ], "chance": 25, "message": "The %s is blinded!", "damage_required": [ 1, 25 ] }, - { - "effect": "blind", - "permanent": true, - "chance": 30, - "message": "The %s's eyes are obliterated!", - "damage_required": [ 26, 100 ] - } - ] - }, - { - "name": "the neck", - "armor_mult": { "physical": 0 }, - "difficulty": { "melee": 1, "ranged": 2 }, - "coverage": 1 - } - ], + "weakpoint_sets": [ "wps_humanoid_body", "wps_humanoid_body_armor", "wps_humanoid_open_helmet" ], "bleed_rate": 50, "vision_day": 30, "vision_night": 5, @@ -388,94 +251,7 @@ "armor_bash": 30, "armor_cut": 50, "armor_bullet": 40, - "weakpoints": [ - { - "name": "an unarmored part of the leg", - "armor_mult": { "bullet": 0.5, "cut": 0.5, "stab": 0.25, "bash": 0.25 }, - "crit_mult": { "all": 0.75 }, - "difficulty": { "ranged": 2, "melee": 1 }, - "coverage_mult": { "point": 0.75 }, - "effects": [ { "effect": "downed", "chance": 25, "message": "The %s is knocked down!", "damage_required": [ 15, 100 ] } ], - "coverage": 8 - }, - { - "name": "the arm", - "armor_mult": { "bullet": 0.5, "cut": 0.5, "stab": 0.25, "bash": 0.25 }, - "crit_mult": { "all": 0.75 }, - "difficulty": { "ranged": 2, "melee": 1 }, - "coverage_mult": { "point": 0.75 }, - "effects": [ { "effect": "staggered", "chance": 25, "message": "The %s is knocked off-balance!", "damage_required": [ 10, 100 ] } ], - "coverage": 8 - }, - { - "name": "the armpit", - "armor_mult": { "bullet": 0.3, "cut": 0.3, "stab": 0.15, "bash": 0.15 }, - "difficulty": { "all": 3 }, - "coverage_mult": { "ranged": 0.1 }, - "coverage": 1 - }, - { - "name": "the weak armor on the side", - "armor_mult": { "bullet": 0.3, "cut": 0.3, "stab": 0.15, "bash": 0.15 }, - "coverage_mult": { "ranged": 0.65 }, - "coverage": 4 - }, - { - "name": "a gap in the stomach armor", - "armor_mult": { "bullet": 0.5, "cut": 0.5, "stab": 0.25, "bash": 0.25 }, - "coverage_mult": { "broad": 0.5 }, - "difficulty": { "ranged": 4, "melee": 1 }, - "coverage": 4 - }, - { - "name": "the face", - "armor_mult": { "physical": 0 }, - "crit_mult": { "all": 1.1 }, - "difficulty": { "melee": 1, "ranged": 3 }, - "coverage_mult": { "ranged": 0.75 }, - "coverage": 3, - "effects": [ - { - "effect": "stunned", - "duration": [ 1, 2 ], - "chance": 5, - "message": "The %s is stunned!", - "damage_required": [ 1, 10 ] - }, - { - "effect": "stunned", - "duration": [ 1, 2 ], - "chance": 25, - "message": "The %s is stunned!", - "damage_required": [ 11, 100 ] - } - ] - }, - { - "name": "the eye", - "armor_mult": { "physical": 0 }, - "coverage": 1, - "crit_mult": { "all": 1.25 }, - "coverage_mult": { "ranged": 0.5 }, - "difficulty": { "point": 4, "broad": 6 }, - "effects": [ - { "effect": "blind", "duration": [ 1, 2 ], "chance": 25, "message": "The %s is blinded!", "damage_required": [ 1, 25 ] }, - { - "effect": "blind", - "permanent": true, - "chance": 30, - "message": "The %s's eyes are obliterated!", - "damage_required": [ 26, 100 ] - } - ] - }, - { - "name": "the neck", - "armor_mult": { "physical": 0 }, - "difficulty": { "melee": 1, "ranged": 2 }, - "coverage": 1 - } - ], + "weakpoint_sets": [ "wps_humanoid_body", "wps_humanoid_body_armor", "wps_humanoid_open_helmet" ], "bleed_rate": 0, "vision_day": 50, "vision_night": 10, @@ -516,10 +292,7 @@ "armor_bash": 5, "armor_cut": 5, "armor_bullet": 4, - "weakpoints": [ - { "name": "the face", "armor_mult": { "physical": 0 }, "coverage": 3 }, - { "name": "the neck", "armor_mult": { "physical": 0 }, "coverage": 1 } - ], + "weakpoint_sets": [ "wps_humanoid_body", "wps_humanoid_body_armor", "wps_humanoid_full_helmet" ], "vision_day": 35, "vision_night": 5, "harvest": "zombie", @@ -578,25 +351,7 @@ "armor_bash": 12, "armor_cut": 25, "armor_bullet": 20, - "weakpoints": [ - { - "name": "an unarmored part of the leg", - "armor_mult": { "bullet": 0.5, "cut": 0.5, "stab": 0.25, "bash": 0.25 }, - "coverage": 8 - }, - { "name": "the arm", "armor_mult": { "bullet": 0.5, "cut": 0.5, "stab": 0.25, "bash": 0.25 }, "coverage": 9 }, - { - "name": "a gap in the side armor", - "armor_mult": { "bullet": 0.5, "cut": 0.5, "stab": 0.25, "bash": 0.25 }, - "coverage": 4 - }, - { - "name": "the gasmask", - "armor_mult": { "bullet": 0.2, "cut": 0.25, "stab": 0.25, "bash": 0.25 }, - "coverage": 4 - }, - { "name": "the neck", "armor_mult": { "physical": 0 }, "coverage": 1 } - ], + "weakpoint_sets": [ "wps_humanoid_body", "wps_humanoid_body_armor", "wps_humanoid_open_helmet", "wps_humanoid_gasmask" ], "vision_day": 30, "vision_night": 3, "luminance": 8, @@ -648,8 +403,15 @@ "armor_bullet": 51, "armor_acid": 20, "armor_fire": 20, + "weakpoint_sets": [ "wps_humanoid_full_helmet" ], "weakpoints": [ - { "name": "a gap in the armor", "armor_mult": { "bullet": 0.5, "cut": 0.5, "stab": 0.25, "bash": 0.25 }, "coverage": 4 } + { + "name": "a crack in the armor", + "armor_mult": { "bullet": 0.5, "cut": 0.5, "stab": 0.25, "bash": 0.25 }, + "coverage": 4, + "coverage_mult": { "broad": 0.75 }, + "difficulty": { "ranged": 7, "melee": 5 } + } ], "bleed_rate": 0, "vision_day": 30, @@ -686,28 +448,7 @@ "armor_bash": 10, "armor_cut": 18, "armor_bullet": 14, - "weakpoints": [ - { - "name": "an unarmored part of the leg", - "armor_mult": { "bullet": 0.5, "cut": 0.5, "stab": 0.25, "bash": 0.25 }, - "coverage": 8 - }, - { "name": "the arm", "armor_mult": { "bullet": 0.5, "cut": 0.5, "stab": 0.25, "bash": 0.25 }, "coverage": 8 }, - { "name": "the armpit", "armor_mult": { "bullet": 0.3, "cut": 0.3, "stab": 0.15, "bash": 0.15 }, "coverage": 1 }, - { - "name": "the weak armor on the side", - "armor_mult": { "bullet": 0.3, "cut": 0.3, "stab": 0.15, "bash": 0.15 }, - "coverage": 4 - }, - { - "name": "a gap in the stomach armor", - "armor_mult": { "bullet": 0.5, "cut": 0.5, "stab": 0.25, "bash": 0.25 }, - "coverage": 2 - }, - { "name": "the face", "armor_mult": { "physical": 0 }, "coverage": 3 }, - { "name": "the eye", "armor_mult": { "physical": 0 }, "coverage": 1 }, - { "name": "the neck", "armor_mult": { "physical": 0 }, "coverage": 1 } - ], + "weakpoint_sets": [ "wps_humanoid_body", "wps_humanoid_body_armor", "wps_humanoid_open_helmet", "wps_humanoid_gasmask" ], "vision_day": 50, "vision_night": 3, "luminance": 4, diff --git a/data/json/monsters/zed_survivor.json b/data/json/monsters/zed_survivor.json index 2d0985fc99a73..d82c59f64118e 100644 --- a/data/json/monsters/zed_survivor.json +++ b/data/json/monsters/zed_survivor.json @@ -24,6 +24,7 @@ "armor_cut": 7, "armor_bullet": 6, "armor_acid": 4, + "weakpoint_sets": [ "wps_humanoid_body", "wps_humanoid_light_armor", "wps_humanoid_open_helmet" ], "vision_day": 50, "vision_night": 3, "harvest": "zombie", @@ -49,6 +50,7 @@ "armor_cut": 25, "armor_stab": 18, "armor_bullet": 20, + "weakpoint_sets": [ "wps_humanoid_body", "wps_humanoid_body_armor", "wps_humanoid_full_helmet" ], "vision_night": 6, "death_drops": "mon_zombie_survivor_elite_death_drops" } diff --git a/tests/effective_dps_test.cpp b/tests/effective_dps_test.cpp index 768f6da085df2..a5a745a802f6f 100644 --- a/tests/effective_dps_test.cpp +++ b/tests/effective_dps_test.cpp @@ -15,7 +15,7 @@ static const mtype_id debug_mon( "debug_mon" ); static const mtype_id mon_zombie_smoker( "mon_zombie_smoker" ); static const mtype_id mon_zombie_soldier_no_weakpoints( "mon_zombie_soldier_no_weakpoints" ); -static const mtype_id mon_zombie_survivor( "mon_zombie_survivor" ); +static const mtype_id mon_zombie_survivor_no_weakpoints( "mon_zombie_survivor_no_weakpoints" ); static const skill_id skill_bashing( "bashing" ); static const skill_id skill_cutting( "cutting" ); @@ -179,7 +179,7 @@ TEST_CASE( "effective vs actual damage per second", "[actual][dps][!mayfail]" ) monster soldier( mon_zombie_soldier_no_weakpoints ); monster smoker( mon_zombie_smoker ); - monster survivor( mon_zombie_survivor ); + monster survivor( mon_zombie_survivor_no_weakpoints ); item clumsy_sword( "test_clumsy_sword" ); item normal_sword( "test_normal_sword" ); @@ -211,7 +211,7 @@ TEST_CASE( "accuracy increases success", "[accuracy][dps]" ) monster soldier( mon_zombie_soldier_no_weakpoints ); monster smoker( mon_zombie_smoker ); - monster survivor( mon_zombie_survivor ); + monster survivor( mon_zombie_survivor_no_weakpoints ); item clumsy_sword( "test_clumsy_sword" ); item normal_sword( "test_normal_sword" );