SS Conversion: Atoms, Machines, n' Mobs

This converts the machine and mob processes to the SMC. Additionally, it
adds the Atom subsystem, which handles all Initialize() calls in place
of the old gameticker. Due to incompatibility with our atmospherics
(FUCK OUR ATMOSPHERICS FOR FUCKING EVER JESUS CHRIST WHO THE FUCK MADE
THIS PIECE OF GODDAMN SHIT) atmospherics machines do not use
Initialize() as they should, instead opting for a custom atmos_init
proc that the air controller handles.
This commit is contained in:
tigercat2000
2018-04-28 17:55:15 -07:00
parent dabdbd4426
commit 7d8c9a731a
181 changed files with 765 additions and 571 deletions
+15 -23
View File
@@ -7,10 +7,9 @@ Pipelines and other atmospheric objects combine to form pipe_networks
Pipes -> Pipelines
Pipelines + Other Objects -> Pipe network
*/
GLOBAL_DATUM_INIT(pipe_icon_manager, /datum/pipe_icon_manager, new())
/obj/machinery/atmospherics
auto_init = 0
anchored = 1
layer = 2.4 //under wires with their 2.44
idle_power_usage = 0
@@ -29,15 +28,12 @@ Pipelines + Other Objects -> Pipe network
var/pipe_color
var/obj/item/pipe/stored
var/image/pipe_image
var/global/datum/pipe_icon_manager/icon_manager
/obj/machinery/atmospherics/New()
if(!armor)
armor = list(melee = 25, bullet = 10, laser = 10, energy = 100, bomb = 0, bio = 100, rad = 100)
..()
SSair.atmos_machinery += src
if(!icon_manager)
icon_manager = new()
if(!pipe_color)
pipe_color = color
@@ -45,12 +41,8 @@ Pipelines + Other Objects -> Pipe network
if(!pipe_color_check(pipe_color))
pipe_color = null
// No need for a tween worldstart roundstart handler - pipenet creation is
// handled there
/obj/machinery/atmospherics/initialize()
..()
/obj/machinery/atmospherics/proc/atmos_init()
if(can_unwrench)
stored = new(src, make_from = src)
@@ -73,9 +65,9 @@ Pipelines + Other Objects -> Pipe network
pipe_image.plane = HUD_PLANE
/obj/machinery/atmospherics/proc/check_icon_cache(var/safety = 0)
if(!istype(icon_manager))
if(!istype(GLOB.pipe_icon_manager))
if(!safety) //to prevent infinite loops
icon_manager = new()
GLOB.pipe_icon_manager = new()
check_icon_cache(1)
return 0
@@ -91,14 +83,14 @@ Pipelines + Other Objects -> Pipe network
/obj/machinery/atmospherics/proc/add_underlay(var/turf/T, var/obj/machinery/atmospherics/node, var/direction, var/icon_connect_type)
if(node)
if(T.intact && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe))
//underlays += icon_manager.get_atmos_icon("underlay_down", direction, color_cache_name(node))
underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "down" + icon_connect_type)
//underlays += GLOB.pipe_icon_manager.get_atmos_icon("underlay_down", direction, color_cache_name(node))
underlays += GLOB.pipe_icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "down" + icon_connect_type)
else
//underlays += icon_manager.get_atmos_icon("underlay_intact", direction, color_cache_name(node))
underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "intact" + icon_connect_type)
//underlays += GLOB.pipe_icon_manager.get_atmos_icon("underlay_intact", direction, color_cache_name(node))
underlays += GLOB.pipe_icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "intact" + icon_connect_type)
else
//underlays += icon_manager.get_atmos_icon("underlay_exposed", direction, pipe_color)
underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "exposed" + icon_connect_type)
//underlays += GLOB.pipe_icon_manager.get_atmos_icon("underlay_exposed", direction, pipe_color)
underlays += GLOB.pipe_icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "exposed" + icon_connect_type)
/obj/machinery/atmospherics/proc/update_underlays()
if(check_icon_cache())
@@ -231,10 +223,10 @@ Pipelines + Other Objects -> Pipe network
var/turf/T = loc
level = T.intact ? 2 : 1
add_fingerprint(usr)
initialize()
atmos_init()
var/list/nodes = pipeline_expansion()
for(var/obj/machinery/atmospherics/A in nodes)
A.initialize()
A.atmos_init()
A.addMember(src)
build_network()
@@ -320,11 +312,11 @@ Pipelines + Other Objects -> Pipe network
/obj/machinery/atmospherics/proc/add_underlay_adapter(var/turf/T, var/obj/machinery/atmospherics/node, var/direction, var/icon_connect_type) //modified from add_underlay, does not make exposed underlays
if(node)
if(T.intact && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe))
underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "down" + icon_connect_type)
underlays += GLOB.pipe_icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "down" + icon_connect_type)
else
underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "intact" + icon_connect_type)
underlays += GLOB.pipe_icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "intact" + icon_connect_type)
else
underlays += icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "retracted" + icon_connect_type)
underlays += GLOB.pipe_icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "retracted" + icon_connect_type)
/obj/machinery/atmospherics/singularity_pull(S, current_size)
if(current_size >= STAGE_FIVE)
@@ -41,7 +41,7 @@
nullifyPipenet(parent2)
return ..()
/obj/machinery/atmospherics/binary/initialize()
/obj/machinery/atmospherics/binary/atmos_init()
..()
var/node2_connect = dir
var/node1_connect = turn(dir, 180)
@@ -48,7 +48,7 @@
radio_connection = null
return ..()
/obj/machinery/atmospherics/binary/dp_vent_pump/initialize()
/obj/machinery/atmospherics/binary/dp_vent_pump/atmos_init()
..()
if(frequency)
set_frequency(frequency)
@@ -90,7 +90,7 @@
else
vent_icon += "[on ? "[pump_direction ? "out" : "in"]" : "off"]"
overlays += icon_manager.get_atmos_icon("device", , , vent_icon)
overlays += GLOB.pipe_icon_manager.get_atmos_icon("device", , , vent_icon)
/obj/machinery/atmospherics/binary/dp_vent_pump/update_underlays()
if(..())
@@ -16,7 +16,7 @@
var/id = null
var/datum/radio_frequency/radio_connection
/obj/machinery/atmospherics/binary/passive_gate/initialize()
/obj/machinery/atmospherics/binary/passive_gate/atmos_init()
..()
if(frequency)
set_frequency(frequency)
@@ -110,7 +110,7 @@ Thus, the two variables affect pump operation are set in New():
radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
return 1
/obj/machinery/atmospherics/binary/pump/initialize()
/obj/machinery/atmospherics/binary/pump/atmos_init()
..()
if(frequency)
set_frequency(frequency)
@@ -109,7 +109,7 @@
if(frequency)
radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA)
/obj/machinery/atmospherics/binary/valve/digital/initialize()
/obj/machinery/atmospherics/binary/valve/digital/atmos_init()
..()
if(frequency)
set_frequency(frequency)
@@ -38,7 +38,7 @@ Thus, the two variables affect pump operation are set in New():
on = 1
icon_state = "map_on"
/obj/machinery/atmospherics/binary/volume_pump/initialize()
/obj/machinery/atmospherics/binary/volume_pump/atmos_init()
..()
set_frequency(frequency)
@@ -40,9 +40,9 @@
/datum/omni_port/proc/connect()
if(node)
return
master.initialize()
master.atmos_init()
if(node)
node.initialize()
node.atmos_init()
node.addMember(master)
master.build_network()
@@ -56,7 +56,7 @@
nullifyPipenet(P.parent)
return ..()
/obj/machinery/atmospherics/omni/initialize()
/obj/machinery/atmospherics/omni/atmos_init()
..()
for(var/datum/omni_port/P in ports)
if(P.node || P.mode == 0)
@@ -143,11 +143,11 @@
//directional icons are layers 1-4, with the core icon on layer 5
if(core_icon)
overlays_off[5] = icon_manager.get_atmos_icon("omni", , , core_icon)
overlays_on[5] = icon_manager.get_atmos_icon("omni", , , core_icon + "_glow")
overlays_off[5] = GLOB.pipe_icon_manager.get_atmos_icon("omni", , , core_icon)
overlays_on[5] = GLOB.pipe_icon_manager.get_atmos_icon("omni", , , core_icon + "_glow")
overlays_error[1] = icon_manager.get_atmos_icon("omni", , , core_icon)
overlays_error[2] = icon_manager.get_atmos_icon("omni", , , "error")
overlays_error[1] = GLOB.pipe_icon_manager.get_atmos_icon("omni", , , core_icon)
overlays_error[2] = GLOB.pipe_icon_manager.get_atmos_icon("omni", , , "error")
/obj/machinery/atmospherics/omni/proc/update_port_icons()
if(!check_icon_cache())
@@ -203,19 +203,19 @@
ic_on += "_filter"
ic_off += "_out"
ic_on = icon_manager.get_atmos_icon("omni", , , ic_on)
ic_off = icon_manager.get_atmos_icon("omni", , , ic_off)
ic_on = GLOB.pipe_icon_manager.get_atmos_icon("omni", , , ic_on)
ic_off = GLOB.pipe_icon_manager.get_atmos_icon("omni", , , ic_off)
var/pipe_state
var/turf/T = get_turf(src)
if(!istype(T))
return
if(T.intact && istype(P.node, /obj/machinery/atmospherics/pipe) && P.node.level == 1 )
//pipe_state = icon_manager.get_atmos_icon("underlay_down", P.dir, color_cache_name(P.node))
pipe_state = icon_manager.get_atmos_icon("underlay", P.dir, color_cache_name(P.node), "down")
//pipe_state = GLOB.pipe_icon_manager.get_atmos_icon("underlay_down", P.dir, color_cache_name(P.node))
pipe_state = GLOB.pipe_icon_manager.get_atmos_icon("underlay", P.dir, color_cache_name(P.node), "down")
else
//pipe_state = icon_manager.get_atmos_icon("underlay_intact", P.dir, color_cache_name(P.node))
pipe_state = icon_manager.get_atmos_icon("underlay", P.dir, color_cache_name(P.node), "intact")
//pipe_state = GLOB.pipe_icon_manager.get_atmos_icon("underlay_intact", P.dir, color_cache_name(P.node))
pipe_state = GLOB.pipe_icon_manager.get_atmos_icon("underlay", P.dir, color_cache_name(P.node), "intact")
return list("on_icon" = ic_on, "off_icon" = ic_off, "pipe_icon" = pipe_state)
@@ -241,6 +241,7 @@
for(var/datum/omni_port/P in ports)
if(!P.parent)
P.parent = new /datum/pipeline()
log_debug("[P.type] \[\ref[P]] added to parent (omni_base, 244)")
P.parent.build_pipeline(src)
..()
@@ -282,6 +283,7 @@
for(var/datum/omni_port/PO in ports)
if(A == PO.node)
PO.parent = P
log_debug("[PO.type] \[\ref[PO]] added to parent (omni_base, 286)")
/obj/machinery/atmospherics/omni/returnPipenet(obj/machinery/atmospherics/A)
for(var/datum/omni_port/P in ports)
@@ -292,6 +294,7 @@
for(var/datum/omni_port/P in ports)
if(Old == P.parent)
P.parent = New
log_debug("[P.type] \[\ref[P]] added to parent (omni_base, 297)")
/obj/machinery/atmospherics/omni/process_atmos()
@@ -149,7 +149,7 @@ Filter types:
return 1
/obj/machinery/atmospherics/trinary/filter/initialize()
/obj/machinery/atmospherics/trinary/filter/atmos_init()
set_frequency(frequency)
..()
@@ -66,7 +66,7 @@
nullifyPipenet(parent3)
return ..()
/obj/machinery/atmospherics/trinary/initialize()
/obj/machinery/atmospherics/trinary/atmos_init()
..()
//Mixer:
//1 and 2 is input
@@ -156,7 +156,7 @@
if(frequency)
radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA)
/obj/machinery/atmospherics/trinary/tvalve/digital/initialize()
/obj/machinery/atmospherics/trinary/tvalve/digital/atmos_init()
..()
if(frequency)
set_frequency(frequency)
@@ -20,7 +20,7 @@
return
/obj/machinery/atmospherics/unary/heat_exchanger/initialize()
/obj/machinery/atmospherics/unary/heat_exchanger/atmos_init()
if(!partner)
var/partner_connect = turn(dir,180)
@@ -120,7 +120,7 @@
return 1
/obj/machinery/atmospherics/unary/outlet_injector/initialize()
/obj/machinery/atmospherics/unary/outlet_injector/atmos_init()
..()
set_frequency(frequency)
@@ -22,7 +22,7 @@
nullifyPipenet(parent)
return ..()
/obj/machinery/atmospherics/unary/initialize()
/obj/machinery/atmospherics/unary/atmos_init()
..()
for(var/obj/machinery/atmospherics/target in get_step(src, dir))
if(target.initialize_directions & get_dir(target,src))
@@ -43,9 +43,9 @@
node.disconnect(src)
node = null
nullifyPipenet(parent)
initialize()
atmos_init()
if(node)
node.initialize()
node.atmos_init()
node.addMember(src)
build_network()
. = 1
@@ -54,6 +54,7 @@
if(!parent)
parent = new /datum/pipeline()
parent.build_pipeline(src)
log_debug("[type] \[\ref[src]] added to parent (unary_base, 57)")
..()
/obj/machinery/atmospherics/unary/disconnect(obj/machinery/atmospherics/reference)
@@ -79,6 +80,7 @@
/obj/machinery/atmospherics/unary/setPipenet(datum/pipeline/P)
parent = P
log_debug("[type] \[\ref[src]] added to parent (unary_base, 83)")
/obj/machinery/atmospherics/unary/returnPipenet()
return parent
@@ -86,6 +88,7 @@
/obj/machinery/atmospherics/unary/replacePipenet(datum/pipeline/Old, datum/pipeline/New)
if(Old == parent)
parent = New
log_debug("[type] \[\ref[src]] added to parent (unary_base, 91)")
/obj/machinery/atmospherics/unary/unsafe_pressure_release(var/mob/user,var/pressures)
..()
@@ -98,7 +98,7 @@
else
vent_icon += "[on ? "[pump_direction ? "out" : "in"]" : "off"]"
overlays += icon_manager.get_atmos_icon("device", , , vent_icon)
overlays += GLOB.pipe_icon_manager.get_atmos_icon("device", , , vent_icon)
update_pipe_image()
@@ -223,7 +223,7 @@
return 1
/obj/machinery/atmospherics/unary/vent_pump/initialize()
/obj/machinery/atmospherics/unary/vent_pump/atmos_init()
..()
//some vents work his own special way
@@ -109,7 +109,7 @@
if(welded)
scrubber_icon = "scrubberweld"
overlays += icon_manager.get_atmos_icon("device", , , scrubber_icon)
overlays += GLOB.pipe_icon_manager.get_atmos_icon("device", , , scrubber_icon)
update_pipe_image()
/obj/machinery/atmospherics/unary/vent_scrubber/update_underlays()
@@ -169,7 +169,7 @@
return 1
/obj/machinery/atmospherics/unary/vent_scrubber/initialize()
/obj/machinery/atmospherics/unary/vent_scrubber/atmos_init()
..()
radio_filter_in = frequency==initial(frequency)?(RADIO_FROM_AIRALARM):null
radio_filter_out = frequency==initial(frequency)?(RADIO_TO_AIRALARM):null
+5 -10
View File
@@ -57,11 +57,7 @@ var/pipenetwarnings = 10
if(!members.Find(item))
if(item.parent)
if(pipenetwarnings > 0)
error("[item.type] added to a pipenet while still having one (pipes leading to the same spot stacking in one turf). Nearby: [item.x], [item.y], [item.z].")
pipenetwarnings -= 1
if(pipenetwarnings == 0)
error("Further messages about pipenets will be suppressed.")
log_runtime(EXCEPTION("[item.type] \[\ref[item]] added to a pipenet while still having one ([item.parent]) (pipes leading to the same spot stacking in one turf). Nearby: [item.x], [item.y], [item.z]."))
members += item
possible_expansions += item
@@ -90,6 +86,7 @@ var/pipenetwarnings = 10
if(istype(A, /obj/machinery/atmospherics/pipe))
var/obj/machinery/atmospherics/pipe/P = A
P.parent = src
log_debug("[P.type] \[\ref[P]] added to parent (datum_pipeline, 89)")
var/list/adjacent = P.pipeline_expansion()
for(var/obj/machinery/atmospherics/pipe/I in adjacent)
if(I.parent == src)
@@ -108,6 +105,7 @@ var/pipenetwarnings = 10
members.Add(E.members)
for(var/obj/machinery/atmospherics/pipe/S in E.members)
S.parent = src
log_debug("[S.type] \[\ref[S]] added to parent (datum_pipeline, 108)")
air.merge(E.air)
for(var/obj/machinery/atmospherics/A in E.other_atmosmch)
A.replacePipenet(E, src)
@@ -118,15 +116,12 @@ var/pipenetwarnings = 10
qdel(E)
/obj/machinery/atmospherics/proc/addMember(obj/machinery/atmospherics/A)
return
var/datum/pipeline/P = returnPipenet(A)
P.addMember(A, src)
/obj/machinery/atmospherics/pipe/addMember(obj/machinery/atmospherics/A)
parent.addMember(A, src)
/obj/machinery/atmospherics/addMember(obj/machinery/atmospherics/A)
var/datum/pipeline/P = returnPipenet(A)
P.addMember(A, src)
/datum/pipeline/proc/temporarily_store_air()
//Update individual gas_mixtures by volume ratio
+2 -2
View File
@@ -61,9 +61,9 @@
alpha = 255
overlays.Cut()
overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, "cap" + icon_connect_type)
overlays += GLOB.pipe_icon_manager.get_atmos_icon("pipe", , pipe_color, "cap" + icon_connect_type)
/obj/machinery/atmospherics/pipe/cap/initialize()
/obj/machinery/atmospherics/pipe/cap/atmos_init()
..()
for(var/obj/machinery/atmospherics/target in get_step(src, dir))
if(target.initialize_directions & get_dir(target,src))
+3 -3
View File
@@ -32,7 +32,7 @@
if(WEST)
initialize_directions = NORTH|EAST|SOUTH
/obj/machinery/atmospherics/pipe/manifold/initialize()
/obj/machinery/atmospherics/pipe/manifold/atmos_init()
..()
for(var/D in cardinal)
if(D == dir)
@@ -122,8 +122,8 @@
alpha = 255
overlays.Cut()
overlays += icon_manager.get_atmos_icon("manifold", , pipe_color, "core" + icon_connect_type)
overlays += icon_manager.get_atmos_icon("manifold", , , "clamps" + icon_connect_type)
overlays += GLOB.pipe_icon_manager.get_atmos_icon("manifold", , pipe_color, "core" + icon_connect_type)
overlays += GLOB.pipe_icon_manager.get_atmos_icon("manifold", , , "clamps" + icon_connect_type)
underlays.Cut()
var/turf/T = get_turf(src)
+3 -3
View File
@@ -95,8 +95,8 @@
alpha = 255
overlays.Cut()
overlays += icon_manager.get_atmos_icon("manifold", , pipe_color, "4way" + icon_connect_type)
overlays += icon_manager.get_atmos_icon("manifold", , , "clamps_4way" + icon_connect_type)
overlays += GLOB.pipe_icon_manager.get_atmos_icon("manifold", , pipe_color, "4way" + icon_connect_type)
overlays += GLOB.pipe_icon_manager.get_atmos_icon("manifold", , , "clamps_4way" + icon_connect_type)
underlays.Cut()
var/turf/T = get_turf(src)
@@ -134,7 +134,7 @@
if(level == 1 && istype(loc, /turf/simulated))
invisibility = i ? 101 : 0
/obj/machinery/atmospherics/pipe/manifold4w/initialize()
/obj/machinery/atmospherics/pipe/manifold4w/atmos_init()
..()
for(var/D in cardinal)
for(var/obj/machinery/atmospherics/target in get_step(src, D))
@@ -43,7 +43,7 @@
if(SOUTHWEST)
initialize_directions = SOUTH|WEST
/obj/machinery/atmospherics/pipe/simple/initialize(initPipe = 1)
/obj/machinery/atmospherics/pipe/simple/atmos_init(initPipe = 1)
..()
if(initPipe)
normalize_dir()
@@ -145,9 +145,9 @@
overlays.Cut()
if(node1 && node2)
overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, pipe_icon + "intact" + icon_connect_type)
overlays += GLOB.pipe_icon_manager.get_atmos_icon("pipe", , pipe_color, pipe_icon + "intact" + icon_connect_type)
else
overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, pipe_icon + "exposed[node1?1:0][node2?1:0]" + icon_connect_type)
overlays += GLOB.pipe_icon_manager.get_atmos_icon("pipe", , pipe_color, pipe_icon + "exposed[node1?1:0][node2?1:0]" + icon_connect_type)
// A check to make sure both nodes exist - self-delete if they aren't present
/obj/machinery/atmospherics/pipe/simple/check_nodes_exist()
@@ -61,7 +61,7 @@
initialize_directions_he = initialize_directions // The auto-detection from /pipe is good enough for a simple HE pipe
color = "#404040"
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/initialize(initPipe = 1)
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/atmos_init(initPipe = 1)
..(0)
if(initPipe)
normalize_dir()
@@ -110,7 +110,7 @@
initialize_directions = EAST
initialize_directions_he = WEST
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction/initialize()
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction/atmos_init()
..(0)
for(var/obj/machinery/atmospherics/target in get_step(src,initialize_directions))
if(target.initialize_directions & get_dir(target,src))
@@ -34,7 +34,7 @@
alpha = 255
overlays.Cut()
overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, "universal")
overlays += GLOB.pipe_icon_manager.get_atmos_icon("pipe", , pipe_color, "universal")
underlays.Cut()
if(node1)
@@ -45,7 +45,7 @@
alpha = 255
overlays.Cut()
overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, "universal")
overlays += GLOB.pipe_icon_manager.get_atmos_icon("pipe", , pipe_color, "universal")
underlays.Cut()
if(node1)