diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm index 1024bb1229..430f7f29b3 100644 --- a/code/__DEFINES/atmospherics.dm +++ b/code/__DEFINES/atmospherics.dm @@ -129,38 +129,12 @@ #define MAX_OUTPUT_PRESSURE 4500 // (kPa) What pressure pumps and powered equipment max out at. #define MAX_TRANSFER_RATE 200 // (L/s) Maximum speed powered equipment can work at. -//used for device_type vars; used by DEVICE_TYPE_LOOP +//used for device_type vars #define UNARY 1 #define BINARY 2 #define TRINARY 3 #define QUATERNARY 4 -//TODO: finally remove this bullshit -//this is the standard for loop used by all sorts of atmos machinery procs -#define DEVICE_TYPE_LOOP var/I in 1 to device_type - -//defines for the various machinery lists -//NODE_I, AIR_I, PARENT_I are used within DEVICE_TYPE_LOOP - -//nodes list - all atmos machinery -#define NODE1 nodes[1] -#define NODE2 nodes[2] -#define NODE3 nodes[3] -#define NODE4 nodes[4] -#define NODE_I nodes[I] - -//airs list - components only -#define AIR1 airs[1] -#define AIR2 airs[2] -#define AIR3 airs[3] -#define AIR_I airs[I] - -//parents list - components only -#define PARENT1 parents[1] -#define PARENT2 parents[2] -#define PARENT3 parents[3] -#define PARENT_I parents[I] - //TANKS #define TANK_MELT_TEMPERATURE 1000000 //temperature in kelvins at which a tank will start to melt #define TANK_LEAK_PRESSURE (30.*ONE_ATMOSPHERE) //Tank starts leaking diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 707ef6a9c1..95a7b3c63d 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -108,6 +108,7 @@ #define AI_ON 1 #define AI_IDLE 2 #define AI_OFF 3 +#define AI_Z_OFF 4 //determines if a mob can smash through it #define ENVIRONMENT_SMASH_NONE 0 diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 5a0dded276..39f9722486 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -70,6 +70,40 @@ #define INIT_ORDER_SQUEAK -40 #define INIT_ORDER_PERSISTENCE -100 +// Subsystem fire priority, from lowest to highest priority +// If the subsystem isn't listed here it's either DEFAULT or PROCESS (if it's a processing subsystem child) + +#define FIRE_PRIORITY_IDLE_NPC 1 +#define FIRE_PRIORITY_SERVER_MAINT 1 + +#define FIRE_PRIORITY_GARBAGE 4 +#define FIRE_PRIORITY_RESEARCH 4 +#define FIRE_PRIORITY_AIR 5 +#define FIRE_PRIORITY_NPC 5 +#define FIRE_PRIORITY_PROCESS 6 +#define FIRE_PRIORITY_THROWING 6 +#define FIRE_PRIORITY_FLIGHTPACKS 7 +#define FIRE_PRIORITY_SPACEDRIFT 7 +#define FIRE_PRIOTITY_SMOOTHING 8 +#define FIRE_PRIORITY_ORBIT 8 +#define FIRE_PRIORITY_OBJ 9 +#define FIRE_PRIORUTY_FIELDS 9 +#define FIRE_PRIORITY_ACID 9 +#define FIRE_PRIOTITY_BURNING 9 +#define FIRE_PRIORITY_INBOUNDS 9 + +#define FIRE_PRIORITY_DEFAULT 10 + +#define FIRE_PRIORITY_PARALLAX 11 +#define FIRE_PRIORITY_NETWORKS 12 +#define FIRE_PRIORITY_MOBS 13 +#define FIRE_PRIORITY_TGUI 14 + +#define FIRE_PRIORITY_TICKER 19 +#define FIRE_PRIORITY_OVERLAYS 20 + +#define FIRE_PRIORITY_INPUT 100 // This must always always be the max highest priority. Player input must never be lost. + // SS runlevels #define RUNLEVEL_INIT 0 diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm index 89e4481284..c2acea2753 100644 --- a/code/_globalvars/lists/mobs.dm +++ b/code/_globalvars/lists/mobs.dm @@ -22,7 +22,7 @@ GLOBAL_LIST_EMPTY(carbon_list) //all instances of /mob/living/carbon and subt GLOBAL_LIST_EMPTY(ai_list) GLOBAL_LIST_EMPTY(pai_list) GLOBAL_LIST_EMPTY(available_ai_shells) -GLOBAL_LIST_INIT(simple_animals, list(list(),list(),list())) // One for each AI_* status define +GLOBAL_LIST_INIT(simple_animals, list(list(),list(),list(),list())) // One for each AI_* status define GLOBAL_LIST_EMPTY(spidermobs) //all sentient spider mobs GLOBAL_LIST_EMPTY(bots_list) diff --git a/code/controllers/subsystem.dm b/code/controllers/subsystem.dm index 8d450e3a8e..c3779dc98f 100644 --- a/code/controllers/subsystem.dm +++ b/code/controllers/subsystem.dm @@ -4,7 +4,7 @@ name = "fire coderbus" //name of the subsystem var/init_order = INIT_ORDER_DEFAULT //order of initialization. Higher numbers are initialized first, lower numbers later. Use defines in __DEFINES/subsystems.dm for easy understanding of order. var/wait = 20 //time to wait (in deciseconds) between each call to fire(). Must be a positive integer. - var/priority = 50 //When mutiple subsystems need to run in the same tick, higher priority subsystems will run first and be given a higher share of the tick before MC_TICK_CHECK triggers a sleep + var/priority = FIRE_PRIORITY_DEFAULT //When mutiple subsystems need to run in the same tick, higher priority subsystems will run first and be given a higher share of the tick before MC_TICK_CHECK triggers a sleep var/flags = 0 //see MC.dm in __DEFINES Most flags must be set on world start to take full effect. (You can also restart the mc to force them to process again) diff --git a/code/controllers/subsystem/acid.dm b/code/controllers/subsystem/acid.dm index a83afb3923..e3c415960b 100644 --- a/code/controllers/subsystem/acid.dm +++ b/code/controllers/subsystem/acid.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(acid) name = "Acid" - priority = 40 + priority = FIRE_PRIORITY_ACID flags = SS_NO_INIT|SS_BACKGROUND runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm index 59b6fc34ef..1775d470b0 100644 --- a/code/controllers/subsystem/air.dm +++ b/code/controllers/subsystem/air.dm @@ -9,7 +9,7 @@ SUBSYSTEM_DEF(air) name = "Atmospherics" init_order = INIT_ORDER_AIR - priority = 20 + priority = FIRE_PRIORITY_AIR wait = 5 flags = SS_BACKGROUND runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME diff --git a/code/controllers/subsystem/fire_burning.dm b/code/controllers/subsystem/fire_burning.dm index 73358000f1..db6dc6513e 100644 --- a/code/controllers/subsystem/fire_burning.dm +++ b/code/controllers/subsystem/fire_burning.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(fire_burning) name = "Fire Burning" - priority = 40 + priority = FIRE_PRIOTITY_BURNING flags = SS_NO_INIT|SS_BACKGROUND runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME diff --git a/code/controllers/subsystem/garbage.dm b/code/controllers/subsystem/garbage.dm index 6203f1b474..4faf234ffd 100644 --- a/code/controllers/subsystem/garbage.dm +++ b/code/controllers/subsystem/garbage.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(garbage) name = "Garbage" - priority = 15 + priority = FIRE_PRIORITY_GARBAGE wait = 2 SECONDS flags = SS_POST_FIRE_TIMING|SS_BACKGROUND|SS_NO_INIT runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY diff --git a/code/controllers/subsystem/icon_smooth.dm b/code/controllers/subsystem/icon_smooth.dm index 84df089973..d0ad2ffbc3 100644 --- a/code/controllers/subsystem/icon_smooth.dm +++ b/code/controllers/subsystem/icon_smooth.dm @@ -2,7 +2,7 @@ SUBSYSTEM_DEF(icon_smooth) name = "Icon Smoothing" init_order = INIT_ORDER_ICON_SMOOTHING wait = 1 - priority = 35 + priority = FIRE_PRIOTITY_SMOOTHING flags = SS_TICKER var/list/smooth_queue = list() diff --git a/code/controllers/subsystem/idlenpcpool.dm b/code/controllers/subsystem/idlenpcpool.dm index 49846e6c9d..a033512d58 100644 --- a/code/controllers/subsystem/idlenpcpool.dm +++ b/code/controllers/subsystem/idlenpcpool.dm @@ -1,15 +1,21 @@ SUBSYSTEM_DEF(idlenpcpool) name = "Idling NPC Pool" - flags = SS_POST_FIRE_TIMING|SS_NO_INIT|SS_BACKGROUND - priority = 10 + flags = SS_POST_FIRE_TIMING|SS_BACKGROUND + priority = FIRE_PRIORITY_IDLE_NPC wait = 60 runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME var/list/currentrun = list() + var/static/list/idle_mobs_by_zlevel[][] /datum/controller/subsystem/idlenpcpool/stat_entry() var/list/idlelist = GLOB.simple_animals[AI_IDLE] - ..("IdleNPCS:[idlelist.len]") + var/list/zlist = GLOB.simple_animals[AI_Z_OFF] + ..("IdleNPCS:[idlelist.len]|Z:[zlist.len]") + +/datum/controller/subsystem/idlenpcpool/Initialize(start_timeofday) + idle_mobs_by_zlevel = new /list(world.maxz,0) + return ..() /datum/controller/subsystem/idlenpcpool/fire(resumed = FALSE) @@ -24,6 +30,9 @@ SUBSYSTEM_DEF(idlenpcpool) while(currentrun.len) var/mob/living/simple_animal/SA = currentrun[currentrun.len] --currentrun.len + if (!SA) + GLOB.simple_animals[AI_IDLE] -= SA + continue if(!SA.ckey) if(SA.stat != DEAD) @@ -32,3 +41,4 @@ SUBSYSTEM_DEF(idlenpcpool) SA.consider_wakeup() if (MC_TICK_CHECK) return + diff --git a/code/controllers/subsystem/inbounds.dm b/code/controllers/subsystem/inbounds.dm index 16e0f53028..63063c258f 100644 --- a/code/controllers/subsystem/inbounds.dm +++ b/code/controllers/subsystem/inbounds.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(inbounds) name = "Inbounds" - priority = 40 + priority = FIRE_PRIORITY_INBOUNDS flags = SS_NO_INIT runlevels = RUNLEVEL_GAME diff --git a/code/controllers/subsystem/input.dm b/code/controllers/subsystem/input.dm index 5dbb642f2e..f553d66307 100644 --- a/code/controllers/subsystem/input.dm +++ b/code/controllers/subsystem/input.dm @@ -2,7 +2,7 @@ SUBSYSTEM_DEF(input) name = "Input" wait = 1 //SS_TICKER means this runs every tick flags = SS_TICKER | SS_NO_INIT - priority = 1000 + priority = FIRE_PRIORITY_INPUT runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY /datum/controller/subsystem/input/fire() diff --git a/code/controllers/subsystem/mobs.dm b/code/controllers/subsystem/mobs.dm index bcdb1af8ed..14ad19e1ea 100644 --- a/code/controllers/subsystem/mobs.dm +++ b/code/controllers/subsystem/mobs.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(mobs) name = "Mobs" - priority = 100 + priority = FIRE_PRIORITY_MOBS flags = SS_KEEP_TIMING runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME diff --git a/code/controllers/subsystem/npcpool.dm b/code/controllers/subsystem/npcpool.dm index 6ee4626f25..ca050cb9b2 100644 --- a/code/controllers/subsystem/npcpool.dm +++ b/code/controllers/subsystem/npcpool.dm @@ -6,7 +6,7 @@ SUBSYSTEM_DEF(npcpool) name = "NPC Pool" flags = SS_POST_FIRE_TIMING|SS_NO_INIT|SS_BACKGROUND - priority = 20 + priority = FIRE_PRIORITY_NPC runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME var/list/canBeUsed = list() diff --git a/code/controllers/subsystem/orbit.dm b/code/controllers/subsystem/orbit.dm index 6184bb005b..581b7821b2 100644 --- a/code/controllers/subsystem/orbit.dm +++ b/code/controllers/subsystem/orbit.dm @@ -1,44 +1,42 @@ -SUBSYSTEM_DEF(orbit) - name = "Orbits" - priority = 35 - wait = 2 - flags = SS_NO_INIT|SS_TICKER - - var/list/currentrun = list() - var/list/processing = list() - -/datum/controller/subsystem/orbit/stat_entry() - ..("P:[processing.len]") - - -/datum/controller/subsystem/orbit/fire(resumed = 0) - if (!resumed) - src.currentrun = processing.Copy() - - //cache for sanic speed (lists are references anyways) - var/list/currentrun = src.currentrun - - while (currentrun.len) - var/datum/orbit/O = currentrun[currentrun.len] - currentrun.len-- - if (!O) - processing -= O - if (MC_TICK_CHECK) - return - continue - if (!O.orbiter) - qdel(O) - if (MC_TICK_CHECK) - return - continue - if (O.lastprocess >= world.time) //we already checked recently - if (MC_TICK_CHECK) - return - continue - var/targetloc = get_turf(O.orbiting) - if (targetloc != O.lastloc || O.orbiter.loc != targetloc) - O.Check(targetloc) - if (MC_TICK_CHECK) - return - - +SUBSYSTEM_DEF(orbit) + name = "Orbits" + priority = FIRE_PRIORITY_ORBIT + wait = 2 + flags = SS_NO_INIT|SS_TICKER + + var/list/currentrun = list() + var/list/processing = list() + +/datum/controller/subsystem/orbit/stat_entry() + ..("P:[processing.len]") + + +/datum/controller/subsystem/orbit/fire(resumed = 0) + if (!resumed) + src.currentrun = processing.Copy() + + //cache for sanic speed (lists are references anyways) + var/list/currentrun = src.currentrun + + while (currentrun.len) + var/datum/orbit/O = currentrun[currentrun.len] + currentrun.len-- + if (!O) + processing -= O + if (MC_TICK_CHECK) + return + continue + if (!O.orbiter) + qdel(O) + if (MC_TICK_CHECK) + return + continue + if (O.lastprocess >= world.time) //we already checked recently + if (MC_TICK_CHECK) + return + continue + var/targetloc = get_turf(O.orbiting) + if (targetloc != O.lastloc || O.orbiter.loc != targetloc) + O.Check(targetloc) + if (MC_TICK_CHECK) + return diff --git a/code/controllers/subsystem/overlays.dm b/code/controllers/subsystem/overlays.dm index d0b2e8c303..23edb3e487 100644 --- a/code/controllers/subsystem/overlays.dm +++ b/code/controllers/subsystem/overlays.dm @@ -2,7 +2,7 @@ SUBSYSTEM_DEF(overlays) name = "Overlay" flags = SS_TICKER wait = 1 - priority = 500 + priority = FIRE_PRIORITY_OVERLAYS init_order = INIT_ORDER_OVERLAY runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_SETUP diff --git a/code/controllers/subsystem/parallax.dm b/code/controllers/subsystem/parallax.dm index 4fa843906c..f8f2d463ba 100644 --- a/code/controllers/subsystem/parallax.dm +++ b/code/controllers/subsystem/parallax.dm @@ -2,7 +2,7 @@ SUBSYSTEM_DEF(parallax) name = "Parallax" wait = 2 flags = SS_POST_FIRE_TIMING | SS_BACKGROUND | SS_NO_INIT - priority = 65 + priority = FIRE_PRIORITY_PARALLAX runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT var/list/currentrun diff --git a/code/controllers/subsystem/processing/fields.dm b/code/controllers/subsystem/processing/fields.dm index 6a878fa142..b6996377b5 100644 --- a/code/controllers/subsystem/processing/fields.dm +++ b/code/controllers/subsystem/processing/fields.dm @@ -1,6 +1,6 @@ PROCESSING_SUBSYSTEM_DEF(fields) name = "Fields" wait = 2 - priority = 40 + priority = FIRE_PRIORUTY_FIELDS flags = SS_KEEP_TIMING | SS_NO_INIT runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME diff --git a/code/controllers/subsystem/processing/flightpacks.dm b/code/controllers/subsystem/processing/flightpacks.dm index 1d85811878..2981789338 100644 --- a/code/controllers/subsystem/processing/flightpacks.dm +++ b/code/controllers/subsystem/processing/flightpacks.dm @@ -1,6 +1,6 @@ PROCESSING_SUBSYSTEM_DEF(flightpacks) name = "Flightpack Movement" - priority = 30 + priority = FIRE_PRIORITY_FLIGHTPACKS wait = 2 stat_tag = "FM" flags = SS_NO_INIT|SS_TICKER|SS_KEEP_TIMING diff --git a/code/controllers/subsystem/processing/networks.dm b/code/controllers/subsystem/processing/networks.dm index 69c5fe1b2b..a3f01efd0c 100644 --- a/code/controllers/subsystem/processing/networks.dm +++ b/code/controllers/subsystem/processing/networks.dm @@ -1,36 +1,36 @@ -PROCESSING_SUBSYSTEM_DEF(networks) - name = "Networks" - priority = 80 - wait = 1 - stat_tag = "NET" - flags = SS_KEEP_TIMING - init_order = INIT_ORDER_NETWORKS - var/datum/ntnet/station/station_network - var/assignment_hardware_id = HID_RESTRICTED_END - var/list/networks_by_id = list() //id = network - var/list/interfaces_by_id = list() //hardware id = component interface - -/datum/controller/subsystem/processing/networks/Initialize() - station_network = new - station_network.register_map_supremecy() - . = ..() - -/datum/controller/subsystem/processing/networks/proc/register_network(datum/ntnet/network) - if(!networks_by_id[network.network_id]) - networks_by_id[network.network_id] = network - return TRUE - return FALSE - -/datum/controller/subsystem/processing/networks/proc/unregister_network(datum/ntnet/network) - networks_by_id -= network.network_id - return TRUE - -/datum/controller/subsystem/processing/networks/proc/register_interface(datum/component/ntnet_interface/D) - if(!interfaces_by_id[D.hardware_id]) - interfaces_by_id[D.hardware_id] = D - return TRUE - return FALSE - -/datum/controller/subsystem/processing/networks/proc/unregister_interface(datum/component/ntnet_interface/D) - interfaces_by_id -= D.hardware_id - return TRUE +PROCESSING_SUBSYSTEM_DEF(networks) + name = "Networks" + priority = FIRE_PRIORITY_NETWORKS + wait = 1 + stat_tag = "NET" + flags = SS_KEEP_TIMING + init_order = INIT_ORDER_NETWORKS + var/datum/ntnet/station/station_network + var/assignment_hardware_id = HID_RESTRICTED_END + var/list/networks_by_id = list() //id = network + var/list/interfaces_by_id = list() //hardware id = component interface + +/datum/controller/subsystem/processing/networks/Initialize() + station_network = new + station_network.register_map_supremecy() + . = ..() + +/datum/controller/subsystem/processing/networks/proc/register_network(datum/ntnet/network) + if(!networks_by_id[network.network_id]) + networks_by_id[network.network_id] = network + return TRUE + return FALSE + +/datum/controller/subsystem/processing/networks/proc/unregister_network(datum/ntnet/network) + networks_by_id -= network.network_id + return TRUE + +/datum/controller/subsystem/processing/networks/proc/register_interface(datum/component/ntnet_interface/D) + if(!interfaces_by_id[D.hardware_id]) + interfaces_by_id[D.hardware_id] = D + return TRUE + return FALSE + +/datum/controller/subsystem/processing/networks/proc/unregister_interface(datum/component/ntnet_interface/D) + interfaces_by_id -= D.hardware_id + return TRUE diff --git a/code/controllers/subsystem/processing/obj.dm b/code/controllers/subsystem/processing/obj.dm index 29fe277232..68f6f16cea 100644 --- a/code/controllers/subsystem/processing/obj.dm +++ b/code/controllers/subsystem/processing/obj.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(obj) name = "Objects" - priority = 40 + priority = FIRE_PRIORITY_OBJ flags = SS_NO_INIT var/list/processing = list() diff --git a/code/controllers/subsystem/processing/processing.dm b/code/controllers/subsystem/processing/processing.dm index 0586975866..f6d45ebff2 100644 --- a/code/controllers/subsystem/processing/processing.dm +++ b/code/controllers/subsystem/processing/processing.dm @@ -2,7 +2,7 @@ SUBSYSTEM_DEF(processing) name = "Processing" - priority = 25 + priority = FIRE_PRIORITY_PROCESS flags = SS_BACKGROUND|SS_POST_FIRE_TIMING|SS_NO_INIT wait = 10 diff --git a/code/controllers/subsystem/processing/projectiles.dm b/code/controllers/subsystem/processing/projectiles.dm index ebf217c79a..cc2399e3df 100644 --- a/code/controllers/subsystem/processing/projectiles.dm +++ b/code/controllers/subsystem/processing/projectiles.dm @@ -1,6 +1,5 @@ PROCESSING_SUBSYSTEM_DEF(projectiles) name = "Projectiles" - priority = 25 wait = 1 stat_tag = "PP" flags = SS_NO_INIT|SS_TICKER|SS_KEEP_TIMING diff --git a/code/controllers/subsystem/radiation.dm b/code/controllers/subsystem/radiation.dm index 0b69e003fc..a6cd658bf6 100644 --- a/code/controllers/subsystem/radiation.dm +++ b/code/controllers/subsystem/radiation.dm @@ -1,7 +1,6 @@ PROCESSING_SUBSYSTEM_DEF(radiation) name = "Radiation" flags = SS_NO_INIT | SS_BACKGROUND - priority = 25 var/list/warned_atoms = list() diff --git a/code/controllers/subsystem/research.dm b/code/controllers/subsystem/research.dm index 5faeffde5c..f10ed9125a 100644 --- a/code/controllers/subsystem/research.dm +++ b/code/controllers/subsystem/research.dm @@ -2,7 +2,7 @@ SUBSYSTEM_DEF(research) name = "Research" flags = SS_KEEP_TIMING - priority = 15 //My powergame is priority. + priority = FIRE_PRIORITY_RESEARCH wait = 10 init_order = INIT_ORDER_RESEARCH var/list/invalid_design_ids = list() //associative id = number of times diff --git a/code/controllers/subsystem/server_maint.dm b/code/controllers/subsystem/server_maint.dm index cb5a86bd75..dd68443bd7 100644 --- a/code/controllers/subsystem/server_maint.dm +++ b/code/controllers/subsystem/server_maint.dm @@ -4,7 +4,7 @@ SUBSYSTEM_DEF(server_maint) name = "Server Tasks" wait = 6 flags = SS_POST_FIRE_TIMING - priority = 10 + priority = FIRE_PRIORITY_SERVER_MAINT init_order = INIT_ORDER_SERVER_MAINT runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT var/list/currentrun diff --git a/code/controllers/subsystem/spacedrift.dm b/code/controllers/subsystem/spacedrift.dm index 8fe7cbe048..56a6786a20 100644 --- a/code/controllers/subsystem/spacedrift.dm +++ b/code/controllers/subsystem/spacedrift.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(spacedrift) name = "Space Drift" - priority = 30 + priority = FIRE_PRIORITY_SPACEDRIFT wait = 5 flags = SS_NO_INIT|SS_KEEP_TIMING runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME diff --git a/code/controllers/subsystem/tgui.dm b/code/controllers/subsystem/tgui.dm index a9b307bc0d..e03299f57f 100644 --- a/code/controllers/subsystem/tgui.dm +++ b/code/controllers/subsystem/tgui.dm @@ -2,7 +2,7 @@ SUBSYSTEM_DEF(tgui) name = "tgui" wait = 9 flags = SS_NO_INIT - priority = 110 + priority = FIRE_PRIORITY_TGUI runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT var/list/currentrun = list() diff --git a/code/controllers/subsystem/throwing.dm b/code/controllers/subsystem/throwing.dm index ec21f3bab2..a080f1a159 100644 --- a/code/controllers/subsystem/throwing.dm +++ b/code/controllers/subsystem/throwing.dm @@ -3,7 +3,7 @@ SUBSYSTEM_DEF(throwing) name = "Throwing" - priority = 25 + priority = FIRE_PRIORITY_THROWING wait = 1 flags = SS_NO_INIT|SS_KEEP_TIMING|SS_TICKER runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 0f06caa20d..d14404ed97 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -4,7 +4,7 @@ SUBSYSTEM_DEF(ticker) name = "Ticker" init_order = INIT_ORDER_TICKER - priority = 200 + priority = FIRE_PRIORITY_TICKER flags = SS_KEEP_TIMING runlevels = RUNLEVEL_LOBBY | RUNLEVEL_SETUP | RUNLEVEL_GAME diff --git a/code/game/gamemodes/miniantags/borer/borer_event.dm b/code/game/gamemodes/miniantags/borer/borer_event.dm index 567adddf53..e036c2a474 100644 --- a/code/game/gamemodes/miniantags/borer/borer_event.dm +++ b/code/game/gamemodes/miniantags/borer/borer_event.dm @@ -27,7 +27,7 @@ if(QDELETED(temp_vent)) continue if(temp_vent.loc.z == ZLEVEL_STATION_PRIMARY && !temp_vent.welded) - var/datum/pipeline/temp_vent_parent = temp_vent.PARENT1 + var/datum/pipeline/temp_vent_parent = temp_vent.parents[1] if(temp_vent_parent.other_atmosmch.len > 20) vents += temp_vent diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index 4ecba7c982..83d24a26ee 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -133,7 +133,7 @@ else if(entry_vent) if(get_dist(src, entry_vent) <= 1) var/list/vents = list() - var/datum/pipeline/entry_vent_parent = entry_vent.PARENT1 + var/datum/pipeline/entry_vent_parent = entry_vent.parents[1] for(var/obj/machinery/atmospherics/components/unary/vent_pump/temp_vent in entry_vent_parent.other_atmosmch) vents.Add(temp_vent) if(!vents.len) diff --git a/code/modules/admin/verbs/atmosdebug.dm b/code/modules/admin/verbs/atmosdebug.dm index 05c839d3fd..8c564551ba 100644 --- a/code/modules/admin/verbs/atmosdebug.dm +++ b/code/modules/admin/verbs/atmosdebug.dm @@ -13,12 +13,12 @@ //Manifolds for (var/obj/machinery/atmospherics/pipe/manifold/pipe in GLOB.machines) - if (!pipe.NODE1 || !pipe.NODE2 || !pipe.NODE3) + if (!pipe.nodes[1] || !pipe.nodes[2] || !pipe.nodes[3]) to_chat(usr, "Unconnected [pipe.name] located at [pipe.x],[pipe.y],[pipe.z] ([get_area(pipe.loc)])") //Pipes for (var/obj/machinery/atmospherics/pipe/simple/pipe in GLOB.machines) - if (!pipe.NODE1 || !pipe.NODE2) + if (!pipe.nodes[1] || !pipe.nodes[2]) to_chat(usr, "Unconnected [pipe.name] located at [pipe.x],[pipe.y],[pipe.z] ([get_area(pipe.loc)])") /client/proc/powerdebug() diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index 6c335bf896..2a5d792a1b 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -60,8 +60,8 @@ Pipelines + Other Objects -> Pipe network SetInitDirections() /obj/machinery/atmospherics/Destroy() - for(DEVICE_TYPE_LOOP) - nullifyNode(I) + for(var/i in 1 to device_type) + nullifyNode(i) SSair.atmos_machinery -= src @@ -79,22 +79,22 @@ Pipelines + Other Objects -> Pipe network // Called to build a network from this node return -/obj/machinery/atmospherics/proc/nullifyNode(I) - if(NODE_I) - var/obj/machinery/atmospherics/N = NODE_I +/obj/machinery/atmospherics/proc/nullifyNode(i) + if(nodes[i]) + var/obj/machinery/atmospherics/N = nodes[i] N.disconnect(src) - NODE_I = null + nodes[i] = null /obj/machinery/atmospherics/proc/getNodeConnects() var/list/node_connects = list() node_connects.len = device_type - for(DEVICE_TYPE_LOOP) + for(var/i in 1 to device_type) for(var/D in GLOB.cardinals) if(D & GetInitDirections()) if(D in node_connects) continue - node_connects[I] = D + node_connects[i] = D break return node_connects @@ -109,10 +109,10 @@ Pipelines + Other Objects -> Pipe network if(!node_connects) //for pipes where order of nodes doesn't matter node_connects = getNodeConnects() - for(DEVICE_TYPE_LOOP) - for(var/obj/machinery/atmospherics/target in get_step(src,node_connects[I])) - if(can_be_node(target, I)) - NODE_I = target + for(var/i in 1 to device_type) + for(var/obj/machinery/atmospherics/target in get_step(src,node_connects[i])) + if(can_be_node(target, i)) + nodes[i] = target break update_icon() @@ -171,8 +171,7 @@ Pipelines + Other Objects -> Pipe network if(istype(reference, /obj/machinery/atmospherics/pipe)) var/obj/machinery/atmospherics/pipe/P = reference P.destroy_network() - var/I = nodes.Find(reference) - NODE_I = null + nodes[nodes.Find(reference)] = null update_icon() /obj/machinery/atmospherics/update_icon() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm index ef6dd85afa..63af8e8aa2 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm @@ -21,8 +21,8 @@ /obj/machinery/atmospherics/components/binary/circulator/proc/return_transfer_air() - var/datum/gas_mixture/air1 = AIR1 - var/datum/gas_mixture/air2 = AIR2 + var/datum/gas_mixture/air1 = airs[1] + var/datum/gas_mixture/air2 = airs[2] var/output_starting_pressure = air1.return_pressure() var/input_starting_pressure = air2.return_pressure() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm index 6f72724e1e..ec11ce588c 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm @@ -49,8 +49,8 @@ Acts like a normal vent, but has an input AND output. /obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/New() ..() - var/datum/gas_mixture/air1 = AIR1 - var/datum/gas_mixture/air2 = AIR2 + var/datum/gas_mixture/air1 = airs[1] + var/datum/gas_mixture/air2 = airs[2] air1.volume = 1000 air2.volume = 1000 @@ -73,8 +73,8 @@ Acts like a normal vent, but has an input AND output. if(!on) return - var/datum/gas_mixture/air1 = AIR1 - var/datum/gas_mixture/air2 = AIR2 + var/datum/gas_mixture/air1 = airs[1] + var/datum/gas_mixture/air2 = airs[2] var/datum/gas_mixture/environment = loc.return_air() var/environment_pressure = environment.return_pressure() @@ -99,7 +99,7 @@ Acts like a normal vent, but has an input AND output. loc.assume_air(removed) air_update_turf() - var/datum/pipeline/parent1 = PARENT1 + var/datum/pipeline/parent1 = parents[1] parent1.update = 1 else //external -> output @@ -122,7 +122,7 @@ Acts like a normal vent, but has an input AND output. air2.merge(removed) air_update_turf() - var/datum/pipeline/parent2 = PARENT2 + var/datum/pipeline/parent2 = parents[2] parent2.update = 1 //Radio remote control diff --git a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm index ef4e487efd..00cdd6fca7 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm @@ -41,8 +41,8 @@ Passive gate is similar to the regular pump except: if(!on) return - var/datum/gas_mixture/air1 = AIR1 - var/datum/gas_mixture/air2 = AIR2 + var/datum/gas_mixture/air1 = airs[1] + var/datum/gas_mixture/air2 = airs[2] var/output_starting_pressure = air2.return_pressure() var/input_starting_pressure = air1.return_pressure() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm index 9d581fcb78..47dc2a2dae 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm @@ -50,8 +50,8 @@ Thus, the two variables affect pump operation are set in New(): if(!on || !is_operational()) return - var/datum/gas_mixture/air1 = AIR1 - var/datum/gas_mixture/air2 = AIR2 + var/datum/gas_mixture/air1 = airs[1] + var/datum/gas_mixture/air2 = airs[2] var/output_starting_pressure = air2.return_pressure() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm index e613012e82..1a9c76cb4d 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm @@ -31,7 +31,7 @@ It's like a regular ol' straight pipe, but you can turn it on and off. open = TRUE update_icon_nopipes() update_parents() - var/datum/pipeline/parent1 = PARENT1 + var/datum/pipeline/parent1 = parents[1] parent1.reconcile_air() investigate_log("was opened by [usr ? key_name(usr) : "a remote signal"]", INVESTIGATE_ATMOS) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm index 2803d1bf09..e21d5b2d8a 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm @@ -48,8 +48,8 @@ Thus, the two variables affect pump operation are set in New(): if(!on || !is_operational()) return - var/datum/gas_mixture/air1 = AIR1 - var/datum/gas_mixture/air2 = AIR2 + var/datum/gas_mixture/air1 = airs[1] + var/datum/gas_mixture/air2 = airs[2] // Pump mechanism just won't do anything if the pressure is too high/too low @@ -150,7 +150,7 @@ Thus, the two variables affect pump operation are set in New(): on = !on if("set_transfer_rate" in signal.data) - var/datum/gas_mixture/air1 = AIR1 + var/datum/gas_mixture/air1 = airs[1] transfer_rate = CLAMP(text2num(signal.data["set_transfer_rate"]),0,air1.volume) if(on != old_on) diff --git a/code/modules/atmospherics/machinery/components/components_base.dm b/code/modules/atmospherics/machinery/components/components_base.dm index 5fb4611d92..e7f4d7844a 100644 --- a/code/modules/atmospherics/machinery/components/components_base.dm +++ b/code/modules/atmospherics/machinery/components/components_base.dm @@ -15,10 +15,10 @@ On top of that, now people can add component-speciic procs/vars if they want! airs = new(device_type) ..() - for(DEVICE_TYPE_LOOP) + for(var/i in 1 to device_type) var/datum/gas_mixture/A = new A.volume = 200 - AIR_I = A + airs[i] = A /* Iconnery */ @@ -42,9 +42,9 @@ Iconnery var/connected = 0 //Direction bitset - for(DEVICE_TYPE_LOOP) //adds intact pieces - if(NODE_I) - connected |= icon_addintact(NODE_I) + for(var/i in 1 to device_type) //adds intact pieces + if(nodes[i]) + connected |= icon_addintact(nodes[i]) icon_addbroken(connected) //adds broken pieces @@ -53,52 +53,45 @@ Iconnery Pipenet stuff; housekeeping */ -/obj/machinery/atmospherics/components/nullifyNode(I) +/obj/machinery/atmospherics/components/nullifyNode(i) ..() - if(NODE_I) - nullifyPipenet(PARENT_I) - qdel(AIR_I) - AIR_I = null + if(nodes[i]) + nullifyPipenet(parents[i]) + QDEL_NULL(airs[i]) /obj/machinery/atmospherics/components/on_construction() ..() update_parents() /obj/machinery/atmospherics/components/build_network() - for(DEVICE_TYPE_LOOP) - if(!PARENT_I) - PARENT_I = new /datum/pipeline() - var/datum/pipeline/P = PARENT_I + for(var/i in 1 to device_type) + if(!parents[i]) + parents[i] = new /datum/pipeline() + var/datum/pipeline/P = parents[i] P.build_pipeline(src) /obj/machinery/atmospherics/components/proc/nullifyPipenet(datum/pipeline/reference) - var/I = parents.Find(reference) - reference.other_airs -= AIR_I + var/i = parents.Find(reference) + reference.other_airs -= airs[i] reference.other_atmosmch -= src - PARENT_I = null + parents[i] = null /obj/machinery/atmospherics/components/returnPipenetAir(datum/pipeline/reference) - var/I = parents.Find(reference) - return AIR_I + return airs[parents.Find(reference)] /obj/machinery/atmospherics/components/pipeline_expansion(datum/pipeline/reference) if(reference) - var/I = parents.Find(reference) - return list(NODE_I) - else - return ..() + return list(nodes[parents.Find(reference)]) + return ..() /obj/machinery/atmospherics/components/setPipenet(datum/pipeline/reference, obj/machinery/atmospherics/A) - var/I = nodes.Find(A) - PARENT_I = reference + parents[nodes.Find(A)] = reference -/obj/machinery/atmospherics/components/returnPipenet(obj/machinery/atmospherics/A = NODE1) //returns PARENT1 if called without argument - var/I = nodes.Find(A) - return PARENT_I +/obj/machinery/atmospherics/components/returnPipenet(obj/machinery/atmospherics/A = nodes[1]) //returns parents[1] if called without argument + return parents[nodes.Find(A)] /obj/machinery/atmospherics/components/replacePipenet(datum/pipeline/Old, datum/pipeline/New) - var/I = parents.Find(Old) - PARENT_I = New + parents[parents.Find(Old)] = New /obj/machinery/atmospherics/components/unsafe_pressure_release(var/mob/user, var/pressures) ..() @@ -109,15 +102,15 @@ Pipenet stuff; housekeeping var/datum/gas_mixture/environment = T.return_air() var/lost = null var/times_lost = 0 - for(DEVICE_TYPE_LOOP) - var/datum/gas_mixture/air = AIR_I + for(var/i in 1 to device_type) + var/datum/gas_mixture/air = airs[i] lost += pressures*environment.volume/(air.temperature * R_IDEAL_GAS_EQUATION) times_lost++ var/shared_loss = lost/times_lost var/datum/gas_mixture/to_release - for(DEVICE_TYPE_LOOP) - var/datum/gas_mixture/air = AIR_I + for(var/i in 1 to device_type) + var/datum/gas_mixture/air = airs[i] if(!to_release) to_release = air.remove(shared_loss) continue @@ -136,8 +129,8 @@ Helpers */ /obj/machinery/atmospherics/components/proc/update_parents() - for(DEVICE_TYPE_LOOP) - var/datum/pipeline/parent = PARENT_I + for(var/i in 1 to device_type) + var/datum/pipeline/parent = parents[i] if(!parent) throw EXCEPTION("Component is missing a pipenet! Rebuilding...") build_network() @@ -145,8 +138,8 @@ Helpers /obj/machinery/atmospherics/components/returnPipenets() . = list() - for(DEVICE_TYPE_LOOP) - . += returnPipenet(NODE_I) + for(var/i in 1 to device_type) + . += returnPipenet(nodes[i]) /* UI Stuff @@ -157,4 +150,3 @@ UI Stuff return ..() to_chat(user, "Access denied.") return UI_CLOSE - diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm index a1d6dc8c7e..20e93a220e 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm @@ -50,7 +50,7 @@ ..() /obj/machinery/atmospherics/components/trinary/filter/update_icon_nopipes() - if(on && NODE1 && NODE2 && NODE3 && is_operational()) + if(on && nodes[1] && nodes[2] && nodes[3] && is_operational()) icon_state = "filter_on[flipped?"_f":""]" return icon_state = "filter_off[flipped?"_f":""]" @@ -63,12 +63,12 @@ /obj/machinery/atmospherics/components/trinary/filter/process_atmos() ..() - if(!on || !(NODE1 && NODE2 && NODE3) || !is_operational()) + if(!on || !(nodes[1] && nodes[2] && nodes[3]) || !is_operational()) return - var/datum/gas_mixture/air1 = AIR1 - var/datum/gas_mixture/air2 = AIR2 - var/datum/gas_mixture/air3 = AIR3 + var/datum/gas_mixture/air1 = airs[1] + var/datum/gas_mixture/air2 = airs[2] + var/datum/gas_mixture/air3 = airs[3] var/output_starting_pressure = air3.return_pressure() diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm index b15df59662..df50437b4f 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm @@ -33,7 +33,7 @@ return ..() /obj/machinery/atmospherics/components/trinary/mixer/update_icon_nopipes() - if(on && NODE1 && NODE2 && NODE3 && is_operational()) + if(on && nodes[1] && nodes[2] && nodes[3] && is_operational()) icon_state = "mixer_on[flipped?"_f":""]" return icon_state = "mixer_off[flipped?"_f":""]" @@ -46,18 +46,18 @@ /obj/machinery/atmospherics/components/trinary/mixer/New() ..() - var/datum/gas_mixture/air3 = AIR3 + var/datum/gas_mixture/air3 = airs[3] air3.volume = 300 - AIR3 = air3 + airs[3] = air3 /obj/machinery/atmospherics/components/trinary/mixer/process_atmos() ..() - if(!on || !(NODE1 && NODE2 && NODE3) && !is_operational()) + if(!on || !(nodes[1] && nodes[2] && nodes[3]) && !is_operational()) return - var/datum/gas_mixture/air1 = AIR1 - var/datum/gas_mixture/air2 = AIR2 - var/datum/gas_mixture/air3 = AIR3 + var/datum/gas_mixture/air1 = airs[1] + var/datum/gas_mixture/air2 = airs[2] + var/datum/gas_mixture/air3 = airs[3] var/output_starting_pressure = air3.return_pressure() @@ -103,14 +103,14 @@ air3.merge(removed2) if(transfer_moles1) - var/datum/pipeline/parent1 = PARENT1 + var/datum/pipeline/parent1 = parents[1] parent1.update = TRUE if(transfer_moles2) - var/datum/pipeline/parent2 = PARENT2 + var/datum/pipeline/parent2 = parents[2] parent2.update = TRUE - var/datum/pipeline/parent3 = PARENT3 + var/datum/pipeline/parent3 = parents[3] parent3.update = TRUE return diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index a7123dd97b..87d6387b99 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -174,7 +174,7 @@ open_machine() return - var/datum/gas_mixture/air1 = AIR1 + var/datum/gas_mixture/air1 = airs[1] if(air1.gases.len) if(mob_occupant.bodytemperature < T0C) // Sleepytime. Why? More cryo magic. @@ -196,9 +196,9 @@ if(!on) return - var/datum/gas_mixture/air1 = AIR1 + var/datum/gas_mixture/air1 = airs[1] - if(!NODE1 || !AIR1 || !air1.gases.len || air1.gases[/datum/gas/oxygen][MOLES] < 5) // Turn off if the machine won't work. + if(!nodes[1] || !airs[1] || !air1.gases.len || air1.gases[/datum/gas/oxygen][MOLES] < 5) // Turn off if the machine won't work. on = FALSE update_icon() return @@ -348,8 +348,7 @@ else data["occupant"]["temperaturestatus"] = "bad" - - var/datum/gas_mixture/air1 = AIR1 + var/datum/gas_mixture/air1 = airs[1] data["cellTemperature"] = round(air1.temperature, 1) data["isBeakerLoaded"] = beaker ? TRUE : FALSE @@ -401,7 +400,7 @@ return 0 // you can't see the pipe network when inside a cryo cell. /obj/machinery/atmospherics/components/unary/cryo_cell/return_temperature() - var/datum/gas_mixture/G = AIR1 + var/datum/gas_mixture/G = airs[1] if(G.total_moles() > 10) return G.temperature @@ -411,13 +410,13 @@ . = ..() if(.) SetInitDirections() - var/obj/machinery/atmospherics/node = NODE1 + var/obj/machinery/atmospherics/node = nodes[1] if(node) node.disconnect(src) - NODE1 = null - nullifyPipenet(PARENT1) + nodes[1] = null + nullifyPipenet(parents[1]) atmosinit() - node = NODE1 + node = nodes[1] if(node) node.atmosinit() node.addMember(src) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm b/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm index c8daf29ad3..bd81d5c876 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm @@ -15,9 +15,9 @@ pipe_state = "heunary" /obj/machinery/atmospherics/components/unary/heat_exchanger/update_icon() - if(NODE1) + if(nodes[1]) icon_state = "he_intact" - var/obj/machinery/atmospherics/node = NODE1 + var/obj/machinery/atmospherics/node = nodes[1] add_atom_colour(node.color, FIXED_COLOUR_PRIORITY) else icon_state = "he_exposed" @@ -42,8 +42,8 @@ update_cycle = SSair.times_fired partner.update_cycle = SSair.times_fired - var/datum/gas_mixture/air_contents = AIR1 - var/datum/gas_mixture/partner_air_contents = partner.AIR1 + var/datum/gas_mixture/air_contents = airs[1] + var/datum/gas_mixture/partner_air_contents = partner.airs[1] var/air_heat_capacity = air_contents.heat_capacity() var/other_air_heat_capacity = partner_air_contents.heat_capacity() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm index 64e6e56504..9759de92f5 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm @@ -32,7 +32,7 @@ if(showpipe) add_overlay(getpipeimage(icon, "inje_cap", initialize_directions)) - if(!NODE1 || !on || !is_operational()) + if(!nodes[1] || !on || !is_operational()) icon_state = "inje_off" return @@ -53,7 +53,7 @@ if(!on || !is_operational()) return - var/datum/gas_mixture/air_contents = AIR1 + var/datum/gas_mixture/air_contents = airs[1] if(air_contents.temperature > 0) var/transfer_moles = (air_contents.return_pressure())*volume_rate/(air_contents.temperature * R_IDEAL_GAS_EQUATION) @@ -70,7 +70,7 @@ if(on || injecting || !is_operational()) return - var/datum/gas_mixture/air_contents = AIR1 + var/datum/gas_mixture/air_contents = airs[1] injecting = 1 @@ -130,7 +130,7 @@ if("set_volume_rate" in signal.data) var/number = text2num(signal.data["set_volume_rate"]) - var/datum/gas_mixture/air_contents = AIR1 + var/datum/gas_mixture/air_contents = airs[1] volume_rate = CLAMP(number, 0, air_contents.volume) if("status" in signal.data) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm b/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm index 051f3136ee..871aaeea13 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm @@ -13,7 +13,7 @@ /obj/machinery/atmospherics/components/unary/portables_connector/New() ..() - var/datum/gas_mixture/air_contents = AIR1 + var/datum/gas_mixture/air_contents = airs[1] air_contents.volume = 0 diff --git a/code/modules/atmospherics/machinery/components/unary_devices/tank.dm b/code/modules/atmospherics/machinery/components/unary_devices/tank.dm index 4e9df101a6..b12eb59442 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/tank.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/tank.dm @@ -13,7 +13,7 @@ /obj/machinery/atmospherics/components/unary/tank/New() ..() - var/datum/gas_mixture/air_contents = AIR1 + var/datum/gas_mixture/air_contents = airs[1] air_contents.volume = volume air_contents.temperature = T20C if(gas_type) @@ -43,7 +43,7 @@ /obj/machinery/atmospherics/components/unary/tank/air/New() ..() - var/datum/gas_mixture/air_contents = AIR1 + var/datum/gas_mixture/air_contents = airs[1] air_contents.assert_gases(/datum/gas/oxygen, /datum/gas/nitrogen) air_contents.gases[/datum/gas/oxygen][MOLES] = AIR_CONTENTS * 0.2 air_contents.gases[/datum/gas/nitrogen][MOLES] = AIR_CONTENTS * 0.8 diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm index 8d34d5adfa..f52483f1ae 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm @@ -48,9 +48,9 @@ /obj/machinery/atmospherics/components/unary/thermomachine/process_atmos() ..() - if(!on || !NODE1) + if(!on || !nodes[1]) return - var/datum/gas_mixture/air_contents = AIR1 + var/datum/gas_mixture/air_contents = airs[1] var/air_heat_capacity = air_contents.heat_capacity() var/combined_heat_capacity = heat_capacity + air_heat_capacity @@ -88,14 +88,14 @@ if(!..()) return 0 SetInitDirections() - var/obj/machinery/atmospherics/node = NODE1 + var/obj/machinery/atmospherics/node = nodes[1] if(node) node.disconnect(src) - NODE1 = null - nullifyPipenet(PARENT1) + nodes[1] = null + nullifyPipenet(parents[1]) atmosinit() - node = NODE1 + node = nodes[1] if(node) node.atmosinit() node.addMember(src) @@ -123,7 +123,7 @@ data["target"] = target_temperature data["initial"] = initial(target_temperature) - var/datum/gas_mixture/air1 = AIR1 + var/datum/gas_mixture/air1 = airs[1] data["temperature"] = air1.temperature data["pressure"] = air1.return_pressure() return data diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm index 2c9a308ec9..f9a87ace42 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm @@ -81,7 +81,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/high_volume/New() ..() - var/datum/gas_mixture/air_contents = AIR1 + var/datum/gas_mixture/air_contents = airs[1] air_contents.volume = 1000 /obj/machinery/atmospherics/components/unary/vent_pump/update_icon_nopipes() @@ -93,7 +93,7 @@ icon_state = "vent_welded" return - if(!NODE1 || !on || !is_operational()) + if(!nodes[1] || !on || !is_operational()) if(icon_state == "vent_welded") icon_state = "vent_off" return @@ -122,12 +122,12 @@ ..() if(!is_operational()) return - if(!NODE1) + if(!nodes[1]) on = FALSE if(!on || welded) return - var/datum/gas_mixture/air_contents = AIR1 + var/datum/gas_mixture/air_contents = airs[1] var/datum/gas_mixture/environment = loc.return_air() var/environment_pressure = environment.return_pressure() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm index f886f2ed2b..b882d21c98 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm @@ -77,7 +77,7 @@ icon_state = "scrub_welded" return - if(!NODE1 || !on || !is_operational()) + if(!nodes[1] || !on || !is_operational()) icon_state = "scrub_off" return @@ -142,7 +142,7 @@ ..() if(welded || !is_operational()) return FALSE - if(!NODE1 || !on) + if(!nodes[1] || !on) on = FALSE return FALSE scrub(loc) @@ -156,7 +156,7 @@ return FALSE var/datum/gas_mixture/environment = tile.return_air() - var/datum/gas_mixture/air_contents = AIR1 + var/datum/gas_mixture/air_contents = airs[1] var/list/env_gases = environment.gases if(air_contents.return_pressure() >= 50*ONE_ATMOSPHERE) diff --git a/code/modules/atmospherics/machinery/datum_pipeline.dm b/code/modules/atmospherics/machinery/datum_pipeline.dm index ad7fdb921a..9191916d10 100644 --- a/code/modules/atmospherics/machinery/datum_pipeline.dm +++ b/code/modules/atmospherics/machinery/datum_pipeline.dm @@ -216,8 +216,8 @@ GL += P.return_air() for(var/obj/machinery/atmospherics/components/binary/valve/V in P.other_atmosmch) if(V.open) - PL |= V.PARENT1 - PL |= V.PARENT2 + PL |= V.parents[1] + PL |= V.parents[2] for(var/obj/machinery/atmospherics/components/unary/portables_connector/C in P.other_atmosmch) if(C.connected_device) GL += C.portableConnectorReturnAir() diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm index e4df82073b..bfabe4e955 100644 --- a/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm +++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm @@ -32,9 +32,9 @@ cut_overlays() //Add non-broken pieces - for(DEVICE_TYPE_LOOP) - if(NODE_I) - add_overlay(getpipeimage('icons/obj/atmospherics/pipes/heat.dmi', "manifold_intact[invis]", get_dir(src, NODE_I))) + for(var/i in 1 to device_type) + if(nodes[i]) + add_overlay(getpipeimage('icons/obj/atmospherics/pipes/heat.dmi', "manifold_intact[invis]", get_dir(src, nodes[i]))) //4-way manifold /obj/machinery/atmospherics/pipe/heat_exchanging/manifold4w @@ -61,6 +61,6 @@ cut_overlays() //Add non-broken pieces - for(DEVICE_TYPE_LOOP) - if(NODE_I) - add_overlay(getpipeimage('icons/obj/atmospherics/pipes/heat.dmi', "manifold_intact[invis]", get_dir(src, NODE_I))) + for(var/i in 1 to device_type) + if(nodes[i]) + add_overlay(getpipeimage('icons/obj/atmospherics/pipes/heat.dmi', "manifold_intact[invis]", get_dir(src, nodes[i]))) diff --git a/code/modules/atmospherics/machinery/pipes/layermanifold.dm b/code/modules/atmospherics/machinery/pipes/layermanifold.dm index d2f85c7667..b193a7a8bc 100644 --- a/code/modules/atmospherics/machinery/pipes/layermanifold.dm +++ b/code/modules/atmospherics/machinery/pipes/layermanifold.dm @@ -107,14 +107,14 @@ P.destroy_network() while(reference in get_all_connected_nodes()) if(reference in nodes) - var/I = nodes.Find(reference) - NODE_I = null + var/i = nodes.Find(reference) + nodes[i] = null if(reference in front_nodes) - var/I = front_nodes.Find(reference) - front_nodes[I] = null + var/i = front_nodes.Find(reference) + front_nodes[i] = null if(reference in back_nodes) - var/I = back_nodes.Find(reference) - back_nodes[I] = null + var/i = back_nodes.Find(reference) + back_nodes[i] = null update_icon() /obj/machinery/atmospherics/pipe/layer_manifold/relaymove(mob/living/user, dir) diff --git a/code/modules/atmospherics/machinery/pipes/manifold.dm b/code/modules/atmospherics/machinery/pipes/manifold.dm index 8560addc3a..ff4a4ea1ff 100644 --- a/code/modules/atmospherics/machinery/pipes/manifold.dm +++ b/code/modules/atmospherics/machinery/pipes/manifold.dm @@ -35,9 +35,9 @@ cut_overlays() //Add non-broken pieces - for(DEVICE_TYPE_LOOP) - if(NODE_I) - add_overlay(getpipeimage('icons/obj/atmospherics/pipes/manifold.dmi', "manifold_full[invis]", get_dir(src, NODE_I))) + for(var/i in 1 to device_type) + if(nodes[i]) + add_overlay(getpipeimage('icons/obj/atmospherics/pipes/manifold.dmi', "manifold_full[invis]", get_dir(src, nodes[i]))) //Colored pipes, use these for mapping /obj/machinery/atmospherics/pipe/manifold/general diff --git a/code/modules/atmospherics/machinery/pipes/manifold4w.dm b/code/modules/atmospherics/machinery/pipes/manifold4w.dm index f368c6bb0f..f9692da4ab 100644 --- a/code/modules/atmospherics/machinery/pipes/manifold4w.dm +++ b/code/modules/atmospherics/machinery/pipes/manifold4w.dm @@ -26,9 +26,9 @@ cut_overlays() //Add non-broken pieces - for(DEVICE_TYPE_LOOP) - if(NODE_I) - add_overlay(getpipeimage('icons/obj/atmospherics/pipes/manifold.dmi', "manifold_full[invis]", get_dir(src, NODE_I))) + for(var/i in 1 to device_type) + if(nodes[i]) + add_overlay(getpipeimage('icons/obj/atmospherics/pipes/manifold.dmi', "manifold_full[invis]", get_dir(src, nodes[i]))) //Colored pipes, use these for mapping /obj/machinery/atmospherics/pipe/manifold4w/general diff --git a/code/modules/atmospherics/machinery/pipes/pipes.dm b/code/modules/atmospherics/machinery/pipes/pipes.dm index cc01e6c4bd..8f6b3976bf 100644 --- a/code/modules/atmospherics/machinery/pipes/pipes.dm +++ b/code/modules/atmospherics/machinery/pipes/pipes.dm @@ -18,8 +18,8 @@ volume = 35 * device_type ..() -/obj/machinery/atmospherics/pipe/nullifyNode(I) - var/obj/machinery/atmospherics/oldN = NODE_I +/obj/machinery/atmospherics/pipe/nullifyNode(i) + var/obj/machinery/atmospherics/oldN = nodes[i] ..() if(oldN) oldN.build_network() @@ -33,11 +33,11 @@ parent.build_pipeline(src) /obj/machinery/atmospherics/pipe/update_icon() //overridden by manifolds - if(NODE1&&NODE2) + if(nodes[1] && nodes[2]) icon_state = "intact[invisibility ? "-f" : "" ]" else - var/have_node1 = NODE1?1:0 - var/have_node2 = NODE2?1:0 + var/have_node1 = nodes[1] ? TRUE : FALSE + var/have_node2 = nodes[2] ? TRUE : FALSE icon_state = "exposed[have_node1][have_node2][invisibility ? "-f" : "" ]" /obj/machinery/atmospherics/pipe/atmosinit() @@ -91,9 +91,9 @@ QDEL_NULL(parent) /obj/machinery/atmospherics/pipe/proc/update_node_icon() - for(DEVICE_TYPE_LOOP) - if(NODE_I) - var/obj/machinery/atmospherics/N = NODE_I + for(var/i in 1 to device_type) + if(nodes[i]) + var/obj/machinery/atmospherics/N = nodes[i] N.update_icon() /obj/machinery/atmospherics/pipe/returnPipenets() @@ -109,4 +109,3 @@ pipe_color = paint_color update_node_icon() return TRUE - diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index 7b6351e939..08b20f07bb 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -324,13 +324,13 @@ valve_open = !valve_open timing = FALSE if(!valve_open) - pump.AIR1 = null - pump.AIR2 = null + pump.airs[1] = null + pump.airs[2] = null return var/turf/T = get_turf(src) - pump.AIR1 = air_contents - pump.AIR2 = holding ? holding.air_contents : T.return_air() + pump.airs[1] = air_contents + pump.airs[2] = holding ? holding.air_contents : T.return_air() pump.target_pressure = release_pressure pump.process_atmos() // Pump gas. diff --git a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm index 590297820e..58846dc839 100644 --- a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm +++ b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm @@ -54,7 +54,7 @@ //Perform the connection connected_port = new_port connected_port.connected_device = src - var/datum/pipeline/connected_port_parent = connected_port.PARENT1 + var/datum/pipeline/connected_port_parent = connected_port.parents[1] connected_port_parent.reconcile_air() anchored = TRUE //Prevent movement diff --git a/code/modules/atmospherics/machinery/portable/pump.dm b/code/modules/atmospherics/machinery/portable/pump.dm index 36dd30731e..e94492ad2d 100644 --- a/code/modules/atmospherics/machinery/portable/pump.dm +++ b/code/modules/atmospherics/machinery/portable/pump.dm @@ -41,17 +41,17 @@ /obj/machinery/portable_atmospherics/pump/process_atmos() ..() if(!on) - pump.AIR1 = null - pump.AIR2 = null + pump.airs[1] = null + pump.airs[2] = null return var/turf/T = get_turf(src) if(direction == PUMP_OUT) // Hook up the internal pump. - pump.AIR1 = holding ? holding.air_contents : air_contents - pump.AIR2 = holding ? air_contents : T.return_air() + pump.airs[1] = holding ? holding.air_contents : air_contents + pump.airs[2] = holding ? air_contents : T.return_air() else - pump.AIR1 = holding ? air_contents : T.return_air() - pump.AIR2 = holding ? holding.air_contents : air_contents + pump.airs[1] = holding ? air_contents : T.return_air() + pump.airs[2] = holding ? holding.air_contents : air_contents pump.process_atmos() // Pump gas. if(!holding) diff --git a/code/modules/events/alien_infestation.dm b/code/modules/events/alien_infestation.dm index 662d938bd6..4eae2cd194 100644 --- a/code/modules/events/alien_infestation.dm +++ b/code/modules/events/alien_infestation.dm @@ -2,9 +2,8 @@ name = "Alien Infestation" typepath = /datum/round_event/ghost_role/alien_infestation weight = 5 - earliest_start = 24000 //40 min - min_players = 20 //Avoid lowpop rounds + min_players = 10 max_occurrences = 1 /datum/round_event/ghost_role/alien_infestation @@ -16,6 +15,7 @@ // 50% chance of being incremented by one var/spawncount = 1 var/successSpawn = 0 //So we don't make a command report if nothing gets spawned. + fakeable = TRUE /datum/round_event/ghost_role/alien_infestation/setup() @@ -74,3 +74,4 @@ else // Like how did we get here? return FALSE + diff --git a/code/modules/events/spider_infestation.dm b/code/modules/events/spider_infestation.dm index a3c625e396..34d3f8a870 100644 --- a/code/modules/events/spider_infestation.dm +++ b/code/modules/events/spider_infestation.dm @@ -35,3 +35,4 @@ spawn_atom_to_turf(spawn_type, vent, 1, FALSE) vents -= vent spawncount-- + diff --git a/code/modules/events/vent_clog.dm b/code/modules/events/vent_clog.dm index 5e91160575..ec55b35b02 100644 --- a/code/modules/events/vent_clog.dm +++ b/code/modules/events/vent_clog.dm @@ -47,3 +47,4 @@ while(cockroaches) new /mob/living/simple_animal/cockroach(get_turf(vent)) cockroaches-- + diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 4ee2742492..964e1feef0 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -1058,6 +1058,13 @@ if (client) if (new_z) SSmobs.clients_by_zlevel[new_z] += src + for (var/I in length(SSidlenpcpool.idle_mobs_by_zlevel[new_z]) to 1 step -1) //Backwards loop because we're removing (guarantees optimal rather than worst-case performance), it's fine to use .len here but doesn't compile on 511 + var/mob/living/simple_animal/SA = SSidlenpcpool.idle_mobs_by_zlevel[new_z][I] + if (SA) + SA.toggle_ai(AI_ON) // Guarantees responsiveness for when appearing right next to mobs + else + SSidlenpcpool.idle_mobs_by_zlevel[new_z] -= SA + registered_z = new_z else registered_z = null diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index d93b8596fc..78021deadf 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -28,9 +28,6 @@ var/ranged_message = "fires" //Fluff text for ranged mobs var/ranged_cooldown = 0 //What the current cooldown on ranged attacks is, generally world.time + ranged_cooldown_time var/ranged_cooldown_time = 30 //How long, in deciseconds, the cooldown of ranged attacks is - var/ranged_telegraph = "prepares to fire at *TARGET*!" //A message shown when the mob prepares to fire; use *TARGET* if you want to show the target's name - var/ranged_telegraph_sound //A sound played when the mob prepares to fire - var/ranged_telegraph_time = 0 //In deciseconds, how long between the telegraph and ranged shot var/ranged_ignores_vision = FALSE //if it'll fire ranged attacks even if it lacks vision on its target, only works with environment smash var/check_friendly_fire = 0 // Should the ranged mob check for friendlies when shooting var/retreat_distance = null //If our mob runs from players when they're too close, set in tile distance. By default, mobs do not retreat. @@ -231,9 +228,6 @@ if(!target || !CanAttack(target)) LoseTarget() return 0 - if(ismob(target.loc)) - LoseTarget() - return 0 if(target in possible_targets) var/turf/T = get_turf(src) if(target.z != T.z) @@ -242,14 +236,7 @@ var/target_distance = get_dist(targets_from,target) if(ranged) //We ranged? Shoot at em if(!target.Adjacent(targets_from) && ranged_cooldown <= world.time) //But make sure they're not in range for a melee attack and our range attack is off cooldown - if(!ranged_telegraph_time || client) - OpenFire(target) - else - if(ranged_telegraph) - visible_message("[src] [replacetext(ranged_telegraph, "*TARGET*", "[target]")]") - if(ranged_telegraph_sound) - playsound(src, ranged_telegraph_sound, 75, FALSE) - addtimer(CALLBACK(src, .proc/OpenFire, target), ranged_telegraph_time) + OpenFire(target) if(!Process_Spacemove()) //Drifting walk(src,0) return 1 @@ -289,7 +276,7 @@ if(search_objects)//Turn off item searching and ignore whatever item we were looking at, we're more concerned with fight or flight target = null LoseSearchObjects() - if(AIStatus == AI_IDLE) + if(AIStatus != AI_ON && AIStatus != AI_OFF) toggle_ai(AI_ON) FindTarget() else if(target != null && prob(40))//No more pulling a mob forever and having a second player attack it, it can switch targets now if it finds a more suitable one @@ -413,7 +400,6 @@ mob/living/simple_animal/hostile/proc/DestroySurroundings() // for use with mega DestroyObjectsInDirection(dir) - /mob/living/simple_animal/hostile/proc/EscapeConfinement() if(buckled) buckled.attack_animal(src) @@ -498,3 +484,14 @@ mob/living/simple_animal/hostile/proc/DestroySurroundings() // for use with mega if(AIStatus == AI_IDLE && FindTarget(tlist, 1)) toggle_ai(AI_ON) +/mob/living/simple_animal/hostile/proc/ListTargetsLazy(var/_Z)//Step 1, find out what we can see + var/static/hostile_machines = typecacheof(list(/obj/machinery/porta_turret, /obj/mecha, /obj/structure/destructible/clockwork/ocular_warden)) + . = list() + for (var/I in SSmobs.clients_by_zlevel[_Z]) + var/mob/M = I + if (get_dist(M, src) < vision_range) + if (isturf(M.loc)) + . += M + else if (M.loc.type in hostile_machines) + . += M.loc + diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 4c5b94f2e3..9a0a21e826 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -82,14 +82,14 @@ var/dextrous_hud_type = /datum/hud/dextrous var/datum/personal_crafting/handcrafting - var/AIStatus = AI_ON //The Status of our AI, can be set to AI_ON (On, usual processing), AI_IDLE (Will not process, but will return to AI_ON if an enemy comes near), AI_OFF (Off, Not processing ever) + var/AIStatus = AI_ON //The Status of our AI, can be set to AI_ON (On, usual processing), AI_IDLE (Will not process, but will return to AI_ON if an enemy comes near), AI_OFF (Off, Not processing ever), AI_Z_OFF (Temporarily off due to nonpresence of players) var/shouldwakeup = FALSE //convenience var for forcibly waking up an idling AI on next check. //domestication var/tame = 0 - no_vore = TRUE + var/my_z // I don't want to confuse this with client registered_z /mob/living/simple_animal/Initialize() . = ..() @@ -544,7 +544,13 @@ /mob/living/simple_animal/proc/toggle_ai(togglestatus) if (AIStatus != togglestatus) - if (togglestatus > 0 && togglestatus < 4) + if (togglestatus > 0 && togglestatus < 5) + if (togglestatus == AI_Z_OFF || AIStatus == AI_Z_OFF) + var/turf/T = get_turf(src) + if (AIStatus == AI_Z_OFF) + SSidlenpcpool.idle_mobs_by_zlevel[T.z] -= src + else + SSidlenpcpool.idle_mobs_by_zlevel[T.z] += src GLOB.simple_animals[AIStatus] -= src GLOB.simple_animals[togglestatus] += src AIStatus = togglestatus @@ -559,4 +565,11 @@ . = ..() if(!ckey && !stat)//Not unconscious if(AIStatus == AI_IDLE) - toggle_ai(AI_ON) \ No newline at end of file + toggle_ai(AI_ON) + + +/mob/living/simple_animal/onTransitZ(old_z, new_z) + ..() + if (AIStatus == AI_Z_OFF) + SSidlenpcpool[old_z] -= src + toggle_ai(initial(AIStatus)) diff --git a/code/modules/mob/living/ventcrawling.dm b/code/modules/mob/living/ventcrawling.dm index 471e103c26..2d3ed3d669 100644 --- a/code/modules/mob/living/ventcrawling.dm +++ b/code/modules/mob/living/ventcrawling.dm @@ -45,7 +45,7 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, typecacheof(list( if(vent_found) - var/datum/pipeline/vent_found_parent = vent_found.PARENT1 + var/datum/pipeline/vent_found_parent = vent_found.parents[1] if(vent_found_parent && (vent_found_parent.members.len || vent_found_parent.other_atmosmch)) visible_message("[src] begins climbing into the ventilation system..." ,"You begin climbing into the ventilation system...") diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm index 6a8c6ec5ec..4681eabe20 100644 --- a/code/modules/power/generator.dm +++ b/code/modules/power/generator.dm @@ -99,11 +99,11 @@ // update icon overlays only if displayed level has changed if(hot_air) - var/datum/gas_mixture/hot_circ_air1 = hot_circ.AIR1 + var/datum/gas_mixture/hot_circ_air1 = hot_circ.airs[1] hot_circ_air1.merge(hot_air) if(cold_air) - var/datum/gas_mixture/cold_circ_air1 = cold_circ.AIR1 + var/datum/gas_mixture/cold_circ_air1 = cold_circ.airs[1] cold_circ_air1.merge(cold_air) update_icon() @@ -134,10 +134,10 @@ if(!powernet) t += "Unable to connect to the power network!" else if(cold_circ && hot_circ) - var/datum/gas_mixture/cold_circ_air1 = cold_circ.AIR1 - var/datum/gas_mixture/cold_circ_air2 = cold_circ.AIR2 - var/datum/gas_mixture/hot_circ_air1 = hot_circ.AIR1 - var/datum/gas_mixture/hot_circ_air2 = hot_circ.AIR2 + var/datum/gas_mixture/cold_circ_air1 = cold_circ.airs[1] + var/datum/gas_mixture/cold_circ_air2 = cold_circ.airs[2] + var/datum/gas_mixture/hot_circ_air1 = hot_circ.airs[1] + var/datum/gas_mixture/hot_circ_air2 = hot_circ.airs[2] t += "
" diff --git a/code/modules/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm index e42224db46..109d53a4f7 100644 --- a/code/modules/shuttle/on_move.dm +++ b/code/modules/shuttle/on_move.dm @@ -213,9 +213,9 @@ All ShuttleMove procs go here /obj/machinery/atmospherics/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) . = ..() var/missing_nodes = FALSE - for(DEVICE_TYPE_LOOP) - if(src.nodes[I]) - var/obj/machinery/atmospherics/node = src.nodes[I] + for(var/i in 1 to device_type) + if(nodes[i]) + var/obj/machinery/atmospherics/node = nodes[i] var/connected = FALSE for(var/D in GLOB.cardinals) if(node in get_step(src, D)) @@ -223,9 +223,9 @@ All ShuttleMove procs go here break if(!connected) - nullifyNode(I) + nullifyNode(i) - if(!src.nodes[I]) + if(!nodes[i]) missing_nodes = TRUE if(missing_nodes) diff --git a/code/modules/shuttle/shuttle_rotate.dm b/code/modules/shuttle/shuttle_rotate.dm index 28cb089597..cc69fb5d15 100644 --- a/code/modules/shuttle/shuttle_rotate.dm +++ b/code/modules/shuttle/shuttle_rotate.dm @@ -84,17 +84,17 @@ If ever any of these procs are useful for non-shuttles, rename it to proc/rotate /obj/machinery/atmospherics/shuttleRotate(rotation, params) var/list/real_node_connect = getNodeConnects() - for(DEVICE_TYPE_LOOP) - real_node_connect[I] = angle2dir(rotation+dir2angle(real_node_connect[I])) + for(var/i in 1 to device_type) + real_node_connect[i] = angle2dir(rotation+dir2angle(real_node_connect[i])) . = ..() SetInitDirections() var/list/supposed_node_connect = getNodeConnects() var/list/nodes_copy = nodes.Copy() - for(DEVICE_TYPE_LOOP) - var/new_pos = supposed_node_connect.Find(real_node_connect[I]) - nodes[new_pos] = nodes_copy[I] + for(var/i in 1 to device_type) + var/new_pos = supposed_node_connect.Find(real_node_connect[i]) + nodes[new_pos] = nodes_copy[i] //prevents shuttles attempting to rotate this since it messes up sprites /obj/machinery/gateway/shuttleRotate(rotation, params) diff --git a/html/changelogs/AutoChangeLog-pr-4430.yml b/html/changelogs/AutoChangeLog-pr-4430.yml new file mode 100644 index 0000000000..11fd6bb4a7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4430.yml @@ -0,0 +1,4 @@ +author: "Naksu" +delete-after: True +changes: + - tweak: "Hostile mobs on z-levels without living players will now conserve their efforts and simply not run AI routines at all. Also, idling mob routines should be significantly cheaper on non-station Z-levels." diff --git a/html/changelogs/AutoChangeLog-pr-4628.yml b/html/changelogs/AutoChangeLog-pr-4628.yml new file mode 100644 index 0000000000..08311f545a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4628.yml @@ -0,0 +1,4 @@ +author: "deathride58" +delete-after: True +changes: + - bugfix: "Vore is now actually fixed. Fuck." diff --git a/modular_citadel/code/modules/mob/living/carbon/human/human_defense.dm b/modular_citadel/code/modules/mob/living/carbon/human/human_defense.dm index b61df944d1..1952b3a3b8 100644 --- a/modular_citadel/code/modules/mob/living/carbon/human/human_defense.dm +++ b/modular_citadel/code/modules/mob/living/carbon/human/human_defense.dm @@ -1,4 +1,4 @@ -/mob/living/human/grabbedby(mob/living/carbon/user, supress_message = 0) +/mob/living/carbon/human/grabbedby(mob/living/carbon/user, supress_message = 0) if(user == src && pulling && !pulling.anchored && grab_state >= GRAB_AGGRESSIVE && isliving(pulling)) vore_attack(user, pulling) else