mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 02:16:05 +00:00
Refactor tinfoil hat snowflake code (#32664)
* replace * fixed * Update powers.dm * M_PSY_RESIST refactors * argh * Update powers.dm * Update teleport.dm * Update teleport.dm * turn into proc remove digital camo turn everything into can_mind_interact * seems to work * Update misc_special.dm * Update misc_special.dm * Update mob.dm * Update mob.dm * Update mob.dm * Update teleport.dm * Update teleport.dm * Update teleport.dm * Update teleport.dm * PSY to interference * Update goon_powers.dm * changing the name again * telepathy blocked again
This commit is contained in:
@@ -474,7 +474,7 @@ var/global/list/BODY_COVER_VALUE_LIST=list("[HEAD]" = COVER_PROTECTION_HEAD,"[EY
|
||||
#define M_TOXIC_FARTS 201 // Duh
|
||||
#define M_STRONG 202 // (Nothing)
|
||||
#define M_SOBER 203 // Increased alcohol metabolism
|
||||
#define M_PSY_RESIST 204 // Block remoteview
|
||||
#define M_JAMSIGNALS 204 // Block EMFs
|
||||
#define M_SUPER_FART 205 // Duh
|
||||
#define M_SMILE 206 // :)
|
||||
#define M_ELVIS 207 // You ain't nothin' but a hound dog.
|
||||
|
||||
@@ -211,20 +211,19 @@
|
||||
if(changeling)
|
||||
changeling.chem_storage += 25
|
||||
|
||||
/datum/power/changeling/DigitalCamoflague
|
||||
/datum/power/changeling/DigitalCamouflage
|
||||
name = "Digital Camouflage"
|
||||
desc = "We evolve the ability to distort our form and proportions, defeating common algorithms used to detect lifeforms on cameras."
|
||||
cost = 2
|
||||
allowduringlesserform = 1
|
||||
allowduringhorrorform = 0
|
||||
|
||||
/datum/power/changeling/DigitalCamoflague/add_power(var/datum/role/R)
|
||||
/datum/power/changeling/DigitalCamouflage/add_power(var/datum/role/R)
|
||||
. = ..()
|
||||
if (!.)
|
||||
return
|
||||
var/mob/living/carbon/human/C = R.antag.current
|
||||
to_chat(C, "<span class='notice'>We distort our form to prevent AI-tracking.</span>")
|
||||
C.digitalcamo = 1
|
||||
|
||||
/datum/power/changeling/rapidregeneration
|
||||
name = "Rapid Regeneration"
|
||||
|
||||
@@ -89,8 +89,7 @@ the HUD updates properly! */
|
||||
|
||||
for(var/mob/living/carbon/patient in range(C.view+DATAHUD_RANGE_OVERHEAD,T))
|
||||
if (ishuman(patient))
|
||||
var/mob/living/carbon/human/H = patient
|
||||
if(H.head && istype(H.head,/obj/item/clothing/head/tinfoil)) //Tinfoil hat? Move along.
|
||||
if(!can_mind_interact(patient.mind)) //Tinfoil hat? Move along.
|
||||
continue
|
||||
if(!check_HUD_visibility(patient, M))
|
||||
continue
|
||||
@@ -181,7 +180,7 @@ the HUD updates properly! */
|
||||
if(!holder)
|
||||
continue
|
||||
holder.icon_state = "hudno_id"
|
||||
if(perp.head && istype(perp.head,/obj/item/clothing/head/tinfoil)) //Tinfoil hat? Move along.
|
||||
if(!can_mind_interact(perp.mind)) //Tinfoil hat? Move along.
|
||||
C.images += holder
|
||||
continue
|
||||
var/obj/item/weapon/card/id/card = perp.get_id_card()
|
||||
|
||||
@@ -12,16 +12,16 @@
|
||||
block = SOBERBLOCK
|
||||
|
||||
//WAS: /datum/bioEffect/psychic_resist
|
||||
/datum/dna/gene/basic/psychic_resist
|
||||
name = "Psy-Resist"
|
||||
desc = "Boosts efficiency in sectors of the brain commonly associated with meta-mental energies."
|
||||
activation_messages = list("Your mind feels closed.")
|
||||
/datum/dna/gene/basic/jamsignals
|
||||
name = "Signal Jam"
|
||||
desc = "Creates an invisible shield around your body, protecting you from harmful electromagnetic radiation."
|
||||
activation_messages = list("Your body and mind feel shielded.")
|
||||
deactivation_messages = list("You feel oddly exposed.")
|
||||
|
||||
mutation = M_PSY_RESIST
|
||||
mutation = M_JAMSIGNALS
|
||||
|
||||
/datum/dna/gene/basic/psychic_resist/New()
|
||||
block = PSYRESISTBLOCK
|
||||
/datum/dna/gene/basic/jamsignals/New()
|
||||
block = JAMSIGNALSBLOCK
|
||||
|
||||
/////////////////////////
|
||||
// Stealth Enhancers
|
||||
@@ -614,7 +614,7 @@
|
||||
to_chat(user, "<span class='warning'>This can only be used on carbon beings.</span>")
|
||||
return 1
|
||||
|
||||
if (M_PSY_RESIST in M.mutations)
|
||||
if (!can_mind_interact(M.mind))
|
||||
to_chat(user, "<span class='warning'>You can't see into [M.name]'s mind at all!</span>")
|
||||
return 1
|
||||
|
||||
|
||||
@@ -72,13 +72,8 @@
|
||||
user.reset_view(0)
|
||||
return
|
||||
|
||||
for(var/T in targets)
|
||||
var/mob/living/target
|
||||
if (isliving(T))
|
||||
target = T
|
||||
if (istype (T, /datum/mind))
|
||||
target = user.can_mind_interact(T)
|
||||
if(target)
|
||||
for(var/mob/living/target in targets)
|
||||
if (can_mind_interact(target.mind))
|
||||
user.remoteview_target = target
|
||||
user.reset_view(target)
|
||||
break
|
||||
@@ -155,19 +150,17 @@
|
||||
M.telepathic_target.len = 0
|
||||
|
||||
var/all_switch = TRUE
|
||||
for(var/T in targets)
|
||||
var/mob/living/target
|
||||
if (isliving(T))
|
||||
target = T
|
||||
if (istype (T, /datum/mind))
|
||||
target = user.can_mind_interact(T)
|
||||
if(!T || !istype(target) || tinfoil_check(target) || !user.can_mind_interact(target))
|
||||
user.show_message("<span class='notice'>You are unable to use telepathy with [target].</span>")
|
||||
for(var/mob/living/T in targets)
|
||||
if(!istype(T) && !can_mind_interact(T.mind))
|
||||
to_chat(M,"<span class='notice'>[T] cannot sense your telepathy.</span>")
|
||||
continue
|
||||
else if(istype(M))
|
||||
M.telepathic_target += target
|
||||
if(istype(M))
|
||||
M.telepathic_target += T
|
||||
continue
|
||||
if(M_TELEPATHY in target.mutations)
|
||||
if(T == user) //Talking to ourselves
|
||||
to_chat(user,"<span class='notice'>Projected to self: [message]</span>")
|
||||
return
|
||||
if(M_TELEPATHY in T.mutations)
|
||||
to_chat(T, "<span class='notice'>You hear [user.real_name]'s voice: [message]</span>")
|
||||
else
|
||||
to_chat(T,"<span class='notice'>You hear a voice inside your head: [message] </span>")
|
||||
|
||||
@@ -49,7 +49,7 @@ var/ELVISBLOCK = 0
|
||||
|
||||
// Powers
|
||||
var/SOBERBLOCK = 0
|
||||
var/PSYRESISTBLOCK = 0
|
||||
var/JAMSIGNALSBLOCK = 0
|
||||
var/STRONGBLOCK = 0
|
||||
//var/SHADOWBLOCK = 0
|
||||
var/FARSIGHTBLOCK = 0
|
||||
@@ -159,7 +159,7 @@ var/LACTOSEBLOCK = 0
|
||||
|
||||
// Powers
|
||||
SOBERBLOCK = getAssignedBlock("SOBER", numsToAssign, DNA_HARD_BOUNDS, good=1)
|
||||
PSYRESISTBLOCK = getAssignedBlock("PSYRESIST", numsToAssign, DNA_HARD_BOUNDS, good=1)
|
||||
JAMSIGNALSBLOCK = getAssignedBlock("JAMSIGNALS", numsToAssign, DNA_HARD_BOUNDS, good=1)
|
||||
//SHADOWBLOCK = getAssignedBlock("SHADOW", numsToAssign, DNA_HARDER_BOUNDS, good=1)
|
||||
FARSIGHTBLOCK = getAssignedBlock("FARSIGHT", numsToAssign, DNA_HARDER_BOUNDS, good=1)
|
||||
CHAMELEONBLOCK = getAssignedBlock("CHAMELEON", numsToAssign, DNA_HARDER_BOUNDS, good=1)
|
||||
|
||||
@@ -156,26 +156,9 @@
|
||||
return FALSE
|
||||
|
||||
if(ismob(target))
|
||||
var/mob/target_mob = target
|
||||
if(target_mob.digitalcamo)
|
||||
var/mob/M = target
|
||||
if(!can_mind_interact(M.mind))
|
||||
return FALSE
|
||||
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/target_human = target
|
||||
if(target_human.wear_id && istype(target_human.wear_id.GetID(), /obj/item/weapon/card/id/syndicate))
|
||||
return FALSE
|
||||
if(target_human.is_wearing_item(/obj/item/clothing/mask/gas/voice))
|
||||
return FALSE
|
||||
if(target_human.is_wearing_item(/obj/item/clothing/gloves/ninja))
|
||||
return FALSE
|
||||
if(target_human.is_wearing_item(/obj/item/clothing/head/tinfoil))
|
||||
return FALSE
|
||||
if(target_human.is_holding_item(/obj/item/device/megaphone/madscientist))
|
||||
return FALSE
|
||||
|
||||
if(isalien(target))
|
||||
return FALSE
|
||||
|
||||
if(istype(target.loc, /obj/effect/dummy))
|
||||
return FALSE
|
||||
|
||||
|
||||
@@ -354,7 +354,7 @@
|
||||
if(is_type_in_list(S, illegalSwap) || is_type_in_list(S, illegalSwap))
|
||||
MT = MINDMACHINE_SHIELDED
|
||||
if((ishigherbeing(S)) || (ismonkey(S)))
|
||||
if(S.is_wearing_any(list(/obj/item/clothing/head/tinfoil,/obj/item/clothing/head/helmet/stun), slot_head))
|
||||
if(!can_mind_interact(S.mind))
|
||||
MT = MINDMACHINE_SHIELDED
|
||||
if(S == occupantOne)
|
||||
mindTypeOne = MT
|
||||
|
||||
@@ -500,27 +500,27 @@
|
||||
block = SOBERBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dnainjector/nofail/psychic_resist
|
||||
name = "DNA-Injector (Psychic Resist)"
|
||||
desc = "Not today, mind hippies."
|
||||
/obj/item/weapon/dnainjector/nofail/jamsignals
|
||||
name = "DNA-Injector (Jam Signals)"
|
||||
desc = "Hidden in plain sight"
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
//block = 2
|
||||
|
||||
/obj/item/weapon/dnainjector/nofail/psychic_resist/initialize()
|
||||
block = PSYRESISTBLOCK
|
||||
/obj/item/weapon/dnainjector/nofail/JAMSIGNALS/initialize()
|
||||
block = JAMSIGNALSBLOCK
|
||||
..()
|
||||
|
||||
|
||||
/obj/item/weapon/dnainjector/nofail/antipsychic_resist
|
||||
name = "DNA-Injector (Anti-Psychic Resist)"
|
||||
desc = "Im thinking about furry porn 24/7. Come at me, faggots."
|
||||
/obj/item/weapon/dnainjector/nofail/antijamsignals
|
||||
name = "DNA-Injector (Anti-Jamming)"
|
||||
desc = "There are eyes everywhere"
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
//block = 2
|
||||
|
||||
/obj/item/weapon/dnainjector/nofail/antipsychic_resist/initialize()
|
||||
block = PSYRESISTBLOCK
|
||||
/obj/item/weapon/dnainjector/nofail/antijamsignals/initialize()
|
||||
block = JAMSIGNALSBLOCK
|
||||
..()
|
||||
|
||||
/*/obj/item/weapon/dnainjector/nofail/darkcloak
|
||||
@@ -1380,7 +1380,7 @@
|
||||
/obj/item/weapon/dnainjector/nofail/insulation,
|
||||
/obj/item/weapon/dnainjector/nofail/midgit,
|
||||
/obj/item/weapon/dnainjector/nofail/sober,
|
||||
/obj/item/weapon/dnainjector/nofail/psychic_resist,
|
||||
/obj/item/weapon/dnainjector/nofail/jamsignals,
|
||||
/obj/item/weapon/dnainjector/nofail/chameleon,
|
||||
/obj/item/weapon/dnainjector/nofail/cryo,
|
||||
/obj/item/weapon/dnainjector/nofail/mattereater,
|
||||
|
||||
@@ -279,7 +279,7 @@
|
||||
isRemoteObserve = 0
|
||||
|
||||
//Does he have psy resist?
|
||||
if(M_PSY_RESIST in remoteview_target.mutations)
|
||||
if(!can_mind_interact(remoteview_target.mind))
|
||||
to_chat(src, "<span class='warning'>Your mind is shut out!</span>")
|
||||
isRemoteObserve = 0
|
||||
|
||||
|
||||
@@ -1357,8 +1357,11 @@ var/list/has_died_as_golem = list()
|
||||
|
||||
var/all_switch = TRUE
|
||||
for(var/mob/living/T in telepathic_target)
|
||||
if(istype(T) && M.can_mind_interact(T))
|
||||
to_chat(T,"<span class='mushroom'>You feel <b>[M]</b>'s thoughts: </span><span class='mushroom'>[message]</span>")
|
||||
if(istype(T) && can_mind_interact(T.mind))
|
||||
to_chat(T,"<span class='mushroom'>You feel <b>[M]</b>'s thoughts: [message]</span>")
|
||||
else
|
||||
to_chat(M,"<span class='notice'>[T] cannot sense your telepathy.</span>")
|
||||
continue
|
||||
if(all_switch)
|
||||
all_switch = FALSE
|
||||
if(T != M)
|
||||
|
||||
@@ -728,32 +728,31 @@
|
||||
|
||||
/mob/living/simple_animal/hostile/humanoid/grey/researcher/surgeon/Shoot()
|
||||
var/mob/living/carbon/human/H = target
|
||||
if(H.isUnconscious() || H.is_wearing_item(/obj/item/clothing/head/tinfoil) || (M_PSY_RESIST in H.mutations)) // Psy-attacks don't work if the target is unconsious, wearing a tin foil hat, or has genetic resistance
|
||||
if(can_mind_interact(H.mind)) // Psy-attacks don't work if the target is unconsious, wearing a tin foil hat, or has genetic resistance
|
||||
return
|
||||
else
|
||||
switch(rand(0,4))
|
||||
if(0) //Minor brain damage
|
||||
to_chat(H, "<span class='userdanger'>You get a blindingly painful headache.</span>")
|
||||
H.adjustBrainLoss(10)
|
||||
H.eye_blurry = max(H.eye_blurry, 5)
|
||||
if(1) //Brief knockdown
|
||||
to_chat(H, "<span class='userdanger'>You suddenly lose your sense of balance!</span>")
|
||||
H.emote("me", 1, "collapses!")
|
||||
H.Knockdown(2)
|
||||
if(2) //Target gets put to sleep for a few seconds
|
||||
to_chat(H, "<span class='userdanger'>You feel exhausted...</span>")
|
||||
H.drowsyness += 4
|
||||
spawn(2 SECONDS)
|
||||
H.sleeping += 3
|
||||
if(3) //Minor hallucinations and jittering
|
||||
to_chat(H, "<span class='userdanger'>Your mind feels less stable, and you feel nervous.</span>")
|
||||
H.hallucination += 60 // For some reason it has to be this high at least or seemingly nothing happens
|
||||
H.Jitter(20)
|
||||
H.stuttering += 20
|
||||
if(4) //Ranged disarm
|
||||
to_chat(H, "<span class='userdanger'>Your arm jerks involuntarily, and you drop what you're holding!</span>")
|
||||
H.drop_item()
|
||||
return 1
|
||||
switch(rand(0,4))
|
||||
if(0) //Minor brain damage
|
||||
to_chat(H, "<span class='userdanger'>You get a blindingly painful headache.</span>")
|
||||
H.adjustBrainLoss(10)
|
||||
H.eye_blurry = max(H.eye_blurry, 5)
|
||||
if(1) //Brief knockdown
|
||||
to_chat(H, "<span class='userdanger'>You suddenly lose your sense of balance!</span>")
|
||||
H.emote("me", 1, "collapses!")
|
||||
H.Knockdown(2)
|
||||
if(2) //Target gets put to sleep for a few seconds
|
||||
to_chat(H, "<span class='userdanger'>You feel exhausted...</span>")
|
||||
H.drowsyness += 4
|
||||
spawn(2 SECONDS)
|
||||
H.sleeping += 3
|
||||
if(3) //Minor hallucinations and jittering
|
||||
to_chat(H, "<span class='userdanger'>Your mind feels less stable, and you feel nervous.</span>")
|
||||
H.hallucination += 60 // For some reason it has to be this high at least or seemingly nothing happens
|
||||
H.Jitter(20)
|
||||
H.stuttering += 20
|
||||
if(4) //Ranged disarm
|
||||
to_chat(H, "<span class='userdanger'>Your arm jerks involuntarily, and you drop what you're holding!</span>")
|
||||
H.drop_item()
|
||||
return 1
|
||||
|
||||
/mob/living/simple_animal/hostile/humanoid/grey/researcher/surgeon/Aggro()
|
||||
..()
|
||||
@@ -866,64 +865,48 @@
|
||||
M.throw_at(target_turf,100,telekinesis_throw_speed)
|
||||
|
||||
/mob/living/simple_animal/hostile/humanoid/grey/leader/Shoot()
|
||||
if(last_psychicattack + psychicattack_cooldown < world.time)
|
||||
var/list/victims = list()
|
||||
for(var/mob/living/carbon/human/H in view(src, psychic_range))
|
||||
victims.Add(H)
|
||||
|
||||
if(!victims.len)
|
||||
return
|
||||
switch(rand(0,4))
|
||||
if(0) //Brain damage, confusion, and dizziness
|
||||
for(var/mob/living/carbon/human/H in victims)
|
||||
if(H.isUnconscious() || H.is_wearing_item(/obj/item/clothing/head/tinfoil) || (M_PSY_RESIST in H.mutations)) // Psy-attacks don't work if the target is unconsious, wearing a tin foil hat, or has genetic resistance
|
||||
continue
|
||||
to_chat(H, "<span class='userdanger'>An unbearable pain stabs into your mind!</span>")
|
||||
H.adjustBrainLoss(20)
|
||||
H.eye_blurry = max(H.eye_blurry, 10)
|
||||
H.confused += 10
|
||||
H.dizziness += 10
|
||||
last_psychicattack = world.time
|
||||
if(prob(25))
|
||||
H.audible_scream()
|
||||
if(1) //A knockdown, with some dizziness
|
||||
for(var/mob/living/carbon/human/H in victims)
|
||||
if(H.isUnconscious() || H.is_wearing_item(/obj/item/clothing/head/tinfoil) || (M_PSY_RESIST in H.mutations)) // Psy-attacks don't work if the target is unconsious, wearing a tin foil hat, or has genetic resistance
|
||||
continue
|
||||
to_chat(H, "<span class='userdanger'>You suddenly lose your sense of balance!</span>")
|
||||
H.emote("me", 1, "collapses!")
|
||||
H.Knockdown(4)
|
||||
H.confused += 6
|
||||
H.dizziness += 6
|
||||
last_psychicattack = world.time
|
||||
if(2) //Naptime
|
||||
for(var/mob/living/carbon/human/H in victims)
|
||||
if(H.isUnconscious() || H.is_wearing_item(/obj/item/clothing/head/tinfoil) || (M_PSY_RESIST in H.mutations)) // Psy-attacks don't work if the target is unconsious, wearing a tin foil hat, or has genetic resistance
|
||||
continue
|
||||
to_chat(H, "<span class='userdanger'>You feel exhausted beyond belief. You can't keep your eyes open...</span>")
|
||||
H.drowsyness += 6
|
||||
last_psychicattack = world.time
|
||||
spawn(2 SECONDS)
|
||||
H.sleeping += 5
|
||||
if(3) //Serious hallucinations and jittering
|
||||
for(var/mob/living/carbon/human/H in victims)
|
||||
if(H.isUnconscious() || H.is_wearing_item(/obj/item/clothing/head/tinfoil) || (M_PSY_RESIST in H.mutations)) // Psy-attacks don't work if the target is unconsious, wearing a tin foil hat, or has genetic resistance
|
||||
continue
|
||||
to_chat(H, "<span class='userdanger'>Your mind feels much less stable, and you feel a terrible dread.</span>")
|
||||
H.hallucination += 75
|
||||
H.Jitter(30)
|
||||
H.stuttering += 30
|
||||
last_psychicattack = world.time
|
||||
if(4) //Brief period of pacification
|
||||
for(var/mob/living/carbon/human/H in victims)
|
||||
if(H.isUnconscious() || H.is_wearing_item(/obj/item/clothing/head/tinfoil) || (M_PSY_RESIST in H.mutations)) // Psy-attacks don't work if the target is unconsious, wearing a tin foil hat, or has genetic resistance
|
||||
continue
|
||||
to_chat(H, "<span class='userdanger'>You feel strangely calm and passive. What's the point in fighting?</span>")
|
||||
H.reagents.add_reagent(CHILLWAX, 1)
|
||||
last_psychicattack = world.time
|
||||
|
||||
if(!last_psychicattack + psychicattack_cooldown < world.time) // If not done cooling down from the previous psychic attack, just shoot a laser beem
|
||||
// If not done cooling down from the previous psychic attack, just shoot a laser beem
|
||||
if(last_psychicattack + psychicattack_cooldown > world.time)
|
||||
..()
|
||||
return
|
||||
var/list/victims = list()
|
||||
for(var/mob/living/carbon/human/H in view(src, psychic_range))
|
||||
victims.Add(H)
|
||||
if(!victims.len)
|
||||
return
|
||||
var/shot_choice = rand(0,4)
|
||||
for(var/mob/living/carbon/human/H in victims)
|
||||
if(!can_mind_interact(H.mind))
|
||||
continue
|
||||
switch(shot_choice)
|
||||
if(0) //Brain damage, confusion, and dizziness
|
||||
to_chat(H, "<span class='userdanger'>An unbearable pain stabs into your mind!</span>")
|
||||
H.adjustBrainLoss(20)
|
||||
H.eye_blurry = max(H.eye_blurry, 10)
|
||||
H.confused += 10
|
||||
H.dizziness += 10
|
||||
if(prob(25))
|
||||
H.audible_scream()
|
||||
if(1) //A knockdown, with some dizziness
|
||||
to_chat(H, "<span class='userdanger'>You suddenly lose your sense of balance!</span>")
|
||||
H.emote("me", 1, "collapses!")
|
||||
H.Knockdown(4)
|
||||
H.confused += 6
|
||||
H.dizziness += 6
|
||||
if(2) //Naptime
|
||||
to_chat(H, "<span class='userdanger'>You feel exhausted beyond belief. You can't keep your eyes open...</span>")
|
||||
H.drowsyness += 6
|
||||
spawn(2 SECONDS)
|
||||
H.sleeping += 5
|
||||
if(3) //Serious hallucinations and jittering
|
||||
to_chat(H, "<span class='userdanger'>Your mind feels much less stable, and you feel a terrible dread.</span>")
|
||||
H.hallucination += 75
|
||||
H.Jitter(30)
|
||||
H.stuttering += 30
|
||||
if(4) //Brief period of pacification
|
||||
to_chat(H, "<span class='userdanger'>You feel strangely calm and passive. What's the point in fighting?</span>")
|
||||
H.reagents.add_reagent(CHILLWAX, 1)
|
||||
last_psychicattack = world.time
|
||||
|
||||
/mob/living/simple_animal/hostile/humanoid/grey/leader/bullet_act(var/obj/item/projectile/P) // Lasers have a 50% chance to reflect off the armor, which matches up if the player takes it and puts it on
|
||||
if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam) || istype(P, /obj/item/projectile/forcebolt) || istype(P, /obj/item/projectile/change))
|
||||
|
||||
@@ -626,9 +626,7 @@
|
||||
switch(spell)
|
||||
if(1) //Mass Hallucination
|
||||
for(var/mob/living/carbon/human/H in victims)
|
||||
if(H.is_wearing_any(list(/obj/item/clothing/head/tinfoil,/obj/item/clothing/head/helmet/stun), slot_head))
|
||||
continue
|
||||
if(M_PSY_RESIST in H.mutations)
|
||||
if(!can_mind_interact(H.mind))
|
||||
continue
|
||||
to_chat(H, "<span class = 'warning'>You feel [diceroll>15 ? "incredibly" : ""] disorientated.</span>")
|
||||
H.hallucination += rand(10,20)*diceroll
|
||||
|
||||
@@ -2177,7 +2177,7 @@ Use this proc preferably at the end of an equipment loadout
|
||||
/mob/proc/attempt_crawling(var/turf/target)
|
||||
return FALSE
|
||||
|
||||
/mob/proc/can_mind_interact(var/datum/mind/target_mind)
|
||||
/proc/can_mind_interact(var/datum/mind/target_mind)
|
||||
var/mob/living/target
|
||||
if(isliving(target_mind))
|
||||
target = target_mind
|
||||
@@ -2187,26 +2187,32 @@ Use this proc preferably at the end of an equipment loadout
|
||||
target = target_mind.current
|
||||
if (!istype(target))
|
||||
return null
|
||||
var/turf/target_turf = get_turf(target)
|
||||
var/turf/our_turf = get_turf(src)
|
||||
if(!target_turf)
|
||||
if(M_JAMSIGNALS in target.mutations)
|
||||
return null
|
||||
if (target.isDead())
|
||||
to_chat(src, "You cannot sense the target mind anymore, that's not good...")
|
||||
if(isalien(target))
|
||||
return null
|
||||
if(target_turf.z != our_turf.z) //Not on the same zlevel as us
|
||||
to_chat(src, "The target mind is too faint, they must be quite far from you...")
|
||||
if(target.is_wearing_item(/obj/item/clothing/mask/gas/voice))
|
||||
return null
|
||||
if(target.stat != CONSCIOUS)
|
||||
to_chat(src, "The target mind is too faint, but still close, they must be unconscious...")
|
||||
if(target.is_wearing_item(/obj/item/clothing/head/helmet/stun/))
|
||||
return null
|
||||
if(M_PSY_RESIST in target.mutations)
|
||||
to_chat(src, "The target mind is resisting!")
|
||||
if(target.is_wearing_item(/obj/item/clothing/gloves/ninja))
|
||||
return null
|
||||
if(target.is_wearing_any(list(/obj/item/clothing/head/helmet/space/martian,/obj/item/clothing/head/tinfoil,/obj/item/clothing/head/helmet/stun), slot_head))
|
||||
to_chat(src, "Interference is disrupting the connection with the target mind.")
|
||||
if(target.is_wearing_item(/obj/item/clothing/head/tinfoil))
|
||||
return null
|
||||
return target
|
||||
if(target.is_wearing_item(/obj/item/clothing/head/helmet/space/martian))
|
||||
return null
|
||||
if(target.is_holding_item(/obj/item/device/megaphone/madscientist))
|
||||
return null
|
||||
var/mob/living/carbon/human/H = target
|
||||
if(istype(H))
|
||||
if(H.wear_id && istype(H.wear_id.GetID(), /obj/item/weapon/card/id/syndicate))
|
||||
return null
|
||||
var/datum/role/changeling/C = target.mind.GetRole(CHANGELING)
|
||||
if(istype(C))
|
||||
if(locate(/datum/power/changeling/DigitalCamouflage) in C.current_powers)
|
||||
return null
|
||||
|
||||
return TRUE
|
||||
|
||||
/mob/proc/canMouseDrag()//used mostly to check if the mob can drag'and'drop stuff in/out of various other stuff, such as disposals, cryo tubes, etc.
|
||||
return TRUE
|
||||
|
||||
@@ -232,8 +232,6 @@
|
||||
|
||||
var/status_flags = CANSTUN|CANKNOCKDOWN|CANPARALYSE|CANPUSH //bitflags defining which status effects can be inflicted (replaces CANKNOCKDOWN, canstun, etc)
|
||||
|
||||
var/digitalcamo = 0 // Can they be tracked by the AI?
|
||||
|
||||
var/list/radar_blips = list() // list of screen objects, radar blips
|
||||
var/radar_open = 0 // nonzero is radar is open
|
||||
|
||||
|
||||
@@ -39,13 +39,13 @@ Targeted spells have two useful flags: INCLUDEUSER and SELECTABLE. These are exp
|
||||
return 0
|
||||
if(ismob(target) && mind_affecting)
|
||||
var/mob/M = target
|
||||
if (!user.can_mind_interact(M.mind))
|
||||
if (!can_mind_interact(M.mind))
|
||||
return 0
|
||||
return !compatible_mobs.len || is_type_in_list(target, compatible_mobs)
|
||||
|
||||
/spell/targeted/choose_targets(mob/user = usr)
|
||||
if(mind_affecting && tinfoil_check(user))
|
||||
to_chat(user, "<span class='warning'>Something is interfering with your ability to target minds.</span>")
|
||||
if(mind_affecting && !can_mind_interact(user.mind))
|
||||
to_chat(user, "<span class='warning'>Interference is disrupting the connection with the target.</span>")
|
||||
return
|
||||
var/list/targets = list()
|
||||
if(max_targets == 0) //unlimited
|
||||
@@ -96,7 +96,7 @@ Targeted spells have two useful flags: INCLUDEUSER and SELECTABLE. These are exp
|
||||
continue
|
||||
if(mind_affecting)
|
||||
if(iscarbon(user))
|
||||
if(!M.mind || !user.can_mind_interact(M.mind))
|
||||
if(!M.mind || !can_mind_interact(M.mind))
|
||||
continue
|
||||
possible_targets += M
|
||||
|
||||
@@ -185,12 +185,3 @@ Targeted spells have two useful flags: INCLUDEUSER and SELECTABLE. These are exp
|
||||
target.confused += amt_confused
|
||||
target.confused_intensity = CONFUSED_MAGIC
|
||||
target.stuttering += amt_stuttering
|
||||
|
||||
/spell/targeted/proc/tinfoil_check(mob/living/carbon/human/user)
|
||||
if(!istype(user))
|
||||
return 0
|
||||
|
||||
if(user.is_wearing_any(list(/obj/item/clothing/head/tinfoil,/obj/item/clothing/head/helmet/stun), slot_head))
|
||||
return 1
|
||||
|
||||
return 0
|
||||
|
||||
@@ -490,7 +490,7 @@
|
||||
"NG" = (/obj/structure/bed/roller/surgery,/turf/simulated/floor{dir = 5; icon_state = "whitegreen"; tag = "icon-whitegreen (NORTHEAST)"},/area/vault/mothership_lab/research)
|
||||
"NN" = (/obj/effect/decal/warning_stripes{icon_state = "unloading"},/obj/effect/decal/cleanable/blood/gibs/robot{icon_state = "gib3"},/turf/simulated/floor/plating{icon_state = "platingdmg1"; tag = ""},/area/vault/mothership_lab/research)
|
||||
"NW" = (/obj/machinery/light/he{dir = 1},/turf/simulated/floor{icon_state = "showroomfloor"},/area/vault/mothership_lab/research)
|
||||
"Oe" = (/obj/item/weapon/storage/lockbox/diskettebox/open/cloning{pixel_x = 2; pixel_y = 2},/obj/structure/table/reinforced,/obj/item/weapon/dnainjector/nofail/elvis,/obj/item/weapon/dnainjector/nofail/empath,/obj/item/weapon/dnainjector/nofail/insulation,/obj/item/weapon/dnainjector/nofail/psychic_resist,/obj/item/weapon/dnainjector/nofail/telepathy,/obj/item/weapon/dnainjector/nofail/telepathy,/obj/item/weapon/dnainjector/nofail/strong,/obj/item/weapon/dnainjector/nofail/remoteview,/obj/item/weapon/dnainjector/nofail/regenerate,/obj/item/weapon/dnainjector/nofail/sweedish,/obj/machinery/camera{id_tag = "labcameras"; name = "Genetics Research North"; network = list("MOTHERSHIPLAB")},/obj/item/weapon/dnainjector/nofail/farsightmut,/obj/item/weapon/dnainjector/nofail/farsightmut,/obj/item/weapon/dnainjector/nofail/insulation,/turf/simulated/floor{icon_state = "dark vault full"},/area/vault/mothership_lab/research)
|
||||
"Oe" = (/obj/item/weapon/storage/lockbox/diskettebox/open/cloning{pixel_x = 2; pixel_y = 2},/obj/structure/table/reinforced,/obj/item/weapon/dnainjector/nofail/elvis,/obj/item/weapon/dnainjector/nofail/empath,/obj/item/weapon/dnainjector/nofail/insulation,/obj/item/weapon/dnainjector/nofail/interference,/obj/item/weapon/dnainjector/nofail/telepathy,/obj/item/weapon/dnainjector/nofail/telepathy,/obj/item/weapon/dnainjector/nofail/strong,/obj/item/weapon/dnainjector/nofail/remoteview,/obj/item/weapon/dnainjector/nofail/regenerate,/obj/item/weapon/dnainjector/nofail/sweedish,/obj/machinery/camera{id_tag = "labcameras"; name = "Genetics Research North"; network = list("MOTHERSHIPLAB")},/obj/item/weapon/dnainjector/nofail/farsightmut,/obj/item/weapon/dnainjector/nofail/farsightmut,/obj/item/weapon/dnainjector/nofail/insulation,/turf/simulated/floor{icon_state = "dark vault full"},/area/vault/mothership_lab/research)
|
||||
"Of" = (/obj/structure/flora/pottedplant/random{icon_state = "plant-10"; tag = "icon-plant-10"},/turf/simulated/floor{dir = 1; icon_state = "darkred"},/area/vault/mothership_lab/research)
|
||||
"Oi" = (/obj/structure/bed/chair/shuttle/gamer{dir = 4},/mob/living/simple_animal/hostile/humanoid/grey/researcher/surgeon{dir = 4},/turf/simulated/floor{icon_state = "dark vault full"},/area/vault/mothership_lab/research)
|
||||
"Oj" = (/obj/structure/bed,/turf/simulated/floor{dir = 6; icon_state = "darkred"},/area/vault/mothership_lab/research)
|
||||
|
||||
Reference in New Issue
Block a user