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
This commit is contained in:
LemonInTheDark
2020-02-27 03:06:52 -08:00
committed by GitHub
parent 5d55e64398
commit df9d859da8
14 changed files with 41 additions and 40 deletions

View File

@@ -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)

View File

@@ -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")

View File

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

View File

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

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -441,7 +441,7 @@
modifier = -100
mix_message = "<span class='boldannounce'>The teslium starts to spark as electricity arcs away from it!</span>"
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.

View File

@@ -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