Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[MDB IGNORE] Deprecates Auxmos in favour of LINDA [PORT] #11165

Closed
wants to merge 121 commits into from
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
121 commits
Select commit Hold shift + click to select a range
ab198b7
LINDA FUCKING REFORGED https://github.com/tgstation/tgstation/pull/55604
JixS4v Jul 8, 2024
1b5b26c
https://github.com/tgstation/tgstation/pull/56081
JixS4v Jul 9, 2024
da3c99a
The thingy
JixS4v Jul 9, 2024
ca63e66
Prevents the most common case of fire settling with an excited group …
LemonInTheDark Jan 23, 2021
eb223d4
some dumb stuff
JixS4v Jul 9, 2024
90b2df2
Fixes the atmos subsystem locking up on rare occasions (#56556)
LemonInTheDark Feb 7, 2021
738ba57
Removes the excited cleanup subprocess (#57381)
LemonInTheDark Mar 4, 2021
8567d27
Removes delta_time from the atmos system. (#57478)
LemonInTheDark Mar 8, 2021
3707a65
Makes pipenet rebuilds yield much more often (#57511)
LemonInTheDark Mar 10, 2021
2d78ac4
Makes gas actually dissipate (#57634)
LemonInTheDark Mar 13, 2021
1e1536b
Some minor atmos cleanup (#57933)
LemonInTheDark Mar 26, 2021
2ab9bdf
Gas defines begone
JixS4v Jul 10, 2024
8db5366
kills set_temperature
JixS4v Jul 10, 2024
4979288
gootbye get_moles
JixS4v Jul 15, 2024
5aab9ca
goodbye set_moles (thanks chat gee pee tee for the regex)
JixS4v Jul 15, 2024
705bb38
goodbye get_gases (good ol search n replace)
JixS4v Jul 15, 2024
fab3a24
adjust_moles dood. wat nou?
JixS4v Jul 15, 2024
5ecdd55
squashing bullshit
JixS4v Jul 15, 2024
04599b2
temperature (half-way done i think)
JixS4v Jul 15, 2024
f342544
Revert "Removes blocks_air (#8264)"
JixS4v Jul 15, 2024
b2bbeab
Reverts https://github.com/BeeStation/BeeStation-Hornet/pull/3210 (Fo…
JixS4v Jul 15, 2024
f76f1fd
Fixes something i somehow deleted
JixS4v Jul 15, 2024
6765110
Missed hypernob
JixS4v Jul 15, 2024
2cf1f09
Nabs TG's immutable mixture thing
JixS4v Jul 15, 2024
c1e1b9f
Some missing defines
JixS4v Jul 15, 2024
bf1c1f3
kill set_volume
JixS4v Jul 15, 2024
f22201b
goodbye adjust heat
JixS4v Jul 15, 2024
9fe91e4
Misc fixes.
JixS4v Jul 18, 2024
6729aa3
Z-Pausing
JixS4v Jul 23, 2024
a6fe1d5
Today's misc fixes
JixS4v Aug 12, 2024
237d424
Today's fixes (117 errors!)
JixS4v Aug 12, 2024
fee100c
kills generic fire
JixS4v Aug 18, 2024
bb2e9a4
Still at 81 problems gonna start merging up to date before proceeding
JixS4v Aug 18, 2024
72420c5
Ports https://github.com/tgstation/tgstation/pull/58418/files
JixS4v Aug 19, 2024
7bd92e9
Missed a single thing
JixS4v Aug 19, 2024
5947846
Hotspots / LINDA_fire docs. (#59493)
vincentiusvin Jun 5, 2021
7d95c7e
Removes a source of nonexistent parent pipenets during update (#60853)
ninjanomnom Aug 15, 2021
9320505
Atmos re-Defined (#60855)
Ghilker Aug 29, 2021
3c7651a
The mole counts in the min checks in reactions.dm will now be multipl…
Pickle-Coding Oct 2, 2021
3dd0e54
First part of the PR of cleanup
JixS4v Aug 19, 2024
9a4e856
modules/atmospherics major cleanup (#61904), what a fucking mess
Ghilker Oct 14, 2021
07c00e7
smartpipes tried to sneak in, begone!
JixS4v Aug 19, 2024
22b5e0b
Small thingy
invalid-email-address Aug 26, 2024
10765fe
Test
RatonSS13 Aug 26, 2024
0f5c2d4
Some additional fixes
RatonSS13 Aug 26, 2024
fa7f5eb
Some more misc fixes
RatonSS13 Aug 26, 2024
22c0109
Edits the gas types to add breathing reagents, alerts, and balance so…
RatonSS13 Aug 26, 2024
4e70541
Changes a very confusing variable name and fixes a bit more of things
RatonSS13 Aug 26, 2024
a81317e
Reverts lung.dm, that was fucking stupid but this code is fucking stu…
RatonSS13 Aug 26, 2024
5e19870
lung code adapted
RatonSS13 Aug 26, 2024
dbe3742
Misc fixes, 36 problems and why would TG do this
RatonSS13 Aug 27, 2024
e4397dd
Some more tgstation/61904 progress
RatonSS13 Aug 27, 2024
463f724
Holy shit what a bad cherry-pick, let's hope there's no unforseen con…
vincentiusvin Jan 18, 2022
1411e05
Shitass cherry pick once again (tgstation#63270)
LemonInTheDark Dec 14, 2021
3848806
Fixes that got pulled out accidentally when cherry-picking
RatonSS13 Aug 28, 2024
03a48e1
Surely this won't break anything
RatonSS13 Aug 28, 2024
3a4adbf
let's hope i won't have to kill myself
RatonSS13 Aug 28, 2024
aea248b
Compilation but instant runtimes, we might be getting somewhere tho
RatonSS13 Aug 28, 2024
6ef726b
it compiles, but full of runtimes
RatonSS13 Aug 29, 2024
d8c571a
Killed some runtimes, game manages to fully initialize now
RatonSS13 Aug 29, 2024
1e61cb6
Last commit before computer switch, again more misc changes, still tr…
RatonSS13 Aug 29, 2024
3aaca42
Whatever
JixS4v Aug 30, 2024
262a577
Atmos init speedup, saves 4 seconds (#69697)
JixS4v Aug 31, 2024
7caabd0
Makes `share()` canonical. Saves cpu time, makes the simulation prope…
LemonInTheDark Jan 11, 2022
bc40a37
Bullshit snuck in
JixS4v Aug 31, 2024
4a25da3
fix conflicts
JixS4v Aug 31, 2024
8985a79
Conflict resolution kinda sucks sometimes huh
JixS4v Aug 31, 2024
afe780e
Compiles again
JixS4v Aug 31, 2024
b1fcec6
Fixed wrong proc ref syntax
JixS4v Aug 31, 2024
edb1686
This should fix at least one runtime I guess
JixS4v Aug 31, 2024
0914191
Optimizes atmos init by 20% (#73926)
LemonInTheDark Mar 12, 2023
caf809a
Well now ssair won't error on init
JixS4v Aug 31, 2024
297742f
Moves adjacent air into the main atmos subsystem (#64559)
LemonInTheDark Feb 3, 2022
62b38ad
updates DME
JixS4v Aug 31, 2024
38d7a46
DME got fucked up somehow
JixS4v Aug 31, 2024
46db896
More stuff, don't forget to remove lowmemmode before setting to open
JixS4v Aug 31, 2024
cf29d59
Fixes ignoring space turfs in difference checks (#73962)
LemonInTheDark Mar 14, 2023
3754526
did a silly
JixS4v Aug 31, 2024
2ce2fc1
GET MOLES??? IS THAT YOU???
JixS4v Aug 31, 2024
a10ffb4
Welcome back get_moles
JixS4v Aug 31, 2024
1754d73
Shitcode 2
JixS4v Aug 31, 2024
bf2c064
Bullshit
JixS4v Aug 31, 2024
997880a
Less warnings more gooder
JixS4v Aug 31, 2024
eacd012
Fixes broken breathing. Too much alerts still broken for some reason
JixS4v Aug 31, 2024
d21e4ab
Kills atmos callbacks
JixS4v Sep 2, 2024
dabd6e3
Update beestation.dme
JixS4v Sep 2, 2024
00ecc2b
Revert "Kills atmos callbacks"
JixS4v Sep 2, 2024
4e8037e
Revert "Update beestation.dme"
JixS4v Sep 2, 2024
b5abcb0
Silly me
JixS4v Sep 2, 2024
8c77d0a
Makes breath considerably less fucked!
JixS4v Sep 2, 2024
5faa2ae
Nicer defines
JixS4v Sep 2, 2024
ee2a41a
joelogbybolb special
JixS4v Sep 2, 2024
289ac18
deltastation being silly
JixS4v Sep 2, 2024
d67a07b
Skibidi toilet is real. It appeared in my room one day.
JixS4v Sep 2, 2024
bcdc28d
mesa very stupid
JixS4v Sep 2, 2024
8061855
Merge branch 'master' of https://github.com/BeeStation/BeeStation-Hor…
JixS4v Sep 2, 2024
907c1f4
Optimizes some gas_mixture procs, Optimizes pipeline processing signi…
LemonInTheDark Mar 27, 2023
7955990
fixes, still compiles
JixS4v Sep 2, 2024
2187181
no dilly-dallying
JixS4v Sep 3, 2024
20a2ad3
Deconflict
JixS4v Sep 8, 2024
ada712f
A slight dilly dally, a silly even
JixS4v Sep 8, 2024
2a9dbc3
Delete .github/workflows/continuous_integration.yml
JixS4v Sep 8, 2024
fafaba6
Arlongus
JixS4v Sep 8, 2024
f7cceef
Merge branch 'LINDA-FINALLY!!!!!!!!' of https://github.com/JixS4v/Bee…
JixS4v Sep 8, 2024
ed06a40
beince
JixS4v Sep 8, 2024
54f3a00
Revert moonoutpost changes
JixS4v Sep 8, 2024
781fe42
Tests
JixS4v Sep 8, 2024
295015d
amog us
JixS4v Sep 8, 2024
12aea53
Rerun test
JixS4v Sep 8, 2024
676c4ed
bingul
JixS4v Sep 8, 2024
a4b3eb7
mogus
JixS4v Sep 8, 2024
ea78aa2
Fix
JixS4v Sep 8, 2024
8b822a6
cancel culture
JixS4v Sep 8, 2024
2fee225
Linter pleasing
JixS4v Sep 8, 2024
542839d
Lints
JixS4v Sep 8, 2024
3389b22
Arlongus
JixS4v Sep 8, 2024
aa6ac49
Bingle
JixS4v Sep 8, 2024
be71b45
Deconflict :(
RatonSS13 Sep 13, 2024
e7b1e5b
Merge branch 'master' of https://github.com/BeeStation/BeeStation-Hor…
JixS4v Sep 20, 2024
e59dc92
:troll:
JixS4v Sep 20, 2024
e4fb506
I guess no 515 (literally :trollface:)
JixS4v Sep 20, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Makes pipenet rebuilds yield much more often (#57511)
Makes both the act of starting a rebuild, and the full rebuild itself yield.
This might? Expose some things that rely on parent existing, but that was a problem before, if a rare one. It'll
need cleaned up at some point, but I'd like some feedback on how I'm acomplishing this.

Oh and I changed a very slight detail about how volume is used, instead of storing it throughout the whole loop
and applying it at the last moment, we just operate on the pipeline's volume step by step. This fixes like,
pipes being wrenched up while a rebuild is in progress, and the behavior is older then git, but I figured I
should mention it
  • Loading branch information
LemonInTheDark authored and JixS4v committed Jul 9, 2024
commit 3707a65a14fe296ee96765ac6fce86e4e23f3cd8
4 changes: 4 additions & 0 deletions code/__DEFINES/subsystems.dm
Original file line number Diff line number Diff line change
Expand Up @@ -268,6 +268,10 @@
#define SSAIR_SUPERCONDUCTIVITY 7
#define SSAIR_PROCESS_ATOMS 8

//Pipeline rebuild helper defines, these suck but it'll do for now
#define SSAIR_REBUILD_PIPELINE 1
#define SSAIR_REBUILD_QUEUE 2

// Explosion Subsystem subtasks
#define SSEXPLOSIONS_MOVABLES 1
#define SSEXPLOSIONS_TURFS 2
Expand Down
124 changes: 107 additions & 17 deletions code/controllers/subsystem/air.dm
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ SUBSYSTEM_DEF(air)
runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME

var/cached_cost = 0

var/cost_atoms = 0
var/cost_turfs = 0
var/cost_hotspots = 0
Expand All @@ -21,7 +22,9 @@ SUBSYSTEM_DEF(air)
var/list/active_turfs = list()
var/list/hotspots = list()
var/list/networks = list()
var/list/pipenets_needing_rebuilt = list()
var/list/rebuild_queue = list()
//Subservient to rebuild queue
var/list/expansion_queue = list()
/// A list of machines that will be processed when currentpart == SSAIR_ATMOSMACHINERY. Use SSair.begin_processing_machine and SSair.stop_processing_machine to add and remove machines.
var/list/obj/machinery/atmos_machinery = list()
var/list/pipe_init_dirs_cache = list()
Expand Down Expand Up @@ -65,7 +68,8 @@ SUBSYSTEM_DEF(air)
msg += "PN:[networks.len]|"
msg += "AM:[atmos_machinery.len]|"
msg += "AO:[atom_process.len]|"
msg += "RB:[pipenets_needing_rebuilt.len]|"
msg += "RB:[rebuild_queue.len]|"
msg += "EP:[expansion_queue.len]|"
msg += "AT/MS:[round((cost ? active_turfs.len/cost : 0),0.1)]"
return ..()

Expand All @@ -83,20 +87,18 @@ SUBSYSTEM_DEF(air)
/datum/controller/subsystem/air/fire(resumed = FALSE)
var/timer = TICK_USAGE_REAL

//Rebuilds can happen at any time, so this needs to be done outside of the normal system
cost_rebuilds = 0

// Every time we fire, we want to make sure pipenets are rebuilt. The game state could have changed between each fire() proc call
// and anything missing a pipenet can lead to unintended behaviour at worse and various runtimes at best.
if(length(pipenets_needing_rebuilt))
var/list/pipenet_rebuilds = pipenets_needing_rebuilt
for(var/thing in pipenet_rebuilds)
var/obj/machinery/atmospherics/AT = thing
if(!thing) //If a null somehow shows up here, this next line runtimes and the subsystem dies
continue
AT.build_network()
cached_cost += TICK_USAGE_REAL - timer
pipenets_needing_rebuilt.Cut()
if(length(rebuild_queue) || length(expansion_queue))
timer = TICK_USAGE_REAL
process_rebuilds()
//This does mean that the apperent rebuild costs fluctuate very quickly, this is just the cost of having them always process, no matter what
cost_rebuilds = TICK_USAGE_REAL - timer
if(state != SS_RUNNING)
return
cost_rebuilds = MC_AVERAGE(cost_rebuilds, TICK_DELTA_TO_MS(cached_cost))

if(currentpart == SSAIR_PIPENETS || !resumed)
timer = TICK_USAGE_REAL
Expand Down Expand Up @@ -212,9 +214,22 @@ SUBSYSTEM_DEF(air)
if(MC_TICK_CHECK)
return

/datum/controller/subsystem/air/proc/add_to_rebuild_queue(atmos_machine)
if(istype(atmos_machine, /obj/machinery/atmospherics))
pipenets_needing_rebuilt += atmos_machine
/datum/controller/subsystem/air/proc/add_to_rebuild_queue(obj/machinery/atmospherics/atmos_machine)
if(istype(atmos_machine, /obj/machinery/atmospherics) && !atmos_machine.rebuilding)
rebuild_queue += atmos_machine
atmos_machine.rebuilding = TRUE

/datum/controller/subsystem/air/proc/add_to_expansion(datum/pipeline/line, starting_point)
var/list/new_packet = new(SSAIR_REBUILD_QUEUE)
new_packet[SSAIR_REBUILD_PIPELINE] = line
new_packet[SSAIR_REBUILD_QUEUE] = list(starting_point)
expansion_queue += list(new_packet)

/datum/controller/subsystem/air/proc/remove_from_expansion(datum/pipeline/line)
for(var/list/packet in expansion_queue)
if(packet[SSAIR_REBUILD_PIPELINE] == line)
expansion_queue -= packet
return

/datum/controller/subsystem/air/proc/process_atoms(resumed = FALSE)
if(!resumed)
Expand Down Expand Up @@ -312,6 +327,75 @@ SUBSYSTEM_DEF(air)
if (MC_TICK_CHECK)
return

/datum/controller/subsystem/air/proc/process_rebuilds()
//Yes this does mean rebuilding pipenets can freeze up the subsystem forever, but if we're in that situation something else is very wrong
var/list/currentrun = rebuild_queue
while(currentrun.len || length(expansion_queue))
while(currentrun.len && !length(expansion_queue)) //If we found anything, process that first
var/obj/machinery/atmospherics/remake = currentrun[currentrun.len]
currentrun.len--
if (!remake)
continue
var/list/targets = remake.get_rebuild_targets()
remake.rebuilding = FALSE //It's allowed to renter the queue now
for(var/datum/pipeline/build_off as anything in targets)
build_off.build_pipeline(remake) //This'll add to the expansion queue
if (MC_TICK_CHECK)
return

var/list/queue = expansion_queue
while(queue.len)
var/list/pack = queue[queue.len]
//We operate directly with the pipeline like this because we can trust any rebuilds to remake it properly
var/datum/pipeline/linepipe = pack[SSAIR_REBUILD_PIPELINE]
var/list/border = pack[SSAIR_REBUILD_QUEUE]
expand_pipeline(linepipe, border)
if(state != SS_RUNNING) //expand_pipeline can fail a tick check, we shouldn't let things get too fucky here
return

linepipe.building = FALSE
queue.len--
if (MC_TICK_CHECK)
return

///Rebuilds a pipeline by expanding outwards, while yielding when sane
/datum/controller/subsystem/air/proc/expand_pipeline(datum/pipeline/net, list/border)
while(border.len)
var/obj/machinery/atmospherics/borderline = border[border.len]
border.len--

var/list/result = borderline.pipeline_expansion(net)
if(!length(result))
continue
for(var/obj/machinery/atmospherics/considered_device in result)
if(!istype(considered_device, /obj/machinery/atmospherics/pipe))
considered_device.setPipenet(net, borderline)
net.addMachineryMember(considered_device)
continue
var/obj/machinery/atmospherics/pipe/item = considered_device
if(net.members.Find(item))
continue
if(item.parent)
var/static/pipenetwarnings = 10
if(pipenetwarnings > 0)
log_mapping("build_pipeline(): [item.type] added to a pipenet while still having one. (pipes leading to the same spot stacking in one turf) around [AREACOORD(item)].")
pipenetwarnings--
if(pipenetwarnings == 0)
log_mapping("build_pipeline(): further messages about pipenets will be suppressed")

net.members += item
border += item

net.air.volume += item.volume
item.parent = net

if(item.air_temporary)
net.air.merge(item.air_temporary)
item.air_temporary = null

if (MC_TICK_CHECK)
return

///Removes a turf from processing, and causes its excited group to clean up so things properly adapt to the change
/datum/controller/subsystem/air/proc/remove_from_active(turf/open/T)
active_turfs -= T
Expand Down Expand Up @@ -448,6 +532,7 @@ SUBSYSTEM_DEF(air)
if (!ET.excited)
ET.excited = TRUE
. += ET

/turf/open/space/resolve_active_graph()
return list()

Expand All @@ -461,7 +546,9 @@ SUBSYSTEM_DEF(air)
// pipenet can be built.
/datum/controller/subsystem/air/proc/setup_pipenets()
for (var/obj/machinery/atmospherics/AM in atmos_machinery)
AM.build_network()
var/list/targets = AM.get_rebuild_targets()
for(var/datum/pipeline/build_off as anything in targets)
build_off.build_pipeline_blocking(AM)
CHECK_TICK

GLOBAL_LIST_EMPTY(colored_turfs)
Expand All @@ -484,9 +571,12 @@ GLOBAL_LIST_EMPTY(colored_images)

for(var/A in 1 to atmos_machines.len)
AM = atmos_machines[A]
AM.build_network()
var/list/targets = AM.get_rebuild_targets()
for(var/datum/pipeline/build_off as anything in targets)
build_off.build_pipeline_blocking(AM)
CHECK_TICK


/datum/controller/subsystem/air/proc/get_init_dirs(type, dir)
if(!pipe_init_dirs_cache[type])
pipe_init_dirs_cache[type] = list()
Expand Down
15 changes: 12 additions & 3 deletions code/modules/atmospherics/Atmospherics.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ Now then, into the breach.

The air controller is, at its core, quite simple, yet it is absolutely fundamental to the atmospheric system. The air controller is the clock which triggers all continuous actions within the atmos system, such as vents distributing air or gas moving between tiles. The actions taken by the air controller are quite simple, and will be enumerated here. Much of the substance of the air ticker is due to the game's master controller, whose intricacies I will not delve into for this document. I will however go into more detail about how SSAir in particular works in Chapter 6. In any case, this is a simplified list of the air controller's actions in a single tick:
1. Rebuild Pipenets
- Runs each time SSAir processes, sometimes out of order. It ensures that no pipenets sit unresolved or unbuilt
- Calls `build_network()` on each `/obj/machinery/atmospherics` in the `pipenets_needing_rebuilt` list
- Runs each time SSAir processes, sometimes out of order. It ensures that no pipeline sit unresolved or unbuilt
- Processes the `rebuild_queue` list into the `expansion_queue` list, and then builds a full pipeline piecemeal. We do a ton of fenagling here to reduce overrun
2. Pipenets
- Updates the internal gasmixes of attached pipe machinery, and reacts the gases in a pipeline
- Calls `process()` on each `/datum/pipenet` in the `networks` list
Expand Down Expand Up @@ -272,7 +272,7 @@ All of these are averages by the way.
* *`tick_overrun`* A percentage of how far past our allotted time we ran. This is what causes Time Dilation, it's bad.
* *`ticks`* The amount of subsystem fires it takes to run through all the subprocesses once.

The second line is the cost each subprocess contributed per full cycle, this is a rolling average. It'll give you a good feel for what is misbehaving.
The second line is the cost each subprocess contributed per full cycle, this is a rolling average. It'll give you a good feel for what is misbehaving. (The only exception to this is pipenet rebuilds, the last entry. Because of its nature as something that can happen at any time, it doesn't have a rolling average, instead it just displays the time it used last process)

The third line is the amount of "whatever" in each subprocess. Handy for noticing dupe bugs and crying at active turf cost. Speaking of, the last entry is the active turfs per overall cost. Not a great metric, but larger is better.

Expand Down Expand Up @@ -342,8 +342,17 @@ On that note, I'd like to be clear about something. In lines of connected pipes,

Oh, and pipelines react the gas mixture inside them, thought I should mention that.

### A short note on rebuilding

Everything that needs a pipeline should have it before it's allowed to do any processing. This is to prevent runtimes and shitcode related things.

The act of rebuilding a pipeline is quite expensive however, since it involves iterating over all the connected pipes/components.
That's why we go to such great pains to make sure no large amount of work is allowed to happen at once. It's in an attempt to avoid the excited group settling type of lag I discussed above. It's ok for atmos to lock up for a short period if the system isn't killing the game as a whole.


All the other behavior of pipes and pipe components are handled by atmos machinery. I'll give a brief rundown of how they're classified, but the details of each machine are left as an exercise to the reader.


#### Pipes

The raw pipes. They have some amount of nuance, mostly around layers, but it's not too tricky to deal with.
Expand Down
13 changes: 9 additions & 4 deletions code/modules/atmospherics/machinery/atmosmachinery.dm
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,9 @@
/// whether it can be painted
var/paintable = FALSE

///Is the thing being rebuilt by SSair or not. Prevents list blaot
var/rebuilding = FALSE

/obj/machinery/atmospherics/examine(mob/user)
. = ..()
if(is_type_in_list(src, GLOB.ventcrawl_machinery) && isliving(user))
Expand All @@ -68,7 +71,7 @@
nullifyNode(i)

SSair.stop_processing_machine(src)
SSair.pipenets_needing_rebuilt -= src
SSair.rebuild_queue -= src

if(pipe_vision_img)
qdel(pipe_vision_img)
Expand All @@ -79,8 +82,10 @@
/obj/machinery/atmospherics/proc/destroy_network()
return

/obj/machinery/atmospherics/proc/build_network()
// Called to build a network from this node
/**
* Returns a list of new pipelines that need to be built up
*/
/obj/machinery/atmospherics/proc/get_rebuild_targets()
return

/obj/machinery/atmospherics/proc/nullifyNode(i)
Expand Down Expand Up @@ -281,7 +286,7 @@
for(var/obj/machinery/atmospherics/A in nodes)
A.atmosinit()
A.addMember(src)
build_network()
SSair.add_to_rebuild_queue(src)

/obj/machinery/atmospherics/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs)
if(istype(arrived, /mob/living))
Expand Down
Loading
Loading