From df9d859da8f3fd476687a7b5e84df324cb8317fb Mon Sep 17 00:00:00 2001 From: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> Date: Thu, 27 Feb 2020 03:06:52 -0800 Subject: [PATCH] Fixes tesla bugs, makes code better (#49260) * Cleans shit up, adds some upper limits on zap count, makes explosions less commen. Need to fix apc issue before I test how it plays * Mood, buffs and nerfs tesla * Cherry-Picking * eyyo * back to basics * aight * broooooooooooooooooo * adds else * range * fixes shit * Sure * Cleans shit up * Fixes prob issue * Gee I like this spooky guy * I swear to god if prob picks just makes a list I am gonna blow a gasket --- code/__DEFINES/flags.dm | 3 +- code/_globalvars/bitfields.dm | 1 - code/game/machinery/_machinery.dm | 4 +-- code/game/objects/obj_defense.dm | 6 ++-- code/game/objects/structures/grille.dm | 2 +- .../abductor/equipment/glands/electric.dm | 2 +- .../antagonists/blob/structures/_blob.dm | 2 +- .../modules/clothing/suits/reactive_armour.dm | 2 +- code/modules/power/tesla/coil.dm | 17 ++++------ code/modules/power/tesla/energy_ball.dm | 34 ++++++++++++------- .../projectiles/projectile/energy/tesla.dm | 2 +- code/modules/projectiles/projectile/magic.dm | 2 +- .../chemistry/recipes/pyrotechnics.dm | 2 +- code/modules/spells/spell_types/aimed.dm | 2 +- 14 files changed, 41 insertions(+), 40 deletions(-) diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index 835114b2c6c..cad7d57fb49 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -92,10 +92,9 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define ZAP_OBJ_DAMAGE (1<<2) #define ZAP_MOB_DAMAGE (1<<3) #define ZAP_MOB_STUN (1<<4) -#define ZAP_IS_TESLA (1<<5) #define ZAP_DEFAULT_FLAGS ALL -#define ZAP_FUSION_FLAGS ZAP_OBJ_DAMAGE | ZAP_MOB_DAMAGE | ZAP_MOB_STUN | ZAP_IS_TESLA +#define ZAP_FUSION_FLAGS ZAP_OBJ_DAMAGE | ZAP_MOB_DAMAGE | ZAP_MOB_STUN #define ZAP_SUPERMATTER_FLAGS NONE //EMP protection diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index 14ed32967c6..dce002235b1 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -155,7 +155,6 @@ GLOBAL_LIST_INIT(bitfields, list( "ZAP_MOB_STUN" = ZAP_MOB_STUN, "ZAP_ALLOW_DUPLICATES" = ZAP_ALLOW_DUPLICATES, "ZAP_MACHINE_EXPLOSIVE" = ZAP_MACHINE_EXPLOSIVE, - "ZAP_IS_TESLA" = ZAP_IS_TESLA, ), "smooth" = list( "SMOOTH_TRUE" = SMOOTH_TRUE, diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index 15139a39e50..684e2d5675c 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -532,10 +532,10 @@ Class Procs: . = 1 /obj/machinery/zap_act(power, zap_flags, shocked_objects) - ..() + . = ..() if(prob(85) && (zap_flags & ZAP_MACHINE_EXPLOSIVE) && !(resistance_flags & INDESTRUCTIBLE)) explosion(src, 1, 2, 4, flame_range = 2, adminlog = FALSE, smoke = FALSE) - if(zap_flags & ZAP_OBJ_DAMAGE) + else if(zap_flags & ZAP_OBJ_DAMAGE) take_damage(power/2000, BURN, "energy") if(prob(40)) emp_act(EMP_LIGHT) diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index bd57f992544..e5a093a35d8 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -229,12 +229,10 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e ///Called when the obj is hit by a tesla bolt. /obj/proc/zap_act(power, zap_flags, shocked_targets) if(QDELETED(src)) - return + return 0 obj_flags |= BEING_SHOCKED - if(zap_flags & ZAP_IS_TESLA) - var/power_bounced = power / 2 - tesla_zap(src, 3, power_bounced, zap_flags, shocked_targets) addtimer(CALLBACK(src, .proc/reset_shocked), 10) + return power / 2 //The surgeon general warns that being buckled to certain objects receiving powerful shocks is greatly hazardous to your health ///Only tesla coils, vehicles, and grounding rods currently call this because mobs are already targeted over all other objects, but this might be useful for more things later. diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 2a242487af2..60d98cbff6d 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -261,7 +261,7 @@ var/obj/structure/cable/C = T.get_cable_node() if(C) playsound(src, 'sound/magic/lightningshock.ogg', 100, TRUE, extrarange = 5) - tesla_zap(src, 3, C.newavail() * 0.01, ZAP_MOB_DAMAGE | ZAP_OBJ_DAMAGE | ZAP_MOB_STUN | ZAP_ALLOW_DUPLICATES | ZAP_IS_TESLA) //Zap for 1/100 of the amount of power. At a million watts in the grid, it will be as powerful as a tesla revolver shot. + tesla_zap(src, 3, C.newavail() * 0.01, ZAP_MOB_DAMAGE | ZAP_OBJ_DAMAGE | ZAP_MOB_STUN | ZAP_ALLOW_DUPLICATES) //Zap for 1/100 of the amount of power. At a million watts in the grid, it will be as powerful as a tesla revolver shot. C.add_delayedload(C.newavail() * 0.0375) // you can gain up to 3.5 via the 4x upgrades power is halved by the pole so thats 2x then 1X then .5X for 3.5x the 3 bounces shock. return ..() diff --git a/code/modules/antagonists/abductor/equipment/glands/electric.dm b/code/modules/antagonists/abductor/equipment/glands/electric.dm index a52b63ea42b..015b87f47e8 100644 --- a/code/modules/antagonists/abductor/equipment/glands/electric.dm +++ b/code/modules/antagonists/abductor/equipment/glands/electric.dm @@ -22,5 +22,5 @@ addtimer(CALLBACK(src, .proc/zap), rand(30, 100)) /obj/item/organ/heart/gland/electric/proc/zap() - tesla_zap(owner, 4, 8000, ZAP_MOB_DAMAGE | ZAP_OBJ_DAMAGE | ZAP_MOB_STUN | ZAP_IS_TESLA) + tesla_zap(owner, 4, 8000, ZAP_MOB_DAMAGE | ZAP_OBJ_DAMAGE | ZAP_MOB_STUN) playsound(get_turf(owner), 'sound/magic/lightningshock.ogg', 50, TRUE) diff --git a/code/modules/antagonists/blob/structures/_blob.dm b/code/modules/antagonists/blob/structures/_blob.dm index 966290d1509..74c0663aede 100644 --- a/code/modules/antagonists/blob/structures/_blob.dm +++ b/code/modules/antagonists/blob/structures/_blob.dm @@ -208,7 +208,7 @@ new /obj/effect/temp_visual/emp(get_turf(src)) /obj/structure/blob/zap_act(power) - ..() + . = ..() if(overmind) if(overmind.blobstrain.tesla_reaction(src, power)) take_damage(power/400, BURN, "energy") diff --git a/code/modules/clothing/suits/reactive_armour.dm b/code/modules/clothing/suits/reactive_armour.dm index a0e03ffc16b..696852c774c 100644 --- a/code/modules/clothing/suits/reactive_armour.dm +++ b/code/modules/clothing/suits/reactive_armour.dm @@ -153,7 +153,7 @@ siemens_coefficient = -1 var/zap_power = 25000 var/zap_range = 20 - var/zap_flags = ZAP_MOB_DAMAGE | ZAP_OBJ_DAMAGE | ZAP_IS_TESLA + var/zap_flags = ZAP_MOB_DAMAGE | ZAP_OBJ_DAMAGE /obj/item/clothing/suit/armor/reactive/tesla/dropped(mob/user) ..() diff --git a/code/modules/power/tesla/coil.dm b/code/modules/power/tesla/coil.dm index 0e725b59d61..6e98ec3ac6b 100644 --- a/code/modules/power/tesla/coil.dm +++ b/code/modules/power/tesla/coil.dm @@ -13,7 +13,7 @@ circuit = /obj/item/circuitboard/machine/tesla_coil - var/zap_flags = ZAP_MOB_DAMAGE | ZAP_OBJ_DAMAGE | ZAP_IS_TESLA + var/zap_flags = ZAP_MOB_DAMAGE | ZAP_OBJ_DAMAGE var/power_loss = 2 var/input_power_multiplier = 1 var/zap_cooldown = 100 @@ -94,11 +94,9 @@ addtimer(CALLBACK(src, .proc/reset_shocked), 10) zap_buckle_check(power) playsound(src.loc, 'sound/magic/lightningshock.ogg', 100, TRUE, extrarange = 5) - if(!(zap_flags & ZAP_IS_TESLA)) - return power_produced - tesla_zap(src, 5, power_produced, zap_flags, shocked_targets) + return power_produced else - ..() + . = ..() /obj/machinery/power/tesla_coil/proc/zap() if((last_zap + zap_cooldown) > world.time || !powernet) @@ -134,11 +132,9 @@ addtimer(CALLBACK(src, .proc/reset_shocked), 10) zap_buckle_check(power) playsound(src.loc, 'sound/magic/lightningshock.ogg', 100, TRUE, extrarange = 5) - if(!(zap_flags & ZAP_IS_TESLA)) - return power_produced - tesla_zap(src, 5, power_produced, zap_flags, shocked_targets) + return power_produced else - ..() + . = ..() /obj/machinery/power/tesla_coil/research/default_unfasten_wrench(mob/user, obj/item/wrench/W, time = 20) . = ..() @@ -193,5 +189,6 @@ if(anchored && !panel_open) flick("grounding_rodhit", src) zap_buckle_check(power) + return 0 else - ..() + . = ..() diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm index ab7a9ad61ae..ea9692734b2 100644 --- a/code/modules/power/tesla/energy_ball.dm +++ b/code/modules/power/tesla/energy_ball.dm @@ -60,7 +60,7 @@ pixel_x = 0 pixel_y = 0 - tesla_zap(src, 7, TESLA_DEFAULT_POWER, TRUE) + tesla_zap(src, 7, TESLA_DEFAULT_POWER) pixel_x = -32 pixel_y = -32 @@ -169,6 +169,8 @@ C.dust() /proc/tesla_zap(atom/source, zap_range = 3, power, zap_flags = ZAP_DEFAULT_FLAGS, list/shocked_targets) + if(QDELETED(source)) + return . = source.dir if(power < 1000) return @@ -181,7 +183,7 @@ var/obj/vehicle/ridden/bicycle/closest_million_dollar_baby var/obj/machinery/power/tesla_coil/closest_tesla_coil var/obj/machinery/power/grounding_rod/closest_grounding_rod - var/obj/vehicle/ridden/bicycle/closest_rideable + var/obj/vehicle/ridden/closest_rideable var/mob/living/closest_mob var/obj/machinery/closest_machine var/obj/structure/closest_structure @@ -207,7 +209,6 @@ /obj/machinery/gateway, /obj/structure/lattice, /obj/structure/grille, - /obj/machinery/the_singularitygen/tesla, /obj/structure/frame/machine)) for(var/A in typecache_filter_multi_list_exclusion(oview(source, zap_range+2), things_to_shock, blacklisted_tesla_types)) @@ -312,36 +313,43 @@ . = zapdir //per type stuff: + var/range = 3 if(!QDELETED(closest_million_dollar_baby)) - closest_million_dollar_baby.zap_act(power, zap_flags, shocked_targets) + power = closest_million_dollar_baby.zap_act(power, zap_flags, shocked_targets) else if(!QDELETED(closest_tesla_coil)) - closest_tesla_coil.zap_act(power, zap_flags, shocked_targets) + power = closest_tesla_coil.zap_act(power, zap_flags, shocked_targets) + range = 5 else if(!QDELETED(closest_grounding_rod)) - closest_grounding_rod.zap_act(power, zap_flags, shocked_targets) + power = closest_grounding_rod.zap_act(power, zap_flags, shocked_targets) else if(!QDELETED(closest_rideable)) - closest_rideable.zap_act(power, zap_flags, shocked_targets) + power = closest_rideable.zap_act(power, zap_flags, shocked_targets) else if(!QDELETED(closest_mob)) closest_mob.set_shocked() addtimer(CALLBACK(closest_mob, /mob/living/proc/reset_shocked), 10) - var/shock_damage = (zap_flags & ZAP_MOB_DAMAGE)? (min(round(power/600), 90) + rand(-5, 5)) : 0 + var/shock_damage = (zap_flags & ZAP_MOB_DAMAGE) ? (min(round(power/600), 90) + rand(-5, 5)) : 0 closest_mob.electrocute_act(shock_damage, source, 1, SHOCK_TESLA | ((zap_flags & ZAP_MOB_STUN) ? NONE : SHOCK_NOSTUN)) if(issilicon(closest_mob)) var/mob/living/silicon/S = closest_mob if((zap_flags & ZAP_MOB_STUN) && (zap_flags & ZAP_MOB_DAMAGE)) S.emp_act(EMP_LIGHT) - tesla_zap(S, 7, power / 1.5, zap_flags, shocked_targets) // metallic folks bounce it further + range = 7 // metallic folks bounce it further else - tesla_zap(closest_mob, 5, power / 1.5, zap_flags, shocked_targets) + range = 5 + power /= 1.5 else if(!QDELETED(closest_machine)) - closest_machine.zap_act(power, zap_flags, shocked_targets) + power = closest_machine.zap_act(power, zap_flags, shocked_targets) else if(!QDELETED(closest_blob)) - closest_blob.zap_act(power, zap_flags, shocked_targets) + power = closest_blob.zap_act(power, zap_flags, shocked_targets) else if(!QDELETED(closest_structure)) - closest_structure.zap_act(power, zap_flags, shocked_targets) + power = closest_structure.zap_act(power, zap_flags, shocked_targets) + + tesla_zap(closest_mob, range, power, zap_flags, shocked_targets) + if(prob(20))//I know I know + tesla_zap(closest_mob, range, power / 2, zap_flags, shocked_targets) diff --git a/code/modules/projectiles/projectile/energy/tesla.dm b/code/modules/projectiles/projectile/energy/tesla.dm index 041ecd21b4b..b858365445b 100644 --- a/code/modules/projectiles/projectile/energy/tesla.dm +++ b/code/modules/projectiles/projectile/energy/tesla.dm @@ -3,7 +3,7 @@ icon_state = "tesla_projectile" impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser var/chain - var/zap_flags = ZAP_MOB_DAMAGE | ZAP_OBJ_DAMAGE | ZAP_IS_TESLA + var/zap_flags = ZAP_MOB_DAMAGE | ZAP_OBJ_DAMAGE var/zap_range = 3 var/power = 10000 diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm index e277d68ba73..58c3ad9aadf 100644 --- a/code/modules/projectiles/projectile/magic.dm +++ b/code/modules/projectiles/projectile/magic.dm @@ -630,7 +630,7 @@ var/zap_power = 20000 var/zap_range = 15 - var/zap_flags = ZAP_MOB_DAMAGE | ZAP_MOB_STUN | ZAP_OBJ_DAMAGE | ZAP_IS_TESLA + var/zap_flags = ZAP_MOB_DAMAGE | ZAP_MOB_STUN | ZAP_OBJ_DAMAGE var/chain var/mob/living/caster diff --git a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm index 49815c5e8d8..169caf3a93d 100644 --- a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm +++ b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm @@ -441,7 +441,7 @@ modifier = -100 mix_message = "The teslium starts to spark as electricity arcs away from it!" mix_sound = 'sound/machines/defib_zap.ogg' - var/zap_flags = ZAP_MOB_DAMAGE | ZAP_OBJ_DAMAGE | ZAP_MOB_STUN | ZAP_IS_TESLA + var/zap_flags = ZAP_MOB_DAMAGE | ZAP_OBJ_DAMAGE | ZAP_MOB_STUN /datum/chemical_reaction/reagent_explosion/teslium_lightning/on_reaction(datum/reagents/holder, created_volume) var/T1 = created_volume * 20 //100 units : Zap 3 times, with powers 2000/5000/12000. Tesla revolvers have a power of 10000 for comparison. diff --git a/code/modules/spells/spell_types/aimed.dm b/code/modules/spells/spell_types/aimed.dm index c8e6d40eed2..07165a2623b 100644 --- a/code/modules/spells/spell_types/aimed.dm +++ b/code/modules/spells/spell_types/aimed.dm @@ -101,7 +101,7 @@ action_icon_state = "lightning0" sound = 'sound/magic/lightningbolt.ogg' active = FALSE - projectile_var_overrides = list("zap_range" = 15, "zap_power" = 20000, "zap_flags" = ZAP_MOB_DAMAGE | ZAP_IS_TESLA) + projectile_var_overrides = list("zap_range" = 15, "zap_power" = 20000, "zap_flags" = ZAP_MOB_DAMAGE) active_msg = "You energize your hand with arcane lightning!" deactive_msg = "You let the energy flow out of your hands back into yourself..." projectile_type = /obj/projectile/magic/aoe/lightning