diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index f846a28da22..7edc73e2585 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -826,7 +826,7 @@
*
* Default behaviour is to return, we define here to allow for cleaner code later on
*/
-/atom/proc/zap_act(power, zap_flags, shocked_targets)
+/atom/proc/zap_act(power, zap_flags)
return
/**
diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm
index 27280043249..1cc5fa580a5 100644
--- a/code/game/machinery/_machinery.dm
+++ b/code/game/machinery/_machinery.dm
@@ -577,14 +577,15 @@ Class Procs:
/obj/machinery/proc/can_be_overridden()
. = 1
-/obj/machinery/zap_act(power, zap_flags, shocked_objects)
- . = ..()
+/obj/machinery/zap_act(power, zap_flags)
if(prob(85) && (zap_flags & ZAP_MACHINE_EXPLOSIVE) && !(resistance_flags & INDESTRUCTIBLE))
explosion(src, 1, 2, 4, flame_range = 2, adminlog = FALSE, smoke = FALSE)
else if(zap_flags & ZAP_OBJ_DAMAGE)
- take_damage(power/2000, BURN, "energy")
+ take_damage(power * 0.0005, BURN, "energy")
if(prob(40))
emp_act(EMP_LIGHT)
+ power -= power * 0.0005
+ return ..()
/obj/machinery/Exited(atom/movable/AM, atom/newloc)
. = ..()
diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm
index ef538159b01..b80f1423f3c 100644
--- a/code/game/objects/obj_defense.dm
+++ b/code/game/objects/obj_defense.dm
@@ -229,11 +229,11 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e
SSfire_burning.processing -= src
///Called when the obj is hit by a tesla bolt.
-/obj/zap_act(power, zap_flags, shocked_targets)
+/obj/zap_act(power, zap_flags)
if(QDELETED(src))
return 0
obj_flags |= BEING_SHOCKED
- addtimer(CALLBACK(src, .proc/reset_shocked), 10)
+ addtimer(CALLBACK(src, .proc/reset_shocked), 1 SECONDS)
return power / 2
//The surgeon general warns that being buckled to certain objects receiving powerful shocks is greatly hazardous to your health
diff --git a/code/modules/antagonists/blob/structures/_blob.dm b/code/modules/antagonists/blob/structures/_blob.dm
index 01a2a52d900..4b1b0dcbe28 100644
--- a/code/modules/antagonists/blob/structures/_blob.dm
+++ b/code/modules/antagonists/blob/structures/_blob.dm
@@ -207,13 +207,14 @@
if(prob(100 - severity * 30))
new /obj/effect/temp_visual/emp(get_turf(src))
-/obj/structure/blob/zap_act(power)
- . = ..()
+/obj/structure/blob/zap_act(power, zap_flags)
if(overmind)
if(overmind.blobstrain.tesla_reaction(src, power))
- take_damage(power/400, BURN, "energy")
+ take_damage(power * 0.0025, BURN, "energy")
else
- take_damage(power/400, BURN, "energy")
+ take_damage(power * 0.0025, BURN, "energy")
+ power -= power * 0.0025 //You don't get to do it for free
+ return ..() //You don't get to do it for free
/obj/structure/blob/extinguish()
..()
diff --git a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm
index 64dfc71b740..135212b7b1d 100644
--- a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm
+++ b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm
@@ -441,7 +441,7 @@
qdel(src)
/obj/machinery/nuclearbomb/zap_act(power, zap_flags)
- ..()
+ . = ..()
if(zap_flags & ZAP_MACHINE_EXPLOSIVE)
qdel(src)//like the singulo, tesla deletes it. stops it from exploding over and over
@@ -662,12 +662,12 @@ This is here to make the tiles around the station mininuke change when it's arme
if(isobserver(user) || HAS_TRAIT(user.mind, TRAIT_DISK_VERIFIER))
. += "The serial numbers on [src] are incorrect."
-/*
+/*
* You can't accidentally eat the nuke disk, bro
*/
/obj/item/disk/nuclear/on_accidental_consumption(mob/living/carbon/M, mob/living/carbon/user, obj/item/source_item, discover_after = TRUE)
M.visible_message("[M] looks like [M.p_theyve()] just bitten into something important.", \
- "Wait, is this the nuke disk?")
+ "Wait, is this the nuke disk?")
return discover_after
diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm
index 8305868d4c8..b45e8617199 100644
--- a/code/modules/mob/transform_procs.dm
+++ b/code/modules/mob/transform_procs.dm
@@ -419,7 +419,7 @@
if(client)
R.updatename(client)
- if(mind) //TODO
+ if(mind) //TODO //TODO WHAT
if(!transfer_after)
mind.active = FALSE
mind.transfer_to(R)
diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm
index 002bcfc9fd9..7c668d36ab2 100644
--- a/code/modules/power/gravitygenerator.dm
+++ b/code/modules/power/gravitygenerator.dm
@@ -40,7 +40,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne
set_broken()
/obj/machinery/gravity_generator/zap_act(power, zap_flags)
- ..()
+ . = ..()
if(zap_flags & ZAP_MACHINE_EXPLOSIVE)
qdel(src)//like the singulo, tesla deletes it. stops it from exploding over and over
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index 085422f30c3..e4103d739da 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -750,11 +750,12 @@
update()
/obj/machinery/light/zap_act(power, zap_flags)
- if(zap_flags & ZAP_MACHINE_EXPLOSIVE)
+ var/explosive = zap_flags & ZAP_MACHINE_EXPLOSIVE
+ zap_flags &= ~(ZAP_MACHINE_EXPLOSIVE | ZAP_OBJ_DAMAGE)
+ . = ..()
+ if(explosive)
explosion(src,0,0,0,flame_range = 5, adminlog = FALSE)
qdel(src)
- else
- return ..()
// called when area power state changes
/obj/machinery/light/power_change()
diff --git a/code/modules/power/rtg.dm b/code/modules/power/rtg.dm
index e233f1ce353..7cd87179201 100644
--- a/code/modules/power/rtg.dm
+++ b/code/modules/power/rtg.dm
@@ -96,7 +96,7 @@
/obj/machinery/power/rtg/abductor/fire_act(exposed_temperature, exposed_volume)
overload()
-/obj/machinery/power/rtg/abductor/zap_act(tesla_flags)
- ..() //extend the zap
- if(tesla_flags & ZAP_MACHINE_EXPLOSIVE)
+/obj/machinery/power/rtg/abductor/zap_act(power, zap_flags)
+ . = ..() //extend the zap
+ if(zap_flags & ZAP_MACHINE_EXPLOSIVE)
overload()
diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm
index b1ea0dedae1..ebb8d5378c9 100644
--- a/code/modules/power/supermatter/supermatter.dm
+++ b/code/modules/power/supermatter/supermatter.dm
@@ -1148,15 +1148,9 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
multi = 20
if(CRITICAL_POWER_PENALTY_THRESHOLD to INFINITY)
multi = 40
- target.zap_act(zap_str * multi, zap_flags, list())
+ target.zap_act(zap_str * multi, zap_flags)
zap_str /= 3 //Coils should take a lot out of the power of the zap
- else if(target_type == ROD)
- //We can expect this to do very little, maybe shock the poor soul buckled to it, but that's all.
- //This is one of our endpoints, if the bolt hits a grounding rod, it stops jumping
- target.zap_act(zap_str, zap_flags, list())
- return
-
else if(isliving(target))//If we got a fleshbag on our hands
var/mob/living/creature = target
creature.set_shocked()
@@ -1169,8 +1163,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
zap_str /= 1.5 //Meatsacks are conductive, makes working in pairs more destructive
else
- target.zap_act(zap_str, zap_flags, list())
- zap_str /= 2 // worse then living things, better then coils
+ zap_str = target.zap_act(zap_str, zap_flags)
//This gotdamn variable is a boomer and keeps giving me problems
var/turf/T = get_turf(target)
var/pressure = 1
diff --git a/code/modules/power/tesla/coil.dm b/code/modules/power/tesla/coil.dm
index 6eb39cd8bd3..bf7c990e562 100644
--- a/code/modules/power/tesla/coil.dm
+++ b/code/modules/power/tesla/coil.dm
@@ -31,7 +31,7 @@
for(var/obj/item/stock_parts/capacitor/C in component_parts)
power_multiplier += C.rating
zap_cooldown -= (C.rating * 20)
- input_power_multiplier = power_multiplier
+ input_power_multiplier = (0.85 * (power_multiplier / 4)) //Max out at 85% efficency.
/obj/machinery/power/tesla_coil/examine(mob/user)
. = ..()
@@ -71,21 +71,21 @@
return ..()
-/obj/machinery/power/tesla_coil/zap_act(power, zap_flags, shocked_targets)
+/obj/machinery/power/tesla_coil/zap_act(power, zap_flags)
if(anchored && !panel_open)
- obj_flags |= BEING_SHOCKED
//don't lose arc power when it's not connected to anything
//please place tesla coils all around the station to maximize effectiveness
- var/power_produced = powernet ? power / 2 : power
- add_avail(power_produced*input_power_multiplier)
- flick("coilhit", src)
+ var/power_produced = powernet ? power * input_power_multiplier : power
+ add_avail(power_produced)
var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_ENG)
if(D)
D.adjust_money(min(power_produced, 1))
- addtimer(CALLBACK(src, .proc/reset_shocked), 10)
+ flick("coilhit", src)
zap_buckle_check(power)
playsound(src.loc, 'sound/magic/lightningshock.ogg', 100, TRUE, extrarange = 5)
- return power_produced
+ obj_flags |= BEING_SHOCKED
+ addtimer(CALLBACK(src, .proc/reset_shocked), 1 SECONDS)
+ return power - power_produced //You get back the amount we didn't use
else
. = ..()
@@ -93,13 +93,12 @@
if((last_zap + zap_cooldown) > world.time || !powernet)
return FALSE
last_zap = world.time
- var/coeff = (20 - ((input_power_multiplier - 1) * 3))
- coeff = max(coeff, 10)
- var/power = (powernet.avail/2)
+ var/power = (powernet.avail) * 0.2 * input_power_multiplier //Always always always use more then you output for the love of god
+ power = min(surplus(), power) //Take the smaller of the two
add_load(power)
playsound(src.loc, 'sound/magic/lightningshock.ogg', 100, TRUE, extrarange = 5)
- tesla_zap(src, 10, power/(coeff/2), zap_flags)
- zap_buckle_check(power/(coeff/2))
+ tesla_zap(src, 10, power, zap_flags)
+ zap_buckle_check(power)
/obj/machinery/power/grounding_rod
name = "grounding rod"
@@ -133,7 +132,7 @@
return ..()
-/obj/machinery/power/grounding_rod/zap_act(power)
+/obj/machinery/power/grounding_rod/zap_act(power, zap_flags)
if(anchored && !panel_open)
flick("grounding_rodhit", src)
zap_buckle_check(power)
diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm
index 3da4741b172..56b5c217154 100644
--- a/code/modules/power/tesla/energy_ball.dm
+++ b/code/modules/power/tesla/energy_ball.dm
@@ -328,7 +328,7 @@
power /= 1.5
else
- power = closest_atom.zap_act(power, zap_flags, shocked_targets)
+ power = closest_atom.zap_act(power, zap_flags)
if(prob(20))//I know I know
tesla_zap(closest_atom, next_range, power * 0.5, zap_flags, shocked_targets.Copy())//No pass by ref, it's a bad play
tesla_zap(closest_atom, next_range, power * 0.5, zap_flags, shocked_targets.Copy())
diff --git a/code/modules/power/tesla/generator.dm b/code/modules/power/tesla/generator.dm
index 260f4128bcf..a63e11b4914 100644
--- a/code/modules/power/tesla/generator.dm
+++ b/code/modules/power/tesla/generator.dm
@@ -8,3 +8,5 @@
/obj/machinery/the_singularitygen/tesla/zap_act(power, zap_flags)
if(zap_flags & ZAP_MACHINE_EXPLOSIVE)
energy += power
+ zap_flags &= ~(ZAP_MACHINE_EXPLOSIVE | ZAP_OBJ_DAMAGE) // Don't blow yourself up yeah?
+ return ..()
diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm
index 76e03997ccc..f32eb47ff31 100644
--- a/code/modules/reagents/reagent_dispenser.dm
+++ b/code/modules/reagents/reagent_dispenser.dm
@@ -77,8 +77,8 @@
/obj/structure/reagent_dispensers/fueltank/fire_act(exposed_temperature, exposed_volume)
boom()
-/obj/structure/reagent_dispensers/fueltank/zap_act(zap_flags)
- ..() //extend the zap
+/obj/structure/reagent_dispensers/fueltank/zap_act(power, zap_flags)
+ . = ..() //extend the zap
if(ZAP_OBJ_DAMAGE & zap_flags)
boom()
diff --git a/code/modules/vehicles/bicycle.dm b/code/modules/vehicles/bicycle.dm
index 40dd0357d1d..38d423137ce 100644
--- a/code/modules/vehicles/bicycle.dm
+++ b/code/modules/vehicles/bicycle.dm
@@ -11,7 +11,7 @@
D.vehicle_move_delay = 0
-/obj/vehicle/ridden/bicycle/zap_act(zap_str, zap_flags, shocked_targets) // :::^^^)))
+/obj/vehicle/ridden/bicycle/zap_act(power, zap_flags) // :::^^^)))
//This didn't work for 3 years because none ever tested it I hate life
name = "fried bicycle"
desc = "Well spent."
diff --git a/code/modules/vehicles/ridden.dm b/code/modules/vehicles/ridden.dm
index 71c4ba290f3..c67086bc3c4 100644
--- a/code/modules/vehicles/ridden.dm
+++ b/code/modules/vehicles/ridden.dm
@@ -101,6 +101,6 @@
return FALSE
return ..()
-/obj/vehicle/ridden/zap_act(zap_str, zap_flags, shocked_targets)
- zap_buckle_check(zap_str)
+/obj/vehicle/ridden/zap_act(power, zap_flags)
+ zap_buckle_check(power)
. = ..()