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) . = ..()