diff --git a/code/game/mecha/mecha_construction_paths.dm b/code/game/mecha/mecha_construction_paths.dm
index 5cd21715164..44a5cc69c74 100644
--- a/code/game/mecha/mecha_construction_paths.dm
+++ b/code/game/mecha/mecha_construction_paths.dm
@@ -1051,7 +1051,7 @@
"desc" = "External armor is wrenched."
),
list(
- "key" = /obj/item/assembly/signaler/anomaly,
+ "key" = /obj/item/assembly/signaler/anomaly/bluespace,
"action" = ITEM_DELETE,
"back_key" = TOOL_WELDER,
"desc" = "Anomaly core socket is open.",
@@ -1189,8 +1189,8 @@
user.visible_message("[user] unfastens Phazon Armor Plates.", "You unfasten Phazon Armor Plates.")
if(26)
if(diff==FORWARD)
- user.visible_message("[user] carefully inserts the anomaly core into [parent] and secures it.",
- "You slowly place the anomaly core into its socket and close its chamber.")
+ user.visible_message("[user] carefully inserts the bluespace anomaly core into [parent] and secures it.",
+ "You slowly place the bluespace anomaly core into its socket and close its chamber.")
return TRUE
//ODYSSEUS
diff --git a/code/game/objects/effects/anomalies.dm b/code/game/objects/effects/anomalies.dm
index 98fb613af02..78b8179799f 100644
--- a/code/game/objects/effects/anomalies.dm
+++ b/code/game/objects/effects/anomalies.dm
@@ -8,7 +8,7 @@
anchored = TRUE
light_range = 3
var/movechance = 70
- var/obj/item/assembly/signaler/anomaly/aSignal
+ var/obj/item/assembly/signaler/anomaly/aSignal = /obj/item/assembly/signaler/anomaly
var/area/impact_area
var/lifespan = 990
@@ -26,8 +26,7 @@
if (!impact_area)
return INITIALIZE_HINT_QDEL
- aSignal = new(src)
- aSignal.name = "[name] core"
+ aSignal = new aSignal(src)
aSignal.code = rand(1,100)
aSignal.anomaly_type = type
@@ -88,6 +87,7 @@
icon_state = "shield2"
density = FALSE
var/boing = 0
+ aSignal = /obj/item/assembly/signaler/anomaly/grav
/obj/effect/anomaly/grav/anomalyEffect()
..()
@@ -142,6 +142,7 @@
name = "flux wave anomaly"
icon_state = "electricity2"
density = TRUE
+ aSignal = /obj/item/assembly/signaler/anomaly/flux
var/canshock = FALSE
var/shockdamage = 20
var/explosive = TRUE
@@ -180,6 +181,7 @@
icon = 'icons/obj/projectiles.dmi'
icon_state = "bluespace"
density = TRUE
+ aSignal = /obj/item/assembly/signaler/anomaly/bluespace
/obj/effect/anomaly/bluespace/anomalyEffect()
..()
@@ -252,6 +254,7 @@
name = "pyroclastic anomaly"
icon_state = "mustard"
var/ticks = 0
+ aSignal = /obj/item/assembly/signaler/anomaly/pyro
/obj/effect/anomaly/pyro/anomalyEffect()
..()
@@ -295,6 +298,7 @@
name = "vortex anomaly"
icon_state = "bhole3"
desc = "That's a nice station you have there. It'd be a shame if something happened to it."
+ aSignal = /obj/item/assembly/signaler/anomaly/vortex
/obj/effect/anomaly/bhole/anomalyEffect()
..()
diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm
index f58324f2d4f..d67c8a85bf9 100644
--- a/code/modules/assembly/signaler.dm
+++ b/code/modules/assembly/signaler.dm
@@ -211,6 +211,37 @@
to_chat(user, "Analyzing... [src]'s stabilized field is fluctuating along frequency [format_frequency(frequency)], code [code].")
..()
+//Anomaly cores
+/obj/item/assembly/signaler/anomaly/pyro
+ name = "\improper pyroclastic anomaly core"
+ desc = "The neutralized core of a pyroclastic anomaly. It feels warm to the touch. It'd probably be valuable for research."
+ icon_state = "pyro core"
+ anomaly_type = /obj/effect/anomaly/pyro
+
+/obj/item/assembly/signaler/anomaly/grav
+ name = "\improper gravitational anomaly core"
+ desc = "The neutralized core of a gravitational anomaly. It feels much heavier than it looks. It'd probably be valuable for research."
+ icon_state = "grav core"
+ anomaly_type = /obj/effect/anomaly/grav
+
+/obj/item/assembly/signaler/anomaly/flux
+ name = "\improper flux anomaly core"
+ desc = "The neutralized core of a flux anomaly. Touching it makes your skin tingle. It'd probably be valuable for research."
+ icon_state = "flux core"
+ anomaly_type = /obj/effect/anomaly/flux
+
+/obj/item/assembly/signaler/anomaly/bluespace
+ name = "\improper bluespace anomaly core"
+ desc = "The neutralized core of a bluespace anomaly. It keeps phasing in and out of view. It'd probably be valuable for research."
+ icon_state = "anomaly core"
+ anomaly_type = /obj/effect/anomaly/bluespace
+
+/obj/item/assembly/signaler/anomaly/vortex
+ name = "\improper vortex anomaly core"
+ desc = "The neutralized core of a vortex anomaly. It won't sit still, as if some invisible force is acting on it. It'd probably be valuable for research."
+ icon_state = "vortex core"
+ anomaly_type = /obj/effect/anomaly/bhole
+
/obj/item/assembly/signaler/anomaly/attack_self()
return
diff --git a/code/modules/events/anomaly.dm b/code/modules/events/anomaly.dm
index 692e2a186e3..c0350b63b1a 100644
--- a/code/modules/events/anomaly.dm
+++ b/code/modules/events/anomaly.dm
@@ -22,7 +22,8 @@
/area/engine,
/area/solar,
/area/holodeck,
- /area/shuttle)
+ /area/shuttle,
+ /area/maintenance)
)
//Subtypes from the above that actually should explode.
diff --git a/code/modules/events/anomaly_bluespace.dm b/code/modules/events/anomaly_bluespace.dm
index 5d30fe6c1c2..8af1d05ca2c 100644
--- a/code/modules/events/anomaly_bluespace.dm
+++ b/code/modules/events/anomaly_bluespace.dm
@@ -3,7 +3,7 @@
typepath = /datum/round_event/anomaly/anomaly_bluespace
max_occurrences = 1
- weight = 5
+ weight = 15
/datum/round_event/anomaly/anomaly_bluespace
startWhen = 3
diff --git a/code/modules/events/anomaly_grav.dm b/code/modules/events/anomaly_grav.dm
index 756d7876917..f20b6cab74f 100644
--- a/code/modules/events/anomaly_grav.dm
+++ b/code/modules/events/anomaly_grav.dm
@@ -3,12 +3,24 @@
typepath = /datum/round_event/anomaly/anomaly_grav
max_occurrences = 5
- weight = 20
+ weight = 25
/datum/round_event/anomaly/anomaly_grav
startWhen = 3
announceWhen = 20
anomaly_path = /obj/effect/anomaly/grav
+/datum/round_event_control/anomaly/anomaly_grav/high
+ name = "Anomaly: Gravitational (High Intensity)"
+ typepath = /datum/round_event/anomaly/anomaly_grav/high
+ weight = 15
+ max_occurrences = 1
+ earliest_start = 20 MINUTES
+
+/datum/round_event/anomaly/anomaly_grav/high
+ startWhen = 3
+ announceWhen = 20
+ anomaly_path = /obj/effect/anomaly/grav/high
+
/datum/round_event/anomaly/anomaly_grav/announce(fake)
priority_announce("Gravitational anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
diff --git a/code/modules/events/anomaly_vortex.dm b/code/modules/events/anomaly_vortex.dm
index 2a88158f44b..f71139d7ebb 100644
--- a/code/modules/events/anomaly_vortex.dm
+++ b/code/modules/events/anomaly_vortex.dm
@@ -4,7 +4,7 @@
min_players = 20
max_occurrences = 2
- weight = 5
+ weight = 10
/datum/round_event/anomaly/anomaly_vortex
startWhen = 10
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index caab66ade82..d8d45e093c8 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -214,13 +214,31 @@
/obj/item/gun/energy/wormhole_projector
name = "bluespace wormhole projector"
- desc = "A projector that emits high density quantum-coupled bluespace beams."
+ desc = "A projector that emits high density quantum-coupled bluespace beams. Requires a bluespace anomaly core to function."
ammo_type = list(/obj/item/ammo_casing/energy/wormhole, /obj/item/ammo_casing/energy/wormhole/orange)
item_state = null
icon_state = "wormhole_projector"
var/obj/effect/portal/p_blue
var/obj/effect/portal/p_orange
var/atmos_link = FALSE
+ var/firing_core = FALSE
+
+/obj/item/gun/energy/wormhole_projector/attackby(obj/item/C, mob/user)
+ if(istype(C, /obj/item/assembly/signaler/anomaly/bluespace))
+ to_chat(user, "You insert [C] into the wormhole projector and the weapon gently hums to life.")
+ firing_core = TRUE
+ playsound(src.loc, 'sound/machines/click.ogg', 50, TRUE)
+ qdel(C)
+ return
+
+/obj/item/gun/energy/wormhole_projector/can_shoot()
+ if(!firing_core)
+ return FALSE
+ return ..()
+
+/obj/item/gun/energy/wormhole_projector/shoot_with_empty_chamber(mob/living/user)
+ . = ..()
+ to_chat(user, "The display says, 'NO CORE INSTALLED'.")
/obj/item/gun/energy/wormhole_projector/update_icon_state()
icon_state = item_state = "[initial(icon_state)][select]"
@@ -338,9 +356,25 @@
return
/obj/item/gun/energy/gravity_gun
- name = "one-point bluespace-gravitational manipulator"
- desc = "An experimental, multi-mode device that fires bolts of Zero-Point Energy, causing local distortions in gravity."
+ name = "one-point gravitational manipulator"
+ desc = "An experimental, multi-mode device that fires bolts of Zero-Point Energy, causing local distortions in gravity. Requires a gravitational anomaly core to function."
ammo_type = list(/obj/item/ammo_casing/energy/gravity/repulse, /obj/item/ammo_casing/energy/gravity/attract, /obj/item/ammo_casing/energy/gravity/chaos)
item_state = "gravity_gun"
icon_state = "gravity_gun"
var/power = 4
+ var/firing_core = FALSE
+
+/obj/item/gun/energy/gravity_gun/attackby(obj/item/C, mob/user)
+ if(istype(C, /obj/item/assembly/signaler/anomaly/grav))
+ to_chat(user, "You insert [C] into the gravitational manipulator and the weapon gently hums to life.")
+ firing_core = TRUE
+ playsound(src.loc, 'sound/machines/click.ogg', 50, TRUE)
+ qdel(C)
+ return
+ return ..()
+
+/obj/item/gun/energy/gravity_gun/can_shoot()
+ if(!firing_core)
+ return FALSE
+ return ..()
+
diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm
index a441ec0d773..abcb36795bb 100644
--- a/code/modules/research/designs/weapon_designs.dm
+++ b/code/modules/research/designs/weapon_designs.dm
@@ -248,7 +248,7 @@
/datum/design/wormhole_projector
name = "Bluespace Wormhole Projector"
- desc = "A projector that emits high density quantum-coupled bluespace beams."
+ desc = "A projector that emits high density quantum-coupled bluespace beams. Requires a bluespace anomaly core to function."
id = "wormholeprojector"
build_type = PROTOLATHE
materials = list(/datum/material/silver = 2000, /datum/material/iron = 5000, /datum/material/diamond = 2000, /datum/material/bluespace = 3000)
@@ -315,8 +315,8 @@
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/gravitygun
- name = "One-point Bluespace-gravitational Manipulator"
- desc = "A multi-mode device that blasts one-point bluespace-gravitational bolts that locally distort gravity."
+ name = "One-point Gravitational Manipulator"
+ desc = "A multi-mode device that blasts one-point bluespace-gravitational bolts that locally distort gravity. Requires a gravitational anomaly core to function."
id = "gravitygun"
build_type = PROTOLATHE
materials = list(/datum/material/silver = 8000, /datum/material/uranium = 8000, /datum/material/glass = 12000, /datum/material/iron = 12000, /datum/material/diamond = 3000, /datum/material/bluespace = 3000)
diff --git a/icons/obj/assemblies/new_assemblies.dmi b/icons/obj/assemblies/new_assemblies.dmi
index df9517aeaa5..adb0b69c590 100644
Binary files a/icons/obj/assemblies/new_assemblies.dmi and b/icons/obj/assemblies/new_assemblies.dmi differ