mirror of
https://github.com/goonstation/goonstation-2016.git
synced 2026-07-13 18:12:20 +01:00
Initial Commit
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user