diff --git a/code/controllers/supply_shuttle.dm b/code/controllers/supply_shuttle.dm
index 20cf6e4ad3f..c347ddb4e89 100644
--- a/code/controllers/supply_shuttle.dm
+++ b/code/controllers/supply_shuttle.dm
@@ -46,7 +46,7 @@ var/global/datum/controller/supply_shuttle/supply_shuttle
return 0
return ..()
-/obj/structure/plasticflaps/ex_act(severity)
+/obj/structure/plasticflaps/ex_act(severity, specialty)
..()
switch(severity)
if (1)
diff --git a/code/game/dna.dm b/code/game/dna.dm
index 8a0f7709843..86357542466 100644
--- a/code/game/dna.dm
+++ b/code/game/dna.dm
@@ -520,26 +520,6 @@
toggle_open(user)
add_fingerprint(user)
-
-
-/obj/machinery/dna_scannernew/ex_act(severity)
- ..()
- switch(severity)
- if(1.0)
- qdel(src)
- return
- if(2.0)
- if(prob(50))
- qdel(src)
- return
- if(3.0)
- if(prob(25))
- qdel(src)
- return
- else
- return
-
-
/obj/machinery/dna_scannernew/blob_act()
if(prob(75))
qdel(src)
diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm
index 8be659cf9c6..ce290d754f1 100644
--- a/code/game/gamemodes/blob/theblob.dm
+++ b/code/game/gamemodes/blob/theblob.dm
@@ -126,7 +126,7 @@
A.blob_act()
return 1
-/obj/effect/blob/ex_act(severity)
+/obj/effect/blob/ex_act(severity, specialty)
..()
var/damage = 150
health -= ((damage/brute_resist) - (severity * 5))
diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm
index 6b7cefc3cc8..0d5dfc22397 100644
--- a/code/game/gamemodes/nuclear/nuclearbomb.dm
+++ b/code/game/gamemodes/nuclear/nuclearbomb.dm
@@ -149,7 +149,7 @@ var/bomb_set
if ((M.client && M.machine == src))
src.attack_hand(M)
-/obj/machinery/nuclearbomb/ex_act(severity)
+/obj/machinery/nuclearbomb/ex_act(severity, specialty)
return
/obj/machinery/nuclearbomb/blob_act()
diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm
index c61c3cface5..4881f8a2658 100644
--- a/code/game/machinery/Sleeper.dm
+++ b/code/game/machinery/Sleeper.dm
@@ -84,12 +84,9 @@
default_deconstruction_crowbar(I)
-/obj/machinery/sleeper/ex_act(severity)
+/obj/machinery/sleeper/ex_act(severity, specialty)
+ go_out()
..()
- if(prob(100 / (2 * severity)))
- for(var/atom/movable/A in src)
- A.loc = loc
- qdel(src)
/obj/machinery/sleeper/emp_act(severity)
if(stat & (BROKEN|NOPOWER))
diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm
index 82df3de7554..b21f8e75145 100644
--- a/code/game/machinery/atmoalter/canister.dm
+++ b/code/game/machinery/atmoalter/canister.dm
@@ -204,7 +204,7 @@ update_flag
healthcheck()
..()
-/obj/machinery/portable_atmospherics/canister/ex_act(severity)
+/obj/machinery/portable_atmospherics/canister/ex_act(severity, specialty)
switch(severity)
if(1.0)
if(destroyed || prob(30))
diff --git a/code/game/machinery/bots/bots.dm b/code/game/machinery/bots/bots.dm
index 2ab61787ed0..4ebdc7d0a51 100644
--- a/code/game/machinery/bots/bots.dm
+++ b/code/game/machinery/bots/bots.dm
@@ -286,7 +286,7 @@
healthcheck()
return
-/obj/machinery/bot/ex_act(severity)
+/obj/machinery/bot/ex_act(severity, specialty)
switch(severity)
if(1.0)
explode()
diff --git a/code/game/machinery/bots/mulebot.dm b/code/game/machinery/bots/mulebot.dm
index d95864d65d8..98f9c7525c6 100644
--- a/code/game/machinery/bots/mulebot.dm
+++ b/code/game/machinery/bots/mulebot.dm
@@ -141,12 +141,13 @@ var/global/mulebot_count = 0
/obj/machinery/bot/mulebot/ex_act(var/severity)
unload(0)
switch(severity)
+ if(1)
+ qdel(src)
if(2)
for(var/i = 1; i < 3; i++)
wires.RandomCut()
if(3)
wires.RandomCut()
- ..()
return
/obj/machinery/bot/mulebot/bullet_act()
diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm
index 04113b154b5..28c7bf2c642 100644
--- a/code/game/machinery/camera/camera.dm
+++ b/code/game/machinery/camera/camera.dm
@@ -93,11 +93,11 @@
..()
-/obj/machinery/camera/ex_act(severity)
+/obj/machinery/camera/ex_act(severity, specialty)
if(src.invuln)
return
else
- ..(severity)
+ ..()
return
/obj/machinery/camera/blob_act()
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index dc9a5006628..b81d9261591 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -361,12 +361,10 @@
if(prob(100/(severity*efficiency))) malfunction()
..()
-/obj/machinery/clonepod/ex_act(severity)
+/obj/machinery/clonepod/ex_act(severity, specialty)
..()
- if(prob(100 / (2 ** (severity - 1))))
- for(var/atom/movable/A as mob|obj in src)
- A.loc = src.loc
- qdel(src)
+ if(!gc_destroyed)
+ go_out()
/*
* Diskette Box
diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm
index 2bc54d7d2d5..f851aaa7981 100644
--- a/code/game/machinery/computer/HolodeckControl.dm
+++ b/code/game/machinery/computer/HolodeckControl.dm
@@ -146,7 +146,7 @@
..()
-/obj/machinery/computer/HolodeckControl/ex_act(severity)
+/obj/machinery/computer/HolodeckControl/ex_act(severity, specialty)
emergencyShutdown()
..()
diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm
index b4ec5461cb0..db7e501ea0a 100644
--- a/code/game/machinery/computer/computer.dm
+++ b/code/game/machinery/computer/computer.dm
@@ -26,7 +26,7 @@
..()
-/obj/machinery/computer/ex_act(severity)
+/obj/machinery/computer/ex_act(severity, specialty)
switch(severity)
if(1.0)
qdel(src)
diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm
index 17dbd21c1a6..3989ee35d2c 100644
--- a/code/game/machinery/deployable.dm
+++ b/code/game/machinery/deployable.dm
@@ -91,8 +91,7 @@ for reference:
qdel(src)
..()
-/obj/structure/barricade/wooden/ex_act(severity)
- ..()
+/obj/structure/barricade/wooden/ex_act(severity, specialty)
switch(severity)
if(1.0)
visible_message("The barricade is blown apart!")
@@ -211,8 +210,7 @@ for reference:
src.explode()
..()
-/obj/machinery/deployable/barrier/ex_act(severity)
- ..()
+/obj/machinery/deployable/barrier/ex_act(severity, specialty)
switch(severity)
if(1.0)
src.explode()
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index 91890d4b665..b27c2fda20c 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -171,7 +171,7 @@
..()
-/obj/machinery/door/ex_act(severity)
+/obj/machinery/door/ex_act(severity, specialty)
switch(severity)
if(1.0)
qdel(src)
diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm
index 9010bbf1d73..4135b1d5a7d 100644
--- a/code/game/machinery/doors/windowdoor.dm
+++ b/code/game/machinery/doors/windowdoor.dm
@@ -165,7 +165,7 @@
qdel(src)
return
-/obj/machinery/door/window/ex_act(severity)
+/obj/machinery/door/window/ex_act(severity, specialty)
switch(severity)
if(1.0)
qdel(src)
diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm
index 3c1548ad369..bb2cab0a197 100644
--- a/code/game/machinery/hologram.dm
+++ b/code/game/machinery/hologram.dm
@@ -162,8 +162,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
stat |= ~NOPOWER
//Destruction procs.
-/obj/machinery/hologram/ex_act(severity)
- ..()
+/obj/machinery/hologram/ex_act(severity, specialty)
switch(severity)
if(1.0)
qdel(src)
diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm
index ca155f495df..525eaf1f894 100644
--- a/code/game/machinery/machinery.dm
+++ b/code/game/machinery/machinery.dm
@@ -176,9 +176,18 @@ Class Procs:
update_icon()
/obj/machinery/ex_act(severity, specialty = 0)
- ..()
- if(prob(100 / (2 ** severity - 1) + 25 * specialty))
- qdel(src)
+ switch(severity)
+ if(1)
+ qdel(src)
+ if(2)
+ if(prob(50))
+ qdel(src)
+ if(3)
+ if(prob(25))
+ qdel(src)
+ if(!gc_destroyed)
+ contents_explosion(src, severity, specialty)
+
/obj/machinery/blob_act()
if(prob(50))
diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm
index e627b9c4add..f933cb9366e 100644
--- a/code/game/machinery/newscaster.dm
+++ b/code/game/machinery/newscaster.dm
@@ -220,8 +220,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
src.update_icon()
-/obj/machinery/newscaster/ex_act(severity)
- ..()
+/obj/machinery/newscaster/ex_act(severity, specialty)
switch(severity)
if(1.0)
qdel(src)
diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm
index d1f6a11ccc3..886d5485726 100644
--- a/code/game/machinery/portable_turret.dm
+++ b/code/game/machinery/portable_turret.dm
@@ -370,8 +370,7 @@
..()
-/obj/machinery/porta_turret/ex_act(severity)
- ..()
+/obj/machinery/porta_turret/ex_act(severity, specialty)
if(severity >= 3) //turret dies if an explosion touches it!
qdel(src)
else
diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm
index c4a9baff1a4..aabb4e0dc20 100644
--- a/code/game/machinery/rechargestation.dm
+++ b/code/game/machinery/rechargestation.dm
@@ -66,7 +66,7 @@
open_machine()
..(severity)
-/obj/machinery/recharge_station/ex_act(severity)
+/obj/machinery/recharge_station/ex_act(severity, specialty)
if(occupier)
open_machine()
..()
diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm
index c09d2df37b1..87c62079b33 100644
--- a/code/game/machinery/shieldgen.dm
+++ b/code/game/machinery/shieldgen.dm
@@ -64,7 +64,7 @@
opacity = 1
spawn(20) if(src) opacity = 0
-/obj/machinery/shield/ex_act(severity)
+/obj/machinery/shield/ex_act(severity, specialty)
switch(severity)
if(1.0)
if (prob(75))
@@ -181,7 +181,7 @@
update_icon()
return
-/obj/machinery/shieldgen/ex_act(severity)
+/obj/machinery/shieldgen/ex_act(severity, specialty)
switch(severity)
if(1.0)
src.health -= 75
@@ -567,7 +567,7 @@
return
-/obj/machinery/shieldwall/ex_act(severity)
+/obj/machinery/shieldwall/ex_act(severity, specialty)
if(needs_power)
var/obj/machinery/shieldwallgen/G
switch(severity)
diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm
index 2cacd1b075e..47782404352 100644
--- a/code/game/machinery/suit_storage_unit.dm
+++ b/code/game/machinery/suit_storage_unit.dm
@@ -124,7 +124,7 @@
dump_everything()
update_icon()
-/obj/machinery/suit_storage_unit/ex_act(severity)
+/obj/machinery/suit_storage_unit/ex_act(severity, specialty)
switch(severity)
if(1.0)
if(prob(50))
@@ -428,7 +428,7 @@
var/mob/living/user = usr
if(islocked)
user.changeNext_move(CLICK_CD_BREAKOUT)
- user.last_special = world.time + CLICK_CD_BREAKOUT
+ user.last_special = world.time + CLICK_CD_BREAKOUT
var/breakout_time = 2
user << "You start kicking against the doors to escape! (This will take about [breakout_time] minutes.)"
visible_message("You see [user] kicking against the doors of the [src]!")
diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm
index 668f94b2327..7459017d183 100644
--- a/code/game/machinery/syndicatebomb.dm
+++ b/code/game/machinery/syndicatebomb.dm
@@ -180,7 +180,7 @@
origin_tech = "syndicate=6;combat=5"
var/adminlog = null
-/obj/item/weapon/bombcore/ex_act(severity) //Little boom can chain a big boom
+/obj/item/weapon/bombcore/ex_act(severity, specialty) //Little boom can chain a big boom
src.detonate()
/obj/item/weapon/bombcore/proc/detonate()
diff --git a/code/game/machinery/turrets.dm b/code/game/machinery/turrets.dm
index 221abd0a052..59b2387aeb4 100644
--- a/code/game/machinery/turrets.dm
+++ b/code/game/machinery/turrets.dm
@@ -292,7 +292,7 @@
power_change()
..()
-/obj/machinery/turret/ex_act(severity)
+/obj/machinery/turret/ex_act(severity, specialty)
if(severity < 3)
src.die()
@@ -362,7 +362,7 @@
..()
take_damage(0) //check your health
-/obj/machinery/gun_turret/ex_act(severity)
+/obj/machinery/gun_turret/ex_act(severity, specialty)
switch(severity)
if(1)
die()
diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm
index d9897ac3a00..aa25b385202 100644
--- a/code/game/machinery/vending.dm
+++ b/code/game/machinery/vending.dm
@@ -77,19 +77,11 @@
for(var/obj/item/weapon/vending_refill/VR in component_parts)
refill_inventory(VR, product_records)
-/obj/machinery/vending/ex_act(severity)
- switch(severity)
- if(1.0)
- qdel(src)
- return
- if(2.0)
- if(prob(50))
- qdel(src)
- return
- if(3.0)
- if(prob(25))
- malfunction()
-
+/obj/machinery/vending/ex_act(severity, specialty)
+ ..()
+ if(!gc_destroyed)
+ if(prob(25))
+ malfunction()
/obj/machinery/vending/blob_act()
if(prob(75))
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index 8a157571d22..8bfe88b7f6e 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -572,7 +572,7 @@ obj/mecha/proc/can_use(mob/user)
Proj.on_hit(src)
return
-/obj/mecha/ex_act(severity)
+/obj/mecha/ex_act(severity, specialty)
src.log_message("Affected by explosion of severity: [severity].",1)
if(prob(src.deflect_chance))
severity++
diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm
index 496a2e965cf..0b0979c96d3 100644
--- a/code/game/objects/effects/aliens.dm
+++ b/code/game/objects/effects/aliens.dm
@@ -79,7 +79,7 @@
healthcheck()
-/obj/structure/alien/resin/ex_act(severity)
+/obj/structure/alien/resin/ex_act(severity, specialty)
switch(severity)
if(1.0)
health -= 150
@@ -211,7 +211,7 @@
new /obj/structure/alien/weeds(T, linked_node)
-/obj/structure/alien/weeds/ex_act(severity)
+/obj/structure/alien/weeds/ex_act(severity, specialty)
qdel(src)
diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm
index cea1d7b2922..521d5d0387b 100644
--- a/code/game/objects/effects/decals/Cleanable/humans.dm
+++ b/code/game/objects/effects/decals/Cleanable/humans.dm
@@ -58,7 +58,7 @@
icon_state = "gibbl5"
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6")
-/obj/effect/decal/cleanable/blood/gibs/ex_act(severity)
+/obj/effect/decal/cleanable/blood/gibs/ex_act(severity, specialty)
return
/obj/effect/decal/cleanable/blood/gibs/remove_ex_blood()
diff --git a/code/game/objects/effects/decals/decal.dm b/code/game/objects/effects/decals/decal.dm
index 77765bb8465..73cfb8fa566 100644
--- a/code/game/objects/effects/decals/decal.dm
+++ b/code/game/objects/effects/decals/decal.dm
@@ -2,5 +2,5 @@
name = "decal"
icon = 'icons/effects/effects.dmi'
-/obj/effect/decal/ex_act(severity)
+/obj/effect/decal/ex_act(severity, specialty)
qdel(src)
\ No newline at end of file
diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm
index 4f95e1664b3..c31a54f6662 100644
--- a/code/game/objects/effects/effect_system.dm
+++ b/code/game/objects/effects/effect_system.dm
@@ -944,7 +944,7 @@ steam.start() -- spawns the effect
icon_state = "ironfoam"
-/obj/structure/foamedmetal/ex_act(severity)
+/obj/structure/foamedmetal/ex_act(severity, specialty)
qdel(src)
/obj/structure/foamedmetal/blob_act()
diff --git a/code/game/objects/effects/glowshroom.dm b/code/game/objects/effects/glowshroom.dm
index 949d04d20ad..36fb5897365 100644
--- a/code/game/objects/effects/glowshroom.dm
+++ b/code/game/objects/effects/glowshroom.dm
@@ -117,7 +117,7 @@
endurance -= W.force
CheckEndurance()
-/obj/effect/glowshroom/ex_act(severity)
+/obj/effect/glowshroom/ex_act(severity, specialty)
switch(severity)
if(1.0)
qdel(src)
diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm
index 43f78938077..14f54676cab 100644
--- a/code/game/objects/effects/spiders.dm
+++ b/code/game/objects/effects/spiders.dm
@@ -8,7 +8,7 @@
var/health = 15
//similar to weeds, but only barfed out by nurses manually
-/obj/effect/spider/ex_act(severity)
+/obj/effect/spider/ex_act(severity, specialty)
switch(severity)
if(1.0)
qdel(src)
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 7fb8ac6ea7b..4b5a9a0675b 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -51,12 +51,6 @@
m.unEquip(src, 1)
return ..()
-/obj/item/ex_act(severity, specialty = 0)
- if(prob(100 / (2 ** severity - 1) + 25 * specialty))
- qdel(src)
- else
- ..(severity, specialty)
-
/obj/item/blob_act()
qdel(src)
diff --git a/code/game/objects/items/latexballoon.dm b/code/game/objects/items/latexballoon.dm
index 54f19b659f3..01a11fabe4c 100644
--- a/code/game/objects/items/latexballoon.dm
+++ b/code/game/objects/items/latexballoon.dm
@@ -26,7 +26,7 @@
item_state = "lgloves"
loc.assume_air(air_contents)
-/obj/item/latexballon/ex_act(severity)
+/obj/item/latexballon/ex_act(severity, specialty)
burst()
switch(severity)
if (1)
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index 324bef5da10..23c4a390bbd 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -123,6 +123,20 @@
/obj/proc/hide(h)
return
+/obj/ex_act(severity, specialty)
+ var/survivability = specialty * 15
+ switch(severity)
+ if(1)
+ qdel(src)
+ if(2)
+ if(prob(50 + survivability))
+ qdel(src)
+ if(3)
+ if(prob(25 + survivability))
+ qdel(src)
+ if(!gc_destroyed)
+ ..()
+
//If a mob logouts/logins in side of an object you can use this proc
/obj/proc/on_log()
..()
diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm
index 52693e6125e..3f76a0ef90f 100644
--- a/code/game/objects/structures.dm
+++ b/code/game/objects/structures.dm
@@ -5,12 +5,6 @@
if(prob(50))
qdel(src)
-/obj/structure/ex_act(severity, specialty = 0)
- if(prob(100 / (2 ** severity - 1) + 25 * specialty))
- qdel(src)
- else
- ..(severity, specialty)
-
/obj/structure/Destroy()
if(opacity)
UpdateAffectingLights()
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index 913c791812f..e498f4fab23 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -127,10 +127,9 @@
return src.open()
// this should probably use dump_contents()
-/obj/structure/closet/ex_act(severity)
- contents_explosion(src, severity)
+/obj/structure/closet/ex_act(severity, specialty)
+ open()
..()
- return
/obj/structure/closet/bullet_act(var/obj/item/projectile/Proj)
..()
diff --git a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm
index f203d352608..787e5233572 100644
--- a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm
+++ b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm
@@ -101,7 +101,7 @@
spawn(10) update_icon()
-/obj/structure/closet/fireaxecabinet/ex_act(severity)
+/obj/structure/closet/fireaxecabinet/ex_act(severity, specialty)
switch(severity)
if(1.0)
qdel(src)
diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm
index 0c4558d1bac..453260d5e1b 100644
--- a/code/game/objects/structures/displaycase.dm
+++ b/code/game/objects/structures/displaycase.dm
@@ -10,7 +10,7 @@
var/occupied = 1
var/destroyed = 0
-/obj/structure/displaycase/ex_act(severity)
+/obj/structure/displaycase/ex_act(severity, specialty)
switch(severity)
if (1)
new /obj/item/weapon/shard( src.loc )
diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm
index c2948acd275..10cdc963a66 100644
--- a/code/game/objects/structures/extinguisher.dm
+++ b/code/game/objects/structures/extinguisher.dm
@@ -9,7 +9,7 @@
var/opened = 0
-/obj/structure/extinguisher_cabinet/ex_act(severity)
+/obj/structure/extinguisher_cabinet/ex_act(severity, specialty)
switch(severity)
if(1.0)
qdel(src)
diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm
index aedaa52e3b0..46e9cd35496 100644
--- a/code/game/objects/structures/girders.dm
+++ b/code/game/objects/structures/girders.dm
@@ -198,7 +198,7 @@
qdel(src)
-/obj/structure/girder/ex_act(severity)
+/obj/structure/girder/ex_act(severity, specialty)
switch(severity)
if(1.0)
qdel(src)
@@ -229,7 +229,7 @@
state = 2
girderpasschance = 0
-/obj/structure/girder/reinforced/ex_act(severity)
+/obj/structure/girder/reinforced/ex_act(severity, specialty)
switch(severity)
if(1.0)
qdel(src)
@@ -285,7 +285,7 @@
qdel(src)
-/obj/structure/cultgirder/ex_act(severity)
+/obj/structure/cultgirder/ex_act(severity, specialty)
switch(severity)
if(1.0)
qdel(src)
diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm
index 902956ccecd..c292996cb6e 100644
--- a/code/game/objects/structures/grille.dm
+++ b/code/game/objects/structures/grille.dm
@@ -17,7 +17,7 @@
stored = new/obj/item/stack/rods(src)
stored.amount = 2
-/obj/structure/grille/ex_act(severity)
+/obj/structure/grille/ex_act(severity, specialty)
qdel(src)
/obj/structure/grille/blob_act()
diff --git a/code/game/objects/structures/lamarr_cage.dm b/code/game/objects/structures/lamarr_cage.dm
index b95ec7128c4..acba01c197e 100644
--- a/code/game/objects/structures/lamarr_cage.dm
+++ b/code/game/objects/structures/lamarr_cage.dm
@@ -10,7 +10,7 @@
var/occupied = 1
var/destroyed = 0
-/obj/structure/lamarr/ex_act(severity)
+/obj/structure/lamarr/ex_act(severity, specialty)
switch(severity)
if (1)
new /obj/item/weapon/shard( src.loc )
diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm
index 8e3db180cea..d2bc62a39ea 100644
--- a/code/game/objects/structures/lattice.dm
+++ b/code/game/objects/structures/lattice.dm
@@ -38,7 +38,7 @@
qdel(src)
return
-/obj/structure/lattice/ex_act(severity)
+/obj/structure/lattice/ex_act(severity, specialty)
switch(severity)
if(1.0)
qdel(src)
diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm
index 33a08d1b6de..37ae9ca2a84 100644
--- a/code/game/objects/structures/safe.dm
+++ b/code/game/objects/structures/safe.dm
@@ -165,7 +165,7 @@ FLOOR SAFES
obj/structure/safe/blob_act()
return
-obj/structure/safe/ex_act(severity)
+obj/structure/safe/ex_act(severity, specialty)
return
diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm
index 2d16a640c30..87a97897862 100644
--- a/code/game/objects/structures/signs.dm
+++ b/code/game/objects/structures/signs.dm
@@ -5,7 +5,7 @@
density = 0
layer = 3.5
-/obj/structure/sign/ex_act(severity)
+/obj/structure/sign/ex_act(severity, specialty)
qdel(src)
/obj/structure/sign/blob_act()
diff --git a/code/game/objects/structures/stool_bed_chair_nest/stools.dm b/code/game/objects/structures/stool_bed_chair_nest/stools.dm
index efbff04cfed..1877e3b3b07 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/stools.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/stools.dm
@@ -6,7 +6,7 @@
anchored = 1.0
pressure_resistance = 15
-/obj/structure/stool/ex_act(severity)
+/obj/structure/stool/ex_act(severity, specialty)
switch(severity)
if(1.0)
qdel(src)
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index 4fdb7c61e1a..f6ecde8cd8d 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -180,7 +180,7 @@
else
dir = 2
-/obj/structure/table/ex_act(severity)
+/obj/structure/table/ex_act(severity, specialty)
switch(severity)
if(1.0)
qdel(src)
@@ -510,7 +510,7 @@
throwpass = 1 //You can throw objects over this, despite it's density.
var/health = 5
-/obj/structure/rack/ex_act(severity)
+/obj/structure/rack/ex_act(severity, specialty)
switch(severity)
if(1.0)
qdel(src)
diff --git a/code/game/objects/structures/transit_tubes/transit_tube.dm b/code/game/objects/structures/transit_tubes/transit_tube.dm
index 77a27930d44..d269915b63c 100644
--- a/code/game/objects/structures/transit_tubes/transit_tube.dm
+++ b/code/game/objects/structures/transit_tubes/transit_tube.dm
@@ -25,11 +25,12 @@
return !density
// When destroyed by explosions, properly handle contents.
-obj/structure/transit_tube/ex_act(severity)
+obj/structure/transit_tube/ex_act(severity, specialty)
if(3 - severity >= 0)
+ var/oldloc = loc
..(severity + 1)
for(var/atom/movable/AM in contents)
- AM.loc = loc
+ AM.loc = oldloc
/obj/structure/transit_tube/New(loc)
..(loc)
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index c31423e2d85..3c49dc4f365 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -27,7 +27,7 @@
return
-/obj/structure/window/ex_act(severity)
+/obj/structure/window/ex_act(severity, specialty)
switch(severity)
if(1.0)
qdel(src)
diff --git a/code/game/turfs/simulated/floor/misc_floor.dm b/code/game/turfs/simulated/floor/misc_floor.dm
index 554442622f9..6352043f6a4 100644
--- a/code/game/turfs/simulated/floor/misc_floor.dm
+++ b/code/game/turfs/simulated/floor/misc_floor.dm
@@ -64,7 +64,7 @@
name = "Beach"
icon = 'icons/misc/beach.dmi'
-/turf/simulated/floor/beach/ex_act(severity)
+/turf/simulated/floor/beach/ex_act(severity, specialty)
contents_explosion(src, severity)
/turf/simulated/floor/beach/sand
@@ -90,7 +90,7 @@
icon = 'icons/turf/snow.dmi'
icon_state = "snow"
-/turf/simulated/floor/plating/snow/ex_act(severity)
+/turf/simulated/floor/plating/snow/ex_act(severity, specialty)
contents_explosion(src, severity)
/turf/simulated/floor/noslip
diff --git a/code/modules/events/ninja.dm b/code/modules/events/ninja.dm
index 1807484bf64..7a7867e6458 100644
--- a/code/modules/events/ninja.dm
+++ b/code/modules/events/ninja.dm
@@ -2680,7 +2680,7 @@ It is possible to destroy the net by the occupant or someone else.
healthcheck()
..()
-/obj/effect/energy_net/ex_act(severity)
+/obj/effect/energy_net/ex_act(severity, specialty)
switch(severity)
if(1.0)
health-=50
diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm
index e9ce64822c5..c2bc53dc00c 100644
--- a/code/modules/events/spacevine.dm
+++ b/code/modules/events/spacevine.dm
@@ -500,7 +500,7 @@
*/
-/obj/effect/spacevine/ex_act(severity)
+/obj/effect/spacevine/ex_act(severity, specialty)
switch(severity)
if(1.0)
Destroy()
diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm
index c599033bd35..ec79365b417 100644
--- a/code/modules/library/lib_items.dm
+++ b/code/modules/library/lib_items.dm
@@ -104,7 +104,7 @@
update_icon()
-/obj/structure/bookcase/ex_act(severity)
+/obj/structure/bookcase/ex_act(severity, specialty)
..()
if(!gc_destroyed)
for(var/obj/item/weapon/book/b in contents)
diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm
index c8be448c05a..c892a659e7b 100644
--- a/code/modules/mining/equipment_locker.dm
+++ b/code/modules/mining/equipment_locker.dm
@@ -192,7 +192,7 @@
updateUsrDialog()
return
-/obj/machinery/mineral/ore_redemption/ex_act(severity)
+/obj/machinery/mineral/ore_redemption/ex_act(severity, specialty)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
@@ -357,7 +357,7 @@
new /obj/item/device/t_scanner/adv_mining_scanner(src.loc)
qdel(voucher)
-/obj/machinery/mineral/equipment_vendor/ex_act(severity)
+/obj/machinery/mineral/equipment_vendor/ex_act(severity, specialty)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm
index c696c8de1eb..265172faf29 100644
--- a/code/modules/mining/mine_turfs.dm
+++ b/code/modules/mining/mine_turfs.dm
@@ -18,7 +18,7 @@
var/scan_state = null //Holder for the image we display when we're pinged by a mining scanner
var/hidden = 1
-/turf/simulated/mineral/ex_act(severity)
+/turf/simulated/mineral/ex_act(severity, specialty)
..()
switch(severity)
if(3.0)
@@ -494,8 +494,8 @@
/turf/simulated/floor/plating/asteroid/burn_tile()
return
-/turf/simulated/floor/plating/asteroid/ex_act(severity)
- ..()
+/turf/simulated/floor/plating/asteroid/ex_act(severity, specialty)
+ contents_explosion(src, severity, specialty)
switch(severity)
if(3.0)
return
diff --git a/code/modules/mining/satchel_ore_boxdm.dm b/code/modules/mining/satchel_ore_boxdm.dm
index 63dd643d300..1b8394cbce1 100644
--- a/code/modules/mining/satchel_ore_boxdm.dm
+++ b/code/modules/mining/satchel_ore_boxdm.dm
@@ -83,6 +83,6 @@
src.updateUsrDialog()
return
-obj/structure/ore_box/ex_act(severity)
+obj/structure/ore_box/ex_act(severity, specialty)
if(prob(100 / severity) && severity < 3)
qdel(src) //nothing but ores can get inside unless its a bug and ores just return nothing on ex_act, not point in calling it on them
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
index 122659f2c5a..42bdc619170 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
@@ -51,7 +51,7 @@
if(l_store) l_store.emp_act(severity)
..()
-/mob/living/carbon/alien/humanoid/ex_act(severity)
+/mob/living/carbon/alien/humanoid/ex_act(severity, specialty)
..()
var/shielded = 0
diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm
index 699f17c1f00..190efb392ed 100644
--- a/code/modules/mob/living/carbon/alien/larva/larva.dm
+++ b/code/modules/mob/living/carbon/alien/larva/larva.dm
@@ -55,7 +55,7 @@
..(amount)
-/mob/living/carbon/alien/larva/ex_act(severity)
+/mob/living/carbon/alien/larva/ex_act(severity, specialty)
..()
var/b_loss = null
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 9df56ed3037..580b8ace75a 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -146,7 +146,7 @@
stat("Energy Charge", round(wear_suit:cell:charge/100))
-/mob/living/carbon/human/ex_act(severity)
+/mob/living/carbon/human/ex_act(severity, specialty)
..()
var/shielded = 0
diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm
index d9343f483b7..ef2953e7e76 100644
--- a/code/modules/mob/living/carbon/monkey/monkey.dm
+++ b/code/modules/mob/living/carbon/monkey/monkey.dm
@@ -215,7 +215,7 @@
/mob/living/carbon/monkey/var/co2overloadtime = null
/mob/living/carbon/monkey/var/temperature_resistance = T0C+75
-/mob/living/carbon/monkey/ex_act(severity)
+/mob/living/carbon/monkey/ex_act(severity, specialty)
..()
switch(severity)
if(1.0)
diff --git a/code/modules/mob/living/carbon/slime/slime.dm b/code/modules/mob/living/carbon/slime/slime.dm
index f67af292ae8..0103ea58388 100644
--- a/code/modules/mob/living/carbon/slime/slime.dm
+++ b/code/modules/mob/living/carbon/slime/slime.dm
@@ -186,7 +186,7 @@
powerlevel = 0 // oh no, the power!
..()
-/mob/living/carbon/slime/ex_act(severity)
+/mob/living/carbon/slime/ex_act(severity, specialty)
..()
var/b_loss = null
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 67cc768bb78..9cc9384382f 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -44,7 +44,7 @@
/mob/living/proc/InCritical()
return (src.health < 0 && src.health > -95.0 && stat == UNCONSCIOUS)
-/mob/living/ex_act(severity)
+/mob/living/ex_act(severity, specialty)
..()
if(client && !blinded)
flick("flash", src.flash)
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index ca1c3fec17b..b777d9fc3b8 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -309,7 +309,7 @@ var/list/ai_list = list()
ai_call_shuttle()
..()
-/mob/living/silicon/ai/ex_act(severity)
+/mob/living/silicon/ai/ex_act(severity, specialty)
..()
switch(severity)
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index 4c773abce50..f5537bf988e 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -137,7 +137,7 @@
if(3)
src << "You feel an electric surge run through your circuitry and become acutely aware at how lucky you are that you can still feel at all."
-/mob/living/silicon/pai/ex_act(severity)
+/mob/living/silicon/pai/ex_act(severity, specialty)
..()
switch(severity)
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index ebfaf30121a..af763539e46 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -325,7 +325,7 @@
return 0
-/mob/living/silicon/robot/ex_act(severity)
+/mob/living/silicon/robot/ex_act(severity, specialty)
..()
switch(severity)
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm
index f4313a84f77..9d39a19cc07 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm
@@ -99,7 +99,7 @@
visible_message("The [src.name]'s stare chills [L.name] to the bone!")
return
-/mob/living/simple_animal/hostile/asteroid/basilisk/ex_act(severity)
+/mob/living/simple_animal/hostile/asteroid/basilisk/ex_act(severity, specialty)
switch(severity)
if(1.0)
gib()
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index fd6d8205476..fc70dd153d6 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -412,7 +412,7 @@
Die()
-/mob/living/simple_animal/ex_act(severity)
+/mob/living/simple_animal/ex_act(severity, specialty)
..()
switch (severity)
if (1.0)
diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm
index c3482e4c7e0..b4cda2bbbb0 100644
--- a/code/modules/paperwork/photocopier.dm
+++ b/code/modules/paperwork/photocopier.dm
@@ -269,7 +269,7 @@
copy = null
updateUsrDialog()
-/obj/machinery/photocopier/ex_act(severity)
+/obj/machinery/photocopier/ex_act(severity, specialty)
switch(severity)
if(1.0)
qdel(src)
diff --git a/code/modules/power/antimatter/containment_jar.dm b/code/modules/power/antimatter/containment_jar.dm
index d5ad645f288..82258e1dac5 100644
--- a/code/modules/power/antimatter/containment_jar.dm
+++ b/code/modules/power/antimatter/containment_jar.dm
@@ -15,7 +15,7 @@
var/stability = 100//TODO: add all the stability things to this so its not very safe if you keep hitting in on things
-/obj/item/weapon/am_containment/ex_act(severity)
+/obj/item/weapon/am_containment/ex_act(severity, specialty)
switch(severity)
if(1.0)
explosion(get_turf(src), 1, 2, 3, 5)//Should likely be larger but this works fine for now I guess
diff --git a/code/modules/power/antimatter/control.dm b/code/modules/power/antimatter/control.dm
index c5033ff5ef5..0c4831fda0c 100644
--- a/code/modules/power/antimatter/control.dm
+++ b/code/modules/power/antimatter/control.dm
@@ -112,7 +112,7 @@
return
-/obj/machinery/power/am_control_unit/ex_act(severity)
+/obj/machinery/power/am_control_unit/ex_act(severity, specialty)
stability -= (80 - (severity * 20))
check_stability()
return
diff --git a/code/modules/power/antimatter/shielding.dm b/code/modules/power/antimatter/shielding.dm
index 16ea0fbc48f..be52c6ea443 100644
--- a/code/modules/power/antimatter/shielding.dm
+++ b/code/modules/power/antimatter/shielding.dm
@@ -100,7 +100,7 @@ proc/cardinalrange(var/center)
return
-/obj/machinery/am_shielding/ex_act(severity)
+/obj/machinery/am_shielding/ex_act(severity, specialty)
stability -= (80 - (severity * 20))
check_stability()
return
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index d64ca32e9dc..5adebd7b81f 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -1183,13 +1183,16 @@ obj/machinery/power/apc/proc/autoset(var/val, var/on)
environ = 3
..()
-/obj/machinery/power/apc/ex_act(severity)
- if(severity == 1)
- qdel(src)
- else
- if(prob(100/ (2 ** (severity - 1))))
- set_broken()
- cell.ex_act(severity)
+/obj/machinery/power/apc/ex_act(severity, specialty)
+ ..()
+ if(!gc_destroyed)
+ switch(severity)
+ if(2)
+ if(prob(50))
+ set_broken()
+ if(3)
+ if(prob(25))
+ set_broken()
/obj/machinery/power/apc/blob_act()
if (prob(75))
diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm
index fe8b5bb8735..757389627f4 100644
--- a/code/modules/power/cable.dm
+++ b/code/modules/power/cable.dm
@@ -83,8 +83,8 @@ By design, d1 is the smallest direction and d2 is the highest
cable_list += src //add it to the global cable list
if(d1)
- stored = new/obj/item/stack/cable_coil(src,2,cable_color)
- else stored = new/obj/item/stack/cable_coil(src,1,cable_color)
+ stored = new/obj/item/stack/cable_coil(null,2,cable_color)
+ else stored = new/obj/item/stack/cable_coil(null,1,cable_color)
/obj/structure/cable/Destroy() // called when a cable is deleted
if(powernet)
@@ -174,13 +174,16 @@ By design, d1 is the smallest direction and d2 is the highest
return 0
//explosion handling
-/obj/structure/cable/ex_act(severity)
-
- if(severity == 1)
- qdel()
- else
- if(prob(100 / (2 ** (severity - 1))))
- Deconstruct()
+/obj/structure/cable/ex_act(severity, specialty)
+ ..()
+ if(!gc_destroyed)
+ switch(severity)
+ if(2)
+ if(prob(50))
+ Deconstruct()
+ if(3)
+ if(prob(25))
+ Deconstruct()
/obj/structure/cable/singularity_pull(S, current_size)
if(current_size >= STAGE_FIVE)
diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm
index c47686777e1..2d884754143 100644
--- a/code/modules/power/cell.dm
+++ b/code/modules/power/cell.dm
@@ -118,12 +118,17 @@
reliability -= 10 / severity
..()
-/obj/item/weapon/stock_parts/cell/ex_act(severity)
- if(prob(100 / (2 ** (severity - 1))))
- qdel(src)
- else
- if(prob(100 / (2 ** (severity - 1))))
- corrupt()
+/obj/item/weapon/stock_parts/cell/ex_act(severity, specialty)
+ ..()
+ if(!gc_destroyed)
+ switch(severity)
+ if(2)
+ if(prob(50))
+ corrupt()
+ if(3)
+ if(prob(25))
+ corrupt()
+
/obj/item/weapon/stock_parts/cell/blob_act()
ex_act(1)
diff --git a/code/modules/power/engine.dm b/code/modules/power/engine.dm
index a1abafa61ad..696d2bbd63a 100644
--- a/code/modules/power/engine.dm
+++ b/code/modules/power/engine.dm
@@ -4,11 +4,16 @@
/turf/simulated/floor/engine/attack_hand(var/mob/user as mob)
user.Move_Pulled(src)
-/turf/simulated/floor/engine/ex_act(severity)
- ..()
- if(prob(100 / (2**severity)) && severity < 3)
- ChangeTurf(/turf/space)
- qdel(src)
+/turf/simulated/floor/engine/ex_act(severity, specialty)
+ contents_explosion(src, severity, specialty)
+ switch(severity)
+ if(1)
+ ChangeTurf(/turf/space)
+ if(2)
+ if(prob(50))
+ ChangeTurf(/turf/space)
+ else
+ return
/turf/simulated/floor/engine/blob_act()
if (prob(25))
diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm
index 3df8abca2a1..026279d3c00 100644
--- a/code/modules/power/gravitygenerator.dm
+++ b/code/modules/power/gravitygenerator.dm
@@ -28,7 +28,7 @@ var/const/GRAV_NEEDS_WRENCH = 3
unacidable = 1
var/sprite_number = 0
-/obj/machinery/gravity_generator/ex_act(severity)
+/obj/machinery/gravity_generator/ex_act(severity, specialty)
if(severity == 1) // Very sturdy.
set_broken()
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index 0fa95d055d2..1e4dd2f0e7d 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -572,12 +572,16 @@
// explosion effect
// destroy the whole light fixture or just shatter it
-/obj/machinery/light/ex_act(severity)
- if(severity == 1)
- qdel(src)
- else
- if(prob(100 - 25 * (severity - 1)))
- broken()
+/obj/machinery/light/ex_act(severity, specialty)
+ ..()
+ if(!gc_destroyed)
+ switch(severity)
+ if(2)
+ if(prob(50))
+ broken()
+ if(3)
+ if(prob(25))
+ broken()
//blob effect
diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm
index 59d54c9c525..80050def4fd 100644
--- a/code/modules/power/singularity/collector.dm
+++ b/code/modules/power/singularity/collector.dm
@@ -106,7 +106,7 @@ var/global/list/rad_collectors = list()
return 1
-/obj/machinery/power/rad_collector/ex_act(severity)
+/obj/machinery/power/rad_collector/ex_act(severity, specialty)
switch(severity)
if(2, 3)
eject()
diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm
index 2e89562a8f9..151c8cd05e8 100644
--- a/code/modules/power/singularity/containment_field.dm
+++ b/code/modules/power/singularity/containment_field.dm
@@ -33,7 +33,7 @@
return 0
-/obj/machinery/field/containment/ex_act(severity)
+/obj/machinery/field/containment/ex_act(severity, specialty)
return 0
diff --git a/code/modules/power/singularity/particle_accelerator/particle.dm b/code/modules/power/singularity/particle_accelerator/particle.dm
index c9cf44a4578..756d5a83858 100644
--- a/code/modules/power/singularity/particle_accelerator/particle.dm
+++ b/code/modules/power/singularity/particle_accelerator/particle.dm
@@ -49,7 +49,7 @@
return
-/obj/effect/accelerated_particle/ex_act(severity)
+/obj/effect/accelerated_particle/ex_act(severity, specialty)
loc = null
return
diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
index 3a717c23ee9..5c2cbfb70ce 100644
--- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
+++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
@@ -143,10 +143,6 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
master.toggle_power()
investigate_log("was moved whilst active; it powered down.","singulo")
-/obj/structure/particle_accelerator/ex_act(severity)
- if(prob(100 / (2 ** (severity - 1))))
- qdel(src)
-
/obj/structure/particle_accelerator/blob_act()
if(prob(50))
qdel(src)
@@ -319,10 +315,6 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
..()
return
-/obj/machinery/particle_accelerator/ex_act(severity)
- if(prob(100 / (2 ** (severity - 1))))
- qdel(src)
-
/obj/machinery/particle_accelerator/blob_act()
if(prob(50))
qdel(src)
diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm
index 6c538429169..4f082bd3920 100644
--- a/code/modules/power/singularity/singularity.dm
+++ b/code/modules/power/singularity/singularity.dm
@@ -59,7 +59,7 @@
/obj/machinery/singularity/blob_act(severity)
return
-/obj/machinery/singularity/ex_act(severity)
+/obj/machinery/singularity/ex_act(severity, specialty)
switch(severity)
if(1.0)
if(current_size <= STAGE_TWO)
diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm
index e39a3e20c2f..c281b1f97fd 100644
--- a/code/modules/power/solar.dm
+++ b/code/modules/power/solar.dm
@@ -146,14 +146,18 @@ var/list/solars_list = list()
return
-/obj/machinery/power/solar/ex_act(severity)
+/obj/machinery/power/solar/ex_act(severity, specialty)
if(prob(25))
new /obj/item/weapon/shard(src.loc)
- if(prob(100 / severity ** (severity - 1)) && severity < 3)
- qdel(src)
- else
- if(prob(100 / (2 ** (severity - 1))))
- broken()
+ ..()
+ if(!gc_destroyed)
+ switch(severity)
+ if(2)
+ if(prob(50))
+ broken()
+ if(3)
+ if(prob(25))
+ broken()
/obj/machinery/power/solar/blob_act()
if(prob(75))
@@ -510,12 +514,16 @@ var/list/solars_list = list()
update_icon()
-/obj/machinery/power/solar_control/ex_act(severity)
- if(severity == 1)
- qdel(src)
- else
- if(prob(100 / (2 ** (severity - 1))))
- broken()
+/obj/machinery/power/solar_control/ex_act(severity, specialty)
+ ..()
+ if(!gc_destroyed)
+ switch(severity)
+ if(2)
+ if(prob(50))
+ broken()
+ if(3)
+ if(prob(25))
+ broken()
/obj/machinery/power/solar_control/blob_act()
if (prob(75))
diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm
index 3fc37362cc5..2a71f6b5394 100644
--- a/code/modules/reagents/Chemistry-Machinery.dm
+++ b/code/modules/reagents/Chemistry-Machinery.dm
@@ -51,9 +51,9 @@
recharge()
dispensable_reagents = sortList(dispensable_reagents)
-/obj/machinery/chem_dispenser/ex_act(severity)
- if((severity < 3) && prob(100 / (2 ** (severity - 1))))
- qdel(src)
+/obj/machinery/chem_dispenser/ex_act(severity, specialty)
+ if(severity < 3)
+ ..()
/obj/machinery/chem_dispenser/blob_act()
if(prob(50))
@@ -254,9 +254,9 @@
create_reagents(100)
overlays += "waitlight"
-/obj/machinery/chem_master/ex_act(severity)
- if(severity < 3 && prob(100 / 2 ** (severity - 1)))
- qdel(src)
+/obj/machinery/chem_master/ex_act(severity, specialty)
+ if(severity < 3)
+ ..()
/obj/machinery/chem_master/blob_act()
if (prob(50))
diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm
index 3181f68cd7c..b023db294d2 100644
--- a/code/modules/reagents/reagent_dispenser.dm
+++ b/code/modules/reagents/reagent_dispenser.dm
@@ -10,7 +10,7 @@
var/amount_per_transfer_from_this = 10
var/possible_transfer_amounts = list(10,25,50,100)
-/obj/structure/reagent_dispensers/ex_act(severity)
+/obj/structure/reagent_dispensers/ex_act(severity, specialty)
switch(severity)
if(1.0)
qdel(src)
@@ -60,7 +60,7 @@
..()
reagents.add_reagent("water",1000)
-/obj/structure/reagent_dispensers/watertank/ex_act(severity)
+/obj/structure/reagent_dispensers/watertank/ex_act(severity, specialty)
switch(severity)
if(1.0)
qdel(src)
diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm
index 9d5adfd8d2a..7495ed90d80 100644
--- a/code/modules/recycling/disposal.dm
+++ b/code/modules/recycling/disposal.dm
@@ -793,7 +793,7 @@
// pipe affected by explosion
-/obj/structure/disposalpipe/ex_act(severity)
+/obj/structure/disposalpipe/ex_act(severity, specialty)
//pass on ex_act to our contents before calling it on ourself
var/obj/structure/disposalholder/H = locate() in src
diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm
index b5d05a946f3..b4f29e0529f 100644
--- a/code/modules/research/server.dm
+++ b/code/modules/research/server.dm
@@ -80,7 +80,7 @@
..()
-/obj/machinery/r_n_d/server/ex_act(severity)
+/obj/machinery/r_n_d/server/ex_act(severity, specialty)
griefProtection()
..()