diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index f313094b556..19b3f99029a 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -136,4 +136,5 @@
#define STAGE_TWO 3
#define STAGE_THREE 5
#define STAGE_FOUR 7
-#define STAGE_FIVE 9
\ No newline at end of file
+#define STAGE_FIVE 9
+#define STAGE_SIX 11 //From supermatter shard
\ No newline at end of file
diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm
index f8005c203af..4c07ffdbb43 100644
--- a/code/modules/power/singularity/singularity.dm
+++ b/code/modules/power/singularity/singularity.dm
@@ -25,6 +25,7 @@
var/target = null //its target. moves towards the target if it has one
var/last_failed_movement = 0//Will not move in the same dir if it couldnt before, will help with the getting stuck on fields thing
var/last_warning
+ var/consumedSupermatter = 0 //If the singularity has eaten a supermatter shard and can go to stage six
/obj/singularity/New(loc, var/starting_energy = 50, var/temp = 0)
//CARN: admin-alert for chuckle-fuckery.
@@ -126,6 +127,8 @@
var/temp_allowed_size = src.allowed_size
if(force_size)
temp_allowed_size = force_size
+ if(temp_allowed_size >= STAGE_SIX && !consumedSupermatter)
+ temp_allowed_size = STAGE_FIVE
switch(temp_allowed_size)
if(STAGE_ONE)
current_size = STAGE_ONE
@@ -182,6 +185,15 @@
grav_pull = 10
consume_range = 4
dissipate = 0 //It cant go smaller due to e loss
+ if(STAGE_SIX) //This only happens if a stage 5 singulo consumes a supermatter shard.
+ current_size = STAGE_SIX
+ icon = 'icons/effects/352x352.dmi'
+ icon_state = "singularity_s11"
+ pixel_x = -160
+ pixel_y = -160
+ grav_pull = 15
+ consume_range = 5
+ dissipate = 0
if(current_size == allowed_size)
investigate_log("grew to size [current_size]","singulo")
return 1
@@ -196,6 +208,8 @@
investigate_log("collapsed.","singulo")
qdel(src)
return 0
+ if(energy > 2999 && !consumedSupermatter)
+ energy = 2000
switch(energy)//Some of these numbers might need to be changed up later -Mport
if(1 to 199)
allowed_size = STAGE_ONE
@@ -205,8 +219,10 @@
allowed_size = STAGE_THREE
if(1000 to 1999)
allowed_size = STAGE_FOUR
- if(2000 to INFINITY)
+ if(2000 to 2999)
allowed_size = STAGE_FIVE
+ if(3000 to INFINITY)
+ allowed_size = STAGE_SIX
if(current_size != allowed_size)
expand()
return 1
@@ -227,6 +243,11 @@
/obj/singularity/proc/consume(var/atom/A)
var/gain = A.singularity_act(current_size)
src.energy += gain
+ if(istype(A, /obj/machinery/power/supermatter) && !consumedSupermatter)
+ desc = "[initial(desc)] It glows fiercely with inner fire."
+ name = "supermatter-charged [initial(name)]"
+ consumedSupermatter = 1
+ light_range = 10
return
@@ -323,6 +344,10 @@
toxmob()
if(4)//Stun mobs who lack optic scanners
mezzer()
+ if(5,6) //Sets all nearby mobs on fire
+ if(current_size < STAGE_SIX)
+ return 0
+ combust_mobs()
else
return 0
return 1
@@ -344,6 +369,14 @@
return
+/obj/singularity/proc/combust_mobs()
+ for(var/mob/living/carbon/C in orange(20, src))
+ C.visible_message("[C]'s skin bursts into flame!", \
+ "You feel an inner fire as your skin is suddenly covered in fire!")
+ C.adjust_fire_stacks(5)
+ C.IgniteMob()
+ return
+
/obj/singularity/proc/mezzer()
for(var/mob/living/carbon/M in oviewers(8, src))
if(istype(M, /mob/living/carbon/brain)) //Ignore brains
diff --git a/code/modules/supermatter/supermatter.dm b/code/modules/supermatter/supermatter.dm
index bc75e077e27..92264de763a 100644
--- a/code/modules/supermatter/supermatter.dm
+++ b/code/modules/supermatter/supermatter.dm
@@ -245,6 +245,17 @@
damage += Proj.damage * config_bullet_energy
return 0
+/obj/machinery/power/supermatter/singularity_act()
+ var/gain = 100
+ investigate_log("Supermatter shard consumed by singularity.","singulo")
+ message_admins("Singularity has consumed a supermatter shard and can now become stage six.")
+ visible_message("[src] is consumed by the singularity!")
+ for(var/mob/M in mob_list)
+ M << 'sound/effects/supermatter.ogg' //everyone goan know bout this
+ M << "A horrible screeching fills your ears, and a wave of dread washes over you..."
+ qdel(src)
+ return(gain)
+
/obj/machinery/power/supermatter/attack_robot(mob/user as mob)
if(Adjacent(user))
return attack_hand(user)
diff --git a/icons/effects/352x352.dmi b/icons/effects/352x352.dmi
new file mode 100644
index 00000000000..86b40959d56
Binary files /dev/null and b/icons/effects/352x352.dmi differ
diff --git a/sound/effects/supermatter.ogg b/sound/effects/supermatter.ogg
new file mode 100644
index 00000000000..83081a5e9bf
Binary files /dev/null and b/sound/effects/supermatter.ogg differ