/obj/effect/decal/cleanable/liquid_fuel //Liquid fuel is used for things that used to rely on volatile fuels or phoron being contained to a couple tiles. name = "liquid fuel" desc = "Some kind of sticky, flammable liquid." icon = 'icons/effects/effects.dmi' icon_state = "fuel" layer = BLOOD_LAYER anchored = 1 var/amount = 1 /obj/effect/decal/cleanable/liquid_fuel/Initialize(mapload, amt = 1, nologs = 0) . = ..() if(!nologs && !mapload) log_and_message_admins("spilled liquid fuel", user = usr, location = get_turf(src)) src.amount = amt var/has_spread = 0 //Be absorbed by any other liquid fuel in the tile. for(var/obj/effect/decal/cleanable/liquid_fuel/other in loc) if(other != src) other.amount += src.amount other.Spread() has_spread = 1 break if(!has_spread) Spread() else qdel(src) /obj/effect/decal/cleanable/liquid_fuel/proc/Spread(exclude=list()) //Allows liquid fuels to sometimes flow into other tiles. if(amount < 15) return //lets suppose welder fuel is fairly thick and sticky. For something like water, 5 or less would be more appropriate. var/turf/simulated/S = loc if(!istype(S)) return for(var/d in GLOB.cardinals) var/turf/simulated/target = get_step(src,d) var/turf/simulated/origin = get_turf(src) if(origin.CanPass(null, target, 0, 0) && target.CanPass(null, origin, 0, 0)) var/obj/effect/decal/cleanable/liquid_fuel/other_fuel = locate() in target if(other_fuel) other_fuel.amount += amount*0.25 if(!(other_fuel in exclude)) exclude += src other_fuel.Spread(exclude) else new/obj/effect/decal/cleanable/liquid_fuel(target, amount*0.25,1) amount *= 0.75 /obj/effect/decal/cleanable/foam //Copied from liquid fuel name = "foam" desc = "Some kind of extinguishing foam." gender = PLURAL density = 0 anchored = 1 icon = 'icons/effects/effects.dmi' icon_state = "white_foam" var/amount = 1 /obj/effect/decal/cleanable/foam/Initialize(mapload, amt = 1, nologs = 0) SHOULD_CALL_PARENT(FALSE) if(flags_1 & INITIALIZED_1) stack_trace("Warning: [src]([type]) initialized multiple times!") flags_1 |= INITIALIZED_1 src.amount = amt var/has_spread = 0 //Be absorbed by any other liquid fuel in the tile. for(var/obj/effect/decal/cleanable/foam/other in loc) if(other != src) other.amount += src.amount other.Spread() has_spread = 1 break if(!has_spread) Spread() QDEL_IN(src, 2 MINUTES) return INITIALIZE_HINT_NORMAL else return INITIALIZE_HINT_QDEL /obj/effect/decal/cleanable/foam/proc/Spread(exclude=list()) if(amount < 15) return var/turf/simulated/S = loc if(!istype(S)) return for(var/d in GLOB.cardinals) var/turf/simulated/target = get_step(src,d) var/turf/simulated/origin = get_turf(src) if(origin.CanPass(null, target, 0, 0) && target.CanPass(null, origin, 0, 0)) var/obj/effect/decal/cleanable/foam/other_foam = locate() in target if(other_foam) other_foam.amount += amount*0.25 if(!(other_foam in exclude)) exclude += src other_foam.Spread(exclude) else new/obj/effect/decal/cleanable/foam(target, amount*0.25,1) amount *= 0.75