Spark Fixes (#1764)

changes:

Removed shim for old spark system.
Converted all calls to old spark system with calls to new one.
Processor-based effects are no longer pooled, as it had minimal performance impact and was breaking things.
Tweaked some visible_messages for rogue drones.
PB effects' handling of location is now done at the /datum/effect_system level.
This commit is contained in:
Lohikar
2017-02-14 14:37:16 +02:00
committed by skull132
parent 59cedff4b9
commit 2b9aa21421
88 changed files with 247 additions and 458 deletions
+4 -12
View File
@@ -34,10 +34,7 @@
//I couldn't get the normal way to work so this works.
//This whole section looks like a hack, I don't like it.
var/T = get_turf(usr)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, T)
s.start()
var/mob/living/carbon/human/bst/bst = new(get_turf(T))
var/mob/living/carbon/human/bst/bst = new(T)
// bst.original_mob = usr
bst.anchored = 1
bst.ckey = usr.ckey
@@ -115,10 +112,9 @@
bst.add_language(LANGUAGE_BORER)
spawn(5)
s.start()
spark(T, 3, alldirs)
bst.anchored = 0
spawn(10)
qdel(s)
log_debug("Bluespace Tech Spawned: X:[bst.x] Y:[bst.y] Z:[bst.z] User:[src]")
feedback_add_details("admin_verb","BST")
@@ -155,11 +151,7 @@
src.custom_emote(1,"presses a button on their suit, followed by a polite bow.")
spawn(10)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
spawn(5)
qdel(s)
spark(src, 5, alldirs)
if(key)
if(client.holder && client.holder.original_mob)
client.holder.original_mob.key = key
+4 -7
View File
@@ -22,13 +22,10 @@
M.Move(dest)
if(entersparks)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(4, 1, src)
s.start()
spark(src, 4, alldirs)
if(exitsparks)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(4, 1, dest)
s.start()
spark(dest, 4, alldirs)
if(entersmoke)
var/datum/effect/effect/system/smoke_spread/s = new /datum/effect/effect/system/smoke_spread
@@ -41,4 +38,4 @@
uses--
if(uses == 0)
qdel(src)
qdel(src)
@@ -415,7 +415,7 @@
interfaced_with = target
drain_loc = interfaced_with.loc
holder.spark_system.start()
holder.spark_system.queue()
playsound(H.loc, 'sound/effects/sparks2.ogg', 50, 1)
return 1
@@ -439,7 +439,7 @@
if(!H || !istype(H))
return 0
holder.spark_system.start()
holder.spark_system.queue()
playsound(H.loc, 'sound/effects/sparks2.ogg', 50, 1)
if(!holder.cell)
@@ -83,7 +83,7 @@
if(!M || !T)
return
holder.spark_system.start()
holder.spark_system.queue()
playsound(T, 'sound/effects/phasein.ogg', 25, 1)
playsound(T, 'sound/effects/sparks2.ogg', 50, 1)
anim(T,M,'icons/mob/mob.dmi',,"phasein",,M.dir)
+3 -5
View File
@@ -79,7 +79,7 @@
// Wiring! How exciting.]
var/datum/wires/rig/wires
var/datum/effect/effect/system/spark_spread/spark_system
var/datum/effect_system/sparks/spark_system
/obj/item/weapon/rig/examine()
usr << "This is \icon[src][src.name]."
@@ -103,9 +103,7 @@
if((!req_access || !req_access.len) && (!req_one_access || !req_one_access.len))
locked = 0
spark_system = new()
spark_system.set_up(5, 0, src)
spark_system.attach(src)
spark_system = bind_spark(src, 5)
processing_objects |= src
@@ -725,7 +723,7 @@
/obj/item/weapon/rig/proc/shock(mob/user)
if (electrocute_mob(user, cell, src)) //electrocute_mob() handles removing charge from the cell, no need to do that here.
spark_system.start()
spark_system.queue()
if(user.stunned)
return 1
return 0
+1 -3
View File
@@ -215,9 +215,7 @@
var/turf/picked = pick(turfs)
if(!isturf(picked)) return
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
spark_system.set_up(5, 0, user.loc)
spark_system.start()
spark(user, 5)
playsound(user.loc, "sparks", 50, 1)
user.loc = picked
+3 -5
View File
@@ -32,14 +32,12 @@ log transactions
var/obj/item/weapon/card/held_card
var/editing_security_level = 0
var/view_screen = NO_SCREEN
var/datum/effect/effect/system/spark_spread/spark_system
var/datum/effect_system/sparks/spark_system
/obj/machinery/atm/New()
..()
machine_id = "[station_name()] RT #[num_financial_terminals++]"
spark_system = new /datum/effect/effect/system/spark_spread
spark_system.set_up(5, 0, src)
spark_system.attach(src)
spark_system = bind_spark(src, 5)
/obj/machinery/atm/process()
if(stat & NOPOWER)
@@ -68,7 +66,7 @@ log transactions
//short out the machine, shoot sparks, spew money!
emagged = 1
spark_system.start()
spark_system.queue()
spawn_money(rand(100,500),src.loc)
//we don't want to grief people by locking their id in an emagged ATM
release_held_id(user)
+5 -1
View File
@@ -2,6 +2,7 @@
// The base type for the new processor-driven effect system.
/datum/effect_system
var/atom/movable/holder // The object this effect is attached to. If this is set, the effect will not be qdel()'d at end of processing.
var/turf/location // Where the effect is
/datum/effect_system/New(var/queue = TRUE)
. = ..()
@@ -21,7 +22,10 @@
return FALSE
/datum/effect_system/proc/process()
return holder ? EFFECT_HALT : EFFECT_DESTROY // Terminate effect if it's not attached to something.
if (holder)
location = get_turf(holder)
return EFFECT_HALT
return EFFECT_DESTROY // Terminate effect if it's not attached to something.
/datum/effect_system/proc/bind(var/target)
holder = target
+3 -3
View File
@@ -1,9 +1,9 @@
// -- Spark Procs --
/proc/spark(var/turf/loc, var/amount = 1, var/spread_dirs = cardinal)
getFromPool(/datum/effect_system/sparks, loc, TRUE, amount, spread_dirs)
/proc/spark(var/atom/movable/loc, var/amount = 1, var/spread_dirs = cardinal)
new /datum/effect_system/sparks(get_turf(loc), TRUE, amount, spread_dirs)
/proc/bind_spark(var/atom/movable/loc, var/amount = 1, var/spread_dirs = cardinal)
var/datum/effect_system/sparks/S = getFromPool(/datum/effect_system/sparks, loc, FALSE, amount, spread_dirs)
var/datum/effect_system/sparks/S = new /datum/effect_system/sparks(loc, FALSE, amount, spread_dirs)
S.bind(loc)
return S
+10 -12
View File
@@ -2,7 +2,6 @@
/datum/effect_system/sparks
var/amount = 1 // How many sparks should we make
var/list/spread = list() // Which directions we should create sparks.
var/turf/location // Where the effect is
// Using the spark procs is preferred to directly instancing this.
/datum/effect_system/sparks/New(var/atom/movable/loc, var/start_immediately = TRUE, var/amt = 1, var/list/spread_dirs = list())
@@ -17,8 +16,10 @@
if (amt)
amount = amt
if (spread_dirs.len)
if (spread_dirs)
spread = spread_dirs
else
spread = list()
..(start_immediately)
@@ -29,27 +30,24 @@
return ..()
/datum/effect_system/sparks/process()
var/total_sparks = 1
if (holder)
location = get_turf(holder)
. = ..()
var/total_sparks = 1
if (location)
var/obj/visual_effect/sparks/S = getFromPool(/obj/visual_effect/sparks, location, src, 0) //Trigger one on the tile it's on
var/obj/visual_effect/sparks/S = new /obj/visual_effect/sparks(location, src, 0) //Trigger one on the tile it's on
S.start()
effects_visuals += S // Queue it.
while (total_sparks <= amount)
while (total_sparks <= src.amount)
playsound(location, "sparks", 100, 1)
var/direction = 0
if(!spread.len)
if (!src.spread.len)
direction = 0
else
direction = pick(spread)
direction = pick(src.spread)
S = getFromPool(/obj/visual_effect/sparks, location, src)
S = new /obj/visual_effect/sparks(location, src)
S.start(direction)
effects_visuals += S
total_sparks++
return ..()
+1 -3
View File
@@ -30,9 +30,7 @@
/datum/event/rogue_drone/end()
var/num_recovered = 0
for(var/mob/living/simple_animal/hostile/retaliate/malf_drone/D in drones_list)
var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread()
sparks.set_up(3, 0, D.loc)
sparks.start()
spark(D.loc, 3)
D.z = config.admin_levels[1]
D.has_loot = 0
+2 -7
View File
@@ -18,12 +18,7 @@
new /obj/structure/closet/crate/loot(spawn_loc, rarity, quantity)
log_and_message_admins("Unusual container spawned at (<a href='?_src_=holder;adminplayerobservecoodjump=1;X=[spawn_loc.x];Y=[spawn_loc.y];Z=[spawn_loc.z]'>JMP</a>)")
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(10, 0, spawn_loc)
s.start()
spawn(2)
qdel(s)
spark(spawn_loc, 10, alldirs)
/datum/event/supply_drop/announce()
if (prob(65))//Announce the location
@@ -31,4 +26,4 @@
else if (prob(25))//Announce the transport, but not the location
command_announcement.Announce("External transport signature of unknown origin detected aboard [station_name()], precise destination point cannot be determined, please investigate.", "Unknown Object")
//Otherwise, no announcement at all.
//Someone will randomly stumble across it, and probably quietly loot it without telling anyone
//Someone will randomly stumble across it, and probably quietly loot it without telling anyone
+2 -6
View File
@@ -200,9 +200,7 @@
for(var/turf/T in linkedholodeck)
if(prob(30))
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(2, 1, T)
s.start()
spark(T, 2, alldirs)
T.ex_act(3)
T.hotspot_expose(1000,500,1)
@@ -294,9 +292,7 @@
if(L.name=="Atmospheric Test Start")
spawn(20)
var/turf/T = get_turf(L)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(2, 1, T)
s.start()
spark(T, 2, alldirs)
if(T)
T.temperature = 5000
T.hotspot_expose(50000,50000,1)
+1 -3
View File
@@ -264,9 +264,7 @@
if(active && default_parry_check(user, attacker, damage_source) && prob(50))
user.visible_message("<span class='danger'>\The [user] parries [attack_text] with \the [src]!</span>")
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
spark_system.set_up(5, 0, user.loc)
spark_system.start()
spark(user.loc, 5)
playsound(user.loc, 'sound/weapons/blade1.ogg', 50, 1)
return 1
return 0
+1 -3
View File
@@ -316,9 +316,7 @@
if(turfs.len)
// Moves the mob, causes sparks.
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, get_turf(target))
s.start()
spark(target, 3, alldirs)
var/turf/picked = get_turf(pick(turfs)) // Just in case...
new/obj/effect/decal/cleanable/molten_item(get_turf(target)) // Leave a pile of goo behind for dramatic effect...
target.loc = picked // And teleport them to the chosen location.
+7 -7
View File
@@ -38,6 +38,8 @@
var/need_update_field = 0
var/need_player_check = 0
var/datum/effect_system/sparks/spark_system
/obj/machinery/mining/drill/New()
..()
@@ -49,6 +51,8 @@
component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
component_parts += new /obj/item/weapon/cell/high(src)
spark_system = bind_spark(src, 3)
RefreshParts()
/obj/machinery/mining/drill/process()
@@ -208,15 +212,11 @@
if(supported && panel_open)
if(cell)
system_error("unsealed cell fitting error")
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src.loc)
s.start()
spark_system.queue()
sleep(20)
s.set_up(3, 1, src.loc)
s.start()
spark_system.queue()
sleep(10)
s.set_up(3, 1, src.loc)
s.start()
spark_system.queue()
sleep(10)
if(panel_open)
if(prob(70))
+1 -3
View File
@@ -226,9 +226,7 @@ var/list/cleanbot_types // Going to use this to generate a list of types once th
if(prob(50))
new /obj/item/robot_parts/l_arm(Tsec)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
spark(src, 3, alldirs)
qdel(src)
return
+1 -3
View File
@@ -43,9 +43,7 @@
else
new /obj/item/clothing/suit/armor/vest(Tsec)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
spark(src, 3, alldirs)
new /obj/effect/decal/cleanable/blood/oil(Tsec)
qdel(src)
+1 -3
View File
@@ -265,9 +265,7 @@
if(prob(50))
new /obj/item/robot_parts/l_arm(Tsec)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
spark(src, 3, alldirs)
qdel(src)
return
+1 -3
View File
@@ -283,9 +283,7 @@
new /obj/item/robot_parts/l_arm(Tsec)
var/obj/item/stack/tile/floor/T = new /obj/item/stack/tile/floor(Tsec)
T.amount = amount
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
spark(src, 3, alldirs)
qdel(src)
/mob/living/bot/floorbot/proc/addTiles(var/am)
+3 -4
View File
@@ -258,9 +258,8 @@
reagent_glass.loc = Tsec
reagent_glass = null
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
spark(src, 3, alldirs)
qdel(src)
return
@@ -376,4 +375,4 @@
S.name = created_name
user.drop_from_inventory(src)
qdel(src)
return 1
return 1
+1 -3
View File
@@ -322,9 +322,7 @@
if(prob(50))
new /obj/item/robot_parts/l_arm(Tsec)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
spark(src, 3, alldirs)
new /obj/effect/decal/cleanable/blood/oil(Tsec)
qdel(src)
+1 -3
View File
@@ -125,9 +125,7 @@
"\red You hear a light zapping." \
)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, loc)
s.start()
spark(loc, 5, alldirs)
return shock_damage
@@ -77,12 +77,7 @@
stance_damage += 2
if(prob(10))
visible_message("\The [src]'s [E.name] [pick("twitches", "shudders")] and sparks!")
var/datum/effect/effect/system/spark_spread/spark_system = new ()
spark_system.set_up(5, 0, src)
spark_system.attach(src)
spark_system.start()
spawn(10)
qdel(spark_system)
spark(src, 5)
else if (E.is_broken() || !E.is_usable())
stance_damage += 1
else if (E.is_dislocated())
@@ -160,12 +155,7 @@
emote("me", 1, "drops what they were holding, their [E.name] malfunctioning!")
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
spark_system.set_up(5, 0, src)
spark_system.attach(src)
spark_system.start()
spawn(10)
qdel(spark_system)
spark(src, 5)
//Handles chem traces
/mob/living/carbon/human/proc/handle_trace_chems()
@@ -96,9 +96,7 @@
playsound(user, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
user.visible_message("<span class='danger'>[user] shoves hard, sending [target] flying!</span>")
var/T = get_turf(user)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, T)
s.start()
spark(T, 3, alldirs)
step_away(target,user,15)
sleep(1)
step_away(target,user,15)
@@ -90,7 +90,7 @@
//var/jetpack = 0
var/obj/item/weapon/tank/jetpack/carbondioxide/synthetic/jetpack = null
var/datum/effect/effect/system/ion_trail_follow/ion_trail = null
var/datum/effect/effect/system/spark_spread/spark_system//So they can initialize sparks whenever/N
var/datum/effect_system/sparks/spark_system//So they can initialize sparks whenever/N
var/jeton = 0
var/killswitch = 0
var/killswitch_time = 60
@@ -111,9 +111,7 @@
)
/mob/living/silicon/robot/New(loc,var/unfinished = 0)
spark_system = new /datum/effect/effect/system/spark_spread()
spark_system.set_up(5, 0, src)
spark_system.attach(src)
spark_system = bind_spark(src, 5)
add_language("Robot Talk", 1)
add_language(LANGUAGE_EAL, 1)
@@ -463,7 +461,8 @@
/mob/living/silicon/robot/bullet_act(var/obj/item/projectile/Proj)
..(Proj)
if(prob(75) && Proj.damage > 0) spark_system.start()
if(prob(75) && Proj.damage > 0)
spark_system.queue()
return 2
/mob/living/silicon/robot/attackby(obj/item/weapon/W as obj, mob/user as mob)
@@ -696,7 +695,7 @@
else
if(W.force && !(istype(W, /obj/item/device/robotanalyzer) || istype(W, /obj/item/device/healthanalyzer)) )
spark_system.start()
spark_system.queue()
return ..()
/mob/living/silicon/robot/attack_hand(mob/user)
+1 -3
View File
@@ -84,9 +84,7 @@
/mob/living/silicon/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0)
if (istype(source, /obj/machinery/containment_field))
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, loc)
s.start()
spark(loc, 5, alldirs)
shock_damage *= 0.75 //take reduced damage
take_overall_damage(0, shock_damage)
@@ -48,9 +48,7 @@
..()
visible_message("<b>[src]</b> blows apart!")
new /obj/effect/decal/cleanable/blood/gibs/robot(src.loc)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
spark(src, 3, alldirs)
qdel(src)
return
@@ -85,25 +85,21 @@
//repair a bit of damage
if(prob(1))
src.visible_message("\red \icon[src] [src] shudders and shakes as some of it's damaged systems come back online.")
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
src.visible_message(span("alert", "\The [src] shudders and shakes as some of its damaged systems come back online."))
spark(src, 3, alldirs)
health += rand(25,100)
//spark for no reason
if(prob(5))
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
spark(src, 3, alldirs)
//sometimes our targetting sensors malfunction, and we attack anyone nearby
if(prob(disabled ? 0 : 1))
if(hostile_drone)
src.visible_message("\blue \icon[src] [src] retracts several targetting vanes, and dulls it's running lights.")
src.visible_message(span("notice", "\The [src] retracts several targetting vanes, and dulls its running lights."))
hostile_drone = 0
else
src.visible_message("\red \icon[src] [src] suddenly lights up, and additional targetting vanes slide into place.")
src.visible_message(span("alert", "\The [src] suddenly lights up, and additional targetting vanes slide into place."))
hostile_drone = 1
if(health / maxHealth > 0.9)
@@ -124,20 +120,19 @@
exploding = 0
if(!disabled)
if(prob(50))
src.visible_message("\blue \icon[src] [src] suddenly shuts down!")
src.visible_message(span("notice", "\The [src] suddenly shuts down!"))
else
src.visible_message("\blue \icon[src] [src] suddenly lies still and quiet.")
src.visible_message(span("notice", "\The [src] suddenly lies still and quiet."))
disabled = rand(150, 600)
walk(src,0)
if(exploding && prob(20))
if(prob(50))
src.visible_message("\red \icon[src] [src] begins to spark and shake violenty!")
src.visible_message(span("alert", "\The [src] begins to spark and shake violenty!"))
else
src.visible_message("\red \icon[src] [src] sparks and shakes like it's about to explode!")
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
src.visible_message(span("alert", "\The [src] sparks and shakes like it's about to explode!"))
spark(src, 3, alldirs)
if(!exploding && !disabled && prob(explode_chance))
exploding = 1
@@ -164,9 +159,7 @@
/mob/living/simple_animal/hostile/retaliate/malf_drone/Destroy()
//some random debris left behind
if(has_loot)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
spark(src, 3, alldirs)
var/obj/O
//shards
@@ -163,7 +163,5 @@
..(null,"is smashed into pieces!")
var/T = get_turf(src)
new /obj/effect/gibspawner/robot(T)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, T)
s.start()
spark(T, 3, alldirs)
qdel(src)
@@ -19,12 +19,10 @@
if(!computer)
return
computer.visible_message("<span class='notice'>\The [computer]'s screen brightly flashes and loud electrical buzzing is heard.</span>")
computer.visible_message("<span class='notice'>\The [computer]'s screen brightly flashes and emits a loud electrical buzzing.</span>")
computer.enabled = 0
computer.update_icon()
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(10, 1, computer.loc)
s.start()
spark(computer.loc, 10, alldirs)
if(computer.hard_drive)
qdel(computer.hard_drive)
+1 -6
View File
@@ -1050,12 +1050,7 @@ Note that amputating the affected organ does in fact remove the infection from t
"<span class='danger'>Your [src.name] explodes!</span>",\
"<span class='danger'>You hear an explosion!</span>")
explosion(get_turf(owner),-1,-1,2,3)
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
spark_system.set_up(5, 0, victim)
spark_system.attach(owner)
spark_system.start()
spawn(10)
qdel(spark_system)
spark(victim, 5)
qdel(src)
/obj/item/organ/external/proc/disfigure(var/type = "brute")
+9 -15
View File
@@ -119,6 +119,8 @@
var/global/list/status_overlays_lighting
var/global/list/status_overlays_environ
var/datum/effect_system/sparks/spark_system
/obj/machinery/power/apc/updateDialog()
if (stat & (BROKEN|MAINT))
return
@@ -176,6 +178,8 @@
stat |= MAINT
src.update_icon()
spark_system = bind_spark(src, 5, alldirs)
/obj/machinery/power/apc/Destroy()
src.update()
area.apc = null
@@ -560,9 +564,7 @@
if (C.amount >= 10 && !terminal && opened && has_electronics != 2)
var/obj/structure/cable/N = T.get_cable_node()
if (prob(50) && electrocute_mob(usr, N, N))
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
spark(src, 5, alldirs)
if(user.stunned)
return
C.use(10)
@@ -582,9 +584,7 @@
if(do_after(user, 50))
if(terminal && opened && has_electronics!=2)
if (prob(50) && electrocute_mob(usr, terminal.powernet, terminal))
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
spark_system.queue()
if(usr.stunned)
return
new /obj/item/stack/cable_coil(loc,10)
@@ -731,9 +731,7 @@
if(isipc(H) && H.a_intent == I_GRAB)
if(emagged || stat & BROKEN)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
spark_system.queue()
H << "<span class='danger'>The APC power currents surge eratically, damaging your chassis!</span>"
H.adjustFireLoss(10, 0)
else if(src.cell && src.cell.charge > 0)
@@ -752,9 +750,7 @@
if (H.nutrition > H.max_nutrition)
H.nutrition = H.max_nutrition
if (prob(0.5))
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
spark_system.queue()
H << "<span class='danger'>The APC power currents surge eratically, damaging your chassis!</span>"
H.adjustFireLoss(10, 0)
@@ -1025,9 +1021,7 @@
smoke.set_up(3, 0, src.loc)
smoke.attach(src)
smoke.start()
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
spark_system.queue()
visible_message("<span class='danger'>The [src.name] suddenly lets out a blast of smoke and some sparks!</span>", \
"<span class='danger'>You hear sizzling electronics.</span>")
+1 -3
View File
@@ -196,9 +196,7 @@ var/list/possible_cable_coil_colours = list(
if(!prob(prb))
return 0
if (electrocute_mob(user, powernet, src, siemens_coeff))
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
spark(src, 5, alldirs)
if(usr.stunned)
return 1
return 0
+7 -3
View File
@@ -27,6 +27,12 @@
var/_wifi_id
var/datum/wifi/receiver/button/emitter/wifi_receiver
var/datum/effect_system/sparks/spark_system
/obj/machinery/power/emitter/New()
..()
spark_system = bind_spark(src, 5, alldirs)
/obj/machinery/power/emitter/verb/rotate()
set name = "Rotate"
set category = "Object"
@@ -135,9 +141,7 @@
playsound(src.loc, 'sound/weapons/emitter.ogg', 25, 1)
if(prob(35))
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
spark_system.queue()
var/obj/item/projectile/beam/emitter/A = new /obj/item/projectile/beam/emitter( src.loc )
A.damage = round(power_per_shot/EMITTER_DAMAGE_POWER_TRANSFER)
+6 -6
View File
@@ -49,6 +49,8 @@
var/building_terminal = 0 //Suggestions about how to avoid clickspam building several terminals accepted!
var/obj/machinery/power/terminal/terminal = null
var/should_be_mapped = 0 // If this is set to 0 it will send out warning on New()
var/datum/effect_system/sparks/big_spark
var/datum/effect_system/sparks/small_spark
/obj/machinery/power/smes/drain_power(var/drain_check, var/surge, var/amount = 0)
@@ -62,6 +64,8 @@
/obj/machinery/power/smes/New()
..()
big_spark = bind_spark(src, 5, alldirs)
small_spark = bind_spark(src, 3)
spawn(5)
if(!powernet)
connect_to_network()
@@ -295,9 +299,7 @@
playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1)
if(do_after(user, 50))
if (prob(50) && electrocute_mob(usr, terminal.powernet, terminal))
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
big_spark.queue()
building_terminal = 0
if(usr.stunned)
return 0
@@ -402,9 +404,7 @@
qdel(src)
return
else if(prob(15)) //Power drain
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
small_spark.queue()
if(prob(50))
emp_act(1)
else
+9 -14
View File
@@ -88,9 +88,7 @@
// This also causes the SMES to quickly discharge, and has small chance of damaging output APCs.
/obj/machinery/power/smes/buildable/process()
if(!grounding && (Percentage() > 5))
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
spark(src, 5, alldirs)
charge -= (output_level_max * SMESRATE)
if(prob(1)) // Small chance of overload occuring since grounding is disabled.
apcs_overload(5,10,20)
@@ -176,7 +174,6 @@
// Preparations
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
// Check if user has protected gloves.
var/user_protected = 0
if(h_user.gloves)
@@ -191,8 +188,7 @@
if (0 to 15)
// Small overcharge
// Sparks, Weak shock
s.set_up(2, 1, src)
s.start()
small_spark.queue() // This belongs to the parent SMES type.
if (user_protected && prob(80))
h_user << "Small electrical arc almost burns your hand. Luckily you had your gloves on!"
else
@@ -204,8 +200,7 @@
if (16 to 35)
// Medium overcharge
// Sparks, Medium shock, Weak EMP
s.set_up(4,1,src)
s.start()
big_spark.queue()
if (user_protected && prob(25))
h_user << "Medium electrical arc sparks and almost burns your hand. Luckily you had your gloves on!"
else
@@ -220,8 +215,8 @@
if (36 to 60)
// Strong overcharge
// Sparks, Strong shock, Strong EMP, 10% light overload. 1% APC failure
s.set_up(7,1,src)
s.start()
big_spark.queue()
big_spark.queue()
if (user_protected)
h_user << "Strong electrical arc sparks between you and [src], ignoring your gloves and burning your hand!"
h_user.adjustFireLoss(rand(25,60))
@@ -240,9 +235,9 @@
if (61 to INFINITY)
// Massive overcharge
// Sparks, Near - instantkill shock, Strong EMP, 25% light overload, 5% APC failure. 50% of SMES explosion. This is bad.
s.set_up(10,1,src)
s.start()
h_user << "Massive electrical arc sparks between you and [src]. Last thing you can think about is \"Oh shit...\""
big_spark.queue()
big_spark.queue()
h_user << "A massive electrical arc sparks between you and \the [src]. The last thing that goes through your mind is \"Oh shit...\"."
// Remember, we have few gigajoules of electricity here.. Turn them into crispy toast.
h_user.adjustFireLoss(rand(150,195))
h_user.Paralyse(25)
@@ -402,4 +397,4 @@
// Description: Sets output setting on this SMES. Trims it if limits are exceeded.
/obj/machinery/power/smes/buildable/proc/set_output(var/new_output = 0)
output_level = between(0, new_output, output_level_max)
update_icon()
update_icon()
@@ -146,9 +146,7 @@
/obj/item/weapon/gun/energy/mousegun/handle_post_fire(mob/user, atom/target, var/pointblank=0, var/reflex=0, var/playemote = 1)
var/T = get_turf(user)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, T)
s.start()
spark(T, 3, alldirs)
failcheck()
..()
+2 -4
View File
@@ -192,9 +192,7 @@
if (M.mob_size <= 2 && (M.find_type() & TYPE_ORGANIC))
M.visible_message("<span class='danger'>[M] bursts like a balloon!</span>")
M.gib()
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, M)
s.start()
spark(M, 3, alldirs)
else if (iscarbon(M) && M.contents.len)
for (var/obj/item/weapon/holder/H in M.contents)
if (!H.contained)
@@ -260,4 +258,4 @@
if(ismob(A))
var/mob/living/M = A
M.apply_effect(1, INCINERATE, 0)
..()
..()
+1 -3
View File
@@ -605,9 +605,7 @@
/datum/chemical_reaction/flash_powder/on_reaction(var/datum/reagents/holder, var/created_volume)
var/location = get_turf(holder.my_atom)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(2, 1, location)
s.start()
spark(location, 2, alldirs)
for(var/mob/living/carbon/M in viewers(world.view, location))
switch(get_dist(M, location))
if(0 to 3)
+1 -1
View File
@@ -78,7 +78,7 @@
if (istype(target, /mob/living/silicon/robot))
var/mob/living/silicon/robot/R = target
R.spark_system.start()
R.spark_system.queue()
return 1
@@ -6,19 +6,15 @@
/datum/artifact_effect/teleport/DoEffectTouch(var/mob/user)
var/weakness = GetAnomalySusceptibility(user)
if(prob(100 * weakness))
user << "\red You are suddenly zapped away elsewhere!"
user << span("alert", "You are suddenly zapped away elsewhere!")
if (user.buckled)
user.buckled.unbuckle_mob()
var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread()
sparks.set_up(3, 0, get_turf(user))
sparks.start()
spark(get_turf(user), 3)
user.Move(pick(trange(50, get_turf(holder))))
sparks = new /datum/effect/effect/system/spark_spread()
sparks.set_up(3, 0, user.loc)
sparks.start()
spark(get_turf(user), 3)
/datum/artifact_effect/teleport/DoEffectAura()
if(holder)
@@ -26,18 +22,15 @@
for (var/mob/living/M in range(src.effectrange,T))
var/weakness = GetAnomalySusceptibility(M)
if(prob(100 * weakness))
M << "\red You are displaced by a strange force!"
M << span("alert", "You are displaced by a strange force!")
if(M.buckled)
M.buckled.unbuckle_mob()
var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread()
sparks.set_up(3, 0, get_turf(M))
sparks.start()
spark(get_turf(M), 3)
M.Move(pick(trange(50, T)))
sparks = new /datum/effect/effect/system/spark_spread()
sparks.set_up(3, 0, M.loc)
sparks.start()
spark(get_turf(M), 3)
/datum/artifact_effect/teleport/DoEffectPulse()
if(holder)
@@ -45,15 +38,12 @@
for (var/mob/living/M in range(src.effectrange, T))
var/weakness = GetAnomalySusceptibility(M)
if(prob(100 * weakness))
M << "\red You are displaced by a strange force!"
M << span("alert", "You are displaced by a strange force!")
if(M.buckled)
M.buckled.unbuckle_mob()
var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread()
sparks.set_up(3, 0, get_turf(M))
sparks.start()
spark(get_turf(M), 3)
M.Move(pick(trange(50, T)))
sparks = new /datum/effect/effect/system/spark_spread()
sparks.set_up(3, 0, M.loc)
sparks.start()
spark(get_turf(M), 3)
+3 -5
View File
@@ -33,9 +33,7 @@
user << "Controls are now [src.locked ? "locked." : "unlocked."]"
. = 1
updateDialog()
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
spark(src, 5, alldirs)
/obj/machinery/shield_capacitor/attackby(obj/item/W, mob/user)
@@ -46,10 +44,10 @@
user << "Controls are now [src.locked ? "locked." : "unlocked."]"
updateDialog()
else
user << "\red Access denied."
user << span("alert", "Access denied.")
else if(istype(W, /obj/item/weapon/wrench))
src.anchored = !src.anchored
src.visible_message("\blue \icon[src] [src] has been [anchored ? "bolted to the floor" : "unbolted from the floor"] by [user].")
src.visible_message(span("notice", "\The [src] has been [anchored ? "bolted to the floor" : "unbolted from the floor"] by \the [user]."))
if(anchored)
spawn(0)
+4 -5
View File
@@ -51,9 +51,8 @@
user << "Controls are now [src.locked ? "locked." : "unlocked."]"
. = 1
updateDialog()
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
spark(src, 5, alldirs)
/obj/machinery/shield_gen/attackby(obj/item/W, mob/user)
if(istype(W, /obj/item/weapon/card/id))
@@ -63,10 +62,10 @@
user << "Controls are now [src.locked ? "locked." : "unlocked."]"
updateDialog()
else
user << "\red Access denied."
user << span("alert", "Access denied.")
else if(istype(W, /obj/item/weapon/wrench))
src.anchored = !src.anchored
src.visible_message("\blue \icon[src] [src] has been [anchored?"bolted to the floor":"unbolted from the floor"] by [user].")
src.visible_message(span("notice", "\The [src] has been [anchored ? "bolted to the floor":"unbolted from the floor"] by \the [user]."))
if(active)
toggle()
+1 -3
View File
@@ -174,9 +174,7 @@ var/list/spells = typesof(/spell) //needed for the badmin verb for now
if(istype(target,/mob/living) && message)
target << text("[message]")
if(sparks_spread)
var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread()
sparks.set_up(sparks_amt, 0, location) //no idea what the 0 is
sparks.start()
spark(location, sparks_amt)
if(smoke_spread)
if(smoke_spread == 1)
var/datum/effect/effect/system/smoke_spread/smoke = new /datum/effect/effect/system/smoke_spread()
+1 -3
View File
@@ -114,9 +114,7 @@
return
if(istype(W, /obj/item/weapon/melee/energy/blade))
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
spark_system.set_up(5, 0, src.loc)
spark_system.start()
W:spark_system.queue()
playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1)
playsound(src.loc, "sparks", 50, 1)
user.visible_message("<span class='danger'>\The [src] was sliced apart by [user]!</span>")
+1 -3
View File
@@ -151,7 +151,5 @@
/obj/item/weapon/rcs/attackby(var/obj/item/O, var/mob/user)
if (istype(O, /obj/item/weapon/card/emag) && !emagged)
emagged = 1
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
spark(src, 5, alldirs)
user << "<span class='caution'>You emag the RCS. Click on it to toggle between modes.</span>"
+3 -10
View File
@@ -137,9 +137,7 @@
/obj/machinery/computer/telescience/proc/sparks()
if(telepad)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, get_turf(telepad))
s.start()
spark(telepad, 5, alldirs)
else
return
@@ -195,9 +193,7 @@
// use a lot of power
use_power(power * 10)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, get_turf(telepad))
s.start()
spark(telepad, 5, alldirs)
temp_msg = "Teleport successful.<BR>"
if(teles_left < 10)
@@ -205,10 +201,7 @@
else
temp_msg += "Data printed below."
var/sparks = get_turf(target)
var/datum/effect/effect/system/spark_spread/y = new /datum/effect/effect/system/spark_spread
y.set_up(5, 1, sparks)
y.start()
spark(telepad, 5, alldirs)
var/turf/source = target
var/turf/dest = get_turf(telepad)
+1 -2
View File
@@ -118,8 +118,7 @@
..()
if (prob(20))
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
spark(src, 5, alldirs)
healthcheck()