diff --git a/baystation12.dme b/baystation12.dme index b5236c88e00..012e9819e10 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -836,6 +836,7 @@ #include "code\modules\economy\Job_Departments.dm" #include "code\modules\economy\TradeDestinations.dm" #include "code\modules\events\blob.dm" +#include "code\modules\events\borers.dm" #include "code\modules\events\carp_migration.dm" #include "code\modules\events\comms_blackout.dm" #include "code\modules\events\communications_blackout.dm" diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm index 59ac39c54a6..e96fdf4029b 100644 --- a/code/game/gamemodes/changeling/changeling_powers.dm +++ b/code/game/gamemodes/changeling/changeling_powers.dm @@ -206,6 +206,10 @@ var/datum/changeling/changeling = changeling_power(1,0,0) if(!changeling) return + if(src.has_brain_worms()) + src << "We cannot perform this ability at the present time!" + return + var/mob/living/carbon/C = src changeling.chem_charges-- C.remove_changeling_powers() diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm index c91452b7992..4ed953d36e4 100644 --- a/code/game/gamemodes/wizard/soulstone.dm +++ b/code/game/gamemodes/wizard/soulstone.dm @@ -18,6 +18,11 @@ return ..() if(istype(M, /mob/living/carbon/human/dummy)) return..() + + if(M.has_brain_worms()) //Borer stuff - RR + user << "This being is corrupted by an alien intelligence and cannot be soul trapped." + return..() + M.attack_log += text("\[[time_stamp()]\] Has had their soul captured with [src.name] by [user.name] ([user.ckey])") user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to capture the soul of [M.name] ([M.ckey])") diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index 28f9bfe4126..dface77429e 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -249,6 +249,9 @@ dat += text("Paralysis Summary %: [] ([] seconds left!)
", occupant.paralysis, round(occupant.paralysis / 4)) dat += text("Body Temperature: [occupant.bodytemperature-T0C]°C ([occupant.bodytemperature*1.8-459.67]°F)

") + if(occupant.has_brain_worms()) + dat += "Large growth detected in frontal lobe, possibly cancerous. Surgical removal is recommended.
" + if(occupant.vessel) var/blood_volume = round(occupant.vessel.get_reagent_amount("blood")) var/blood_percent = blood_volume / 560 diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm index c66aa3a5ee7..069db8ea340 100644 --- a/code/game/machinery/computer/HolodeckControl.dm +++ b/code/game/machinery/computer/HolodeckControl.dm @@ -523,6 +523,10 @@ w_class = 2 playsound(user, 'sound/weapons/saberoff.ogg', 50, 1) user << "\blue [src] can now be concealed." + if(istype(user,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = user + H.update_inv_l_hand() + H.update_inv_r_hand() add_fingerprint(user) return diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index 604ee33150c..bd2e25159cc 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -268,7 +268,7 @@ occupant.client.eye = occupant.client.mob occupant.client.perspective = MOB_PERSPECTIVE occupant.loc = get_step(loc, SOUTH) //this doesn't account for walls or anything, but i don't forsee that being a problem. - if (occupant.bodytemperature < 261 && occupant.bodytemperature > 140) //Patch by Aranclanos to stop people from taking burn damage after being ejected + if (occupant.bodytemperature < 261 && occupant.bodytemperature >= 70) //Patch by Aranclanos to stop people from taking burn damage after being ejected occupant.bodytemperature = 261 // occupant.metabslow = 0 occupant = null diff --git a/code/game/mecha/medical/odysseus.dm b/code/game/mecha/medical/odysseus.dm index 008b5d819ab..816c59d86f3 100644 --- a/code/game/mecha/medical/odysseus.dm +++ b/code/game/mecha/medical/odysseus.dm @@ -108,6 +108,12 @@ holder.icon_state = "hudxeno" else if(foundVirus) holder.icon_state = "hudill" + else if(patient.has_brain_worms()) + var/mob/living/simple_animal/borer/B = patient.has_brain_worms() + if(B.controlling) + holder.icon_state = "hudbrainworm" + else + holder.icon_state = "hudhealthy" else holder.icon_state = "hudhealthy" C.images += holder diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 209d085bd72..3f9e050ca7d 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -337,6 +337,11 @@ src.icon_state = "sword0" src.item_state = "sword0" src.w_class = 2 + + if(istype(user,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = user + H.update_inv_l_hand() + H.update_inv_r_hand() src.add_fingerprint(user) return diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm index f96f0955d1d..acf164f0bee 100644 --- a/code/game/objects/items/weapons/swords_axes_etc.dm +++ b/code/game/objects/items/weapons/swords_axes_etc.dm @@ -49,6 +49,10 @@ w_class = 2 playsound(user, 'sound/weapons/saberoff.ogg', 50, 1) user << "\blue [src] can now be concealed." + if(istype(user,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = user + H.update_inv_l_hand() + H.update_inv_r_hand() add_fingerprint(user) return @@ -149,6 +153,10 @@ w_class = 2 force = 3//not so robust now attack_verb = list("hit", "punched") + if(istype(user,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = user + H.update_inv_l_hand() + H.update_inv_r_hand() playsound(src.loc, 'sound/weapons/empty.ogg', 50, 1) add_fingerprint(user) if (!blood_DNA) return @@ -260,5 +268,9 @@ w_class = 1 playsound(user, 'sound/weapons/saberoff.ogg', 50, 1) user << "\blue [src] can now be concealed." + if(istype(user,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = user + H.update_inv_l_hand() + H.update_inv_r_hand() add_fingerprint(user) return diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index f840e059b61..af44f38e20b 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -171,9 +171,9 @@ return var/obj/structure/window/WD if(istype(W,/obj/item/stack/sheet/rglass)) - WD = new/obj/structure/window(loc,1) //reinforced window + WD = new/obj/structure/window/reinforced(loc) //reinforced window else - WD = new/obj/structure/window(loc,0) //normal window + WD = new/obj/structure/window/basic(loc) //normal window WD.dir = dir_to_set WD.ini_dir = dir_to_set WD.anchored = 0 @@ -181,6 +181,7 @@ var/obj/item/stack/ST = W ST.use(1) user << "You place the [WD] on [src]." + WD.update_icon() return //window placing end diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 20360bcf818..9da42756354 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -558,6 +558,12 @@ flags = FPRINT anchored = 1.0 throwpass = 1 //You can throw objects over this, despite it's density. + var/parts = /obj/item/weapon/rack_parts + +/obj/structure/rack/proc/destroy() + new parts(loc) + density = 0 + del(src) /obj/structure/rack/ex_act(severity) switch(severity) @@ -620,33 +626,25 @@ if(HULK in user.mutations) visible_message("[user] smashes [src] apart!") user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) - new /obj/item/weapon/rack_parts(loc) - density = 0 - del(src) + destroy() /obj/structure/rack/attack_paw(mob/user) if(HULK in user.mutations) user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) visible_message("[user] smashes [src] apart!") - new /obj/item/weapon/rack_parts(loc) - density = 0 - del(src) + destroy() /obj/structure/rack/attack_alien(mob/user) visible_message("[user] slices [src] apart!") - new /obj/item/weapon/rack_parts(loc) - density = 0 - del(src) + destroy() /obj/structure/rack/attack_animal(mob/living/simple_animal/user) if(user.wall_smash) visible_message("[user] smashes [src] apart!") - new /obj/item/weapon/rack_parts(loc) - density = 0 - del(src) + destroy() /obj/structure/rack/attack_tk() // no telehulk sorry return diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 8108a7c79e5..72eac482276 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -9,7 +9,7 @@ flags = ON_BORDER var/health = 14.0 var/ini_dir = null - var/state = 0 + var/state = 2 var/reinf = 0 var/basestate var/shardtype = /obj/item/weapon/shard @@ -404,6 +404,7 @@ spawn(2) if(!src) return if(!is_fulltile()) + icon_state = "[basestate]" return var/junction = 0 //will be used to determine from which side the window is connected to other windows if(anchored) diff --git a/code/modules/DetectiveWork/scanner.dm b/code/modules/DetectiveWork/scanner.dm index e57a0ee49a6..48d4812bac1 100644 --- a/code/modules/DetectiveWork/scanner.dm +++ b/code/modules/DetectiveWork/scanner.dm @@ -79,7 +79,7 @@ //Special case for blood splaters. - if (istype(A, /obj/effect/decal/cleanable/blood) || istype(A, /obj/effect/rune)) + if (istype(A, /obj/effect/decal/cleanable/blood) || istype(A, /obj/effect/rune) || istype(A, /obj/effect/decal/cleanable/blood/gibs)) if(!isnull(A.blood_DNA)) for(var/blood in A.blood_DNA) user << "\blue Blood type: [A.blood_DNA[blood]]\nDNA: [blood]" diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm index e7521400f93..2a852c6b7ef 100644 --- a/code/modules/admin/secrets.dm +++ b/code/modules/admin/secrets.dm @@ -78,7 +78,8 @@ Make scrubbers spew chemicals
Spawn wormholes
Spawn blob
- Trigger an Alien infestation
+ Trigger a Xenomorph infestation
+ Trigger a Cortical Borer infestation
Spawn an Alien silently
Trigger a Spider infestation
Send in a space ninja
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index c1b0b41fc1f..f70bd239438 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -2259,6 +2259,12 @@ feedback_add_details("admin_secrets_fun_used","Sp") new /datum/event/spider_infestation message_admins("[key_name_admin(usr)] has spawned giant spiders", 1) + if("borers") + feedback_inc("admin_secrets_fun_used",1) + feedback_add_details("admin_secrets_fun_used","Borers") + log_admin("[key_name(usr)] spawned a cortical borer infestation.", 1) + message_admins("\blue [key_name_admin(usr)] spawned a cortical borer infestation.", 1) + new /datum/event/borer_infestation if("spacevines") feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","K") diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index e3fff70f366..aedb20c70d6 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -73,6 +73,12 @@ holder.icon_state = "hudxeno" else if(foundVirus) holder.icon_state = "hudill" + else if(patient.has_brain_worms()) + var/mob/living/simple_animal/borer/B = patient.has_brain_worms() + if(B.controlling) + holder.icon_state = "hudbrainworm" + else + holder.icon_state = "hudhealthy" else holder.icon_state = "hudhealthy" C.images += holder diff --git a/code/modules/events/borers.dm b/code/modules/events/borers.dm new file mode 100644 index 00000000000..2c6a2820fbb --- /dev/null +++ b/code/modules/events/borers.dm @@ -0,0 +1,38 @@ +//Cortical borer spawn event - care of RobRichards1997 with minor editing by Zuhayr. + +/datum/event/borer_infestation + oneShot = 1 + +/datum/event/borer_infestation + announceWhen = 400 + + var/spawncount = 1 + var/successSpawn = 0 //So we don't make a command report if nothing gets spawned. + +/datum/event/borer_infestation/setup() + announceWhen = rand(announceWhen, announceWhen + 50) + spawncount = rand(1, 3) + +/datum/event/borer_infestation/announce() + if(successSpawn) + command_alert("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert") + world << sound('sound/AI/aliens.ogg') + +/datum/event/borer_infestation/start() + var/list/vents = list() + for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in world) + if(temp_vent.loc.z == 1 && !temp_vent.welded && temp_vent.network) + //Stops cortical borers getting stuck in small networks. See: Security, Virology + if(temp_vent.network.normal_members.len > 50) + vents += temp_vent + + var/list/candidates = get_alien_candidates() + while(spawncount > 0 && vents.len && candidates.len) + var/obj/vent = pick_n_take(vents) + var/client/C = pick_n_take(candidates) + + var/mob/living/simple_animal/borer/new_borer = new(vent.loc) + new_borer.key = C.key + + spawncount-- + successSpawn = 1 \ No newline at end of file diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index cccd67909bb..4066de867cc 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -149,6 +149,12 @@ Works together with spawning an observer, noted above. holder.icon_state = "hudxeno" else if(foundVirus) holder.icon_state = "hudill" + else if(patient.has_brain_worms()) + var/mob/living/simple_animal/borer/B = patient.has_brain_worms() + if(B.controlling) + holder.icon_state = "hudbrainworm" + else + holder.icon_state = "hudhealthy" else holder.icon_state = "hudhealthy" C.images += holder diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm index a1e599c5b70..b6507c14a3a 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm @@ -31,6 +31,9 @@ continue no_queen = 0 + if(src.has_brain_worms()) + src << "We cannot perform this ability at the present time!" + return if(no_queen) adjustToxLoss(-500) src << "\green You begin to evolve!" diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 86ac0bb0dbc..f0095ecbe1c 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -530,7 +530,7 @@ B.host_brain << "\red Horrific, burning agony lances through you, ripping a soundless scream from your trapped mind!" //Check for brain worms in head. -/mob/living/carbon/proc/has_brain_worms() +/mob/proc/has_brain_worms() for(var/I in contents) if(istype(I,/mob/living/simple_animal/borer)) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index ac944b7c070..8d1f37c50d1 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -122,6 +122,17 @@ emp_act protection += C.armor[type] return protection +/mob/living/carbon/human/proc/check_head_coverage() + + var/list/body_parts = list(head, wear_mask, wear_suit, w_uniform) + for(var/bp in body_parts) + if(!bp) continue + if(bp && istype(bp ,/obj/item/clothing)) + var/obj/item/clothing/C = bp + if(C.body_parts_covered & HEAD) + return 1 + return 0 + /mob/living/carbon/human/proc/check_shields(var/damage = 0, var/attack_text = "the attack") if(l_hand && istype(l_hand, /obj/item/weapon))//Current base is the prob(50-d/3) diff --git a/code/modules/mob/living/silicon/pai/hud.dm b/code/modules/mob/living/silicon/pai/hud.dm index 74d5ec8f878..07df7cd9ead 100644 --- a/code/modules/mob/living/silicon/pai/hud.dm +++ b/code/modules/mob/living/silicon/pai/hud.dm @@ -80,6 +80,12 @@ holder.icon_state = "hudxeno" else if(foundVirus) holder.icon_state = "hudill" + else if(patient.has_brain_worms()) + var/mob/living/simple_animal/borer/B = patient.has_brain_worms() + if(B.controlling) + holder.icon_state = "hudbrainworm" + else + holder.icon_state = "hudhealthy" else holder.icon_state = "hudhealthy" client.images += holder diff --git a/code/modules/mob/living/simple_animal/borer.dm b/code/modules/mob/living/simple_animal/borer.dm index a2c8bd561c2..4bb00a415a7 100644 --- a/code/modules/mob/living/simple_animal/borer.dm +++ b/code/modules/mob/living/simple_animal/borer.dm @@ -16,6 +16,12 @@ src << "You whisper silently, \"[message]\"" B.host << "The captive mind of [src] whispers, \"[message]\"" + for (var/mob/M in player_list) + if (istype(M, /mob/new_player)) + continue + else if(M.stat == 2 && M.client.prefs.toggles & CHAT_GHOSTEARS) + M << "The captive mind of [src] whispers, \"[message]\"" + /mob/living/captive_brain/emote(var/message) return @@ -41,28 +47,53 @@ pass_flags = PASSTABLE can_hide = 1 + var/used_dominate var/chemicals = 10 // Chemicals used for reproduction and spitting neurotoxin. var/mob/living/carbon/human/host // Human host for the brain worm. var/truename // Name used for brainworm-speak. var/mob/living/captive_brain/host_brain // Used for swapping control of the body back and forth. var/controlling // Used in human death check. + var/docile = 0 // Sugar can stop borers from acting. /mob/living/simple_animal/borer/Life() ..() + + if(host) + if(!stat && !host.stat) + + if(host.reagents.has_reagent("sugar")) + if(!docile) + if(controlling) + host << "\blue You feel the soporific flow of sugar in your host's blood, lulling you into docility." + else + src << "\blue You feel the soporific flow of sugar in your host's blood, lulling you into docility." + docile = 1 + else + if(docile) + if(controlling) + host << "\blue You shake off your lethargy as the sugar leaves your host's blood." + else + src << "\blue You shake off your lethargy as the sugar leaves your host's blood." + docile = 0 + if(chemicals < 250) chemicals++ if(controlling) + + if(docile) + host << "\blue You are feeling far too docile to continue controlling your host..." + host.release_control() + return + if(prob(5)) host.adjustBrainLoss(rand(1,2)) if(prob(host.brainloss/20)) host.say("*[pick(list("blink","blink_r","choke","aflap","drool","twitch","twitch_s","gasp"))]") - //if(host.brainloss > 100) - /mob/living/simple_animal/borer/New() ..() truename = "[pick("Primary","Secondary","Tertiary","Quaternary")] [rand(1000,9999)]" @@ -105,6 +136,13 @@ src << "You drop words into [host]'s mind: \"[message]\"" host << "Your own thoughts speak: \"[message]\"" + for (var/mob/M in player_list) + if (istype(M, /mob/new_player)) + continue + else if(M.stat == 2 && M.client.prefs.toggles & CHAT_GHOSTEARS) + M << "[src.truename] whispers to [host], \"[message]\"" + + /mob/living/simple_animal/borer/Stat() ..() statpanel("Status") @@ -128,6 +166,46 @@ if(M.mind && (istype(M, /mob/living/simple_animal/borer) || istype(M, /mob/dead/observer))) M << "Cortical link, [truename]: [copytext(message, 2)]" +/mob/living/simple_animal/borer/verb/dominate_victim() + set category = "Alien" + set name = "Dominate Victim" + set desc = "Freeze the limbs of a potential host with supernatural fear." + + if(world.time - used_dominate < 300) + src << "You cannot use that ability again so soon." + return + + if(host) + src << "You cannot do that from within a host body." + return + + if(src.stat) + src << "You cannot do that in your current state." + return + + var/list/choices = list() + for(var/mob/living/carbon/C in view(3,src)) + if(C.stat != 2) + choices += C + + if(world.time - used_dominate < 300) + src << "You cannot use that ability again so soon." + return + + var/mob/living/carbon/M = input(src,"Who do you wish to dominate?") in null|choices + + if(!M || !src) return + + if(M.has_brain_worms()) + src << "You cannot infest someone who is already infested!" + return + + src << "\red You focus your psychic lance on [M] and freeze their limbs with a wave of terrible dread." + M << "\red You feel a creeping, horrible sense of dread come over you, freezing your limbs and setting your heart racing." + M.Weaken(3) + + used_dominate = world.time + /mob/living/simple_animal/borer/verb/bond_brain() set category = "Alien" set name = "Assume Control" @@ -141,12 +219,20 @@ src << "You cannot do that in your current state." return + if(host.internal_organs_by_name["brain"]) //this should only run in admin-weirdness situations, but it's here non the less - RR + src << "There is no brain here for us to command!" + return + + if(docile) + src << "\blue You are feeling far too docile to do that." + return + src << "You begin delicately adjusting your connection to the host brain..." spawn(300+(host.brainloss*5)) - if(!host || !src || controlling) return - + if(!host || !src || controlling) + return else src << "\red You plunge your probosci deep into the cortex of the host brain, interfacing directly with their nervous system." host << "\red You feel a strange shifting sensation behind your eyes as an alien consciousness displaces yours." @@ -171,10 +257,14 @@ if(stat) src << "You cannot secrete chemicals in your current state." + if(docile) + src << "\blue You are feeling far too docile to do that." + return + if(chemicals < 50) src << "You don't have enough chemicals!" - var/chem = input("Select a chemical to secrete.", "Chemicals") in list("bicaridine","tramadol","hyperzine") + var/chem = input("Select a chemical to secrete.", "Chemicals") in list("bicaridine","tramadol","hyperzine","alkysine") if(chemicals < 50 || !host || controlling || !src || stat) //Sanity check. return @@ -195,6 +285,9 @@ if(stat) src << "You cannot leave your host in your current state." + if(docile) + src << "\blue You are feeling far too docile to do that." + return if(!host || !src) return @@ -263,17 +356,25 @@ mob/living/simple_animal/borer/proc/detatch() var/list/choices = list() for(var/mob/living/carbon/C in view(1,src)) - if(C.stat != 2) + if(C.stat != 2 && src.Adjacent(C)) choices += C var/mob/living/carbon/M = input(src,"Who do you wish to infest?") in null|choices if(!M || !src) return + if(!(src.Adjacent(M))) return + if(M.has_brain_worms()) src << "You cannot infest someone who is already infested!" return + if(istype(M,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + if(H.check_head_coverage()) + src << "You cannot get through that host's protective gear." + return + M << "Something slimy begins probing at the opening of your ear canal..." src << "You slither up [M] and begin probing at their ear canal..." diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index d64b5c5db00..862fe670eb2 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -35,6 +35,7 @@ /mob/living/carbon/human/var/list/organs = list() /mob/living/carbon/human/var/list/organs_by_name = list() // map organ names to organs +/mob/living/carbon/human/var/list/internal_organs_by_name = list() // so internal organs have less ickiness too //Creates and initializes and connects external and internal organs /mob/living/carbon/human/proc/make_organs() @@ -52,11 +53,12 @@ organs_by_name["r_foot"] = new/datum/organ/external/r_foot(organs_by_name["r_leg"]) if (species.name!="Slime People") - new/datum/organ/internal/heart(src) - new/datum/organ/internal/lungs(src) - new/datum/organ/internal/liver(src) - new/datum/organ/internal/kidney(src) - new/datum/organ/internal/brain(src) + internal_organs_by_name["heart"] = new/datum/organ/internal/heart(src) + internal_organs_by_name["lungs"] = new/datum/organ/internal/lungs(src) + internal_organs_by_name["liver"] = new/datum/organ/internal/liver(src) + internal_organs_by_name["kidney"] = new/datum/organ/internal/kidney(src) + internal_organs_by_name["brain"] = new/datum/organ/internal/brain(src) +// internal_organs_by_name["eyes"] = new/datum/organ/internal/eyes(src) for(var/name in organs_by_name) organs += organs_by_name[name] diff --git a/code/modules/surgery/braincore.dm b/code/modules/surgery/braincore.dm index f4d81d37f59..c2bd81f5244 100644 --- a/code/modules/surgery/braincore.dm +++ b/code/modules/surgery/braincore.dm @@ -85,12 +85,18 @@ user.visible_message("\blue [user] separates [target]'s brain from \his spine with \the [tool].", \ "\blue You separate [target]'s brain from spine with \the [tool].") + var/mob/living/simple_animal/borer/borer = target.has_brain_worms() + + if(borer) + borer.detatch() //Should remove borer if the brain is removed - RR + user.attack_log += "\[[time_stamp()]\] Debrained [target.name] ([target.ckey]) with [tool.name] (INTENT: [uppertext(user.a_intent)])" target.attack_log += "\[[time_stamp()]\] Debrained by [user.name] ([user.ckey]) with [tool.name] (INTENT: [uppertext(user.a_intent)])" msg_admin_attack("[user.name] ([user.ckey]) debrained [target.name] ([target.ckey]) with [tool.name] (INTENT: [uppertext(user.a_intent)]) (JMP)") var/obj/item/brain/B = new(target.loc) B.transfer_identity(target) + target.internal_organs -= B target:brain_op_stage = 4.0 target.death()//You want them to die after the brain was transferred, so not to trigger client death() twice. diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index 75235912414..b815945b642 100644 Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ