diff --git a/code/modules/antagonists/changeling/powers/panacea.dm b/code/modules/antagonists/changeling/powers/panacea.dm index d72d5dede99e..dff8cd7f7365 100644 --- a/code/modules/antagonists/changeling/powers/panacea.dm +++ b/code/modules/antagonists/changeling/powers/panacea.dm @@ -32,16 +32,18 @@ user.reagents.add_reagent(/datum/reagent/medicine/pen_acid, 20) user.reagents.add_reagent(/datum/reagent/medicine/antihol, 10) user.reagents.add_reagent(/datum/reagent/medicine/mannitol, 25) + user.reagents.add_reagent(/datum/reagent/medicine/antipathogenic/changeling, 5) //MONKESTATION ADDITION if(iscarbon(user)) var/mob/living/carbon/C = user C.cure_all_traumas(TRAUMA_RESILIENCE_LOBOTOMY) - if(isliving(user)) + /*if(isliving(user)) //MONKESTATION REMOVAL: Virology rework var/mob/living/L = user for(var/thing in L.diseases) var/datum/disease/D = thing if(D.severity == DISEASE_SEVERITY_POSITIVE) continue D.cure() + */ return TRUE diff --git a/monkestation/code/game/objects/items/implants/hardlight.dm b/monkestation/code/game/objects/items/implants/hardlight.dm index 94e5a5becbe2..5d7518b40a53 100644 --- a/monkestation/code/game/objects/items/implants/hardlight.dm +++ b/monkestation/code/game/objects/items/implants/hardlight.dm @@ -282,6 +282,8 @@ embed_falloff_tile = 0 speed = 0.4 //lower = faster shrapnel_type = /obj/item/shrapnel/bullet/spear + light_outer_range = 1 + light_power = 1 hitsound = 'sound/weapons/bladeslice.ogg' hitsound_wall = 'sound/weapons/parry.ogg' embedding = list(embed_chance=100, fall_chance=2, jostle_chance=4, ignore_throwspeed_threshold=TRUE, pain_stam_pct=0.5, pain_mult=5, jostle_pain_mult=6, rip_time=10) diff --git a/monkestation/code/modules/cryopods/trackers/cryo_chaplain.dm b/monkestation/code/modules/cryopods/trackers/cryo_chaplain.dm index 16676c89403a..d4c481e4466e 100644 --- a/monkestation/code/modules/cryopods/trackers/cryo_chaplain.dm +++ b/monkestation/code/modules/cryopods/trackers/cryo_chaplain.dm @@ -8,15 +8,11 @@ // if the mob is not a high priest, add to successors list if(spawned_chaplain.mind.holy_role != HOLY_ROLE_HIGHPRIEST) - if(isnull(GLOB.holy_successors)) + if(isnull(GLOB.holy_successors)) GLOB.holy_successors = list() GLOB.holy_successors |= WEAKREF(spawned_chaplain) return - // if the mob joins as a high priest (and there has been a previous high priest before them), make sure they get their own nullrod. - if(isnull(GLOB.current_highpriest)) - spawned_chaplain.put_in_hands(new /obj/item/nullrod(spawned_chaplain)) - // keep a record of the current high priest GLOB.current_highpriest = WEAKREF(spawned_chaplain) diff --git a/monkestation/code/modules/store/store_items/suits.dm b/monkestation/code/modules/store/store_items/suits.dm index 799666dfe8dd..67a2c9b80aa4 100644 --- a/monkestation/code/modules/store/store_items/suits.dm +++ b/monkestation/code/modules/store/store_items/suits.dm @@ -186,6 +186,7 @@ GLOBAL_LIST_INIT(store_suits, generate_store_items(/datum/store_item/suit)) name = "Carp Costume" item_path = /obj/item/clothing/suit/hooded/carp_costume + /datum/store_item/suit/wizard name = "Wizard Robe" item_path = /obj/item/clothing/suit/wizrobe/fake diff --git a/monkestation/code/modules/virology/disease/_disease.dm b/monkestation/code/modules/virology/disease/_disease.dm index f42110bfeac2..6f64e3f30f34 100644 --- a/monkestation/code/modules/virology/disease/_disease.dm +++ b/monkestation/code/modules/virology/disease/_disease.dm @@ -11,7 +11,7 @@ GLOBAL_LIST_INIT(virusDB, list()) //the percentage of the strength at which effects will start getting disabled by antibodies. var/robustness = 100 //chance to cure the disease at every proc when the body is getting cooked alive. - var/max_bodytemperature = 1000 + var/max_bodytemperature = T0C+100 //very low temperatures will stop the disease from activating/progressing var/min_bodytemperature = 120 ///split category used for predefined diseases atm diff --git a/monkestation/code/modules/virology/disease/symtoms/stage1.dm b/monkestation/code/modules/virology/disease/symtoms/stage1.dm index 0be48bb975da..72fd89cd7516 100644 --- a/monkestation/code/modules/virology/disease/symtoms/stage1.dm +++ b/monkestation/code/modules/virology/disease/symtoms/stage1.dm @@ -20,15 +20,15 @@ var/mob/living/carbon/human/host = mob if (prob(50) && isturf(mob.loc)) if(istype(host.wear_mask, /obj/item/clothing/mask/cigarette)) - var/obj/item/clothing/mask/cigarette/I = host.get_item_by_slot(ITEM_SLOT_MASK) + var/obj/item/clothing/mask/cigarette/ciggie = host.get_item_by_slot(ITEM_SLOT_MASK) if(prob(20)) - var/turf/Q = get_turf(mob) + var/turf/startLocation = get_turf(mob) var/turf/endLocation var/spitForce = pick(0,1,2,3) - endLocation = get_ranged_target_turf(Q, mob.dir, spitForce) + endLocation = get_ranged_target_turf(startLocation, mob.dir, spitForce) to_chat(mob, "You sneezed \the [host.wear_mask] out of your mouth!") - host.dropItemToGround(I) - I.throw_at(endLocation,spitForce,1) + host.dropItemToGround(ciggie) + ciggie.throw_at(endLocation,spitForce,1) /datum/symptom/gunck name = "Flemmingtons" @@ -85,6 +85,7 @@ /datum/symptom/eyewater/activate(mob/living/mob) to_chat(mob, span_warning("Your eyes sting and water!")) + mob.emote("cry") /datum/symptom/wheeze diff --git a/monkestation/code/modules/virology/disease/symtoms/stage2.dm b/monkestation/code/modules/virology/disease/symtoms/stage2.dm index 7661c3d68871..d6ded963ea9d 100644 --- a/monkestation/code/modules/virology/disease/symtoms/stage2.dm +++ b/monkestation/code/modules/virology/disease/symtoms/stage2.dm @@ -1,38 +1,3 @@ - - -/datum/symptom/cough - max_chance = 10 - stage = 2 - badness = EFFECT_DANGER_ANNOYING - -/datum/symptom/cough/activate(mob/living/carbon/mob) - mob.emote("cough") - - var/datum/gas_mixture/breath - if (ishuman(mob)) - var/mob/living/carbon/human/H = mob - breath = H.get_breath_from_internal(BREATH_VOLUME) - if(!breath)//not wearing internals - var/head_block = 0 - if (ishuman(mob)) - var/mob/living/carbon/human/H = mob - if (H.head && (H.head.flags_cover & HEADCOVERSMOUTH)) - head_block = 1 - if(!head_block) - if(!mob.wear_mask || !(mob.wear_mask.flags_cover & MASKCOVERSMOUTH)) - if(isturf(mob.loc)) - if(mob.check_airborne_sterility()) - return - var/strength = 0 - for (var/datum/disease/advanced/V in mob.diseases) - strength += V.infectionchance - strength = round(strength / mob.diseases.len) - var/i = 1 - while (strength > 0 && i < 10) //stronger viruses create more clouds at once, max limit of 10 clouds - new /obj/effect/pathogen_cloud/core(get_turf(src), mob, virus_copylist(mob.diseases)) - strength -= 30 - i++ - /datum/symptom/beard name = "Facial Hypertrichosis" desc = "Causes the infected to spontaneously grow a beard, regardless of gender. Only affects humans." @@ -43,7 +8,7 @@ /datum/symptom/beard/activate(mob/living/mob) if(istype(mob, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = mob + var/mob/living/carbon/human/victim = mob if(ishuman(mob)) var/beard_name = "" spawn(5 SECONDS) @@ -55,10 +20,10 @@ beard_name = "Beard (Very Long)" if(multiplier >= 4) beard_name = "Beard (Dwarf)" - if(beard_name != "" && H.facial_hairstyle != beard_name) - H.facial_hairstyle = beard_name - to_chat(H, span_warning("Your chin itches.")) - H.update_body_parts() + if(beard_name != "" && victim.facial_hairstyle != beard_name) + victim.facial_hairstyle = beard_name + to_chat(victim, span_warning("Your chin itches.")) + victim.update_body_parts() /datum/symptom/drowsness name = "Automated Sleeping Syndrome" @@ -78,29 +43,29 @@ badness = EFFECT_DANGER_ANNOYING max_chance = 10 -/datum/symptom/cough/activate(var/mob/living/mob) +/datum/symptom/cough/activate(mob/living/mob) mob.emote("cough") if(!ishuman(mob)) return - var/mob/living/carbon/human/H = mob + var/mob/living/carbon/human/victim = mob var/datum/gas_mixture/breath - breath = H.get_breath_from_internal(BREATH_VOLUME) + breath = victim.get_breath_from_internal(BREATH_VOLUME) if(!breath)//not wearing internals - if(!H.wear_mask) + if(!victim.wear_mask) if(isturf(mob.loc)) var/list/blockers = list() - blockers = list(H.wear_mask,H.glasses,H.head) + blockers = list(victim.wear_mask,victim.glasses,victim.head) for (var/item in blockers) - var/obj/item/clothing/I = item - if (!istype(I)) + var/obj/item/clothing/clothes = item + if (!istype(clothes)) continue - if (I.clothing_flags & BLOCK_GAS_SMOKE_EFFECT) + if (clothes.clothing_flags & BLOCK_GAS_SMOKE_EFFECT) return if(mob.check_airborne_sterility()) return var/strength = 0 - for (var/datum/disease/advanced/V as anything in mob.diseases) - strength += V.infectionchance + for (var/datum/disease/advanced/virus as anything in mob.diseases) + strength += virus.infectionchance strength = round(strength/mob.diseases.len) var/i = 1 @@ -134,13 +99,13 @@ mob.emote("shiver") set_body_temp(mob) -/datum/symptom/fridge/proc/set_body_temp(mob/living/M) +/datum/symptom/fridge/proc/set_body_temp(mob/living/mob) if(multiplier >= 3) // when unsafe the shivers can cause cold damage - M.add_body_temperature_change("chills", -6 * power * multiplier) + mob.add_body_temperature_change("chills", -6 * power * multiplier) else // Get the max amount of change allowed before going under cold damage limit, then cap the maximum allowed temperature change from safe chills to 5 over the cold damage limit - var/change_limit = min(M.get_body_temp_cold_damage_limit() + 5 - M.get_body_temp_normal(apply_change=FALSE), 0) - M.add_body_temperature_change("chills", max(-6 * power * multiplier, change_limit)) + var/change_limit = min(mob.get_body_temp_cold_damage_limit() + 5 - mob.get_body_temp_normal(apply_change=FALSE), 0) + mob.add_body_temperature_change("chills", max(-6 * power * multiplier, change_limit)) /datum/symptom/fridge/deactivate(mob/living/carbon/mob) if(mob) @@ -156,18 +121,18 @@ /datum/symptom/hair/activate(mob/living/mob) if(ishuman(mob)) - var/mob/living/carbon/human/H = mob - if(H.hairstyle != "Bald") - if (H.hairstyle != "Balding Hair") - to_chat(H, span_danger("Your hair starts to fall out in clumps...")) + var/mob/living/carbon/human/victim = mob + if(victim.hairstyle != "Bald") + if (victim.hairstyle != "Balding Hair") + to_chat(victim, span_danger("Your hair starts to fall out in clumps...")) if (prob(multiplier*20)) - H.hairstyle = "Balding Hair" - H.update_body_parts() + victim.hairstyle = "Balding Hair" + victim.update_body_parts() else - to_chat(H, span_danger("You have almost no hair left...")) + to_chat(victim, span_danger("You have almost no hair left...")) if (prob(multiplier*20)) - H.hairstyle = "Bald" - H.update_body_parts() + victim.hairstyle = "Bald" + victim.update_body_parts() /datum/symptom/stimulant name = "Adrenaline Extra" @@ -214,16 +179,17 @@ /datum/symptom/bloodynose/activate(mob/living/mob) if (prob(30)) if (ishuman(mob)) - var/mob/living/carbon/human/H = mob - if (!(TRAIT_NOBLOOD in H.dna.species.inherent_traits)) - H.add_splatter_floor(get_turf(mob), 1) + var/mob/living/carbon/human/victim = mob + if (!(TRAIT_NOBLOOD in victim.dna.species.inherent_traits)) + victim.add_splatter_floor(get_turf(mob), 1) else - var/obj/effect/decal/cleanable/blood/D= locate(/obj/effect/decal/cleanable/blood) in get_turf(mob) - if(D==null) - D = new /obj/effect/decal/cleanable/blood(get_turf(mob)) - D.diseases |= virus_copylist(mob.diseases) + var/obj/effect/decal/cleanable/blood/blood= locate(/obj/effect/decal/cleanable/blood) in get_turf(mob) + if(blood==null) + blood = new /obj/effect/decal/cleanable/blood(get_turf(mob)) + blood.diseases |= virus_copylist(mob.diseases) +/* //commented out until i can figure out how to make this work without shoving static lights on moving objects /datum/symptom/lantern name = "Lantern Syndrome" desc = "Causes the infected to glow." @@ -254,6 +220,7 @@ mob.set_light(0, 0, 0, l_color = rgb(0,0,0)) to_chat(mob, span_notice("You don't feel as bright.")) flavortext = 0 +*/ /datum/symptom/vitreous name = "Vitreous resonance" @@ -264,32 +231,32 @@ max_multiplier = 2 badness = EFFECT_DANGER_ANNOYING -/datum/symptom/vitreous/activate(mob/living/carbon/human/H) - H.Shake(3, 3, 3 SECONDS) - if(ishuman(H)) - addtimer(CALLBACK(src, PROC_REF(shatter), H), 0.5 SECONDS) +/datum/symptom/vitreous/activate(mob/living/carbon/human/victim) + victim.Shake(3, 3, 3 SECONDS) + if(ishuman(victim)) + addtimer(CALLBACK(src, PROC_REF(shatter), victim), 0.5 SECONDS) -/datum/symptom/vitreous/proc/shatter(mob/living/carbon/human/H) - var/obj/item/reagent_containers/glass_to_shatter = H.get_active_held_item() - var/obj/item/bodypart/check_arm = H.get_active_hand() +/datum/symptom/vitreous/proc/shatter(mob/living/carbon/human/victim) + var/obj/item/reagent_containers/glass_to_shatter = victim.get_active_held_item() + var/obj/item/bodypart/check_arm = victim.get_active_hand() if(!glass_to_shatter) return if (is_type_in_list(glass_to_shatter, list(/obj/item/reagent_containers/cup/glass))) - to_chat(H, span_warning("Your [check_arm] resonates with the glass in \the [glass_to_shatter], shattering it to bits!")) - glass_to_shatter.reagents.expose(H, TOUCH) - new/obj/effect/decal/cleanable/generic(get_turf(H)) - playsound(H, 'sound/effects/glassbr1.ogg', 25, 1) + to_chat(victim, span_warning("Your [check_arm] resonates with the glass in \the [glass_to_shatter], shattering it to bits!")) + glass_to_shatter.reagents.expose(victim, TOUCH) + new/obj/effect/decal/cleanable/generic(get_turf(victim)) + playsound(victim, 'sound/effects/glassbr1.ogg', 25, 1) spawn(1 SECONDS) - if (H && check_arm) + if (victim && check_arm) if (prob(50 * multiplier)) - to_chat(H, span_notice("Your [check_arm] deresonates, healing completely!")) + to_chat(victim, span_notice("Your [check_arm] deresonates, healing completely!")) check_arm.heal_damage(1000) // full heal else - to_chat(H, span_warning("Your [check_arm] deresonates, sustaining burns!")) + to_chat(victim, span_warning("Your [check_arm] deresonates, sustaining burns!")) check_arm.take_damage(15 * multiplier, BRUTE) qdel(glass_to_shatter) else if (prob(1)) - to_chat(H, span_notice("Your [check_arm] aches for the cold, smooth feel of container-grade glass...")) + to_chat(victim, span_notice("Your [check_arm] aches for the cold, smooth feel of container-grade glass...")) /datum/symptom/spiky_skin name = "Porokeratosis Acanthus" @@ -314,41 +281,39 @@ return if(!istype(toucher) || !istype(touched)) return - var/obj/item/bodypart/E - var/mob/living/carbon/human/H + var/obj/item/bodypart/bodypartTarget + var/mob/living/carbon/human/target if(toucher == mob) //we bumped into someone else if(ishuman(touched)) - H = touched - E = H.get_bodypart(H.get_random_valid_zone()) + target = touched + bodypartTarget = target.get_bodypart(target.get_random_valid_zone()) else //someone else bumped into us if(ishuman(toucher)) - H = toucher - E = H.get_bodypart(H.get_random_valid_zone()) + target = toucher + bodypartTarget = target.get_bodypart(target.get_random_valid_zone()) if(toucher == mob) - if(E) - to_chat(mob, span_warning("As you bump into \the [touched], your spines dig into \his [E]!")) - E.take_damage(multiplier, BRUTE) + if(bodypartTarget) + to_chat(mob, span_warning("As you bump into \the [touched], your spines dig into \his [bodypartTarget]!")) + bodypartTarget.take_damage(multiplier, BRUTE) else to_chat(mob, span_warning("As you bump into \the [touched], your spines dig into \him!")) - var/mob/living/L = touched - if(istype(L) && !istype(L, /mob/living/silicon)) - L.apply_damage(multiplier, BRUTE, E) - var/mob/M = touched - log_attack("[M] damaged [H] with keratin spikes") + var/mob/living/impaled = touched + if(istype(impaled) && !istype(impaled, /mob/living/silicon)) + impaled.apply_damage(multiplier, BRUTE, bodypartTarget) else - if(E) - to_chat(mob, span_warning("As \the [toucher] [touch_type == DISEASE_BUMP ? "bumps into" : "touches"] you, your spines dig into \his [E]!")) - to_chat(toucher, span_danger("As you [touch_type == DISEASE_BUMP ? "bump into" : "touch"] \the [mob], \his spines dig into your [E]!")) - E.take_damage(multiplier) + if(bodypartTarget) + to_chat(mob, span_warning("As \the [toucher] [touch_type == DISEASE_BUMP ? "bumps into" : "touches"] you, your spines dig into \his [bodypartTarget]!")) + to_chat(toucher, span_danger("As you [touch_type == DISEASE_BUMP ? "bump into" : "touch"] \the [mob], \his spines dig into your [bodypartTarget]!")) + bodypartTarget.take_damage(multiplier) else to_chat(mob, span_warning("As \the [toucher] [touch_type == DISEASE_BUMP ? "bumps into" : "touches"] you, your spines dig into \him!")) to_chat(toucher, span_danger("As you [touch_type == DISEASE_BUMP ? "bump into" : "touch"] \the [mob], \his spines dig into you!")) - var/mob/living/L = toucher - if(istype(L) && !istype(L, /mob/living/silicon)) - L.apply_damage(multiplier) - var/mob/M = touched - log_attack("[M] damaged [H] with keratin spikes") + var/mob/living/victim = toucher + if(istype(victim) && !istype(victim, /mob/living/silicon)) + victim.apply_damage(multiplier) + var/mob/attacker = touched + log_attack("[attacker] damaged [target] with keratin spikes") /* TODO LATER @@ -364,14 +329,14 @@ /datum/symptom/calorieburn/activate(var/mob/living/mob) if(ishuman(mob)) - var/mob/living/carbon/human/H = mob - H.calorie_burn_rate *= multiplier + var/mob/living/carbon/human/victim = mob + victim.calorie_burn_rate *= multiplier /datum/symptom/calorieburn/deactivate(var/mob/living/mob) if (count) if(ishuman(mob)) - var/mob/living/carbon/human/H = mob - H.calorie_burn_rate /= multiplier + var/mob/living/carbon/human/victim = mob + victim.calorie_burn_rate /= multiplier /datum/symptom/calorieconserve name = "Caloric expenditure defficiency" @@ -385,14 +350,14 @@ /datum/symptom/calorieconserve/activate(var/mob/living/mob) if(ishuman(mob)) - var/mob/living/carbon/human/H = mob - H.calorie_burn_rate /= multiplier + var/mob/living/carbon/human/victim = mob + victim.calorie_burn_rate /= multiplier /datum/symptom/calorieconserve/deactivate(var/mob/living/mob) if(count) if(ishuman(mob)) - var/mob/living/carbon/human/H = mob - H.calorie_burn_rate *= multiplier + var/mob/living/carbon/human/victim = mob + victim.calorie_burn_rate *= multiplier */ /datum/symptom/famine @@ -402,31 +367,31 @@ max_multiplier = 3 badness = EFFECT_DANGER_HINDRANCE -/datum/symptom/famine/activate(var/mob/living/mob) +/datum/symptom/famine/activate(mob/living/mob) if(ishuman(mob)) - var/mob/living/carbon/human/H = mob - if(H.dna) - if(ispodperson(H)) //Plantmen take a LOT of damage - H.adjustCloneLoss(5 * multiplier) + var/mob/living/carbon/human/victim = mob + if(victim.dna) + if(ispodperson(victim)) //Plantmen take a LOT of damage + victim.adjustCloneLoss(5 * multiplier) - for(var/obj/machinery/hydroponics/H in range(3*multiplier,mob)) + for(var/obj/machinery/hydroponics/plantbox in range(3*multiplier,mob)) switch(rand(1,3)) if(1) - H.adjust_waterlevel(-rand(1,10)) - H.adjust_plant_nutriments(-rand(1,5)) + plantbox.adjust_waterlevel(-rand(1,10)) + plantbox.adjust_plant_nutriments(-rand(1,5)) if(2) - H.adjust_toxic(rand(1,50)) + plantbox.adjust_toxic(rand(1,50)) if(3) - H.adjust_weedlevel(10) - H.adjust_pestlevel(10) + plantbox.adjust_weedlevel(10) + plantbox.adjust_pestlevel(10) if(prob(5)) - H.plantdies() + plantbox.plantdies() - for(var/obj/item/food/grown/G in range(2*multiplier,mob)) - G.visible_message("\The [G] rots at an alarming rate!") - new /obj/item/food/badrecipe(get_turf(G)) - qdel(G) + for(var/obj/item/food/grown/crop in range(2*multiplier,mob)) + crop.visible_message("\The [crop] rots at an alarming rate!") + new /obj/item/food/badrecipe(get_turf(crop)) + qdel(crop) if(prob(30/multiplier)) break /datum/symptom/cyborg_vomit @@ -436,11 +401,17 @@ badness = EFFECT_DANGER_ANNOYING /datum/symptom/cyborg_vomit/activate(mob/living/mob) + if((HAS_TRAIT(mob, TRAIT_NOHUNGER))) + return + + if(!(mob.has_mouth())) + return + if(prob(90)) //90% chance for just oil mob.visible_message(span_danger("[mob.name] vomits up some oil!")) mob.adjustToxLoss(-3) - var/obj/effect/decal/cleanable/oil/O = new /obj/effect/decal/cleanable/oil(get_turf(mob)) - playsound(O, 'sound/effects/splat.ogg', 50, 1) + var/obj/effect/decal/cleanable/oil/oil = new /obj/effect/decal/cleanable/oil(get_turf(mob)) + playsound(oil, 'sound/effects/splat.ogg', 50, 1) mob.Stun(0.5 SECONDS) else //10% chance for a random bot! to_chat(mob, span_danger("You feel like something's about to burst out of you!")) @@ -453,10 +424,10 @@ /mob/living/simple_animal/bot/buttbot ) var/chosen_bot = pick(possible_bots) - var/mob/living/simple_animal/bot/B = new chosen_bot(get_turf(mob)) + var/mob/living/simple_animal/bot/newbot = new chosen_bot(get_turf(mob)) new /obj/effect/decal/cleanable/blood(get_turf(mob)) - mob.visible_message("A [B.name] bursts out of [mob.name]'s mouth!") - playsound(B, 'sound/effects/splat.ogg', 50, 1) + mob.visible_message("A [newbot.name] bursts out of [mob.name]'s mouth!") + playsound(newbot, 'sound/effects/splat.ogg', 50, 1) mob.emote("scream") mob.adjustBruteLoss(15) mob.Stun(1 SECONDS) @@ -469,7 +440,7 @@ stage = 2 var/activated = 0 -/datum/symptom/mommi_shrink/activate(var/mob/living/mob) +/datum/symptom/mommi_shrink/activate(mob/living/mob) if(activated) return to_chat(mob, "You feel small...") @@ -498,8 +469,8 @@ if(!ishuman(mob)) return - var/mob/living/carbon/human/H = mob - H.vomit(stun = FALSE) + var/mob/living/carbon/human/victim = mob + victim.vomit(stun = FALSE) /datum/symptom/antitox name = "Antioxidantisation Syndrome" @@ -518,26 +489,21 @@ badness = EFFECT_DANGER_HINDRANCE var/active = 0 -/datum/symptom/cult_vomit/activate(mob/living/carbon/M) - if(!ishuman(M) || active) +/datum/symptom/cult_vomit/activate(mob/living/carbon/mob) + if(!ishuman(mob) || active) return - if(istype(get_area(M), /area/station/service/chapel)) + if(istype(get_area(mob), /area/station/service/chapel)) return - if(IS_CULTIST(M)) + if(IS_CULTIST(mob)) return - var/mob/living/carbon/human/mob = M + var/mob/living/carbon/human/victim = mob active = 1 - to_chat(mob, span_warning("You feel a burning sensation in your throat.")) + to_chat(victim, span_warning("You feel a burning sensation in your throat.")) sleep(10 SECONDS) - to_chat(mob, span_danger("You feel an agonizing pain in your throat!")) + to_chat(victim, span_danger("You feel an agonizing pain in your throat!")) sleep(10 SECONDS) - mob.visible_message(span_danger("[mob] vomits up blood!"), span_danger("You vomit up blood!")) - var/obj/effect/decal/cleanable/blood/S = new(loc = get_turf(mob)) - S.count = 1 - playsound(mob, 'sound/effects/splat.ogg', 50, 1) - mob.Stun(5) - mob.blood_volume -= 8 + victim.vomit(10, TRUE) active = 0 /datum/symptom/choking diff --git a/monkestation/code/modules/virology/disease/symtoms/stage3.dm b/monkestation/code/modules/virology/disease/symtoms/stage3.dm index dfbb0a81687e..c0baba30f73d 100644 --- a/monkestation/code/modules/virology/disease/symtoms/stage3.dm +++ b/monkestation/code/modules/virology/disease/symtoms/stage3.dm @@ -20,7 +20,7 @@ GLOBAL_LIST_INIT(disease_hivemind_users, list()) badness = EFFECT_DANGER_HINDRANCE /datum/symptom/shakey/activate(mob/living/carbon/mob) - shake_camera(mob,5*multiplier) + shake_camera(mob, 5*multiplier) /datum/symptom/telepathic @@ -28,7 +28,7 @@ GLOBAL_LIST_INIT(disease_hivemind_users, list()) desc = "Repurposes a portion of the users brain, making them incapable of normal speech but allows you to talk into a hivemind." stage = 3 max_count = 1 - badness = EFFECT_DANGER_HELPFUL + badness = EFFECT_DANGER_FLAVOR /datum/symptom/telepathic/first_activate(mob/living/carbon/mob) GLOB.disease_hivemind_users |= mob @@ -133,8 +133,8 @@ GLOBAL_LIST_INIT(disease_hivemind_users, list()) mob.emote("me",1,"is sweating profusely!") if(istype(mob.loc,/turf/open)) - var/turf/open/T = mob.loc - T.add_liquid_list(list(/datum/reagent/water = 20), TRUE) + var/turf/open/turf = mob.loc + turf.add_liquid_list(list(/datum/reagent/water = 20), TRUE) /datum/symptom/elvis name = "Elvisism" @@ -156,7 +156,7 @@ GLOBAL_LIST_INIT(disease_hivemind_users, list()) if(!ishuman(mob)) return - var/mob/living/carbon/human/H = mob + var/mob/living/carbon/human/victim = mob /* var/obj/item/clothing/glasses/H_glasses = H.get_item_by_slot(slot_glasses) @@ -173,19 +173,19 @@ GLOBAL_LIST_INIT(disease_hivemind_users, list()) else mob.emote("me",1,pick("curls his lip!", "gyrates his hips!", "thrusts his hips!")) - if(istype(H)) + if(istype(victim)) - if(!(H.hairstyle == "Pompadour (Big)")) + if(!(victim.hairstyle == "Pompadour (Big)")) spawn(50) - H.hairstyle = "Pompadour (Big)" - H.hair_color = "#242424" - H.update_body() + victim.hairstyle = "Pompadour (Big)" + victim.hair_color = "#242424" + victim.update_body() - if(!(H.facial_hairstyle == "Sideburns (Elvis)")) + if(!(victim.facial_hairstyle == "Sideburns (Elvis)")) spawn(50) - H.facial_hairstyle = "Sideburns (Elvis)" - H.facial_hair_color = "#242424" - H.update_body() + victim.facial_hairstyle = "Sideburns (Elvis)" + victim.facial_hair_color = "#242424" + victim.update_body() /datum/symptom/elvis/deactivate(mob/living/carbon/mob) if(ismouse(mob)) @@ -207,7 +207,6 @@ GLOBAL_LIST_INIT(disease_hivemind_users, list()) badness = EFFECT_DANGER_HINDRANCE /datum/symptom/pthroat/activate(mob/living/carbon/mob) - // if(ismouse(mob)) var/mob/living/basic/mouse/mouse = mob mouse.icon_state = "mouse_clown" @@ -215,28 +214,24 @@ GLOBAL_LIST_INIT(disease_hivemind_users, list()) mouse.icon_dead = "mouse_clown_dead" mouse.held_state = "mouse_clown" - if(!ishuman(mob)) - return - - var/obj/item/clothing/mask/gas/clown_hat/virus/virusclown_hat = new /obj/item/clothing/mask/gas/clown_hat/virus - if(mob.wear_mask && !istype(mob.wear_mask, /obj/item/clothing/mask/gas/clown_hat/virus)) - mob.dropItemToGround(mob.wear_mask, TRUE) - mob.equip_to_slot(virusclown_hat, ITEM_SLOT_MASK) - if(!mob.wear_mask) - mob.equip_to_slot(virusclown_hat, ITEM_SLOT_MASK) - mob.reagents.add_reagent(/datum/reagent/drug/mushroomhallucinogen, 20) mob.say(pick("HONK!", "Honk!", "Honk.", "Honk?", "Honk!!", "Honk?!", "Honk...")) if(ishuman(mob)) var/mob/living/carbon/human/affected = mob - if(multiplier >=2) //clown shoes added + if(multiplier >=2) //clown mask added + var/obj/item/clothing/mask/gas/clown_hat/virus/virusclown_hat = new /obj/item/clothing/mask/gas/clown_hat/virus + if(affected.wear_mask && !istype(affected.wear_mask, /obj/item/clothing/mask/gas/clown_hat/virus)) + affected.dropItemToGround(mob.wear_mask, TRUE) + affected.equip_to_slot(virusclown_hat, ITEM_SLOT_MASK) + if(!affected.wear_mask) + affected.equip_to_slot(virusclown_hat, ITEM_SLOT_MASK) + if(multiplier >=3) //clown shoes added + var/obj/item/clothing/shoes/clown_shoes/virusshoes = new /obj/item/clothing/shoes/clown_shoes if(affected.shoes && !istype(affected.shoes, /obj/item/clothing/shoes/clown_shoes)) - var/obj/item/clothing/shoes/clown_shoes/virusshoes = new /obj/item/clothing/shoes/clown_shoes affected.dropItemToGround(affected.shoes, TRUE) affected.equip_to_slot(virusshoes, ITEM_SLOT_FEET) if(!affected.shoes) - var/obj/item/clothing/shoes/clown_shoes/virusshoes = new /obj/item/clothing/shoes/clown_shoes affected.equip_to_slot(virusshoes, ITEM_SLOT_FEET) - if(multiplier >=3) //clown suit added + if(multiplier >=4) //clown suit added var/obj/item/clothing/under/rank/civilian/clown/virussuit = new /obj/item/clothing/under/rank/civilian/clown if(affected.w_uniform && !istype(affected.w_uniform, /obj/item/clothing/under/rank/civilian/clown)) affected.dropItemToGround(affected.w_uniform, TRUE) @@ -317,18 +312,19 @@ GLOBAL_LIST_INIT(disease_hivemind_users, list()) old_haircolor = affected.hair_color - switch(hair_color) - if("pink") - affected.hair_color = "#e983d8" - if("red") - affected.hair_color = "#E01631" - if("green") - affected.hair_color = "#008000" - if("blue") - affected.hair_color = "#0000FF" - if("purple") - affected.hair_color = "#800080" - affected.update_body() + if(!isethereal(affected)) //ethereals have weird custom hair color handling + switch(hair_color) + if("pink") + affected.hair_color = "#e983d8" + if("red") + affected.hair_color = "#E01631" + if("green") + affected.hair_color = "#008000" + if("blue") + affected.hair_color = "#0000FF" + if("purple") + affected.hair_color = "#800080" + affected.update_body() if(multiplier) if(multiplier >= 1.5) @@ -418,8 +414,8 @@ GLOBAL_LIST_INIT(disease_hivemind_users, list()) if(count && !skip) var/obj/item/bodypart/part if(ishuman(mob)) - var/mob/living/carbon/human/H = mob - part = H.get_bodypart(H.get_random_valid_zone()) + var/mob/living/carbon/human/victim = mob + part = victim.get_bodypart(victim.get_random_valid_zone()) if(toucher == mob) if(part) to_chat(mob, span_warning("As you bump into \the [touched], some of the skin on your [part] shears off!")) @@ -444,17 +440,17 @@ GLOBAL_LIST_INIT(disease_hivemind_users, list()) badness = EFFECT_DANGER_HELPFUL /datum/symptom/thick_blood/activate(mob/living/carbon/mob) - var/mob/living/carbon/human/H = mob - if (ishuman(H)) - if(H.is_bleeding()) - H.restore_blood() - to_chat(H, span_notice("You feel your blood regenerate, and your bleeding to stop!")) + var/mob/living/carbon/human/victim = mob + if (ishuman(victim)) + if(victim.is_bleeding()) + victim.restore_blood() + to_chat(victim, span_notice("You feel your blood regenerate, and your bleeding to stop!")) /datum/symptom/teratoma name = "Teratoma Syndrome" - desc = "Causes the infected to oversynthesize stem cells engineered towards organ generation. Said generated organs are expelled from the body upon completion." + desc = "Causes the infected to oversynthesize stem cells engineered towards organ generation, causing damage to the host's organs in the process. Said generated organs are expelled from the body upon completion." stage = 3 - badness = EFFECT_DANGER_FLAVOR + badness = EFFECT_DANGER_HARMFUL /datum/symptom/teratoma/activate(mob/living/carbon/mob) var/fail_counter = 0 @@ -470,6 +466,13 @@ GLOBAL_LIST_INIT(disease_hivemind_users, list()) not_passed = FALSE if(!not_passed) + if(ismouse(mob)) + var/mob/living/basic/mouse/mouse = mob + mouse.splat() //tumors are bad for you, tumors equal to your body in size doubley so + if(ismonkey(mob)) //monkeys are smaller and thus have less space for human-organ sized tumors + for(var/i in 1 to 3) + mob.adjustOrganLoss(pick(ORGAN_SLOT_HEART, ORGAN_SLOT_LUNGS, ORGAN_SLOT_STOMACH, ORGAN_SLOT_LIVER), 30) + mob.adjustOrganLoss(pick(ORGAN_SLOT_HEART, ORGAN_SLOT_LUNGS, ORGAN_SLOT_STOMACH, ORGAN_SLOT_LIVER), 25) mob.visible_message(span_warning("\A [spawned_organ.name] is extruded from \the [mob]'s body and falls to the ground!"),span_warning("\A [spawned_organ.name] is extruded from your body and falls to the ground!")) /datum/symptom/damage_converter @@ -510,37 +513,37 @@ GLOBAL_LIST_INIT(disease_hivemind_users, list()) crab.loc = M crab.override = 1 - var/client/C = mob.client - if(C) - C.images += crab + var/client/client = mob.client + if(client) + client.images += crab var/duration = rand(60 SECONDS, 120 SECONDS) spawn(duration) - if(C) - C.images.Remove(crab) + if(client) + client.images.Remove(crab) var/list/turf_list = list() - for(var/turf/T in spiral_block(get_turf(mob), 40)) + for(var/turf/turf in spiral_block(get_turf(mob), 40)) if(prob(4)) - turf_list += T + turf_list += turf if(turf_list.len) - for(var/turf/open/floor/T in turf_list) - var/image/supermatter = image('icons/obj/engine/supermatter.dmi', T ,"sm", ABOVE_MOB_LAYER) + for(var/turf/open/floor/turf in turf_list) + var/image/supermatter = image('icons/obj/engine/supermatter.dmi', turf ,"sm", ABOVE_MOB_LAYER) - var/client/C = mob.client - if(C) - C.images += supermatter + var/client/client = mob.client + if(client) + client.images += supermatter var/duration = rand(60 SECONDS, 120 SECONDS) spawn(duration) - if(C) - C.images.Remove(supermatter) + if(client) + client.images.Remove(supermatter) /datum/symptom/wendigo_hallucination name = "Eldritch Mind Syndrome" desc = "UNKNOWN" - badness = EFFECT_DANGER_HARMFUL + badness = EFFECT_DANGER_ANNOYING stage = 3 @@ -625,37 +628,37 @@ GLOBAL_LIST_INIT(disease_hivemind_users, list()) /datum/symptom/wizarditis/proc/spawn_wizard_clothes(chance = 0, mob/living/carbon/affected_mob) if(ishuman(affected_mob)) - var/mob/living/carbon/human/H = affected_mob + var/mob/living/carbon/human/wizard = affected_mob if(prob(chance)) - if(!istype(H.head, /obj/item/clothing/head/wizard)) - if(!H.dropItemToGround(H.head)) - qdel(H.head) - H.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(H), ITEM_SLOT_HEAD) + if(!istype(wizard.head, /obj/item/clothing/head/wizard)) + if(!wizard.dropItemToGround(wizard.head)) + qdel(wizard.head) + wizard.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(wizard), ITEM_SLOT_HEAD) return if(prob(chance)) - if(!istype(H.wear_suit, /obj/item/clothing/suit/wizrobe)) - if(!H.dropItemToGround(H.wear_suit)) - qdel(H.wear_suit) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(H), ITEM_SLOT_OCLOTHING) + if(!istype(wizard.wear_suit, /obj/item/clothing/suit/wizrobe)) + if(!wizard.dropItemToGround(wizard.wear_suit)) + qdel(wizard.wear_suit) + wizard.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(wizard), ITEM_SLOT_OCLOTHING) return if(prob(chance)) - if(!istype(H.shoes, /obj/item/clothing/shoes/sandal/magic)) - if(!H.dropItemToGround(H.shoes)) - qdel(H.shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/magic(H), ITEM_SLOT_FEET) + if(!istype(wizard.shoes, /obj/item/clothing/shoes/sandal/magic)) + if(!wizard.dropItemToGround(wizard.shoes)) + qdel(wizard.shoes) + wizard.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/magic(wizard), ITEM_SLOT_FEET) return else - var/mob/living/carbon/H = affected_mob + var/mob/living/carbon/wizard = affected_mob if(prob(chance)) - var/obj/item/staff/S = new(H) - if(!H.put_in_hands(S)) - qdel(S) + var/obj/item/staff/staff = new(wizard) + if(!wizard.put_in_hands(staff)) + qdel(staff) /datum/symptom/wizarditis/proc/teleport(mob/living/carbon/affected_mob) var/list/theareas = get_areas_in_range(80, affected_mob) - for(var/area/space/S in theareas) - theareas -= S + for(var/area/space/unsafe in theareas) + theareas -= unsafe if(!theareas || !theareas.len) return diff --git a/monkestation/code/modules/virology/disease/symtoms/stage4.dm b/monkestation/code/modules/virology/disease/symtoms/stage4.dm index e872b22d4e25..e08b9f22a8f4 100644 --- a/monkestation/code/modules/virology/disease/symtoms/stage4.dm +++ b/monkestation/code/modules/virology/disease/symtoms/stage4.dm @@ -1,6 +1,6 @@ /datum/symptom/spaceadapt name = "Space Adaptation Effect" - desc = "Heals the infected from the effects of space exposure, should they remain in a vacuum." + desc = "Causes the infected to secrete a thin thermally insulating and spaceproof barrier from their skin." stage = 4 max_count = 1 badness = EFFECT_DANGER_HELPFUL @@ -116,15 +116,15 @@ /datum/symptom/bones/activate(mob/living/carbon/mob) if(istype(mob, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = mob - for (var/obj/item/bodypart/bp in H.bodyparts) - bp.wound_resistance -= 10 + var/mob/living/carbon/human/victim = mob + for (var/obj/item/bodypart/part in victim.bodyparts) + part.wound_resistance -= 10 /datum/symptom/bones/deactivate(mob/living/carbon/mob) if(istype(mob, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = mob - for (var/obj/item/bodypart/bp in H.bodyparts) - bp.wound_resistance += 10 + var/mob/living/carbon/human/victim = mob + for (var/obj/item/bodypart/part in victim.bodyparts) + part.wound_resistance += 10 /datum/symptom/fizzle name = "Fizzle Effect" @@ -139,11 +139,11 @@ name = "Delightful Effect" desc = "A more powerful version of Full Glass. Makes the infected feel delightful." stage = 4 - badness = EFFECT_DANGER_HELPFUL + badness = EFFECT_DANGER_FLAVOR /datum/symptom/delightful/activate(mob/living/carbon/mob) to_chat(mob, "You feel delightful!") - if (mob.reagents.get_reagent_amount(/datum/reagent/drug/happiness) < 10) + if (mob.reagents.get_reagent_amount(/datum/reagent/drug/happiness) < 5) mob.reagents.add_reagent(/datum/reagent/drug/happiness, 10) /datum/symptom/spawn @@ -206,7 +206,7 @@ name = "Magnitis" desc = "This disease disrupts the magnetic field of the body, making it act as if a powerful magnet." stage = 4 - badness = EFFECT_DANGER_HARMFUL + badness = EFFECT_DANGER_DEADLY chance = 5 max_chance = 20 @@ -273,21 +273,21 @@ max_chance = 24 /datum/symptom/species/activate(mob/living/carbon/mob) - var/mob/living/carbon/human/H = mob - if(!ishuman(H)) + var/mob/living/carbon/human/victim = mob + if(!ishuman(victim)) return old_species = mob.dna.species if(!old_species) return - H.set_species(new_species) + victim.set_species(new_species) /datum/symptom/species/deactivate(mob/living/carbon/mob) - var/mob/living/carbon/human/H = mob - if(!ishuman(H)) + var/mob/living/carbon/human/victim = mob + if(!ishuman(victim)) return if(!old_species) return - H.set_species(old_species) + victim.set_species(old_species) /datum/symptom/species/moth name = "Mothification" @@ -299,7 +299,7 @@ desc = "A DNA-altering retrovirus that scrambles the structural and unique enzymes of a host constantly." max_multiplier = 4 stage = 4 - badness = EFFECT_DANGER_ANNOYING + badness = EFFECT_DANGER_HARMFUL /datum/symptom/retrovirus/activate(mob/living/carbon/affected_mob) if(!iscarbon(affected_mob)) diff --git a/monkestation/code/modules/virology/immune_systems/_immune_system.dm b/monkestation/code/modules/virology/immune_systems/_immune_system.dm index 9b748db750fe..b4e79271cb63 100644 --- a/monkestation/code/modules/virology/immune_systems/_immune_system.dm +++ b/monkestation/code/modules/virology/immune_systems/_immune_system.dm @@ -118,6 +118,13 @@ if (prob(threshold) && prob(tally * 10) && prob((100 - antibodies[A])*100/(100-threshold)))//smaller and smaller chance for further increase antibodies[A] = min(antibodies[A] + 1, 100) +/datum/immune_system/proc/AntibodyCure() + if (overloaded) + return + + for (var/datum/disease/advanced/disease as anything in host.diseases) + for (var/A in disease.antigen) + antibodies[A] = 100 /datum/immune_system/proc/ApplyVaccine(list/antigen, amount = 1, decay = 0) if (overloaded) diff --git a/monkestation/code/modules/virology/reagents/antipathenogenics.dm b/monkestation/code/modules/virology/reagents/antipathenogenics.dm index 8e9f5834c675..cefc214ba814 100644 --- a/monkestation/code/modules/virology/reagents/antipathenogenics.dm +++ b/monkestation/code/modules/virology/reagents/antipathenogenics.dm @@ -26,3 +26,12 @@ if(..()) return TRUE M.immune_system.ApplyAntipathogenics(data["threshold"]) + +/datum/reagent/medicine/antipathogenic/changeling + name = "Changeling Immunoglobulin" + description = "Antibodies from a changeling's immune system. They seem to shift and change to respond to threats" + +/datum/reagent/medicine/antipathogenic/on_mob_life(mob/living/carbon/M, seconds_per_tick, times_fired) + if(..()) + return TRUE + M.immune_system.AntibodyCure()