diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm
index b2277c74cf2..d17b69f93f7 100644
--- a/code/modules/power/singularity/emitter.dm
+++ b/code/modules/power/singularity/emitter.dm
@@ -200,6 +200,25 @@
user << "You need more welding fuel to complete this task."
return
+ if(istype(W, /obj/item/stack/material) && W.get_material_name() == DEFAULT_WALL_MATERIAL)
+ var/amt = Ceiling(( initial(integrity) - integrity)/10)
+ if(!amt)
+ user << "\The [src] is already fully repaired."
+ return
+ var/obj/item/stack/P = W
+ if(P.amount < amt)
+ user << "You don't have enough sheets to repair this! You need at least [amt] sheets."
+ return
+ user << "You begin repairing \the [src]..."
+ if(do_after(user, 30))
+ if(P.use(amt))
+ user << "You have repaired \the [src]."
+ integrity = initial(integrity)
+ return
+ else
+ user << "You don't have enough sheets to repair this! You need at least [amt] sheets."
+ return
+
if(istype(W, /obj/item/weapon/card/id) || istype(W, /obj/item/device/pda))
if(emagged)
user << "The lock seems to be broken."
@@ -225,10 +244,25 @@
return 1
/obj/machinery/power/emitter/bullet_act(var/obj/item/projectile/P)
- if(!P || !P.damage || (!P.damage_type == BRUTE || !P.damage_type == BURN) )
+ if(!P || !P.damage || P.get_structure_damage() <= 0 )
return
integrity = integrity - P.damage
- if(integrity >= 0)
- explosion(get_turf(src), 1, 2, 4)
+ if(integrity <= 0)
+ if(powernet && avail(active_power_usage)) // If it's powered, it goes boom if killed.
+ visible_message(src, "\The [src] explodes violently!", "You hear an explosion!")
+ explosion(get_turf(src), 1, 2, 4)
+ else
+ src.visible_message("\The [src] crumples apart!", "You hear metal collapsing.")
qdel(src)
+
+/obj/machinery/power/emitter/examine(mob/user)
+ ..()
+ var/integrity_percentage = round((integrity / initial(integrity)) * 100)
+ switch(integrity_percentage)
+ if(0 to 30)
+ user << "\The [src] is close to falling apart!"
+ if(31 to 70)
+ user << "\The [src] is damaged."
+ if(77 to 99)
+ user << "\The [src] is slightly damaged."
diff --git a/html/changelogs/Neerti - EmitterTweaks.yml b/html/changelogs/Neerti - EmitterTweaks.yml
new file mode 100644
index 00000000000..b2331a29e20
--- /dev/null
+++ b/html/changelogs/Neerti - EmitterTweaks.yml
@@ -0,0 +1,38 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+#################################
+
+# Your name.
+author: Neerti
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - rscadd: "Emitters can be examined to see if they are damaged. They can also be repaired by applying metal sheets to them."
+ - tweak: "Emitters now only explode on death if they are on a powered wire with significant power flowing through it."
+ - bugfix: "Emitters don't explode in one hit, or by tasers or non-damaging projectiles anymore."