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
+6
View File
@@ -188,3 +188,9 @@
apply_damage(rand(0, damage), BRUTE, "r_arm")
Weaken(2)
updatehealth()
/mob/living/carbon/human/bst/can_fall()
return FALSE
/mob/living/carbon/human/bst/handle_fall(turf/landing)
return
+108
View File
@@ -0,0 +1,108 @@
/turf
// Reference to any open turf that might be above us to speed up atom Entered() updates.
var/tmp/turf/simulated/open/above
var/tmp/oo_light_set // If the turf has had a light set by starlight.
/turf/Entered(atom/movable/thing, atom/oldLoc)
. = ..()
if (above && !istype(oldLoc, /turf/simulated/open))
above.update_icon()
/turf/Destroy()
above = null
return ..()
/atom/movable
var/tmp/atom/movable/openspace/overlay/bound_overlay // The overlay that is directly mirroring us that we proxy movement to.
var/no_z_overlay // If TRUE, this atom will not be drawn on open turfs.
/atom/movable/Destroy()
. = ..()
if (bound_overlay)
if (istype(bound_overlay.loc, /turf/simulated/open))
bound_overlay.loc:update_icon()
QDEL_NULL(bound_overlay)
/atom/movable/Move()
. = ..()
if (bound_overlay)
// These should only ever be located on open-turf tiles.
var/turf/the_loc = bound_overlay.loc
if (!istype(the_loc, /turf/simulated/open))
addtimer(CALLBACK(bound_overlay, /atom/movable/openspace/overlay/.proc/check_existence), 1 SECOND, TIMER_UNIQUE | TIMER_OVERRIDE)
else
bound_overlay.forceMove(get_step(src, UP))
/atom/movable/forceMove(atom/dest)
. = ..(dest)
if (bound_overlay)
// These should only ever be located on open-turf tiles.
var/turf/the_loc = bound_overlay.loc
if (!istype(the_loc, /turf/simulated/open))
addtimer(CALLBACK(bound_overlay, /atom/movable/openspace/overlay/.proc/check_existence), 1 SECOND, TIMER_UNIQUE)
else
bound_overlay.forceMove(get_step(src, UP))
/atom/movable/proc/update_oo()
if (!bound_overlay)
return
// check_existence returns TRUE if the overlay is valid.
if (bound_overlay.check_existence())
SSopenturf.queued_overlays += bound_overlay
/atom/movable/proc/get_above_oo()
. = list()
var/atom/movable/curr = src
while (curr.bound_overlay)
. += curr.bound_overlay
curr = curr.bound_overlay
// -- Openspace movables --
/atom/movable/openspace
name = ""
simulated = FALSE
anchored = TRUE
mouse_opacity = FALSE
/atom/movable/openspace/can_fall()
return FALSE
// No blowing up abstract objects.
/atom/movable/openspace/ex_act(ex_sev)
return
/atom/movable/openspace/singularity_act()
return
/atom/movable/openspace/singularity_pull()
return
/atom/movable/openspace/singuloCanEat()
return
// Used to darken the atoms on the openturf without fucking up colors.
/atom/movable/openspace/multiplier
name = "openspace multiplier"
desc = "You shouldn't see this."
icon = 'icons/misc/openspace.dmi'
icon_state = "white"
plane = OPENTURF_CAP_PLANE
blend_mode = BLEND_MULTIPLY
color = list(
0.75, 0, 0,
0, 0.75, 0,
0, 0, 0.75
)
no_z_overlay = TRUE
/atom/movable/openspace/multiplier/Destroy()
var/turf/simulated/open/myturf = loc
if (istype(myturf))
myturf.shadower = null
return ..()
// /atom/movable/openspace/overlay is in openspace_overlay.dm
+43
View File
@@ -0,0 +1,43 @@
// The visual representation of an atom under an openspace turf.
/atom/movable/openspace/overlay
plane = OPENTURF_MAX_PLANE
var/atom/movable/associated_atom
var/depth
/atom/movable/openspace/overlay/New()
SSopenturf.openspace_overlays += src
/atom/movable/openspace/overlay/Destroy()
SSopenturf.openspace_overlays -= src
if (associated_atom)
associated_atom.bound_overlay = null
associated_atom = null
return ..()
/atom/movable/openspace/overlay/attackby(obj/item/W, mob/user)
user << span("notice", "\The [src] is too far away.")
/atom/movable/openspace/overlay/attack_hand(mob/user as mob)
user << span("notice", "You cannot reach \the [src] from here.")
/atom/movable/openspace/overlay/attack_generic(mob/user as mob)
user << span("notice", "You cannot reach \the [src] from here.")
/atom/movable/openspace/overlay/forceMove(atom/dest)
. = ..()
check_existence()
/atom/movable/openspace/overlay/Move()
. = ..()
check_existence()
// Checks if we've moved off of an openturf.
// Returns TRUE if we're continuing to exist, FALSE if we're deleting ourselves.
/atom/movable/openspace/overlay/proc/check_existence()
if (!istype(loc, /turf/simulated/open))
qdel(src)
return FALSE
else
return TRUE
+1 -1
View File
@@ -88,7 +88,7 @@ obj/machinery/atmospherics/pipe/zpipe/Destroy()
node1.disconnect(src)
if(node2)
node2.disconnect(src)
..()
return ..()
obj/machinery/atmospherics/pipe/zpipe/pipeline_expansion()
return list(node1, node2)
+5 -3
View File
@@ -17,7 +17,8 @@
var/const/climb_time = 2 SECONDS
/obj/structure/ladder/initialize()
/obj/structure/ladder/Initialize()
. = ..()
// the upper will connect to the lower
if(allowed_directions & DOWN) //we only want to do the top one, as it will initialize the ones before it.
for(var/obj/structure/ladder/L in GetBelow(src))
@@ -130,7 +131,8 @@
opacity = 0
anchored = 1
initialize()
Initialize()
. = ..()
for(var/turf/turf in locs)
var/turf/simulated/open/above = GetAbove(turf)
if(!above)
@@ -172,4 +174,4 @@
west
dir = WEST
bound_width = 64
bound_width = 64
+44 -64
View File
@@ -13,8 +13,6 @@
/turf/space/CanZPass(atom, direction)
return 1
var/global/list/total_openspace = list()
/turf/simulated/open
name = "open space"
icon = 'icons/turf/space.dmi'
@@ -22,31 +20,57 @@ var/global/list/total_openspace = list()
plane = PLANE_SPACE_BACKGROUND
density = 0
pathweight = 100000 //Seriously, don't try and path over this one numbnuts
is_hole = TRUE
var/turf/below
var/tmp/turf/below
var/tmp/atom/movable/openspace/multiplier/shadower // Overlay used to multiply color of all OO overlays at once.
var/tmp/updating = FALSE // If this turf is queued for openturf update.
var/tmp/last_seen_turf // A soft reference to the last turf present when this was updated.
var/tmp/depth
/turf/simulated/open/proc/is_above_space()
var/turf/T = GetBelow(src)
while (T && T.is_hole)
if (istype(T, /turf/space))
return TRUE
T = GetBelow(T)
return FALSE
/turf/simulated/open/Destroy()
SSopenturf.openspace_turfs -= src
SSopenturf.queued_turfs -= src
QDEL_NULL(shadower)
for (var/atom/movable/openspace/overlay in src)
qdel(overlay)
if (istype(above))
above.update()
above = null
below = null
return ..()
/turf/simulated/open/airless
oxygen = 0
nitrogen = 0
temperature = TCMB
/turf/simulated/open/New()
total_openspace += src
/turf/simulated/open/Destroy()
total_openspace -= src
..()
/turf/simulated/open/post_change()
..()
update()
/turf/simulated/open/initialize()
..()
/turf/simulated/open/Initialize()
. = ..()
update()
SSopenturf.openspace_turfs += src
/turf/simulated/open/proc/update()
set waitfor = FALSE
below = GetBelow(src)
below.above = src
levelupdate()
for(var/atom/movable/A in src)
A.fall()
@@ -55,7 +79,7 @@ var/global/list/total_openspace = list()
/turf/simulated/open/update_dirt()
return 0
/turf/simulated/open/Entered(var/atom/movable/mover)
/turf/simulated/open/Entered(atom/movable/mover)
..()
mover.fall()
@@ -65,56 +89,12 @@ var/global/list/total_openspace = list()
O.hide(0)
/turf/simulated/open/update_icon()
overlays.Cut()
underlays.Cut()
if(below)
var/image/t_img = list()
var/image/temp = image(icon = below.icon, icon_state = below.icon_state)
temp.color = rgb(127,127,127)
temp.overlays += below.overlays
t_img += temp
underlays += t_img
var/image/o_img = list()
for(var/obj/o in below)
// ingore objects that have any form of invisibility
if(o.invisibility) continue
var/image/temp2 = image(o, dir=o.dir, layer = TURF_LAYER+0.05*o.layer)
temp2.color = rgb(127,127,127)
temp2.overlays += o.overlays
o_img += temp2
underlays += o_img
var/list/noverlays = list()
if(!istype(below,/turf/space))
noverlays += image(icon =icon, icon_state = "empty", layer = 2.45)
else
// This is stolen from /turf/space's New() proc.
icon_state = "[((x + y) ^ ~(x * y) + z) % 25]"
var/image/I = image('icons/turf/space_parallax1.dmi',"[icon_state]")
I.plane = PLANE_SPACE_DUST
I.alpha = 80
I.blend_mode = BLEND_ADD
noverlays += I
for(var/direction in cardinal)
var/turf/simulated/T = get_step(src,direction)
if(istype(T) && !istype(T,/turf/simulated/open))
if(istype(T,/turf/simulated/mineral))
var/image/border = image(icon = 'icons/turf/walls.dmi', icon_state = "rock_side", dir = direction, layer = 3)
noverlays += border
else if(istype(T,/turf/simulated/floor/asteroid))
var/image/border = image(icon = 'icons/turf/cliff.dmi', icon_state = "sand", dir = direction, layer = 3)
noverlays += border
var/obj/structure/stairs/S = locate() in below
if(S && S.loc == below)
var/image/I = image(icon = S.icon, icon_state = "below", dir = S.dir, layer = 2.45)
I.pixel_x = S.pixel_x
I.pixel_y = S.pixel_y
noverlays += I
overlays = noverlays
if(!updating && below)
updating = TRUE
SSopenturf.queued_turfs += src
if (above)
// Cascade updates until we hit the top openturf.
above.update_icon()
/turf/simulated/open/attackby(obj/item/C as obj, mob/user as mob)
if (istype(C, /obj/item/stack/rods))
@@ -151,4 +131,4 @@ var/global/list/total_openspace = list()
//Most things use is_plating to test if there is a cover tile on top (like regular floors)
/turf/simulated/open/is_plating()
return 1
return 1