diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm
index 803815fcf2d..3ba021f337c 100644
--- a/code/modules/research/experimentor.dm
+++ b/code/modules/research/experimentor.dm
@@ -39,20 +39,6 @@
temp_list[O] = text2num(temp_list[O])
return temp_list
-/* //uncomment to enable forced reactions.
-/obj/machinery/r_n_d/experimentor/verb/forceReaction()
- set name = "Force Experimentor Reaction"
- set category = "Debug"
- set src in oview(1)
- var/reaction = input(usr,"What reaction?") in list(SCANTYPE_POKE,SCANTYPE_IRRADIATE,SCANTYPE_GAS,SCANTYPE_HEAT,SCANTYPE_COLD,SCANTYPE_OBLITERATE)
- var/oldReaction = item_reactions["[loaded_item.type]"]
- item_reactions["[loaded_item.type]"] = reaction
- experiment(item_reactions["[loaded_item.type]"],loaded_item)
- spawn(10)
- if(loaded_item)
- item_reactions["[loaded_item.type]"] = oldReaction
-*/
-
/obj/machinery/r_n_d/experimentor/proc/SetTypeReactions()
var/probWeight = 0
for(var/I in typesof(/obj/item))
@@ -170,7 +156,14 @@
linked_console = null
/obj/machinery/r_n_d/experimentor/attack_hand(mob/user)
+ if(..())
+ return
+
+ interact(user)
+
+/obj/machinery/r_n_d/experimentor/interact(mob/living/carbon/human/user)
user.set_machine(src)
+
var/dat = "
"
if(!linked_console)
dat += "Scan for R&D Console
"
@@ -194,12 +187,11 @@
dat += "Nothing loaded."
dat += "
Refresh
"
dat += "
Close
"
- var/datum/browser/popup = new(user, "experimentor","Experimentor", 700, 400, src)
+ var/datum/browser/popup = new(user, "experimentor","Experimentor", 700, 400)
popup.set_content(dat)
popup.open()
onclose(user, "experimentor")
-
/obj/machinery/r_n_d/experimentor/proc/matchReaction(matching,reaction)
var/obj/item/D = matching
if(D)
@@ -324,7 +316,7 @@
investigate_log("Experimentor has released [chosenchem] smoke.", "experimentor")
var/datum/effect_system/smoke_spread/chem/smoke = new
smoke.set_up(R, src, TRUE)
- playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
+ playsound(loc, 'sound/effects/smoke.ogg', 50, 1, -3)
smoke.start()
qdel(R)
ejectItem(TRUE)
@@ -336,7 +328,7 @@
R.add_reagent(chosenchem , 15)
var/datum/effect_system/smoke_spread/chem/smoke = new
smoke.set_up(R, src, TRUE)
- playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
+ playsound(loc, 'sound/effects/smoke.ogg', 50, 1, -3)
smoke.start()
qdel(R)
ejectItem(TRUE)
@@ -344,10 +336,10 @@
investigate_log("Experimentor has released [chosenchem] smoke!", "experimentor")
if(prob(EFFECT_PROB_LOW-badThingCoeff))
visible_message("[src] malfunctions, spewing harmless gas.>")
- throwSmoke(src.loc)
+ throwSmoke(loc)
if(prob(EFFECT_PROB_MEDIUM-badThingCoeff))
visible_message("[src] melts [exp_on], ionizing the air around it!")
- empulse(src.loc, 4, 0) //change this to 4,6 once the EXPERI-Mentor is moved.
+ empulse(loc, 4, 0) //change this to 4,6 once the EXPERI-Mentor is moved.
investigate_log("Experimentor has generated an Electromagnetic Pulse.", "experimentor")
ejectItem(TRUE)
////////////////////////////////////////////////////////////////////////////////////////////////
@@ -355,7 +347,7 @@
visible_message("[src] raises [exp_on]'s temperature.")
if(prob(EFFECT_PROB_LOW) && criticalReaction)
visible_message("[src]'s emergency coolant system gives off a small ding!")
- playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
+ playsound(loc, 'sound/machines/ding.ogg', 50, 1)
var/obj/item/reagent_containers/food/drinks/coffee/C = new /obj/item/reagent_containers/food/drinks/coffee(get_turf(pick(oview(1,src))))
chosenchem = pick("plasma","capsaicin","ethanol")
C.reagents.remove_any(25)
@@ -378,12 +370,12 @@
FB.fire()
if(prob(EFFECT_PROB_LOW-badThingCoeff))
visible_message("[src] malfunctions, melting [exp_on] and releasing a burst of flame!")
- explosion(src.loc, -1, 0, 0, 0, 0, flame_range = 2)
+ explosion(loc, -1, 0, 0, 0, 0, flame_range = 2)
investigate_log("Experimentor started a fire.", "experimentor")
ejectItem(TRUE)
if(prob(EFFECT_PROB_MEDIUM-badThingCoeff))
visible_message("[src] malfunctions, melting [exp_on] and leaking hot air!")
- var/datum/gas_mixture/env = src.loc.return_air()
+ var/datum/gas_mixture/env = loc.return_air()
var/transfer_moles = 0.25 * env.total_moles()
var/datum/gas_mixture/removed = env.remove(transfer_moles)
if(removed)
@@ -397,7 +389,7 @@
ejectItem(TRUE)
if(prob(EFFECT_PROB_MEDIUM-badThingCoeff))
visible_message("[src] malfunctions, activating its emergency coolant systems!")
- throwSmoke(src.loc)
+ throwSmoke(loc)
for(var/mob/living/m in oview(1, src))
m.apply_damage(5,BURN,pick("head","chest","groin"))
investigate_log("Experimentor has dealt minor burn damage to [m]", "experimentor")
@@ -408,7 +400,7 @@
if(prob(EFFECT_PROB_LOW) && criticalReaction)
visible_message("[src]'s emergency coolant system gives off a small ding!")
var/obj/item/reagent_containers/food/drinks/coffee/C = new /obj/item/reagent_containers/food/drinks/coffee(get_turf(pick(oview(1,src))))
- playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) //Ding! Your death coffee is ready!
+ playsound(loc, 'sound/machines/ding.ogg', 50, 1) //Ding! Your death coffee is ready!
chosenchem = pick("uranium","frostoil","ephedrine")
C.reagents.remove_any(25)
C.reagents.add_reagent(chosenchem , 50)
@@ -423,13 +415,13 @@
investigate_log("Experimentor has released frostoil gas.", "experimentor")
var/datum/effect_system/smoke_spread/chem/smoke = new
smoke.set_up(R, src, TRUE)
- playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
+ playsound(loc, 'sound/effects/smoke.ogg', 50, 1, -3)
smoke.start()
qdel(R)
ejectItem(TRUE)
if(prob(EFFECT_PROB_LOW-badThingCoeff))
visible_message("[src] malfunctions, shattering [exp_on] and leaking cold air!")
- var/datum/gas_mixture/env = src.loc.return_air()
+ var/datum/gas_mixture/env = loc.return_air()
var/transfer_moles = 0.25 * env.total_moles()
var/datum/gas_mixture/removed = env.remove(transfer_moles)
if(removed)
@@ -444,7 +436,7 @@
if(prob(EFFECT_PROB_MEDIUM-badThingCoeff))
visible_message("[src] malfunctions, releasing a flurry of chilly air as [exp_on] pops out!")
var/datum/effect_system/smoke_spread/smoke = new
- smoke.set_up(1,0, src.loc, 0)
+ smoke.set_up(1, 0, loc, 0)
smoke.start()
ejectItem()
////////////////////////////////////////////////////////////////////////////////////////////////
@@ -459,7 +451,7 @@
linked_materials.insert_amount( min((linked_materials.max_amount - linked_materials.total_amount), (exp_on.materials[material])), material)
if(prob(EFFECT_PROB_VERYLOW-badThingCoeff))
visible_message("[src]'s crusher goes way too many levels too high, crushing right through space-time!")
- playsound(src.loc, 'sound/effects/supermatter.ogg', 50, 1, -3)
+ playsound(loc, 'sound/effects/supermatter.ogg', 50, 1, -3)
investigate_log("Experimentor has triggered the 'throw things' reaction.", "experimentor")
for(var/atom/movable/AM in oview(7,src))
if(!AM.anchored)
@@ -468,7 +460,7 @@
if(prob(EFFECT_PROB_LOW-badThingCoeff))
visible_message("[src]'s crusher goes one level too high, crushing right into space-time!")
- playsound(src.loc, 'sound/effects/supermatter.ogg', 50, 1, -3)
+ playsound(loc, 'sound/effects/supermatter.ogg', 50, 1, -3)
investigate_log("Experimentor has triggered the 'minor throw things' reaction.", "experimentor")
var/list/throwAt = list()
for(var/atom/movable/AM in oview(7,src))
@@ -487,7 +479,7 @@
if(exp == SCANTYPE_DISCOVER)
visible_message("[src] scans [exp_on], revealing its true nature!")
- playsound(src.loc, 'sound/effects/supermatter.ogg', 50, 3, -1)
+ playsound(loc, 'sound/effects/supermatter.ogg', 50, 3, -1)
var/obj/item/relic/R = loaded_item
R.reveal()
investigate_log("Experimentor has revealed a relic with [R.realProc] effect.", "experimentor")
@@ -510,24 +502,24 @@
ejectItem()
if(globalMalf > 16 && globalMalf < 35)
visible_message("[src] melts [exp_on], ian-izing the air around it!")
- throwSmoke(src.loc)
+ throwSmoke(loc)
if(trackedIan)
throwSmoke(trackedIan.loc)
- trackedIan.loc = src.loc
+ trackedIan.loc = loc
investigate_log("Experimentor has stolen Ian!", "experimentor") //...if anyone ever fixes it...
else
- new /mob/living/simple_animal/pet/dog/corgi(src.loc)
+ new /mob/living/simple_animal/pet/dog/corgi(loc)
investigate_log("Experimentor has spawned a new corgi.", "experimentor")
ejectItem(TRUE)
if(globalMalf > 36 && globalMalf < 59)
visible_message("[src] encounters a run-time error!")
- throwSmoke(src.loc)
+ throwSmoke(loc)
if(trackedRuntime)
throwSmoke(trackedRuntime.loc)
- trackedRuntime.loc = src.loc
+ trackedRuntime.loc = loc
investigate_log("Experimentor has stolen Runtime!", "experimentor")
else
- new /mob/living/simple_animal/pet/cat(src.loc)
+ new /mob/living/simple_animal/pet/cat(loc)
investigate_log("Experimentor failed to steal runtime, and instead spawned a new cat.", "experimentor")
ejectItem(TRUE)
if(globalMalf > 60)
@@ -542,6 +534,8 @@
/obj/machinery/r_n_d/experimentor/Topic(href, href_list)
if(..())
return
+ if(!Adjacent(usr) && !issilicon(usr))
+ return
usr.set_machine(src)
var/scantype = href_list["function"]
@@ -557,7 +551,7 @@
else if(scantype == "eject")
ejectItem()
else if(scantype == "refresh")
- src.updateUsrDialog()
+ updateUsrDialog()
else
if(recentlyExperimented)
to_chat(usr, "[src] has been used too recently!")
@@ -582,7 +576,7 @@
var/list/temp_tech = ConvertReqString2List(process.origin_tech)
for(var/T in temp_tech)
linked_console.files.UpdateTech(T, temp_tech[T])
- src.updateUsrDialog()
+ updateUsrDialog()
return
//~~~~~~~~Admin logging proc, aka the Powergamer Alarm~~~~~~~~
@@ -635,7 +629,7 @@
return
revealed = TRUE
name = realName
- cooldownMax = rand(60,300)
+ cooldownMax = rand(60, 300)
realProc = pick("teleport","explode","rapidDupe","petSpray","flash","clean","floofcannon")
origin_tech = pick("engineering=[rand(2,5)]","magnets=[rand(2,5)]","plasmatech=[rand(2,5)]","programming=[rand(2,5)]","powerstorage=[rand(2,5)]")
@@ -644,7 +638,7 @@
if(cooldown)
to_chat(user, "[src] does not react!")
return
- else if(src.loc == user)
+ else if(loc == user)
cooldown = TRUE
call(src,realProc)(user)
spawn(cooldownMax)
@@ -660,20 +654,20 @@
smoke.start()
/obj/item/relic/proc/floofcannon(mob/user)
- playsound(src.loc, "sparks", rand(25, 50), TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
+ playsound(loc, "sparks", rand(25, 50), TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
var/mob/living/C = new floof(get_turf(user))
C.throw_at(pick(oview(10,user)),10,rand(3,8))
throwSmoke(get_turf(C))
warn_admins(user, "Floof Cannon", 0)
/obj/item/relic/proc/clean(mob/user)
- playsound(src.loc, "sparks", rand(25,50), TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
+ playsound(loc, "sparks", rand(25,50), TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
var/obj/item/grenade/chem_grenade/cleaner/CL = new/obj/item/grenade/chem_grenade/cleaner(get_turf(user))
CL.prime()
warn_admins(user, "Smoke", 0)
/obj/item/relic/proc/flash(mob/user)
- playsound(src.loc, "sparks", rand(25,50), TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
+ playsound(loc, "sparks", rand(25,50), TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
var/obj/item/grenade/flashbang/CB = new/obj/item/grenade/flashbang(get_turf(user))
CB.prime()
warn_admins(user, "Flash")
@@ -699,7 +693,7 @@
var/counter
var/max = rand(5,10)
for(counter = 1; counter < max; counter++)
- var/obj/item/relic/R = new src.type(get_turf(src))
+ var/obj/item/relic/R = new type(get_turf(src))
R.name = name
R.desc = desc
R.realName = realName
@@ -709,7 +703,7 @@
spawn()
R.throw_at(pick(oview(7,get_turf(src))),10,1)
counter = 0
- spawn(rand(10,100))
+ spawn(rand(10, 100))
for(counter = 1; counter <= dupes.len; counter++)
var/obj/item/relic/R = dupes[counter]
qdel(R)
@@ -718,7 +712,7 @@
/obj/item/relic/proc/explode(mob/user)
to_chat(user, "[src] begins to heat up!")
spawn(rand(35,100))
- if(src.loc == user)
+ if(loc == user)
visible_message("[src]'s top opens, releasing a powerful blast!")
explosion(user.loc, -1, rand(1,5), rand(1,5), rand(1,5), rand(1,5), flame_range = 2)
warn_admins(user, "Explosion")
@@ -726,9 +720,9 @@
/obj/item/relic/proc/teleport(mob/user)
to_chat(user, "[src] begins to vibrate!")
- spawn(rand(10,30))
+ spawn(rand(10, 30))
var/turf/userturf = get_turf(user)
- if(src.loc == user && is_teleport_allowed(userturf.z)) //Because Nuke Ops bringing this back on their shuttle, then looting the ERT area is 2fun4you!
+ if(loc == user && is_teleport_allowed(userturf.z)) //Because Nuke Ops bringing this back on their shuttle, then looting the ERT area is 2fun4you!
visible_message("[src] twists and bends, relocating itself!")
throwSmoke(userturf)
do_teleport(user, userturf, 8, asoundin = 'sound/effects/phasein.ogg')