diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm
index e40634abad..65ffba2f22 100644
--- a/code/game/gamemodes/events.dm
+++ b/code/game/gamemodes/events.dm
@@ -162,6 +162,19 @@
A.power_environ = 1
A.power_change()
+/proc/power_restore_quick()
+
+ command_alert("All SMESs on [station_name()] have been recharged. We apologize for the inconvenience.", "Power Systems Nominal")
+ world << sound('poweron.ogg')
+ for(var/obj/machinery/power/smes/S in world)
+ if(S.z != 1)
+ continue
+ S.charge = S.capacity
+ S.output = 200000
+ S.online = 1
+ S.updateicon()
+ S.power_change()
+
/proc/appendicitis()
for(var/mob/living/carbon/human/H in living_mob_list)
var/foundAlready = 0 // don't infect someone that already has the virus
diff --git a/code/game/magic/cultist/runes.dm b/code/game/magic/cultist/runes.dm
index f1a9e3b713..47111e106d 100644
--- a/code/game/magic/cultist/runes.dm
+++ b/code/game/magic/cultist/runes.dm
@@ -538,15 +538,16 @@ var/list/sacrificed = list()
var/list/mob/living/carbon/human/cultsinrange = list()
var/list/mob/living/carbon/human/victims = list()
for(var/mob/living/carbon/human/V in src.loc)//Checks for non-cultist humans to sacrifice
- if(!(iscultist(V)))
- victims += V
- for(var/mob/living/carbon/brain/V in src.loc)//Checks for brains to sacrifice
- victims += V
- for(var/mob/living/silicon/V in src.loc)//Checks for borgs/AIs to sacrifice
- victims += V
- for(var/obj/item/device/mmi/V in src.loc)//Checks for MMIs
- if(V.brainmob)
- victims += V.brainmob
+ if(ishuman(V) || isbrain(V) || issilicon(V))// || istype(V,/obj/item/device/mmi))
+ if(!(iscultist(V)))
+ victims += V//Checks for cult status and mob type
+ for(var/obj/item/I in src.loc)//Checks for MMIs/brains/Intellicards
+ if(istype(I,/obj/item/brain) || istype(I,/obj/item/device/mmi))
+ if(hasvar(I,"brainmob"))//Makes sure it has a brainmob
+ victims += I:brainmob
+ if(istype(I,/obj/item/device/aicard))
+ for(var/mob/living/silicon/ai/A in I)//Because AIs are just stored inside the card and not attached to a var
+ victims += A
for(var/mob/living/carbon/C in orange(1,src))
if(iscultist(C) && !C.stat)
cultsinrange += C
@@ -558,8 +559,6 @@ var/list/sacrificed = list()
sacrificed += H.mind
if(isrobot(H))
H.dust()//To prevent the MMI from remaining
- else if(isbrain(H))
- H.death()//Since they don't have a proper gib
else
H.gib()
usr << "\red The Geometer of Blood accepts this sacrifice, your objective is now complete."
@@ -576,8 +575,6 @@ var/list/sacrificed = list()
usr << "\red However, this soul was not enough to gain His favor."
if(isrobot(H))
H.dust()//To prevent the MMI from remaining
- else if(isbrain(H))
- H.death()//Since they don't have a proper gib
else
H.gib()
else
@@ -589,8 +586,6 @@ var/list/sacrificed = list()
usr << "\red However, a mere dead body is not enough to satisfy Him."
if(isrobot(H))
H.dust()//To prevent the MMI from remaining
- else if(isbrain(H))
- H.death()//Since they don't have a proper gib
else
H.gib()
else
@@ -605,8 +600,6 @@ var/list/sacrificed = list()
usr << "\red However, a mere dead body is not enough to satisfy Him."
if(isrobot(H))
H.dust()//To prevent the MMI from remaining
- else if(isbrain(H))
- H.death()//Since they don't have a proper gib
else
H.gib()
else
@@ -620,8 +613,6 @@ var/list/sacrificed = list()
usr << "\red However, this soul was not enough to gain His favor."
if(isrobot(H))
H.dust()//To prevent the MMI from remaining
- else if(isbrain(H))
- H.death()//Since they don't have a proper gib
else
H.gib()
else
@@ -633,8 +624,6 @@ var/list/sacrificed = list()
usr << "\red However, a mere dead body is not enough to satisfy Him."
if(isrobot(H))
H.dust()//To prevent the MMI from remaining
- else if(isbrain(H))
- H.death()//Since they don't have a proper gib
else
H.gib()
else
@@ -649,8 +638,6 @@ var/list/sacrificed = list()
usr << "\red However, a mere dead body is not enough to satisfy Him."
if(isrobot(H))
H.dust()//To prevent the MMI from remaining
- else if(isbrain(H))
- H.death()//Since they don't have a proper gib
else
H.gib()
for(var/mob/living/carbon/monkey/M in src.loc)
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 81f261b1eb..34f416ca81 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -1673,6 +1673,12 @@ var/global/BSACooldown = 0
log_admin("[key_name(usr)] made all areas unpowered", 1)
message_admins("\blue [key_name_admin(usr)] made all areas unpowered", 1)
power_failure()
+ if("quickpower")
+ feedback_inc("admin_secrets_fun_used",1)
+ feedback_add_details("admin_secrets_fun_used","QP")
+ log_admin("[key_name(usr)] made all SMESs powered", 1)
+ message_admins("\blue [key_name_admin(usr)] made all SMESs powered", 1)
+ power_restore_quick()
if("activateprison")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","AP")
@@ -2460,6 +2466,7 @@ var/global/BSACooldown = 0
Remove firesuits, grilles, and pods
Make all areas powered
Make all areas unpowered
+Power all SMES
Toggle Prison Shuttle Status(Use with S/R)
Send Prison Shuttle
Return Prison Shuttle
diff --git a/code/modules/mob/living/carbon/brain/death.dm b/code/modules/mob/living/carbon/brain/death.dm
index f7eb90cbbd..62916d818d 100644
--- a/code/modules/mob/living/carbon/brain/death.dm
+++ b/code/modules/mob/living/carbon/brain/death.dm
@@ -14,4 +14,30 @@
tod = worldtime2text() //weasellos time of death patch
if(mind) mind.store_memory("Time of death: [tod]", 0) //mind. ?
- return ..(gibbed)
\ No newline at end of file
+ return ..(gibbed)
+
+/mob/living/carbon/brain/gib()
+ death(1)
+ var/atom/movable/overlay/animation = null
+ monkeyizing = 1
+ canmove = 0
+ icon = null
+ invisibility = 101
+
+ animation = new(loc)
+ animation.icon_state = "blank"
+ animation.icon = 'icons/mob/mob.dmi'
+ animation.master = src
+
+// flick("gibbed-m", animation)
+ gibs(loc, viruses, dna)
+
+ dead_mob_list -= src
+ if(container && istype(container, /obj/item/device/mmi))
+ del(container)//Gets rid of the MMI if there is one
+ if(loc)
+ if(istype(loc,/obj/item/brain))
+ del(loc)//Gets rid of the brain item
+ spawn(15)
+ if(animation) del(animation)
+ if(src) del(src)
\ No newline at end of file
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index a1246986b5..39825bcafa 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -27,7 +27,7 @@
src.health = 100
src.stat = 0
else
- src.health = 100 - src.getOxyLoss() - src.getToxLoss() - src.getFireLoss() - src.getBruteLoss() - src.getCloneLoss() - src.halloss
+ src.health = src.maxHealth - src.getOxyLoss() - src.getToxLoss() - src.getFireLoss() - src.getBruteLoss() - src.getCloneLoss() - src.halloss
//This proc is used for mobs which are affected by pressure to calculate the amount of pressure that actually
diff --git a/code/modules/mob/living/simple_animal/mouse.dm b/code/modules/mob/living/simple_animal/mouse.dm
index 5cc26f8d75..8d00fe8ca3 100644
--- a/code/modules/mob/living/simple_animal/mouse.dm
+++ b/code/modules/mob/living/simple_animal/mouse.dm
@@ -11,6 +11,7 @@
speak_chance = 1
turns_per_move = 5
see_in_dark = 6
+ maxHealth = 5
health = 5
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
response_help = "pets the"
diff --git a/code/modules/mob/living/simple_animal/mushroom.dm b/code/modules/mob/living/simple_animal/mushroom.dm
index 7db01ad6f9..736aeeed6b 100644
--- a/code/modules/mob/living/simple_animal/mushroom.dm
+++ b/code/modules/mob/living/simple_animal/mushroom.dm
@@ -6,6 +6,7 @@
icon_dead = "mushroom_dead"
speak_chance = 0
turns_per_move = 1
+ maxHealth = 5
health = 5
meat_type = /obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice
response_help = "pets the"
diff --git a/code/modules/mob/living/simple_animal/tomato.dm b/code/modules/mob/living/simple_animal/tomato.dm
index a22dc47fab..244c070a71 100644
--- a/code/modules/mob/living/simple_animal/tomato.dm
+++ b/code/modules/mob/living/simple_animal/tomato.dm
@@ -6,6 +6,7 @@
icon_dead = "tomato_dead"
speak_chance = 0
turns_per_move = 5
+ maxHealth = 15
health = 15
meat_type = /obj/item/weapon/reagent_containers/food/snacks/tomatomeat
response_help = "prods the"
diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm
index c8003d6c06..7bca6a4337 100644
--- a/code/modules/power/singularity/field_generator.dm
+++ b/code/modules/power/singularity/field_generator.dm
@@ -332,9 +332,12 @@ field_generator power level display
if (isnull(FG))
continue
FG.connected_gens.Remove(src)
+ if(!FG.clean_up)//Makes the other gens clean up as well
+ FG.cleanup()
connected_gens.Remove(FG)
connected_gens = list()
clean_up = 0
+ update_icon()
//This is here to help fight the "hurr durr, release singulo cos nobody will notice before the
//singulo eats the evidence". It's not fool-proof but better than nothing.