mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-27 23:14:18 +01:00
Newmap - SMC, Openturf, Arrivals Controller, and Mine Turf Improvements (#1958)
* Replace SSingulo with SScalamity; processing cleanup
- SScalamity now handles blobs as well as singularity-types.
- Processing subtypes have been simplified to not require a stop_processing definition.
* this is probably important
* Remove cascade disabling SSgarbage
* Fixed a bug where dust() did not qdel the target mob
* Misc fixes
* Fix decals surviving break-to-plating
* Subsystem flag tweaks
* Apparently subsystems are new'd before config is.
* Fix paper icons
* Speculative fix for insane lag
* Better machinery stat
* Make organs not use SSoverlay
* Misc bugfixes & tweaks
* Nightmode fixes
* Changelog for SMC
* Port /tg/'s improved MC crash handling
* Add some more SS Recover() procs
* supply_controller -> SScargo
* More New() -> Initialize()
* pAI and robot construction overlays
* Fix cargo unit tests
* Merge the DMM Suite's atom/New() into atoms_init
* Lighting pre-baking
* Lighting initialization logging
* Fix some bad SS init orders
* Fix SSlighting logging; rename Processes to MC
* Speculative fix for insane GC lag
* Prebaked openturf/icon_smooth & fix lighting prebake
* SS init status; SSatoms LATEQDEL
* Fix bug with MC init stat panel
* Fix parallax
* Misc
* Ignore SS_NO_DISPLAY during init
* apparently this is important
* REEEEEE
* Image GC fixes; broadcaster radio-new sanity
* RCON Cleanup
* Move pAI recruiter into subsystem
* Move global solars list into sun subsystem
* Make chickens not use a global
* Demote SSdisposals to SS_BACKGROUND; garbage-debug cleanup
* Speed up space init a little
* Fix bad timer flags on floor drying
* Subsystem panic-restart verb for mins
* Explosion speedup
* Minor subsystem & MC logging tweaks
* SSopenturf improvements
* Make pipenet actually initialize (whoops)
* Minor tweaks
* Implement lighting rounding
* comments are hard okay
* Minor lattice tweaks
* Fix some timer issues & better closet init
* Timer sanity
* Request console tweaks + Storage init sanity
* Minor SSmachiner RCON improvements
* Further reduce world-start timer count
* Standardize subsystem logging
* Garbage hard delete profiling from /tg/
* Timer hang detection & recovery
* Log machines that sleep in process() and fuck up SSmachinery
* Fix an issue with external airlocks sleeping in process()
* Failsafe logging
* Minor tweaks
* Revert "Request console tweaks + Storage init sanity"
This reverts commit 98d3579e35.
* Re-implement RC changes
* Fix SQL FT saving
* Fix SSmachinery sleep in disposals
* Minor SS tweaks
* Paper fixes
* Blood drying fixes
* Merge gameticker and SSticker
* Minor global list init cleanup
* Lagcheck biogenerator & bags
* Tweak SScargo init order; RIG Initialize()
* Caching tweaks
* Remove rogue comma
* Initialize fixes
* Lighting destroy cleanup
* Fix emagging airlocks
* Initial SSicon implementation
* Tweaks & Fixes
* Fire + Air alarm queued icon updates
* Overlays + Queued icon cleanup
* Runtime & background fixes
* Kill some meaningless set statements
* Kill some image qdels
* Bump up lighting rounding val
* Fix adv. scanner destroy runtimes
* Remove unneeded icon update limiting
* Move icon smoothing into helpers
* Show a warning if DM 510 compiles without memory leak hack enabled
* Re-organize subsystems & MC defines a little
* Airlock SFX
* Log of Changes
* Make SSicon_update disable itself when not doing anything
* Fix respawn verb runtime when used early in server-init
* Add more information to MC's stat_entry()
* Replace direct refernces to gcDestroyed with QDEL* macros
* plant_controller -> SSplants
* More plant tweaks
* Add more humor to changelog
* Move parallax globals into SSparallax
* Lighting responsiveness tweaks
* Fix parallax init order & better MC init panel stat
* Make mobs GC
* More overlays + Remove intercom spawn()
* SSfast_process; make pinpointers not use spawn-recursion to process
Also made the SM Cascade beach process with SSprocessing instead of a spawn loop.
* Update changelog
* Mob GC tweaks
* Del() cleanup
* Fix insomniac ZAS connection edges
* Minor pAI cleanup
* Convert more things to SSoverlay; fix duplicated overlay in field gens
* SM Bluespace turf tweaks
* Update SSgarbage debug globals list
* Human-type qdel tweaks
* Subsystem suspension; stat_entry improvements
* SQL Statistics cleanup
* Fix runtimes with ambrosia
* More disable() -> suspend(); fix nightmode again
* Human qdel fix; minor tweaks
* Update turbolift to work with StonedMC
* Make lifts use timers instead of a subsystem
* Make SSassets start earlier
* Convert the radio controller into a subsystem
* Fix some missing CHECK_TICKs in asteroid generation
* MC stat tweaks; make shouldnt_see a typecache
* Kill some redundant debug-controller entries
* radio_controller -> SSradio
* Better SSgarbage hard-del logging from /tg/ upstream
* Logging tweaks + GELF
* Misc client caching improvements
* Slime SSoverlay
* Oven icon fixes
* Implant fixes
- Death implants will no longer spam Common on death of user.
- Death implants should handle a deleted user better.
* Holder tweaks + Welding tool Initialize()
* Fix some bad subsystem logging
* Fix suit cooling units spawning without cells
* Starlight tweaks
* Gibber infinite gib fix
* More SSoverlay stuff
* Make crates use CUT_OVERLAY_IN
* Make SSarrivals suspend instead of disable
* Make openturf use split/phased tick checks
* Speculative fix for unwet timer runtimes
* Blood overlay tweaks/fixes
* Update crusher to play nice with SMC + SSoverlay
* Openturf improvements and fixes
* Minor turbolift tweaks
* Lighting performance improvements + ChangeTurf tweaks
* this is probably important
* Fix wall weld noises on changeturf
* More ChangeTurf tweaks
* Explosion tweaks
* Pre-game lobby tweaks
* Openturf tweaks
* Prevent admins from starting the game before init finishes
* Fix Travis
* Kill an unused var
* Fix ChangeTurf runtimes on openturfs
* Fixes
* Browser datum fixes, asset caching
* Update changelog
* Changelog
* Lobby tweaks
* Ticker tweaks; kill ticker var
* Further lobby tweaks
* Cascade tweaks
* air_master -> SSair
* Reduce overhead from radio autosay
* alarm_manager -> SSalarm
* bomb_processor -> SSexplosives
* corp_regs -> SSlaw
* ZAS overlay fixes
* Small wall icon optimization
* Fix effects master
* Assembly tweaks
* Megavend fixes
* Shuttle fixes
* Camera alert performance improvements
* Fix some world.log spam from lighting overlays
* Fix some Initialize() procs
* Openspace responsiveness tweaks
* Make HE pipes animate through openturfs
* Kill a spawn
This commit is contained in:
@@ -49,4 +49,4 @@
|
||||
visible_message("<span class='alium'>\The [src.target] is struggling to withstand the acid!</span>")
|
||||
if(0 to 1)
|
||||
visible_message("<span class='alium'>\The [src.target] begins to crumble under the acid!</span>")
|
||||
spawn(rand(150, 200)) tick()
|
||||
addtimer(CALLBACK(src, .proc/tick), rand(150, 200))
|
||||
|
||||
@@ -71,8 +71,8 @@
|
||||
var/datum/seed/seed
|
||||
|
||||
/datum/effect/effect/system/smoke_spread/chem/spores/New(seed_name)
|
||||
if(seed_name && plant_controller)
|
||||
seed = plant_controller.seeds[seed_name]
|
||||
if(seed_name && SSplants)
|
||||
seed = SSplants.seeds[seed_name]
|
||||
if(!seed)
|
||||
qdel(src)
|
||||
..()
|
||||
@@ -231,7 +231,7 @@
|
||||
if(passed_smoke)
|
||||
smoke = passed_smoke
|
||||
else
|
||||
smoke = getFromPool(/obj/effect/effect/smoke/chem, location, smoke_duration + rand(smoke_duration*-0.25, smoke_duration*0.25), T, I)
|
||||
smoke = new /obj/effect/effect/smoke/chem(location, smoke_duration + rand(smoke_duration*-0.25, smoke_duration*0.25), T, I)
|
||||
|
||||
if(chemholder.reagents.reagent_list.len)
|
||||
chemholder.reagents.trans_to_obj(smoke, chemholder.reagents.total_volume / dist, copy = 1) //copy reagents to the smoke so mob/breathe() can handle inhaling the reagents
|
||||
@@ -242,7 +242,7 @@
|
||||
|
||||
|
||||
/datum/effect/effect/system/smoke_spread/chem/spores/spawnSmoke(var/turf/T, var/smoke_duration, var/icon/I, var/dist = 1)
|
||||
var/obj/effect/effect/smoke/chem/spores = getFromPool(/obj/effect/effect/smoke/chem, location)
|
||||
var/obj/effect/effect/smoke/chem/spores = new /obj/effect/effect/smoke/chem(location)
|
||||
spores.name = "cloud of [seed.seed_name] [seed.seed_noun]"
|
||||
..(T, I, smoke_duration, dist, spores)
|
||||
|
||||
|
||||
@@ -20,20 +20,22 @@
|
||||
icon_state = "[ismetal? "m" : ""]foam"
|
||||
metal = ismetal
|
||||
playsound(src, 'sound/effects/bubbles2.ogg', 80, 1, -3)
|
||||
spawn(3 + metal * 3)
|
||||
process()
|
||||
checkReagents()
|
||||
spawn(120)
|
||||
processing_objects.Remove(src)
|
||||
sleep(30)
|
||||
if(metal)
|
||||
var/obj/structure/foamedmetal/M = new(src.loc)
|
||||
M.metal = metal
|
||||
M.updateicon()
|
||||
flick("[icon_state]-disolve", src)
|
||||
sleep(5)
|
||||
qdel(src)
|
||||
return
|
||||
addtimer(CALLBACK(src, .proc/tick), 3 + metal * 3)
|
||||
addtimer(CALLBACK(src, .proc/post), 120)
|
||||
|
||||
/obj/effect/effect/foam/proc/tick()
|
||||
process()
|
||||
checkReagents()
|
||||
|
||||
/obj/effect/effect/foam/proc/post()
|
||||
processing_objects.Remove(src)
|
||||
sleep(30)
|
||||
if(metal)
|
||||
var/obj/structure/foamedmetal/M = new /obj/structure/foamedmetal(src.loc)
|
||||
M.metal = metal
|
||||
M.updateicon()
|
||||
flick("[icon_state]-disolve", src)
|
||||
QDEL_IN(src, 5)
|
||||
|
||||
/obj/effect/effect/foam/proc/checkReagents() // transfer any reagents to the floor
|
||||
if(!metal && reagents)
|
||||
@@ -70,8 +72,7 @@
|
||||
if(!metal && prob(max(0, exposed_temperature - 475)))
|
||||
flick("[icon_state]-disolve", src)
|
||||
|
||||
spawn(5)
|
||||
qdel(src)
|
||||
QDEL_IN(src, 5)
|
||||
|
||||
/obj/effect/effect/foam/Crossed(var/atom/movable/AM)
|
||||
if(metal)
|
||||
@@ -102,23 +103,23 @@
|
||||
carried_reagents += R.id
|
||||
|
||||
/datum/effect/effect/system/foam_spread/start()
|
||||
spawn(0)
|
||||
var/obj/effect/effect/foam/F = locate() in location
|
||||
if(F)
|
||||
F.amount += amount
|
||||
return
|
||||
set waitfor = FALSE
|
||||
var/obj/effect/effect/foam/F = locate() in location
|
||||
if(F)
|
||||
F.amount += amount
|
||||
return
|
||||
|
||||
F = getFromPool(/obj/effect/effect/foam, location, metal)
|
||||
F.amount = amount
|
||||
F = new /obj/effect/effect/foam(location, metal)
|
||||
F.amount = amount
|
||||
|
||||
if(!metal) // don't carry other chemicals if a metal foam
|
||||
F.create_reagents(10)
|
||||
if(!metal) // don't carry other chemicals if a metal foam
|
||||
F.create_reagents(10)
|
||||
|
||||
if(carried_reagents)
|
||||
for(var/id in carried_reagents)
|
||||
F.reagents.add_reagent(id, 1, safety = 1) //makes a safety call because all reagents should have already reacted anyway
|
||||
else
|
||||
F.reagents.add_reagent("water", 1, safety = 1)
|
||||
if(carried_reagents)
|
||||
for(var/id in carried_reagents)
|
||||
F.reagents.add_reagent(id, 1, safety = 1) //makes a safety call because all reagents should have already reacted anyway
|
||||
else
|
||||
F.reagents.add_reagent("water", 1, safety = 1)
|
||||
|
||||
// wall formed by metal foams, dense and opaque, but easy to break
|
||||
|
||||
@@ -139,7 +140,8 @@
|
||||
/obj/structure/foamedmetal/Destroy()
|
||||
density = 0
|
||||
update_nearby_tiles(1)
|
||||
..()
|
||||
set_opacity(0)
|
||||
return ..()
|
||||
|
||||
/obj/structure/foamedmetal/proc/updateicon()
|
||||
if(metal == 1)
|
||||
|
||||
@@ -7,9 +7,7 @@
|
||||
|
||||
/obj/effect/effect/water/New(loc)
|
||||
..()
|
||||
spawn(150) // In case whatever made it forgets to delete it
|
||||
if(src)
|
||||
qdel(src)
|
||||
QDEL_IN(src, 15 SECONDS) // In case whatever made it forgets to delete it
|
||||
|
||||
/obj/effect/effect/water/proc/set_color() // Call it after you move reagents to it
|
||||
icon += reagents.get_color()
|
||||
|
||||
@@ -6,22 +6,22 @@
|
||||
anchored = 1
|
||||
var/amount = 1
|
||||
|
||||
New(turf/newLoc,amt=1,nologs=0)
|
||||
if(!nologs)
|
||||
message_admins("Liquid fuel has spilled in [newLoc.loc.name] ([newLoc.x],[newLoc.y],[newLoc.z]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[newLoc.x];Y=[newLoc.y];Z=[newLoc.z]'>JMP</a>)")
|
||||
log_game("Liquid fuel has spilled in [newLoc.loc.name] ([newLoc.x],[newLoc.y],[newLoc.z])")
|
||||
Initialize(mapload, amt = 1, nologs = 0)
|
||||
. = ..()
|
||||
if(!nologs && !mapload)
|
||||
message_admins("Liquid fuel has spilled in [loc.loc.name] ([loc.x],[loc.y],[loc.z]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[loc.x];Y=[loc.y];Z=[loc.z]'>JMP</a>)")
|
||||
log_game("Liquid fuel has spilled in [loc.loc.name] ([loc.x],[loc.y],[loc.z])")
|
||||
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 newLoc)
|
||||
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
|
||||
@@ -50,7 +50,7 @@
|
||||
flamethrower_fuel
|
||||
icon_state = "mustard"
|
||||
anchored = 0
|
||||
New(newLoc, amt = 1, d = 0)
|
||||
Initialize(mapload, amt = 1, d = 0)
|
||||
set_dir(d) //Setting this direction means you won't get torched by your own flamethrower.
|
||||
. = ..()
|
||||
|
||||
|
||||
@@ -21,6 +21,7 @@ var/global/list/image/splatter_cache=list()
|
||||
var/list/datum/disease2/disease/virus2 = list()
|
||||
var/amount = 5
|
||||
var/drytime
|
||||
var/dries = TRUE
|
||||
|
||||
/obj/effect/decal/cleanable/blood/reveal_blood()
|
||||
if(!fluorescent)
|
||||
@@ -33,17 +34,15 @@ var/global/list/image/splatter_cache=list()
|
||||
if(invisibility != 100)
|
||||
invisibility = 100
|
||||
amount = 0
|
||||
processing_objects -= src
|
||||
..(ignore=1)
|
||||
|
||||
/obj/effect/decal/cleanable/blood/Destroy()
|
||||
for(var/datum/disease/D in viruses)
|
||||
D.cure(0)
|
||||
processing_objects -= src
|
||||
return ..()
|
||||
|
||||
/obj/effect/decal/cleanable/blood/New()
|
||||
..()
|
||||
/obj/effect/decal/cleanable/blood/Initialize()
|
||||
. = ..()
|
||||
update_icon()
|
||||
if(istype(src, /obj/effect/decal/cleanable/blood/gibs))
|
||||
return
|
||||
@@ -54,12 +53,9 @@ var/global/list/image/splatter_cache=list()
|
||||
if (B.blood_DNA)
|
||||
blood_DNA |= B.blood_DNA.Copy()
|
||||
qdel(B)
|
||||
drytime = world.time + DRYING_TIME * (amount+1)
|
||||
processing_objects += src
|
||||
|
||||
/obj/effect/decal/cleanable/blood/process()
|
||||
if(world.time > drytime)
|
||||
dry()
|
||||
drytime = DRYING_TIME * (amount+1)
|
||||
if (dries)
|
||||
addtimer(CALLBACK(src, /obj/effect/decal/cleanable/blood/.proc/dry), drytime)
|
||||
|
||||
/obj/effect/decal/cleanable/blood/update_icon()
|
||||
if(basecolor == "rainbow") basecolor = "#[get_random_colour(1)]"
|
||||
@@ -71,8 +67,7 @@ var/global/list/image/splatter_cache=list()
|
||||
if(amount < 1)
|
||||
return
|
||||
|
||||
if (!blood_DNA || !islist(blood_DNA))
|
||||
blood_DNA = list()
|
||||
LAZYINITLIST(blood_DNA)
|
||||
|
||||
var/obj/item/organ/external/l_foot = perp.get_organ("l_foot")
|
||||
var/obj/item/organ/external/r_foot = perp.get_organ("r_foot")
|
||||
@@ -89,19 +84,18 @@ var/global/list/image/splatter_cache=list()
|
||||
if(!S.blood_DNA)
|
||||
S.blood_DNA = list()
|
||||
S.blood_overlay.color = basecolor
|
||||
S.overlays += S.blood_overlay
|
||||
S.add_overlay(S.blood_overlay)
|
||||
if(S.blood_overlay && S.blood_overlay.color != basecolor)
|
||||
S.cut_overlay(S.blood_overlay, TRUE)
|
||||
S.blood_overlay.color = basecolor
|
||||
S.overlays.Cut()
|
||||
S.overlays += S.blood_overlay
|
||||
S.add_overlay(S.blood_overlay, TRUE)
|
||||
if(blood_DNA)
|
||||
S.blood_DNA |= blood_DNA.Copy()
|
||||
|
||||
else if (hasfeet)//Or feet
|
||||
perp.feet_blood_color = basecolor
|
||||
perp.track_blood = max(amount,perp.track_blood)
|
||||
if(!perp.feet_blood_DNA)
|
||||
perp.feet_blood_DNA = list()
|
||||
LAZYINITLIST(perp.feet_blood_DNA)
|
||||
if (blood_DNA)
|
||||
perp.feet_blood_DNA |= blood_DNA.Copy()
|
||||
else if (perp.buckled && istype(perp.buckled, /obj/structure/bed/chair/wheelchair))
|
||||
@@ -116,7 +110,6 @@ var/global/list/image/splatter_cache=list()
|
||||
desc = drydesc
|
||||
color = adjust_brightness(color, -50)
|
||||
amount = 0
|
||||
processing_objects -= src
|
||||
|
||||
/obj/effect/decal/cleanable/blood/attack_hand(mob/living/carbon/human/user)
|
||||
..()
|
||||
@@ -127,10 +120,11 @@ var/global/list/image/splatter_cache=list()
|
||||
var/taken = rand(1,amount)
|
||||
amount -= taken
|
||||
user << "<span class='notice'>You get some of \the [src] on your hands.</span>"
|
||||
if (!user.blood_DNA)
|
||||
user.blood_DNA = list()
|
||||
LAZYINITLIST(user.blood_DNA)
|
||||
|
||||
if (blood_DNA)
|
||||
user.blood_DNA |= blood_DNA.Copy()
|
||||
|
||||
user.bloody_hands += taken
|
||||
user.hand_blood_color = basecolor
|
||||
user.update_inv_gloves(1)
|
||||
@@ -150,8 +144,8 @@ var/global/list/image/splatter_cache=list()
|
||||
amount = 0
|
||||
var/list/drips = list()
|
||||
|
||||
/obj/effect/decal/cleanable/blood/drip/New()
|
||||
..()
|
||||
/obj/effect/decal/cleanable/blood/drip/Initialize()
|
||||
. = ..()
|
||||
drips |= icon_state
|
||||
|
||||
/obj/effect/decal/cleanable/blood/writing
|
||||
@@ -162,8 +156,8 @@ var/global/list/image/splatter_cache=list()
|
||||
amount = 0
|
||||
var/message
|
||||
|
||||
/obj/effect/decal/cleanable/blood/writing/New()
|
||||
..()
|
||||
/obj/effect/decal/cleanable/blood/writing/Initialize()
|
||||
. = ..()
|
||||
if(random_icon_states.len)
|
||||
for(var/obj/effect/decal/cleanable/blood/writing/W in loc)
|
||||
random_icon_states.Remove(W.icon_state)
|
||||
@@ -219,22 +213,21 @@ var/global/list/image/splatter_cache=list()
|
||||
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/proc/streak(var/list/directions)
|
||||
spawn (0)
|
||||
var/direction = pick(directions)
|
||||
for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++)
|
||||
sleep(3)
|
||||
if (i > 0)
|
||||
var/obj/effect/decal/cleanable/blood/b = getFromPool(/obj/effect/decal/cleanable/blood/splatter, src.loc)
|
||||
b.basecolor = src.basecolor
|
||||
b.update_icon()
|
||||
for(var/datum/disease/D in src.viruses)
|
||||
var/datum/disease/ND = D.Copy(1)
|
||||
b.viruses += ND
|
||||
ND.holder = b
|
||||
|
||||
if (step_to(src, get_step(src, direction), 0))
|
||||
break
|
||||
set waitfor = FALSE
|
||||
var/direction = pick(directions)
|
||||
for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++)
|
||||
sleep(3)
|
||||
if (i > 0)
|
||||
var/obj/effect/decal/cleanable/blood/b = new /obj/effect/decal/cleanable/blood/splatter(src.loc)
|
||||
b.basecolor = src.basecolor
|
||||
b.update_icon()
|
||||
for(var/datum/disease/D in src.viruses)
|
||||
var/datum/disease/ND = D.Copy(1)
|
||||
b.viruses += ND
|
||||
ND.holder = b
|
||||
|
||||
if (step_to(src, get_step(src, direction), 0))
|
||||
break
|
||||
|
||||
/obj/effect/decal/cleanable/mucus
|
||||
name = "mucus"
|
||||
@@ -248,8 +241,11 @@ var/global/list/image/splatter_cache=list()
|
||||
random_icon_states = list("mucus")
|
||||
|
||||
var/list/datum/disease2/disease/virus2 = list()
|
||||
var/dry=0 // Keeps the lag down
|
||||
var/dry = 0 // Keeps the lag down
|
||||
|
||||
/obj/effect/decal/cleanable/mucus/New()
|
||||
spawn(DRYING_TIME * 2)
|
||||
dry=1
|
||||
/obj/effect/decal/cleanable/mucus/Initialize()
|
||||
. = ..()
|
||||
addtimer(CALLBACK(src, .proc/dry), DRYING_TIME * 2)
|
||||
|
||||
/obj/effect/decal/cleanable/mucus/proc/dry()
|
||||
dry = TRUE
|
||||
|
||||
@@ -23,13 +23,6 @@
|
||||
F.dirt += 4
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/decal/cleanable/greenglow
|
||||
|
||||
New()
|
||||
..()
|
||||
spawn(1200)// 2 minutes
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/decal/cleanable/dirt
|
||||
name = "dirt"
|
||||
desc = "Someone should clean that up."
|
||||
@@ -58,10 +51,17 @@
|
||||
density = 0
|
||||
anchored = 1
|
||||
layer = 2
|
||||
light_range = 1
|
||||
light_range = 2
|
||||
light_power = 0.5
|
||||
light_color = LIGHT_COLOR_GREEN
|
||||
uv_intensity = 0
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
icon_state = "greenglow"
|
||||
|
||||
/obj/effect/decal/cleanable/greenglow/New()
|
||||
..()
|
||||
QDEL_IN(src, 2 MINUTES)
|
||||
|
||||
/obj/effect/decal/cleanable/cobweb
|
||||
name = "cobweb"
|
||||
desc = "Somebody should remove that."
|
||||
@@ -105,7 +105,7 @@
|
||||
Destroy()
|
||||
for(var/datum/disease/D in viruses)
|
||||
D.cure(0)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/effect/decal/cleanable/tomato_smudge
|
||||
name = "tomato smudge"
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
icon_state = "gib1"
|
||||
basecolor="#030303"
|
||||
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7")
|
||||
dries = FALSE // So we can avoid setting the timer if it's not going to do anything.
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/robot/update_icon()
|
||||
color = "#FFFFFF"
|
||||
@@ -13,18 +14,18 @@
|
||||
return
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/robot/streak(var/list/directions)
|
||||
spawn (0)
|
||||
var/direction = pick(directions)
|
||||
for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++)
|
||||
sleep(3)
|
||||
if (i > 0)
|
||||
if (prob(40))
|
||||
var/obj/effect/decal/cleanable/blood/oil/streak = new(src.loc)
|
||||
streak.update_icon()
|
||||
else if (prob(10))
|
||||
spark(src, 3, alldirs)
|
||||
if (step_to(src, get_step(src, direction), 0))
|
||||
break
|
||||
set waitfor = FALSE
|
||||
var/direction = pick(directions)
|
||||
for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++)
|
||||
sleep(3)
|
||||
if (i > 0)
|
||||
if (prob(40))
|
||||
var/obj/effect/decal/cleanable/blood/oil/streak = new(src.loc)
|
||||
streak.update_icon()
|
||||
else if (prob(10))
|
||||
spark(src, 3, alldirs)
|
||||
if (step_to(src, get_step(src, direction), 0))
|
||||
break
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/robot/limb
|
||||
random_icon_states = list("gibarm", "gibleg")
|
||||
@@ -39,6 +40,7 @@
|
||||
name = "motor oil"
|
||||
desc = "It's black and greasy. Looks like Beepsky made another mess."
|
||||
basecolor="#030303"
|
||||
dries = FALSE
|
||||
|
||||
/obj/effect/decal/cleanable/blood/oil/dry()
|
||||
return
|
||||
|
||||
@@ -85,14 +85,21 @@
|
||||
var/poster_type //So mappers can specify a desired poster
|
||||
var/ruined = 0
|
||||
|
||||
/obj/structure/sign/poster/New(var/newloc, var/placement_dir=null, var/serial=null)
|
||||
..(newloc)
|
||||
/obj/structure/sign/poster/Initialize(mapload, placement_dir = null, serial = null)
|
||||
. = ..()
|
||||
|
||||
if(!serial)
|
||||
serial = rand(1, poster_designs.len) //use a random serial if none is given
|
||||
|
||||
|
||||
serial_number = serial
|
||||
var/datum/poster/design = poster_designs[serial_number]
|
||||
|
||||
var/datum/poster/design
|
||||
if (poster_type)
|
||||
var/path = text2path(poster_type)
|
||||
design = new path
|
||||
else
|
||||
design = poster_designs[serial_number]
|
||||
|
||||
set_poster(design)
|
||||
|
||||
switch (placement_dir)
|
||||
@@ -109,11 +116,6 @@
|
||||
pixel_x = -32
|
||||
pixel_y = 0
|
||||
|
||||
/obj/structure/sign/poster/initialize()
|
||||
if (poster_type)
|
||||
var/path = text2path(poster_type)
|
||||
var/datum/poster/design = new path
|
||||
set_poster(design)
|
||||
|
||||
/obj/structure/sign/poster/proc/set_poster(var/datum/poster/design)
|
||||
name = "[initial(name)] - [design.name]"
|
||||
|
||||
@@ -11,4 +11,4 @@
|
||||
/obj/effect/decal/spraystill
|
||||
density = 0
|
||||
anchored = 1
|
||||
layer = 50
|
||||
layer = 50
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
icon = 'icons/effects/warning_stripes.dmi'
|
||||
layer = 2
|
||||
|
||||
/obj/effect/decal/warning_stripes/New()
|
||||
/obj/effect/decal/warning_stripes/Initialize()
|
||||
. = ..()
|
||||
var/turf/T=get_turf(src)
|
||||
var/image/I=image(icon, icon_state = icon_state, dir = dir)
|
||||
I.color=color
|
||||
T.overlays += I
|
||||
var/turf/T = get_turf(src)
|
||||
var/image/I = image(icon, icon_state = icon_state, dir = dir)
|
||||
I.color = color
|
||||
T.add_overlay(I, TRUE) // Register it as priority so we don't lose it on icon update.
|
||||
qdel(src)
|
||||
|
||||
@@ -75,7 +75,7 @@ steam.start() -- spawns the effect
|
||||
spawn(0)
|
||||
if(holder)
|
||||
src.location = get_turf(holder)
|
||||
var/obj/effect/effect/steam/steam = getFromPool(/obj/effect/effect/steam, src.location)
|
||||
var/obj/effect/effect/steam/steam = new /obj/effect/effect/steam(src.location)
|
||||
var/direction
|
||||
if(src.cardinals)
|
||||
direction = pick(cardinal)
|
||||
@@ -84,8 +84,7 @@ steam.start() -- spawns the effect
|
||||
for(i=0, i<pick(1,2,3), i++)
|
||||
sleep(5)
|
||||
step(steam,direction)
|
||||
spawn(20)
|
||||
qdel(steam)
|
||||
QDEL_IN(steam, 20)
|
||||
|
||||
/////////////////////////////////////////////
|
||||
//// SMOKE SYSTEMS
|
||||
@@ -112,8 +111,7 @@ steam.start() -- spawns the effect
|
||||
..()
|
||||
if (duration)
|
||||
time_to_live = duration
|
||||
spawn (time_to_live)
|
||||
kill()
|
||||
addtimer(CALLBACK(src, .proc/kill), time_to_live)
|
||||
|
||||
/obj/effect/effect/smoke/proc/kill()
|
||||
set waitfor = FALSE
|
||||
@@ -270,7 +268,7 @@ steam.start() -- spawns the effect
|
||||
spawn(0)
|
||||
if(holder)
|
||||
src.location = get_turf(holder)
|
||||
var/obj/effect/effect/smoke/smoke = getFromPool(smoke_type, src.location)
|
||||
var/obj/effect/effect/smoke/smoke = new smoke_type(src.location)
|
||||
src.total_smoke++
|
||||
var/direction = src.direction
|
||||
if(!direction)
|
||||
@@ -328,13 +326,14 @@ steam.start() -- spawns the effect
|
||||
var/turf/T = get_turf(src.holder)
|
||||
if(T != src.oldposition)
|
||||
if(istype(T, /turf/space))
|
||||
var/obj/effect/effect/ion_trails/I = getFromPool(/obj/effect/effect/ion_trails, src.oldposition)
|
||||
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)
|
||||
animate(I, alpha = 0, time = 18, easing = SINE_EASING | EASE_IN)
|
||||
QDEL_IN(I, 20)
|
||||
|
||||
spawn(2)
|
||||
if(src.on)
|
||||
src.processing = 1
|
||||
@@ -374,7 +373,7 @@ steam.start() -- spawns the effect
|
||||
src.processing = 0
|
||||
spawn(0)
|
||||
if(src.number < 3)
|
||||
var/obj/effect/effect/steam/I = getFromPool(/obj/effect/effect/steam, src.oldposition)
|
||||
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)
|
||||
|
||||
@@ -8,8 +8,7 @@
|
||||
|
||||
/obj/effect/expl_particles/New()
|
||||
..()
|
||||
spawn (15)
|
||||
qdel(src)
|
||||
QDEL_IN(src, 15)
|
||||
return
|
||||
|
||||
/obj/effect/expl_particles/Move()
|
||||
@@ -48,8 +47,7 @@
|
||||
|
||||
/obj/effect/explosion/New()
|
||||
..()
|
||||
spawn (10)
|
||||
qdel(src)
|
||||
QDEL_IN(src, 10)
|
||||
return
|
||||
|
||||
/datum/effect/system/explosion
|
||||
@@ -67,4 +65,4 @@
|
||||
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()
|
||||
S.start()
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
var/fleshcolor //Used for gibbed humans.
|
||||
var/bloodcolor //Used for gibbed humans.
|
||||
|
||||
New(location, var/list/viruses, var/datum/dna/MobDNA, var/fleshcolor, var/bloodcolor)
|
||||
Initialize(mapload, list/viruses, datum/dna/MobDNA, fleshcolor, bloodcolor)
|
||||
..()
|
||||
|
||||
if(fleshcolor) src.fleshcolor = fleshcolor
|
||||
|
||||
@@ -74,8 +74,8 @@
|
||||
/obj/effect/landmark/proc/delete()
|
||||
delete_me = 1
|
||||
|
||||
/obj/effect/landmark/initialize()
|
||||
..()
|
||||
/obj/effect/landmark/Initialize()
|
||||
. = ..()
|
||||
if(delete_me)
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -5,4 +5,35 @@
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "strangepresent"
|
||||
density = 1
|
||||
anchored = 0
|
||||
anchored = 0
|
||||
|
||||
/atom/movable/afterimage
|
||||
name = "after-image"
|
||||
desc = "There used to be something here."
|
||||
simulated = FALSE
|
||||
mouse_opacity = FALSE
|
||||
anchored = TRUE
|
||||
|
||||
/atom/movable/afterimage/New(turf/loc, atom/target)
|
||||
..(loc)
|
||||
appearance = target
|
||||
// Reset some vars.
|
||||
mouse_opacity = 0
|
||||
alpha /= 4
|
||||
dir = target.dir
|
||||
if (!color)
|
||||
color = list(
|
||||
0.5, 0.5, 0.5,
|
||||
0.5, 0.5, 0.5,
|
||||
0.5, 0.5, 0.5
|
||||
)
|
||||
|
||||
animate(src, alpha = 0, time = 2 SECONDS - 10, easing = EASE_IN|QUAD_EASING)
|
||||
QDEL_IN(src, 2 SECONDS)
|
||||
|
||||
/atom/movable/afterimage/Destroy()
|
||||
appearance = null
|
||||
return ..()
|
||||
|
||||
/proc/shadow(atom/movable/target)
|
||||
new /atom/movable/afterimage(get_turf(target), target)
|
||||
|
||||
@@ -3,14 +3,18 @@
|
||||
unacidable = 1
|
||||
var/i_attached//Added for possible image attachments to objects. For hallucinations and the like.
|
||||
|
||||
/obj/effect/overlay/Destroy()
|
||||
i_attached = null
|
||||
return ..()
|
||||
|
||||
/obj/effect/overlay/beam//Not actually a projectile, just an effect.
|
||||
name="beam"
|
||||
icon='icons/effects/beam.dmi'
|
||||
icon_state="b_beam"
|
||||
blend_mode = BLEND_ADD
|
||||
layer = LIGHTING_LAYER + 0.1
|
||||
animate_movement = FALSE
|
||||
var/tmp/atom/BeamSource
|
||||
New()
|
||||
..()
|
||||
spawn(10) qdel(src)
|
||||
|
||||
/obj/effect/overlay/palmtree_r
|
||||
name = "Palm tree"
|
||||
@@ -20,6 +24,7 @@
|
||||
layer = 5
|
||||
anchored = 1
|
||||
|
||||
|
||||
/obj/effect/overlay/palmtree_l
|
||||
name = "Palm tree"
|
||||
icon = 'icons/misc/beach2.dmi'
|
||||
@@ -28,11 +33,13 @@
|
||||
layer = 5
|
||||
anchored = 1
|
||||
|
||||
|
||||
/obj/effect/overlay/coconut
|
||||
name = "Coconuts"
|
||||
icon = 'icons/misc/beach.dmi'
|
||||
icon_state = "coconuts"
|
||||
|
||||
|
||||
/obj/effect/overlay/bluespacify
|
||||
name = "Bluespace"
|
||||
icon = 'icons/turf/space.dmi'
|
||||
@@ -76,7 +83,7 @@
|
||||
dir = (pick(cardinal))
|
||||
flick("[icon_state]", src)
|
||||
|
||||
schedule_task_in(duration, /proc/qdel, list(src))
|
||||
QDEL_IN(src, duration)
|
||||
|
||||
/obj/effect/overlay/temp/ex_act()
|
||||
return
|
||||
|
||||
@@ -11,22 +11,16 @@
|
||||
anchored = 1.0
|
||||
|
||||
/obj/effect/portal/Bumped(mob/M as mob|obj)
|
||||
spawn(0)
|
||||
src.teleport(M)
|
||||
return
|
||||
return
|
||||
set waitfor = FALSE
|
||||
src.teleport(M)
|
||||
|
||||
/obj/effect/portal/Crossed(AM as mob|obj)
|
||||
spawn(0)
|
||||
src.teleport(AM)
|
||||
return
|
||||
return
|
||||
set waitfor = FALSE
|
||||
src.teleport(AM)
|
||||
|
||||
/obj/effect/portal/attack_hand(mob/user as mob)
|
||||
spawn(0)
|
||||
src.teleport(user)
|
||||
return
|
||||
return
|
||||
set waitfor = FALSE
|
||||
src.teleport(user)
|
||||
|
||||
/obj/effect/portal/New(loc, turf/target, creator=null, lifespan=300)
|
||||
..()
|
||||
@@ -34,8 +28,7 @@
|
||||
src.creator = creator
|
||||
|
||||
if(lifespan > 0)
|
||||
spawn(lifespan)
|
||||
qdel(src)
|
||||
QDEL_IN(src, lifespan)
|
||||
|
||||
/obj/effect/portal/proc/teleport(atom/movable/M as mob|obj)
|
||||
if(istype(M, /obj/effect)) //sparks don't teleport
|
||||
@@ -53,4 +46,3 @@
|
||||
do_teleport(M, locate(rand(5, world.maxx - 5), rand(5, world.maxy -5), 3), 0)
|
||||
else
|
||||
do_teleport(M, target, 1) ///You will appear adjacent to the beacon
|
||||
|
||||
|
||||
@@ -151,14 +151,14 @@
|
||||
name = "TTV bomb - proximity"
|
||||
assembly_type = /obj/item/device/assembly/prox_sensor
|
||||
|
||||
/obj/effect/spawner/newbomb/radio/custom/New(var/newloc, ph, ox, co)
|
||||
/obj/effect/spawner/newbomb/radio/custom/Initialize(mapload, ph, ox, co)
|
||||
if(ph != null) phoron_amt = ph
|
||||
if(ox != null) oxygen_amt = ox
|
||||
if(co != null) carbon_amt = co
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/effect/spawner/newbomb/New(newloc)
|
||||
..(newloc)
|
||||
/obj/effect/spawner/newbomb/Initialize()
|
||||
. = ..()
|
||||
|
||||
var/obj/item/device/transfer_valve/V = new(src.loc)
|
||||
var/obj/item/weapon/tank/phoron/PT = new(V)
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
)
|
||||
gibamounts = list(2,2,1)
|
||||
|
||||
/obj/effect/gibspawner/generic/New()
|
||||
/obj/effect/gibspawner/generic/Initialize()
|
||||
gibdirections = list(list(WEST, NORTHWEST, SOUTHWEST, NORTH),list(EAST, NORTHEAST, SOUTHEAST, SOUTH), list())
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/effect/gibspawner/human
|
||||
gibtypes = list(
|
||||
@@ -21,10 +21,10 @@
|
||||
/obj/effect/decal/cleanable/blood/gibs/core)
|
||||
gibamounts = list(1,1,1,1,1,1,1)
|
||||
|
||||
/obj/effect/gibspawner/human/New()
|
||||
/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
|
||||
@@ -38,10 +38,10 @@
|
||||
)
|
||||
gibamounts = list(1,1,1,1,1,1)
|
||||
|
||||
/obj/effect/gibspawner/robot/New()
|
||||
/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)
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/effect/gibspawner/xeno
|
||||
gibtypes = list(
|
||||
@@ -55,7 +55,7 @@
|
||||
)
|
||||
gibamounts = list(1,1,1,1,1,1,1)
|
||||
|
||||
/obj/effect/gibspawner/xeno/New()
|
||||
/obj/effect/gibspawner/xeno/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)
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
@@ -78,19 +78,19 @@
|
||||
New()
|
||||
pixel_x = rand(3,-3)
|
||||
pixel_y = rand(3,-3)
|
||||
processing_objects |= src
|
||||
START_PROCESSING(SSprocessing, src)
|
||||
|
||||
/obj/effect/spider/eggcluster/New(var/location, var/atom/parent)
|
||||
get_light_and_color(parent)
|
||||
..()
|
||||
|
||||
/obj/effect/spider/eggcluster/Destroy()
|
||||
processing_objects -= src
|
||||
STOP_PROCESSING(SSprocessing, src)
|
||||
if(istype(loc, /obj/item/organ/external))
|
||||
var/obj/item/organ/external/O = loc
|
||||
O.implants -= src
|
||||
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/effect/spider/eggcluster/process()
|
||||
amount_grown += rand(0,2)
|
||||
@@ -101,7 +101,7 @@
|
||||
O = loc
|
||||
|
||||
for(var/i=0, i<num, i++)
|
||||
var/spiderling = getFromPool(/obj/effect/spider/spiderling, src.loc, src)
|
||||
var/spiderling = new /obj/effect/spider/spiderling(src.loc, src)
|
||||
if(O)
|
||||
O.implants += spiderling
|
||||
qdel(src)
|
||||
@@ -122,7 +122,7 @@
|
||||
/obj/effect/spider/spiderling/New(var/location, var/atom/parent)
|
||||
pixel_x = rand(6,-6)
|
||||
pixel_y = rand(6,-6)
|
||||
processing_objects |= src
|
||||
START_PROCESSING(SSprocessing, src)
|
||||
//50% chance to grow up
|
||||
if(prob(50))
|
||||
amount_grown = 1
|
||||
@@ -130,8 +130,8 @@
|
||||
..()
|
||||
|
||||
/obj/effect/spider/spiderling/Destroy()
|
||||
processing_objects -= src
|
||||
..()
|
||||
STOP_PROCESSING(SSprocessing, src)
|
||||
return ..()
|
||||
|
||||
/obj/effect/spider/spiderling/Bump(atom/user)
|
||||
if(istype(user, /obj/structure/table))
|
||||
@@ -140,8 +140,8 @@
|
||||
..()
|
||||
|
||||
/obj/effect/spider/spiderling/proc/die()
|
||||
visible_message("<span class='alert'>[src] dies!</span>")
|
||||
getFromPool(/obj/effect/decal/cleanable/spiderling_remains, src.loc)
|
||||
visible_message("<span class='alert'>\The [src] dies!</span>")
|
||||
new /obj/effect/decal/cleanable/spiderling_remains(src.loc)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/spider/spiderling/healthcheck()
|
||||
@@ -248,11 +248,11 @@
|
||||
icon_state = "cocoon1"
|
||||
health = 60
|
||||
|
||||
New()
|
||||
icon_state = pick("cocoon1","cocoon2","cocoon3")
|
||||
/obj/effect/spider/cocoon/New()
|
||||
icon_state = pick("cocoon1","cocoon2","cocoon3")
|
||||
|
||||
/obj/effect/spider/cocoon/Destroy()
|
||||
src.visible_message("<span class='warning'>\The [src] splits open.</span>")
|
||||
for(var/atom/movable/A in contents)
|
||||
A.loc = src.loc
|
||||
A.forceMove(src.loc)
|
||||
return ..()
|
||||
|
||||
Reference in New Issue
Block a user