diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm
index 23b39de3fe..42831cc013 100644
--- a/code/modules/research/experimentor.dm
+++ b/code/modules/research/experimentor.dm
@@ -44,24 +44,21 @@
/obj/machinery/rnd/experimentor/proc/SetTypeReactions()
- var/probWeight = 0
for(var/I in typesof(/obj/item))
if(istype(I, /obj/item/relic))
item_reactions["[I]"] = SCANTYPE_DISCOVER
else
item_reactions["[I]"] = pick(SCANTYPE_POKE,SCANTYPE_IRRADIATE,SCANTYPE_GAS,SCANTYPE_HEAT,SCANTYPE_COLD,SCANTYPE_OBLITERATE)
+
if(ispath(I, /obj/item/stock_parts) || ispath(I, /obj/item/grenade/chem_grenade) || ispath(I, /obj/item/kitchen))
var/obj/item/tempCheck = I
if(initial(tempCheck.icon_state) != null) //check it's an actual usable item, in a hacky way
- valid_items += 15
- valid_items += I
- probWeight++
+ valid_items["[I]"] += 15
if(ispath(I, /obj/item/reagent_containers/food))
var/obj/item/tempCheck = I
if(initial(tempCheck.icon_state) != null) //check it's an actual usable item, in a hacky way
- valid_items += rand(1,max(2,35-probWeight))
- valid_items += I
+ valid_items["[I]"] += rand(1,4)
if(ispath(I, /obj/item/construction/rcd) || ispath(I, /obj/item/grenade) || ispath(I, /obj/item/aicard) || ispath(I, /obj/item/storage/backpack/holding) || ispath(I, /obj/item/slime_extract) || ispath(I, /obj/item/onetankbomb) || ispath(I, /obj/item/transfer_valve))
var/obj/item/tempCheck = I
@@ -225,18 +222,6 @@
smoke.set_up(0, where)
smoke.start()
-/obj/machinery/rnd/experimentor/proc/pickWeighted(list/from)
- var/result = FALSE
- var/counter = 1
- while(!result)
- var/probtocheck = from[counter]
- if(prob(probtocheck))
- result = TRUE
- return from[counter+1]
- if(counter + 2 < from.len)
- counter = counter + 2
- else
- counter = 1
/obj/machinery/rnd/experimentor/proc/experiment(exp,obj/item/exp_on)
recentlyExperimented = 1
@@ -283,13 +268,13 @@
visible_message("[src] malfunctions, spewing toxic waste!")
for(var/turf/T in oview(1, src))
if(!T.density)
- if(prob(EFFECT_PROB_VERYHIGH))
+ if(prob(EFFECT_PROB_VERYHIGH) && !(locate(/obj/effect/decal/cleanable/greenglow) in T))
var/obj/effect/decal/cleanable/reagentdecal = new/obj/effect/decal/cleanable/greenglow(T)
reagentdecal.reagents.add_reagent("radium", 7)
else if(prob(EFFECT_PROB_MEDIUM-badThingCoeff))
var/savedName = "[exp_on]"
ejectItem(TRUE)
- var/newPath = pickWeighted(valid_items)
+ var/newPath = text2path(pickweight(valid_items))
loaded_item = new newPath(src)
visible_message("[src] malfunctions, transforming [savedName] into [loaded_item]!")
investigate_log("Experimentor has transformed [savedName] into [loaded_item]", INVESTIGATE_EXPERIMENTOR)