Initial Commit

This commit is contained in:
Tobba
2016-03-06 20:52:14 +01:00
commit b181d0b552
4325 changed files with 579453 additions and 0 deletions
@@ -0,0 +1,223 @@
// base
/datum/artifact/bomb
associated_object = null
rarity_class = 0
validtypes = list("ancient","eldritch","precursor")
validtriggers = list(/datum/artifact_trigger/force,/datum/artifact_trigger/electric,/datum/artifact_trigger/heat,
/datum/artifact_trigger/cold,/datum/artifact_trigger/radiation)
react_xray = list(12,75,30,11,"COMPLEX")
var/explode_delay = 600
var/dud = 0
var/warning_initial = "begins catastrophically overloading!"
var/warning_final = "reaches critical energy levels!"
var/text_disarmed = "goes quiet."
var/text_dud = "sputters and rattles a bit, then falls quiet."
var/flascustomization_first_color = "#FF0000"
var/sound/alarm_initial = 'sound/machines/lavamoon_plantalarm.ogg'
var/sound/alarm_final = 'sound/machines/engine_alert1.ogg'
examine_hint = "It is covered in very conspicuous markings."
New()
..()
src.react_heat[2] = "VOLATILE REACTION DETECTED"
if (artitype != "eldritch" && prob(5))
dud = 1
effect_activate(var/obj/O)
if (..())
return
if (explode_delay < 1)
deploy_payload(O)
return
var/turf/T = get_turf(O)
if (warning_initial)
T.visible_message("<b>[O] [warning_initial]</b>")
if (alarm_initial)
playsound(T, alarm_initial, 50, 1, -1)
spawn(src.explode_delay)
if (warning_final)
T.visible_message("<b>[O] [warning_final]</b>")
if (alarm_final)
playsound(T, alarm_final, 50, 1, -1)
animate_flash_color_fill(O,flascustomization_first_color,10,3)
spawn(30)
if (src.activated)
deploy_payload(O)
else
T.visible_message("<b>[O] [text_disarmed]")
proc/deploy_payload(var/obj/O)
if (!O)
return 1
if (dud)
var/turf/T = get_turf(O)
T.visible_message("<b>[O] [text_dud]")
O.ArtifactDeactivated()
return 1
// Added (Convair880).
ArtifactLogs(usr, null, O, "detonated", null, 1)
return 0
// regular explosives
/obj/artifact/bomb
name = "artifact bomb"
associated_datum = /datum/artifact/bomb/explosive
/datum/artifact/bomb/explosive
associated_object = /obj/artifact/bomb
rarity_class = 3
var/exp_deva = 1
var/exp_hevy = 2
var/exp_lite = 3
New()
..()
src.exp_deva = rand(0,3)
src.exp_hevy = rand(3,6)
src.exp_lite = rand(6,9)
deploy_payload(var/obj/O)
if (..())
return
explosion(O, O.loc, src.exp_deva, src.exp_hevy, src.exp_lite, src.exp_lite * 2)
O.ArtifactDestroyed()
/obj/artifact/bomb/devastating
name = "artifact devastating bomb"
associated_datum = /datum/artifact/bomb/explosive/devastating
/datum/artifact/bomb/explosive/devastating
associated_object = /obj/artifact/bomb/devastating
rarity_class = 4
New()
..()
src.exp_deva *= rand(3,5)
src.exp_hevy *= rand(4,6)
src.exp_lite *= rand(5,7)
src.explode_delay *= 2
// black hole bomb
/obj/artifact/bomb/blackhole
name = "artifact black hole bomb"
associated_datum = /datum/artifact/bomb/blackhole
/datum/artifact/bomb/blackhole
associated_object = /obj/artifact/bomb/blackhole
rarity_class = 4
react_xray = list(12,75,30,11,"ULTRADENSE")
warning_initial = "begins intensifying its own gravity!"
warning_final = "begins to collapse in on itself!"
deploy_payload(var/obj/O)
if (..())
return
var/turf/T = get_turf(O)
playsound(T, "sound/machines/satcrash.ogg", 100, 0, 3, 0.8)
new /obj/bhole(O.loc,rand(100,300))
if (O)
O.ArtifactDestroyed()
// chemical bombs
/obj/artifact/bomb/chemical
name = "artifact chemical bomb"
associated_datum = /datum/artifact/bomb/chemical
New()
..()
var/datum/reagents/R = new/datum/reagents(10000)
reagents = R
R.my_atom = src
/datum/artifact/bomb/chemical
explode_delay = 0
react_xray = list(5,65,20,11,"HOLLOW")
validtypes = list("ancient","martian","eldritch","precursor")
validtriggers = list(/datum/artifact_trigger/force,/datum/artifact_trigger/heat,/datum/artifact_trigger/carbon_touch)
var/payload_type = 0 // 0 for smoke, 1 for foam
var/recharge_delay = 600
var/list/payload_reagents = list()
post_setup()
payload_type = rand(0,1)
var/list/potential_reagents = list()
switch(artitype)
if ("ancient")
// industrial heavy machinery kinda stuff
potential_reagents = list("nanites","liquid plasma","mercury","lithium","plasma","radium","uranium","napalm",
"thermite","fuel","acid","silicate","lube","cryostylane","oil")
if ("martian")
// medicine, some poisons, some gross stuff
potential_reagents = list("charcoal","stypic_powder","salbutamol","anti_rad","silver_sulfadiazine","synaptizine",
"omnizine","synthflesh","cyanide","sonambutril","toxin","neurotoxin","mutagen","fake_initropidril",
"toxic_slurry","jenkem","space_fungus","blood","vomit","gvomit","urine","meat_slurry","grease")
if ("eldritch")
// all the worst stuff. all of it
potential_reagents = list("chlorine","fluorine","lithium","mercury","plasma","radium","uranium","strange_reagent",
"napalm","thermite","infernite","foof","fuel","blackpowder","acid","amanitin","coniine","cyanide","curare",
"formaldehyde","lipolicide","initropidril","cholesterol","itching","pacid","pancuronium","polonium",
"sodium_thiopental","sonambutril","sulfonal","toxin","venom","neurotoxin","mutagen","wolfsbane",
"toxic_slurry","histamine","sarin")
else
// absolutely everything
potential_reagents = all_functional_reagent_ids
if (potential_reagents.len > 0)
var/looper = rand(2,8)
while (looper > 0)
looper--
payload_reagents += pick(potential_reagents)
recharge_delay = rand(200,800)
deploy_payload(var/obj/O)
if (..())
return
var/list/reaction_reagents = list()
for (var/X in payload_reagents)
reaction_reagents += X
if (payload_type)
reaction_reagents += "fluorosurfactant"
reaction_reagents += "water"
else
reaction_reagents += "potassium"
reaction_reagents += "sugar"
reaction_reagents += "phosphorus"
var/amountper = 0
if (reaction_reagents.len > 0)
amountper = round(O.reagents.maximum_volume / reaction_reagents.len)
else
amountper = 20
for (var/X in reaction_reagents)
O.reagents.add_reagent(X,amountper)
if (payload_type)
var/turf/location = get_turf(O)
var/datum/effects/system/foam_spread/s = new()
s.set_up(O.reagents.total_volume, location, O.reagents, 0)
s.start()
else
smoke_reaction(O.reagents, 4, get_turf(O))
O.reagents.clear_reagents()
spawn(recharge_delay)
if (O)
O.ArtifactDeactivated()
@@ -0,0 +1,62 @@
/obj/artifact/borgifier
name = "artifact human2cyborg converter"
associated_datum = /datum/artifact/borgifier
/datum/artifact/borgifier
associated_object = /obj/artifact/borgifier
rarity_class = 3
validtypes = list("ancient")
validtriggers = list(/datum/artifact_trigger/force,/datum/artifact_trigger/electric,/datum/artifact_trigger/heat,
/datum/artifact_trigger/radiation,/datum/artifact_trigger/carbon_touch)
activated = 0
react_xray = list(13,60,80,6,"COMPLEX")
touch_descriptors = list("You seem to have a little difficulty taking your hand off its surface.")
var/converting = 0
var/list/work_sounds = list('sound/effects/bloody_stab.ogg','sound/effects/clang.ogg','sound/effects/airbridge_dpl.ogg','sound/effects/splat.ogg','sound/misc/loudcrunch2.ogg','sound/effects/attackblob.ogg')
effect_touch(var/obj/O,var/mob/living/user)
if (..())
return
if (!user)
return
if (converting)
return
if (istype(user,/mob/living/carbon/human/))
O.visible_message("<span style=\"color:red\"><b>[O]</b> suddenly pulls [user.name] inside and slams shut!</span>")
user.emote("scream")
user.set_loc(O.loc)
converting = 1
var/loops = rand(10,20)
while (loops > 0)
loops--
random_brute_damage(user, 15)
user.paralysis = 5
playsound(user.loc, pick(work_sounds), 50, 1, -1)
sleep(4)
var/bdna = null // For forensics (Convair880).
var/btype = null
if (user.bioHolder.Uid && user.bioHolder.bloodType)
bdna = user.bioHolder.Uid
btype = user.bioHolder.bloodType
var/turf/T = find_loc(user)
gibs(T, null, null, bdna, btype)
ArtifactLogs(user, null, O, "touched", "robotizing user", 0) // Added (Convair880).
if (ismonkey(user))
user.ghostize()
var/robopath = pick(/obj/machinery/bot/guardbot,/obj/machinery/bot/secbot,
/obj/machinery/bot/medbot,/obj/machinery/bot/firebot,/obj/machinery/bot/cleanbot,
/obj/machinery/bot/floorbot)
new robopath (T)
qdel(user)
else
var/mob/living/carbon/human/M = user
M.Robotize_MK2(1)
score_cyborgsmade += 1
converting = 0
else if (istype(user,/mob/living/silicon/))
boutput(user, "<span style=\"color:red\">An imperious voice rings out in your head... \"<b>HUNT BIOLOGICALS FOR UPGRADING\"</span>")
else
return
@@ -0,0 +1,73 @@
/obj/artifact/container
name = "artifact sealed container"
associated_datum = /datum/artifact/container
New(var/loc, var/forceartitype)
..()
ArtifactActivated(var/mob/living/user as mob)
var/datum/artifact/A = src.artifact
if (A.activated)
return
A.activated = 1
playsound(src.loc, A.activ_sound, 100, 1)
src.overlays += A.fx_image
src.visible_message("<b>[src] seems like it has something inside it...</b>")
switch(rand(1,4))
if(1)
if(prob(5))
new/obj/item/artifact/activator_key(src)
else
new/obj/item/cell/artifact(src)
new/obj/item/cell/artifact(src)
new/obj/item/cell/artifact(src)
if(2)
if(prob(5))
new/obj/critter/domestic_bee/buddy(src)
new/obj/item/clothing/suit/bee(src)
else
new/obj/critter/domestic_bee_larva(src)
new/obj/critter/domestic_bee_larva(src)
new/obj/critter/domestic_bee_larva(src)
new/obj/critter/domestic_bee_larva(src)
new/obj/critter/domestic_bee_larva(src)
if(3)
if(prob(5))
new/obj/item/gimmickbomb/owlclothes(src)
new/obj/item/gimmickbomb/owlclothes(src)
new/obj/item/gimmickbomb/owlclothes(src)
new/obj/item/gimmickbomb/owlclothes(src)
new/obj/item/gimmickbomb/owlclothes(src)
else
new/obj/item/gimmickbomb/owlclothes(src)
if(4)
new/obj/item/old_grenade/light_gimmick(src)
/datum/artifact/container
associated_object = /obj/artifact/container
rarity_class = 1
validtypes = list("ancient","martian","wizard","eldritch","precursor")
validtriggers = list(/datum/artifact_trigger/force,/datum/artifact_trigger/electric,/datum/artifact_trigger/heat,
/datum/artifact_trigger/radiation,/datum/artifact_trigger/carbon_touch,/datum/artifact_trigger/silicon_touch)
activ_text = "deposits its contents on the ground."
deact_text = "ceases functioning."
react_xray = list(7,50,40,11,"HOLLOW")
New()
..()
src.react_heat[2] = "HIGH INTERNAL CONVECTION"
effect_touch(var/obj/O,var/mob/living/user)
if (..())
return
for(var/obj/I in O.contents)
I.set_loc(O.loc)
for(var/mob/N in viewers(O, null))
N.flash(30)
if(N.client)
shake_camera(N, 6, 4)
O.visible_message("<span style=\"color:red\"><b>With a blinding light [O] vanishes, leaving its contents behind.</b></span>")
playsound(O.loc, "sound/effects/warp2.ogg", 50, 1)
artifact_controls.artifacts -= src
qdel(O)
return
@@ -0,0 +1,53 @@
/obj/artifact/darkness_field
name = "artifact darkness field"
associated_datum = /datum/artifact/darkness_field
/datum/artifact/darkness_field
associated_object = /obj/artifact/darkness_field
rarity_class = 2
max_triggers = 3
validtypes = list("wizard","eldritch","precursor")
react_xray = list(15,90,90,11,"NONE")
var/field_radius = 0
var/field_time = 0
New()
..()
field_radius = rand(2,8)
if (prob(1))
field_radius *= 2
field_time = rand(300,1800)
effect_activate(var/obj/O)
if (..())
return
O.visible_message("<span style=\"color:red\"><b>[O]</b> emits a wave of absolute darkness!</span>")
O.anchored = 1
for(var/turf/T in circular_range(O,field_radius))
new /obj/darkness_field(T,field_time)
spawn(field_time)
if (O)
O.anchored = 0
O.ArtifactDeactivated()
return
/obj/darkness_field
name = ""
desc = ""
alpha = 0
icon = 'icons/turf/walls.dmi'
color = "#000000"
blend_mode = 1
anchored = 1
density = 0
opacity = 0
layer = NOLIGHT_EFFECTS_LAYER_BASE
mouse_opacity = 0
New(var/loc,var/duration)
..()
animate(src, time = 20, alpha = 255, easing = LINEAR_EASING)
spawn(duration)
animate(src, time = 20, alpha = 0, easing = LINEAR_EASING)
spawn(0)
qdel(src)
@@ -0,0 +1,55 @@
/obj/artifact/forcefield_generator
name = "artifact forcefield generator"
associated_datum = /datum/artifact/forcefield_gen
/datum/artifact/forcefield_gen
associated_object = /obj/artifact/forcefield_generator
rarity_class = 1
validtypes = list("wizard","eldritch","precursor")
validtriggers = list(/datum/artifact_trigger/force,/datum/artifact_trigger/carbon_touch,
/datum/artifact_trigger/silicon_touch)
activated = 0
activ_text = "comes to life, projecting out a wall of force!"
deact_text = "shuts down, causing the forcefield to vanish!"
react_xray = list(13,60,95,11,"NONE")
var/cooldown = 80
var/field_radius = 3
var/field_time = 80
var/icon_state = "shieldsparkles"
var/next_activate = 0
New()
..()
src.icon_state = pick("shieldsparkles","empdisable","greenglow","enshield","energyorb","forcewall","meteor_shield")
src.field_radius = rand(2,6) // forcefield radius
src.field_time = rand(15,1500) // forcefield duration
src.cooldown = rand(50, 1200)
src.activ_sound = pick('sound/effects/mag_forcewall.ogg','sound/effects/mag_warp.ogg','sound/effects/MagShieldUp.ogg')
src.deact_sound = pick('sound/effects/MagShieldDown.ogg','sound/effects/shielddown2.ogg','sound/effects/singsuck.ogg')
may_activate(var/obj/O)
if (!..())
return 0
if (ticker.round_elapsed_ticks < next_activate)
O.visible_message("<span style=\"color:red\">[O] emits a loud pop and lights up momentarily but nothing happens!</span>")
return 0
return 1
effect_activate(var/obj/O,var/mob/living/user)
if (..())
return
O.anchored = 1
var/turf/Aloc = get_turf(O)
var/list/forcefields = list()
for (var/turf/T in range(field_radius,Aloc))
if(get_dist(O,T) == field_radius)
var/obj/forcefield/wand/FF = new /obj/forcefield/wand(T,0,src.icon_state)
forcefields += FF
spawn(field_time)
for (var/obj/forcefield/F in forcefields)
forcefields -= F
qdel(F)
next_activate = ticker.round_elapsed_ticks + cooldown
if (O)
O.ArtifactDeactivated()
O.anchored = 0
@@ -0,0 +1,54 @@
/obj/artifact/healer_bio
name = "artifact carbon healer"
associated_datum = /datum/artifact/healer_bio
/datum/artifact/healer_bio
associated_object = /obj/artifact/healer_bio
rarity_class = 1
validtypes = list("martian","precursor")
validtriggers = list(/datum/artifact_trigger/force,/datum/artifact_trigger/electric,/datum/artifact_trigger/heat,
/datum/artifact_trigger/radiation,/datum/artifact_trigger/carbon_touch)
activated = 0
activ_text = "begins to pulse softly."
deact_text = "ceases pulsing."
react_xray = list(11,70,90,9,"NONE")
var/heal_amt = 20
var/field_range = 0
var/recharge_time = 600
var/recharging = 0
New()
..()
src.react_heat[2] = "SUPERFICIAL DAMAGE DETECTED"
if(prob(20))
src.field_range = rand(3,10) // range
src.heal_amt = rand(5,75) // amount of healing
src.recharge_time = rand(1,10) * 10
if(prob(5))
src.recharge_time = 0
effect_touch(var/obj/O,var/mob/living/user)
if (..())
return
if (!user)
return
var/turf/T = get_turf(O)
if (recharging)
boutput(user, "<span style=\"color:red\">The artifact pulses briefly, but nothing else happens.</span>")
return
if (recharge_time > 0)
recharging = 1
T.visible_message("<b>[O]</b> emits a wave of energy!")
if(istype(user,/mob/living/carbon/))
var/mob/living/carbon/C = user
C.HealDamage("All", heal_amt, heal_amt)
boutput(C, "<span style=\"color:blue\">Soothing energy saturates your body, making you feel refreshed and healthy.</span>")
if (field_range > 0)
for (var/mob/living/carbon/C in range(field_range,T))
if (C == user)
continue
C.HealDamage("All", heal_amt, heal_amt)
boutput(C, "<span style=\"color:blue\">Waves of soothing energy wash over you, making you feel refreshed and healthy.</span>")
spawn(recharge_time)
recharging = 0
T.visible_message("<b>[O]</b> becomes energized.")
@@ -0,0 +1,56 @@
/obj/artifact/injector
name = "artifact injector"
associated_datum = /datum/artifact/injector
/datum/artifact/injector
associated_object = /obj/artifact/injector
rarity_class = 2
validtypes = list("ancient","martian","eldritch","precursor")
validtriggers = list(/datum/artifact_trigger/force,/datum/artifact_trigger/electric,/datum/artifact_trigger/heat,
/datum/artifact_trigger/radiation,/datum/artifact_trigger/carbon_touch,/datum/artifact_trigger/silicon_touch,
/datum/artifact_trigger/cold)
activ_text = "opens up, revealing an array of strange needles!"
deact_text = "closes itself up."
react_xray = list(8,60,75,11,"SEGMENTED")
var/list/injection_reagents = list()
var/injection_amount = 10
post_setup()
var/list/potential_reagents = list()
switch(artitype)
if ("ancient")
// industrial heavy machinery kinda stuff
potential_reagents = list("nanites","liquid plasma","mercury","lithium","plasma","radium","uranium","cryostylane")
if ("martian")
// medicine, some poisons, some gross stuff
potential_reagents = list("charcoal","salbutamol","anti_rad","synaptizine","omnizine","synthflesh",
"cyanide","sonambutril","toxin","neurotoxin","mutagen","fake_initropidril",
"toxic_slurry","space_fungus","blood","urine","meat_slurry")
if ("eldritch")
// all the worst stuff. all of it
potential_reagents = list("chlorine","fluorine","lithium","mercury","plasma","radium","uranium","strange_reagent",
"amanitin","coniine","cyanide","curare",
"formaldehyde","lipolicide","initropidril","cholesterol","itching","pancuronium","polonium",
"sodium_thiopental","sonambutril","sulfonal","toxin","venom","neurotoxin","mutagen","wolfsbane",
"toxic_slurry","histamine","sarin")
else
// absolutely everything
potential_reagents = all_functional_reagent_ids
if (potential_reagents.len > 0)
var/looper = rand(1,3)
while (looper > 0)
looper--
injection_reagents += pick(potential_reagents)
injection_amount = rand(3,25)
effect_touch(var/obj/O,var/mob/living/user)
if (..())
return
if (user.reagents && injection_reagents.len > 0)
var/turf/T = get_turf(O)
T.visible_message("<b>[O]</b> jabs [user] with a needle and injects something!")
for (var/X in injection_reagents)
ArtifactLogs(user, null, O, "touched by [user.real_name]", "injecting [X]", 0) // Added (Convair880).
user.reagents.add_reagent(X,injection_amount)
@@ -0,0 +1,44 @@
/obj/artifact/lamp
name = "artifact lamp"
associated_datum = /datum/artifact/lamp
var/light_brightness = 1
var/light_R = 1
var/light_G = 1
var/light_B = 1
var/datum/light/light
New()
..()
light_brightness = max(0.5, (rand(5, 20) / 10))
light_R = rand(25,100) / 100
light_G = rand(25,100) / 100
light_B = rand(25,100) / 100
light = new /datum/light/point
light.set_brightness(light_brightness)
light.set_color(light_R, light_G, light_B)
light.attach(src)
/datum/artifact/lamp
associated_object = /obj/artifact/lamp
rarity_class = 1
validtypes = list("martian","wizard","precursor")
validtriggers = list(/datum/artifact_trigger/force,/datum/artifact_trigger/electric,/datum/artifact_trigger/heat,
/datum/artifact_trigger/radiation,/datum/artifact_trigger/carbon_touch,/datum/artifact_trigger/silicon_touch,
/datum/artifact_trigger/cold)
activ_text = "begins to emit a steady light!"
deact_text = "goes dark and quiet."
react_xray = list(10,90,90,11,"NONE")
effect_activate(var/obj/O)
if (..())
return
var/obj/artifact/lamp/L = O
if (L.light)
L.light.enable()
effect_deactivate(var/obj/O)
if (..())
return
var/obj/artifact/lamp/L = O
if (L.light)
L.light.disable()
@@ -0,0 +1,45 @@
/obj/artifact/power_giver
name = "artifact power giver"
associated_datum = /datum/artifact/power_giver
/datum/artifact/power_giver
associated_object = /obj/artifact/power_giver
rarity_class = 3
validtypes = list("martian","wizard","eldritch","precursor")
validtriggers = list(/datum/artifact_trigger/force,/datum/artifact_trigger/electric,/datum/artifact_trigger/heat,
/datum/artifact_trigger/radiation,/datum/artifact_trigger/carbon_touch,/datum/artifact_trigger/silicon_touch,
/datum/artifact_trigger/cold)
activ_text = "begins glowing with an eerie light!"
deact_text = "falls dark and quiet."
react_xray = list(10,90,80,10,"NONE")
var/power_granted = null
var/power_time = 0
var/recharge_time = 300
var/ready = 1
New()
..()
power_granted = pick("blind","mute","clumsy","fat","dwarf","fire_resist","cold_resist","resist_electric",
"psy_resist","glowy","hulk","xray","horns","stinky","monkey","mattereater","jumpy","telepathy","empath",
"immolate","eyebeams","melt")
power_time = rand(30,180)
if (prob(5))
power_time = 0
recharge_time = rand(100,600)
if (prob(5))
recharge_time = 0
effect_touch(var/obj/O,var/mob/living/user)
if (..())
return
if (!istype(user,/mob/living/carbon/))
return
if (user.bioHolder && ready)
var/turf/T = get_turf(O)
T.visible_message("<b>[O]</b> envelops [user] in a strange light!")
user.bioHolder.AddEffect(power_granted,0,power_time)
if (recharge_time > 0)
ready = 0
spawn(recharge_time)
T.visible_message("<b>[O]</b> begins to glow again.")
ready = 1
@@ -0,0 +1,39 @@
/obj/artifact/prison
name = "artifact imprisoner"
associated_datum = /datum/artifact/prison
/datum/artifact/prison
associated_object = /obj/artifact/prison
rarity_class = 2
min_triggers = 2
max_triggers = 2
validtypes = list("ancient","martian","wizard","eldritch","precursor")
validtriggers = list(/datum/artifact_trigger/carbon_touch,/datum/artifact_trigger/silicon_touch)
react_xray = list(15,90,90,11,"HOLLOW")
touch_descriptors = list("You seem to have a little difficulty taking your hand off its surface.")
var/mob/living/prisoner = null
var/imprison_time = 0
New()
..()
imprison_time = rand(50,1200)
effect_touch(var/obj/O,var/mob/living/user)
if (..())
return
if (!user)
return
if (prisoner)
return
if (istype(user,/mob/living/))
O.visible_message("<span style=\"color:red\"><b>[O]</b> suddenly pulls [user.name] inside and slams shut!</span>")
user.set_loc(O)
prisoner = user
spawn(imprison_time)
for(var/obj/I in O.contents)
I.set_loc(get_turf(O))
prisoner.set_loc(get_turf(O))
prisoner = null
O.visible_message("<span style=\"color:red\"><b>[O]</b> releases [user.name] and shuts down!</span>")
O.ArtifactDeactivated()
return
@@ -0,0 +1,31 @@
/obj/artifact/teleport_recaller
name = "artifact recaller"
associated_datum = /datum/artifact/recaller
/datum/artifact/recaller
associated_object = /obj/artifact/teleport_recaller
rarity_class = 2
validtypes = list("wizard","eldritch","precursor")
validtriggers = list(/datum/artifact_trigger/force,/datum/artifact_trigger/electric,/datum/artifact_trigger/heat,
/datum/artifact_trigger/radiation,/datum/artifact_trigger/carbon_touch,/datum/artifact_trigger/silicon_touch)
activated = 0
react_xray = list(15,75,90,3,"ANOMALOUS")
var/recall_delay = 10
New()
..()
src.recall_delay = rand(2,600) // how long *10 it takes for the recall to happen
src.recall_delay *= 10
effect_touch(var/obj/O,var/mob/living/user)
if (..())
return
if (!user)
return
spawn(src.recall_delay)
user.visible_message("<span style=\"color:red\"><b>[user]</b> is suddenly pulled through space!</span>")
playsound(user.loc, "sound/effects/mag_warp.ogg", 50, 1, -1)
var/turf/T = get_turf(O)
if (T)
user.set_loc(T)
@@ -0,0 +1,92 @@
/obj/artifact/wish_granter
name = "artifact wish granter"
associated_datum = /datum/artifact/wish_granter
/datum/artifact/wish_granter
associated_object = /obj/artifact/wish_granter
rarity_class = 4
validtypes = list("wizard","eldritch")
validtriggers = list(/datum/artifact_trigger/force,/datum/artifact_trigger/electric,/datum/artifact_trigger/heat,
/datum/artifact_trigger/radiation,/datum/artifact_trigger/cold)
activ_text = "begins glowing with an enticing light!"
deact_text = "falls dark and quiet."
react_xray = list(666,666,666,11,"NONE")
var/list/wish_granted = list()
var/evil = 0
New()
..()
if (prob(50))
evil = 1
effect_touch(var/obj/O,var/mob/living/user)
if (..())
return
if (!istype(user,/mob/living/))
return
if (user.key in wish_granted)
boutput(user, "<b>[O]</b> is silent.")
return
boutput(user, "<b>[O]</b> resonates, \"<big>I SHALL GRANT YOU ONE WISH...</big>\"")
var/list/wishes = list("I wish to become rich!","I wish for great power!")
var/wish = input("Make a wish?","[O]") as null|anything in wishes
if (!wish)
boutput(user, "You say nothing.")
boutput(user, "<b>[O]</b> resonates, \"<big>YOU MAY RETURN LATER...</big>\"")
return
wish_granted += user.key
user.say(wish)
sleep(5)
boutput(user, "<b>[O]</b> resonates, \"<big>SO BE IT...</big>\"")
playsound(O, "sound/effects/gong_rumble.ogg", 40, 1)
O.visible_message("<span style=\"color:red\"><b>[O]</b> begins to charge up...</span>")
sleep(30)
if (prob(2))
evil = !evil
if (evil)
switch(wish)
if("I wish to become rich!")
O.visible_message("<span style=\"color:red\"><b>[O]</b> envelops [user] in a golden light!</span>")
playsound(user, "sound/weapons/flashbang.ogg", 50, 1)
for(var/mob/N in viewers(user, null))
N.flash(30)
if(N.client)
shake_camera(N, 6, 4)
user.desc = "A statue of someone very wealthy"
user.become_gold_statue()
if("I wish for great power!")
O.visible_message("<span style=\"color:red\"><b>[O] discharges a massive bolt of electricity!</b></span>")
playsound(user, "sound/effects/elec_bigzap.ogg", 40, 1)
var/list/affected = DrawLine(O,user,/obj/line_obj/elec,'icons/obj/projectiles.dmi',"WholeLghtn",1,1,"HalfStartLghtn","HalfEndLghtn",OBJ_LAYER,1,PreloadedIcon='icons/effects/LghtLine.dmi')
for(var/obj/OB in affected)
spawn(6)
pool(OB)
user.elecgib()
else
switch(wish)
if("I wish to become rich!")
O.visible_message("<span style=\"color:red\">A ton of money falls out of thin air! Woah!</span>")
for(var/turf/T in range(user,3))
if (T.density)
continue
new /obj/item/spacecash/million(T)
if("I wish for great power!")
O.visible_message("<span style=\"color:red\"><b>[O]</b> envelops [user] in a brilliant light!</span>")
if (ishuman(user))
var/mob/living/carbon/human/H = user
if (H.bioHolder)
H.bioHolder.RandomEffect("good")
H.bioHolder.RandomEffect("good")
H.bioHolder.RandomEffect("good")
else if (istype(user,/mob/living/silicon/robot))
var/mob/living/silicon/robot/R = user
if (istype(R.cell))
R.cell.genrate = 100
R.cell.maxcharge = 1000000
R.cell.charge = R.cell.maxcharge