diff --git a/_maps/map_files/stations/boxstation.dmm b/_maps/map_files/stations/boxstation.dmm index 639ab4c30bc..8b0a0706d6c 100644 --- a/_maps/map_files/stations/boxstation.dmm +++ b/_maps/map_files/stations/boxstation.dmm @@ -23872,10 +23872,11 @@ /turf/simulated/floor/plasteel, /area/station/public/storage/tools/auxiliary) "bGa" = ( -/obj/machinery/atmospherics/unary/portables_connector{ - dir = 4 - }, /obj/machinery/light, +/obj/machinery/atmospherics/binary/pump{ + dir = 8; + name = "Heat Exchange to Port" + }, /turf/simulated/floor/plasteel{ icon_state = "whitepurple" }, @@ -33866,6 +33867,9 @@ }, /area/station/science/toxins/mixing) "ctQ" = ( +/obj/machinery/atmospherics/unary/portables_connector{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "whitepurplecorner" }, @@ -38897,7 +38901,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 10 }, -/obj/structure/lattice, +/obj/structure/lattice/catwalk, /turf/space, /area/space/nearstation) "cNF" = ( @@ -48445,6 +48449,13 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/asmaint2) +"eff" = ( +/obj/machinery/anomaly_refinery, +/obj/machinery/alarm/directional/east, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/science/toxins/launch) "efk" = ( /obj/structure/rack{ dir = 1 @@ -54066,7 +54077,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 9 }, -/obj/structure/lattice, +/obj/structure/lattice/catwalk, /turf/space, /area/space/nearstation) "gNX" = ( @@ -62496,8 +62507,8 @@ }, /area/station/maintenance/asmaint2) "kQX" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 1 }, /turf/simulated/floor/plasteel{ icon_state = "white" @@ -66528,13 +66539,6 @@ icon_state = "white" }, /area/station/science/toxins/mixing) -"mMV" = ( -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 10 - }, -/obj/structure/lattice/catwalk, -/turf/space, -/area/space/nearstation) "mNd" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -70725,15 +70729,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/fore) -"oND" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 8; - name = "Heat Exchange to Port" - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitepurple" - }, -/area/station/science/toxins/mixing) "oNH" = ( /obj/structure/cable, /obj/effect/spawner/window/reinforced/polarized/grilled{ @@ -76601,6 +76596,7 @@ /obj/item/storage/toolbox/mechanical, /obj/structure/table/reinforced, /obj/machinery/requests_console/directional/south, +/obj/item/raw_anomaly_core, /turf/simulated/floor/plasteel{ icon_state = "darkpurple" }, @@ -78011,12 +78007,6 @@ }, /turf/simulated/floor/plasteel, /area/station/hallway/primary/central/south) -"ska" = ( -/turf/simulated/floor/plasteel{ - dir = 6; - icon_state = "whitepurple" - }, -/area/station/science/toxins/mixing) "skb" = ( /obj/structure/cable{ icon_state = "1-2" @@ -80736,8 +80726,8 @@ /turf/simulated/floor/plasteel, /area/station/engineering/transmission_laser) "tHH" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 9 }, /turf/simulated/floor/plasteel{ icon_state = "white" @@ -84462,7 +84452,6 @@ network = list("Toxins"); pixel_x = 32 }, -/obj/machinery/alarm/directional/north, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "darkpurple" @@ -84798,13 +84787,6 @@ icon_state = "white" }, /area/station/science/xenobiology) -"vJx" = ( -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 9 - }, -/obj/structure/lattice/catwalk, -/turf/space, -/area/space/nearstation) "vJN" = ( /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 @@ -85719,6 +85701,13 @@ icon_state = "caution" }, /area/station/public/dorms) +"wfZ" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 9 + }, +/obj/structure/lattice, +/turf/space, +/area/space/nearstation) "wgt" = ( /obj/structure/table/wood, /obj/item/ashtray/glass, @@ -89212,6 +89201,13 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/abandonedservers) +"xPT" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 10 + }, +/obj/structure/lattice, +/turf/space, +/area/space/nearstation) "xQB" = ( /obj/effect/spawner/window/reinforced/tinted, /obj/structure/disposalpipe/segment{ @@ -126269,7 +126265,7 @@ aab cQp aab cZh -mMV +cNE dba djE dcS @@ -126281,7 +126277,7 @@ djE djE djE djE -vJx +gNQ aab aab aab @@ -127573,7 +127569,7 @@ igi igi igi igi -gNQ +wfZ fPY wyD wyD @@ -127802,7 +127798,7 @@ cep cjq cep cxO -cNE +xPT igi igi igi @@ -127820,7 +127816,7 @@ igi igi igi igi -gNQ +wfZ dgS eQU eQU @@ -143714,7 +143710,7 @@ nTk cmB vXo kQX -oND +vjd fDJ ioU tPX @@ -143971,7 +143967,7 @@ plq cmB wdE tHH -vjd +fDJ fDJ kCd ros @@ -144228,8 +144224,8 @@ lVB cmB cWN vSI -ska fDJ +eff vyQ xEf jRM @@ -144485,7 +144481,7 @@ bES fUW fqQ fqQ -fqQ +fDJ fDJ wan wan diff --git a/_maps/map_files/stations/cerestation.dmm b/_maps/map_files/stations/cerestation.dmm index 90fe833660d..97fa8e5e889 100644 --- a/_maps/map_files/stations/cerestation.dmm +++ b/_maps/map_files/stations/cerestation.dmm @@ -4716,6 +4716,7 @@ }, /obj/structure/table/reinforced, /obj/item/paper_bin, +/obj/item/raw_anomaly_core, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -117736,6 +117737,7 @@ /area/station/engineering/atmos) "xyC" = ( /obj/machinery/firealarm/directional/east, +/obj/machinery/anomaly_refinery, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkpurple" diff --git a/_maps/map_files/stations/deltastation.dmm b/_maps/map_files/stations/deltastation.dmm index c39d3cedc0d..8b7f6e36f3c 100644 --- a/_maps/map_files/stations/deltastation.dmm +++ b/_maps/map_files/stations/deltastation.dmm @@ -10908,15 +10908,6 @@ }, /turf/simulated/floor/wood, /area/station/service/theatre) -"aSj" = ( -/obj/machinery/flasher{ - id = "Execution"; - pixel_y = -27 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/station/security/execution) "aSp" = ( /obj/structure/cable{ icon_state = "1-2" @@ -48433,6 +48424,7 @@ pixel_x = -5; pixel_y = 5 }, +/obj/item/raw_anomaly_core, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "darkpurple" @@ -54609,6 +54601,14 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) +"fAd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/security/execution) "fAB" = ( /obj/structure/cable/extra_insulated{ icon_state = "1-2" @@ -56605,6 +56605,10 @@ icon_state = "neutral" }, /area/station/maintenance/starboard) +"gqm" = ( +/obj/structure/closet/secure_closet/scientist, +/turf/simulated/floor/plasteel/white, +/area/station/science/toxins/mixing) "gqo" = ( /obj/machinery/door/airlock/security/glass, /obj/machinery/door/firedoor, @@ -59735,12 +59739,11 @@ /area/station/engineering/control) "hMa" = ( /obj/machinery/power/apc/critical/directional/north, -/obj/machinery/firealarm/directional/east, /obj/structure/cable{ icon_state = "0-2" }, /turf/simulated/floor/plasteel{ - dir = 5; + dir = 1; icon_state = "darkpurple" }, /area/station/science/toxins/launch) @@ -69485,6 +69488,12 @@ }, /turf/simulated/floor/plasteel/white, /area/station/medical/medbay) +"lYy" = ( +/obj/machinery/atmospherics/unary/portables_connector{ + dir = 1 + }, +/turf/simulated/floor/plasteel/white, +/area/station/science/toxins/mixing) "lYz" = ( /obj/structure/sign/poster/contraband/random/directional/north, /turf/simulated/floor/plating, @@ -69629,7 +69638,7 @@ c_tag = "Research Toxin Mixing Fore"; network = list("Research","SS13") }, -/obj/structure/closet/secure_closet/scientist, +/obj/machinery/atmospherics/unary/thermomachine/freezer, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurple" @@ -72950,6 +72959,16 @@ /obj/effect/spawner/random/blood, /turf/simulated/floor/plasteel/dark, /area/station/maintenance/apmaint) +"nwt" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "darkpurple" + }, +/area/station/science/toxins/launch) "nwu" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 @@ -74143,6 +74162,14 @@ name = "reinforced stairs" }, /area/station/science/test_chamber) +"nXG" = ( +/obj/machinery/firealarm/directional/east, +/obj/machinery/anomaly_refinery, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "darkpurple" + }, +/area/station/science/toxins/launch) "nXN" = ( /obj/machinery/light{ dir = 4 @@ -75790,6 +75817,15 @@ icon_state = "tranquillite" }, /area/station/service/kitchen) +"oHl" = ( +/obj/machinery/flasher{ + id = "Execution"; + pixel_y = -27 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/security/execution) "oHv" = ( /obj/structure/cable{ icon_state = "1-2" @@ -76217,15 +76253,6 @@ }, /turf/simulated/floor/plasteel, /area/station/engineering/transmission_laser) -"oQB" = ( -/obj/machinery/atmospherics/unary/thermomachine/freezer{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitepurple" - }, -/area/station/science/toxins/mixing) "oQO" = ( /obj/structure/cable{ icon_state = "0-8" @@ -77421,15 +77448,10 @@ /turf/simulated/floor/wood, /area/station/maintenance/fore) "pqB" = ( -/obj/machinery/disposal, /obj/structure/disposalpipe/trunk, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal, -/obj/machinery/light{ - dir = 4 - }, +/obj/machinery/disposal, /turf/simulated/floor/plasteel{ - dir = 6; icon_state = "darkpurple" }, /area/station/science/toxins/launch) @@ -79872,14 +79894,6 @@ icon_state = "caution" }, /area/station/public/fitness) -"quz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/station/security/execution) "quL" = ( /obj/item/kirbyplants/large, /obj/machinery/light, @@ -80824,7 +80838,7 @@ }, /area/station/hallway/secondary/entry/north) "qQx" = ( -/obj/structure/closet/secure_closet/scientist, +/obj/machinery/atmospherics/unary/thermomachine/heater, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurple" @@ -82780,15 +82794,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/wood, /area/station/security/detective) -"rCo" = ( -/obj/machinery/atmospherics/unary/thermomachine/heater{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitepurple" - }, -/area/station/science/toxins/mixing) "rCv" = ( /obj/item/kirbyplants/large{ icon_state = "plant-18" @@ -84254,9 +84259,6 @@ /turf/simulated/floor/plasteel/dark, /area/station/turret_protected/ai_upload) "sfD" = ( -/obj/machinery/door/airlock/research, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/science/tox, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -84266,9 +84268,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/door/firedoor/heavy, /turf/simulated/floor/plasteel{ - icon_state = "darkpurplefull" + dir = 4; + icon_state = "darkpurple" }, /area/station/science/toxins/launch) "sgd" = ( @@ -84902,12 +84904,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/port) -"sqF" = ( -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitepurple" - }, -/area/station/science/toxins/mixing) "sqI" = ( /obj/machinery/recharger/wallcharger{ pixel_y = 25 @@ -86223,14 +86219,6 @@ icon_state = "redyellowfull" }, /area/station/medical/break_room) -"sSH" = ( -/obj/structure/closet/bombcloset, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel{ - dir = 9; - icon_state = "whitepurple" - }, -/area/station/science/toxins/mixing) "sSX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ @@ -87059,8 +87047,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "darkpurple" + icon_state = "dark" }, /area/station/science/toxins/launch) "tiC" = ( @@ -89965,11 +89952,15 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/access/all/science/tox, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/door/firedoor/heavy, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whitepurple" }, -/area/station/science/toxins/mixing) +/area/station/science/toxins/launch) "uos" = ( /obj/structure/table/reinforced, /obj/item/assembly/prox_sensor{ @@ -93815,6 +93806,10 @@ icon_state = "neutralcorner" }, /area/station/hallway/primary/starboard/south) +"vTZ" = ( +/obj/structure/closet/bombcloset, +/turf/simulated/floor/plasteel/white, +/area/station/science/toxins/mixing) "vUx" = ( /obj/effect/spawner/random/blood/maybe, /obj/structure/cable/extra_insulated{ @@ -127982,9 +127977,9 @@ xlH hvg bDp gQW -gQW +nXG sfD -gKj +nwt gQW gQW dkI @@ -128238,12 +128233,12 @@ drn dhG drn drn -dkI -sSH +gQW +gQW uoa -sqF -oQB -rCo +gKj +gQW +dkI wVZ noF ogw @@ -128498,9 +128493,9 @@ cIS dkI kdm jqA -dyz -oba -oba +vTZ +gqm +gqm eaO gHc kVI @@ -129011,7 +129006,7 @@ xFq drn dkI qQx -dyz +lYy dyz nWB dyz @@ -129268,7 +129263,7 @@ tIK dhG dkI mcg -dyz +lYy dyz nWB dyz @@ -156944,7 +156939,7 @@ eud jbp uNJ vzV -aSj +oHl aMv aaa aaa @@ -157200,7 +157195,7 @@ vyc hof tvQ bdf -quz +fAd oRB aMv aaa diff --git a/_maps/map_files/stations/emeraldstation.dmm b/_maps/map_files/stations/emeraldstation.dmm index fa9a1231cf1..298b8b07905 100644 --- a/_maps/map_files/stations/emeraldstation.dmm +++ b/_maps/map_files/stations/emeraldstation.dmm @@ -74714,10 +74714,10 @@ /turf/space, /area/space) "oFZ" = ( -/obj/machinery/firealarm/directional/west, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, +/obj/machinery/anomaly_refinery, /turf/simulated/floor/plasteel, /area/station/science/toxins/launch) "oGg" = ( @@ -96090,6 +96090,7 @@ name = "west bump"; pixel_x = -28 }, +/obj/item/raw_anomaly_core, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "whitepurple" @@ -123448,6 +123449,10 @@ icon_state = "dark" }, /area/station/aisat/service) +"yhM" = ( +/obj/machinery/firealarm/directional/north, +/turf/simulated/floor/plasteel, +/area/station/science/toxins/launch) "yhR" = ( /obj/machinery/door/window/classic/normal{ dir = 8; @@ -176759,7 +176764,7 @@ bJV dKU tyE dtw -qPL +yhM xrQ dxp lwp diff --git a/_maps/map_files/stations/metastation.dmm b/_maps/map_files/stations/metastation.dmm index 47a3a013ae3..1a5cd55abce 100644 --- a/_maps/map_files/stations/metastation.dmm +++ b/_maps/map_files/stations/metastation.dmm @@ -72496,9 +72496,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/item/paper_bin, -/obj/item/pen, -/obj/structure/table/reinforced, +/obj/machinery/anomaly_refinery, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "darkpurple" @@ -72613,6 +72611,7 @@ "rAG" = ( /obj/structure/table/reinforced, /obj/item/storage/toolbox/mechanical, +/obj/item/raw_anomaly_core, /turf/simulated/floor/plasteel{ icon_state = "darkpurple" }, diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm index fe2ea2e6575..37e66ca974a 100644 --- a/code/game/machinery/doppler_array.dm +++ b/code/game/machinery/doppler_array.dm @@ -10,6 +10,8 @@ var/explosion_target var/datum/tech/toxins/toxins_tech var/max_toxins_tech = 7 + /// List of linked machines + var/list/linked_machines = list() /datum/explosion_log var/logged_time @@ -49,6 +51,16 @@ return update_icon(UPDATE_ICON_STATE) +/obj/machinery/doppler_array/multitool_act(mob/living/user, obj/item/I) + . = TRUE + if(!I.use_tool(src, user, 0, volume = I.tool_volume)) + return + if(!I.multitool_check_buffer(user)) + return + var/obj/item/multitool/multi = I + multi.set_multitool_buffer(user, src) + to_chat(user, "You save [src]'s linking data to the buffer.") + /obj/machinery/doppler_array/attack_hand(mob/user) if(..()) return @@ -148,6 +160,8 @@ messages += "Toxins technology level upgraded to [toxins_tech.level]. Swipe a technology disk to save data." for(var/message in messages) atom_say(message) + for(var/obj/machinery/anomaly_refinery/anom_refiner in linked_machines) + anom_refiner.refine_core(orig_light_range) /obj/machinery/doppler_array/update_icon_state() if(stat & BROKEN) diff --git a/code/game/machinery/machine_frame.dm b/code/game/machinery/machine_frame.dm index 87428392a0b..872f5ca1f62 100644 --- a/code/game/machinery/machine_frame.dm +++ b/code/game/machinery/machine_frame.dm @@ -1018,6 +1018,18 @@ to destroy them and players will be able to make replacements. /obj/item/stock_parts/cell = 1, /obj/item/stock_parts/manipulator = 1) +/obj/item/circuitboard/anomaly_refinery + board_name = "Anomaly Refinery" + icon_state = "science" + build_path = /obj/machinery/anomaly_refinery + board_type = "machine" + origin_tech = "programming=4;engineering=4;" + req_components = list( + /obj/item/stock_parts/scanning_module = 1, + /obj/item/stack/sheet/glass = 1, + /obj/item/stack/cable_coil = 2 + ) + // Telecomms circuit boards: /obj/item/circuitboard/tcomms/relay board_name = "Telecommunications Relay" diff --git a/code/modules/research/anomaly/anomaly.dm b/code/modules/research/anomaly/anomaly.dm index 47158e2a5e6..a36196fb6a2 100644 --- a/code/modules/research/anomaly/anomaly.dm +++ b/code/modules/research/anomaly/anomaly.dm @@ -68,6 +68,17 @@ new A(loc) qdel(src) +/obj/item/raw_anomaly_core + name = "unrefined anomaly core" + desc = "The raw core of an unknown anomaly. It glimmers with potential." + icon_state = "unrefined_anomaly_core" + w_class = WEIGHT_CLASS_SMALL + var/target_explosion_size = 4 + +/obj/item/raw_anomaly_core/Initialize(mapload) + . = ..() + target_explosion_size = rand(4, 20) + /obj/item/reactive_armour_shell name = "reactive armour shell" desc = "An experimental suit of armour, awaiting installation of an anomaly core." diff --git a/code/modules/research/anomaly/anomaly_refiner.dm b/code/modules/research/anomaly/anomaly_refiner.dm new file mode 100644 index 00000000000..592b4e3d123 --- /dev/null +++ b/code/modules/research/anomaly/anomaly_refiner.dm @@ -0,0 +1,119 @@ +/obj/machinery/anomaly_refinery + name = "anomaly refinery" + desc = "An advanced machine capable of implosion-compressing raw anomaly cores into finished artifacts. Also equipped with state of the art anomaly-analysis software." + icon = 'icons/obj/machines/research.dmi' + base_icon_state = "explosive_compressor" + icon_state = "explosive_compressor" + density = TRUE + + /// The raw core inserted in the machine. + var/obj/item/raw_anomaly_core/inserted_core + /// The refined core produced by the machine + var/obj/item/assembly/signaler/anomaly/refined_core + /// The message produced by the explosive compressor at the end of the compression test. + var/test_status = "" + /// Linked tachyon-doppler array + var/obj/machinery/doppler_array/linked_doppler + +/obj/machinery/anomaly_refinery/Initialize(mapload) + . = ..() + component_parts = list() + component_parts += new /obj/item/circuitboard/anomaly_refinery(src) + component_parts += new /obj/item/stock_parts/scanning_module(src) + component_parts += new /obj/item/stack/sheet/glass(src) + component_parts += new /obj/item/stack/cable_coil(src, 2) + RefreshParts() + // Try to link to tachyon-doppler array on initialize. Link to the first doppler it can find. + for(var/obj/machinery/doppler_array/doppler in view(3, src)) + linked_doppler = doppler + linked_doppler.linked_machines |= src + return + +/obj/machinery/anomaly_refinery/examine(mob/user) + . = ..() + if(inserted_core) + . += "There is [inserted_core] in [src]." + . += "[inserted_core]'s causality point corresponds to an explosive of size [inserted_core.target_explosion_size]." + if(refined_core) + . += "There is a [refined_core] in [src]." + +/obj/machinery/anomaly_refinery/item_interaction(mob/living/user, obj/item/used, list/modifiers) + if(!istype(used, /obj/item/raw_anomaly_core)) + return ..() + if(refined_core) + to_chat(user, "There is already a core in [src]!") + return ITEM_INTERACT_COMPLETE + if(used.flags & NODROP || !user.drop_item() || !used.forceMove(src)) + to_chat(user, "[used] is stuck to your hand!") + return ITEM_INTERACT_COMPLETE + inserted_core = used + to_chat(user, "You insert [used] into [src].") + atom_say("Analyzing... [inserted_core]'s causality point corresponds to an explosive of size [inserted_core.target_explosion_size].") + return ITEM_INTERACT_COMPLETE + +/obj/machinery/anomaly_refinery/attack_hand(mob/user) + if(..()) + return + add_fingerprint(user) + if(refined_core) + user.put_in_active_hand(refined_core) + refined_core = null + return + if(inserted_core) + user.put_in_active_hand(inserted_core) + inserted_core = null + return + +/obj/machinery/anomaly_refinery/screwdriver_act(mob/user, obj/item/I) + if(!I.use_tool(src, user, 0, volume = 0)) + return + . = TRUE + default_deconstruction_screwdriver(user, icon_state, icon_state, I) + +/obj/machinery/anomaly_refinery/crowbar_act(mob/user, obj/item/I) + if(default_deconstruction_crowbar(user, I)) + return TRUE + +/obj/machinery/anomaly_refinery/multitool_act(mob/living/user, obj/item/I) + . = TRUE + if(!I.use_tool(src, user, 0, volume = I.tool_volume)) + return + if(!I.multitool_check_buffer(user)) + return + if(panel_open) + var/obj/item/multitool/multi = I + if(!istype(multi.buffer, /obj/machinery/doppler_array)) + to_chat(user, "You cannot link [multi.buffer] to [src]!") + return + linked_doppler = multi.buffer + linked_doppler.linked_machines |= src + to_chat(user, "You link [multi.buffer] to [src].") + +/obj/machinery/anomaly_refinery/proc/refine_core(explosion_size) + if(!inserted_core) + return + if(inserted_core.target_explosion_size != explosion_size) + atom_say("Temporal displacement detected. Criticality status: FAILURE.") + return + inserted_core = null + if(emagged) + atom_say("Temporal displacement detected. Criticality status: SUCCESS.") + atom_say("ERROR: CONTAINMENT STATUS - NONFUNCTIONAL.") + var/list/types = list(/obj/effect/anomaly/flux, /obj/effect/anomaly/cryo, /obj/effect/anomaly/grav, /obj/effect/anomaly/pyro, /obj/effect/anomaly/bluespace, /obj/effect/anomaly/bhole) + var/released_anomaly = pick(types) + new released_anomaly(get_turf(src)) + return + var/list/types = list(/obj/item/assembly/signaler/anomaly/pyro, + /obj/item/assembly/signaler/anomaly/cryo, + /obj/item/assembly/signaler/anomaly/grav, + /obj/item/assembly/signaler/anomaly/flux, + /obj/item/assembly/signaler/anomaly/bluespace, + /obj/item/assembly/signaler/anomaly/vortex) + var/A = pick(types) + refined_core = new A(src) + atom_say("Temporal displacement detected. Criticality status: SUCCESS.") + +/obj/machinery/anomaly_refinery/emag_act(mob/user) + . = ..() + emagged = TRUE + atom_say("ERROR: CONTAINMENT STATUS - NONFUNCTIONAL.") diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index 1ba1ae3f03d..f93823699de 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -311,6 +311,16 @@ build_path = /obj/item/circuitboard/cyborgrecharger category = list("Research Machinery") +/datum/design/anomaly_refinery + name = "Machine Board (Anomaly Refinery)" + desc = "The circuit board for an Anomaly Refinery." + id = "anomalyrefinery" + req_tech = list("powerstorage" = 5, "engineering" = 5, "toxins" = 3) + build_type = IMPRINTER + materials = list(MAT_GLASS = 1000) + build_path = /obj/item/circuitboard/anomaly_refinery + category = list("Research Machinery") + /datum/design/scientific_analyzer name = "Machine Board (Scientific Analyzer)" desc = "The circuit board for a Scientific Analyzer." diff --git a/code/modules/supply/supply_packs/pack_science.dm b/code/modules/supply/supply_packs/pack_science.dm index 0f6149c2753..a12b3825482 100644 --- a/code/modules/supply/supply_packs/pack_science.dm +++ b/code/modules/supply/supply_packs/pack_science.dm @@ -121,6 +121,14 @@ containername = "machine prototype crate" access = ACCESS_RESEARCH +/datum/supply_packs/science/raw_anomaly_core + name = "Raw Anomaly Core Crate" + contains = list(/obj/item/raw_anomaly_core) + cost = 2000 + containertype = /obj/structure/closet/crate/secure/scisec + containername = "raw anomaly core crate" + access = ACCESS_RESEARCH + /datum/supply_packs/science/oil name = "Oil Tank Crate" contains = list(/obj/structure/reagent_dispensers/oil, diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index 8e70528a470..01e2f5530dd 100644 Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ diff --git a/icons/obj/machines/research.dmi b/icons/obj/machines/research.dmi index 58499d761bc..8b6a07f2e9a 100644 Binary files a/icons/obj/machines/research.dmi and b/icons/obj/machines/research.dmi differ diff --git a/paradise.dme b/paradise.dme index 67ff14b803f..553f0cd42d0 100644 --- a/paradise.dme +++ b/paradise.dme @@ -3053,6 +3053,7 @@ #include "code\modules\research\server.dm" #include "code\modules\research\strange_objects.dm" #include "code\modules\research\anomaly\anomaly.dm" +#include "code\modules\research\anomaly\anomaly_refiner.dm" #include "code\modules\research\designs\AI_module_designs.dm" #include "code\modules\research\designs\autolathe_designs.dm" #include "code\modules\research\designs\biogenerator_designs.dm"