diff --git a/data/json/monsters/cyborgs.json b/data/json/monsters/cyborgs.json index ac6a6bb8123c0..26268c190334f 100644 --- a/data/json/monsters/cyborgs.json +++ b/data/json/monsters/cyborgs.json @@ -193,6 +193,7 @@ "melee_cut": 12, "armor_bash": 12, "armor_cut": 28, + "bleed_rate": 50, "vision_night": 3, "special_attacks": [ { "type": "bite", "cooldown": 5 }, [ "GRAB", 7 ], [ "scratch", 20 ] ], "death_drops": { "subtype": "collection", "groups": [ [ "robots", 80 ] ] }, diff --git a/data/json/monsters/fish.json b/data/json/monsters/fish.json index cccbc26cab972..6060db27211ef 100644 --- a/data/json/monsters/fish.json +++ b/data/json/monsters/fish.json @@ -25,6 +25,7 @@ "armor_bash": 20, "armor_cut": 30, "armor_bullet": 24, + "bleed_rate": 60, "vision_day": 30, "vision_night": 20, "path_settings": { "max_dist": 50, "avoid_traps": true, "avoid_sharp": true }, @@ -628,6 +629,7 @@ "dodge": 2, "armor_cut": 8, "armor_bullet": 6, + "bleed_rate": 85, "harvest": "shellfish", "anger_triggers": [ "PLAYER_CLOSE", "HURT" ], "fear_triggers": [ "FIRE" ], @@ -645,6 +647,7 @@ "volume": "625 L", "weight": "815 kg", "melee_dice": 2, + "bleed_rate": 60, "special_attacks": [ [ "PARROT", 20 ], { "id": "scratch", "damage_max_instance": [ { "damage_type": "cut", "amount": 23, "armor_multiplier": 0.8 } ] } @@ -677,6 +680,7 @@ "armor_bash": 10, "armor_cut": 18, "armor_bullet": 14, + "bleed_rate": 65, "vision_day": 30, "vision_night": 15, "path_settings": { "max_dist": 50, "avoid_traps": true, "avoid_sharp": true }, diff --git a/data/json/monsters/fungus.json b/data/json/monsters/fungus.json index 4841d66df4bd4..1742844e2f5bc 100644 --- a/data/json/monsters/fungus.json +++ b/data/json/monsters/fungus.json @@ -22,6 +22,7 @@ "melee_dice_sides": 6, "melee_cut": 0, "armor_bash": 2, + "bleed_rate": 0, "vision_day": 30, "vision_night": 3, "harvest": "zombie", @@ -52,6 +53,7 @@ "armor_bash": 4, "armor_cut": 4, "armor_bullet": 3, + "bleed_rate": 0, "luminance": 40, "harvest": "exempt", "special_attacks": [ [ "FUNGUS_HAZE", 25 ] ], @@ -82,6 +84,7 @@ "armor_bash": 10, "armor_cut": 10, "armor_bullet": 8, + "bleed_rate": 0, "harvest": "exempt", "special_attacks": [ [ "FUNGUS_BRISTLE", 10 ] ], "death_function": [ "DISINTEGRATE" ], @@ -112,6 +115,7 @@ "armor_bash": 10, "armor_cut": 4, "armor_bullet": 3, + "bleed_rate": 0, "harvest": "exempt", "special_attacks": [ [ "FUNGUS_INJECT", 10 ] ], "death_function": [ "FUNGUS" ], @@ -141,6 +145,7 @@ "armor_bash": 10, "armor_cut": 10, "armor_bullet": 8, + "bleed_rate": 0, "harvest": "exempt", "special_attacks": [ [ "FUNGUS", 10 ] ], "death_function": [ "DISINTEGRATE" ], @@ -169,6 +174,7 @@ "melee_dice_sides": 4, "melee_cut": 0, "armor_bash": 4, + "bleed_rate": 0, "harvest": "fungaloid", "special_attacks": [ [ "FUNGUS", 30 ] ], "death_function": [ "FUNGUS", "NORMAL" ], @@ -189,6 +195,7 @@ "armor_bullet": 20, "armor_stab": 20, "armor_acid": 3, + "bleed_rate": 0, "special_attacks": [ [ "FUNGUS", 20 ], { @@ -316,6 +323,7 @@ "armor_bash": 4, "armor_cut": 4, "armor_bullet": 3, + "bleed_rate": 0, "harvest": "fungaloid", "special_attacks": [ [ "FUNGUS_GROWTH", 10000 ] ], "death_function": [ "NORMAL" ], @@ -340,6 +348,7 @@ "morale": 75, "melee_cut": 0, "dodge": 2, + "bleed_rate": 0, "harvest": "exempt", "special_attacks": [ [ "PLANT", 100 ] ], "death_function": [ "DISINTEGRATE" ], @@ -369,6 +378,7 @@ "melee_dice_sides": 6, "melee_cut": 0, "armor_bash": 3, + "bleed_rate": 0, "vision_day": 5, "vision_night": 5, "harvest": "zombie", @@ -401,6 +411,7 @@ "melee_dice": 2, "melee_dice_sides": 4, "melee_cut": 0, + "bleed_rate": 0, "vision_day": 5, "vision_night": 5, "harvest": "exempt", @@ -435,6 +446,7 @@ "melee_cut": 2, "dodge": 4, "armor_fire": 5, + "bleed_rate": 0, "vision_day": 5, "vision_night": 3, "harvest": "zombie", @@ -469,6 +481,7 @@ "armor_bash": 20, "armor_cut": 45, "armor_bullet": 36, + "bleed_rate": 0, "vision_day": 5, "vision_night": 5, "harvest": "mr_bones", @@ -513,6 +526,7 @@ "melee_dice_sides": 6, "melee_cut": 2, "dodge": 2, + "bleed_rate": 0, "vision_day": 30, "vision_night": 5, "harvest": "zombie", @@ -552,6 +566,7 @@ "armor_bash": 1, "armor_cut": 1, "armor_bullet": 1, + "bleed_rate": 0, "vision_day": 3, "vision_night": 3, "harvest": "arachnid", @@ -585,6 +600,7 @@ "armor_bash": 2, "armor_cut": 6, "armor_bullet": 5, + "bleed_rate": 0, "vision_day": 5, "vision_night": 5, "harvest": "arachnid", diff --git a/data/json/monsters/insect_spider.json b/data/json/monsters/insect_spider.json index 8a21bad7e797f..d4524cc36f30d 100644 --- a/data/json/monsters/insect_spider.json +++ b/data/json/monsters/insect_spider.json @@ -22,6 +22,7 @@ "melee_cut": 4, "dodge": 4, "armor_bash": 6, + "bleed_rate": 60, "harvest": "arachnid_acid", "death_function": [ "NORMAL" ], "flags": [ "SMELLS", "HEARS", "GOODHEARING", "BASHES", "BORES", "POISON", "SUNDEATH", "ACIDPROOF", "ACIDTRAIL" ] @@ -50,6 +51,7 @@ "armor_bash": 12, "armor_cut": 8, "armor_bullet": 6, + "bleed_rate": 60, "harvest": "meatslug", "death_function": [ "WORM" ], "flags": [ "DIGS", "HEARS", "POISON", "GOODHEARING", "BASHES", "DESTROYS" ] @@ -478,6 +480,7 @@ "armor_cut": 25, "armor_bullet": 12, "armor_stab": 14, + "bleed_rate": 80, "vision_day": 9, "vision_night": 6, "anger_triggers": [ "STALK", "PLAYER_CLOSE" ], @@ -570,6 +573,7 @@ "armor_bullet": 45, "armor_cut": 35, "armor_stab": 15, + "bleed_rate": 60, "vision_day": 12, "vision_night": 7, "anger_triggers": [ "STALK", "PLAYER_WEAK", "HURT" ], @@ -1442,6 +1446,7 @@ "armor_cut": 14, "armor_stab": 12, "armor_bullet": 12, + "bleed_rate": 80, "vision_day": 17, "vision_night": 7, "harvest": "arachnid_wasp", @@ -1503,6 +1508,7 @@ "armor_cut": 30, "armor_stab": 18, "armor_bullet": 22, + "bleed_rate": 60, "harvest": "arachnid_wasp_queen", "reproduction": { "baby_egg": "egg_wasp", "baby_count": 4, "baby_timer": 5 }, "extend": { "flags": [ "PUSH_MON" ] }, @@ -1811,6 +1817,7 @@ "armor_bash": 12, "armor_cut": 14, "armor_bullet": 11, + "bleed_rate": 80, "vision_day": 5, "vision_night": 5, "special_attacks": [ [ "ACID", 15 ] ], @@ -1901,6 +1908,7 @@ "armor_bash": 10, "armor_cut": 12, "armor_bullet": 10, + "bleed_rate": 80, "vision_day": 5, "vision_night": 5, "harvest": "arachnid", @@ -1920,6 +1928,7 @@ "volume": "625 L", "weight": "815 kg", "melee_dice": 2, + "bleed_rate": 60, "special_attacks": [ [ "SMASH", 30 ], [ "BIO_OP_TAKEDOWN", 20 ], [ "RANGED_PULL", 20 ], [ "GRAB", 5 ] ], "extend": { "flags": [ "DESTROYS", "PUSH_MON", "PUSH_VEH", "RANGED_ATTACKER" ] } }, diff --git a/data/json/monsters/jabberwock.json b/data/json/monsters/jabberwock.json index 8e49506b21980..02e28e71aad1f 100644 --- a/data/json/monsters/jabberwock.json +++ b/data/json/monsters/jabberwock.json @@ -22,6 +22,7 @@ "armor_bash": 2, "armor_cut": 2, "armor_bullet": 2, + "bleed_rate": 80, "vision_day": 50, "vision_night": 3, "special_attacks": [ [ "FLESH_GOLEM", 10 ], [ "ABSORB_MEAT", 10 ] ], @@ -53,6 +54,7 @@ "armor_bash": 6, "armor_cut": 4, "armor_bullet": 3, + "bleed_rate": 60, "vision_day": 50, "vision_night": 3, "special_attacks": [ [ "FLESH_GOLEM", 8 ], [ "ABSORB_MEAT", 1 ] ], @@ -85,6 +87,7 @@ "armor_bash": 12, "armor_cut": 8, "armor_bullet": 6, + "bleed_rate": 40, "vision_day": 50, "vision_night": 3, "special_attacks": [ [ "FLESH_GOLEM", 5 ] ], diff --git a/data/json/monsters/marloss.json b/data/json/monsters/marloss.json index 66d143afd1c05..8426ec1a6fcc3 100644 --- a/data/json/monsters/marloss.json +++ b/data/json/monsters/marloss.json @@ -21,6 +21,7 @@ "melee_dice_sides": 4, "melee_cut": 0, "dodge": 1, + "bleed_rate": 50, "harvest": "human", "vision_day": 30, "vision_night": 3, @@ -52,6 +53,7 @@ "melee_dice_sides": 4, "melee_cut": 0, "dodge": 1, + "bleed_rate": 50, "harvest": "human", "vision_day": 30, "vision_night": 3, diff --git a/data/json/monsters/mi-go.json b/data/json/monsters/mi-go.json index e9df4f4ff78cd..62357c24b73a1 100644 --- a/data/json/monsters/mi-go.json +++ b/data/json/monsters/mi-go.json @@ -24,6 +24,7 @@ "armor_bash": 4, "armor_cut": 12, "armor_bullet": 10, + "bleed_rate": 75, "vision_day": 50, "vision_night": 20, "harvest": "zombie_meatslug", @@ -74,6 +75,7 @@ "armor_bash": 4, "armor_cut": 12, "armor_bullet": 10, + "bleed_rate": 50, "vision_day": 50, "vision_night": 20, "harvest": "zombie_meatslug", @@ -125,6 +127,7 @@ "armor_bash": 5, "armor_cut": 13, "armor_bullet": 10, + "bleed_rate": 75, "vision_day": 50, "vision_night": 20, "harvest": "zombie_meatslug", @@ -175,6 +178,7 @@ "armor_bash": 17, "armor_cut": 22, "armor_bullet": 18, + "bleed_rate": 50, "vision_day": 50, "vision_night": 20, "harvest": "zombie_meatslug", @@ -229,6 +233,7 @@ "armor_bash": 19, "armor_cut": 27, "armor_bullet": 22, + "bleed_rate": 25, "vision_day": 50, "vision_night": 25, "harvest": "zombie_meatslug", @@ -282,6 +287,7 @@ "armor_bash": 4, "armor_cut": 5, "armor_bullet": 4, + "bleed_rate": 25, "vision_day": 50, "vision_night": 25, "harvest": "zombie_meatslug", diff --git a/data/json/monsters/mutant.json b/data/json/monsters/mutant.json index 00adc491841d8..52b1cfc52c779 100644 --- a/data/json/monsters/mutant.json +++ b/data/json/monsters/mutant.json @@ -55,6 +55,7 @@ "armor_bash": 5, "armor_cut": 5, "armor_bullet": 4, + "bleed_rate": 75, "vision_day": 25, "vision_night": 5, "harvest": "human_fur", @@ -97,6 +98,7 @@ "armor_bash": 7, "armor_cut": 7, "armor_bullet": 6, + "bleed_rate": 50, "vision_night": 15, "harvest": "human_large_fur", "special_attacks": [ diff --git a/data/json/monsters/mutant_mammal.json b/data/json/monsters/mutant_mammal.json index 68f47f28b1c50..b8b573988e929 100644 --- a/data/json/monsters/mutant_mammal.json +++ b/data/json/monsters/mutant_mammal.json @@ -24,6 +24,7 @@ "dodge": 3, "armor_bash": 8, "armor_cut": 12, + "bleed_rate": 80, "vision_day": 30, "vision_night": 10, "path_settings": { "max_dist": 10 }, @@ -283,6 +284,7 @@ "dodge": 2, "armor_bash": 8, "armor_cut": 10, + "bleed_rate": 60, "vision_day": 50, "vision_night": 5, "harvest": "mutant_mammal_large_fur", diff --git a/data/json/monsters/nether.json b/data/json/monsters/nether.json index d285cf229bfe5..8071ff1307a89 100644 --- a/data/json/monsters/nether.json +++ b/data/json/monsters/nether.json @@ -56,6 +56,7 @@ "melee_dice_sides": 4, "melee_cut": 0, "dodge": 2, + "bleed_rate": 50, "harvest": "human", "special_attacks": [ [ "FEAR_PARALYZE", 0 ] ], "death_function": [ "AMIGARA", "NORMAL" ], @@ -260,6 +261,7 @@ "melee_cut": 0, "dodge": 1, "armor_bash": 4, + "bleed_rate": 20, "vision_day": 50, "vision_night": 40, "luminance": 25, @@ -293,6 +295,7 @@ "melee_cut": 6, "dodge": 7, "armor_bash": 8, + "bleed_rate": 40, "harvest": "exempt", "death_function": [ "MELT" ], "flags": [ @@ -333,6 +336,7 @@ "melee_dice_sides": 6, "melee_cut": 0, "dodge": 4, + "bleed_rate": 60, "vision_day": 30, "harvest": "gozu", "special_attacks": [ [ "FEAR_PARALYZE", 20 ] ], @@ -361,6 +365,7 @@ "melee_dice_sides": 4, "melee_cut": 0, "dodge": 4, + "bleed_rate": 60, "path_settings": { "avoid_traps": true, "avoid_sharp": true }, "harvest": "demihuman", "death_function": [ "NORMAL" ], @@ -418,6 +423,7 @@ "dodge": 5, "armor_cut": 50, "armor_bullet": 40, + "bleed_rate": 20, "vision_day": 50, "vision_night": 50, "harvest": "exempt", @@ -462,6 +468,7 @@ "dodge": 5, "armor_cut": 50, "armor_bullet": 40, + "bleed_rate": 0, "vision_day": 50, "vision_night": 50, "harvest": "exempt", @@ -572,6 +579,7 @@ "dodge": 8, "armor_cut": 5, "armor_bullet": 4, + "bleed_rate": 40, "vision_day": 50, "//": "a good candidate for an alien anatomy harvest", "harvest": "exempt", @@ -740,6 +748,7 @@ "melee_cut": 0, "dodge": 2, "armor_bash": 8, + "bleed_rate": 20, "harvest": "exempt", "special_attacks": [ [ "TENTACLE", 5 ] ], "death_function": [ "MELT" ], @@ -795,6 +804,7 @@ "melee_cut": 8, "dodge": 1, "armor_bash": 6, + "bleed_rate": 50, "harvest": "meatslug", "special_attacks": [ [ "GENE_STING", 20 ] ], "death_function": [ "NORMAL" ], diff --git a/data/json/monsters/power_leech.json b/data/json/monsters/power_leech.json index f103c93c9d557..a93d257256003 100644 --- a/data/json/monsters/power_leech.json +++ b/data/json/monsters/power_leech.json @@ -17,6 +17,7 @@ "aggression": 100, "morale": 100, "armor_bash": 15, + "bleed_rate": 30, "vision_day": 30, "vision_night": 12, "luminance": 200, @@ -57,6 +58,7 @@ "aggression": 100, "morale": 100, "armor_bash": 15, + "bleed_rate": 30, "vision_day": 30, "vision_night": 8, "luminance": 200, @@ -95,6 +97,7 @@ "aggression": 100, "morale": 100, "armor_bash": 15, + "bleed_rate": 30, "vision_day": 30, "vision_night": 8, "luminance": 200, diff --git a/data/json/monsters/slimes.json b/data/json/monsters/slimes.json index 230e6956aad0b..c32d81d0c4ae4 100644 --- a/data/json/monsters/slimes.json +++ b/data/json/monsters/slimes.json @@ -25,6 +25,7 @@ "armor_bash": 12, "armor_stab": 14, "armor_acid": 15, + "bleed_rate": 30, "harvest": "exempt", "special_attacks": [ [ "FORMBLOB", 30 ] ], "death_function": [ "BLOBSPLIT" ], @@ -54,6 +55,7 @@ "melee_dice_sides": 4, "melee_cut": 0, "armor_bash": 12, + "bleed_rate": 20, "harvest": "exempt", "special_attacks": [ [ "CALLBLOBS", 0 ] ], "death_function": [ "BRAINBLOB" ], @@ -87,6 +89,7 @@ "armor_bullet": 3, "armor_stab": 20, "armor_acid": 20, + "bleed_rate": 30, "harvest": "exempt", "special_attacks": [ [ "FORMBLOB", 20 ] ], "death_function": [ "BLOBSPLIT" ], diff --git a/data/json/monsters/slugs.json b/data/json/monsters/slugs.json index 94a9ad034227c..8f65107620027 100644 --- a/data/json/monsters/slugs.json +++ b/data/json/monsters/slugs.json @@ -22,6 +22,7 @@ "melee_cut": 0, "dodge": 12, "armor_bash": 4, + "bleed_rate": 30, "vision_day": 10, "vision_night": 30, "harvest": "exempt", @@ -65,6 +66,7 @@ "armor_bash": 8, "armor_cut": 2, "armor_bullet": 2, + "bleed_rate": 60, "vision_day": 30, "harvest": "mutant_meatslug", "special_attacks": [ [ "ACID", 10 ] ], diff --git a/data/json/monsters/triffid.json b/data/json/monsters/triffid.json index 49014177de483..4395fd8b13587 100644 --- a/data/json/monsters/triffid.json +++ b/data/json/monsters/triffid.json @@ -43,6 +43,7 @@ "aggression": 100, "morale": 100, "melee_cut": 0, + "bleed_rate": 80, "harvest": "biollante", "special_attacks": [ [ "SPIT_SAP", 2 ] ], "death_drops": { "subtype": "collection", "groups": [ [ "biollante", 8 ] ], "//": "80% chance of an item from group biollante" }, @@ -67,6 +68,7 @@ "morale": 100, "melee_cut": 0, "armor_bash": 8, + "bleed_rate": 50, "harvest": "exempt", "special_attacks": [ [ "GROW_VINE", 60 ] ], "death_function": [ "KILL_VINES" ], @@ -90,6 +92,7 @@ "morale": 100, "melee_cut": 0, "armor_bash": 2, + "bleed_rate": 80, "harvest": "exempt", "special_attacks": [ [ "VINE", 100 ] ], "death_function": [ "VINE_CUT" ], @@ -139,6 +142,7 @@ "melee_dice": 1, "melee_dice_sides": 4, "melee_cut": 4, + "bleed_rate": 75, "harvest": "triffid_paralytic", "upgrades": { "age_grow": 14, "into": "mon_triffid" }, "special_attacks": [ [ "TRIFFID_GROWTH", 28800 ] ], @@ -169,6 +173,7 @@ "armor_bash": 10, "armor_cut": 4, "armor_bullet": 3, + "bleed_rate": 60, "harvest": "triffid_paralytic", "death_function": [ "NORMAL" ], "fungalize_into": "mon_fungaloid", @@ -197,6 +202,7 @@ "armor_bash": 12, "armor_cut": 8, "armor_bullet": 6, + "bleed_rate": 40, "harvest": "triffid_queen", "special_attacks": [ [ "GROWPLANTS", 20 ] ], "death_function": [ "NORMAL" ], @@ -225,6 +231,7 @@ "melee_cut": 0, "dodge": 4, "armor_bash": 18, + "bleed_rate": 10, "harvest": "triffid_small", "death_function": [ "NORMAL" ], "flags": [ "HEARS", "GOODHEARING", "NOHEAD", "HARDTOSHOOT", "GRABS", "SWIMS", "PLASTIC" ] @@ -252,6 +259,7 @@ "armor_bash": 4, "armor_cut": 6, "armor_bullet": 5, + "bleed_rate": 60, "harvest": "triffid_fungal_fighter", "attack_effs": [ { "id": "paralyzepoison", "//": "applying this multiple times makes intensity go up by 3 instead of 1", "duration": 33 }, @@ -281,6 +289,7 @@ "aggression": 100, "morale": 100, "melee_cut": 0, + "bleed_rate": 60, "harvest": "triffid_paralytic", "special_attacks": [ [ "SPIT_SAP", 3 ], [ "PARA_STING", 12 ] ], "death_function": [ "NORMAL" ], diff --git a/data/json/monsters/zanimal_upgrade.json b/data/json/monsters/zanimal_upgrade.json index a65290baff1a7..5beff93f879e4 100644 --- a/data/json/monsters/zanimal_upgrade.json +++ b/data/json/monsters/zanimal_upgrade.json @@ -25,6 +25,7 @@ "armor_bullet": 12, "armor_stab": 30, "armor_acid": 3, + "bleed_rate": 50, "vision_night": 3, "harvest": "mr_bones", "special_attacks": [ { "type": "bite", "cooldown": 5 } ], @@ -50,6 +51,7 @@ "armor_bullet": 5, "vision_night": 1 }, + "bleed_rate": 50, "upgrades": { "half_life": 21, "into": "mon_dog_zombie_hulk" }, "special_attacks": [ [ "SMASH", 30 ], { "type": "bite", "move_cost": 150, "cooldown": 2, "accuracy": 4, "no_infection_chance": 12 } ], "extend": { "flags": [ "GROUP_BASH", "PUSH_VEH" ] } @@ -69,6 +71,7 @@ "armor_bash": 8, "armor_cut": 12, "armor_bullet": 10, + "bleed_rate": 0, "upgrades": { }, "special_attacks": [ [ "SMASH", 20 ], { "type": "bite", "move_cost": 188, "cooldown": 2, "accuracy": 4, "no_infection_chance": 12 } ], "extend": { "flags": [ "DESTROYS" ] } @@ -87,6 +90,7 @@ "armor_bullet": 24, "armor_bash": 12, "armor_acid": 1, + "bleed_rate": 0, "special_attacks": [ [ "SMASH", 45 ], { "id": "scratch", "damage_max_instance": [ { "damage_type": "cut", "amount": 15, "armor_multiplier": 0.6 } ] } @@ -111,6 +115,7 @@ "armor_bullet": 5, "vision_night": 1 }, + "bleed_rate": 50, "special_attacks": [ [ "SMASH", 30 ], { "id": "impale" } ], "extend": { "flags": [ "GROUP_BASH", "PUSH_VEH", "HIT_AND_RUN" ] } }, @@ -122,6 +127,7 @@ "description": "Billowing clouds of yellow-streaked gas precede boar-shaped shadows. Glimpses of a zombie boar are quickly obscured by the gases leaving its body through open wounds.", "diff": 5, "color": "red", + "bleed_rate": 50, "weight": "150 kg", "harvest": "exempt", "emit_fields": [ { "emit_id": "emit_tear_gas_stream", "delay": "1 s" } ], @@ -156,6 +162,7 @@ "armor_bullet": 12, "armor_stab": 30, "armor_acid": 3, + "bleed_rate": 50, "vision_night": 3, "harvest": "mr_bones", "special_attacks": [ { "type": "bite", "cooldown": 5 } ], @@ -176,6 +183,7 @@ "melee_dice": 6, "melee_cut": 8, "dodge": 5, + "bleed_rate": 50, "vision_night": 12, "special_attacks": [ { "id": "scratch", "move_cost": 190, "damage_max_instance": [ { "damage_type": "cut", "amount": 12 } ] }, @@ -207,6 +215,7 @@ "armor_bullet": 32, "armor_stab": 30, "armor_acid": 3, + "bleed_rate": 0, "vision_day": 10, "harvest": "mr_bones", "special_attacks": [ [ "scratch", 10 ], { "type": "bite", "cooldown": 5 } ], @@ -220,6 +229,7 @@ "description": "An uncanny shadow envelops this creature, as if light itself were too repulsed to touch it. All you can make out is the outline of a large, shambling cat.", "color": "light_gray", "vision_day": 3, + "bleed_rate": 50, "vision_night": 45, "flags": [ "SEES", @@ -250,6 +260,7 @@ "melee_skill": 4, "melee_dice": 3, "dodge": 3, + "bleed_rate": 50, "special_attacks": [ [ "ACID_BARF", 10 ] ], "death_function": [ "ACID", "NORMAL" ], "flags": [ @@ -287,6 +298,7 @@ "armor_bash": 10, "armor_cut": 10, "armor_bullet": 8, + "bleed_rate": 50, "vision_night": 6, "special_attacks": [ [ "SMASH", 30 ], [ "GRAB", 7 ] ], "flags": [ @@ -321,6 +333,7 @@ "armor_bash": 8, "armor_cut": 8, "armor_bullet": 6, + "bleed_rate": 0, "vision_night": 7, "harvest": "zombie_thorny", "attack_effs": [ { "id": "paralyzepoison", "duration": 33 } ], diff --git a/data/json/monsters/zed-animal.json b/data/json/monsters/zed-animal.json index 1e0dcc041a0fe..ed99674f551d9 100644 --- a/data/json/monsters/zed-animal.json +++ b/data/json/monsters/zed-animal.json @@ -118,6 +118,7 @@ "melee_dice_sides": 4, "melee_cut": 2, "dodge": 1, + "bleed_rate": 50, "vision_day": 30, "vision_night": 4, "harvest": "zombie", diff --git a/data/json/monsters/zed-pupating.json b/data/json/monsters/zed-pupating.json index ea40b60c81045..b3177900f0a3c 100644 --- a/data/json/monsters/zed-pupating.json +++ b/data/json/monsters/zed-pupating.json @@ -9,6 +9,7 @@ "armor_bash": 7, "armor_cut": 5, "armor_bullet": 5, + "bleed_rate": 50, "special_attacks": [ { "type": "bite", "cooldown": 3 } ], "regenerates": 10, "extend": { "flags": [ "SLUDGETRAIL", "SLUDGEPROOF" ] } @@ -40,6 +41,7 @@ "armor_bash": 8, "armor_cut": 6, "armor_bullet": 6, + "bleed_rate": 50, "special_attacks": [ { "type": "bite", "cooldown": 3 } ], "regenerates": 10, "extend": { "flags": [ "SLUDGETRAIL", "SLUDGEPROOF" ] } @@ -73,6 +75,7 @@ "armor_bullet": 6, "special_attacks": [ { "type": "bite", "cooldown": 3 } ], "regenerates": 5, + "bleed_rate": 0, "vision_day": 8, "vision_night": 15, "extend": { "flags": [ "SLUDGETRAIL", "SLUDGEPROOF", "NIGHT_INVISIBILITY" ] } diff --git a/data/json/monsters/zed-winged.json b/data/json/monsters/zed-winged.json index 8c7c26b093cd2..a3486fa0b58dc 100644 --- a/data/json/monsters/zed-winged.json +++ b/data/json/monsters/zed-winged.json @@ -20,6 +20,7 @@ "melee_dice": 2, "melee_dice_sides": 2, "melee_cut": 0, + "bleed_rate": 50, "vision_night": 3, "harvest": "zombie", "special_attacks": [ @@ -73,6 +74,7 @@ "armor_bash": 2, "armor_cut": 2, "armor_bullet": 2, + "bleed_rate": 0, "vision_night": 7, "harvest": "zombie", "special_attacks": [ diff --git a/data/json/monsters/zed_acid.json b/data/json/monsters/zed_acid.json index 328abbac67496..f86a90c6a635d 100644 --- a/data/json/monsters/zed_acid.json +++ b/data/json/monsters/zed_acid.json @@ -73,6 +73,7 @@ "armor_cut": 2, "armor_bullet": 2, "armor_stab": 12, + "bleed_rate": 50, "vision_night": 3, "luminance": 0, "harvest": "zombie", @@ -135,6 +136,7 @@ "melee_dice_sides": 6, "melee_cut": 0, "dodge": 1, + "bleed_rate": 50, "vision_night": 3, "harvest": "zombie", "special_attacks": [ [ "ACID", 20 ] ], @@ -272,6 +274,7 @@ "armor_bullet": 3, "vision_night": 1 }, + "bleed_rate": 50, "proportional": { "hp": 1.8, "speed": 1.3, "volume": 1.4, "weigth": 1.1 }, "special_when_hit": [ "ACIDSPLASH", 100 ] } diff --git a/data/json/monsters/zed_burned.json b/data/json/monsters/zed_burned.json index a5e022bafe5b7..6f94b14a48ae6 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, + "bleed_rate": 0, "vision_day": 10, "vision_night": 3, "harvest": "zombie", @@ -73,6 +74,7 @@ "armor_bullet": 10, "armor_acid": 5, "armor_fire": 15, + "bleed_rate": 0, "vision_day": 10, "vision_night": 3, "harvest": "zombie", @@ -107,6 +109,7 @@ "armor_bullet": 7, "armor_acid": 3, "armor_fire": 15, + "bleed_rate": 0, "vision_day": 10, "vision_night": 3, "harvest": "zombie", diff --git a/data/json/monsters/zed_children.json b/data/json/monsters/zed_children.json index 6512ba1615ce2..145f96410dd65 100644 --- a/data/json/monsters/zed_children.json +++ b/data/json/monsters/zed_children.json @@ -21,6 +21,7 @@ "melee_dice_sides": 4, "melee_cut": 2, "dodge": 3, + "bleed_rate": 50, "harvest": "zombie", "vision_day": 30, "vision_night": 3, @@ -92,6 +93,7 @@ "melee_dice_sides": 2, "melee_cut": 1, "dodge": 1, + "bleed_rate": 50, "vision_day": 10, "vision_night": 10, "harvest": "zombie", @@ -125,6 +127,7 @@ "melee_dice": 2, "melee_dice_sides": 2, "melee_cut": 1, + "bleed_rate": 50, "dodge": 1, "vision_day": 30, "vision_night": 5, @@ -160,6 +163,7 @@ "melee_cut": 2, "dodge": 1, "armor_bash": 1, + "bleed_rate": 50, "vision_day": 30, "vision_night": 5, "harvest": "zombie", @@ -193,6 +197,7 @@ "melee_dice_sides": 4, "melee_cut": 3, "dodge": 2, + "bleed_rate": 50, "vision_day": 10, "vision_night": 10, "harvest": "zombie", @@ -229,6 +234,7 @@ "dodge": 2, "armor_cut": 5, "armor_bullet": 4, + "bleed_rate": 50, "vision_day": 30, "vision_night": 5, "harvest": "zombie", diff --git a/data/json/monsters/zed_electric.json b/data/json/monsters/zed_electric.json index cd0af42c05415..3a86cd410b92b 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, + "bleed_rate": 0, "vision_night": 3, "luminance": 16, "harvest": "CBM_SUBS", @@ -72,6 +73,7 @@ "melee_damage": [ { "damage_type": "electric", "amount": 8 } ], "melee_cut": 0, "dodge": 2, + "bleed_rate": 50, "luminance": 8, "harvest": "CBM_CIV", "special_attacks": [ [ "SHOCKSTORM", 25 ] ], @@ -118,6 +120,7 @@ "melee_skill": 5, "melee_dice": 1, "melee_dice_sides": 2, + "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 } ], "vision_night": 3, diff --git a/data/json/monsters/zed_explosive.json b/data/json/monsters/zed_explosive.json index 47f11eda5b05e..766d6b5072e79 100644 --- a/data/json/monsters/zed_explosive.json +++ b/data/json/monsters/zed_explosive.json @@ -70,6 +70,7 @@ "armor_bash": 5, "armor_cut": 5, "armor_bullet": 4, + "bleed_rate": 50, "vision_night": 3, "harvest": "zombie", "fungalize_into": "mon_boomer_fungus", diff --git a/data/json/monsters/zed_ferrous.json b/data/json/monsters/zed_ferrous.json index 7ef920f5c26ff..7daa684791f61 100644 --- a/data/json/monsters/zed_ferrous.json +++ b/data/json/monsters/zed_ferrous.json @@ -69,6 +69,7 @@ "armor_cut": 8, "armor_bullet": 8, "armor_stab": 8, + "bleed_rate": 50, "vision_night": 3, "harvest": "zombie", "special_attacks": [ { "type": "bite", "cooldown": 5 }, [ "GRAB", 7 ], [ "scratch", 20 ] ], @@ -118,6 +119,7 @@ "armor_cut": 15, "armor_bullet": 15, "armor_stab": 15, + "bleed_rate": 0, "vision_night": 3, "luminance": 0, "harvest": "zombie", @@ -163,6 +165,7 @@ "melee_dice_sides": 6, "melee_cut": 12, "dodge": 1, + "bleed_rate": 0, "vision_night": 3, "harvest": "zombie", "special_attacks": [ { "type": "bite", "cooldown": 5 }, [ "GRAB", 7 ], [ "scratch", 20 ], [ "impale", 25 ] ], @@ -210,6 +213,7 @@ "melee_dice": 3, "melee_dice_sides": 8, "melee_cut": 2, + "bleed_rate": 0, "vision_day": 14, "harvest": "zombie", "special_attacks": [ { "type": "bite", "cooldown": 5 }, [ "GRAB", 7 ], [ "scratch", 20 ] ], diff --git a/data/json/monsters/zed_fusion.json b/data/json/monsters/zed_fusion.json index 65ce920c03cea..c24ca3f68fc9e 100644 --- a/data/json/monsters/zed_fusion.json +++ b/data/json/monsters/zed_fusion.json @@ -103,6 +103,7 @@ "armor_bash": 10, "armor_cut": 20, "armor_bullet": 16, + "bleed_rate": 0, "harvest": "exempt", "special_attacks": [ [ "FLESH_TENDRIL", 1 ] ], "death_function": [ "GAS" ], @@ -163,6 +164,7 @@ "armor_bash": 6, "armor_cut": 6, "armor_bullet": 5, + "bleed_rate": 50, "vision_night": 50, "harvest": "exempt", "special_attacks": [ { "type": "leap", "cooldown": 5, "max_range": 5, "allow_no_target": true }, [ "scratch", 5 ] ], @@ -195,6 +197,7 @@ "armor_bash": 6, "armor_cut": 6, "armor_bullet": 5, + "bleed_rate": 50, "harvest": "exempt", "starting_ammo": { "barb_paralysis": 100 }, "special_attacks": [ @@ -236,6 +239,7 @@ "armor_bash": 2, "armor_cut": 10, "armor_bullet": 10, + "bleed_rate": 50, "vision_day": 1, "special_attacks": [ { "type": "leap", "cooldown": 5, "max_range": 3, "allow_no_target": true }, [ "scratch", 5 ] ], "death_function": [ "GAS" ], @@ -265,6 +269,7 @@ "armor_bash": 6, "armor_cut": 10, "armor_bullet": 6, + "bleed_rate": 50, "vision_day": 2, "vision_night": 2, "harvest": "exempt", @@ -293,6 +298,7 @@ "armor_bash": 25, "armor_cut": 25, "armor_bullet": 20, + "bleed_rate": 50, "harvest": "exempt", "death_function": [ "NORMAL" ], "flags": [ "SEES", "HEARS", "SMELLS", "IMMOBILE", "WARM", "POISON", "IMMOBILE", "NO_BREATHE", "FILTHY" ] @@ -318,6 +324,7 @@ "armor_bash": 15, "armor_cut": 15, "armor_bullet": 10, + "bleed_rate": 0, "harvest": "exempt", "death_function": [ "NORMAL" ], "flags": [ "SEES", "HEARS", "SMELLS", "IMMOBILE", "WARM", "POISON", "IMMOBILE", "NO_BREATHE", "FILTHY" ] diff --git a/data/json/monsters/zed_lab.json b/data/json/monsters/zed_lab.json index 2022c945d063e..2ecba334e2048 100644 --- a/data/json/monsters/zed_lab.json +++ b/data/json/monsters/zed_lab.json @@ -156,6 +156,7 @@ "armor_bash": 40, "armor_cut": 40, "armor_bullet": 30, + "bleed_rate": 50, "vision_night": 5, "luminance": 16, "special_attacks": [ diff --git a/data/json/monsters/zed_misc.json b/data/json/monsters/zed_misc.json index afd33a3c5ed05..615eb9bd17c66 100644 --- a/data/json/monsters/zed_misc.json +++ b/data/json/monsters/zed_misc.json @@ -23,6 +23,7 @@ "armor_bash": 12, "armor_cut": 2, "armor_bullet": 1, + "bleed_rate": 0, "vision_night": 7, "harvest": "zombie", "special_attacks": [ @@ -109,6 +110,7 @@ "armor_bash": 5, "armor_cut": 2, "armor_bullet": 2, + "bleed_rate": 0, "vision_day": 15, "vision_night": 3, "harvest": "zombie", @@ -215,6 +217,7 @@ "armor_bash": 4, "armor_cut": 6, "armor_bullet": 5, + "bleed_rate": 50, "vision_night": 4, "harvest": "zombie", "special_attacks": [ [ "SMASH", 30 ], [ "GRAB", 7 ] ], @@ -266,6 +269,7 @@ "armor_cut": 14, "armor_bullet": 8, "armor_stab": 8, + "bleed_rate": 50, "vision_night": 3, "harvest": "zombie", "special_attacks": [ [ "SMASH", 30 ], [ "BIO_OP_TAKEDOWN", 20 ], [ "RANGED_PULL", 20 ], [ "GRAB_DRAG", 10 ] ], @@ -315,6 +319,7 @@ "armor_bash": 8, "armor_cut": 5, "armor_bullet": 4, + "bleed_rate": 0, "vision_day": 5, "vision_night": 40, "harvest": "zombie", @@ -361,6 +366,7 @@ "melee_dice": 2, "melee_dice_sides": 4, "melee_cut": 0, + "bleed_rate": 50, "vision_day": 7, "vision_night": 4, "harvest": "zombie", @@ -408,6 +414,7 @@ "melee_dice_sides": 4, "melee_cut": 0, "dodge": 1, + "bleed_rate": 50, "vision_day": 30, "vision_night": 3, "harvest": "zombie", @@ -455,6 +462,7 @@ "melee_dice_sides": 5, "melee_cut": 0, "dodge": 2, + "bleed_rate": 50, "vision_day": 30, "vision_night": 5, "harvest": "zombie", @@ -505,6 +513,7 @@ "armor_cut": 4, "armor_bullet": 10, "armor_stab": 10, + "bleed_rate": 0, "vision_day": 30, "vision_night": 3, "harvest": "zombie", @@ -537,6 +546,7 @@ "armor_bash": 8, "armor_cut": 12, "armor_bullet": 10, + "bleed_rate": 0, "vision_day": 83, "vision_night": 4, "harvest": "zombie", @@ -582,6 +592,7 @@ "melee_dice_sides": 4, "melee_cut": 2, "dodge": 3, + "bleed_rate": 50, "vision_night": 5, "harvest": "zombie", "special_attacks": [ @@ -658,6 +669,7 @@ "armor_bash": 8, "armor_cut": 10, "armor_bullet": 8, + "bleed_rate": 0, "vision_day": 25, "vision_night": 5, "harvest": "zombie", @@ -720,6 +732,7 @@ "armor_bash": 2, "armor_cut": 2, "armor_bullet": 2, + "bleed_rate": 0, "vision_day": 50, "vision_night": 5, "harvest": "zombie", @@ -768,6 +781,7 @@ "melee_dice_sides": 6, "melee_cut": 2, "dodge": 2, + "bleed_rate": 0, "vision_day": 50, "vision_night": 5, "harvest": "zombie", @@ -867,6 +881,7 @@ "armor_bash": 5, "armor_cut": 5, "armor_bullet": 4, + "bleed_rate": 0, "vision_day": 45, "vision_night": 15, "harvest": "zombie", @@ -908,6 +923,7 @@ "melee_dice_sides": 4, "melee_cut": 5, "dodge": 2, + "bleed_rate": 50, "vision_day": 50, "vision_night": 8, "harvest": "zombie", @@ -1066,6 +1082,7 @@ "armor_bash": 5, "armor_cut": 3, "armor_bullet": 2, + "bleed_rate": 0, "vision_day": 25, "vision_night": 5, "harvest": "zombie", @@ -1112,6 +1129,7 @@ "melee_cut": 2, "dodge": 4, "armor_fire": 5, + "bleed_rate": 50, "vision_day": 50, "vision_night": 3, "harvest": "exempt", @@ -1160,6 +1178,7 @@ "armor_cut": 8, "armor_stab": 8, "armor_bullet": 10, + "bleed_rate": 50, "dodge": 7, "armor_fire": 5, "vision_day": 30, @@ -1383,6 +1402,7 @@ "armor_bash": 2, "armor_cut": 4, "armor_bullet": 3, + "bleed_rate": 50, "vision_night": 5, "harvest": "zombie_thorny", "attack_effs": [ { "id": "paralyzepoison", "duration": 33 } ], diff --git a/data/json/monsters/zed_radiation.json b/data/json/monsters/zed_radiation.json index 1941df0cf89bf..2e24ba85692d2 100644 --- a/data/json/monsters/zed_radiation.json +++ b/data/json/monsters/zed_radiation.json @@ -24,6 +24,7 @@ "armor_bash": 6, "armor_cut": 6, "armor_bullet": 5, + "bleed_rate": 0, "vision_day": 50, "vision_night": 3, "harvest": "zombie", @@ -57,6 +58,7 @@ "armor_bash": 4, "armor_cut": 4, "armor_bullet": 3, + "bleed_rate": 50, "vision_day": 50, "vision_night": 3, "harvest": "zombie", @@ -90,6 +92,7 @@ "armor_bash": 5, "armor_cut": 5, "armor_bullet": 4, + "bleed_rate": 50, "vision_day": 50, "vision_night": 3, "luminance": 8, @@ -124,6 +127,7 @@ "armor_bash": 6, "armor_cut": 6, "armor_bullet": 5, + "bleed_rate": 50, "vision_day": 50, "vision_night": 3, "luminance": 16, @@ -158,6 +162,7 @@ "armor_bash": 8, "armor_cut": 8, "armor_bullet": 6, + "bleed_rate": 50, "vision_day": 50, "vision_night": 3, "luminance": 32, diff --git a/data/json/monsters/zed_skeletal.json b/data/json/monsters/zed_skeletal.json index f3c08171c2590..1aa3ae2533d4a 100644 --- a/data/json/monsters/zed_skeletal.json +++ b/data/json/monsters/zed_skeletal.json @@ -25,6 +25,7 @@ "armor_bullet": 24, "armor_stab": 30, "armor_acid": 3, + "bleed_rate": 50, "vision_day": 30, "vision_night": 3, "harvest": "mr_bones", @@ -61,6 +62,7 @@ "armor_bullet": 30, "armor_bash": 12, "armor_acid": 1, + "bleed_rate": 0, "vision_day": 35, "vision_night": 3, "harvest": "mr_bones", @@ -101,6 +103,7 @@ "armor_bullet": 30, "armor_stab": 30, "armor_acid": 3, + "bleed_rate": 0, "vision_day": 30, "vision_night": 3, "harvest": "CBM_CIV", @@ -134,6 +137,7 @@ "armor_bash": 20, "armor_cut": 45, "armor_bullet": 36, + "bleed_rate": 0, "vision_day": 50, "vision_night": 4, "harvest": "mr_bones", diff --git a/data/json/monsters/zed_soldiers.json b/data/json/monsters/zed_soldiers.json index 601d3c93b765b..b4b9e30c3a5d3 100644 --- a/data/json/monsters/zed_soldiers.json +++ b/data/json/monsters/zed_soldiers.json @@ -62,6 +62,7 @@ "armor_bash": 12, "armor_cut": 25, "armor_bullet": 20, + "bleed_rate": 50, "vision_day": 30, "vision_night": 35, "harvest": "zombie", @@ -98,6 +99,7 @@ "description": "Fragments of visible uniform hint that this monstrosity was once a soldier. Anything human is invisible, hidden inside a sheath of living shadow. It moves with preternatural fluidity and grace.", "copy-from": "mon_zombie_soldier_blackops_1", "looks_like": "mon_zombie_soldier_blackops_1", + "bleed_rate": 0, "relative": { "hp": 20, "speed": 10, "melee_skill": 1, "dodge": 1, "vision_night": 15 }, "delete": { "upgrades": { "half_life": 38, "into": "mon_zombie_soldier_blackops_2" } }, "extend": { @@ -120,6 +122,7 @@ "copy-from": "mon_zombie_soldier", "looks_like": "mon_zombie_soldier", "diff": 20, + "bleed_rate": 50, "delete": { "upgrades": { "half_life": 28, "into_group": "GROUP_SOLDIER_UPGRADE" } }, "relative": { "hp": 20, "speed": 10, "melee_skill": 1, "vision_day": 10, "vision_night": 10 }, "extend": { @@ -150,6 +153,7 @@ "copy-from": "mon_zombie_soldier", "looks_like": "mon_zombie_soldier", "diff": 20, + "bleed_rate": 50, "delete": { "upgrades": { "half_life": 28, "into_group": "GROUP_SOLDIER_UPGRADE" } }, "relative": { "hp": 40, "speed": -10, "melee_skill": 2, "armor_bash": 5 }, "extend": { @@ -199,6 +203,7 @@ "armor_bash": 20, "armor_cut": 30, "armor_bullet": 24, + "bleed_rate": 50, "vision_day": 30, "vision_night": 5, "harvest": "zombie_kevlar", @@ -238,6 +243,7 @@ "armor_bash": 30, "armor_cut": 50, "armor_bullet": 40, + "bleed_rate": 0, "vision_day": 50, "vision_night": 10, "harvest": "zombie_kevlar", @@ -376,6 +382,7 @@ "armor_bullet": 51, "armor_acid": 20, "armor_fire": 20, + "bleed_rate": 0, "vision_day": 30, "vision_night": 3, "harvest": "zombie", diff --git a/doc/MONSTERS.md b/doc/MONSTERS.md index ad1f898c68274..71e5a7feacaee 100644 --- a/doc/MONSTERS.md +++ b/doc/MONSTERS.md @@ -328,6 +328,11 @@ Amount of light passively output by monster. Ranges from 0 to 10. Monster hit points. +## "bleed_rate" +(integer, optional) + +Percent multiplier on all bleed effects' duration applied to the monster. Values below the default of 100 mean a resistance to bleed, values above 100 make the monster bleed longer and more intensive. 0 translates to bleed immunity. + ## "death_drops" (string or item group, optional) diff --git a/src/character.h b/src/character.h index 3784c49fd0760..cd605d45d17ba 100644 --- a/src/character.h +++ b/src/character.h @@ -1864,7 +1864,7 @@ class Character : public Creature, public visitable bool cast_spell( spell &sp, bool fake_spell, cata::optional target ); void make_bleed( const effect_source &source, const bodypart_id &bp, time_duration duration, - int intensity = 1, bool permanent = false, bool force = false, bool defferred = false ); + int intensity = 1, bool permanent = false, bool force = false, bool defferred = false ) override; /** Calls Creature::normalize() * nulls out the player's weapon diff --git a/src/creature.cpp b/src/creature.cpp index 380a482f6e94d..14f2914a23351 100644 --- a/src/creature.cpp +++ b/src/creature.cpp @@ -57,11 +57,9 @@ struct mutation_branch; static const anatomy_id anatomy_human_anatomy( "human_anatomy" ); -static const efftype_id effect_bleed( "bleed" ); static const efftype_id effect_blind( "blind" ); static const efftype_id effect_bounced( "bounced" ); static const efftype_id effect_downed( "downed" ); -static const efftype_id effect_dripping_mechanical_fluid( "dripping_mechanical_fluid" ); static const efftype_id effect_foamcrete_slow( "foamcrete_slow" ); static const efftype_id effect_lying_down( "lying_down" ); static const efftype_id effect_no_sight( "no_sight" ); @@ -1068,13 +1066,7 @@ void Creature::deal_damage_handle_type( const effect_source &source, const damag case damage_type::STAB: case damage_type::BULLET: // these are bleed inducing damage types - if( is_avatar() || is_npc() ) { - as_character()->make_bleed( source, bp, 1_minutes * rng( 1, adjusted_damage ) ); - } else if( in_species( species_ROBOT ) ) { - add_effect( source, effect_dripping_mechanical_fluid, 1_seconds * rng( 1, adjusted_damage ), bp ); - } else { - add_effect( source, effect_bleed, 1_minutes * rng( 1, adjusted_damage ), bp ); - } + make_bleed( source, bp, 1_minutes * rng( 1, adjusted_damage ) ); default: break; diff --git a/src/creature.h b/src/creature.h index 18277686792f7..42224344a9c10 100644 --- a/src/creature.h +++ b/src/creature.h @@ -438,6 +438,11 @@ class Creature : public location, public viewer // accrue? mutates damage and pain virtual void deal_damage_handle_type( const effect_source &source, const damage_unit &du, bodypart_id bp, int &damage, int &pain ); + + // Pass handling bleed to creature/character + virtual void make_bleed( const effect_source &source, const bodypart_id &bp, time_duration duration, + int intensity = 1, bool permanent = false, bool force = false, bool defferred = false ) = 0; + // directly decrements the damage. ONLY handles damage, doesn't // increase pain, apply effects, etc virtual void apply_damage( Creature *source, bodypart_id bp, int amount, diff --git a/src/monattack.cpp b/src/monattack.cpp index 7b8af4eb154e8..35028297ac63f 100644 --- a/src/monattack.cpp +++ b/src/monattack.cpp @@ -4471,12 +4471,7 @@ bool mattack::longswipe( monster *z ) _( "The %1$s slashes at your neck, cutting your throat for %2$d damage!" ), _( "The %1$s slashes at 's neck, cutting their throat for %2$d damage!" ), z->name(), dam ); - if( target->is_player() || target->is_npc() ) { - target->as_character()->make_bleed( effect_source( z ), bodypart_id( "head" ), 15_minutes ); - } else { - target->add_effect( effect_source( z ), effect_bleed, 15_minutes, bodypart_id( "head" ) ); - } - + target->make_bleed( effect_source( z ), bodypart_id( "head" ), 15_minutes ); } else { target->add_msg_player_or_npc( _( "The %1$s slashes at your %2$s, but glances off your armor!" ), _( "The %1$s slashes at 's %2$s, but glances off armor!" ), @@ -5291,7 +5286,7 @@ bool mattack::bio_op_impale( monster *z ) // Handle mons earlier - less to check for target->deal_damage( z, bodypart_id( "torso" ), damage_instance( damage_type::STAB, dam ) ); if( do_bleed ) { - target->add_effect( effect_bleed, rng( 3_minutes, 10_minutes ), bodypart_id( "torso" ), true ); + target->make_bleed( effect_source( z ), bodypart_id( "torso" ), rng( 3_minutes, 10_minutes ) ); } if( seen ) { add_msg( _( "The %1$s impales %2$s!" ), z->name(), target->disp_name() ); @@ -5312,7 +5307,7 @@ bool mattack::bio_op_impale( monster *z ) target->add_msg_if_player( m_bad, _( "and deals %d damage!" ), t_dam ); if( do_bleed ) { - target->as_character()->make_bleed( effect_source( z ), hit, rng( 75_turns, 125_turns ), 1, true ); + target->make_bleed( effect_source( z ), hit, rng( 75_turns, 125_turns ) ); } } else { target->add_msg_player_or_npc( _( "but fails to penetrate your armor!" ), diff --git a/src/monster.cpp b/src/monster.cpp index b2dc062840bce..c3d4079179ef3 100644 --- a/src/monster.cpp +++ b/src/monster.cpp @@ -1376,7 +1376,7 @@ bool monster::is_immune_effect( const efftype_id &effect ) const } if( effect == effect_bleed ) { - return type->bloodType() == fd_null; + return ( type->bloodType() == fd_null || type->bleed_rate == 0 ); } if( effect == effect_venom_dmg || @@ -1441,6 +1441,21 @@ bool monster::is_immune_damage( const damage_type dt ) const } } +void monster::make_bleed( const effect_source &source, const bodypart_id &bp, + time_duration duration, int intensity, bool permanent, bool force, bool defferred ) +{ + if( type->bleed_rate == 0 ) { + return; + } + + duration = ( duration * type->bleed_rate ) / 100; + if( type->in_species( species_ROBOT ) ) { + add_effect( source, effect_dripping_mechanical_fluid, duration, bp ); + } else { + add_effect( source, effect_bleed, duration, bp, permanent, intensity, force, defferred ); + } +} + bool monster::is_dead_state() const { return hp <= 0; diff --git a/src/monster.h b/src/monster.h index 9eaab5efe7168..d497b57d393c9 100644 --- a/src/monster.h +++ b/src/monster.h @@ -315,6 +315,9 @@ class monster : public Creature bool is_immune_effect( const efftype_id & ) const override; bool is_immune_damage( damage_type ) const override; + void make_bleed( const effect_source &source, const bodypart_id &bp, time_duration duration, + int intensity = 1, bool permanent = false, bool force = false, bool defferred = false ) override; + void absorb_hit( const bodypart_id &bp, damage_instance &dam ) override; bool block_hit( Creature *source, bodypart_id &bp_hit, damage_instance &d ) override; bool melee_attack( Creature &target ); diff --git a/src/monstergenerator.cpp b/src/monstergenerator.cpp index 92cef866b1c4f..1c760e4f04532 100644 --- a/src/monstergenerator.cpp +++ b/src/monstergenerator.cpp @@ -776,6 +776,8 @@ void mtype::load( const JsonObject &jo, const std::string &src ) assign( jo, "armor_acid", armor_acid, strict, 0 ); assign( jo, "armor_fire", armor_fire, strict, 0 ); + optional( jo, was_loaded, "bleed_rate", bleed_rate, 100 ); + assign( jo, "vision_day", vision_day, strict, 0 ); assign( jo, "vision_night", vision_night, strict, 0 ); diff --git a/src/mtype.h b/src/mtype.h index 96392f9002e52..ac9b6e7dbba7b 100644 --- a/src/mtype.h +++ b/src/mtype.h @@ -286,6 +286,9 @@ struct mtype { int armor_acid = -1; /** innate armor vs. acid */ int armor_fire = -1; /** innate armor vs. fire */ + // Bleed rate in percent, 0 makes the monster immune to bleeding + int bleed_rate = 100; + // Vision range is linearly scaled depending on lighting conditions int vision_day = 40; /** vision range in bright light */ int vision_night = 1; /** vision range in total darkness */ diff --git a/tests/creature_effect_test.cpp b/tests/creature_effect_test.cpp index fa15b090bec9f..4ba584f555609 100644 --- a/tests/creature_effect_test.cpp +++ b/tests/creature_effect_test.cpp @@ -455,9 +455,10 @@ TEST_CASE( "monster is_immune_effect", "[creature][monster][effect][immune]" ) fungaloid.clear_effects(); REQUIRE_FALSE( fungaloid.made_of_any( Creature::cmat_flesh ) ); REQUIRE( fungaloid.type->in_species( species_FUNGUS ) ); + REQUIRE( fungaloid.type->bleed_rate == 0 ); - THEN( "they bleed plant sap for now" ) { - CHECK_FALSE( fungaloid.is_immune_effect( effect_bleed ) ); + THEN( "their zero bleed rate makes them immune to bleed" ) { + CHECK( fungaloid.is_immune_effect( effect_bleed ) ); } THEN( "they can't be poisoned" ) {