diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 742fe3d5d9..f4ad059a42 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -128,7 +128,6 @@ //dont create artifact machinery in animal or plant digsites, or if we already have one if(!artifact_find && digsite != 1 && digsite != 2 && prob(ARTIFACT_SPAWN_CHANCE)) artifact_find = new() - world << artifact_find.artifact_find_type if(!src.geological_data) src.geological_data = new/datum/geosample(src) diff --git a/code/modules/research/xenoarchaeology/artifact/artifact.dm b/code/modules/research/xenoarchaeology/artifact/artifact.dm index 71f6f7965e..60f6fc7fb9 100644 --- a/code/modules/research/xenoarchaeology/artifact/artifact.dm +++ b/code/modules/research/xenoarchaeology/artifact/artifact.dm @@ -22,7 +22,7 @@ 100;/obj/machinery/giga_drill,\ 100;/obj/mecha/working/hoverpod,\ 100;/obj/machinery/replicator,\ - 200;/obj/structure/crystal,\ + 150;/obj/structure/crystal,\ 500;/obj/machinery/artifact) //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/code/modules/research/xenoarchaeology/unknown/effects/unknown_effect_cellcharge.dm b/code/modules/research/xenoarchaeology/unknown/effects/unknown_effect_cellcharge.dm index 45f895e53f..b6f48daf1b 100644 --- a/code/modules/research/xenoarchaeology/unknown/effects/unknown_effect_cellcharge.dm +++ b/code/modules/research/xenoarchaeology/unknown/effects/unknown_effect_cellcharge.dm @@ -8,7 +8,7 @@ if(istype(user, /mob/living/silicon/robot)) var/mob/living/silicon/robot/R = user for (var/obj/item/weapon/cell/D in R.contents) - D.charge += 250 + D.charge += rand() * 100 + 50 R << "\blue SYSTEM ALERT: Large energy boost detected!" return 1 @@ -16,11 +16,12 @@ if(holder) for (var/obj/machinery/power/apc/C in range(200, holder)) for (var/obj/item/weapon/cell/B in C.contents) - B.charge += 100 - for (var/obj/machinery/power/smes/S in range (src.effectrange,src)) S.charge += 250 + B.charge += 25 + for (var/obj/machinery/power/smes/S in range (src.effectrange,src)) + S.charge += 25 for (var/mob/living/silicon/robot/M in world) for (var/obj/item/weapon/cell/D in M.contents) - D.charge += 100 + D.charge += 25 M << "\blue SYSTEM ALERT: Energy boost detected!" return 1 @@ -28,10 +29,11 @@ if(holder) for (var/obj/machinery/power/apc/C in range(200, holder)) for (var/obj/item/weapon/cell/B in C.contents) - B.charge += 100 - for (var/obj/machinery/power/smes/S in range (src.effectrange,src)) S.charge += 250 + B.charge += rand() * 100 + for (var/obj/machinery/power/smes/S in range (src.effectrange,src)) + S.charge += 250 for (var/mob/living/silicon/robot/M in world) for (var/obj/item/weapon/cell/D in M.contents) - D.charge += 100 + D.charge += rand() * 100 M << "\blue SYSTEM ALERT: Energy boost detected!" return 1 diff --git a/code/modules/research/xenoarchaeology/unknown/effects/unknown_effect_celldrain.dm b/code/modules/research/xenoarchaeology/unknown/effects/unknown_effect_celldrain.dm index 677d5892c5..954cbe46a6 100644 --- a/code/modules/research/xenoarchaeology/unknown/effects/unknown_effect_celldrain.dm +++ b/code/modules/research/xenoarchaeology/unknown/effects/unknown_effect_celldrain.dm @@ -8,7 +8,7 @@ if(istype(user, /mob/living/silicon/robot)) var/mob/living/silicon/robot/R = user for (var/obj/item/weapon/cell/D in R.contents) - D.charge = max(D.charge-250, 0) + D.charge = max(D.charge - rand() * 100, 0) R << "\blue SYSTEM ALERT: Energy drain detected!" return 1 @@ -18,12 +18,12 @@ if(holder) for (var/obj/machinery/power/apc/C in range(200, holder)) for (var/obj/item/weapon/cell/B in C.contents) - B.charge = max(B.charge-250,0) + B.charge = max(B.charge - 50,0) for (var/obj/machinery/power/smes/S in range (src.effectrange,src)) - S.charge = max(S.charge-250,0) + S.charge = max(S.charge - 100,0) for (var/mob/living/silicon/robot/M in world) for (var/obj/item/weapon/cell/D in M.contents) - D.charge = max(D.charge-250,0) + D.charge = max(D.charge - 50,0) M << "\red SYSTEM ALERT: Energy drain detected!" return 1 @@ -31,11 +31,11 @@ if(holder) for (var/obj/machinery/power/apc/C in range(200, holder)) for (var/obj/item/weapon/cell/B in C.contents) - B.charge = max(B.charge-250,0) + B.charge = max(B.charge - rand() * 150,0) for (var/obj/machinery/power/smes/S in range (src.effectrange,src)) - S.charge = max(S.charge-250,0) + S.charge = max(S.charge - 250,0) for (var/mob/living/silicon/robot/M in world) for (var/obj/item/weapon/cell/D in M.contents) - D.charge = max(D.charge-250,0) + D.charge = max(D.charge - rand() * 150,0) M << "\red SYSTEM ALERT: Energy drain detected!" return 1 diff --git a/code/modules/research/xenoarchaeology/unknown/effects/unknown_effect_dnaswitch.dm b/code/modules/research/xenoarchaeology/unknown/effects/unknown_effect_dnaswitch.dm index 4c5329ca92..9c66974e9c 100644 --- a/code/modules/research/xenoarchaeology/unknown/effects/unknown_effect_dnaswitch.dm +++ b/code/modules/research/xenoarchaeology/unknown/effects/unknown_effect_dnaswitch.dm @@ -11,8 +11,9 @@ else severity = rand(5,95) -/datum/artifact_effect/dnaswitch/DoEffectTouch(var/mob/holder) - if(ishuman(holder) && !istype(holder:wear_suit,/obj/item/clothing/suit/bio_suit/anomaly) && !istype(holder:head,/obj/item/clothing/head/bio_hood/anomaly)) +/datum/artifact_effect/dnaswitch/DoEffectTouch(var/mob/toucher) + var/weakness = GetAnomalySusceptibility(toucher) + if(ishuman(toucher) && prob(weakness * 100)) holder << pick("\green You feel a little different.",\ "\green You feel very strange.",\ "\green Your stomach churns.",\ @@ -21,46 +22,44 @@ "\green You feel a tingling sensation in your chest.",\ "\green Your entire body vibrates.") if(prob(75)) - scramble(1, holder, severity) + scramble(1, holder, weakness * severity) else - scramble(0, holder, severity) + scramble(0, holder, weakness * severity) return 1 /datum/artifact_effect/dnaswitch/DoEffectAura() - for(var/mob/living/carbon/human/H in range(src.effectrange,holder)) - if(istype(H:wear_suit,/obj/item/clothing/suit/bio_suit/anomaly) && istype(H:head,/obj/item/clothing/head/bio_hood/anomaly)) - continue - - if(prob(30)) - H << pick("\green You feel a little different.",\ - "\green You feel very strange.",\ - "\green Your stomach churns.",\ - "\green Your skin feels loose.",\ - "\green You feel a stabbing pain in your head.",\ - "\green You feel a tingling sensation in your chest.",\ - "\green Your entire body vibrates.") - if(prob(25)) - scramble(1, H, severity) - else - scramble(0, H, severity) - return 1 + if(holder) + for(var/mob/living/carbon/human/H in range(src.effectrange,holder)) + var/weakness = GetAnomalySusceptibility(H) + if(prob(weakness * 100)) + if(prob(30)) + H << pick("\green You feel a little different.",\ + "\green You feel very strange.",\ + "\green Your stomach churns.",\ + "\green Your skin feels loose.",\ + "\green You feel a stabbing pain in your head.",\ + "\green You feel a tingling sensation in your chest.",\ + "\green Your entire body vibrates.") + if(prob(25)) + scramble(1, H, weakness * severity) + else + scramble(0, H, weakness * severity) /datum/artifact_effect/dnaswitch/DoEffectPulse() - for(var/mob/living/carbon/human/H in range(200, holder)) - if(istype(H:wear_suit,/obj/item/clothing/suit/bio_suit/anomaly) && istype(H:head,/obj/item/clothing/head/bio_hood/anomaly)) - continue - - if(prob(75)) - H << pick("\green You feel a little different.",\ - "\green You feel very strange.",\ - "\green Your stomach churns.",\ - "\green Your skin feels loose.",\ - "\green You feel a stabbing pain in your head.",\ - "\green You feel a tingling sensation in your chest.",\ - "\green Your entire body vibrates.") - if(prob(25)) - if(prob(50)) - scramble(1, H, severity) - else - scramble(0, H, severity) - return 1 + if(holder) + for(var/mob/living/carbon/human/H in range(200, holder)) + var/weakness = GetAnomalySusceptibility(H) + if(prob(weakness * 100)) + if(prob(75)) + H << pick("\green You feel a little different.",\ + "\green You feel very strange.",\ + "\green Your stomach churns.",\ + "\green Your skin feels loose.",\ + "\green You feel a stabbing pain in your head.",\ + "\green You feel a tingling sensation in your chest.",\ + "\green Your entire body vibrates.") + if(prob(25)) + if(prob(50)) + scramble(1, H, weakness * severity) + else + scramble(0, H, weakness * severity) diff --git a/code/modules/research/xenoarchaeology/unknown/effects/unknown_effect_heal.dm b/code/modules/research/xenoarchaeology/unknown/effects/unknown_effect_heal.dm index ee01aa182b..6d4aba5f74 100644 --- a/code/modules/research/xenoarchaeology/unknown/effects/unknown_effect_heal.dm +++ b/code/modules/research/xenoarchaeology/unknown/effects/unknown_effect_heal.dm @@ -2,66 +2,61 @@ /datum/artifact_effect/heal effecttype = "heal" -/datum/artifact_effect/heal/DoEffectTouch(var/mob/user) - //caeltodo - if(user) - if (istype(user, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = holder - H << "\blue You feel a soothing energy invigorate you." +/datum/artifact_effect/heal/DoEffectTouch(var/mob/toucher) + //todo: check over this properly + if(toucher && iscarbon(toucher)) + var/weakness = GetAnomalySusceptibility(toucher) + if(prob(weakness * 100)) + var/mob/living/carbon/C = toucher + C << "\blue You feel a soothing energy invigorate you." - for(var/datum/organ/external/affecting in H.organs) - if(affecting && istype(affecting)) - affecting.heal_damage(25, 25) - //H:heal_organ_damage(25, 25) + if(ishuman(toucher)) + var/mob/living/carbon/human/H = holder + for(var/datum/organ/external/affecting in H.organs) + if(affecting && istype(affecting)) + affecting.heal_damage(25 * weakness, 25 * weakness) + //H:heal_organ_damage(25, 25) + H.vessel.add_reagent("blood",5) + H.nutrition += 50 * weakness + H.adjustBrainLoss(-25 * weakness) + H.radiation -= min(H.radiation, 25 * weakness) + H.bodytemperature = initial(H.bodytemperature) + spawn(1) + H.fixblood() // - H.adjustOxyLoss(-25) - H.adjustToxLoss(-25) - H.adjustBruteLoss(-25) - H.adjustFireLoss(-25) - H.adjustBrainLoss(-25) - H.radiation -= min(H.radiation, 25) - H.nutrition += 50 - H.bodytemperature = initial(H.bodytemperature) + C.adjustOxyLoss(-25 * weakness) + C.adjustToxLoss(-25 * weakness) + C.adjustBruteLoss(-25 * weakness) + C.adjustFireLoss(-25 * weakness) // - H.vessel.add_reagent("blood",50) - spawn(1) - H.fixblood() - H.regenerate_icons() - return 1 - - else if (istype(user, /mob/living/carbon/monkey/)) - var/mob/living/carbon/monkey/M = holder - M << "\blue You feel a soothing energy invigorate you." - M.adjustOxyLoss(-25) - M.adjustToxLoss(-25) - M.adjustBruteLoss(-25) - M.adjustFireLoss(-25) - M.adjustBrainLoss(-25) + C.regenerate_icons() return 1 /datum/artifact_effect/heal/DoEffectAura() - //caeltodo - for (var/mob/living/carbon/M in range(src.effectrange,holder)) - if(ishuman(M) && istype(M:wear_suit,/obj/item/clothing/suit/bio_suit/anomaly) && istype(M:head,/obj/item/clothing/head/bio_hood/anomaly)) - continue - if(prob(10)) M << "\blue You feel a soothing energy radiating from something nearby." - M.adjustBruteLoss(-1) - M.adjustFireLoss(-1) - M.adjustToxLoss(-1) - M.adjustOxyLoss(-1) - M.adjustBrainLoss(-1) - M.updatehealth() - return 1 + //todo: check over this properly + if(holder) + for (var/mob/living/carbon/C in range(src.effectrange,holder)) + var/weakness = GetAnomalySusceptibility(C) + if(prob(weakness * 100)) + if(prob(10)) + C << "\blue You feel a soothing energy radiating from something nearby." + C.adjustBruteLoss(-1 * weakness) + C.adjustFireLoss(-1 * weakness) + C.adjustToxLoss(-1 * weakness) + C.adjustOxyLoss(-1 * weakness) + C.adjustBrainLoss(-1 * weakness) + C.updatehealth() /datum/artifact_effect/heal/DoEffectPulse() - for (var/mob/living/carbon/M in range(src.effectrange,holder)) - if(ishuman(M) && istype(M:wear_suit,/obj/item/clothing/suit/bio_suit/anomaly) && istype(M:head,/obj/item/clothing/head/bio_hood/anomaly)) - continue - M << "\blue A wave of energy invigorates you." - M.adjustBruteLoss(-5) - M.adjustFireLoss(-5) - M.adjustToxLoss(-5) - M.adjustOxyLoss(-5) - M.adjustBrainLoss(-5) - M.updatehealth() - return 1 + //todo: check over this properly + if(holder) + for (var/mob/living/carbon/C in range(src.effectrange,holder)) + var/weakness = GetAnomalySusceptibility(C) + if(prob(weakness * 100)) + C << "\blue A wave of energy invigorates you." + C.adjustBruteLoss(-5 * weakness) + C.adjustFireLoss(-5 * weakness) + C.adjustToxLoss(-5 * weakness) + C.adjustOxyLoss(-5 * weakness) + C.adjustBrainLoss(-5 * weakness) + C.updatehealth() diff --git a/code/modules/research/xenoarchaeology/unknown/effects/unknown_effect_hurt.dm b/code/modules/research/xenoarchaeology/unknown/effects/unknown_effect_hurt.dm index 29c1ffc18e..a9ae4d89ee 100644 --- a/code/modules/research/xenoarchaeology/unknown/effects/unknown_effect_hurt.dm +++ b/code/modules/research/xenoarchaeology/unknown/effects/unknown_effect_hurt.dm @@ -2,45 +2,46 @@ /datum/artifact_effect/hurt effecttype = "hurt" -/datum/artifact_effect/hurt/DoEffectTouch(var/mob/holder) +/datum/artifact_effect/hurt/DoEffectTouch(var/mob/toucher) //caeltodo if(holder) - if (istype(holder, /mob/living/carbon/)) - var/mob/living/carbon/C = holder + var/weakness = GetAnomalySusceptibility(toucher) + if(iscarbon(toucher) && prob(weakness * 100)) + var/mob/living/carbon/C = toucher C << "\red A painful discharge of energy strikes you!" - C.adjustOxyLoss(rand(5,25)) - C.adjustToxLoss(rand(5,25)) - C.adjustBruteLoss(rand(5,25)) - C.adjustFireLoss(rand(5,25)) - C.adjustBrainLoss(rand(5,25)) - C.radiation += 25 - C.nutrition -= min(50, C.nutrition) - C.make_dizzy(6) - C.weakened += 6 - return 1 + C.adjustOxyLoss(rand(5,25) * weakness) + C.adjustToxLoss(rand(5,25) * weakness) + C.adjustBruteLoss(rand(5,25) * weakness) + C.adjustFireLoss(rand(5,25) * weakness) + C.adjustBrainLoss(rand(5,25) * weakness) + C.radiation += 25 * weakness + C.nutrition -= min(50 * weakness, C.nutrition) + C.make_dizzy(6 * weakness) + C.weakened += 6 * weakness /datum/artifact_effect/hurt/DoEffectAura() if(holder) - for (var/mob/living/carbon/M in range(src.effectrange,holder)) - if(ishuman(M) && istype(M:wear_suit,/obj/item/clothing/suit/bio_suit/anomaly) && istype(M:head,/obj/item/clothing/head/bio_hood/anomaly)) - continue - if(prob(10)) M << "\red You feel a painful force radiating from something nearby." - M.adjustBruteLoss(1) - M.adjustFireLoss(1) - M.adjustToxLoss(1) - M.adjustOxyLoss(1) - M.adjustBrainLoss(1) - M.updatehealth() - return 1 + for (var/mob/living/carbon/C in range(src.effectrange,holder)) + var/weakness = GetAnomalySusceptibility(C) + if(prob(weakness * 100)) + if(prob(10)) + C << "\red You feel a painful force radiating from something nearby." + C.adjustBruteLoss(1 * weakness) + C.adjustFireLoss(1 * weakness) + C.adjustToxLoss(1 * weakness) + C.adjustOxyLoss(1 * weakness) + C.adjustBrainLoss(1 * weakness) + C.updatehealth() /datum/artifact_effect/hurt/DoEffectPulse() if(holder) - for (var/mob/living/carbon/human/M in range(effectrange, holder)) - M << "\red A wave of painful energy strikes you!" - M.adjustBruteLoss(3) - M.adjustFireLoss(3) - M.adjustToxLoss(3) - M.adjustOxyLoss(3) - M.adjustBrainLoss(3) - M.updatehealth() - return 1 + for (var/mob/living/carbon/C in range(effectrange, holder)) + var/weakness = GetAnomalySusceptibility(C) + if(prob(weakness * 100)) + C << "\red A wave of painful energy strikes you!" + C.adjustBruteLoss(3 * weakness) + C.adjustFireLoss(3 * weakness) + C.adjustToxLoss(3 * weakness) + C.adjustOxyLoss(3 * weakness) + C.adjustBrainLoss(3 * weakness) + C.updatehealth() diff --git a/code/modules/research/xenoarchaeology/unknown/effects/unknown_effect_sleepy.dm b/code/modules/research/xenoarchaeology/unknown/effects/unknown_effect_sleepy.dm index 6648ffd19c..911efd0413 100644 --- a/code/modules/research/xenoarchaeology/unknown/effects/unknown_effect_sleepy.dm +++ b/code/modules/research/xenoarchaeology/unknown/effects/unknown_effect_sleepy.dm @@ -3,34 +3,40 @@ /datum/artifact_effect/sleepy effecttype = "sleepy" -/datum/artifact_effect/sleepy/DoEffectTouch(var/mob/user) - if(user) - if(istype(user,/mob/living/carbon)) - var/mob/living/carbon/C = user - C << pick("\blue You feel like taking a nap.","\blue You feel a yawn coming on.","\blue You feel a little tired.") - C.drowsyness = min(user.drowsyness + rand(5,25), 50) - C.eye_blurry = min(user.eye_blurry + rand(1,3), 50) +/datum/artifact_effect/sleepy/DoEffectTouch(var/mob/toucher) + if(toucher) + var/weakness = GetAnomalySusceptibility(toucher) + if(ishuman(toucher) && prob(weakness * 100)) + var/mob/living/carbon/human/H = toucher + H << pick("\blue You feel like taking a nap.","\blue You feel a yawn coming on.","\blue You feel a little tired.") + H.drowsyness = min(H.drowsyness + rand(5,25) * weakness, 50 * weakness) + H.eye_blurry = min(H.eye_blurry + rand(1,3) * weakness, 50 * weakness) return 1 - else if(istype(user,/mob/living/silicon/robot)) - user << "\red SYSTEM ALERT: CPU cycles slowing down." + else if(isrobot(toucher)) + toucher << "\red SYSTEM ALERT: CPU cycles slowing down." return 1 /datum/artifact_effect/sleepy/DoEffectAura() if(holder) - for (var/mob/living/carbon/M in range(src.effectrange,holder)) - if(prob(10)) - M << pick("\blue You feel like taking a nap.","\blue You feel a yawn coming on.","\blue You feel a little tired.") - M.drowsyness = min(M.drowsyness + 1, 25) - M.eye_blurry = min(M.eye_blurry + 1, 25) - for (var/mob/living/silicon/robot/M in range(src.effectrange,holder)) - M << "\red SYSTEM ALERT: CPU cycles slowing down." + for (var/mob/living/carbon/human/H in range(src.effectrange,holder)) + var/weakness = GetAnomalySusceptibility(H) + if(prob(weakness * 100)) + if(prob(10)) + H << pick("\blue You feel like taking a nap.","\blue You feel a yawn coming on.","\blue You feel a little tired.") + H.drowsyness = min(H.drowsyness + 1 * weakness, 25 * weakness) + H.eye_blurry = min(H.eye_blurry + 1 * weakness, 25 * weakness) + for (var/mob/living/silicon/robot/R in range(src.effectrange,holder)) + R << "\red SYSTEM ALERT: CPU cycles slowing down." return 1 /datum/artifact_effect/sleepy/DoEffectPulse() if(holder) - for(var/mob/living/H in range(src.effectrange, holder)) - H.drowsyness = min(H.drowsyness + rand(5,15), 50) - H.eye_blurry = min(H.eye_blurry + rand(5,15), 50) - for (var/mob/living/silicon/robot/M in range(src.effectrange,holder)) - M << "\red SYSTEM ALERT: CPU cycles slowing down." + for(var/mob/living/carbon/human/H in range(src.effectrange, holder)) + var/weakness = GetAnomalySusceptibility(H) + if(prob(weakness * 100)) + H << pick("\blue You feel like taking a nap.","\blue You feel a yawn coming on.","\blue You feel a little tired.") + H.drowsyness = min(H.drowsyness + rand(5,15) * weakness, 50 * weakness) + H.eye_blurry = min(H.eye_blurry + rand(5,15) * weakness, 50 * weakness) + for (var/mob/living/silicon/robot/R in range(src.effectrange,holder)) + R << "\red SYSTEM ALERT: CPU cycles slowing down." return 1 diff --git a/code/modules/research/xenoarchaeology/unknown/effects/unknown_effect_stun.dm b/code/modules/research/xenoarchaeology/unknown/effects/unknown_effect_stun.dm index 47506bb0f2..4e3b237491 100644 --- a/code/modules/research/xenoarchaeology/unknown/effects/unknown_effect_stun.dm +++ b/code/modules/research/xenoarchaeology/unknown/effects/unknown_effect_stun.dm @@ -2,37 +2,36 @@ /datum/artifact_effect/stun effecttype = "stun" -/datum/artifact_effect/stun/DoEffectTouch(var/mob/user) - if(user) - if (istype(user, /mob/living/carbon/)) - user << "\red A powerful force overwhelms your consciousness." - user.weakened += 45 - user.stuttering += 45 - user.stunned += rand(1,10) - return 1 +/datum/artifact_effect/stun/DoEffectTouch(var/mob/toucher) + if(toucher && iscarbon(toucher)) + var/mob/living/carbon/C = toucher + var/weakness = GetAnomalySusceptibility(C) + if(prob(weakness * 100)) + C << "\red A powerful force overwhelms your consciousness." + C.weakened += 45 * weakness + C.stuttering += 45 * weakness + C.stunned += rand(1,10) * weakness /datum/artifact_effect/stun/DoEffectAura() if(holder) - for (var/mob/living/carbon/M in range(src.effectrange,holder)) - if(ishuman(M) && istype(M:wear_suit,/obj/item/clothing/suit/bio_suit/anomaly) && istype(M:head,/obj/item/clothing/head/bio_hood/anomaly)) - continue - if(prob(10)) M << "\red You feel numb." - if(prob(20)) - M << "\red Your body goes numb for a moment." - M.weakened += 2 - M.stuttering += 2 + for (var/mob/living/carbon/C in range(src.effectrange,holder)) + var/weakness = GetAnomalySusceptibility(C) + if(prob(10 * weakness)) + C << "\red Your body goes numb for a moment." + C.weakened += 2 + C.stuttering += 2 if(prob(10)) - M.stunned += 1 - return 1 + C.stunned += 1 + else if(prob(10)) + C << "\red You feel numb." /datum/artifact_effect/stun/DoEffectPulse() if(holder) - for (var/mob/living/carbon/M in range(src.effectrange,holder)) - if(ishuman(M) && istype(M:wear_suit,/obj/item/clothing/suit/bio_suit/anomaly) && istype(M:head,/obj/item/clothing/head/bio_hood/anomaly)) - continue - M << "\red A wave of energy overwhelms your senses!" - M.weakened += 4 - M.stuttering += 4 - if(prob(10)) - M.stunned += 1 - return 1 + for (var/mob/living/carbon/C in range(src.effectrange,holder)) + var/weakness = GetAnomalySusceptibility(C) + if(prob(100 * weakness)) + C << "\red A wave of energy overwhelms your senses!" + C.weakened += 4 * weakness + C.stuttering += 4 * weakness + if(prob(10)) + C.stunned += 1 * weakness diff --git a/code/modules/research/xenoarchaeology/unknown/effects/unknown_effect_teleport.dm b/code/modules/research/xenoarchaeology/unknown/effects/unknown_effect_teleport.dm index b99d7f9ab5..166fcbfd2a 100644 --- a/code/modules/research/xenoarchaeology/unknown/effects/unknown_effect_teleport.dm +++ b/code/modules/research/xenoarchaeology/unknown/effects/unknown_effect_teleport.dm @@ -3,64 +3,62 @@ effecttype = "teleport" /datum/artifact_effect/teleport/DoEffectTouch(var/mob/user) - var/list/randomturfs = new/list() - for(var/turf/simulated/floor/T in orange(user, 50)) - randomturfs.Add(T) - if(randomturfs.len > 0) - user << "\red You are suddenly zapped away elsewhere!" - if (user.buckled) - user.buckled.unbuckle() + var/weakness = GetAnomalySusceptibility(user) + if(prob(100 * weakness)) + var/list/randomturfs = new/list() + for(var/turf/simulated/floor/T in orange(user, 50)) + randomturfs.Add(T) + if(randomturfs.len > 0) + user << "\red You are suddenly zapped away elsewhere!" + if (user.buckled) + user.buckled.unbuckle() - var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread() - sparks.set_up(3, 0, get_turf(user)) - sparks.start() - user.loc = pick(randomturfs) - sparks = new /datum/effect/effect/system/spark_spread() - sparks.set_up(3, 0, get_turf(user)) - sparks.start() - - return 1 + var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread() + sparks.set_up(3, 0, get_turf(user)) + sparks.start() + user.loc = pick(randomturfs) + sparks = new /datum/effect/effect/system/spark_spread() + sparks.set_up(3, 0, get_turf(user)) + sparks.start() /datum/artifact_effect/teleport/DoEffectAura() if(holder) for (var/mob/living/M in range(src.effectrange,holder)) - if(ishuman(M) && istype(M:wear_suit,/obj/item/clothing/suit/bio_suit/anomaly) && istype(M:head,/obj/item/clothing/head/bio_hood/anomaly)) - continue - var/list/randomturfs = new/list() - for(var/turf/simulated/floor/T in orange(M, 30)) - randomturfs.Add(T) - if(randomturfs.len > 0) - M << "\red You are displaced by a strange force!" - if(M.buckled) - M.buckled.unbuckle() + var/weakness = GetAnomalySusceptibility(M) + if(prob(100 * weakness)) + var/list/randomturfs = new/list() + for(var/turf/simulated/floor/T in orange(M, 30)) + randomturfs.Add(T) + if(randomturfs.len > 0) + M << "\red You are displaced by a strange force!" + if(M.buckled) + M.buckled.unbuckle() - var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread() - sparks.set_up(3, 0, get_turf(M)) - sparks.start() - M.loc = pick(randomturfs) - sparks = new /datum/effect/effect/system/spark_spread() - sparks.set_up(3, 0, get_turf(M)) - sparks.start() - return 1 + var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread() + sparks.set_up(3, 0, get_turf(M)) + sparks.start() + M.loc = pick(randomturfs) + sparks = new /datum/effect/effect/system/spark_spread() + sparks.set_up(3, 0, get_turf(M)) + sparks.start() /datum/artifact_effect/teleport/DoEffectPulse() if(holder) for (var/mob/living/M in range(src.effectrange, holder)) - if(ishuman(M) && istype(M:wear_suit,/obj/item/clothing/suit/bio_suit/anomaly) && istype(M:head,/obj/item/clothing/head/bio_hood/anomaly)) - continue - var/list/randomturfs = new/list() - for(var/turf/simulated/floor/T in orange(M, 15)) - randomturfs.Add(T) - if(randomturfs.len > 0) - M << "\red You are displaced by a strange force!" + var/weakness = GetAnomalySusceptibility(M) + if(prob(100 * weakness)) + var/list/randomturfs = new/list() + for(var/turf/simulated/floor/T in orange(M, 15)) + randomturfs.Add(T) + if(randomturfs.len > 0) + M << "\red You are displaced by a strange force!" - var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread() - sparks.set_up(3, 0, get_turf(M)) - sparks.start() - if(M.buckled) - M.buckled.unbuckle() - M.loc = pick(randomturfs) - sparks = new /datum/effect/effect/system/spark_spread() - sparks.set_up(3, 0, get_turf(M)) - sparks.start() - return 1 + var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread() + sparks.set_up(3, 0, get_turf(M)) + sparks.start() + if(M.buckled) + M.buckled.unbuckle() + M.loc = pick(randomturfs) + sparks = new /datum/effect/effect/system/spark_spread() + sparks.set_up(3, 0, get_turf(M)) + sparks.start() diff --git a/code/modules/research/xenoarchaeology/unknown/unknown.dm b/code/modules/research/xenoarchaeology/unknown/unknown.dm index 1313203a94..52f7e2c772 100644 --- a/code/modules/research/xenoarchaeology/unknown/unknown.dm +++ b/code/modules/research/xenoarchaeology/unknown/unknown.dm @@ -222,7 +222,7 @@ var/list/valid_secondary_effect_types = list(\ if (get_dist(user, src) > 1) user << "\red You can't reach [src] from here." return - if(ishuman(user) && istype(user:gloves,/obj/item/clothing/gloves)) + if(ishuman(user) && user:gloves) return ..() src.add_fingerprint(user) @@ -231,7 +231,7 @@ var/list/valid_secondary_effect_types = list(\ user << "You touch [src]." my_effect.ToggleActivate() else - user << "You touch [src], [pick("and nothing of note happens","but nothing happens","and nothing interesting happens","you notice nothing different","nothing seems to have happened")]." + user << "You touch [src], [pick("but nothing of note happens","but nothing happens","but nothing interesting happens","but you notice nothing different","but nothing seems to have happened")]." if(prob(25) && secondary_effect && secondary_effect.trigger == my_effect.trigger) secondary_effect.ToggleActivate(0) diff --git a/code/modules/research/xenoarchaeology/unknown/unknown_effect.dm b/code/modules/research/xenoarchaeology/unknown/unknown_effect.dm index a89ef63d0b..b6d0fd6190 100644 --- a/code/modules/research/xenoarchaeology/unknown/unknown_effect.dm +++ b/code/modules/research/xenoarchaeology/unknown/unknown_effect.dm @@ -66,3 +66,30 @@ else if(effect == EFFECT_PULSE && chargelevel >= chargelevelmax) chargelevel = 0 DoEffectPulse() + +//returns 0..1, with 1 being no protection and 0 being fully protected +proc/GetAnomalySusceptibility(var/mob/living/carbon/human/H) + if(!H || !istype(H)) + return 1 + + var/protected = 0 + + //anomaly suits give best protection, but excavation suits are almost as good + if(istype(H.wear_suit,/obj/item/clothing/suit/bio_suit/anomaly)) + protected += 0.6 + else if(istype(H.wear_suit,/obj/item/clothing/suit/space/anomaly)) + protected += 0.5 + + if(istype(H.head,/obj/item/clothing/head/bio_hood/anomaly)) + protected += 0.3 + else if(istype(H.head,/obj/item/clothing/head/helmet/space/anomaly)) + protected += 0.2 + + //latex gloves and science goggles also give a bit of bonus protection + if(istype(H.gloves,/obj/item/clothing/gloves/latex)) + protected += 0.1 + + if(istype(H.glasses,/obj/item/clothing/glasses/science)) + protected += 0.1 + + return 1 - protected