Files
Bubberstation/code/game/objects/effects/decals/misc.dm
tattle d91390a447 [IDB IGNORE] The Great Sweep: Moving dmis into subfolders (part 1) (#69416)
Moves singulo and supermatter dmis into obj/engine, renamed from obj/tesla_engine
Moves Halloween, Christmas, and misc holiday items to obj/holiday
Moves lollipops to obj/food
Moves crates, closets, and storage to obj/storage
Moves assemblies to obj/assemblies
Renames decals.dmi to signs.dmi ...because they're signs and not decals
Moves statues, cutouts, instruments, art supplies, and crayons to obj/art
Moves balloons, plushes, toys, cards, dice, the hourglass, and TCG to obj/toys
Moves guns, swords, shields to obj/weapons
2022-08-24 20:49:35 -03:00

92 lines
2.6 KiB
Plaintext

//Used by spraybottles.
/obj/effect/decal/chempuff
name = "chemicals"
icon = 'icons/obj/medical/chempuff.dmi'
pass_flags = PASSTABLE | PASSGRILLE
layer = FLY_LAYER
plane = ABOVE_GAME_PLANE
///The mob who sourced this puff, if one exists
var/mob/user
///The sprayer who fired this puff
var/obj/item/reagent_containers/spray/sprayer
///How many interactions we have left before we disappear early
var/lifetime = INFINITY
///Are we a part of a stream?
var/stream
/obj/effect/decal/chempuff/Destroy(force)
user = null
sprayer = null
return ..()
/obj/effect/decal/chempuff/blob_act(obj/structure/blob/B)
return
/obj/effect/decal/chempuff/proc/end_life(datum/move_loop/engine)
QDEL_IN(src, engine.delay) //Gotta let it stop drifting
animate(src, alpha = 0, time = engine.delay)
/obj/effect/decal/chempuff/proc/loop_ended(datum/move_loop/source)
SIGNAL_HANDLER
if(QDELETED(src))
return
end_life(source)
/obj/effect/decal/chempuff/proc/check_move(datum/move_loop/source, succeeded)
if(QDELETED(src)) //Reasons PLEASE WORK I SWEAR TO GOD
return
if(!succeeded) //If we hit something
end_life(source)
return
var/puff_reagents_string = reagents.get_reagent_log_string()
var/travelled_max_distance = (source.lifetime - source.delay <= 0)
var/turf/our_turf = get_turf(src)
for(var/atom/movable/turf_atom in our_turf)
if(turf_atom == src || turf_atom.invisibility) //we ignore the puff itself and stuff below the floor
continue
if(lifetime < 0)
break
if(!stream)
reagents.expose(turf_atom, VAPOR)
log_combat(user, turf_atom, "sprayed", sprayer, addition="which had [puff_reagents_string]")
if(ismob(turf_atom))
lifetime -= 1
continue
if(isliving(turf_atom))
var/mob/living/turf_mob = turf_atom
if(!turf_mob.can_inject())
continue
if(turf_mob.body_position != STANDING_UP && !travelled_max_distance)
continue
reagents.expose(turf_mob, VAPOR)
log_combat(user, turf_mob, "sprayed", sprayer, addition="which had [puff_reagents_string]")
lifetime -= 1
else if(travelled_max_distance)
reagents.expose(turf_atom, VAPOR)
log_combat(user, turf_atom, "sprayed", sprayer, addition="which had [puff_reagents_string]")
lifetime -= 1
if(lifetime >= 0 && (!stream || travelled_max_distance))
reagents.expose(our_turf, VAPOR)
log_combat(user, our_turf, "sprayed", sprayer, addition="which had [puff_reagents_string]")
lifetime -= 1
// Did we use up all the puff early?
if(lifetime < 0)
end_life(source)
/obj/effect/decal/fakelattice
name = "lattice"
desc = "A lightweight support lattice."
icon = 'icons/obj/smooth_structures/lattice.dmi'
icon_state = "lattice-255"
density = TRUE