Files
Bubberstation/code/modules/zombie/items.dm
QualityVan 6590860250 Refactors zombie organs
Fixes mounted chainsaws leaving a limb if acided
Adds species support for mutanthands, basically hard-equipped items like zombie claws
Fixes zombies not having claws on new arms
Mobs manually set to zombie species revert to human when their infection is removed
Inserts organs back into the mob when a bodypart is reattached
No longer generates eyes or ears when a mob changes species without having a head

Todo:
fix the initial problem of zombies being able to not have claws due to having a nodrop item before zombification and losing it
2017-04-24 15:32:00 -04:00

64 lines
2.0 KiB
Plaintext

/obj/item/zombie_hand
name = "zombie claw"
desc = "A zombie's claw is its primary tool, capable of infecting \
humans, butchering all other living things to \
sustain the zombie, smashing open airlock doors and opening \
child-safe caps on bottles."
flags = NODROP|ABSTRACT|DROPDEL
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
icon = 'icons/effects/blood.dmi'
icon_state = "bloodhand_left"
var/icon_left = "bloodhand_left"
var/icon_right = "bloodhand_right"
hitsound = 'sound/hallucinations/growl1.ogg'
force = 20
damtype = "brute"
var/removing_airlock = FALSE
/obj/item/zombie_hand/equipped(mob/user, slot)
. = ..()
//these are intentionally inverted
var/i = user.get_held_index_of_item(src)
if(!(i % 2))
icon_state = icon_left
else
icon_state = icon_right
/obj/item/zombie_hand/afterattack(atom/target, mob/user, proximity_flag)
. = ..()
if(!proximity_flag)
return
else if(isliving(target))
if(ishuman(target))
check_infection(target, user)
else
check_feast(target, user)
/obj/item/zombie_hand/proc/check_infection(mob/living/carbon/human/target, mob/user)
CHECK_DNA_AND_SPECIES(target)
if(NOZOMBIE in target.dna.species.species_traits)
// cannot infect any NOZOMBIE subspecies (such as high functioning
// zombies)
return
var/obj/item/organ/zombie_infection/infection
infection = target.getorganslot("zombie_infection")
if(!infection)
infection = new()
infection.Insert(target)
/obj/item/zombie_hand/proc/check_feast(mob/living/target, mob/living/user)
if(target.stat == DEAD)
var/hp_gained = target.maxHealth
target.gib()
// zero as argument for no instant health update
user.adjustBruteLoss(-hp_gained, 0)
user.adjustToxLoss(-hp_gained, 0)
user.adjustFireLoss(-hp_gained, 0)
user.adjustCloneLoss(-hp_gained, 0)
user.updatehealth()
user.adjustBrainLoss(-hp_gained) // Zom Bee gibbers "BRAAAAISNSs!1!"
user.nutrition = min(user.nutrition + hp_gained, NUTRITION_LEVEL_FULL)