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:
Lohikar
2017-05-02 14:40:40 -04:00
committed by LordFowl
parent 9dbf27a0f4
commit f6dc33a465
872 changed files with 17767 additions and 13417 deletions
+1 -1
View File
@@ -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))
+4 -4
View File
@@ -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)
+33 -31
View File
@@ -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)
+1 -3
View File
@@ -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
+11 -9
View File
@@ -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]"
+1 -1
View File
@@ -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)
+9 -10
View File
@@ -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()
+1 -1
View File
@@ -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
+2 -2
View File
@@ -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)
+32 -1
View File
@@ -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)
+11 -4
View File
@@ -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
+7 -15
View File
@@ -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)
..()
. = ..()
+12 -12
View File
@@ -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 ..()