mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-01-04 14:33:10 +00:00
Xenoarch Adjustments (#11567)
This commit is contained in:
@@ -34,12 +34,12 @@
|
||||
. = ..()
|
||||
|
||||
//setup primary effect - these are the main ones (mixed)
|
||||
var/effecttype = pick(typesof(/datum/artifact_effect) - /datum/artifact_effect)
|
||||
var/effecttype = pick(subtypesof(/datum/artifact_effect))
|
||||
my_effect = new effecttype(src)
|
||||
|
||||
//75% chance to have a secondary stealthy (and mostly bad) effect
|
||||
if(prob(75))
|
||||
effecttype = pick(typesof(/datum/artifact_effect) - /datum/artifact_effect)
|
||||
effecttype = pick(subtypesof(/datum/artifact_effect))
|
||||
secondary_effect = new effecttype(src)
|
||||
if(prob(75))
|
||||
secondary_effect.ToggleActivate(0)
|
||||
@@ -183,24 +183,23 @@
|
||||
if(secondary_effect?.trigger == TRIGGER_NITRO && secondary_effect.activated)
|
||||
secondary_effect.ToggleActivate()
|
||||
|
||||
/obj/machinery/artifact/attack_hand(var/mob/user as mob)
|
||||
if (get_dist(user, src) > 1)
|
||||
to_chat(user, "<span class='warning'>You can't reach [src] from here.</span>")
|
||||
/obj/machinery/artifact/attack_hand(mob/user)
|
||||
if(use_check_and_message(user, USE_ALLOW_NON_ADV_TOOL_USR))
|
||||
return
|
||||
if(ishuman(user) && user:gloves)
|
||||
to_chat(user, "<b>You touch [src]</b> with your gloved hands, [pick("but nothing of note happens","but nothing happens","but nothing interesting happens","but you notice nothing different","but nothing seems to have happened")].")
|
||||
to_chat(user, "<b>You touch \the [src]</b> with your gloved hands, [pick("but nothing of note happens","but nothing happens","but nothing interesting happens","but you notice nothing different","but nothing seems to have happened")].")
|
||||
return
|
||||
|
||||
src.add_fingerprint(user)
|
||||
|
||||
if(my_effect.trigger == TRIGGER_TOUCH)
|
||||
to_chat(user, "<b>You touch [src].</b>")
|
||||
to_chat(user, "<b>You touch \the [src].</b>")
|
||||
my_effect.ToggleActivate()
|
||||
else
|
||||
to_chat(user, "<b>You touch [src],</b> [pick("but nothing of note happens","but nothing happens","but nothing interesting happens","but you notice nothing different","but nothing seems to have happened")].")
|
||||
to_chat(user, "<b>You touch \the [src],</b> [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(secondary_effect?.trigger == TRIGGER_TOUCH)
|
||||
to_chat(user, "<b>You touch [src].</b>")
|
||||
to_chat(user, "<b>You touch \the [src].</b>")
|
||||
secondary_effect.ToggleActivate()
|
||||
|
||||
if (my_effect.effect == EFFECT_TOUCH)
|
||||
@@ -209,7 +208,7 @@
|
||||
if(secondary_effect?.effect == EFFECT_TOUCH && secondary_effect.activated)
|
||||
secondary_effect.DoEffectTouch(user)
|
||||
|
||||
/obj/machinery/artifact/attackby(obj/item/W as obj, mob/living/user as mob)
|
||||
/obj/machinery/artifact/attackby(var/obj/item/W, mob/living/user)
|
||||
|
||||
if (istype(W, /obj/item/reagent_containers/))
|
||||
if(W.reagents.has_reagent(/decl/reagent/hydrazine, 1) || W.reagents.has_reagent(/decl/reagent/water, 1))
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
toplevelholder = toplevelholder.loc
|
||||
toplevelholder.visible_message("<span class='warning'>[icon2html(toplevelholder, viewers(get_turf(toplevelholder)))] [toplevelholder] [display_msg]</span>")
|
||||
|
||||
/datum/artifact_effect/proc/DoEffectTouch(var/mob/user)
|
||||
/datum/artifact_effect/proc/DoEffectTouch(var/mob/living/user)
|
||||
/datum/artifact_effect/proc/DoEffectAura(var/atom/holder)
|
||||
/datum/artifact_effect/proc/DoEffectPulse(var/atom/holder)
|
||||
/datum/artifact_effect/proc/UpdateMove()
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
|
||||
//inverse of /datum/artifact_effect/heat, the two effects split up for neatness' sake
|
||||
/datum/artifact_effect/cold
|
||||
effecttype = "cold"
|
||||
var/target_temp
|
||||
|
||||
/datum/artifact_effect/cold/New()
|
||||
..()
|
||||
target_temp = rand(0, 250)
|
||||
effect = pick(EFFECT_TOUCH, EFFECT_AURA)
|
||||
effect_type = pick(5,6,7)
|
||||
|
||||
/datum/artifact_effect/cold/DoEffectTouch(var/mob/user)
|
||||
if(holder)
|
||||
to_chat(user, "<span class='notice'>A chill passes up your spine!</span>")
|
||||
var/datum/gas_mixture/env = holder.loc.return_air()
|
||||
if(env)
|
||||
env.temperature = max(env.temperature - rand(5,50), 0)
|
||||
|
||||
/datum/artifact_effect/cold/DoEffectAura()
|
||||
if(holder)
|
||||
var/datum/gas_mixture/env = holder.loc.return_air()
|
||||
if(env && env.temperature > target_temp)
|
||||
env.temperature -= pick(0, 0, 1)
|
||||
@@ -0,0 +1,202 @@
|
||||
//Creating gasses
|
||||
|
||||
|
||||
/datum/artifact_effect/gasco2
|
||||
effecttype = "gasco2"
|
||||
var/max_pressure
|
||||
var/target_percentage
|
||||
|
||||
/datum/artifact_effect/heat/New()
|
||||
..()
|
||||
effect_type = pick(6,7)
|
||||
|
||||
/datum/artifact_effect/gasco2/New()
|
||||
..()
|
||||
effect = pick(EFFECT_TOUCH, EFFECT_AURA)
|
||||
max_pressure = rand(115,1000)
|
||||
|
||||
/datum/artifact_effect/gasco2/DoEffectTouch(var/mob/living/user)
|
||||
if(holder)
|
||||
var/turf/holder_loc = holder.loc
|
||||
if(istype(holder_loc))
|
||||
holder_loc.assume_gas(GAS_CO2, rand(2, 15))
|
||||
|
||||
/datum/artifact_effect/gasco2/DoEffectAura()
|
||||
if(holder)
|
||||
var/turf/holder_loc = holder.loc
|
||||
if(istype(holder_loc))
|
||||
holder_loc.assume_gas(GAS_CO2, pick(0, 0, 0.1, rand()))
|
||||
|
||||
/datum/artifact_effect/gasnitro
|
||||
effecttype = "gasnitro"
|
||||
var/max_pressure
|
||||
var/target_percentage
|
||||
|
||||
/datum/artifact_effect/gasnitro/New()
|
||||
..()
|
||||
effect = pick(EFFECT_TOUCH, EFFECT_AURA)
|
||||
effect_type = pick(6,7)
|
||||
max_pressure = rand(115,1000)
|
||||
|
||||
/datum/artifact_effect/gasnitro/DoEffectTouch(var/mob/living/user)
|
||||
if(holder)
|
||||
var/turf/holder_loc = holder.loc
|
||||
if(istype(holder_loc))
|
||||
holder_loc.assume_gas(GAS_NITROGEN, rand(2, 15))
|
||||
|
||||
/datum/artifact_effect/gasnitro/DoEffectAura()
|
||||
if(holder)
|
||||
var/turf/holder_loc = holder.loc
|
||||
if(istype(holder_loc))
|
||||
holder_loc.assume_gas(GAS_NITROGEN, pick(0, 0, 0.1, rand()))
|
||||
|
||||
|
||||
/datum/artifact_effect/gasoxy
|
||||
effecttype = "gasoxy"
|
||||
var/max_pressure
|
||||
|
||||
/datum/artifact_effect/gasoxy/New()
|
||||
..()
|
||||
effect = pick(EFFECT_TOUCH, EFFECT_AURA)
|
||||
max_pressure = rand(115,1000)
|
||||
effect_type = pick(6,7)
|
||||
|
||||
|
||||
/datum/artifact_effect/gasoxy/DoEffectTouch(var/mob/living/user)
|
||||
if(holder)
|
||||
var/turf/holder_loc = holder.loc
|
||||
if(istype(holder_loc))
|
||||
holder_loc.assume_gas(GAS_OXYGEN, rand(2, 15))
|
||||
|
||||
/datum/artifact_effect/gasoxy/DoEffectAura()
|
||||
if(holder)
|
||||
var/turf/holder_loc = holder.loc
|
||||
if(istype(holder_loc))
|
||||
holder_loc.assume_gas(GAS_OXYGEN, pick(0, 0, 0.1, rand()))
|
||||
|
||||
/datum/artifact_effect/gasphoron
|
||||
effecttype = "gasphoron"
|
||||
var/max_pressure
|
||||
var/target_percentage
|
||||
|
||||
/datum/artifact_effect/gasphoron/New()
|
||||
..()
|
||||
effect = pick(EFFECT_TOUCH, EFFECT_AURA)
|
||||
max_pressure = rand(115,1000)
|
||||
effect_type = pick(6,7)
|
||||
|
||||
/datum/artifact_effect/gasphoron/DoEffectTouch(var/mob/living/user)
|
||||
if(holder)
|
||||
var/turf/holder_loc = holder.loc
|
||||
if(istype(holder_loc))
|
||||
holder_loc.assume_gas(GAS_OXYGEN, rand(2, 15))
|
||||
|
||||
/datum/artifact_effect/gasphoron/DoEffectAura()
|
||||
if(holder)
|
||||
var/turf/holder_loc = holder.loc
|
||||
if(istype(holder_loc))
|
||||
holder_loc.assume_gas(GAS_PHORON, pick(0, 0, 0.1, rand()))
|
||||
|
||||
/datum/artifact_effect/gassleeping
|
||||
effecttype = "gassleeping"
|
||||
var/max_pressure
|
||||
var/target_percentage
|
||||
|
||||
/datum/artifact_effect/gassleeping/New()
|
||||
..()
|
||||
effect = pick(EFFECT_TOUCH, EFFECT_AURA)
|
||||
max_pressure = rand(115,1000)
|
||||
effect_type = pick(6,7)
|
||||
|
||||
/datum/artifact_effect/gassleeping/DoEffectTouch(var/mob/living/user)
|
||||
if(holder)
|
||||
var/turf/holder_loc = holder.loc
|
||||
if(istype(holder_loc))
|
||||
holder_loc.assume_gas(GAS_N2O, rand(2, 15))
|
||||
|
||||
/datum/artifact_effect/gassleeping/DoEffectAura()
|
||||
if(holder)
|
||||
var/turf/holder_loc = holder.loc
|
||||
if(istype(holder_loc))
|
||||
holder_loc.assume_gas(GAS_N2O, pick(0, 0, 0.1, rand()))
|
||||
|
||||
/datum/artifact_effect/gashydrogen
|
||||
effecttype = "gashydrogen"
|
||||
var/max_pressure
|
||||
var/target_percentage
|
||||
|
||||
/datum/artifact_effect/gashydrogen/New()
|
||||
..()
|
||||
effect = pick(EFFECT_TOUCH, EFFECT_AURA)
|
||||
max_pressure = rand(115,1000)
|
||||
effect_type = pick(6,7)
|
||||
|
||||
/datum/artifact_effect/gashydrogen/DoEffectTouch(var/mob/living/user)
|
||||
if(holder)
|
||||
var/turf/holder_loc = holder.loc
|
||||
if(istype(holder_loc))
|
||||
holder_loc.assume_gas(GAS_HYDROGEN, rand(2, 15))
|
||||
|
||||
/datum/artifact_effect/gashydrogen/DoEffectAura()
|
||||
if(holder)
|
||||
var/turf/holder_loc = holder.loc
|
||||
if(istype(holder_loc))
|
||||
holder_loc.assume_gas(GAS_HYDROGEN, pick(0, 0, 0.1, rand()))
|
||||
|
||||
|
||||
|
||||
//Temperature changes
|
||||
/datum/artifact_effect/cold
|
||||
effecttype = "cold"
|
||||
var/target_temp
|
||||
|
||||
/datum/artifact_effect/cold/New()
|
||||
..()
|
||||
target_temp = rand(0, 250)
|
||||
effect = pick(EFFECT_TOUCH, EFFECT_AURA)
|
||||
effect_type = pick(5,6,7)
|
||||
|
||||
/datum/artifact_effect/cold/DoEffectTouch(var/mob/living/user)
|
||||
if(holder)
|
||||
if(user.isSynthetic())
|
||||
to_chat(user, SPAN_NOTICE("You detect a decrease in temperature throughout your systems!"))
|
||||
else
|
||||
to_chat(user, SPAN_NOTICE("A chill passes up your spine!"))
|
||||
var/datum/gas_mixture/env = holder.loc.return_air()
|
||||
if(env)
|
||||
env.temperature = max(env.temperature - rand(5,50), 0)
|
||||
|
||||
/datum/artifact_effect/cold/DoEffectAura()
|
||||
if(holder)
|
||||
var/datum/gas_mixture/env = holder.loc.return_air()
|
||||
if(env && env.temperature > target_temp)
|
||||
env.temperature -= pick(0, 0, 1)
|
||||
|
||||
/datum/artifact_effect/heat
|
||||
effecttype = "heat"
|
||||
var/target_temp
|
||||
|
||||
/datum/artifact_effect/heat/New()
|
||||
..()
|
||||
effect_type = pick(5,6,7)
|
||||
|
||||
/datum/artifact_effect/heat/New()
|
||||
..()
|
||||
target_temp = rand(300,600)
|
||||
effect = pick(EFFECT_TOUCH, EFFECT_AURA)
|
||||
|
||||
/datum/artifact_effect/heat/DoEffectTouch(var/mob/living/user)
|
||||
if(holder)
|
||||
if(user.isSynthetic())
|
||||
to_chat(user, SPAN_WARNING("You detect a wave of heat surging through your systems."))
|
||||
else
|
||||
to_chat(user, SPAN_WARNING("You feel a wave of heat travel up your spine!"))
|
||||
var/datum/gas_mixture/env = holder.loc.return_air()
|
||||
if(env)
|
||||
env.temperature += rand(5,50)
|
||||
|
||||
/datum/artifact_effect/heat/DoEffectAura()
|
||||
if(holder)
|
||||
var/datum/gas_mixture/env = holder.loc.return_air()
|
||||
if(env && env.temperature < target_temp)
|
||||
env.temperature += pick(0, 0, 1)
|
||||
@@ -1,70 +0,0 @@
|
||||
|
||||
/datum/artifact_effect/badfeeling
|
||||
effecttype = "badfeeling"
|
||||
effect_type = 2
|
||||
var/list/messages = list("You feel worried.",\
|
||||
"Something doesn't feel right.",\
|
||||
"You get a strange feeling in your gut.",\
|
||||
"Your instincts are trying to warn you about something.",\
|
||||
"Someone just walked over your grave.",\
|
||||
"There's a strange feeling in the air.",\
|
||||
"There's a strange smell in the air.",\
|
||||
"The tips of your fingers feel tingly.",\
|
||||
"You feel witchy.",\
|
||||
"You have a terrible sense of foreboding.",\
|
||||
"You've got a bad feeling about this.",\
|
||||
"Your scalp prickles.",\
|
||||
"The light seems to flicker.",\
|
||||
"The shadows seem to lengthen.",\
|
||||
"The walls are getting closer.",\
|
||||
"Something is wrong")
|
||||
|
||||
var/list/drastic_messages = list("You've got to get out of here!",\
|
||||
"Someone's trying to kill you!",\
|
||||
"There's something out there!",\
|
||||
"What's happening to you?",\
|
||||
"OH GOD!",\
|
||||
"HELP ME!")
|
||||
|
||||
/datum/artifact_effect/badfeeling/DoEffectTouch(var/mob/user)
|
||||
if(user)
|
||||
if (istype(user, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(prob(50))
|
||||
if(prob(75))
|
||||
to_chat(H, "<b><font color='red' size='[num2text(rand(1,5))]'>[pick(drastic_messages)]</b></font>")
|
||||
else
|
||||
to_chat(H, "<span class='warning'>[pick(messages)]</span>")
|
||||
|
||||
if(prob(50))
|
||||
H.dizziness += rand(3,5)
|
||||
|
||||
/datum/artifact_effect/badfeeling/DoEffectAura()
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for (var/mob/living/carbon/human/H in range(src.effectrange,T))
|
||||
if(prob(5))
|
||||
if(prob(75))
|
||||
to_chat(H, "<span class='warning'>[pick(messages)]</span>")
|
||||
else
|
||||
to_chat(H, "<font color='red' size='[num2text(rand(1,5))]'><b>[pick(drastic_messages)]</b></font>")
|
||||
|
||||
if(prob(10))
|
||||
H.dizziness += rand(3,5)
|
||||
return 1
|
||||
|
||||
/datum/artifact_effect/badfeeling/DoEffectPulse()
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for (var/mob/living/carbon/human/H in range(src.effectrange,T))
|
||||
if(prob(50))
|
||||
if(prob(95))
|
||||
to_chat(H, "<font color='red' size='[num2text(rand(1,5))]'><b>[pick(drastic_messages)]</b></font>")
|
||||
else
|
||||
to_chat(H, "<span class='warning'>[pick(messages)]</span>")
|
||||
|
||||
if(prob(50))
|
||||
H.dizziness += rand(3,5)
|
||||
else if(prob(25))
|
||||
H.dizziness += rand(5,15)
|
||||
return 1
|
||||
@@ -6,14 +6,12 @@
|
||||
var/last_message
|
||||
var/is_looping = FALSE
|
||||
|
||||
/datum/artifact_effect/cellcharge/DoEffectTouch(var/mob/user)
|
||||
if(user)
|
||||
if(istype(user, /mob/living/silicon/robot))
|
||||
var/mob/living/silicon/robot/R = user
|
||||
for (var/obj/item/cell/D in R.contents)
|
||||
D.charge += rand() * 100 + 50
|
||||
to_chat(R, "<span class='notice'>SYSTEM ALERT: Large energy boost detected!</span>")
|
||||
return 1
|
||||
/datum/artifact_effect/cellcharge/DoEffectTouch(var/mob/living/user)
|
||||
var/obj/item/cell/C = user.get_cell()
|
||||
if(C)
|
||||
C.charge = min(C.maxcharge, C.charge + (rand(50, 150)))
|
||||
to_chat(user, SPAN_NOTICE("Diagnostics Alert: Large energy boost detected!"))
|
||||
return TRUE
|
||||
|
||||
#define SLEEP_AND_STOP \
|
||||
if (TICK_CHECK) { \
|
||||
@@ -30,12 +28,12 @@ if (TICK_CHECK) { \
|
||||
|
||||
if(holder)
|
||||
if (is_looping)
|
||||
return 1
|
||||
return TRUE
|
||||
is_looping = TRUE
|
||||
|
||||
var/turf/T = get_turf(holder)
|
||||
|
||||
for (var/P in range(src.effectrange, T))
|
||||
for (var/atom/P in range(effectrange, T))
|
||||
SLEEP_AND_STOP
|
||||
|
||||
if (istype(P, /obj/machinery/power/apc))
|
||||
@@ -45,17 +43,18 @@ if (TICK_CHECK) { \
|
||||
else if (istype(P, /obj/machinery/power/smes))
|
||||
var/obj/machinery/power/smes/smes = P
|
||||
smes.charge += 25
|
||||
else if (isrobot(P))
|
||||
var/mob/living/silicon/robot/M = P
|
||||
else if(isliving(P))
|
||||
var/mob/living/M = P
|
||||
if (get_dist(T, M) <= effectrange)
|
||||
if (M.cell)
|
||||
M.cell.charge += 25
|
||||
var/obj/item/cell/D = M.get_cell()
|
||||
if(D)
|
||||
D.charge = min(D.maxcharge, D.charge + 25)
|
||||
if(world.time - last_message > 200)
|
||||
to_chat(M, "<span class='notice'>SYSTEM ALERT: Energy boost detected!</span>")
|
||||
to_chat(M, SPAN_NOTICE("Diagnostics Alert: Large energy boost detected!"))
|
||||
last_message = world.time
|
||||
|
||||
is_looping = FALSE
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
#undef SLEEP_AND_STOP
|
||||
|
||||
@@ -65,12 +64,13 @@ if (TICK_CHECK) { \
|
||||
for (var/obj/machinery/power/apc/C in range(200, T))
|
||||
for (var/obj/item/cell/B in C.contents)
|
||||
B.charge += rand() * 100
|
||||
for (var/obj/machinery/power/smes/S in range (src.effectrange,src))
|
||||
for (var/obj/machinery/power/smes/S in range (effectrange,src))
|
||||
S.charge += 250
|
||||
for (var/mob/living/silicon/robot/M in range(100, T))
|
||||
for (var/obj/item/cell/D in M.contents)
|
||||
D.charge += rand() * 100
|
||||
for(var/mob/living/M in range(100, T))
|
||||
var/obj/item/cell/D = M.get_cell()
|
||||
if(D)
|
||||
D.charge = min(D.maxcharge, D.charge + rand(0, 100))
|
||||
if(world.time - last_message > 200)
|
||||
to_chat(M, "<span class='notice'>SYSTEM ALERT: Energy boost detected!</span>")
|
||||
to_chat(M, SPAN_NOTICE("Diagnostics Alert: Energy boost detected!"))
|
||||
last_message = world.time
|
||||
return 1
|
||||
|
||||
@@ -6,15 +6,11 @@
|
||||
var/last_message
|
||||
|
||||
/datum/artifact_effect/celldrain/DoEffectTouch(var/mob/user)
|
||||
if(user)
|
||||
if(istype(user, /mob/living/silicon/robot))
|
||||
var/mob/living/silicon/robot/R = user
|
||||
for (var/obj/item/cell/D in R.contents)
|
||||
D.charge = max(D.charge - rand() * 100, 0)
|
||||
to_chat(R, "<span class='notice'> SYSTEM ALERT: Energy drain detected!</span>")
|
||||
return 1
|
||||
|
||||
return 1
|
||||
var/obj/item/cell/C = user.get_cell()
|
||||
if(C)
|
||||
C.charge = max(C.charge - rand(25, 100), 0)
|
||||
to_chat(user, SPAN_NOTICE("Diagnostics alert: Energy drain detected!"))
|
||||
return TRUE
|
||||
|
||||
/datum/artifact_effect/celldrain/DoEffectAura()
|
||||
if(holder)
|
||||
@@ -22,15 +18,16 @@
|
||||
for (var/obj/machinery/power/apc/C in range(40, T))
|
||||
for (var/obj/item/cell/B in C.contents)
|
||||
B.charge = max(B.charge - 50,0)
|
||||
for (var/obj/machinery/power/smes/S in range (src.effectrange,src))
|
||||
for (var/obj/machinery/power/smes/S in range(effectrange,src))
|
||||
S.charge = max(S.charge - 100,0)
|
||||
for (var/mob/living/silicon/robot/M in range(20, T))
|
||||
for (var/obj/item/cell/D in M.contents)
|
||||
for(var/mob/living/M in range(20, T))
|
||||
var/obj/item/cell/D = M.get_cell()
|
||||
if(D)
|
||||
D.charge = max(D.charge - 50,0)
|
||||
if(world.time - last_message > 200)
|
||||
to_chat(M, "<span class='warning'>SYSTEM ALERT: Energy drain detected!</span>")
|
||||
to_chat(M, SPAN_NOTICE("Diagnostics alert: Energy drain detected!"))
|
||||
last_message = world.time
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/datum/artifact_effect/celldrain/DoEffectPulse()
|
||||
if(holder)
|
||||
@@ -38,12 +35,13 @@
|
||||
for (var/obj/machinery/power/apc/C in range(40, T))
|
||||
for (var/obj/item/cell/B in C.contents)
|
||||
B.charge = max(B.charge - rand() * 150,0)
|
||||
for (var/obj/machinery/power/smes/S in range (src.effectrange,src))
|
||||
for (var/obj/machinery/power/smes/S in range(effectrange,src))
|
||||
S.charge = max(S.charge - 250,0)
|
||||
for (var/mob/living/silicon/robot/M in range(30, T))
|
||||
for (var/obj/item/cell/D in M.contents)
|
||||
for (var/mob/living/M in range(30, T))
|
||||
var/obj/item/cell/D = M.get_cell()
|
||||
if(D)
|
||||
D.charge = max(D.charge - rand() * 150,0)
|
||||
if(world.time - last_message > 200)
|
||||
to_chat(M, "<span class='warning'>SYSTEM ALERT: Energy drain detected!</span>")
|
||||
to_chat(M, SPAN_NOTICE("Diagnostics alert: Energy drain detected!"))
|
||||
last_message = world.time
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
@@ -11,4 +11,4 @@
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
empulse(T, effectrange/1, effectrange)
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
|
||||
/datum/artifact_effect/gasco2
|
||||
effecttype = "gasco2"
|
||||
var/max_pressure
|
||||
var/target_percentage
|
||||
|
||||
/datum/artifact_effect/heat/New()
|
||||
..()
|
||||
effect_type = pick(6,7)
|
||||
|
||||
/datum/artifact_effect/gasco2/New()
|
||||
..()
|
||||
effect = pick(EFFECT_TOUCH, EFFECT_AURA)
|
||||
max_pressure = rand(115,1000)
|
||||
|
||||
/datum/artifact_effect/gasco2/DoEffectTouch(var/mob/user)
|
||||
if(holder)
|
||||
var/turf/holder_loc = holder.loc
|
||||
if(istype(holder_loc))
|
||||
holder_loc.assume_gas(GAS_CO2, rand(2, 15))
|
||||
|
||||
/datum/artifact_effect/gasco2/DoEffectAura()
|
||||
if(holder)
|
||||
var/turf/holder_loc = holder.loc
|
||||
if(istype(holder_loc))
|
||||
holder_loc.assume_gas(GAS_CO2, pick(0, 0, 0.1, rand()))
|
||||
@@ -1,23 +0,0 @@
|
||||
|
||||
/datum/artifact_effect/gasnitro
|
||||
effecttype = "gasnitro"
|
||||
var/max_pressure
|
||||
var/target_percentage
|
||||
|
||||
/datum/artifact_effect/gasnitro/New()
|
||||
..()
|
||||
effect = pick(EFFECT_TOUCH, EFFECT_AURA)
|
||||
effect_type = pick(6,7)
|
||||
max_pressure = rand(115,1000)
|
||||
|
||||
/datum/artifact_effect/gasnitro/DoEffectTouch(var/mob/user)
|
||||
if(holder)
|
||||
var/turf/holder_loc = holder.loc
|
||||
if(istype(holder_loc))
|
||||
holder_loc.assume_gas(GAS_NITROGEN, rand(2, 15))
|
||||
|
||||
/datum/artifact_effect/gasnitro/DoEffectAura()
|
||||
if(holder)
|
||||
var/turf/holder_loc = holder.loc
|
||||
if(istype(holder_loc))
|
||||
holder_loc.assume_gas(GAS_NITROGEN, pick(0, 0, 0.1, rand()))
|
||||
@@ -1,23 +0,0 @@
|
||||
|
||||
/datum/artifact_effect/gasoxy
|
||||
effecttype = "gasoxy"
|
||||
var/max_pressure
|
||||
|
||||
/datum/artifact_effect/gasoxy/New()
|
||||
..()
|
||||
effect = pick(EFFECT_TOUCH, EFFECT_AURA)
|
||||
max_pressure = rand(115,1000)
|
||||
effect_type = pick(6,7)
|
||||
|
||||
|
||||
/datum/artifact_effect/gasoxy/DoEffectTouch(var/mob/user)
|
||||
if(holder)
|
||||
var/turf/holder_loc = holder.loc
|
||||
if(istype(holder_loc))
|
||||
holder_loc.assume_gas(GAS_OXYGEN, rand(2, 15))
|
||||
|
||||
/datum/artifact_effect/gasoxy/DoEffectAura()
|
||||
if(holder)
|
||||
var/turf/holder_loc = holder.loc
|
||||
if(istype(holder_loc))
|
||||
holder_loc.assume_gas(GAS_OXYGEN, pick(0, 0, 0.1, rand()))
|
||||
@@ -1,23 +0,0 @@
|
||||
|
||||
/datum/artifact_effect/gasphoron
|
||||
effecttype = "gasphoron"
|
||||
var/max_pressure
|
||||
var/target_percentage
|
||||
|
||||
/datum/artifact_effect/gasphoron/New()
|
||||
..()
|
||||
effect = pick(EFFECT_TOUCH, EFFECT_AURA)
|
||||
max_pressure = rand(115,1000)
|
||||
effect_type = pick(6,7)
|
||||
|
||||
/datum/artifact_effect/gasphoron/DoEffectTouch(var/mob/user)
|
||||
if(holder)
|
||||
var/turf/holder_loc = holder.loc
|
||||
if(istype(holder_loc))
|
||||
holder_loc.assume_gas(GAS_OXYGEN, rand(2, 15))
|
||||
|
||||
/datum/artifact_effect/gasphoron/DoEffectAura()
|
||||
if(holder)
|
||||
var/turf/holder_loc = holder.loc
|
||||
if(istype(holder_loc))
|
||||
holder_loc.assume_gas(GAS_PHORON, pick(0, 0, 0.1, rand()))
|
||||
@@ -1,23 +0,0 @@
|
||||
|
||||
/datum/artifact_effect/gassleeping
|
||||
effecttype = "gassleeping"
|
||||
var/max_pressure
|
||||
var/target_percentage
|
||||
|
||||
/datum/artifact_effect/gassleeping/New()
|
||||
..()
|
||||
effect = pick(EFFECT_TOUCH, EFFECT_AURA)
|
||||
max_pressure = rand(115,1000)
|
||||
effect_type = pick(6,7)
|
||||
|
||||
/datum/artifact_effect/gassleeping/DoEffectTouch(var/mob/user)
|
||||
if(holder)
|
||||
var/turf/holder_loc = holder.loc
|
||||
if(istype(holder_loc))
|
||||
holder_loc.assume_gas(GAS_N2O, rand(2, 15))
|
||||
|
||||
/datum/artifact_effect/gassleeping/DoEffectAura()
|
||||
if(holder)
|
||||
var/turf/holder_loc = holder.loc
|
||||
if(istype(holder_loc))
|
||||
holder_loc.assume_gas(GAS_N2O, pick(0, 0, 0.1, rand()))
|
||||
@@ -1,68 +0,0 @@
|
||||
|
||||
/datum/artifact_effect/goodfeeling
|
||||
effecttype = "goodfeeling"
|
||||
effect_type = 2
|
||||
var/list/messages = list("You feel good.",\
|
||||
"Everything seems to be going alright",\
|
||||
"You've got a good feeling about this",\
|
||||
"Your instincts tell you everything is going to be getting better.",\
|
||||
"There's a good feeling in the air.",\
|
||||
"Something smells... good.",\
|
||||
"The tips of your fingers feel tingly.",\
|
||||
"You've got a good feeling about this.",\
|
||||
"You feel happy.",\
|
||||
"You fight the urge to smile.",\
|
||||
"Your scalp prickles.",\
|
||||
"All the colours seem a bit more vibrant.",\
|
||||
"Everything seems a little lighter.",\
|
||||
"The troubles of the world seem to fade away.")
|
||||
|
||||
var/list/drastic_messages = list("You want to hug everyone you meet!",\
|
||||
"Everything is going so well!",\
|
||||
"You feel euphoric.",\
|
||||
"You feel giddy.",\
|
||||
"You're so happy suddenly, you almost want to dance and sing.",\
|
||||
"You feel like the world is out to help you.")
|
||||
|
||||
/datum/artifact_effect/goodfeeling/DoEffectTouch(var/mob/user)
|
||||
if(user)
|
||||
if (istype(user, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(prob(50))
|
||||
if(prob(75))
|
||||
to_chat(H, "<b><font color='blue' size='[num2text(rand(1,5))]'>[pick(drastic_messages)]</b></font>")
|
||||
else
|
||||
to_chat(H, "<span class='notice'>[pick(messages)]</span>")
|
||||
|
||||
if(prob(50))
|
||||
H.dizziness += rand(3,5)
|
||||
|
||||
/datum/artifact_effect/goodfeeling/DoEffectAura()
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for (var/mob/living/carbon/human/H in range(src.effectrange,T))
|
||||
if(prob(5))
|
||||
if(prob(75))
|
||||
to_chat(H, "<span class='notice'>[pick(messages)]</span>")
|
||||
else
|
||||
to_chat(H, "<font color='blue' size='[num2text(rand(1,5))]'><b>[pick(drastic_messages)]</b></font>")
|
||||
|
||||
if(prob(5))
|
||||
H.dizziness += rand(3,5)
|
||||
return 1
|
||||
|
||||
/datum/artifact_effect/goodfeeling/DoEffectPulse()
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for (var/mob/living/carbon/human/H in range(src.effectrange,T))
|
||||
if(prob(50))
|
||||
if(prob(95))
|
||||
to_chat(H, "<font color='blue' size='[num2text(rand(1,5))]'><b>[pick(drastic_messages)]</b></font>")
|
||||
else
|
||||
to_chat(H, "<span class='notice'>[pick(messages)]</span>")
|
||||
|
||||
if(prob(50))
|
||||
H.dizziness += rand(3,5)
|
||||
else if(prob(25))
|
||||
H.dizziness += rand(5,15)
|
||||
return 1
|
||||
@@ -1,65 +0,0 @@
|
||||
|
||||
/datum/artifact_effect/heal
|
||||
effecttype = "heal"
|
||||
effect_type = 5
|
||||
|
||||
/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
|
||||
to_chat(C, "<span class='notice'>You feel a soothing energy invigorate you.</span>")
|
||||
|
||||
if(ishuman(toucher))
|
||||
var/mob/living/carbon/human/H = toucher
|
||||
for(var/obj/item/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(/decl/reagent/blood,5, temperature = H.species?.body_temperature)
|
||||
H.adjustNutritionLoss(-50 * weakness)
|
||||
H.adjustHydrationLoss(-50 * weakness)
|
||||
H.adjustBrainLoss(-25 * weakness)
|
||||
H.apply_radiation(-1*min(H.total_radiation, 25 * weakness))
|
||||
H.bodytemperature = initial(H.bodytemperature)
|
||||
H.fixblood()
|
||||
//
|
||||
C.adjustOxyLoss(-25 * weakness)
|
||||
C.adjustToxLoss(-25 * weakness)
|
||||
C.adjustBruteLoss(-25 * weakness)
|
||||
C.adjustFireLoss(-25 * weakness)
|
||||
//
|
||||
C.regenerate_icons()
|
||||
return 1
|
||||
|
||||
/datum/artifact_effect/heal/DoEffectAura()
|
||||
//todo: check over this properly
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for (var/mob/living/carbon/C in range(src.effectrange,T))
|
||||
var/weakness = GetAnomalySusceptibility(C)
|
||||
if(prob(weakness * 100))
|
||||
if(prob(10))
|
||||
to_chat(C, "<span class='notice'>You feel a soothing energy radiating from something nearby.</span>")
|
||||
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()
|
||||
//todo: check over this properly
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for (var/mob/living/carbon/C in range(src.effectrange,T))
|
||||
var/weakness = GetAnomalySusceptibility(C)
|
||||
if(prob(weakness * 100))
|
||||
to_chat(C, "<span class='notice'>A wave of energy invigorates you.</span>")
|
||||
C.adjustBruteLoss(-5 * weakness)
|
||||
C.adjustFireLoss(-5 * weakness)
|
||||
C.adjustToxLoss(-5 * weakness)
|
||||
C.adjustOxyLoss(-5 * weakness)
|
||||
C.adjustBrainLoss(-5 * weakness)
|
||||
C.updatehealth()
|
||||
@@ -1,27 +0,0 @@
|
||||
|
||||
//inverse of /datum/artifact_effect/cold, the two effects split up for neatness' sake
|
||||
/datum/artifact_effect/heat
|
||||
effecttype = "heat"
|
||||
var/target_temp
|
||||
|
||||
/datum/artifact_effect/heat/New()
|
||||
..()
|
||||
effect_type = pick(5,6,7)
|
||||
|
||||
/datum/artifact_effect/heat/New()
|
||||
..()
|
||||
target_temp = rand(300,600)
|
||||
effect = pick(EFFECT_TOUCH, EFFECT_AURA)
|
||||
|
||||
/datum/artifact_effect/heat/DoEffectTouch(var/mob/user)
|
||||
if(holder)
|
||||
to_chat(user, "<span class='warning'>You feel a wave of heat travel up your spine!</span>")
|
||||
var/datum/gas_mixture/env = holder.loc.return_air()
|
||||
if(env)
|
||||
env.temperature += rand(5,50)
|
||||
|
||||
/datum/artifact_effect/heat/DoEffectAura()
|
||||
if(holder)
|
||||
var/datum/gas_mixture/env = holder.loc.return_air()
|
||||
if(env && env.temperature < target_temp)
|
||||
env.temperature += pick(0, 0, 1)
|
||||
@@ -1,50 +0,0 @@
|
||||
|
||||
/datum/artifact_effect/hurt
|
||||
effecttype = I_HURT
|
||||
effect_type = 5
|
||||
|
||||
/datum/artifact_effect/hurt/DoEffectTouch(var/mob/toucher)
|
||||
if(toucher)
|
||||
var/weakness = GetAnomalySusceptibility(toucher)
|
||||
if(iscarbon(toucher) && prob(weakness * 100))
|
||||
var/mob/living/carbon/C = toucher
|
||||
to_chat(C, "<span class='danger'>A painful discharge of energy strikes you!</span>")
|
||||
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.apply_damage(25 * weakness, IRRADIATE, damage_flags = DAM_DISPERSED)
|
||||
C.adjustNutritionLoss(50 * weakness)
|
||||
C.adjustHydrationLoss(50 * weakness)
|
||||
C.make_dizzy(6 * weakness)
|
||||
C.weakened += 6 * weakness
|
||||
|
||||
/datum/artifact_effect/hurt/DoEffectAura()
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for (var/mob/living/carbon/C in range(src.effectrange,T))
|
||||
var/weakness = GetAnomalySusceptibility(C)
|
||||
if(prob(weakness * 100))
|
||||
if(prob(10))
|
||||
to_chat(C, "<span class='danger'>You feel a painful force radiating from something nearby.</span>")
|
||||
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)
|
||||
var/turf/T = get_turf(holder)
|
||||
for (var/mob/living/carbon/C in range(effectrange, T))
|
||||
var/weakness = GetAnomalySusceptibility(C)
|
||||
if(prob(weakness * 100))
|
||||
to_chat(C, "<span class='danger'>A wave of painful energy strikes you!</span>")
|
||||
C.adjustBruteLoss(3 * weakness)
|
||||
C.adjustFireLoss(3 * weakness)
|
||||
C.adjustToxLoss(3 * weakness)
|
||||
C.adjustOxyLoss(3 * weakness)
|
||||
C.adjustBrainLoss(3 * weakness)
|
||||
C.updatehealth()
|
||||
@@ -0,0 +1,189 @@
|
||||
//Effects that produce feelings or altered states of mind
|
||||
|
||||
/datum/artifact_effect/badfeeling
|
||||
effecttype = "badfeeling"
|
||||
effect_type = 2
|
||||
var/list/messages = list("You feel worried.",\
|
||||
"Something doesn't feel right.",\
|
||||
"You get a strange feeling in your gut.",\
|
||||
"Your instincts are trying to warn you about something.",\
|
||||
"Someone just walked over your grave.",\
|
||||
"There's a strange feeling in the air.",\
|
||||
"There's a strange smell in the air.",\
|
||||
"The tips of your fingers feel tingly.",\
|
||||
"You feel witchy.",\
|
||||
"You have a terrible sense of foreboding.",\
|
||||
"You've got a bad feeling about this.",\
|
||||
"Your scalp prickles.",\
|
||||
"The light seems to flicker.",\
|
||||
"The shadows seem to lengthen.",\
|
||||
"The walls are getting closer.",\
|
||||
"Something is wrong")
|
||||
|
||||
var/list/drastic_messages = list("You've got to get out of here!",\
|
||||
"Someone's trying to kill you!",\
|
||||
"There's something out there!",\
|
||||
"What's happening to you?",\
|
||||
"OH GOD!",\
|
||||
"HELP ME!")
|
||||
|
||||
/datum/artifact_effect/badfeeling/DoEffectTouch(var/mob/living/user)
|
||||
if(!user.isSynthetic())
|
||||
if(prob(50))
|
||||
if(prob(75))
|
||||
to_chat(user, "<b><font color='red' size='[num2text(rand(1,5))]'>[pick(drastic_messages)]</b></font>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>[pick(messages)]</span>")
|
||||
|
||||
if(prob(50))
|
||||
user.dizziness = max(user.dizziness, rand(105, 200))
|
||||
|
||||
/datum/artifact_effect/badfeeling/DoEffectAura()
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for(var/mob/living/carbon/human/H in range(effectrange,T))
|
||||
if(H.isSynthetic())
|
||||
continue
|
||||
if(prob(5))
|
||||
if(prob(75))
|
||||
to_chat(H, "<span class='warning'>[pick(messages)]</span>")
|
||||
else
|
||||
to_chat(H, "<font color='red' size='[num2text(rand(1,5))]'><b>[pick(drastic_messages)]</b></font>")
|
||||
|
||||
if(prob(10))
|
||||
H.dizziness += rand(3,5)
|
||||
return TRUE
|
||||
|
||||
/datum/artifact_effect/badfeeling/DoEffectPulse()
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for(var/mob/living/carbon/human/H in range(effectrange,T))
|
||||
if(H.isSynthetic())
|
||||
continue
|
||||
if(prob(50))
|
||||
if(prob(95))
|
||||
to_chat(H, "<font color='red' size='[num2text(rand(1,5))]'><b>[pick(drastic_messages)]</b></font>")
|
||||
else
|
||||
to_chat(H, "<span class='warning'>[pick(messages)]</span>")
|
||||
if(prob(50))
|
||||
H.dizziness += rand(3,5)
|
||||
else if(prob(25))
|
||||
H.dizziness += rand(5,15)
|
||||
return TRUE
|
||||
|
||||
|
||||
/datum/artifact_effect/goodfeeling
|
||||
effecttype = "goodfeeling"
|
||||
effect_type = 2
|
||||
var/list/messages = list("You feel good.",\
|
||||
"Everything seems to be going alright",\
|
||||
"You've got a good feeling about this",\
|
||||
"Your instincts tell you everything is going to be getting better.",\
|
||||
"There's a good feeling in the air.",\
|
||||
"Something smells... good.",\
|
||||
"The tips of your fingers feel tingly.",\
|
||||
"You've got a good feeling about this.",\
|
||||
"You feel happy.",\
|
||||
"You fight the urge to smile.",\
|
||||
"Your scalp prickles.",\
|
||||
"All the colours seem a bit more vibrant.",\
|
||||
"Everything seems a little lighter.",\
|
||||
"The troubles of the world seem to fade away.")
|
||||
|
||||
var/list/drastic_messages = list("You want to hug everyone you meet!",\
|
||||
"Everything is going so well!",\
|
||||
"You feel euphoric.",\
|
||||
"You feel giddy.",\
|
||||
"You're so happy suddenly, you almost want to dance and sing.",\
|
||||
"You feel like the world is out to help you.")
|
||||
|
||||
/datum/artifact_effect/goodfeeling/DoEffectTouch(var/mob/living/user)
|
||||
if(ishuman(user) && !user.isSynthetic())
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(prob(50))
|
||||
if(prob(75))
|
||||
to_chat(H, "<b><font color='blue' size='[num2text(rand(1,5))]'>[pick(drastic_messages)]</b></font>")
|
||||
else
|
||||
to_chat(H, "<span class='notice'>[pick(messages)]</span>")
|
||||
|
||||
if(prob(50))
|
||||
H.dizziness += rand(3,5)
|
||||
|
||||
/datum/artifact_effect/goodfeeling/DoEffectAura()
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for(var/mob/living/carbon/human/H in range(effectrange,T))
|
||||
if(H.isSynthetic())
|
||||
continue
|
||||
if(prob(5))
|
||||
if(prob(75))
|
||||
to_chat(H, "<span class='notice'>[pick(messages)]</span>")
|
||||
else
|
||||
to_chat(H, "<font color='blue' size='[num2text(rand(1,5))]'><b>[pick(drastic_messages)]</b></font>")
|
||||
|
||||
if(prob(5))
|
||||
H.dizziness += rand(3,5)
|
||||
return TRUE
|
||||
|
||||
/datum/artifact_effect/goodfeeling/DoEffectPulse()
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for(var/mob/living/carbon/human/H in range(effectrange,T))
|
||||
if(H.isSynthetic())
|
||||
continue
|
||||
if(prob(50))
|
||||
if(prob(95))
|
||||
to_chat(H, "<font color='blue' size='[num2text(rand(1,5))]'><b>[pick(drastic_messages)]</b></font>")
|
||||
else
|
||||
to_chat(H, "<span class='notice'>[pick(messages)]</span>")
|
||||
|
||||
if(prob(50))
|
||||
H.dizziness += rand(3,5)
|
||||
else if(prob(25))
|
||||
H.dizziness += rand(5,15)
|
||||
return TRUE
|
||||
|
||||
//Artifact makes you see things. Only carbon-level mobs and above experience hallucinations
|
||||
/datum/artifact_effect/hallucination
|
||||
effecttype = "hallucination"
|
||||
effect_type = 2
|
||||
var/strength = 1
|
||||
|
||||
/datum/artifact_effect/hallucination/New()
|
||||
..()
|
||||
strength = rand(1, 3)
|
||||
|
||||
/datum/artifact_effect/hallucination/DoEffectTouch(var/mob/living/user)
|
||||
if(iscarbon(user) && !user.isSynthetic())
|
||||
var/mob/living/carbon/C = user
|
||||
var/weakness = GetAnomalySusceptibility(C)
|
||||
if(prob(weakness * 100))
|
||||
C.hallucination = max(strength * 20, C.hallucination + (strength * 10))
|
||||
to_chat(C, "<b>You touch \the [src],</b> [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(5))
|
||||
C.dizziness += rand(110,150)
|
||||
|
||||
/datum/artifact_effect/hallucination/DoEffectAura()
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for(var/mob/living/carbon/C in range(effectrange,T))
|
||||
if(C.isSynthetic())
|
||||
continue
|
||||
var/weakness = GetAnomalySusceptibility(C)
|
||||
if(prob(weakness * 100))
|
||||
C.hallucination = max(strength * 5, C.hallucination + strength) //Constantly creeps up
|
||||
return TRUE
|
||||
|
||||
/datum/artifact_effect/hallucination/DoEffectPulse()
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for(var/mob/living/carbon/C in range(effectrange,T))
|
||||
if(C.isSynthetic())
|
||||
continue
|
||||
var/weakness = GetAnomalySusceptibility(C)
|
||||
if(prob(weakness * 100))
|
||||
C.hallucination = max(strength * 5, C.hallucination + strength) //Creeps up slower than a constant aura, but the bursts cause dizziness
|
||||
if(prob(20))
|
||||
C.dizziness += rand(50,75)
|
||||
|
||||
return TRUE
|
||||
@@ -0,0 +1,340 @@
|
||||
//Effects that affect crew/bots physically, such as harming, healing, status effects, etc.
|
||||
|
||||
/datum/artifact_effect/heal
|
||||
effecttype = "heal"
|
||||
effect_type = 5
|
||||
|
||||
/datum/artifact_effect/heal/DoEffectTouch(var/mob/living/toucher)
|
||||
//todo: check over this properly
|
||||
if(!toucher.isSynthetic() && iscarbon(toucher))
|
||||
var/weakness = GetAnomalySusceptibility(toucher)
|
||||
if(prob(weakness * 100))
|
||||
var/mob/living/carbon/C = toucher
|
||||
to_chat(C, SPAN_NOTICE("You feel a soothing energy invigorate you."))
|
||||
|
||||
if(ishuman(toucher))
|
||||
var/mob/living/carbon/human/H = toucher
|
||||
for(var/obj/item/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(/decl/reagent/blood,5, temperature = H.species?.body_temperature)
|
||||
H.adjustNutritionLoss(-50 * weakness)
|
||||
H.adjustHydrationLoss(-50 * weakness)
|
||||
H.adjustBrainLoss(-25 * weakness)
|
||||
H.apply_radiation(-1*min(H.total_radiation, 25 * weakness))
|
||||
H.bodytemperature = initial(H.bodytemperature)
|
||||
H.fixblood()
|
||||
//
|
||||
C.adjustOxyLoss(-25 * weakness)
|
||||
C.adjustToxLoss(-25 * weakness)
|
||||
C.adjustBruteLoss(-25 * weakness)
|
||||
C.adjustFireLoss(-25 * weakness)
|
||||
//
|
||||
C.regenerate_icons()
|
||||
return TRUE
|
||||
|
||||
/datum/artifact_effect/heal/DoEffectAura()
|
||||
//todo: check over this properly
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for(var/mob/living/carbon/C in range(effectrange,T))
|
||||
if(C.isSynthetic())
|
||||
continue
|
||||
var/weakness = GetAnomalySusceptibility(C)
|
||||
if(prob(weakness * 100))
|
||||
if(prob(10))
|
||||
to_chat(C, "<span class='notice'>You feel a soothing energy radiating from something nearby.</span>")
|
||||
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()
|
||||
//todo: check over this properly
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for(var/mob/living/carbon/C in range(effectrange,T))
|
||||
if(C.isSynthetic())
|
||||
continue
|
||||
var/weakness = GetAnomalySusceptibility(C)
|
||||
if(prob(weakness * 100))
|
||||
to_chat(C, "<span class='notice'>A wave of energy invigorates you.</span>")
|
||||
C.adjustBruteLoss(-5 * weakness)
|
||||
C.adjustFireLoss(-5 * weakness)
|
||||
C.adjustToxLoss(-5 * weakness)
|
||||
C.adjustOxyLoss(-5 * weakness)
|
||||
C.adjustBrainLoss(-5 * weakness)
|
||||
C.updatehealth()
|
||||
|
||||
|
||||
/datum/artifact_effect/hurt
|
||||
effecttype = I_HURT
|
||||
effect_type = 5
|
||||
|
||||
/datum/artifact_effect/hurt/DoEffectTouch(var/mob/living/toucher)
|
||||
if(!toucher.isSynthetic())
|
||||
var/weakness = GetAnomalySusceptibility(toucher)
|
||||
if(iscarbon(toucher) && prob(weakness * 100))
|
||||
var/mob/living/carbon/C = toucher
|
||||
to_chat(C, "<span class='danger'>A painful discharge of energy strikes you!</span>")
|
||||
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.apply_damage(25 * weakness, IRRADIATE, damage_flags = DAM_DISPERSED)
|
||||
C.adjustNutritionLoss(50 * weakness)
|
||||
C.adjustHydrationLoss(50 * weakness)
|
||||
C.make_dizzy(6 * weakness)
|
||||
C.weakened += 6 * weakness
|
||||
|
||||
/datum/artifact_effect/hurt/DoEffectAura()
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for (var/mob/living/carbon/C in range(effectrange,T))
|
||||
if(C.isSynthetic())
|
||||
continue
|
||||
var/weakness = GetAnomalySusceptibility(C)
|
||||
if(prob(weakness * 100))
|
||||
if(prob(10))
|
||||
to_chat(C, "<span class='danger'>You feel a painful force radiating from something nearby.</span>")
|
||||
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)
|
||||
var/turf/T = get_turf(holder)
|
||||
for(var/mob/living/carbon/C in range(effectrange, T))
|
||||
if(C.isSynthetic())
|
||||
continue
|
||||
var/weakness = GetAnomalySusceptibility(C)
|
||||
if(prob(weakness * 100))
|
||||
to_chat(C, "<span class='danger'>A wave of painful energy strikes you!</span>")
|
||||
C.adjustBruteLoss(3 * weakness)
|
||||
C.adjustFireLoss(3 * weakness)
|
||||
C.adjustToxLoss(3 * weakness)
|
||||
C.adjustOxyLoss(3 * weakness)
|
||||
C.adjustBrainLoss(3 * weakness)
|
||||
C.updatehealth()
|
||||
|
||||
|
||||
/datum/artifact_effect/roboheal
|
||||
effecttype = "roboheal"
|
||||
var/last_message
|
||||
|
||||
/datum/artifact_effect/roboheal/New()
|
||||
..()
|
||||
effect_type = pick(3,4)
|
||||
|
||||
/datum/artifact_effect/roboheal/DoEffectTouch(var/mob/living/user)
|
||||
if(user.isSynthetic())
|
||||
to_chat(user, SPAN_NOTICE("Your systems report damaged components mending by themselves!"))
|
||||
user.adjustBruteLoss(rand(-10,-30))
|
||||
user.adjustFireLoss(rand(-10,-30))
|
||||
return TRUE
|
||||
|
||||
/datum/artifact_effect/roboheal/DoEffectAura()
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for(var/mob/living/M in range(effectrange,T))
|
||||
if(!M.isSynthetic())
|
||||
continue
|
||||
if(world.time - last_message > 200)
|
||||
to_chat(M, SPAN_NOTICE("Your systems report damaged components mending by themselves!"))
|
||||
last_message = world.time
|
||||
M.adjustBruteLoss(-1)
|
||||
M.adjustFireLoss(-1)
|
||||
M.updatehealth()
|
||||
return TRUE
|
||||
|
||||
/datum/artifact_effect/roboheal/DoEffectPulse()
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for(var/mob/living/M in range(effectrange,T))
|
||||
if(!M.isSynthetic())
|
||||
continue
|
||||
if(world.time - last_message > 200)
|
||||
to_chat(M, SPAN_NOTICE("Diagnostics Alert: Structural damage has been repaired by energy pulse!"))
|
||||
last_message = world.time
|
||||
M.adjustBruteLoss(-10)
|
||||
M.adjustFireLoss(-10)
|
||||
M.updatehealth()
|
||||
return TRUE
|
||||
|
||||
/datum/artifact_effect/robohurt
|
||||
effecttype = "robohurt"
|
||||
var/last_message
|
||||
|
||||
/datum/artifact_effect/robohurt/New()
|
||||
..()
|
||||
effect_type = pick(3,4)
|
||||
|
||||
/datum/artifact_effect/robohurt/DoEffectTouch(var/mob/living/user)
|
||||
if(user.isSynthetic())
|
||||
to_chat(user, SPAN_WARNING("Your systems report severe damage has been inflicted!"))
|
||||
user.adjustBruteLoss(rand(10,50))
|
||||
user.adjustFireLoss(rand(10,50))
|
||||
return TRUE
|
||||
|
||||
/datum/artifact_effect/robohurt/DoEffectAura()
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for(var/mob/living/M in range(effectrange,T))
|
||||
if(!M.isSynthetic())
|
||||
continue
|
||||
if(world.time - last_message > 200)
|
||||
to_chat(M, SPAN_WARNING("Your systems report severe damage has been inflicted!"))
|
||||
last_message = world.time
|
||||
M.adjustBruteLoss(1)
|
||||
M.adjustFireLoss(1)
|
||||
M.updatehealth()
|
||||
return TRUE
|
||||
|
||||
/datum/artifact_effect/robohurt/DoEffectPulse()
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for (var/mob/living/M in range(effectrange,T))
|
||||
if(!M.isSynthetic())
|
||||
continue
|
||||
if(world.time - last_message > 200)
|
||||
to_chat(M, SPAN_WARNING("Your systems report severe damage has been inflicted!"))
|
||||
last_message = world.time
|
||||
M.adjustBruteLoss(10)
|
||||
M.adjustFireLoss(10)
|
||||
M.updatehealth()
|
||||
return TRUE
|
||||
|
||||
/datum/artifact_effect/sleepy
|
||||
effecttype = "sleepy"
|
||||
|
||||
/datum/artifact_effect/sleepy/New()
|
||||
..()
|
||||
effect_type = pick(5,2)
|
||||
|
||||
/datum/artifact_effect/sleepy/DoEffectTouch(var/mob/living/toucher)
|
||||
if(toucher)
|
||||
var/weakness = GetAnomalySusceptibility(toucher)
|
||||
if(!toucher.isSynthetic())
|
||||
if(ishuman(toucher) && prob(weakness * 100))
|
||||
var/mob/living/carbon/human/H = toucher
|
||||
to_chat(H, pick("<span class='notice'>You feel like taking a nap.</span>","<span class='notice'>You feel a yawn coming on.</span>","<span class='notice'>You feel a little tired.</span>"))
|
||||
H.drowsyness = min(H.drowsyness + rand(5,25) * weakness, 50 * weakness)
|
||||
H.eye_blurry = min(H.eye_blurry + rand(1,3) * weakness, 50 * weakness)
|
||||
else
|
||||
to_chat(toucher, SPAN_WARNING("SYSTEM ALERT: CPU cycles slowing down!"))
|
||||
return TRUE
|
||||
|
||||
/datum/artifact_effect/sleepy/DoEffectAura()
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for(var/mob/living/L in range(effectrange,T))
|
||||
if(L.isSynthetic())
|
||||
to_chat(L, SPAN_WARNING("SYSTEM ALERT: CPU cycles slowing down!"))
|
||||
continue
|
||||
else if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
var/weakness = GetAnomalySusceptibility(H)
|
||||
if(prob(weakness * 100))
|
||||
if(prob(10))
|
||||
to_chat(H, pick("<span class='notice'>You feel like taking a nap.</span>","<span class='notice'>You feel a yawn coming on.</span>","<span class='notice'>You feel a little tired.</span>"))
|
||||
H.drowsyness = min(H.drowsyness + 1 * weakness, 25 * weakness)
|
||||
H.eye_blurry = min(H.eye_blurry + 1 * weakness, 25 * weakness)
|
||||
return TRUE
|
||||
|
||||
/datum/artifact_effect/sleepy/DoEffectPulse()
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for(var/mob/living/L in range(effectrange,T))
|
||||
if(L.isSynthetic())
|
||||
to_chat(L, SPAN_WARNING("SYSTEM ALERT: CPU cycles slowing down!"))
|
||||
continue
|
||||
else if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
var/weakness = GetAnomalySusceptibility(H)
|
||||
if(prob(weakness * 100))
|
||||
to_chat(H, pick("<span class='notice'>You feel like taking a nap.</span>","<span class='notice'>You feel a yawn coming on.</span>","<span class='notice'>You feel a little tired.</span>"))
|
||||
H.drowsyness = min(H.drowsyness + rand(5,15) * weakness, 50 * weakness)
|
||||
H.eye_blurry = min(H.eye_blurry + rand(5,15) * weakness, 50 * weakness)
|
||||
|
||||
return TRUE
|
||||
|
||||
/datum/artifact_effect/stun
|
||||
effecttype = "stun"
|
||||
|
||||
/datum/artifact_effect/stun/New()
|
||||
..()
|
||||
effect_type = pick(2,5)
|
||||
|
||||
/datum/artifact_effect/stun/DoEffectTouch(var/mob/living/toucher)
|
||||
if(iscarbon(toucher))
|
||||
var/mob/living/carbon/C = toucher
|
||||
var/susceptibility = GetAnomalySusceptibility(C)
|
||||
if(prob(susceptibility * 100))
|
||||
to_chat(C, "<span class='warning'>A powerful force overwhelms your consciousness.</span>")
|
||||
C.Weaken(rand(1,10) * susceptibility)
|
||||
C.stuttering += 30 * susceptibility
|
||||
C.Stun(rand(1,10) * susceptibility)
|
||||
|
||||
/datum/artifact_effect/stun/DoEffectAura()
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for (var/mob/living/carbon/C in range(effectrange,T))
|
||||
var/susceptibility = GetAnomalySusceptibility(C)
|
||||
if(prob(10 * susceptibility))
|
||||
to_chat(C, "<span class='warning'>Your body goes numb for a moment.</span>")
|
||||
C.Weaken(2)
|
||||
C.stuttering += 2
|
||||
if(prob(10))
|
||||
C.Stun(1)
|
||||
else if(prob(10))
|
||||
to_chat(C, "<span class='warning'>You feel numb.</span>")
|
||||
|
||||
/datum/artifact_effect/stun/DoEffectPulse()
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for (var/mob/living/carbon/C in range(effectrange,T))
|
||||
var/susceptibility = GetAnomalySusceptibility(C)
|
||||
if(prob(100 * susceptibility))
|
||||
to_chat(C, "<span class='warning'>A wave of energy overwhelms your senses!</span>")
|
||||
C.SetWeakened(4 * susceptibility)
|
||||
C.stuttering = 4 * susceptibility
|
||||
if(prob(10))
|
||||
C.SetStunned(1 * susceptibility)
|
||||
|
||||
/datum/artifact_effect/radiate
|
||||
effecttype = "radiate"
|
||||
var/radiation_amount
|
||||
|
||||
/datum/artifact_effect/radiate/New()
|
||||
..()
|
||||
radiation_amount = rand(1, 10)
|
||||
effect_type = pick(4,5)
|
||||
|
||||
/datum/artifact_effect/radiate/DoEffectTouch(var/mob/living/user)
|
||||
if(user)
|
||||
user.apply_effect(radiation_amount * 5,IRRADIATE,0)
|
||||
user.updatehealth()
|
||||
return TRUE
|
||||
|
||||
/datum/artifact_effect/radiate/DoEffectAura()
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for (var/mob/living/M in range(src.effectrange,T))
|
||||
M.apply_effect(radiation_amount,IRRADIATE,0)
|
||||
M.updatehealth()
|
||||
return TRUE
|
||||
|
||||
/datum/artifact_effect/radiate/DoEffectPulse()
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for (var/mob/living/M in range(src.effectrange,T))
|
||||
M.apply_damage(radiation_amount * 25, IRRADIATE, damage_flags = DAM_DISPERSED)
|
||||
M.updatehealth()
|
||||
return TRUE
|
||||
@@ -1,31 +0,0 @@
|
||||
|
||||
/datum/artifact_effect/radiate
|
||||
effecttype = "radiate"
|
||||
var/radiation_amount
|
||||
|
||||
/datum/artifact_effect/radiate/New()
|
||||
..()
|
||||
radiation_amount = rand(1, 10)
|
||||
effect_type = pick(4,5)
|
||||
|
||||
/datum/artifact_effect/radiate/DoEffectTouch(var/mob/living/user)
|
||||
if(user)
|
||||
user.apply_effect(radiation_amount * 5,IRRADIATE,0)
|
||||
user.updatehealth()
|
||||
return 1
|
||||
|
||||
/datum/artifact_effect/radiate/DoEffectAura()
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for (var/mob/living/M in range(src.effectrange,T))
|
||||
M.apply_effect(radiation_amount,IRRADIATE,0)
|
||||
M.updatehealth()
|
||||
return 1
|
||||
|
||||
/datum/artifact_effect/radiate/DoEffectPulse()
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for (var/mob/living/M in range(src.effectrange,T))
|
||||
M.apply_damage(radiation_amount * 25, IRRADIATE, damage_flags = DAM_DISPERSED)
|
||||
M.updatehealth()
|
||||
return 1
|
||||
@@ -1,41 +0,0 @@
|
||||
|
||||
/datum/artifact_effect/roboheal
|
||||
effecttype = "roboheal"
|
||||
var/last_message
|
||||
|
||||
/datum/artifact_effect/roboheal/New()
|
||||
..()
|
||||
effect_type = pick(3,4)
|
||||
|
||||
/datum/artifact_effect/roboheal/DoEffectTouch(var/mob/user)
|
||||
if(user)
|
||||
if (istype(user, /mob/living/silicon/robot))
|
||||
var/mob/living/silicon/robot/R = user
|
||||
to_chat(R, "<span class='notice'>Your systems report damaged components mending by themselves!</span>")
|
||||
R.adjustBruteLoss(rand(-10,-30))
|
||||
R.adjustFireLoss(rand(-10,-30))
|
||||
return 1
|
||||
|
||||
/datum/artifact_effect/roboheal/DoEffectAura()
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for (var/mob/living/silicon/robot/M in range(src.effectrange,T))
|
||||
if(world.time - last_message > 200)
|
||||
to_chat(M, "<span class='notice'>SYSTEM ALERT: Beneficial energy field detected!</span>")
|
||||
last_message = world.time
|
||||
M.adjustBruteLoss(-1)
|
||||
M.adjustFireLoss(-1)
|
||||
M.updatehealth()
|
||||
return 1
|
||||
|
||||
/datum/artifact_effect/roboheal/DoEffectPulse()
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for (var/mob/living/silicon/robot/M in range(src.effectrange,T))
|
||||
if(world.time - last_message > 200)
|
||||
to_chat(M, "<span class='notice'>SYSTEM ALERT: Structural damage has been repaired by energy pulse!</span>")
|
||||
last_message = world.time
|
||||
M.adjustBruteLoss(-10)
|
||||
M.adjustFireLoss(-10)
|
||||
M.updatehealth()
|
||||
return 1
|
||||
@@ -1,41 +0,0 @@
|
||||
|
||||
/datum/artifact_effect/robohurt
|
||||
effecttype = "robohurt"
|
||||
var/last_message
|
||||
|
||||
/datum/artifact_effect/robohurt/New()
|
||||
..()
|
||||
effect_type = pick(3,4)
|
||||
|
||||
/datum/artifact_effect/robohurt/DoEffectTouch(var/mob/user)
|
||||
if(user)
|
||||
if (istype(user, /mob/living/silicon/robot))
|
||||
var/mob/living/silicon/robot/R = user
|
||||
to_chat(R, "<span class='warning'>Your systems report severe damage has been inflicted!</span>")
|
||||
R.adjustBruteLoss(rand(10,50))
|
||||
R.adjustFireLoss(rand(10,50))
|
||||
return 1
|
||||
|
||||
/datum/artifact_effect/robohurt/DoEffectAura()
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for (var/mob/living/silicon/robot/M in range(src.effectrange,T))
|
||||
if(world.time - last_message > 200)
|
||||
to_chat(M, "<span class='warning'>SYSTEM ALERT: Harmful energy field detected!</span>")
|
||||
last_message = world.time
|
||||
M.adjustBruteLoss(1)
|
||||
M.adjustFireLoss(1)
|
||||
M.updatehealth()
|
||||
return 1
|
||||
|
||||
/datum/artifact_effect/robohurt/DoEffectPulse()
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for (var/mob/living/silicon/robot/M in range(src.effectrange,T))
|
||||
if(world.time - last_message > 200)
|
||||
to_chat(M, "<span class='warning'>SYSTEM ALERT: Structural damage inflicted by energy pulse!</span>")
|
||||
last_message = world.time
|
||||
M.adjustBruteLoss(10)
|
||||
M.adjustFireLoss(10)
|
||||
M.updatehealth()
|
||||
return 1
|
||||
@@ -1,48 +0,0 @@
|
||||
|
||||
//todo
|
||||
/datum/artifact_effect/sleepy
|
||||
effecttype = "sleepy"
|
||||
|
||||
/datum/artifact_effect/sleepy/New()
|
||||
..()
|
||||
effect_type = pick(5,2)
|
||||
|
||||
/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
|
||||
to_chat(H, pick("<span class='notice'>You feel like taking a nap.</span>","<span class='notice'>You feel a yawn coming on.</span>","<span class='notice'>You feel a little tired.</span>"))
|
||||
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(isrobot(toucher))
|
||||
to_chat(toucher, "<span class='warning'>SYSTEM ALERT: CPU cycles slowing down.</span>")
|
||||
return 1
|
||||
|
||||
/datum/artifact_effect/sleepy/DoEffectAura()
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for (var/mob/living/carbon/human/H in range(src.effectrange,T))
|
||||
var/weakness = GetAnomalySusceptibility(H)
|
||||
if(prob(weakness * 100))
|
||||
if(prob(10))
|
||||
to_chat(H, pick("<span class='notice'>You feel like taking a nap.</span>","<span class='notice'>You feel a yawn coming on.</span>","<span class='notice'>You feel a little tired.</span>"))
|
||||
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))
|
||||
to_chat(R, "<span class='warning'>SYSTEM ALERT: CPU cycles slowing down.</span>")
|
||||
return 1
|
||||
|
||||
/datum/artifact_effect/sleepy/DoEffectPulse()
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for(var/mob/living/carbon/human/H in range(src.effectrange, T))
|
||||
var/weakness = GetAnomalySusceptibility(H)
|
||||
if(prob(weakness * 100))
|
||||
to_chat(H, pick("<span class='notice'>You feel like taking a nap.</span>","<span class='notice'>You feel a yawn coming on.</span>","<span class='notice'>You feel a little tired.</span>"))
|
||||
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))
|
||||
to_chat(R, "<span class='warning'>SYSTEM ALERT: CPU cycles slowing down.</span>")
|
||||
return 1
|
||||
@@ -1,43 +0,0 @@
|
||||
|
||||
/datum/artifact_effect/stun
|
||||
effecttype = "stun"
|
||||
|
||||
/datum/artifact_effect/stun/New()
|
||||
..()
|
||||
effect_type = pick(2,5)
|
||||
|
||||
/datum/artifact_effect/stun/DoEffectTouch(var/mob/toucher)
|
||||
if(toucher && iscarbon(toucher))
|
||||
var/mob/living/carbon/C = toucher
|
||||
var/susceptibility = GetAnomalySusceptibility(C)
|
||||
if(prob(susceptibility * 100))
|
||||
to_chat(C, "<span class='warning'>A powerful force overwhelms your consciousness.</span>")
|
||||
C.Weaken(rand(1,10) * susceptibility)
|
||||
C.stuttering += 30 * susceptibility
|
||||
C.Stun(rand(1,10) * susceptibility)
|
||||
|
||||
/datum/artifact_effect/stun/DoEffectAura()
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for (var/mob/living/carbon/C in range(src.effectrange,T))
|
||||
var/susceptibility = GetAnomalySusceptibility(C)
|
||||
if(prob(10 * susceptibility))
|
||||
to_chat(C, "<span class='warning'>Your body goes numb for a moment.</span>")
|
||||
C.Weaken(2)
|
||||
C.stuttering += 2
|
||||
if(prob(10))
|
||||
C.Stun(1)
|
||||
else if(prob(10))
|
||||
to_chat(C, "<span class='warning'>You feel numb.</span>")
|
||||
|
||||
/datum/artifact_effect/stun/DoEffectPulse()
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for (var/mob/living/carbon/C in range(src.effectrange,T))
|
||||
var/susceptibility = GetAnomalySusceptibility(C)
|
||||
if(prob(100 * susceptibility))
|
||||
to_chat(C, "<span class='warning'>A wave of energy overwhelms your senses!</span>")
|
||||
C.SetWeakened(4 * susceptibility)
|
||||
C.stuttering = 4 * susceptibility
|
||||
if(prob(10))
|
||||
C.SetStunned(1 * susceptibility)
|
||||
@@ -3,7 +3,7 @@
|
||||
effecttype = "teleport"
|
||||
effect_type = 6
|
||||
|
||||
/datum/artifact_effect/teleport/DoEffectTouch(var/mob/user)
|
||||
/datum/artifact_effect/teleport/DoEffectTouch(var/mob/living/user)
|
||||
var/weakness = GetAnomalySusceptibility(user)
|
||||
if(prob(100 * weakness))
|
||||
to_chat(user, SPAN_ALERT("You are suddenly zapped away elsewhere!"))
|
||||
@@ -19,7 +19,7 @@
|
||||
/datum/artifact_effect/teleport/DoEffectAura()
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for (var/mob/living/M in range(src.effectrange,T))
|
||||
for (var/mob/living/M in range(effectrange,T))
|
||||
var/weakness = GetAnomalySusceptibility(M)
|
||||
if(prob(100 * weakness))
|
||||
to_chat(M, SPAN_ALERT("You are displaced by a strange force!"))
|
||||
@@ -35,7 +35,7 @@
|
||||
/datum/artifact_effect/teleport/DoEffectPulse()
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for (var/mob/living/M in range(src.effectrange, T))
|
||||
for (var/mob/living/M in range(effectrange, T))
|
||||
var/weakness = GetAnomalySusceptibility(M)
|
||||
if(prob(100 * weakness))
|
||||
to_chat(M, SPAN_ALERT("You are displaced by a strange force!"))
|
||||
|
||||
Reference in New Issue
Block a user