diff --git a/code/modules/admin/admin_investigate.dm b/code/modules/admin/admin_investigate.dm index 3f88d8c4f62..0b2c5d0fda2 100644 --- a/code/modules/admin/admin_investigate.dm +++ b/code/modules/admin/admin_investigate.dm @@ -22,7 +22,7 @@ F << "[time2text(world.timeofday,"hh:mm")] \ref[src] ([x],[y],[z]) || [src] [message]
" //ADMINVERBS -/client/proc/investigate_show( subject in list("hrefs","notes","ntsl","singulo","wires","telesci", "gravity", "records", "cargo", "supermatter", "atmos") ) +/client/proc/investigate_show( subject in list("hrefs","notes","ntsl","singulo","wires","telesci", "gravity", "records", "cargo", "supermatter", "atmos", "experimentor") ) set name = "Investigate" set category = "Admin" if(!holder) return diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index 86e5d9ffee3..84c2ebf1336 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -50,7 +50,7 @@ /obj/machinery/r_n_d/experimentor/verb/forceReaction() set name = "Force Experimentor Reaction" set category = "Debug" - set src in oview(1, src) + 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 @@ -256,6 +256,7 @@ /obj/machinery/r_n_d/experimentor/proc/experiment(var/exp,var/obj/item/exp_on) recentlyExperimented = 1 icon_state = "h_lathe_wloop" + var/chosenchem var/criticalReaction = locate(exp_on) in critical_items ? TRUE : FALSE //////////////////////////////////////////////////////////////////////////////////////////////// if(exp == SCANTYPE_POKE) @@ -267,6 +268,7 @@ visible_message("[src] malfunctions and destroys [exp_on], lashing it's arms out at nearby people!.") for(var/mob/living/m in oview(1, src)) m.apply_damage(15,"brute",pick("head","chest","groin")) + investigate_log("Experimentor dealt minor brute to [m].", "experimentor") ejectItem(TRUE) if(prob(EFFECT_PROB_LOW-badThingCoeff)) visible_message("[src] malfunctions!.") @@ -276,6 +278,7 @@ var/mob/living/target = locate(/mob/living) in oview(7,src) if(target) var/obj/item/throwing = loaded_item + investigate_log("Experimentor has thrown [loaded_item] at [target]", "experimentor") ejectItem() if(throwing) throwing.throw_at(target, 10, 1) @@ -286,11 +289,13 @@ visible_message("[exp_on] has activated an unknown subroutine!") cloneMode = TRUE cloneCount = badThingCoeff + investigate_log("Experimentor has made a clone of [exp_on]", "experimentor") ejectItem() if(prob(EFFECT_PROB_VERYLOW-badThingCoeff)) visible_message("[src] malfunctions, melting [exp_on] and leaking radiation!.") for(var/mob/living/m in oview(1, src)) m.apply_effect(25,IRRADIATE) + investigate_log("Experimentor has irradiated [m]", "experimentor") //One entry per person so we know what was irradiated. ejectItem(TRUE) if(prob(EFFECT_PROB_LOW-badThingCoeff)) visible_message("[src] malfunctions, spewing toxic waste!.") @@ -304,6 +309,7 @@ var/newPath = pickWeighted(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]", "experimentor") if(istype(loaded_item,/obj/item/weapon/grenade/chem_grenade)) var/obj/item/weapon/grenade/chem_grenade/CG = loaded_item CG.prime() @@ -316,10 +322,11 @@ new /obj/item/stack/sheet/mineral/plasma(get_turf(pick(oview(1,src)))) if(prob(EFFECT_PROB_VERYLOW-badThingCoeff)) visible_message("[src] destroys [exp_on], leaking dangerous gas!.") - var/list/chems = list("carbon","radium","toxin","condensedcapsaicin","mushroomhallucinogen","space_drugs","ethanol","beepskysmash") + chosenchem = pick("carbon","radium","toxin","condensedcapsaicin","mushroomhallucinogen","space_drugs","ethanol","beepskysmash") var/datum/reagents/R = new/datum/reagents(50) R.my_atom = src - R.add_reagent(pick(chems) , 50) + R.add_reagent(chosenchem , 50) + investigate_log("Experimentor has released [chosenchem] smoke.", "experimentor") var/datum/effect/effect/system/chem_smoke_spread/smoke = new smoke.set_up(R, 1, 0, src, 0, silent = 1) playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3) @@ -328,10 +335,9 @@ ejectItem(TRUE) if(prob(EFFECT_PROB_VERYLOW-badThingCoeff)) visible_message("[src]'s chemical chamber has sprung a leak!.") - var/list/chems = list("mutationtoxin","nanomachines","xenomicrobes") + chosenchem = pick("mutationtoxin","nanomachines","xenomicrobes") var/datum/reagents/R = new/datum/reagents(50) R.my_atom = src - var/chosenchem = pick(chems) R.add_reagent(chosenchem , 50) var/datum/effect/effect/system/chem_smoke_spread/smoke = new smoke.set_up(R, 1, 0, src, 0, silent = 1) @@ -340,12 +346,14 @@ R.delete() ejectItem(TRUE) warn_admins(usr, "[chosenchem] smoke") + investigate_log("Experimentor has released [chosenchem] smoke!", "experimentor") if(prob(EFFECT_PROB_LOW-badThingCoeff)) visible_message("[src] malfunctions, spewing harmless gas!.") throwSmoke(src.loc) if(prob(EFFECT_PROB_MEDIUM-badThingCoeff)) visible_message("[src] melts [exp_on], ionizing the air around it!.") empulse(src.loc, 4, 6) + investigate_log("Experimentor has generated an Electromagnetic Pulse.", "experimentor") ejectItem(TRUE) //////////////////////////////////////////////////////////////////////////////////////////////// if(exp == SCANTYPE_HEAT) @@ -354,16 +362,19 @@ visible_message("[src]'s emergency coolant system gives off a small ding!") playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) var/obj/item/weapon/reagent_containers/food/drinks/coffee/C = new /obj/item/weapon/reagent_containers/food/drinks/coffee(get_turf(pick(oview(1,src)))) - var/list/chems = list("plasma","capsaicin","ethanol") + chosenchem = pick("plasma","capsaicin","ethanol") C.reagents.remove_any(25) - C.reagents.add_reagent(pick(chems) , 50) + C.reagents.add_reagent(chosenchem , 50) C.name = "Cup of Suspicious Liquid" C.desc = "It has a large hazard symbol printed on the side in fading ink." + investigate_log("Experimentor has made a cup of [chosenchem] coffee.", "experimentor") if(prob(EFFECT_PROB_VERYLOW-badThingCoeff)) var/turf/start = get_turf(src) - var/turf/MT = get_turf(locate(/mob/living) in oview(src, 3)) + var/mob/M = locate(/mob/living) in view(src, 3) + var/turf/MT = get_turf(M) if(MT) visible_message("[src] dangerously overheats, launching a flaming fuel orb!") + investigate_log("Experimentor has launched a fireball at [M]!", "experimentor") var/obj/item/projectile/magic/fireball/FB = new /obj/item/projectile/magic/fireball(start) FB.original = MT FB.current = start @@ -373,6 +384,7 @@ 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) + 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!.") @@ -386,12 +398,14 @@ removed.temperature = min((removed.temperature*heat_capacity + 100000)/heat_capacity, 1000) env.merge(removed) air_update_turf() + investigate_log("Experimentor has released hot air.", "experimentor") ejectItem(TRUE) if(prob(EFFECT_PROB_MEDIUM-badThingCoeff)) visible_message("[src] malfunctions, activating it's emergency coolant systems!.") throwSmoke(src.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") ejectItem() //////////////////////////////////////////////////////////////////////////////////////////////// if(exp == SCANTYPE_COLD) @@ -400,16 +414,18 @@ visible_message("[src]'s emergency coolant system gives off a small ding!") var/obj/machinery/vending/coffee/C = new /obj/machinery/vending/coffee(get_turf(pick(oview(1,src)))) playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) //Ding! Your death coffee is ready! - var/list/chems = list("uranium","frostoil","ephedrine") + chosenchem = pick("uranium","frostoil","ephedrine") C.reagents.remove_any(25) - C.reagents.add_reagent(pick(chems) , 50) + C.reagents.add_reagent(chosenchem , 50) C.name = "Cup of Suspicious Liquid" C.desc = "It has a large hazard symbol printed on the side in fading ink." + investigate_log("Experimentor has made a cup of [chosenchem] coffee.", "experimentor") if(prob(EFFECT_PROB_VERYLOW-badThingCoeff)) visible_message("[src] malfunctions, shattering [exp_on] and releasing a dangerous cloud of coolant!") var/datum/reagents/R = new/datum/reagents(50) R.my_atom = src R.add_reagent("frostoil" , 50) + investigate_log("Experimentor has released frostoil gas.", "experimentor") var/datum/effect/effect/system/chem_smoke_spread/smoke = new smoke.set_up(R, 1, 0, src, 0, silent = 1) playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3) @@ -428,6 +444,7 @@ removed.temperature = (removed.temperature*heat_capacity - 75000)/heat_capacity env.merge(removed) air_update_turf() + investigate_log("Experimentor has released cold air.", "experimentor") ejectItem(TRUE) if(prob(EFFECT_PROB_MEDIUM-badThingCoeff)) visible_message("[src] malfunctions, releasing a flurry of chilly air as [exp_on] pops out!.") @@ -447,6 +464,7 @@ 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) + investigate_log("Experimentor has triggered the 'throw things' reaction.", "experimentor") var/list/throwAt = list() for(var/i in oview(7,src)) if(istype(i,/obj/item) || istype(i,/mob/living)) @@ -458,6 +476,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) + investigate_log("Experimentor has triggered the 'minor throw things' reaction.", "experimentor") var/list/oViewStuff = oview(7,src) var/list/throwAt = list() for(var/i in oViewStuff) @@ -479,6 +498,7 @@ playsound(src.loc, 'sound/effects/supermatter.ogg', 50, 3, -1) var/obj/item/weapon/relic/R = loaded_item R.reveal() + investigate_log("Experimentor has revealed a relic with [R.realProc] effect.", "experimentor") ejectItem() //Global reactions @@ -494,30 +514,37 @@ if(trackedIan) throwSmoke(trackedIan.loc) trackedIan.loc = src.loc + investigate_log("Experimentor has stolen Ian!", "experimentor") //...if anyone ever fixes it... else new /mob/living/simple_animal/corgi(src.loc) + investigate_log("Experimentor has spawned a new corgi.", "experimentor") ejectItem(TRUE) if(globalMalf > 36 && globalMalf < 50) visible_message("[src] improves [exp_on], drawing the life essence of those nearby!") for(var/mob/living/m in view(4,src)) m << "You feel your flesh being torn from you, mists of blood drifting to [src]!" m.apply_damage(50,"brute","chest") + investigate_log("Experimentor has taken 50 brute a blood sacrifice from [m]", "experimentor") var/list/reqs = ConvertReqString2List(exp_on.origin_tech) for(var/T in reqs) reqs[T] = reqs[T] + 1 exp_on.origin_tech = ConvertReqList2String(reqs) + investigate_log("Experimentor has set the origin tech of [exp_on] to [exp_on.origin_tech]", "experimentor") if(globalMalf > 51 && globalMalf < 75) visible_message("[src] encounters a run-time error!") throwSmoke(src.loc) if(trackedRuntime) throwSmoke(trackedRuntime.loc) trackedRuntime.loc = src.loc + investigate_log("Experimentor has stolen Runtime!", "experimentor") else new /mob/living/simple_animal/cat(src.loc) + investigate_log("Experimentor failed to steal runtime, and instead spawned a new cat.", "experimentor") ejectItem(TRUE) if(globalMalf > 76) visible_message("[src] begins to smoke and hiss, shaking violently!") use_power(500000) + investigate_log("Experimentor has drained power from its APC", "experimentor") spawn(resetTime) icon_state = "h_lathe"