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