diff --git a/code/datums/outfits/jobs/science.dm b/code/datums/outfits/jobs/science.dm index 8894c7cafad..618172c14b9 100644 --- a/code/datums/outfits/jobs/science.dm +++ b/code/datums/outfits/jobs/science.dm @@ -53,6 +53,4 @@ /datum/decl/hierarchy/outfit/job/science/scientist/anomalist name = OUTFIT_JOB_NAME(JOB_ALT_ANOMALIST) - belt = /obj/item/anomaly_scanner - l_pocket = /obj/item/anomaly_choice - r_pocket = /obj/item/anomaly_releaser/science + backpack_contents = list(/obj/item/storage/box/anomaly = 1) diff --git a/code/game/objects/effects/anomalies/_anomalies.dm b/code/game/objects/effects/anomalies/_anomalies.dm index 9d882cb189b..2a220d46e88 100644 --- a/code/game/objects/effects/anomalies/_anomalies.dm +++ b/code/game/objects/effects/anomalies/_anomalies.dm @@ -120,18 +120,17 @@ return /obj/effect/anomaly/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/analyzer)) + if(istype(I, /obj/item/analyzer) || (istype(I, /obj/item/anomaly_scanner) && !stats)) if(anomaly_core) to_chat(user, span_notice("Analyzing... [src]'s stabilized field is fluctuating along frequency [format_frequency(anomaly_core.frequency)], code [anomaly_core.code].")) return TRUE - if(istype(I, /obj/item/anomaly_scanner)) + if(istype(I, /obj/item/anomaly_scanner) && stats) var/obj/item/anomaly_scanner/scanner = I - if(stats) - if(!do_after(user, 1 SECOND, src)) - return - scanner.buffered_anomaly = WEAKREF(src) - scanner.tgui_interact(user) - return TRUE + if(!do_after(user, 1 SECOND, src)) + return + scanner.buffered_anomaly = WEAKREF(src) + scanner.tgui_interact(user) + return TRUE return ..() /obj/effect/anomaly/bullet_act(obj/item/projectile/proj) diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm index ebd1da976f4..a30589720cf 100644 --- a/code/game/objects/structures/crates_lockers/largecrate.dm +++ b/code/game/objects/structures/crates_lockers/largecrate.dm @@ -149,6 +149,6 @@ starts_with = list( /obj/machinery/anomaly_harvester, /obj/item/anomaly_releaser/science, - /obj/item/anomaly_choice, + /obj/item/assembly/signaler/anomaly/choice/, /obj/item/anomaly_scanner ) diff --git a/code/modules/anomalies/anomaly.dm b/code/modules/anomalies/anomaly.dm index ffd7271a4c9..76a874e5cf4 100644 --- a/code/modules/anomalies/anomaly.dm +++ b/code/modules/anomalies/anomaly.dm @@ -65,6 +65,9 @@ /obj/item/anomaly_scanner name = "anomaly scanner" desc = "A hand-held anomaly scanner, able to distinguish the particles that might affect a stable anomaly." + description_info = "Click on an emitter to change into an anomalous emitter.
\ + Click on an anomaly harvester to link the scanned anomaly to it.
\ + Danger type adds severity. Unstable changes state. Containment stabilizes at the cost of health. Transformation adds modifiers." icon = 'icons/obj/device.dmi' icon_state = "anom_scanner" slot_flags = SLOT_BELT @@ -168,38 +171,43 @@ starts_with = list( /obj/item/anomaly_releaser, /obj/item/anomaly_scanner, - /obj/item/anomaly_choice, + /obj/item/assembly/signaler/anomaly/choice, /obj/item/clothing/gloves/black ) -/obj/item/anomaly_choice +/obj/item/assembly/signaler/anomaly/choice name = "latent anomaly core" desc = "A supposedly inert anomaly core. It hums softly if held close." icon = 'icons/obj/assemblies/new_assemblies.dmi' icon_state = "inert" + worth = 0 + var/picked = FALSE + anomaly_type = /obj/effect/anomaly/flux // Default -/obj/item/anomaly_choice/attack_self(mob/user, modifiers) +/obj/item/assembly/signaler/anomaly/choice/attack_self(mob/user, modifiers) . = ..(user) if(.) return TRUE + if(picked) + return TRUE + var/list/choices = list() - var/list/core_types = subtypesof(/obj/item/assembly/signaler/anomaly) + var/list/core_types = subtypesof(/obj/effect/anomaly) // Two random cores for(var/i = 0, i < 2, i++) var/type = pick(core_types) - var/obj/item/assembly/signaler/anomaly/core = new type - choices[capitalize(core.name)] = type + var/obj/effect/anomaly/anom = new type + choices[capitalize(anom.name)] = type // Guaranteed - var/preset = /obj/item/assembly/signaler/anomaly/flux - var/obj/item/assembly/signaler/anomaly/preset_core = new preset - choices[capitalize(preset_core.name)] = preset + var/preset = /obj/effect/anomaly/flux + var/obj/effect/anomaly/preset_anom = new preset + choices[capitalize(preset_anom.name)] = preset var/choice = tgui_input_list(user, "Choose an anomaly core.", "Anomaly Core Selection", choices) - if(choice) - var/type = choices[choice] - new type(get_turf(src)) - qdel(src) + if(choice && !picked) + anomaly_type = choices[choice] + picked = TRUE diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index eb807b54d70..9ed93e31d3f 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -231,6 +231,10 @@ anomalous = !anomalous burst_delay = anomalous ? 3 : 8 to_chat(user, span_notice("The beam is now set to [anomalous ? "anomalous." : "normal."]")) + if(anomalous) + description_info = "Use a multitool to change the particle type." + else + description_info = initial(description_info) return if(W.has_tool_quality(TOOL_MULTITOOL) && anomalous) var/chosen_particle = tgui_input_list(user, "Select particle type", "Particle Selection", ANOMALY_PARTICLE_ALL) diff --git a/code/modules/research/anomaly/anomaly_core.dm b/code/modules/research/anomaly/anomaly_core.dm index bc885a955ca..1d7d4ee7363 100644 --- a/code/modules/research/anomaly/anomaly_core.dm +++ b/code/modules/research/anomaly/anomaly_core.dm @@ -32,6 +32,10 @@ to_chat(user, span_notice("Analyzing... [src]'s stabilized field is fluctuating along frequency [format_frequency(frequency)], code [code].")) return TRUE + if(istype(W, /obj/item/anomaly_scanner)) + to_chat(user, span_notice("Sealed anomalous energies detected. Use of a releaser will unleash these energies.")) + return TRUE + if(istype(W, /obj/item/anomaly_releaser)) var/obj/item/anomaly_releaser/releaser = W if(releaser.used)