diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index b90c547067c..fa5b43e69c4 100755 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -272,16 +272,25 @@ /datum/supply_packs/virus name = "Virus crate" - contains = list(/obj/item/weapon/reagent_containers/glass/bottle/flu_virion, + contains = list(/obj/item/weapon/virusdish/random, + /obj/item/weapon/virusdish/random, + /obj/item/weapon/virusdish/random, + /obj/item/weapon/virusdish/random, + /obj/item/weapon/virusdish/random, + /obj/item/weapon/virusdish/random +/* VIRUS2 4LIFE + /obj/item/weapon/reagent_containers/glass/bottle/flu_virion, /obj/item/weapon/reagent_containers/glass/bottle/cold, /obj/item/weapon/reagent_containers/glass/bottle/fake_gbs, /obj/item/weapon/reagent_containers/glass/bottle/magnitis, -// /obj/item/weapon/reagent_containers/glass/bottle/wizarditis, worse than GBS if anything -// /obj/item/weapon/reagent_containers/glass/bottle/gbs, No. Just no. + /obj/item/weapon/reagent_containers/glass/bottle/wizarditis, worse than GBS if anything + /obj/item/weapon/reagent_containers/glass/bottle/gbs, No. Just no. /obj/item/weapon/reagent_containers/glass/bottle/pierrot_throat, /obj/item/weapon/reagent_containers/glass/bottle/brainrot, /obj/item/weapon/storage/syringes, - /obj/item/weapon/storage/beakerbox) + /obj/item/weapon/storage/beakerbox +*/ + ) cost = 20 containertype = /obj/structure/closet/crate/secure/weapon containername = "Virus crate" diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index ba3bf06f17f..6155dd6a767 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -75,6 +75,7 @@ MASS SPECTROMETER origin_tech = "magnets=1;biotech=1" var/mode = 1; + /obj/item/device/healthanalyzer/attack(mob/living/M as mob, mob/living/user as mob) if (( (CLUMSY in user.mutations) || user.getBrainLoss() >= 60) && prob(50)) user << text("\red You try to analyze the floor's vitals!") @@ -88,17 +89,19 @@ MASS SPECTROMETER if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") usr << "\red You don't have the dexterity to do this!" return - for(var/mob/O in viewers(M, null)) - O.show_message(text("\red [] has analyzed []'s vitals!", user, M), 1) - //Foreach goto(67) + user.visible_message(" [user] has analyzed [M]'s vitals."," You have analyzed [M]'s vitals.") var/fake_oxy = max(rand(1,40), M.getOxyLoss(), (300 - (M.getToxLoss() + M.getFireLoss() + M.getBruteLoss()))) + var/OX = M.getOxyLoss() > 50 ? "[M.getOxyLoss()]" : M.getOxyLoss() + var/TX = M.getToxLoss() > 50 ? "[M.getToxLoss()]" : M.getToxLoss() + var/BU = M.getFireLoss() > 50 ? "[M.getFireLoss()]" : M.getFireLoss() + var/BR = M.getBruteLoss() > 50 ? "[M.getBruteLoss()]" : M.getBruteLoss() if(M.status_flags & FAKEDEATH) - user.show_message(text("\blue Analyzing Results for []:\n\t Overall Status: []", M, "dead"), 1) - user.show_message(text("\blue \t Damage Specifics: []-[]-[]-[]", fake_oxy < 50 ? "\red [fake_oxy]" : fake_oxy , M.getToxLoss() > 50 ? "\red [M.getToxLoss()]" : M.getToxLoss(), M.getFireLoss() > 50 ? "\red[M.getFireLoss()]" : M.getFireLoss(), M.getBruteLoss() > 50 ? "\red[M.getBruteLoss()]" : M.getBruteLoss()), 1) + OX = fake_oxy > 50 ? "[fake_oxy]" : fake_oxy + user.show_message("\blue Analyzing Results for [M]:\n\t Overall Status: dead") else - user.show_message(text("\blue Analyzing Results for []:\n\t Overall Status: []", M, (M.stat > 1 ? "dead" : text("[]% healthy", M.health - M.halloss))), 1) - user.show_message(text("\blue \t Damage Specifics: []-[]-[]-[]", M.getOxyLoss() > 50 ? "\red [M.getOxyLoss()]" : M.getOxyLoss(), M.getToxLoss() > 50 ? "\red [M.getToxLoss()]" : M.getToxLoss(), M.getFireLoss() > 50 ? "\red[M.getFireLoss()]" : M.getFireLoss(), M.getBruteLoss() > 50 ? "\red[M.getBruteLoss()]" : M.getBruteLoss()), 1) - user.show_message("\blue Key: Suffocation/Toxin/Burns/Brute", 1) + user.show_message("\blue Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "dead" : "[M.health - M.halloss]% healthy"]") + user.show_message("\t Key: Suffocation/Toxin/Burns/Brute", 1) + user.show_message("\t Damage Specifics: [OX] - [TX] - [BU] - [BR]") user.show_message("\blue Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)", 1) if(M.tod && (M.stat == DEAD || (M.status_flags & FAKEDEATH))) user.show_message("\blue Time of Death: [M.tod]") @@ -108,30 +111,37 @@ MASS SPECTROMETER user.show_message("\blue Localized Damage, Brute/Burn:",1) if(length(damaged)>0) for(var/datum/organ/external/org in damaged) - user.show_message(text("\blue \t []: []\blue-[][]",capitalize(org.getDisplayName()),(org.brute_dam > 0)?"\red [org.brute_dam]":0,(org.burn_dam > 0)?"\red [org.burn_dam]":0, (org.status & ORGAN_BLEEDING)?"\red (bleeding)":""),1) + user.show_message(text("\blue \t []: [][]\blue - []", \ + capitalize(org.getDisplayName()), \ + (org.brute_dam > 0) ? "\red [org.brute_dam]" :0, \ + (org.status & ORGAN_BLEEDING)?"\red \[Bleeding\]":"\t", \ + (org.burn_dam > 0) ? "[org.burn_dam]" :0),1) else user.show_message("\blue \t Limbs are OK.",1) - if(M.status_flags & FAKEDEATH) - user.show_message(text("\blue [] | [] | [] | []", fake_oxy > 50 ? "\red Severe oxygen deprivation detected\blue" : "Subject bloodstream oxygen level normal", M.getToxLoss() > 50 ? "\red Dangerous amount of toxins detected\blue" : "Subject bloodstream toxin level minimal", M.getFireLoss() > 50 ? "\red Severe burn damage detected\blue" : "Subject burn injury status O.K", M.getBruteLoss() > 50 ? "\red Severe anatomical damage detected\blue" : "Subject brute-force injury status O.K"), 1) - else - user.show_message(text("\blue [] | [] | [] | []", M.getOxyLoss() > 50 ? "\red Severe oxygen deprivation detected\blue" : "Subject bloodstream oxygen level normal", M.getToxLoss() > 50 ? "\red Dangerous amount of toxins detected\blue" : "Subject bloodstream toxin level minimal", M.getFireLoss() > 50 ? "\red Severe burn damage detected\blue" : "Subject burn injury status O.K", M.getBruteLoss() > 50 ? "\red Severe anatomical damage detected\blue" : "Subject brute-force injury status O.K"), 1) + OX = M.getOxyLoss() > 50 ? "Severe oxygen deprivation detected" : "Subject bloodstream oxygen level normal" + TX = M.getToxLoss() > 50 ? "Dangerous amount of toxins detected" : "Subject bloodstream toxin level minimal" + BU = M.getFireLoss() > 50 ? "Severe burn damage detected" : "Subject burn injury status O.K" + BR = M.getBruteLoss() > 50 ? "Severe anatomical damage detected" : "Subject brute-force injury status O.K" + if(M.status_flags & FAKEDEATH) + OX = fake_oxy > 50 ? "\red Severe oxygen deprivation detected\blue" : "Subject bloodstream oxygen level normal" + user.show_message("[OX] | [TX] | [BU] | [BR]") if (istype(M, /mob/living/carbon/human)) if(M:virus2 || M:reagents.total_volume > 0) - user.show_message(text("\red Warning: Unknown substance detected in subject's blood.")) + user.show_message(text("\red Warning: Unknown substance detected in subject's blood.")) if (M.getCloneLoss()) - user.show_message(text("\red Subject appears to have been imperfectly cloned."), 1) + user.show_message("\red Subject appears to have been imperfectly cloned.") for(var/datum/disease/D in M.viruses) if(!D.hidden[SCANNER]) user.show_message(text("\red Warning: [D.form] Detected\nName: [D.name].\nType: [D.spread].\nStage: [D.stage]/[D.max_stages].\nPossible Cure: [D.cure]")) if (M.reagents && M.reagents.get_reagent_amount("inaprovaline")) - user.show_message(text("\blue Bloodstream Analysis located [M.reagents:get_reagent_amount("inaprovaline")] units of rejuvenation chemicals."), 1) + user.show_message("\blue Bloodstream Analysis located [M.reagents:get_reagent_amount("inaprovaline")] units of rejuvenation chemicals.") if (M.getBrainLoss() >= 100 || istype(M, /mob/living/carbon/human) && M:brain_op_stage == 4.0) - user.show_message(text("\red Subject is brain dead."), 1) + user.show_message("\red Subject is brain dead.") else if (M.getBrainLoss() >= 60) - user.show_message(text("\red Severe brain damage detected. Subject likely to have mental retardation."), 1) + user.show_message("\red Severe brain damage detected. Subject likely to have mental retardation.") else if (M.getBrainLoss() >= 10) - user.show_message(text("\red Significant brain damage detected. Subject may have had a concussion."), 1) + user.show_message("\red Significant brain damage detected. Subject may have had a concussion.") if(ishuman(M)) var/mob/living/carbon/human/H = M for(var/name in H.organs_by_name) @@ -148,7 +158,6 @@ MASS SPECTROMETER if(e.status & ORGAN_BROKEN) user.show_message(text("\red Bone fractures detected. Advanced scanner required for location."), 1) break - if(ishuman(M)) if(M:vessel) var/blood_volume = round(M:vessel.get_reagent_amount("blood")) var/blood_percent = blood_volume / 560 diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index bef38169ce2..45008dc63e2 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -944,9 +944,30 @@ return NEUTER return gender - /mob/living/carbon/human/proc/increase_germ_level(n) if(gloves) gloves.germ_level += n else germ_level += n + +/mob/living/carbon/human/revive() + for (var/datum/organ/external/O in organs) + O.status &= ~ORGAN_BROKEN + O.status &= ~ORGAN_BLEEDING + O.status &= ~ORGAN_SPLINTED + O.status &= ~ORGAN_ATTACHABLE + if (!O.amputated) + O.status &= ~ORGAN_DESTROYED + O.wounds.Cut() + + vessel.add_reagent("blood",560-vessel.total_volume) + fixblood() + for (var/obj/item/weapon/organ/head/H in world) + if(H.brainmob) + if(H.brainmob.real_name == src.real_name) + if(H.brainmob.mind) + H.brainmob.mind.transfer_to(src) + del(H) + + + ..() diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 85088beea25..e220b673744 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -587,7 +587,7 @@ It can still be worn/put on as normal. target.internal = target.belt if (target.internal) for(var/mob/M in viewers(target, 1)) - M.show_message("[source] is now running on internals.", 1) + M.show_message("[target] is now running on internals.", 1) target.internal.add_fingerprint(source) if (target.internals) target.internals.icon_state = "internal1" diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 101606f8044..04e0c916434 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -670,6 +670,7 @@ else if(SA_pp > 0.01) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning if(prob(20)) spawn(0) emote(pick("giggle", "laugh")) + SA.moles = 0 if( (abs(310.15 - breath.temperature) > 50) && !(COLD_RESISTANCE in mutations)) // Hot air hurts :( if(breath.temperature < 260.15) @@ -1116,8 +1117,9 @@ else if(sleeping) handle_dreams() adjustHalLoss(-5) - if(mind.active || immune_to_ssd) - sleeping = max(sleeping-1, 0) + if (mind) + if(mind.active || immune_to_ssd) + sleeping = max(sleeping-1, 0) blinded = 1 stat = UNCONSCIOUS if( prob(10) && health && !hal_crit ) diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index bf38f8f7e34..f1006d45b85 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -7,7 +7,7 @@ var/obj/item/weapon/cell/power_supply //What type of power cell this uses var/charge_cost = 100 //How much energy is needed to fire. var/cell_type = "/obj/item/weapon/cell" - var/projectile_type = "/obj/item/projectile/energy" + var/projectile_type = "/obj/item/projectile/beam/practice" var/modifystate emp_act(severity)