Corpses spawned from human-like npcs will inherit damage values dealt to the npc (#90037)

## About The Pull Request

If you shoot a Syndicate NPC, and it dies and spawns a corpse, the
corpse will - rather than having zero damage - have the corresponding
damage you dealt to it.

## Why It's Good For The Game

Always found it a little immersion breaking that they just spawned
flawless corpses.
Course they won't have any wounds or anything... but hey it's *better*.

## Changelog

🆑 Melbert
qol: Corpses spawned from human-like NPCs will spawn damaged according
to how they died (or will even gib if the npc was gibbed)
fix: Maint Russians with guns will now spawn corpses instead of
vanishing
/🆑
This commit is contained in:
MrMelbert
2025-03-19 14:48:41 -05:00
committed by GitHub
parent 878822987c
commit 7a763a1152
7 changed files with 55 additions and 34 deletions
@@ -3,13 +3,13 @@
name = "Abductor Agent"
desc = "Mezaflorp?"
faction = list(ROLE_SYNDICATE)
loot = list(/obj/effect/mob_spawn/corpse/human/abductor)
mob_spawner = /obj/effect/mob_spawn/corpse/human/abductor
corpse = /obj/effect/mob_spawn/corpse/human/abductor
/mob/living/basic/trooper/abductor/melee
melee_damage_lower = 15
melee_damage_upper = 15
loot = list(/obj/effect/gibspawner/human)
corpse = /obj/effect/gibspawner/human
attack_verb_continuous = "beats"
attack_verb_simple = "beat"
attack_sound = 'sound/items/weapons/egloves.ogg'
@@ -18,7 +18,7 @@
var/projectile_deflect_chance = 0
/mob/living/basic/trooper/abductor/ranged
loot = list(/obj/effect/gibspawner/human)
corpse = /obj/effect/gibspawner/human
ai_controller = /datum/ai_controller/basic_controller/trooper/ranged
r_hand = /obj/item/gun/energy/alien
/// Type of bullet we use
@@ -5,7 +5,7 @@
melee_damage_lower = 10
melee_damage_upper = 15
faction = list(ROLE_DEATHSQUAD)
loot = list(/obj/effect/mob_spawn/corpse/human/nanotrasensoldier)
corpse = /obj/effect/mob_spawn/corpse/human/nanotrasensoldier
mob_spawner = /obj/effect/mob_spawn/corpse/human/nanotrasensoldier
/mob/living/basic/trooper/nanotrasen/assess_threat(judgement_criteria, lasercolor, datum/callback/weaponcheck)
@@ -56,7 +56,7 @@
ranged_cooldown = 3 SECONDS
projectilesound = 'sound/items/weapons/gun/smg/shot.ogg'
r_hand = /obj/item/gun/ballistic/automatic/ar
loot = list(/obj/effect/mob_spawn/corpse/human/nanotrasenassaultsoldier)
corpse = /obj/effect/mob_spawn/corpse/human/nanotrasenassaultsoldier
mob_spawner = /obj/effect/mob_spawn/corpse/human/nanotrasenassaultsoldier
/mob/living/basic/trooper/nanotrasen/ranged/elite
@@ -71,7 +71,7 @@
projectilesound = 'sound/items/weapons/laser.ogg'
ranged_cooldown = 5 SECONDS
faction = list(ROLE_DEATHSQUAD)
loot = list(/obj/effect/gibspawner/human)
corpse = /obj/effect/gibspawner/human
mob_spawner = /obj/effect/mob_spawn/corpse/human/nanotrasenelitesoldier
r_hand = /obj/item/gun/energy/pulse/carbine/lethal
@@ -6,8 +6,8 @@
response_help_simple = "push"
speak_emote = list("yarrs")
faction = list(FACTION_PIRATE)
loot = list(/obj/effect/mob_spawn/corpse/human/pirate)
mob_spawner = /obj/effect/mob_spawn/corpse/human/pirate
corpse = /obj/effect/mob_spawn/corpse/human/pirate
/// The amount of money to steal with a melee attack
var/plunder_credits = 25
@@ -30,10 +30,10 @@
light_power = 2.5
light_color = COLOR_SOFT_RED
loot = list(
/obj/effect/mob_spawn/corpse/human/pirate/melee,
/obj/item/melee/energy/sword/pirate,
)
mob_spawner = /obj/effect/mob_spawn/corpse/human/pirate/melee
corpse = /obj/effect/mob_spawn/corpse/human/pirate/melee
r_hand = /obj/item/melee/energy/sword/pirate
plunder_credits = 50 //they hit hard so they steal more
@@ -41,8 +41,9 @@
name = "Space Pirate Swashbuckler"
unsuitable_atmos_damage = 0
minimum_survivable_temperature = 0
loot = list(/obj/effect/mob_spawn/corpse/human/pirate/melee/space)
loot = null
mob_spawner = /obj/effect/mob_spawn/corpse/human/pirate/melee/space
corpse = /obj/effect/mob_spawn/corpse/human/pirate/melee/space
/mob/living/basic/trooper/pirate/melee/space/Initialize(mapload)
. = ..()
@@ -50,8 +51,8 @@
/mob/living/basic/trooper/pirate/ranged
name = "Pirate Gunner"
loot = list(/obj/effect/mob_spawn/corpse/human/pirate/ranged)
mob_spawner = /obj/effect/mob_spawn/corpse/human/pirate/ranged
corpse = /obj/effect/mob_spawn/corpse/human/pirate/ranged
r_hand = /obj/item/gun/energy/laser
ai_controller = /datum/ai_controller/basic_controller/trooper/ranged
/// Type of bullet we use
@@ -77,7 +78,7 @@
name = "Space Pirate Gunner"
unsuitable_atmos_damage = 0
minimum_survivable_temperature = 0
loot = list(/obj/effect/mob_spawn/corpse/human/pirate/ranged/space)
corpse = /obj/effect/mob_spawn/corpse/human/pirate/ranged/space
mob_spawner = /obj/effect/mob_spawn/corpse/human/pirate/ranged/space
r_hand = /obj/item/gun/energy/e_gun/lethal
@@ -16,19 +16,15 @@
mob_spawner = /obj/effect/mob_spawn/corpse/human/russian
r_hand = /obj/item/knife/kitchen
loot = list(
/obj/effect/mob_spawn/corpse/human/russian,
/obj/item/knife/kitchen,
)
corpse = /obj/effect/mob_spawn/corpse/human/russian
loot = list(/obj/item/knife/kitchen)
/mob/living/basic/trooper/russian/ranged
ai_controller = /datum/ai_controller/basic_controller/trooper/ranged
mob_spawner = /obj/effect/mob_spawn/corpse/human/russian/ranged
r_hand = /obj/item/gun/ballistic/automatic/pistol
loot = list(
/obj/effect/mob_spawn/corpse/human/russian/ranged,
/obj/item/gun/ballistic/revolver/nagant,
)
corpse = /obj/effect/mob_spawn/corpse/human/russian/ranged
loot = list(/obj/item/gun/ballistic/revolver/nagant)
var/casingtype = /obj/item/ammo_casing/n762
var/projectilesound = 'sound/items/weapons/gun/revolver/shot.ogg'
@@ -37,4 +33,4 @@
AddComponent(/datum/component/ranged_attacks, casing_type = casingtype, projectile_sound = projectilesound, cooldown_time = 1 SECONDS)
/mob/living/basic/trooper/russian/ranged/lootless
loot = list()
loot = null
@@ -3,14 +3,14 @@
name = "Syndicate Operative"
desc = "Death to Nanotrasen."
faction = list(ROLE_SYNDICATE)
loot = list(/obj/effect/mob_spawn/corpse/human/syndicatesoldier)
corpse = /obj/effect/mob_spawn/corpse/human/syndicatesoldier
mob_spawner = /obj/effect/mob_spawn/corpse/human/syndicatesoldier
/mob/living/basic/trooper/syndicate/space
name = "Syndicate Commando"
maxHealth = 170
health = 170
loot = list(/obj/effect/gibspawner/human)
corpse = /obj/effect/gibspawner/human
unsuitable_atmos_damage = 0
minimum_survivable_temperature = 0
mob_spawner = /obj/effect/mob_spawn/corpse/human/syndicatecommando
@@ -29,7 +29,7 @@
/mob/living/basic/trooper/syndicate/melee //dude with a knife and no shields
melee_damage_lower = 15
melee_damage_upper = 15
loot = list(/obj/effect/gibspawner/human)
corpse = /obj/effect/gibspawner/human
attack_verb_continuous = "slashes"
attack_verb_simple = "slash"
attack_sound = 'sound/items/weapons/bladeslice.ogg'
@@ -99,7 +99,7 @@
///////////////Guns////////////
/mob/living/basic/trooper/syndicate/ranged
loot = list(/obj/effect/gibspawner/human)
corpse = /obj/effect/gibspawner/human
ai_controller = /datum/ai_controller/basic_controller/trooper/ranged
r_hand = /obj/item/gun/ballistic/automatic/pistol
/// Type of bullet we use
@@ -125,7 +125,7 @@
/mob/living/basic/trooper/syndicate/ranged/infiltrator //shuttle loan event
projectilesound = 'sound/items/weapons/gun/smg/shot_suppressed.ogg'
loot = list(/obj/effect/mob_spawn/corpse/human/syndicatesoldier)
corpse = /obj/effect/mob_spawn/corpse/human/syndicatesoldier
/mob/living/basic/trooper/syndicate/ranged/space
name = "Syndicate Commando"
@@ -159,12 +159,12 @@
name = "spaceport security"
desc = "Premier corporate security forces for all spaceports found along the Orion Trail."
faction = list(FACTION_ORION)
loot = list()
corpse = null
/mob/living/basic/trooper/syndicate/ranged/smg/pilot //caravan ambush ruin
name = "Syndicate Salvage Pilot"
loot = list(/obj/effect/mob_spawn/corpse/human/syndicatepilot)
mob_spawner = /obj/effect/mob_spawn/corpse/human/syndicatepilot
corpse = /obj/effect/mob_spawn/corpse/human/syndicatepilot
/mob/living/basic/trooper/syndicate/ranged/smg/space
name = "Syndicate Commando"
@@ -19,7 +19,9 @@
ai_controller = /datum/ai_controller/basic_controller/trooper
/// Loot this mob drops on death.
var/loot = list(/obj/effect/mob_spawn/corpse/human)
var/list/loot
/// Corpse to spawn
var/corpse = /obj/effect/mob_spawn/corpse/human
/// Path of the mob spawner we base the mob's visuals off of.
var/mob_spawner = /obj/effect/mob_spawn/corpse/human
/// Path of the right hand held item we give to the mob's visuals.
@@ -30,7 +32,8 @@
/mob/living/basic/trooper/Initialize(mapload)
. = ..()
apply_dynamic_human_appearance(src, mob_spawn_path = mob_spawner, r_hand = r_hand, l_hand = l_hand)
if(LAZYLEN(loot))
if(LAZYLEN(loot) || corpse)
LAZYOR(loot, corpse)
loot = string_list(loot)
AddElement(/datum/element/death_drops, loot)
AddElement(/datum/element/footstep, footstep_type = FOOTSTEP_MOB_SHOE)