Repaths obj/effect/effect, datum/effect/effect [MDB_IGNORE] (#8312)

* Repaths obj/effect/effect, datum/effect/effect

* linter fixes

* No new

Co-authored-by: Atermonera <forslandm@gmail.com>
This commit is contained in:
Atermonera
2022-01-16 00:14:39 -08:00
committed by GitHub
parent cff34e64a1
commit 0232be9531
178 changed files with 1045 additions and 1099 deletions

View File

@@ -79,7 +79,7 @@
/obj/machinery/atmospherics/pipe/simple/proc/burst()
src.visible_message("<span class='danger'>\The [src] bursts!</span>");
playsound(src, 'sound/effects/bang.ogg', 25, 1)
var/datum/effect/effect/system/smoke_spread/smoke = new
var/datum/effect_system/smoke_spread/smoke = new
smoke.set_up(1,0, src.loc, 0)
smoke.start()
qdel(src)

View File

@@ -7,8 +7,8 @@
var/atom/movable/teleatom //atom to teleport
var/atom/destination //destination to teleport to
var/precision = 0 //teleport precision
var/datum/effect/effect/system/effectin //effect to show right before teleportation
var/datum/effect/effect/system/effectout //effect to show right after teleportation
var/datum/effect_system/effectin //effect to show right before teleportation
var/datum/effect_system/effectout //effect to show right after teleportation
var/soundin //soundfile to play before teleportation
var/soundout //soundfile to play after teleportation
var/force_teleport = 1 //if false, teleport will use Move() proc (dense objects will prevent teleportation)
@@ -58,7 +58,7 @@
//custom effects must be properly set up first for instant-type teleports
//optional
/datum/teleport/proc/setEffects(datum/effect/effect/system/aeffectin=null,datum/effect/effect/system/aeffectout=null)
/datum/teleport/proc/setEffects(datum/effect_system/aeffectin=null,datum/effect_system/aeffectout=null)
effectin = istype(aeffectin) ? aeffectin : null
effectout = istype(aeffectout) ? aeffectout : null
return 1
@@ -78,7 +78,7 @@
/datum/teleport/proc/teleportChecks()
return 1
/datum/teleport/proc/playSpecials(atom/location,datum/effect/effect/system/effect,sound)
/datum/teleport/proc/playSpecials(atom/location,datum/effect_system/effect,sound)
if(location)
if(effect)
spawn(-1)
@@ -136,9 +136,9 @@
return
/datum/teleport/instant/science/setEffects(datum/effect/effect/system/aeffectin,datum/effect/effect/system/aeffectout)
/datum/teleport/instant/science/setEffects(datum/effect_system/aeffectin,datum/effect_system/aeffectout)
if(!aeffectin || !aeffectout)
var/datum/effect/effect/system/spark_spread/aeffect = new
var/datum/effect_system/spark_spread/aeffect = new
aeffect.set_up(5, 1, teleatom)
effectin = effectin || aeffect
effectout = effectout || aeffect

View File

@@ -86,7 +86,7 @@
break
if(siemens)
var/T = get_turf(src)
new /obj/effect/effect/sparks(T)
new /obj/effect/vfx/sparks(T)
held_item.update_icon()
i--
sleep(1 SECOND)
@@ -120,7 +120,7 @@
"<span class='warning'>We store a charge of electricity in our hand.</span>",
"<span class='italics'>You hear crackling electricity!</span>")
var/T = get_turf(src)
new /obj/effect/effect/sparks(T)
new /obj/effect/vfx/sparks(T)
/obj/item/weapon/electric_hand/dropped(mob/user)
spawn(1)
@@ -199,7 +199,7 @@
// break
if(siemens)
var/Turf = get_turf(src)
new /obj/effect/effect/sparks(Turf)
new /obj/effect/vfx/sparks(Turf)
T.update_icon()
i--
sleep(1 SECOND)

View File

@@ -46,7 +46,7 @@
// now make it obvious that we're not human (or whatever xeno race they are impersonating)
playsound(src, 'sound/effects/blobattack.ogg', 30, 1)
var/T = get_turf(src)
new /obj/effect/gibspawner/human(T)
new /obj/effect/spawner/gibs/human(T)
visible_message("<span class='warning'>With a sickening squish, [src] reforms their whole body, casting their old parts on the floor!</span>",
"<span class='notice'>We reform our body. We are whole once more.</span>",
"<span class='italics'>You hear organic matter ripping and tearing!</span>")

View File

@@ -42,7 +42,7 @@
if(!((user == loc || (in_range(src, user) && istype(src.loc, /turf)))))
return
var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread()
var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread()
sparks.set_up(5, 0, user.loc)
sparks.attach(user)
sparks.start()

View File

@@ -21,12 +21,12 @@
action_button_name = "Toggle Shield Projector"
var/active = 0
var/damage_to_energy_multiplier = 50.0 //Determines how much energy to charge for blocking, e.g. 20 damage attack = 750 energy cost
var/datum/effect/effect/system/spark_spread/spark_system = null
var/datum/effect_system/spark_spread/spark_system = null
var/block_percentage = 75
/obj/item/clothing/suit/armor/shield/Initialize()
. = ..()
spark_system = new /datum/effect/effect/system/spark_spread()
spark_system = new /datum/effect_system/spark_spread()
spark_system.set_up(5, 0, src)
/obj/item/clothing/suit/armor/shield/Destroy()

View File

@@ -106,7 +106,7 @@
rng = rand(0,1)
switch(rng)
if(0)
var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread()
var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread()
sparks.set_up(5, 0, src)
sparks.attach(loc)
sparks.start()
@@ -171,7 +171,7 @@
rng = rand(0,1)
switch(rng)
if(0)
var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread()
var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread()
sparks.set_up(5, 0, src)
sparks.attach(loc)
sparks.start()

View File

@@ -32,8 +32,8 @@
if(istype(hit_atom, /obj/item))
var/obj/item/I = hit_atom
var/datum/effect/effect/system/spark_spread/s1 = new /datum/effect/effect/system/spark_spread
var/datum/effect/effect/system/spark_spread/s2 = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s1 = new /datum/effect_system/spark_spread
var/datum/effect_system/spark_spread/s2 = new /datum/effect_system/spark_spread
s1.set_up(2, 1, user)
s2.set_up(2, 1, I)
s1.start()
@@ -50,8 +50,8 @@
else if(istype(hit_atom, /mob/living))
var/mob/living/L = hit_atom
to_chat(L, "<span class='danger'>You are teleported towards \the [user].</span>")
var/datum/effect/effect/system/spark_spread/s1 = new /datum/effect/effect/system/spark_spread
var/datum/effect/effect/system/spark_spread/s2 = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s1 = new /datum/effect_system/spark_spread
var/datum/effect_system/spark_spread/s2 = new /datum/effect_system/spark_spread
s1.set_up(2, 1, user)
s2.set_up(2, 1, L)
s1.start()

View File

@@ -49,8 +49,8 @@
AM.forceMove(destination)
AM.visible_message("<span class='notice'>\The [AM] vanishes!</span>")
to_chat(AM, "<span class='notice'>You suddenly appear somewhere else!</span>")
new /obj/effect/effect/sparks(destination)
new /obj/effect/effect/sparks(starting)
new /obj/effect/vfx/sparks(destination)
new /obj/effect/vfx/sparks(starting)
return
/obj/item/weapon/spell/blink/on_ranged_cast(atom/hit_atom, mob/user)

View File

@@ -25,7 +25,7 @@
spawn(1)
var/turf/desired_turf = get_step(T,direction)
if(desired_turf) // This shouldn't fail but...
var/obj/effect/effect/water/W = new /obj/effect/effect/water(get_turf(T))
var/obj/effect/vfx/water/W = new /obj/effect/vfx/water(get_turf(T))
W.create_reagents(60)
W.reagents.add_reagent(id = "water", amount = 60, data = null, safety = 0)
W.set_color()

View File

@@ -39,7 +39,7 @@
visible_message("<span class='info'>[user] rests a hand on \the [hit_atom].</span>")
busy = 1
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread()
spark_system.set_up(5, 0, our_turf)
while(i)

View File

@@ -14,12 +14,12 @@
toggled = 1
var/reflecting = 0
var/damage_to_energy_multiplier = 60.0 //Determines how much energy to charge for blocking, e.g. 20 damage attack = 1200 energy cost
var/datum/effect/effect/system/spark_spread/spark_system = null
var/datum/effect_system/spark_spread/spark_system = null
/obj/item/weapon/spell/reflect/Initialize()
. = ..()
set_light(3, 2, l_color = "#006AFF")
spark_system = new /datum/effect/effect/system/spark_spread()
spark_system = new /datum/effect_system/spark_spread()
spark_system.set_up(5, 0, src)
to_chat(owner, "<span class='notice'>Your shield will expire in 5 seconds!</span>")
QDEL_IN(src, 5 SECONDS)

View File

@@ -16,12 +16,12 @@
aspect = ASPECT_FORCE
toggled = 1
var/damage_to_energy_multiplier = 30.0 //Determines how much energy to charge for blocking, e.g. 20 damage attack = 600 energy cost
var/datum/effect/effect/system/spark_spread/spark_system = null
var/datum/effect_system/spark_spread/spark_system = null
/obj/item/weapon/spell/shield/Initialize()
. = ..()
set_light(3, 2, l_color = "#006AFF")
spark_system = new /datum/effect/effect/system/spark_spread()
spark_system = new /datum/effect_system/spark_spread()
spark_system.set_up(5, 0, src)
/obj/item/weapon/spell/shield/Destroy()

View File

@@ -12,11 +12,11 @@
icon_state = "warp_strike"
cast_methods = CAST_RANGED
aspect = ASPECT_TELE
var/datum/effect/effect/system/spark_spread/sparks
var/datum/effect_system/spark_spread/sparks
/obj/item/weapon/spell/warp_strike/Initialize()
. = ..()
sparks = new /datum/effect/effect/system/spark_spread()
sparks = new /datum/effect_system/spark_spread()
sparks.set_up(5, 0, src)
sparks.attach(loc)

View File

@@ -100,7 +100,7 @@
if(cooldown_on || disabled)
return
else
new /obj/effect/effect/foam(src.loc)
new /obj/effect/vfx/foam(src.loc)
uses--
cooldown_on = 1
cooldown_time = world.timeofday + 100

View File

@@ -278,7 +278,7 @@
update_coverage()
//sparks
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread()
spark_system.set_up(5, 0, loc)
spark_system.start()
playsound(src, "sparks", 50, 1)

View File

@@ -10,7 +10,7 @@
//Server linked to.
var/obj/machinery/message_server/linkedServer = null
//Sparks effect - For emag
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread
//Messages - Saves me time if I want to change something.
var/noserver = list("text" = "ALERT: No server detected.", "style" = "alert")
var/incorrectkey = list("text" = "ALERT: Incorrect decryption key!", "style" = "warning")

View File

@@ -41,7 +41,7 @@ Deployable items
to_chat(user, "Barrier lock toggled off.")
return
else
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(2, 1, src)
s.start()
visible_message("<span class='warning'>BZZzZZzZZzZT</span>")
@@ -119,7 +119,7 @@ Deployable items
/* var/obj/item/stack/rods/ =*/
new /obj/item/stack/rods(Tsec)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
@@ -133,7 +133,7 @@ Deployable items
LAZYCLEARLIST(req_access)
LAZYCLEARLIST(req_one_access)
to_chat(user, "You break the ID authentication lock on \the [src].")
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(2, 1, src)
s.start()
visible_message("<span class='warning'>BZZzZZzZZzZT</span>")
@@ -141,7 +141,7 @@ Deployable items
else if(emagged == 1)
emagged = 2
to_chat(user, "You short out the anchoring mechanism on \the [src].")
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(2, 1, src)
s.start()
visible_message("<span class='warning'>BZZzZZzZZzZT</span>")

View File

@@ -907,7 +907,7 @@ About the new airlock wires panel:
if (istype(mover, /obj/item))
var/obj/item/i = mover
if (i.matter && (DEFAULT_WALL_MATERIAL in i.matter) && i.matter[DEFAULT_WALL_MATERIAL] > 0)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(5, 1, src)
s.start()
return ..()
@@ -1160,7 +1160,7 @@ About the new airlock wires panel:
if ((O.client && !( O.blinded )))
O.show_message("[src.name]'s control panel bursts open, sparks spewing out!")
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(5, 1, src)
s.start()

View File

@@ -364,7 +364,7 @@
take_damage(300)
if(3.0)
if(prob(80))
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(2, 1, src)
s.start()
else

View File

@@ -207,7 +207,7 @@
//Emags and ninja swords? You may pass.
if (istype(I, /obj/item/weapon/melee/energy/blade))
if(emag_act(10, user))
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread()
spark_system.set_up(5, 0, src.loc)
spark_system.start()
playsound(src, "sparks", 50, 1)

View File

@@ -97,7 +97,7 @@
return
flick("[base_state]-spark", src)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(2, 1, src)
s.start()
last_spark = world.time

View File

@@ -208,7 +208,7 @@
explosion(src.loc, 0, 0, 1, rand(1,2), 1)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()

View File

@@ -281,7 +281,7 @@ Class Procs:
return 0
if(!prob(prb))
return 0
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(5, 1, src)
s.start()
if(electrocute_mob(user, get_area(src), src, 0.7))

View File

@@ -86,7 +86,7 @@
var/shot_sound //what sound should play when the turret fires
var/lethal_shot_sound //what sound should play when the emagged turret fires
var/datum/effect/effect/system/spark_spread/spark_system //the spark system, used for generating... sparks?
var/datum/effect_system/spark_spread/spark_system //the spark system, used for generating... sparks?
var/wrenching = FALSE
var/last_target //last target fired at, prevents turrets from erratically firing at all valid targets in range
@@ -302,7 +302,7 @@
/obj/machinery/porta_turret/Initialize()
//Sets up a spark system
spark_system = new /datum/effect/effect/system/spark_spread
spark_system = new /datum/effect_system/spark_spread
spark_system.set_up(5, 0, src)
spark_system.attach(src)

View File

@@ -274,7 +274,7 @@
com.one_time_use = 0
com.teleport_control.locked = null
else
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(5, 1, src)
s.start()
accurate = 1

View File

@@ -12,7 +12,7 @@
var/mob/living/carbon/human/occupant = null
var/mob/living/carbon/human/avatar = null
var/datum/mind/vr_mind = null
var/datum/effect/effect/system/smoke_spread/bad/smoke
var/datum/effect_system/smoke_spread/bad/smoke
var/eject_dead = TRUE

View File

@@ -4,7 +4,7 @@
name = "Delete me, nerd!!"
desc = "The base type of fightercraft. Don't spawn this one!"
var/datum/effect/effect/system/ion_trail_follow/ion_trail
var/datum/effect_system/ion_trail_follow/ion_trail
var/stabilization_enabled = TRUE //If our anti-space-drift is on
var/ground_capable = FALSE //If we can fly over normal turfs and not just space
@@ -47,7 +47,7 @@
/obj/mecha/combat/fighter/Initialize()
. = ..()
ion_trail = new /datum/effect/effect/system/ion_trail_follow()
ion_trail = new /datum/effect_system/ion_trail_follow()
ion_trail.set_up(src)
ion_trail.stop()

View File

@@ -44,7 +44,7 @@
for(var/a = 1 to 5)
spawn(0)
var/obj/effect/effect/water/W = new /obj/effect/effect/water(get_turf(chassis))
var/obj/effect/vfx/water/W = new /obj/effect/vfx/water(get_turf(chassis))
var/turf/my_target
if(a == 1)
my_target = T

View File

@@ -5,7 +5,7 @@
equip_cooldown = 5
energy_drain = 50
var/wait = 0
var/datum/effect/effect/system/ion_trail_follow/ion_trail
var/datum/effect_system/ion_trail_follow/ion_trail
/obj/item/mecha_parts/mecha_equipment/tool/jetpack/can_attach(obj/mecha/M as obj)

View File

@@ -68,7 +68,7 @@
var/maint_access = 1
var/dna //Dna-locking the mech
var/list/proc_res = list() //Stores proc owners, like proc_res["functionname"] = owner reference
var/datum/effect/effect/system/spark_spread/spark_system = new
var/datum/effect_system/spark_spread/spark_system = new
var/lights = 0
var/lights_power = 6
var/force = 0
@@ -179,7 +179,7 @@
var/smoke_reserve = 5 //How many shots you have. Might make a reload later on. MIGHT.
var/smoke_ready = 1 //This is a check for the whether or not the cooldown is ongoing.
var/smoke_cooldown = 100 //How long you have between uses.
var/datum/effect/effect/system/smoke_spread/smoke_system = new
var/datum/effect_system/smoke_spread/smoke_system = new
var/cloak_possible = FALSE // Can this exosuit innately cloak?

View File

@@ -334,7 +334,7 @@
smoke_reserve-- //Remove ammo
src.occupant_message("<font color='red'>Smoke fired. [smoke_reserve] usages left.</font>")
var/datum/effect/effect/system/smoke_spread/smoke = new /datum/effect/effect/system/smoke_spread()
var/datum/effect_system/smoke_spread/smoke = new /datum/effect_system/smoke_spread()
smoke.attach(src)
smoke.set_up(10, 0, usr.loc)
smoke.start()

View File

@@ -14,7 +14,7 @@
wreckage = /obj/effect/decal/mecha_wreckage/hoverpod
cargo_capacity = 5
max_equip = 3
var/datum/effect/effect/system/ion_trail_follow/ion_trail
var/datum/effect_system/ion_trail_follow/ion_trail
var/stabilization_enabled = 1
stomp_sound = 'sound/machines/hiss.ogg'
@@ -28,7 +28,7 @@
/obj/mecha/working/hoverpod/Initialize()
. = ..()
ion_trail = new /datum/effect/effect/system/ion_trail_follow()
ion_trail = new /datum/effect_system/ion_trail_follow()
ion_trail.set_up(src)
/obj/mecha/working/hoverpod/moved_inside(var/mob/living/carbon/human/H as mob)

View File

@@ -1,26 +1,26 @@
/////////////////////////////////////////////
// Chem smoke
/////////////////////////////////////////////
/obj/effect/effect/smoke/chem
/obj/effect/vfx/smoke/chem
icon = 'icons/effects/chemsmoke.dmi'
opacity = TRUE
time_to_live = 300
pass_flags = PASSTABLE | PASSGRILLE | PASSGLASS //PASSGLASS is fine here, it's just so the visual effect can "flow" around glass
/obj/effect/effect/smoke/chem/Initialize()
/obj/effect/vfx/smoke/chem/Initialize()
. = ..()
create_reagents(500)
return
/obj/effect/effect/smoke/chem/Destroy()
/obj/effect/vfx/smoke/chem/Destroy()
walk(src, 0) // Because we might have called walk_to, we must stop the walk loop or BYOND keeps an internal reference to us forever.
return ..()
/obj/effect/effect/smoke/chem/transparent
/obj/effect/vfx/smoke/chem/transparent
opacity = FALSE
/datum/effect/effect/system/smoke_spread/chem
smoke_type = /obj/effect/effect/smoke/chem
/datum/effect_system/smoke_spread/chem
smoke_type = /obj/effect/vfx/smoke/chem
var/obj/chemholder
var/range
var/list/targetTurfs
@@ -28,21 +28,21 @@
var/density
var/show_log = 1
/datum/effect/effect/system/smoke_spread/chem/spores
/datum/effect_system/smoke_spread/chem/spores
show_log = 0
var/datum/seed/seed
/datum/effect/effect/system/smoke_spread/chem/spores/New(_seed)
/datum/effect_system/smoke_spread/chem/spores/New(_seed)
seed = _seed
if(!istype(seed))
CRASH("Invalid seed datum passed! [seed] ([seed?.type])")
..()
/datum/effect/effect/system/smoke_spread/chem/blob
/datum/effect_system/smoke_spread/chem/blob
show_log = 0
smoke_type = /obj/effect/effect/smoke/chem/transparent
smoke_type = /obj/effect/vfx/smoke/chem/transparent
/datum/effect/effect/system/smoke_spread/chem/New()
/datum/effect_system/smoke_spread/chem/New()
..()
chemholder = new/obj()
chemholder.create_reagents(500)
@@ -51,7 +51,7 @@
// Calculates the max range smoke can travel, then gets all turfs in that view range.
// Culls the selected turfs to a (roughly) circle shape, then calls smokeFlow() to make
// sure the smoke can actually path to the turfs. This culls any turfs it can't reach.
/datum/effect/effect/system/smoke_spread/chem/set_up(var/datum/reagents/carry = null, n = 10, c = 0, loca, direct)
/datum/effect_system/smoke_spread/chem/set_up(var/datum/reagents/carry = null, n = 10, c = 0, loca, direct)
range = n * 0.3
cardinals = c
carry.trans_to_obj(chemholder, carry.total_volume, copy = 1)
@@ -102,7 +102,7 @@
// Applies reagents to walls that affect walls (only thermite and plant-b-gone at the moment).
// Also calculates target locations to spawn the visual smoke effect on, so the whole area
// is covered fairly evenly.
/datum/effect/effect/system/smoke_spread/chem/start()
/datum/effect_system/smoke_spread/chem/start()
if(!location)
return
@@ -112,7 +112,7 @@
for(var/turf/T in targetTurfs)
chemholder.reagents.touch_turf(T)
for(var/atom/A in T.contents)
if(istype(A, /obj/effect/effect/smoke/chem) || istype(A, /mob))
if(istype(A, /obj/effect/vfx/smoke/chem) || istype(A, /mob))
continue
else if(isobj(A) && !A.simulated)
chemholder.reagents.touch_obj(A)
@@ -156,9 +156,9 @@
// Randomizes and spawns the smoke effect.
// Also handles deleting the smoke once the effect is finished.
//------------------------------------------
/datum/effect/effect/system/smoke_spread/chem/proc/spawnSmoke(var/turf/T, var/icon/I, var/dist = 1, var/obj/effect/effect/smoke/chem/passed_smoke)
/datum/effect_system/smoke_spread/chem/proc/spawnSmoke(var/turf/T, var/icon/I, var/dist = 1, var/obj/effect/vfx/smoke/chem/passed_smoke)
var/obj/effect/effect/smoke/chem/smoke
var/obj/effect/vfx/smoke/chem/smoke
if(passed_smoke)
smoke = passed_smoke
else
@@ -180,12 +180,12 @@
fadeOut(smoke)
qdel(smoke)
/datum/effect/effect/system/smoke_spread/chem/spores/spawnSmoke(var/turf/T, var/icon/I, var/dist = 1)
var/obj/effect/effect/smoke/chem/spores = new /obj/effect/effect/smoke/chem(location)
/datum/effect_system/smoke_spread/chem/spores/spawnSmoke(var/turf/T, var/icon/I, var/dist = 1)
var/obj/effect/vfx/smoke/chem/spores = new /obj/effect/vfx/smoke/chem(location)
spores.name = "cloud of [seed.seed_name] [seed.seed_noun]"
..(T, I, dist, spores)
/datum/effect/effect/system/smoke_spread/chem/proc/fadeOut(var/atom/A, var/frames = 16) // Fades out the smoke smoothly using it's alpha variable.
/datum/effect_system/smoke_spread/chem/proc/fadeOut(var/atom/A, var/frames = 16) // Fades out the smoke smoothly using it's alpha variable.
if(A.alpha == 0) //Handle already transparent case
return
if(frames == 0)
@@ -197,7 +197,7 @@
return
/datum/effect/effect/system/smoke_spread/chem/proc/smokeFlow() // Smoke pathfinder. Uses a flood fill method based on zones to quickly check what turfs the smoke (airflow) can actually reach.
/datum/effect_system/smoke_spread/chem/proc/smokeFlow() // Smoke pathfinder. Uses a flood fill method based on zones to quickly check what turfs the smoke (airflow) can actually reach.
var/list/pending = new()
var/list/complete = new()

View File

@@ -2,7 +2,7 @@
// Similar to smoke, but spreads out more
// metal foams leave behind a foamed metal wall
/obj/effect/effect/foam
/obj/effect/vfx/foam
name = "foam"
icon_state = "foam"
opacity = 0
@@ -15,7 +15,7 @@
var/expand = 1
var/metal = 0
/obj/effect/effect/foam/Initialize(var/mapload, var/ismetal = 0)
/obj/effect/vfx/foam/Initialize(var/mapload, var/ismetal = 0)
. = ..()
icon_state = "[ismetal? "m" : ""]foam"
metal = ismetal
@@ -25,14 +25,14 @@
addtimer(CALLBACK(src, .proc/pre_harden), 12 SECONDS)
addtimer(CALLBACK(src, .proc/harden), 15 SECONDS)
/obj/effect/effect/foam/proc/post_spread()
/obj/effect/vfx/foam/proc/post_spread()
process()
checkReagents()
/obj/effect/effect/foam/proc/pre_harden()
/obj/effect/vfx/foam/proc/pre_harden()
STOP_PROCESSING(SSobj, src)
/obj/effect/effect/foam/proc/harden()
/obj/effect/vfx/foam/proc/harden()
if(metal)
var/obj/structure/foamedmetal/M = new(src.loc)
M.metal = metal
@@ -40,14 +40,14 @@
flick("[icon_state]-disolve", src)
QDEL_IN(src, 5)
/obj/effect/effect/foam/proc/checkReagents() // transfer any reagents to the floor
/obj/effect/vfx/foam/proc/checkReagents() // transfer any reagents to the floor
if(!metal && reagents)
var/turf/T = get_turf(src)
reagents.touch_turf(T)
for(var/obj/O in T)
reagents.touch_obj(O)
/obj/effect/effect/foam/process()
/obj/effect/vfx/foam/process()
if(--amount < 0)
return
@@ -59,7 +59,7 @@
if(!T.Enter(src))
continue
var/obj/effect/effect/foam/F = locate() in T
var/obj/effect/vfx/foam/F = locate() in T
if(F)
continue
@@ -71,14 +71,14 @@
for(var/datum/reagent/R in reagents.reagent_list)
F.reagents.add_reagent(R.id, 1, safety = 1) //added safety check since reagents in the foam have already had a chance to react
/obj/effect/effect/foam/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) // foam disolves when heated, except metal foams
/obj/effect/vfx/foam/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) // foam disolves when heated, except metal foams
if(!metal && prob(max(0, exposed_temperature - 475)))
flick("[icon_state]-disolve", src)
spawn(5)
qdel(src)
/obj/effect/effect/foam/Crossed(var/atom/movable/AM)
/obj/effect/vfx/foam/Crossed(var/atom/movable/AM)
if(AM.is_incorporeal())
return
if(metal)
@@ -87,12 +87,12 @@
var/mob/living/M = AM
M.slip("the foam", 6)
/datum/effect/effect/system/foam_spread
/datum/effect_system/foam_spread
var/amount = 5 // the size of the foam spread.
var/list/carried_reagents // the IDs of reagents present when the foam was mixed
var/metal = 0 // 0 = foam, 1 = metalfoam, 2 = ironfoam
/datum/effect/effect/system/foam_spread/set_up(amt=5, loca, var/datum/reagents/carry = null, var/metalfoam = 0)
/datum/effect_system/foam_spread/set_up(amt=5, loca, var/datum/reagents/carry = null, var/metalfoam = 0)
amount = round(sqrt(amt / 3), 1)
if(istype(loca, /turf/))
location = loca
@@ -108,14 +108,14 @@
for(var/datum/reagent/R in carry.reagent_list)
carried_reagents += R.id
/datum/effect/effect/system/foam_spread/start()
/datum/effect_system/foam_spread/start()
spawn(0)
var/obj/effect/effect/foam/F = locate() in location
var/obj/effect/vfx/foam/F = locate() in location
if(F)
F.amount += amount
return
F = new /obj/effect/effect/foam(location, metal)
F = new /obj/effect/vfx/foam(location, metal)
F.amount = amount
if(!metal) // don't carry other chemicals if a metal foam

View File

@@ -1,18 +1,18 @@
/obj/effect/effect/water
/obj/effect/vfx/water
name = "water"
icon = 'icons/effects/effects.dmi'
icon_state = "extinguish"
mouse_opacity = 0
pass_flags = PASSTABLE | PASSGRILLE | PASSBLOB
/obj/effect/effect/water/Initialize()
/obj/effect/vfx/water/Initialize()
. = ..()
QDEL_IN(src, 15 SECONDS)
/obj/effect/effect/water/proc/set_color() // Call it after you move reagents to it
/obj/effect/vfx/water/proc/set_color() // Call it after you move reagents to it
icon += reagents.get_color()
/obj/effect/effect/water/proc/set_up(var/turf/target, var/step_count = 5, var/delay = 5)
/obj/effect/vfx/water/proc/set_up(var/turf/target, var/step_count = 5, var/delay = 5)
if(!target)
return
for(var/i = 1 to step_count)
@@ -37,18 +37,18 @@
sleep(10)
qdel(src)
/obj/effect/effect/water/Move(turf/newloc)
/obj/effect/vfx/water/Move(turf/newloc)
if(newloc.density)
return 0
. = ..()
/obj/effect/effect/water/Bump(atom/A)
/obj/effect/vfx/water/Bump(atom/A)
if(reagents)
reagents.touch(A)
return ..()
//Used by spraybottles.
/obj/effect/effect/water/chempuff
/obj/effect/vfx/water/chempuff
name = "chemicals"
icon = 'icons/obj/chempuff.dmi'
icon_state = ""

View File

@@ -24,7 +24,7 @@
var/obj/effect/decal/cleanable/blood/oil/streak = new(src.loc)
streak.update_icon()
else if (prob(10))
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
if (step_to(src, get_step(src, direction), 0))

View File

@@ -1,575 +0,0 @@
/* This is an attempt to make some easily reusable "particle" type effect, to stop the code
constantly having to be rewritten. An item like the jetpack that uses the ion_trail_follow system, just has one
defined, then set up when it is created with New(). Then this same system can just be reused each time
it needs to create more trails.A beaker could have a steam_trail_follow system set up, then the steam
would spawn and follow the beaker, even if it is carried or thrown.
*/
/obj/effect/effect
name = "effect"
icon = 'icons/effects/effects.dmi'
mouse_opacity = 0
unacidable = 1//So effect are not targeted by alien acid.
pass_flags = PASSTABLE | PASSGRILLE
/datum/effect/effect/system
var/number = 3
var/cardinals = 0
var/turf/location
var/atom/holder
var/setup = 0
/datum/effect/effect/system/proc/set_up(n = 3, c = 0, turf/loc)
if(n > 10)
n = 10
number = n
cardinals = c
location = loc
setup = 1
/datum/effect/effect/system/proc/attach(atom/atom)
holder = atom
/datum/effect/effect/system/proc/start()
/datum/effect/effect/system/Destroy()
holder = null
return ..()
/////////////////////////////////////////////
// GENERIC STEAM SPREAD SYSTEM
//Usage: set_up(number of bits of steam, use North/South/East/West only, spawn location)
// The attach(atom/atom) proc is optional, and can be called to attach the effect
// to something, like a smoking beaker, so then you can just call start() and the steam
// will always spawn at the items location, even if it's moved.
/* Example:
var/datum/effect/system/steam_spread/steam = new /datum/effect/system/steam_spread() -- creates new system
steam.set_up(5, 0, mob.loc) -- sets up variables
OPTIONAL: steam.attach(mob)
steam.start() -- spawns the effect
*/
/////////////////////////////////////////////
/obj/effect/effect/steam
name = "steam"
icon = 'icons/effects/effects.dmi'
icon_state = "extinguish"
density = 0
/datum/effect/effect/system/steam_spread/set_up(n = 3, c = 0, turf/loc)
if(n > 10)
n = 10
number = n
cardinals = c
location = loc
/datum/effect/effect/system/steam_spread/start()
var/i = 0
for(i=0, i<src.number, i++)
spawn(0)
if(holder)
src.location = get_turf(holder)
var/obj/effect/effect/steam/steam = new /obj/effect/effect/steam(src.location)
var/direction
if(src.cardinals)
direction = pick(cardinal)
else
direction = pick(alldirs)
for(i=0, i<pick(1,2,3), i++)
sleep(5)
step(steam,direction)
spawn(20)
qdel(steam)
/////////////////////////////////////////////
//SPARK SYSTEM (like steam system)
// The attach(atom/atom) proc is optional, and can be called to attach the effect
// to something, like the RCD, so then you can just call start() and the sparks
// will always spawn at the items location.
/////////////////////////////////////////////
/obj/effect/effect/sparks
name = "sparks"
icon_state = "sparks"
var/amount = 6.0
anchored = 1.0
mouse_opacity = 0
/obj/effect/effect/sparks/Initialize()
. = ..()
playsound(src, "sparks", 100, 1)
var/turf/T = src.loc
if (istype(T, /turf))
T.hotspot_expose(1000,100)
QDEL_IN(src, 5 SECONDS)
/obj/effect/effect/sparks/Destroy()
var/turf/T = src.loc
if (istype(T, /turf))
T.hotspot_expose(1000,100)
return ..()
/obj/effect/effect/sparks/Moved(atom/old_loc, direction, forced = FALSE)
. = ..()
if(isturf(loc))
var/turf/T = loc
T.hotspot_expose(1000,100)
/datum/effect/effect/system/spark_spread
var/total_sparks = 0 // To stop it being spammed and lagging!
/datum/effect/effect/system/spark_spread/set_up(n = 3, c = 0, loca)
if(n > 10)
n = 10
number = n
cardinals = c
if(istype(loca, /turf/))
location = loca
else
location = get_turf(loca)
/datum/effect/effect/system/spark_spread/start()
var/i = 0
for(i=0, i<src.number, i++)
if(src.total_sparks > 20)
return
spawn(0)
if(holder)
src.location = get_turf(holder)
var/obj/effect/effect/sparks/sparks = new /obj/effect/effect/sparks(src.location)
src.total_sparks++
var/direction
if(src.cardinals)
direction = pick(cardinal)
else
direction = pick(alldirs)
for(i=0, i<pick(1,2,3), i++)
sleep(5)
step(sparks,direction)
spawn(20)
src.total_sparks--
/////////////////////////////////////////////
//// SMOKE SYSTEMS
// direct can be optinally added when set_up, to make the smoke always travel in one direction
// in case you wanted a vent to always smoke north for example
/////////////////////////////////////////////
/obj/effect/effect/smoke
name = "smoke"
icon_state = "smoke"
opacity = 1
anchored = 0.0
mouse_opacity = 0
var/amount = 6.0
var/time_to_live = 100
//Remove this bit to use the old smoke
icon = 'icons/effects/96x96.dmi'
pixel_x = -32
pixel_y = -32
/obj/effect/effect/smoke/Initialize()
. = ..()
if(time_to_live)
spawn (time_to_live)
if(!QDELETED(src))
qdel(src)
/obj/effect/effect/smoke/Crossed(mob/living/carbon/M as mob )
if(M.is_incorporeal())
return
..()
if(istype(M))
affect(M)
/obj/effect/effect/smoke/proc/affect(var/mob/living/carbon/M)
if (!istype(M))
return 0
if(M.wear_mask && (M.wear_mask.item_flags & AIRTIGHT))
return 0
if(istype(M,/mob/living/carbon/human))
var/mob/living/carbon/human/H = M
if(H.head && (H.head.item_flags & AIRTIGHT))
return 0
return 1
/////////////////////////////////////////////
// Illumination
/////////////////////////////////////////////
/obj/effect/effect/smoke/illumination
name = "illumination"
opacity = 0
icon = 'icons/effects/effects.dmi'
icon_state = "sparks"
/obj/effect/effect/smoke/illumination/Initialize(var/ml, var/lifetime=10, var/range=null, var/power=null, var/color=null)
time_to_live=lifetime
. = ..()
set_light(range, power, color)
/////////////////////////////////////////////
// Bad smoke
/////////////////////////////////////////////
/obj/effect/effect/smoke/bad
time_to_live = 600
//var/list/projectiles
/obj/effect/effect/smoke/bad/Moved(atom/old_loc, direction, forced = FALSE)
. = ..()
for(var/mob/living/L in get_turf(src))
affect(L)
/obj/effect/effect/smoke/bad/affect(var/mob/living/L)
if (!..())
return 0
if(L.needs_to_breathe())
L.adjustOxyLoss(1)
if(prob(25))
L.emote("cough")
/obj/effect/effect/smoke/bad/noxious
opacity = 0
/obj/effect/effect/smoke/bad/noxious/affect(var/mob/living/L)
if (!..())
return 0
if(L.needs_to_breathe())
L.adjustToxLoss(1)
/* Not feasile until a later date
/obj/effect/effect/smoke/bad/Crossed(atom/movable/M as mob|obj)
..()
if(istype(M, /obj/item/projectile/beam))
var/obj/item/projectile/beam/B = M
if(!(B in projectiles))
B.damage = (B.damage/2)
projectiles += B
destroyed_event.register(B, src, /obj/effect/effect/smoke/bad/proc/on_projectile_delete)
to_world("Damage is: [B.damage]")
return 1
/obj/effect/effect/smoke/bad/proc/on_projectile_delete(obj/item/projectile/beam/proj)
projectiles -= proj
*/
// Burnt Food Smoke (Specialty for Cooking Failures)
/obj/effect/effect/smoke/bad/burntfood
color = "#000000"
time_to_live = 600
/obj/effect/effect/smoke/bad/burntfood/process()
for(var/mob/living/L in get_turf(src))
affect(L)
/obj/effect/effect/smoke/bad/burntfood/affect(var/mob/living/L) // This stuff is extra-vile.
if (!..())
return 0
if(L.needs_to_breathe())
L.emote("cough")
/////////////////////////////////////////////
// 'Elemental' smoke
/////////////////////////////////////////////
/obj/effect/effect/smoke/elemental
name = "cloud"
desc = "A cloud of some kind that seems really generic and boring."
opacity = FALSE
var/strength = 5 // How much damage to do inside each affect()
/obj/effect/effect/smoke/elemental/Initialize()
START_PROCESSING(SSobj, src)
return ..()
/obj/effect/effect/smoke/elemental/Destroy()
STOP_PROCESSING(SSobj, src)
return ..()
/obj/effect/effect/smoke/elemental/Moved(atom/old_loc, direction, forced = FALSE)
. = ..()
for(var/mob/living/L in range(1, src))
affect(L)
/obj/effect/effect/smoke/elemental/process()
for(var/mob/living/L in range(1, src))
affect(L)
/obj/effect/effect/smoke/elemental/fire
name = "burning cloud"
desc = "A cloud of something that is on fire."
color = "#FF9933"
light_color = "#FF0000"
light_range = 2
light_power = 5
/obj/effect/effect/smoke/elemental/fire/affect(mob/living/L)
L.inflict_heat_damage(strength)
L.add_modifier(/datum/modifier/fire, 6 SECONDS) // Around 15 damage per stack.
/obj/effect/effect/smoke/elemental/frost
name = "freezing cloud"
desc = "A cloud filled with brutally cold mist."
color = "#00CCFF"
/obj/effect/effect/smoke/elemental/frost/affect(mob/living/L)
L.inflict_cold_damage(strength)
/obj/effect/effect/smoke/elemental/shock
name = "charged cloud"
desc = "A cloud charged with electricity."
color = "#4D4D4D"
/obj/effect/effect/smoke/elemental/shock/affect(mob/living/L)
L.inflict_shock_damage(strength)
/obj/effect/effect/smoke/elemental/mist
name = "misty cloud"
desc = "A cloud filled with water vapor."
color = "#CCFFFF"
alpha = 128
strength = 1
/obj/effect/effect/smoke/elemental/mist/affect(mob/living/L)
L.water_act(strength)
/////////////////////////////////////////////
// Smoke spread
/////////////////////////////////////////////
/datum/effect/effect/system/smoke_spread
var/total_smoke = 0 // To stop it being spammed and lagging!
var/direction
var/smoke_type = /obj/effect/effect/smoke
/datum/effect/effect/system/smoke_spread/set_up(n = 5, c = 0, loca, direct)
if(n > 10)
n = 10
number = n
cardinals = c
if(istype(loca, /turf/))
location = loca
else
location = get_turf(loca)
if(direct)
direction = direct
/datum/effect/effect/system/smoke_spread/start(var/I)
var/i = 0
for(i=0, i<src.number, i++)
if(src.total_smoke > 20)
return
spawn(0)
if(holder)
src.location = get_turf(holder)
var/obj/effect/effect/smoke/smoke = new smoke_type(src.location)
src.total_smoke++
if(I)
smoke.color = I
var/direction = src.direction
if(!direction)
if(src.cardinals)
direction = pick(cardinal)
else
direction = pick(alldirs)
for(i=0, i<pick(0,1,1,1,2,2,2,3), i++)
sleep(10)
step(smoke,direction)
spawn(smoke.time_to_live*0.75+rand(10,30))
if (smoke) qdel(smoke)
src.total_smoke--
/datum/effect/effect/system/smoke_spread/bad
smoke_type = /obj/effect/effect/smoke/bad
/datum/effect/effect/system/smoke_spread/bad/burntfood
smoke_type = /obj/effect/effect/smoke/bad/burntfood
/datum/effect/effect/system/smoke_spread/noxious
smoke_type = /obj/effect/effect/smoke/bad/noxious
/datum/effect/effect/system/smoke_spread/fire
smoke_type = /obj/effect/effect/smoke/elemental/fire
/datum/effect/effect/system/smoke_spread/frost
smoke_type = /obj/effect/effect/smoke/elemental/frost
/datum/effect/effect/system/smoke_spread/shock
smoke_type = /obj/effect/effect/smoke/elemental/shock
/datum/effect/effect/system/smoke_spread/mist
smoke_type = /obj/effect/effect/smoke/elemental/mist
/////////////////////////////////////////////
//////// Attach an Ion trail to any object, that spawns when it moves (like for the jetpack)
/// just pass in the object to attach it to in set_up
/// Then do start() to start it and stop() to stop it, obviously
/// and don't call start() in a loop that will be repeated otherwise it'll get spammed!
/////////////////////////////////////////////
/obj/effect/effect/ion_trails
name = "ion trails"
icon_state = "ion_trails"
anchored = 1.0
/datum/effect/effect/system/ion_trail_follow
var/turf/oldposition
var/processing = 1
var/on = 1
/datum/effect/effect/system/ion_trail_follow/set_up(atom/atom)
attach(atom)
oldposition = get_turf(atom)
/datum/effect/effect/system/ion_trail_follow/start()
if(!src.on)
src.on = 1
src.processing = 1
if(src.processing)
src.processing = 0
spawn(0)
var/turf/T
if(istype(holder, /atom/movable))
var/atom/movable/AM = holder
if(AM.locs && AM.locs.len)
T = get_turf(pick(AM.locs))
else
T = get_turf(AM)
else //when would this ever be attached a non-atom/movable?
T = get_turf(src.holder)
if(T != src.oldposition)
if(isturf(T))
var/obj/effect/effect/ion_trails/I = new /obj/effect/effect/ion_trails(src.oldposition)
src.oldposition = T
I.set_dir(src.holder.dir)
flick("ion_fade", I)
I.icon_state = "blank"
spawn( 20 )
qdel(I)
spawn(2)
if(src.on)
src.processing = 1
src.start()
else
spawn(2)
if(src.on)
src.processing = 1
src.start()
/datum/effect/effect/system/ion_trail_follow/proc/stop()
src.processing = 0
src.on = 0
/////////////////////////////////////////////
//////// Attach a steam trail to an object (eg. a reacting beaker) that will follow it
// even if it's carried of thrown.
/////////////////////////////////////////////
/datum/effect/effect/system/steam_trail_follow
var/turf/oldposition
var/processing = 1
var/on = 1
/datum/effect/effect/system/steam_trail_follow/set_up(atom/atom)
attach(atom)
oldposition = get_turf(atom)
/datum/effect/effect/system/steam_trail_follow/start()
if(!src.on)
src.on = 1
src.processing = 1
if(src.processing)
src.processing = 0
spawn(0)
if(src.number < 3)
var/obj/effect/effect/steam/I = new /obj/effect/effect/steam(src.oldposition)
src.number++
src.oldposition = get_turf(holder)
I.set_dir(src.holder.dir)
spawn(10)
qdel(I)
src.number--
spawn(2)
if(src.on)
src.processing = 1
src.start()
else
spawn(2)
if(src.on)
src.processing = 1
src.start()
/datum/effect/effect/system/steam_trail_follow/proc/stop()
src.processing = 0
src.on = 0
/datum/effect/effect/system/reagents_explosion
var/amount // TNT equivalent
var/flashing = 0 // does explosion creates flash effect?
var/flashing_factor = 0 // factor of how powerful the flash effect relatively to the explosion
/datum/effect/effect/system/reagents_explosion/set_up(amt, loc, flash = 0, flash_fact = 0)
amount = amt
if(istype(loc, /turf/))
location = loc
else
location = get_turf(loc)
flashing = flash
flashing_factor = flash_fact
return
/datum/effect/effect/system/reagents_explosion/start()
if (amount <= 2)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
s.set_up(2, 1, location)
s.start()
for(var/mob/M in viewers(5, location))
to_chat(M, "<span class='warning'>The solution violently explodes.</span>")
for(var/mob/M in viewers(1, location))
if (prob (50 * amount))
to_chat(M, "<span class='warning'>The explosion knocks you down.</span>")
M.Weaken(rand(1,5))
return
else
var/devst = -1
var/heavy = -1
var/light = -1
var/flash = -1
// Clamp all values to fractions of max_explosion_range, following the same pattern as for tank transfer bombs
if (round(amount/12) > 0)
devst = devst + amount/12
if (round(amount/6) > 0)
heavy = heavy + amount/6
if (round(amount/3) > 0)
light = light + amount/3
if (flashing && flashing_factor)
flash = (amount/4) * flashing_factor
for(var/mob/M in viewers(8, location))
to_chat(M, "<span class='warning'>The solution violently explodes.</span>")
explosion(
location,
round(min(devst, BOMBCAP_DVSTN_RADIUS)),
round(min(heavy, BOMBCAP_HEAVY_RADIUS)),
round(min(light, BOMBCAP_LIGHT_RADIUS)),
round(min(flash, BOMBCAP_FLASH_RADIUS))
)

View File

@@ -1,68 +0,0 @@
/obj/effect/expl_particles
name = "explosive particles"
icon = 'icons/effects/effects.dmi'
icon_state = "explosion_particle"
opacity = 1
anchored = 1
mouse_opacity = 0
/obj/effect/expl_particles/Initialize()
. = ..()
QDEL_IN(src, 15)
/datum/effect/system/expl_particles
var/number = 10
var/turf/location
var/total_particles = 0
/datum/effect/system/expl_particles/proc/set_up(n = 10, loca)
number = n
if(istype(loca, /turf/)) location = loca
else location = get_turf(loca)
/datum/effect/system/expl_particles/proc/start()
var/i = 0
for(i=0, i<src.number, i++)
spawn(0)
var/obj/effect/expl_particles/expl = new /obj/effect/expl_particles(src.location)
var/direct = pick(alldirs)
for(i=0, i<pick(1;25,2;50,3,4;200), i++)
sleep(1)
step(expl,direct)
/obj/effect/explosion
name = "explosive particles"
icon = 'icons/effects/96x96.dmi'
icon_state = "explosion"
opacity = 1
anchored = 1
mouse_opacity = 0
pixel_x = -32
pixel_y = -32
/obj/effect/explosion/Initialize()
. = ..()
QDEL_IN(src, 10)
/datum/effect/system/explosion
var/turf/location
/datum/effect/system/explosion/proc/set_up(loca)
if(istype(loca, /turf/)) location = loca
else location = get_turf(loca)
/datum/effect/system/explosion/proc/start()
new/obj/effect/explosion( location )
var/datum/effect/system/expl_particles/P = new/datum/effect/system/expl_particles()
P.set_up(10,location)
P.start()
spawn(5)
var/datum/effect/effect/system/smoke_spread/S = new/datum/effect/effect/system/smoke_spread()
S.set_up(5,0,location,null)
S.start()
/datum/effect/system/explosion/smokeless/start()
new/obj/effect/explosion(location)
var/datum/effect/system/expl_particles/P = new/datum/effect/system/expl_particles()
P.set_up(10,location)
P.start()

View File

@@ -1,55 +0,0 @@
/proc/gibs(atom/location, var/datum/dna/MobDNA, gibber_type = /obj/effect/gibspawner/generic, var/fleshcolor, var/bloodcolor)
new gibber_type(location,MobDNA,fleshcolor,bloodcolor)
/obj/effect/gibspawner
var/sparks = 0 //whether sparks spread on Gib()
var/list/gibtypes = list()
var/list/gibamounts = list()
var/list/gibdirections = list() //of lists
var/fleshcolor //Used for gibbed humans.
var/bloodcolor //Used for gibbed humans.
/obj/effect/gibspawner/Initialize(var/ml, var/datum/dna/MobDNA, var/fleshcolor, var/bloodcolor)
. = ..()
if(fleshcolor)
src.fleshcolor = fleshcolor
if(bloodcolor)
src.bloodcolor = bloodcolor
Gib(loc,MobDNA)
return INITIALIZE_HINT_QDEL
/obj/effect/gibspawner/proc/Gib(atom/location, var/datum/dna/MobDNA = null)
if(gibtypes.len != gibamounts.len || gibamounts.len != gibdirections.len)
to_world("<span class='warning'>Gib list length mismatch!</span>")
return
var/obj/effect/decal/cleanable/blood/gibs/gib = null
if(sparks)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
s.set_up(2, 1, get_turf(location)) // Not sure if it's safe to pass an arbitrary object to set_up, todo
s.start()
for(var/i = 1, i<= gibtypes.len, i++)
if(gibamounts[i])
for(var/j = 1, j<= gibamounts[i], j++)
var/gibType = gibtypes[i]
gib = new gibType(location)
// Apply human species colouration to masks.
if(fleshcolor)
gib.fleshcolor = fleshcolor
if(bloodcolor)
gib.basecolor = bloodcolor
gib.update_icon()
gib.blood_DNA = list()
if(MobDNA)
gib.blood_DNA[MobDNA.unique_enzymes] = MobDNA.b_type
else if(istype(src, /obj/effect/gibspawner/human)) // Probably a monkey
gib.blood_DNA["Non-human DNA"] = "A+"
if(istype(location,/turf/))
var/list/directions = gibdirections[i]
if(directions.len)
gib.streak(directions)

View File

@@ -1,19 +0,0 @@
/obj/effect/manifest
name = "manifest"
icon = 'icons/mob/screen1.dmi'
icon_state = "x"
unacidable = 1//Just to be sure.
/obj/effect/manifest/Initialize()
. = ..()
invisibility = 101
/obj/effect/manifest/proc/manifest()
var/dat = "<B>Crew Manifest</B>:<BR>"
for(var/mob/living/carbon/human/M in mob_list)
dat += text(" <B>[]</B> - []<BR>", M.name, M.get_assignment())
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( src.loc )
P.info = dat
P.name = "paper- 'Crew Manifest'"
//SN src = null
qdel(src)

View File

@@ -1,6 +1,6 @@
// Creates effects like smoke clouds every so often.
/obj/effect/map_effect/interval/effect_emitter
var/datum/effect/effect/system/effect_system = null
var/datum/effect_system/effect_system = null
var/effect_system_type = null // Which effect system to attach.
var/effect_amount = 10 // How many effect objects to create on each interval. Note that there's a hard cap on certain effect_systems.
@@ -30,7 +30,7 @@
/obj/effect/map_effect/interval/effect_emitter/smoke
name = "smoke emitter"
icon_state = "smoke_emitter"
effect_system_type = /datum/effect/effect/system/smoke_spread
effect_system_type = /datum/effect_system/smoke_spread
interval_lower_bound = 1 SECOND
interval_upper_bound = 1 SECOND
@@ -38,30 +38,30 @@
/obj/effect/map_effect/interval/effect_emitter/smoke/bad
name = "bad smoke emitter"
effect_system_type = /datum/effect/effect/system/smoke_spread/bad
effect_system_type = /datum/effect_system/smoke_spread/bad
/obj/effect/map_effect/interval/effect_emitter/smoke/fire
name = "fire smoke emitter"
effect_system_type = /datum/effect/effect/system/smoke_spread/fire
effect_system_type = /datum/effect_system/smoke_spread/fire
/obj/effect/map_effect/interval/effect_emitter/smoke/frost
name = "frost smoke emitter"
effect_system_type = /datum/effect/effect/system/smoke_spread/frost
effect_system_type = /datum/effect_system/smoke_spread/frost
/obj/effect/map_effect/interval/effect_emitter/smoke/shock
name = "shock smoke emitter"
effect_system_type = /datum/effect/effect/system/smoke_spread/shock
effect_system_type = /datum/effect_system/smoke_spread/shock
/obj/effect/map_effect/interval/effect_emitter/smoke/mist
name = "mist smoke emitter"
effect_system_type = /datum/effect/effect/system/smoke_spread/mist
effect_system_type = /datum/effect_system/smoke_spread/mist
// Makes sparks.
/obj/effect/map_effect/interval/effect_emitter/sparks
name = "spark emitter"
icon_state = "spark_emitter"
effect_system_type = /datum/effect/effect/system/spark_spread
effect_system_type = /datum/effect_system/spark_spread
interval_lower_bound = 3 SECONDS
interval_upper_bound = 7 SECONDS
@@ -75,4 +75,4 @@
/obj/effect/map_effect/interval/effect_emitter/steam
name = "steam emitter"
icon_state = "smoke_emitter"
effect_system_type = /datum/effect/effect/system/steam_spread
effect_system_type = /datum/effect_system/steam_spread

View File

@@ -42,7 +42,7 @@
new_turf.register_dangerous_object(src)
/obj/effect/mine/proc/explode(var/mob/living/M)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread()
triggered = 1
s.set_up(3, 1, src)
s.start()
@@ -127,7 +127,7 @@
mineitemtype = /obj/item/weapon/mine/dnascramble
/obj/effect/mine/dnascramble/explode(var/mob/living/M)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread()
triggered = 1
s.set_up(3, 1, src)
s.start()
@@ -145,7 +145,7 @@
/obj/effect/mine/stun/explode(var/mob/living/M)
triggered = 1
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread()
s.set_up(3, 1, src)
s.start()
if(istype(M))
@@ -184,7 +184,7 @@
mineitemtype = /obj/item/weapon/mine/kick
/obj/effect/mine/kick/explode(var/mob/living/M)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread()
triggered = 1
s.set_up(3, 1, src)
s.start()
@@ -205,7 +205,7 @@
var/spread_range = 7
/obj/effect/mine/frag/explode(var/mob/living/M)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread()
triggered = 1
s.set_up(3, 1, src)
s.start()
@@ -234,7 +234,7 @@
mineitemtype = /obj/item/weapon/mine/emp
/obj/effect/mine/emp/explode(var/mob/living/M)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread()
s.set_up(3, 1, src)
s.start()
visible_message("\The [src.name] flashes violently before disintegrating!")
@@ -250,7 +250,7 @@
/obj/effect/mine/incendiary/explode(var/mob/living/M)
triggered = 1
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread()
s.set_up(3, 1, src)
s.start()
if(istype(M))
@@ -264,7 +264,7 @@
mineitemtype = /obj/item/weapon/mine/gadget
/obj/effect/mine/gadget/explode(var/mob/living/M)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread()
triggered = 1
s.set_up(3, 1, src)
s.start()

View File

@@ -27,7 +27,7 @@
/obj/effect/temporary_effect/eruption/testing/on_eruption(var/turf/Target)
if(Target)
new /obj/effect/explosion(Target)
new /obj/effect/vfx/explosion(Target)
return TRUE
/*

View File

@@ -0,0 +1,80 @@
/proc/gibs(atom/location, var/datum/dna/MobDNA, gibber_type = /obj/effect/spawner/gibs/generic, var/fleshcolor, var/bloodcolor)
new gibber_type(location,MobDNA,fleshcolor,bloodcolor)
/obj/effect/spawner/gibs
var/sparks = 0 //whether sparks spread on Gib()
var/list/gibtypes = list()
var/list/gibamounts = list()
var/list/gibdirections = list() //of lists
var/fleshcolor //Used for gibbed humans.
var/bloodcolor //Used for gibbed humans.
/obj/effect/spawner/gibs/New(location, var/datum/dna/MobDNA, var/fleshcolor, var/bloodcolor)
..()
if(fleshcolor) src.fleshcolor = fleshcolor
if(bloodcolor) src.bloodcolor = bloodcolor
if(gibtypes.len != gibamounts.len || gibamounts.len != gibdirections.len)
to_world("<span class='warning'>Gib list length mismatch!</span>")
return
var/obj/effect/decal/cleanable/blood/gibs/gib = null
if(sparks)
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread()
s.set_up(2, 1, get_turf(loc)) // Not sure if it's safe to pass an arbitrary object to set_up, todo
s.start()
for(var/i = 1, i<= gibtypes.len, i++)
if(gibamounts[i])
for(var/j = 1, j<= gibamounts[i], j++)
var/gibType = gibtypes[i]
gib = new gibType(loc)
// Apply human species colouration to masks.
if(fleshcolor)
gib.fleshcolor = fleshcolor
if(bloodcolor)
gib.basecolor = bloodcolor
gib.update_icon()
gib.blood_DNA = list()
if(MobDNA)
gib.blood_DNA[MobDNA.unique_enzymes] = MobDNA.b_type
else if(istype(src, /obj/effect/spawner/gibs/human)) // Probably a monkey
gib.blood_DNA["Non-human DNA"] = "A+"
if(isturf(loc))
var/list/directions = gibdirections[i]
if(directions.len)
gib.streak(directions)
return INITIALIZE_HINT_QDEL
/obj/effect/spawner/gibs/generic
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/core)
gibamounts = list(2,2,1)
/obj/effect/spawner/gibs/generic/New()
gibdirections = list(list(WEST, NORTHWEST, SOUTHWEST, NORTH),list(EAST, NORTHEAST, SOUTHEAST, SOUTH), list())
..()
/obj/effect/spawner/gibs/human
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/down,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/core)
gibamounts = list(1,1,1,1,1,1,1)
/obj/effect/spawner/gibs/human/New()
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs, list())
gibamounts[6] = pick(0,1,2)
..()
/obj/effect/spawner/gibs/robot
sparks = 1
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/robot/up,/obj/effect/decal/cleanable/blood/gibs/robot/down,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot/limb)
gibamounts = list(1,1,1,1,1,1)
/obj/effect/spawner/gibs/robot/New()
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs)
gibamounts[6] = pick(0,1,2)
..()

View File

@@ -1,26 +0,0 @@
/obj/effect/gibspawner/generic
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/core)
gibamounts = list(2,2,1)
/obj/effect/gibspawner/generic/Initialize()
gibdirections = list(list(WEST, NORTHWEST, SOUTHWEST, NORTH),list(EAST, NORTHEAST, SOUTHEAST, SOUTH), list())
. = ..()
/obj/effect/gibspawner/human
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/down,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/core)
gibamounts = list(1,1,1,1,1,1,1)
/obj/effect/gibspawner/human/Initialize()
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs, list())
gibamounts[6] = pick(0,1,2)
. = ..()
/obj/effect/gibspawner/robot
sparks = 1
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/robot/up,/obj/effect/decal/cleanable/blood/gibs/robot/down,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot/limb)
gibamounts = list(1,1,1,1,1,1)
/obj/effect/gibspawner/robot/Initialize()
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs)
gibamounts[6] = pick(0,1,2)
. = ..()

View File

@@ -1,4 +1,4 @@
/obj/effect/graffitispawner
/obj/effect/spawner/graffiti
name = "old scrawling"
icon = 'icons/effects/map_effects.dmi'
icon_state = "graffiti"
@@ -8,7 +8,7 @@
// If the effect's color is not set, it will be chosen at random.
var/color_secondary // The hexcode for the desired secondary color of your graffiti. If blank, it will inherit this effect's color.
/obj/effect/graffitispawner/Initialize()
/obj/effect/spawner/graffiti/Initialize()
..()
if(!color)

View File

@@ -64,8 +64,8 @@
defer_powernet_rebuild = 1
if(heavy_impact_range > 1)
var/datum/effect/system/explosion/E = new/datum/effect/system/explosion()
E.set_up(epicenter)
var/datum/effect_system/explosion/E = new/datum/effect_system/explosion()
E.set_up(loc=epicenter)
E.start()
var/x0 = epicenter.x

View File

@@ -3,11 +3,11 @@
var/used = 0
var/ghost_query_type = null
var/searching = FALSE
var/datum/effect/effect/system/spark_spread/sparks
var/datum/effect_system/spark_spread/sparks
/obj/item/weapon/antag_spawner/Initialize()
. = ..()
sparks = new /datum/effect/effect/system/spark_spread()
sparks = new /datum/effect_system/spark_spread()
sparks.set_up(5, 0, src)
sparks.attach(loc)

View File

@@ -65,7 +65,7 @@
/obj/item/device/chameleon/proc/disrupt(var/delete_dummy = 1)
if(active_dummy)
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread
spark_system.set_up(5, 0, src)
spark_system.attach(src)
spark_system.start()

View File

@@ -153,7 +153,7 @@
else
user.audible_message("<span class='critical'>*BZZZZzzzzzt*</span>")
if(prob(40) && insults <= 0)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(2, 1, get_turf(user))
s.start()
user.visible_message("<span class='warning'>\The [src] sparks violently!</span>")

View File

@@ -96,7 +96,7 @@
if(M)
M.moved_recently = 0
to_chat(M, "<span class='danger'>You feel a sharp shock!</span>")
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, M)
s.start()

View File

@@ -289,12 +289,12 @@
combat_health--
attacker.combat_health--
// This is sloppy but we don't have do_sparks.
var/datum/effect/effect/system/spark_spread/sparksrc = new(src)
var/datum/effect_system/spark_spread/sparksrc = new(src)
playsound(src, "sparks", 50, 1)
sparksrc.set_up(2, 0, src)
sparksrc.attach(src)
sparksrc.start()
var/datum/effect/effect/system/spark_spread/sparkatk = new(attacker)
var/datum/effect_system/spark_spread/sparkatk = new(attacker)
playsound(attacker, "sparks", 50, 1)
sparkatk.set_up(2, 0, attacker)
sparkatk.attach(attacker)

View File

@@ -246,7 +246,7 @@
/obj/item/toy/snappop/throw_impact(atom/hit_atom)
..()
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
new /obj/effect/decal/cleanable/ash(src.loc)
@@ -262,7 +262,7 @@
if(M.m_intent == "run")
to_chat(M, "<span class='warning'>You step on the snap pop!</span>")
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(2, 0, src)
s.start()
new /obj/effect/decal/cleanable/ash(src.loc)

View File

@@ -19,7 +19,7 @@
var/power_per_process = 50 // About 6.5 minutes of use on a high-cell (10,000)
var/state = UAV_OFF
var/datum/effect/effect/system/ion_trail_follow/ion_trail
var/datum/effect_system/ion_trail_follow/ion_trail
var/list/mob/living/masters
@@ -47,7 +47,7 @@
if(!cell && cell_type)
cell = new cell_type
ion_trail = new /datum/effect/effect/system/ion_trail_follow()
ion_trail = new /datum/effect_system/ion_trail_follow()
ion_trail.set_up(src)
ion_trail.stop()

View File

@@ -16,7 +16,7 @@
origin_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 2)
matter = list(MAT_STEEL = 50000)
preserve_item = TRUE // RCDs are pretty important.
var/datum/effect/effect/system/spark_spread/spark_system
var/datum/effect_system/spark_spread/spark_system
var/stored_matter = 0
var/max_stored_matter = RCD_MAX_CAPACITY
var/ranged = FALSE
@@ -31,7 +31,7 @@
var/make_rwalls = FALSE // If true, when building walls, they will be reinforced.
/obj/item/weapon/rcd/Initialize()
src.spark_system = new /datum/effect/effect/system/spark_spread
src.spark_system = new /datum/effect_system/spark_spread
spark_system.set_up(5, 0, src)
spark_system.attach(src)
return ..()

View File

@@ -24,7 +24,7 @@
throw_range = 5
w_class = ITEMSIZE_NORMAL
matter = list(MAT_STEEL = 50000, MAT_GLASS = 25000)
var/datum/effect/effect/system/spark_spread/spark_system
var/datum/effect_system/spark_spread/spark_system
var/p_dir = NORTH // Next pipe will be built with this dir
var/p_flipped = FALSE // If the next pipe should be built flipped
var/paint_color = "grey" // Pipe color index for next pipe painted/built.
@@ -45,7 +45,7 @@
/obj/item/weapon/pipe_dispenser/Initialize()
. = ..()
src.spark_system = new /datum/effect/effect/system/spark_spread
src.spark_system = new /datum/effect_system/spark_spread
spark_system.set_up(5, 0, src)
spark_system.attach(src)
tool = new /obj/item/weapon/tool/wrench/cyborg(src) // RPDs have wrenches inside of them, so that they can wrench down spawned pipes without being used as superior wrenches themselves.

View File

@@ -172,13 +172,13 @@ CIGARETTE PACKETS ARE IN FANCY.DM
playsound(src, 'sound/items/cigs_lighters/cig_light.ogg', 75, 1, -1)
damtype = "fire"
if(reagents.get_reagent_amount("phoron")) // the phoron explodes when exposed to fire
var/datum/effect/effect/system/reagents_explosion/e = new()
var/datum/effect_system/reagents_explosion/e = new()
e.set_up(round(reagents.get_reagent_amount("phoron") / 2.5, 1), get_turf(src), 0, 0)
e.start()
qdel(src)
return
if(reagents.get_reagent_amount("fuel")) // the fuel explodes, too, but much less violently
var/datum/effect/effect/system/reagents_explosion/e = new()
var/datum/effect_system/reagents_explosion/e = new()
e.set_up(round(reagents.get_reagent_amount("fuel") / 5, 1), get_turf(src), 0, 0)
e.start()
qdel(src)

View File

@@ -107,7 +107,7 @@
spawn(0)
if(!src || !reagents.total_volume) return
var/obj/effect/effect/water/W = new /obj/effect/effect/water(get_turf(src))
var/obj/effect/vfx/water/W = new /obj/effect/vfx/water(get_turf(src))
var/turf/my_target
if(a <= the_targets.len)
my_target = the_targets[a]

View File

@@ -170,7 +170,7 @@
G.reagents.trans_to_obj(src, G.reagents.total_volume)
if(src.reagents.total_volume) //The possible reactions didnt use up all reagents.
var/datum/effect/effect/system/steam_spread/steam = new /datum/effect/effect/system/steam_spread()
var/datum/effect_system/steam_spread/steam = new /datum/effect_system/steam_spread()
steam.set_up(10, 0, get_turf(src))
steam.attach(src)
steam.start()

View File

@@ -22,8 +22,8 @@
damage *= B.overmind.blob_type.burn_multiplier
B.adjust_integrity(-damage)
new /obj/effect/effect/sparks(src.loc)
new /obj/effect/effect/smoke/illumination(src.loc, 5, 30, 30, "#FFFFFF")
new /obj/effect/vfx/sparks(src.loc)
new /obj/effect/vfx/smoke/illumination(src.loc, 5, 30, 30, "#FFFFFF")
qdel(src)

View File

@@ -6,13 +6,13 @@
det_time = 20
item_state = "flashbang"
slot_flags = SLOT_BELT
var/datum/effect/effect/system/smoke_spread/bad/smoke
var/datum/effect_system/smoke_spread/bad/smoke
var/smoke_color
var/smoke_strength = 8
/obj/item/weapon/grenade/smokebomb/Initialize()
. = ..()
src.smoke = new /datum/effect/effect/system/smoke_spread/bad()
src.smoke = new /datum/effect_system/smoke_spread/bad()
src.smoke.attach(src)
/obj/item/weapon/grenade/smokebomb/Destroy()

View File

@@ -124,7 +124,7 @@ Protectiveness | Armor %
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()
var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread()
spark_system.set_up(5, 0, user.loc)
spark_system.start()
playsound(src, 'sound/effects/teleport.ogg', 50, 1)

View File

@@ -302,7 +302,7 @@
if(active && default_parry_check(user, attacker, damage_source) && prob(60))
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()
var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread()
spark_system.set_up(5, 0, user.loc)
spark_system.start()
playsound(src, 'sound/weapons/blade1.ogg', 50, 1)
@@ -310,7 +310,7 @@
if(active && unique_parry_check(user, attacker, damage_source) && prob(projectile_parry_chance))
user.visible_message("<span class='danger'>\The [user] deflects [attack_text] with \the [src]!</span>")
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread()
spark_system.set_up(5, 0, user.loc)
spark_system.start()
playsound(src, 'sound/weapons/blade1.ogg', 50, 1)
@@ -430,14 +430,14 @@
flags = NOBLOODY
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
var/mob/living/creator
var/datum/effect/effect/system/spark_spread/spark_system
var/datum/effect_system/spark_spread/spark_system
projectile_parry_chance = 60
lcolor = "#00FF00"
/obj/item/weapon/melee/energy/blade/Initialize()
. = ..()
spark_system = new /datum/effect/effect/system/spark_spread()
spark_system = new /datum/effect_system/spark_spread()
spark_system.set_up(5, 0, src)
spark_system.attach(src)
@@ -474,7 +474,7 @@
if(default_parry_check(user, attacker, damage_source) && prob(60))
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()
var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread()
spark_system.set_up(5, 0, user.loc)
spark_system.start()
playsound(src, 'sound/weapons/blade1.ogg', 50, 1)
@@ -482,7 +482,7 @@
if(unique_parry_check(user, attacker, damage_source) && prob(projectile_parry_chance))
user.visible_message("<span class='danger'>\The [user] deflects [attack_text] with \the [src]!</span>")
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread()
spark_system.set_up(5, 0, user.loc)
spark_system.start()
playsound(src, 'sound/weapons/blade1.ogg', 50, 1)
@@ -540,7 +540,7 @@
/obj/item/weapon/melee/energy/spear/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack")
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()
var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread()
spark_system.set_up(5, 0, user.loc)
spark_system.start()
playsound(src, 'sound/weapons/blade1.ogg', 50, 1)

View File

@@ -57,7 +57,7 @@
if(!((user == loc || (in_range(src, user) && istype(src.loc, /turf)))))
return
var/datum/effect/effect/system/smoke_spread/smoke = new /datum/effect/effect/system/smoke_spread()
var/datum/effect_system/smoke_spread/smoke = new /datum/effect_system/smoke_spread()
smoke.set_up(5, 0, user.loc)
smoke.attach(user)
smoke.start()

View File

@@ -141,7 +141,7 @@
. = ..()
if(.)
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread()
spark_system.set_up(5, 0, user.loc)
spark_system.start()
playsound(src, 'sound/weapons/blade1.ogg', 50, 1)

View File

@@ -37,7 +37,7 @@
to_chat(user, "<span class='warning'>Access Denied</span>")
else if(istype(W, /obj/item/weapon/melee/energy/blade))
if(emag_act(INFINITY, user, W, "The locker has been sliced open by [user] with an energy blade!", "You hear metal being sliced and sparks flying."))
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread()
spark_system.set_up(5, 0, src.loc)
spark_system.start()
playsound(src, 'sound/weapons/blade1.ogg', 50, 1)

View File

@@ -36,7 +36,7 @@
/obj/item/weapon/storage/secure/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(locked)
if (istype(W, /obj/item/weapon/melee/energy/blade) && emag_act(INFINITY, user, "You slice through the lock of \the [src]"))
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread()
spark_system.set_up(5, 0, src.loc)
spark_system.start()
playsound(src, 'sound/weapons/blade1.ogg', 50, 1)

View File

@@ -12,7 +12,7 @@
)
item_state_slots = list(slot_r_hand_str = "jetpack", slot_l_hand_str = "jetpack")
distribute_pressure = ONE_ATMOSPHERE*O2STANDARD
var/datum/effect/effect/system/ion_trail_follow/ion_trail
var/datum/effect_system/ion_trail_follow/ion_trail
var/on = 0.0
var/stabilization_on = 0
var/volume_rate = 500 //Needed for borg jetpack transfer
@@ -20,7 +20,7 @@
/obj/item/weapon/tank/jetpack/Initialize()
. = ..()
ion_trail = new /datum/effect/effect/system/ion_trail_follow()
ion_trail = new /datum/effect_system/ion_trail_follow()
ion_trail.set_up(src)
/obj/item/weapon/tank/jetpack/Destroy()

View File

@@ -317,7 +317,7 @@
var/mob/living/L = user
L.electrocute_act(PN_damage, src, 0.8)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
if(user.stunned)

View File

@@ -58,7 +58,7 @@
to_chat(user, "<span class='warning'>Access Denied</span>")
else if(istype(W, /obj/item/weapon/melee/energy/blade))
if(emag_act(INFINITY, user, "The locker has been sliced open by [user] with \an [W]!", "You hear metal being sliced and sparks flying."))
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread()
spark_system.set_up(5, 0, src.loc)
spark_system.start()
playsound(src, 'sound/weapons/blade1.ogg', 50, 1)

View File

@@ -85,7 +85,7 @@
W.forceMove(loc)
else if(istype(W, /obj/item/weapon/melee/energy/blade))
if(emag_act(INFINITY, user, "<span class='danger'>The locker has been sliced open by [user] with \an [W]</span>!", "<span class='danger'>You hear metal being sliced and sparks flying.</span>"))
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread()
spark_system.set_up(5, 0, loc)
spark_system.start()
playsound(src, 'sound/weapons/blade1.ogg', 50, 1)

View File

@@ -27,7 +27,7 @@
if(isliving(usr))
var/mob/living/L = usr
if(L.electrocute_act(17, src))
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(5, 1, src)
s.start()
if(usr.stunned)

View File

@@ -61,7 +61,7 @@
A.updateicon()
flick("echair1", src)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(12, 1, src)
s.start()
if(has_buckled_mobs())

View File

@@ -196,7 +196,7 @@
if(electrocute_mob(user, C, src))
if(C.powernet)
C.powernet.trigger_warning()
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
if(user.stunned)

View File

@@ -24,7 +24,7 @@
var/maint_access = 1
//var/dna //dna-locking the mech
var/list/proc_res = list() //stores proc owners, like proc_res["functionname"] = owner reference
var/datum/effect/effect/system/spark_spread/spark_system = new
var/datum/effect_system/spark_spread/spark_system = new
var/lights = 0
var/lights_power = 6

View File

@@ -69,7 +69,7 @@
if(timer == 20)
reveal()
if(corpse)
new /obj/effect/effect/smoke/chem(corpse.loc)
new /obj/effect/vfx/smoke/chem(corpse.loc)
qdel(corpse)
if(timer == 0)
icon_state = "deadringer"

View File

@@ -25,7 +25,7 @@
if (tank && tank.modded)
tank.explode()
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()

View File

@@ -22,20 +22,20 @@
M.Move(dest)
if(entersparks)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(4, 1, src)
s.start()
if(exitsparks)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(4, 1, dest)
s.start()
if(entersmoke)
var/datum/effect/effect/system/smoke_spread/s = new /datum/effect/effect/system/smoke_spread
var/datum/effect_system/smoke_spread/s = new /datum/effect_system/smoke_spread
s.set_up(4, 1, src, 0)
s.start()
if(exitsmoke)
var/datum/effect/effect/system/smoke_spread/s = new /datum/effect/effect/system/smoke_spread
var/datum/effect_system/smoke_spread/s = new /datum/effect_system/smoke_spread
s.set_up(4, 1, dest, 0)
s.start()

View File

@@ -20,7 +20,7 @@
for(var/turf/simulated/floor/F in view(2, T))
spawn()
var/obj/effect/effect/water/splash = new(T)
var/obj/effect/vfx/water/splash = new(T)
splash.create_reagents(15)
splash.reagents.add_reagent("blood", 10,list("blood_colour" = color))
splash.set_color()

View File

@@ -35,9 +35,9 @@
L.blob_act()
// Visual effect.
var/datum/effect/system/explosion/E = new/datum/effect/system/explosion/smokeless()
var/datum/effect_system/explosion/E = new/datum/effect_system/explosion/smokeless()
var/turf/T = get_turf(victim)
E.set_up(T)
E.set_up(loc=T)
E.start()
// Now for sounds.

View File

@@ -25,7 +25,7 @@
var/mob/living/L = locate() in range(world.view, B)
if(L && prob(1) && L.mind && !L.stat) // There's some active living thing nearby, produce offgas.
var/turf/T = get_turf(B)
var/datum/effect/effect/system/smoke_spread/noxious/BS = new /datum/effect/effect/system/smoke_spread/noxious
var/datum/effect_system/smoke_spread/noxious/BS = new /datum/effect_system/smoke_spread/noxious
BS.attach(T)
BS.set_up(3, 0, T)
playsound(T, 'sound/effects/smoke.ogg', 50, 1, -3)
@@ -43,7 +43,7 @@
if(prob(5) && !L.stat) // There's some active living thing nearby, produce offgas.
B.visible_message("<span class='alien'>\icon [B] \The [B] disgorches a cloud of noxious gas!</span>")
var/turf/T = get_turf(B)
var/datum/effect/effect/system/smoke_spread/noxious/BS = new /datum/effect/effect/system/smoke_spread/noxious
var/datum/effect_system/smoke_spread/noxious/BS = new /datum/effect_system/smoke_spread/noxious
BS.attach(T)
BS.set_up(3, 0, T)
playsound(T, 'sound/effects/smoke.ogg', 50, 1, -3)

View File

@@ -174,7 +174,7 @@
usable = 1
active = 1
permanent = 1
var/datum/effect/effect/system/smoke_spread/bad/smoke
var/datum/effect_system/smoke_spread/bad/smoke
var/smoke_strength = 8
engage_string = "Detonate"
@@ -184,7 +184,7 @@
/obj/item/rig_module/self_destruct/Initialize()
. = ..()
src.smoke = new /datum/effect/effect/system/smoke_spread/bad()
src.smoke = new /datum/effect_system/smoke_spread/bad()
src.smoke.attach(src)
/obj/item/rig_module/self_destruct/Destroy()

View File

@@ -6,7 +6,7 @@
usable = 1
active = 1
permanent = 1
var/datum/effect/effect/system/smoke_spread/bad/smoke
var/datum/effect_system/smoke_spread/bad/smoke
var/smoke_strength = 8
engage_string = "Detonate"
@@ -16,7 +16,7 @@
/obj/item/rig_module/self_destruct/Initialize()
. = ..()
src.smoke = new /datum/effect/effect/system/smoke_spread/bad()
src.smoke = new /datum/effect_system/smoke_spread/bad()
src.smoke.attach(src)
/obj/item/rig_module/self_destruct/Destroy()

View File

@@ -92,7 +92,7 @@
// Wiring! How exciting.
var/datum/wires/rig/wires
var/datum/effect/effect/system/spark_spread/spark_system
var/datum/effect_system/spark_spread/spark_system
var/datum/mini_hud/rig/minihud
/obj/item/weapon/rig/examine()

View File

@@ -186,7 +186,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()
var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread()
spark_system.set_up(5, 0, user.loc)
spark_system.start()
playsound(src, "sparks", 50, 1)

View File

@@ -186,7 +186,7 @@
//also copied from matches
if(reagents.get_reagent_amount("phoron")) // the phoron explodes when exposed to fire
visible_message("<span class='danger'>\The [src] conflagrates violently!</span>")
var/datum/effect/effect/system/reagents_explosion/e = new()
var/datum/effect_system/reagents_explosion/e = new()
e.set_up(round(reagents.get_reagent_amount("phoron") / 2.5, 1), get_turf(src), 0, 0)
e.start()
qdel(src)

View File

@@ -33,12 +33,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/spark_spread/spark_system
/obj/machinery/atm/Initialize()
. = ..()
machine_id = "[station_name()] RT #[num_financial_terminals++]"
spark_system = new /datum/effect/effect/system/spark_spread
spark_system = new /datum/effect_system/spark_spread
spark_system.set_up(5, 0, src)
spark_system.attach(src)

View File

@@ -0,0 +1,37 @@
/* This is an attempt to make some easily reusable "particle" type effect, to stop the code
constantly having to be rewritten. An item like the jetpack that uses the ion_trail_follow system, just has one
defined, then set up when it is created with New(). Then this same system can just be reused each time
it needs to create more trails.A beaker could have a steam_trail_follow system set up, then the steam
would spawn and follow the beaker, even if it is carried or thrown.
*/
/obj/effect/vfx
name = "effect"
icon = 'icons/effects/effects.dmi'
mouse_opacity = 0
unacidable = 1//So effect are not targeted by alien acid.
pass_flags = PASSTABLE | PASSGRILLE
/datum/effect_system
var/number = 3
var/cardinals = 0
var/turf/location
var/atom/holder
var/setup = 0
/datum/effect_system/proc/set_up(n = 3, c = 0, turf/loc)
if(n > 10)
n = 10
number = n
cardinals = c
location = loc
setup = 1
/datum/effect_system/proc/attach(atom/atom)
holder = atom
/datum/effect_system/proc/start()
/datum/effect_system/Destroy()
holder = null
return ..()

View File

@@ -0,0 +1,92 @@
/obj/effect/vfx/explosion
name = "explosive particles"
icon = 'icons/effects/96x96.dmi'
icon_state = "explosion"
opacity = 1
anchored = 1
mouse_opacity = 0
pixel_x = -32
pixel_y = -32
/obj/effect/vfx/explosion/Initialize()
. = ..()
QDEL_IN(src, 1 SECONDS)
/datum/effect_system/explosion/set_up(n = 0, c = 0, turf/loc)
location = get_turf(loc)
/datum/effect_system/explosion/start()
new/obj/effect/vfx/explosion( location )
var/datum/effect_system/expl_particles/P = new/datum/effect_system/expl_particles()
P.set_up(10,0,location)
P.start()
spawn(5)
var/datum/effect_system/smoke_spread/S = new/datum/effect_system/smoke_spread()
S.set_up(5,0,location,null)
S.start()
/datum/effect_system/explosion/smokeless/start()
new/obj/effect/vfx/explosion(location)
var/datum/effect_system/expl_particles/P = new/datum/effect_system/expl_particles()
P.set_up(10,0,location)
P.start()
/datum/effect_system/reagents_explosion
var/amount // TNT equivalent
var/flashing = 0 // does explosion creates flash effect?
var/flashing_factor = 0 // factor of how powerful the flash effect relatively to the explosion
/datum/effect_system/reagents_explosion/set_up(amt, loc, flash = 0, flash_fact = 0)
amount = amt
if(istype(loc, /turf/))
location = loc
else
location = get_turf(loc)
flashing = flash
flashing_factor = flash_fact
return
/datum/effect_system/reagents_explosion/start()
if (amount <= 2)
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread()
s.set_up(2, 1, location)
s.start()
for(var/mob/M in viewers(5, location))
to_chat(M, "<span class='warning'>The solution violently explodes.</span>")
for(var/mob/M in viewers(1, location))
if (prob (50 * amount))
to_chat(M, "<span class='warning'>The explosion knocks you down.</span>")
M.Weaken(rand(1,5))
return
else
var/devst = -1
var/heavy = -1
var/light = -1
var/flash = -1
// Clamp all values to fractions of max_explosion_range, following the same pattern as for tank transfer bombs
if (round(amount/12) > 0)
devst = devst + amount/12
if (round(amount/6) > 0)
heavy = heavy + amount/6
if (round(amount/3) > 0)
light = light + amount/3
if (flashing && flashing_factor)
flash = (amount/4) * flashing_factor
for(var/mob/M in viewers(8, location))
to_chat(M, "<span class='warning'>The solution violently explodes.</span>")
explosion(
location,
round(min(devst, BOMBCAP_DVSTN_RADIUS)),
round(min(heavy, BOMBCAP_HEAVY_RADIUS)),
round(min(light, BOMBCAP_LIGHT_RADIUS)),
round(min(flash, BOMBCAP_FLASH_RADIUS))
)

View File

@@ -0,0 +1,28 @@
/obj/effect/vfx/expl_particles
name = "explosive particles"
icon = 'icons/effects/effects.dmi'
icon_state = "explosion_particle"
opacity = 1
anchored = 1
mouse_opacity = 0
/obj/effect/vfx/expl_particles/Initialize()
. = ..()
QDEL_IN(src, 1.5 SECONDS)
/datum/effect_system/expl_particles
var/total_particles = 0
/datum/effect_system/expl_particles/set_up(n = 10, c = 0, turf/loc)
number = n
location = get_turf(loc)
/datum/effect_system/expl_particles/start()
var/i = 0
for(i=0, i<src.number, i++)
spawn(0)
var/obj/effect/vfx/expl_particles/expl = new /obj/effect/vfx/expl_particles(src.location)
var/direct = pick(alldirs)
for(i=0, i<pick(1;25,2;50,3,4;200), i++)
sleep(1)
step(expl,direct)

View File

@@ -0,0 +1,59 @@
/////////////////////////////////////////////
//////// Attach an Ion trail to any object, that spawns when it moves (like for the jetpack)
/// just pass in the object to attach it to in set_up
/// Then do start() to start it and stop() to stop it, obviously
/// and don't call start() in a loop that will be repeated otherwise it'll get spammed!
/////////////////////////////////////////////
/obj/effect/vfx/ion_trails
name = "ion trails"
icon_state = "ion_trails"
anchored = 1.0
/datum/effect_system/ion_trail_follow
var/turf/oldposition
var/processing = 1
var/on = 1
/datum/effect_system/ion_trail_follow/set_up(atom/atom)
attach(atom)
oldposition = get_turf(atom)
/datum/effect_system/ion_trail_follow/start()
if(!src.on)
src.on = 1
src.processing = 1
if(src.processing)
src.processing = 0
spawn(0)
var/turf/T
if(istype(holder, /atom/movable))
var/atom/movable/AM = holder
if(AM.locs && AM.locs.len)
T = get_turf(pick(AM.locs))
else
T = get_turf(AM)
else //when would this ever be attached a non-atom/movable?
T = get_turf(src.holder)
if(T != src.oldposition)
if(isturf(T))
var/obj/effect/vfx/ion_trails/I = new /obj/effect/vfx/ion_trails(src.oldposition)
src.oldposition = T
I.set_dir(src.holder.dir)
flick("ion_fade", I)
I.icon_state = "blank"
spawn( 20 )
qdel(I)
spawn(2)
if(src.on)
src.processing = 1
src.start()
else
spawn(2)
if(src.on)
src.processing = 1
src.start()
/datum/effect_system/ion_trail_follow/proc/stop()
src.processing = 0
src.on = 0

View File

@@ -0,0 +1,235 @@
/////////////////////////////////////////////
//// SMOKE SYSTEMS
// direct can be optinally added when set_up, to make the smoke always travel in one direction
// in case you wanted a vent to always smoke north for example
/////////////////////////////////////////////
/obj/effect/vfx/smoke
name = "smoke"
icon_state = "smoke"
opacity = 1
anchored = 0.0
mouse_opacity = 0
var/amount = 6.0
var/time_to_live = 100
//Remove this bit to use the old smoke
icon = 'icons/effects/96x96.dmi'
pixel_x = -32
pixel_y = -32
/obj/effect/vfx/smoke/Initialize()
. = ..()
QDEL_IN(src, time_to_live)
/obj/effect/vfx/smoke/Crossed(mob/living/carbon/M as mob )
if(M.is_incorporeal())
return
..()
if(istype(M))
affect(M)
/obj/effect/vfx/smoke/proc/affect(var/mob/living/carbon/M)
if (!istype(M))
return 0
if(M.wear_mask && (M.wear_mask.item_flags & AIRTIGHT))
return 0
if(istype(M,/mob/living/carbon/human))
var/mob/living/carbon/human/H = M
if(H.head && (H.head.item_flags & AIRTIGHT))
return 0
return 1
/////////////////////////////////////////////
// Illumination
/////////////////////////////////////////////
/obj/effect/vfx/smoke/illumination
name = "illumination"
opacity = 0
icon = 'icons/effects/effects.dmi'
icon_state = "sparks"
/obj/effect/vfx/smoke/illumination/New(var/newloc, var/lifetime=10, var/range=null, var/power=null, var/color=null)
time_to_live=lifetime
..()
set_light(range, power, color)
/////////////////////////////////////////////
// Bad smoke
/////////////////////////////////////////////
/obj/effect/vfx/smoke/bad
time_to_live = 600
//var/list/projectiles
/obj/effect/vfx/smoke/bad/Moved(atom/old_loc, direction, forced = FALSE)
. = ..()
for(var/mob/living/L in get_turf(src))
affect(L)
/obj/effect/vfx/smoke/bad/affect(var/mob/living/L)
if (!..())
return 0
if(L.needs_to_breathe())
L.adjustOxyLoss(1)
if(prob(25))
L.emote("cough")
/obj/effect/vfx/smoke/bad/noxious
opacity = 0
/obj/effect/vfx/smoke/bad/noxious/affect(var/mob/living/L)
if (!..())
return 0
if(L.needs_to_breathe())
L.adjustToxLoss(1)
// Burnt Food Smoke (Specialty for Cooking Failures)
/obj/effect/vfx/smoke/bad/burntfood
color = "#000000"
time_to_live = 600
/obj/effect/vfx/smoke/bad/burntfood/process()
for(var/mob/living/L in get_turf(src))
affect(L)
/obj/effect/vfx/smoke/bad/burntfood/affect(var/mob/living/L) // This stuff is extra-vile.
if (!..())
return 0
if(L.needs_to_breathe())
L.emote("cough")
/////////////////////////////////////////////
// 'Elemental' smoke
/////////////////////////////////////////////
/obj/effect/vfx/smoke/elemental
name = "cloud"
desc = "A cloud of some kind that seems really generic and boring."
opacity = FALSE
var/strength = 5 // How much damage to do inside each affect()
/obj/effect/vfx/smoke/elemental/Initialize()
START_PROCESSING(SSobj, src)
return ..()
/obj/effect/vfx/smoke/elemental/Destroy()
STOP_PROCESSING(SSobj, src)
return ..()
/obj/effect/vfx/smoke/elemental/Moved(atom/old_loc, direction, forced = FALSE)
. = ..()
for(var/mob/living/L in range(1, src))
affect(L)
/obj/effect/vfx/smoke/elemental/process()
for(var/mob/living/L in range(1, src))
affect(L)
/obj/effect/vfx/smoke/elemental/fire
name = "burning cloud"
desc = "A cloud of something that is on fire."
color = "#FF9933"
light_color = "#FF0000"
light_range = 2
light_power = 5
/obj/effect/vfx/smoke/elemental/fire/affect(mob/living/L)
L.inflict_heat_damage(strength)
L.add_modifier(/datum/modifier/fire, 6 SECONDS) // Around 15 damage per stack.
/obj/effect/vfx/smoke/elemental/frost
name = "freezing cloud"
desc = "A cloud filled with brutally cold mist."
color = "#00CCFF"
/obj/effect/vfx/smoke/elemental/frost/affect(mob/living/L)
L.inflict_cold_damage(strength)
/obj/effect/vfx/smoke/elemental/shock
name = "charged cloud"
desc = "A cloud charged with electricity."
color = "#4D4D4D"
/obj/effect/vfx/smoke/elemental/shock/affect(mob/living/L)
L.inflict_shock_damage(strength)
/obj/effect/vfx/smoke/elemental/mist
name = "misty cloud"
desc = "A cloud filled with water vapor."
color = "#CCFFFF"
alpha = 128
strength = 1
/obj/effect/vfx/smoke/elemental/mist/affect(mob/living/L)
L.water_act(strength)
/////////////////////////////////////////////
// Smoke spread
/////////////////////////////////////////////
/datum/effect_system/smoke_spread
var/total_smoke = 0 // To stop it being spammed and lagging!
var/direction
var/smoke_type = /obj/effect/vfx/smoke
/datum/effect_system/smoke_spread/set_up(n = 5, c = 0, loca, direct)
if(n > 10)
n = 10
number = n
cardinals = c
if(istype(loca, /turf/))
location = loca
else
location = get_turf(loca)
if(direct)
direction = direct
/datum/effect_system/smoke_spread/start(var/I)
var/i = 0
for(i=0, i<src.number, i++)
if(src.total_smoke > 20)
return
spawn(0)
if(holder)
src.location = get_turf(holder)
var/obj/effect/vfx/smoke/smoke = new smoke_type(src.location)
src.total_smoke++
if(I)
smoke.color = I
var/direction = src.direction
if(!direction)
if(src.cardinals)
direction = pick(cardinal)
else
direction = pick(alldirs)
for(i=0, i<pick(0,1,1,1,2,2,2,3), i++)
sleep(10)
step(smoke,direction)
spawn(smoke.time_to_live*0.75+rand(10,30))
if (smoke) qdel(smoke)
src.total_smoke--
/datum/effect_system/smoke_spread/bad
smoke_type = /obj/effect/vfx/smoke/bad
/datum/effect_system/smoke_spread/bad/burntfood
smoke_type = /obj/effect/vfx/smoke/bad/burntfood
/datum/effect_system/smoke_spread/noxious
smoke_type = /obj/effect/vfx/smoke/bad/noxious
/datum/effect_system/smoke_spread/fire
smoke_type = /obj/effect/vfx/smoke/elemental/fire
/datum/effect_system/smoke_spread/frost
smoke_type = /obj/effect/vfx/smoke/elemental/frost
/datum/effect_system/smoke_spread/shock
smoke_type = /obj/effect/vfx/smoke/elemental/shock
/datum/effect_system/smoke_spread/mist
smoke_type = /obj/effect/vfx/smoke/elemental/mist

View File

@@ -0,0 +1,67 @@
/////////////////////////////////////////////
//SPARK SYSTEM (like steam system)
// The attach(atom/atom) proc is optional, and can be called to attach the effect
// to something, like the RCD, so then you can just call start() and the sparks
// will always spawn at the items location.
/////////////////////////////////////////////
/obj/effect/vfx/sparks
name = "sparks"
icon_state = "sparks"
var/amount = 6.0
anchored = 1.0
mouse_opacity = 0
/obj/effect/vfx/sparks/Initialize()
. = ..()
playsound(src, "sparks", 100, 1)
var/turf/T = src.loc
if (istype(T, /turf))
T.hotspot_expose(1000,100)
QDEL_IN(src, 5 SECONDS)
/obj/effect/vfx/sparks/Destroy()
var/turf/T = src.loc
if (istype(T, /turf))
T.hotspot_expose(1000,100)
return ..()
/obj/effect/vfx/sparks/Moved(atom/old_loc, direction, forced = FALSE)
. = ..()
if(isturf(loc))
var/turf/T = loc
T.hotspot_expose(1000,100)
/datum/effect_system/spark_spread
var/total_sparks = 0 // To stop it being spammed and lagging!
/datum/effect_system/spark_spread/set_up(n = 3, c = 0, loca)
if(n > 10)
n = 10
number = n
cardinals = c
if(istype(loca, /turf/))
location = loca
else
location = get_turf(loca)
/datum/effect_system/spark_spread/start()
var/i = 0
for(i=0, i<src.number, i++)
if(src.total_sparks > 20)
return
spawn(0)
if(holder)
src.location = get_turf(holder)
var/obj/effect/vfx/sparks/sparks = new /obj/effect/vfx/sparks(src.location)
src.total_sparks++
var/direction
if(src.cardinals)
direction = pick(cardinal)
else
direction = pick(alldirs)
for(i=0, i<pick(1,2,3), i++)
sleep(5)
step(sparks,direction)
spawn(20)
src.total_sparks--

View File

@@ -0,0 +1,88 @@
/////////////////////////////////////////////
// GENERIC STEAM SPREAD SYSTEM
//Usage: set_up(number of bits of steam, use North/South/East/West only, spawn location)
// The attach(atom/atom) proc is optional, and can be called to attach the effect
// to something, like a smoking beaker, so then you can just call start() and the steam
// will always spawn at the items location, even if it's moved.
/* Example:
var/datum/effect_system/steam_spread/steam = new /datum/effect_system/steam_spread() -- creates new system
steam.set_up(5, 0, mob.loc) -- sets up variables
OPTIONAL: steam.attach(mob)
steam.start() -- spawns the effect
*/
/////////////////////////////////////////////
/obj/effect/vfx/steam
name = "steam"
icon = 'icons/effects/effects.dmi'
icon_state = "extinguish"
density = 0
/datum/effect_system/steam_spread/set_up(n = 3, c = 0, turf/loc)
if(n > 10)
n = 10
number = n
cardinals = c
location = loc
/datum/effect_system/steam_spread/start()
var/i = 0
for(i=0, i<src.number, i++)
spawn(0)
if(holder)
src.location = get_turf(holder)
var/obj/effect/vfx/steam/steam = new /obj/effect/vfx/steam(src.location)
var/direction
if(src.cardinals)
direction = pick(cardinal)
else
direction = pick(alldirs)
for(i=0, i<pick(1,2,3), i++)
sleep(5)
step(steam,direction)
spawn(20)
qdel(steam)
/////////////////////////////////////////////
//////// Attach a steam trail to an object (eg. a reacting beaker) that will follow it
// even if it's carried of thrown.
/////////////////////////////////////////////
/datum/effect_system/steam_trail_follow
var/turf/oldposition
var/processing = 1
var/on = 1
/datum/effect_system/steam_trail_follow/set_up(atom/atom)
attach(atom)
oldposition = get_turf(atom)
/datum/effect_system/steam_trail_follow/start()
if(!src.on)
src.on = 1
src.processing = 1
if(src.processing)
src.processing = 0
spawn(0)
if(src.number < 3)
var/obj/effect/vfx/steam/I = new /obj/effect/vfx/steam(src.oldposition)
src.number++
src.oldposition = get_turf(holder)
I.set_dir(src.holder.dir)
spawn(10)
qdel(I)
src.number--
spawn(2)
if(src.on)
src.processing = 1
src.start()
else
spawn(2)
if(src.on)
src.processing = 1
src.start()
/datum/effect_system/steam_trail_follow/proc/stop()
src.processing = 0
src.on = 0

View File

@@ -41,7 +41,7 @@
/datum/event/rogue_drone/end()
var/num_recovered = 0
for(var/mob/living/simple_mob/mechanical/combat_drone/D in drones_list)
var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread()
var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread()
sparks.set_up(3, 0, D.loc)
sparks.start()
D.z = using_map.admin_levels[1]

View File

@@ -563,7 +563,7 @@
// Produce nasty smoke.
visible_message("<span class='danger'>\The [src] vomits a gout of rancid smoke!</span>")
var/datum/effect/effect/system/smoke_spread/bad/burntfood/smoke = new /datum/effect/effect/system/smoke_spread/bad/burntfood
var/datum/effect_system/smoke_spread/bad/burntfood/smoke = new /datum/effect_system/smoke_spread/bad/burntfood
playsound(src, 'sound/effects/smoke.ogg', 20, 1)
smoke.attach(src)
smoke.set_up(10, 0, get_turf(src), 300)

View File

@@ -430,7 +430,7 @@
/obj/machinery/microwave/proc/broke()
var/datum/effect/effect/system/spark_spread/s = new
var/datum/effect_system/spark_spread/s = new
s.set_up(2, 1, src)
s.start()
src.icon_state = "mwb" // Make it look all busted up and shit

View File

@@ -56,7 +56,7 @@
if(drones_to_spawn)
var/number_recovered = 0
for(var/mob/living/simple_mob/mechanical/combat_drone/D in spawned_mobs)
var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread()
var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread()
sparks.set_up(3, 0, D.loc)
sparks.start()
D.z = using_map.admin_levels[1]

View File

@@ -232,7 +232,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
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(2, 1, T)
s.start()
T.ex_act(3)
@@ -334,7 +334,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
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(2, 1, T)
s.start()
if(T)

Some files were not shown because too many files have changed in this diff Show More