diff --git a/code/defines/mob/living/carbon/carbon.dm b/code/defines/mob/living/carbon/carbon.dm index 7715ce30bfb..504be351276 100644 --- a/code/defines/mob/living/carbon/carbon.dm +++ b/code/defines/mob/living/carbon/carbon.dm @@ -12,5 +12,8 @@ var/list/datum/disease2/disease/resistances2 = list() var/antibodies = 0 + var/analgesic = 0 // when this is set, the mob isn't affected by shock or pain + // life should decrease this by 1 every tick + mob var/list/disease_symptoms = 0 // a list of disease-incurred symptoms \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 60acabcabaf..2f1a091aba8 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -270,6 +270,8 @@ if(reagents.has_reagent("nuka_cola")) return -1 + if(analgesic) return -1 + if (istype(loc, /turf/space)) return -1 // It's hard to be slowed down in space by... anything var/health_deficiency = traumatic_shock diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index d68b0c714d5..a0cc50e1d58 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -133,6 +133,9 @@ proc handle_health_updates() + // the analgesic effect wears off slowly + analgesic = max(0, analgesic - 1) + // if the mob has enough health, she should slowly heal if(stat == 1) if(health >= 0) @@ -151,6 +154,8 @@ lying = 1 //Seriously, stay down :x update_clothing() + + clamp_values() SetStunned(min(stunned, 20)) @@ -1446,6 +1451,8 @@ handle_shock() ..() + if(analgesic) return // analgesic avoids all traumatic shock temporarily + if(health < 0) // health 0 makes you immediately collapse shock_stage = max(shock_stage, 61) diff --git a/code/modules/mob/living/carbon/shock.dm b/code/modules/mob/living/carbon/shock.dm index f53ca6f66f0..e1b9d6c90c5 100644 --- a/code/modules/mob/living/carbon/shock.dm +++ b/code/modules/mob/living/carbon/shock.dm @@ -14,6 +14,8 @@ src.traumatic_shock -= 200 // make synaptizine function as good painkiller if(src.slurring) src.traumatic_shock -= 20 + if(src.analgesic) + src.traumatic_shock = 0 // broken or ripped off organs will add quite a bit of pain if(istype(src,/mob/living/carbon/human)) diff --git a/code/modules/mob/living/parasite/meme.dm b/code/modules/mob/living/parasite/meme.dm index c20f3341bc6..d36d08859ae 100644 --- a/code/modules/mob/living/parasite/meme.dm +++ b/code/modules/mob/living/parasite/meme.dm @@ -215,6 +215,7 @@ mob/living/parasite/meme/verb/Hallucinate() usr << "You make [target] hallucinate." +// Jump to a closeby target through a whisper mob/living/parasite/meme/verb/SubtleJump(mob/living/carbon/human/target as mob in world) set category = "Meme" @@ -245,6 +246,7 @@ mob/living/parasite/meme/verb/SubtleJump(mob/living/carbon/human/target as mob i usr << "You successfully jumped to [target]." +// Jump to a distant target through a shout mob/living/parasite/meme/verb/ObviousJump(mob/living/carbon/human/target as mob in world) set category = "Meme" @@ -275,6 +277,59 @@ mob/living/parasite/meme/verb/ObviousJump(mob/living/carbon/human/target as mob usr << "You successfully jumped to [target]." +// ATTUNE a mob, adding it to the indoctrinated list +mob/living/parasite/meme/verb/Attune() + set category = "Meme" + + if(host in src.indoctrinated) + usr << "You have already attuned this host." + return + + if(!host) return + if(!use_points(400)) return + + src.indoctrinated.Add(host) + + usr << "You successfully indoctrinated [host]." + +// Enables the mob to take a lot more damage +mob/living/parasite/meme/verb/Analgesic() + set category = "Meme" + + if(!host) return + if(!use_points(500)) return + + usr << "You inject drugs into [host]." + host << "\red You feel your body strengthen and your pain subside.." + host.analgesic = 60 + while(host.analgesic > 0) + sleep(10) + host << "\red The dizziness wears off, and you can feel pain again.." + + +// Take control of the mob +mob/living/parasite/meme/verb/Possession() + set category = "Meme" + + if(!host) return + if(!use_points(500)) return + + usr << "You take control of [host]!" + host << "\red Everything goes black.." + + spawn + var/client/host_client = host.client + var/client/meme_client = src.client + + if(host_client) host_client.mob = null + meme_client.mob = host + + sleep(300) + + if(host_client) host_client.mob = host + if(meme_client) meme_client.mob = src + src << "\red You lose control.." + diff --git a/code/modules/mob/organ/pain.dm b/code/modules/mob/organ/pain.dm index fb0715138c3..21825ce8eaa 100644 --- a/code/modules/mob/organ/pain.dm +++ b/code/modules/mob/organ/pain.dm @@ -38,6 +38,8 @@ mob/living/carbon/human/proc/handle_pain() return if(reagents.has_reagent("oxycodone")) return + if(analgesic) + return var/maxdam = 0 var/datum/organ/external/damaged_organ = null for(var/name in organs)