diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index 6a69602dbcb..8172fbe8502 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -174,7 +174,12 @@
/obj/proc/see_emote(mob/M as mob, text, var/emote_type)
return
-/obj/proc/tesla_act(var/power)
+/obj/proc/tesla_act(var/power, var/melt = FALSE)
+ if(melt)
+ visible_message(span("danger", "\The [src] melts down until ashes are left!"))
+ new /obj/effect/decal/cleanable/ash(loc)
+ qdel(src)
+ return
being_shocked = 1
var/power_bounced = power / 2
tesla_zap(src, 3, power_bounced)
diff --git a/code/modules/power/tesla/coil.dm b/code/modules/power/tesla/coil.dm
index cfaaeb63b66..988491fa5bc 100644
--- a/code/modules/power/tesla/coil.dm
+++ b/code/modules/power/tesla/coil.dm
@@ -30,7 +30,7 @@
if(W.iswrench())
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
- user << "You [anchored ? "unfasten" : "fasten"] [src] to the flooring."
+ to_chat(user, "You [anchored ? "unfasten" : "fasten"] [src] to the flooring.")
anchored = !anchored
if(!anchored)
disconnect_from_network()
@@ -38,8 +38,8 @@
connect_to_network()
return
-/obj/machinery/power/tesla_coil/tesla_act(var/power)
- if(anchored)
+/obj/machinery/power/tesla_coil/tesla_act(var/power, var/melt = FALSE)
+ if(anchored && !melt)
being_shocked = 1
//don't lose arc power when it's not connected to anything
//please place tesla coils all around the station to maximize effectiveness
@@ -76,13 +76,14 @@
if(W.iswrench())
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
- user << "You [anchored ? "unfasten" : "fasten"] [src] to the flooring."
+ to_chat(user, "You [anchored ? "unfasten" : "fasten"] [src] to the flooring.")
anchored = !anchored
return
-/obj/machinery/power/grounding_rod/tesla_act(var/power)
+/obj/machinery/power/grounding_rod/tesla_act(var/power, var/melt = FALSE)
flick("coil_shock_1", src)
+ ..()
/obj/item/weapon/circuitboard/tesla_coil
name = "tesla coil circuitry"
diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm
index 09e9d5eeef9..95ad2a45a0d 100644
--- a/code/modules/power/tesla/energy_ball.dm
+++ b/code/modules/power/tesla/energy_ball.dm
@@ -59,7 +59,7 @@
tesla_zap(ball, range, TESLA_MINI_POWER/7*range, TRUE)
else
energy = 0 // ensure we dont have miniballs of miniballs
- if(energy == 0)
+ if(energy < 0)
qdel(src)
/obj/singularity/energy_ball/examine(mob/user)
@@ -159,11 +159,14 @@
else if(orbiting_balls.len)
dissipate() //sing code has a much better system.
+ else // that is when we have no balls but our energy is less
+ energy_to_raise = energy_to_raise / 1.25
+ energy_to_lower = (energy_to_raise / 1.25) - 20
/obj/singularity/energy_ball/proc/new_mini_ball()
if(!loc)
return
- var/obj/singularity/energy_ball/EB = new(loc)
+ var/obj/singularity/energy_ball/EB = new(loc, 0)
EB.transform *= pick(0.3, 0.4, 0.5, 0.6, 0.7)
var/icon/I = icon(icon,icon_state,dir)
@@ -188,16 +191,16 @@
target.dissipate_strength = target.orbiting_balls.len
. = ..()
+
/obj/singularity/energy_ball/stop_orbit()
if (orbiting && istype(orbiting.orbiting, /obj/singularity/energy_ball))
var/obj/singularity/energy_ball/orbitingball = orbiting.orbiting
orbitingball.orbiting_balls -= src
orbitingball.dissipate_strength = orbitingball.orbiting_balls.len
- ..()
+ . = ..()
if (!loc && !QDELETED(src))
qdel(src)
-
/obj/singularity/energy_ball/proc/dust_mobs(atom/A)
if(!iscarbon(A))
return
@@ -219,6 +222,7 @@
var/mob/living/closest_mob
var/obj/machinery/closest_machine
var/obj/structure/closest_structure
+ var/obj/machinery/power/emitter/closest_emitter // Use only if Tesla is too grown with 10 ore more balls. Will escape.
var/static/list/blacklisted_types = typecacheof(list(
/obj/machinery/atmospherics,
/obj/machinery/power/emitter,
@@ -245,8 +249,15 @@
/mob/living,
/obj/structure
))
+ var/melt = FALSE
+ if(istype(source, /obj/singularity/energy_ball))
+ var/obj/singularity/energy_ball/E = source
+ melt = (E.orbiting_balls.len >= 9)
+ if(E.orbiting_balls.len >= 10)
+ blacklisted_types -= /obj/machinery/power/emitter
for(var/A in typecache_filter_multi_list_exclusion(oview(source, zap_range+2), things_to_shock, blacklisted_types))
+
if(istype(A, /obj/machinery/power/tesla_coil))
var/dist = get_dist(source, A)
var/obj/machinery/power/tesla_coil/C = A
@@ -271,6 +282,13 @@
else if(closest_grounding_rod)
continue
+ else if(melt && istype(A, /obj/machinery/power/emitter))
+ var/obj/machinery/power/emitter/e = A
+ closest_emitter = e
+
+ else if(closest_emitter)
+ continue
+
else if(isliving(A))
var/dist = get_dist(source, A)
var/mob/living/L = A
@@ -311,10 +329,13 @@
//per type stuff:
if(closest_tesla_coil)
- closest_tesla_coil.tesla_act(power)
+ closest_tesla_coil.tesla_act(power, melt)
else if(closest_grounding_rod)
- closest_grounding_rod.tesla_act(power)
+ closest_grounding_rod.tesla_act(power, melt)
+
+ else if(closest_emitter)
+ closest_emitter.tesla_act(power, melt)
else if(closest_mob)
var/shock_damage = Clamp(round(power/400), 10, 90) + rand(-5, 5)
diff --git a/html/changelogs/Sindorman-tesla.yml b/html/changelogs/Sindorman-tesla.yml
new file mode 100644
index 00000000000..b0b60f9b62a
--- /dev/null
+++ b/html/changelogs/Sindorman-tesla.yml
@@ -0,0 +1,43 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+# balance
+# admin
+# backend
+# security
+# refactor
+#################################
+
+# Your name.
+author: PoZe
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - bugfix: "Tesla now can generate miniballs. And actually dies if it ha no energy"
+ - tweak: "There is no max limit of balls, but if Tesla has 9 or more balls it will start melting down tesla coils and grounding rods. If Tesla has 10 or more balls it will start to target emitters and melt them as well."
+