Xenoarch Adjustments (#11567)

This commit is contained in:
Doxxmedearly
2021-04-06 17:22:15 -05:00
committed by GitHub
parent 661786f4ef
commit 843b785c3a
30 changed files with 806 additions and 699 deletions

View File

@@ -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))

View File

@@ -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()

View File

@@ -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)

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -11,4 +11,4 @@
if(holder)
var/turf/T = get_turf(holder)
empulse(T, effectrange/1, effectrange)
return 1
return TRUE

View File

@@ -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()))

View File

@@ -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()))

View File

@@ -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()))

View File

@@ -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()))

View File

@@ -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()))

View File

@@ -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

View File

@@ -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()

View File

@@ -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)

View File

@@ -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()

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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!"))