From 4b51a53bb1a7b1b58bfa929f92ffe00d2b2cfbb1 Mon Sep 17 00:00:00 2001 From: Bjarl <94164348+Bjarl@users.noreply.github.com> Date: Fri, 27 Sep 2024 19:33:09 -0400 Subject: [PATCH 1/2] defines + adds SSturrets --- code/__DEFINES/subsystems.dm | 1 + code/controllers/subsystem/turrets.dm | 41 +++++++++++++++++++ .../machinery/porta_turret/portable_turret.dm | 1 + shiptest.dme | 1 + 4 files changed, 44 insertions(+) create mode 100644 code/controllers/subsystem/turrets.dm diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 54874bc9e16b..1155ea88bed9 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -130,6 +130,7 @@ #define INIT_ORDER_ATOMS 30 #define INIT_ORDER_LANGUAGE 25 #define INIT_ORDER_MACHINES 20 +#define INIT_ORDER_TURRETS 17 #define INIT_ORDER_SKILLS 15 #define INIT_ORDER_TIMER 1 #define INIT_ORDER_DEFAULT 0 diff --git a/code/controllers/subsystem/turrets.dm b/code/controllers/subsystem/turrets.dm new file mode 100644 index 000000000000..634f6327e458 --- /dev/null +++ b/code/controllers/subsystem/turrets.dm @@ -0,0 +1,41 @@ +SUBSYSTEM_DEF(turrets) + name = "Turrets" + wait = 5 + init_order = INIT_ORDER_MACHINES + flags = SS_KEEP_TIMING + runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME + var/list/processing = list() + var/list/currentrun = list() + +/datum/controller/subsystem/turrets/get_metrics() + . = ..() + var/list/cust = list() + cust["processing"] = length(processing) + .["custom"] = cust + +/datum/controller/subsystem/turrets/stat_entry(msg) + msg = "M:[length(processing)]]" + return ..() + + +/datum/controller/subsystem/turrets/fire(resumed = 0) + if (!resumed) + src.currentrun = processing.Copy() + + //cache for sanic speed (lists are references anyways) + var/list/currentrun = src.currentrun + + var/seconds = wait * 0.1 + while(currentrun.len) + var/obj/machinery/thing = currentrun[currentrun.len] + currentrun.len-- + if(QDELETED(thing) || thing.process(seconds) == PROCESS_KILL) + processing -= thing + if (!QDELETED(thing)) + thing.datum_flags &= ~DF_ISPROCESSING + if (MC_TICK_CHECK) + return + +/datum/controller/subsystem/turrets/Recover() + if (istype(SSturrets.processing)) + processing = SSmachines.processing diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index 3e50954df0c7..0ea4cb03ba15 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -41,6 +41,7 @@ DEFINE_BITFIELD(turret_flags, list( integrity_failure = 0.5 armor = list("melee" = 50, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90) base_icon_state = "standard" + subsystem_type = /datum/controller/subsystem/turrets /// Scan range of the turret for locating targets var/scan_range = 7 /// For turrets inside other objects diff --git a/shiptest.dme b/shiptest.dme index e460d129f655..c7fb62befe18 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -395,6 +395,7 @@ #include "code\controllers\subsystem\title.dm" #include "code\controllers\subsystem\traumas.dm" #include "code\controllers\subsystem\turf_fire.dm" +#include "code\controllers\subsystem\turrets.dm" #include "code\controllers\subsystem\verb_manager.dm" #include "code\controllers\subsystem\vis_overlays.dm" #include "code\controllers\subsystem\vote.dm" From fb47ebc9746c5563e64ab4de5eeb8adbe01fd582 Mon Sep 17 00:00:00 2001 From: Bjarl <94164348+Bjarl@users.noreply.github.com> Date: Fri, 27 Sep 2024 19:34:24 -0400 Subject: [PATCH 2/2] Update portable_turret.dm --- code/game/machinery/porta_turret/portable_turret.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index 0ea4cb03ba15..c817f7d7e185 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -80,7 +80,7 @@ DEFINE_BITFIELD(turret_flags, list( var/obj/machinery/porta_turret_cover/cover = null /// World.time the turret last fired var/last_fired = 0 - /// Ticks until next shot (1.5 ?) + /// Ticks until next shot (1.5 ?) If this needs to go below 5, use SSFastProcess var/shot_delay = 15 /// Turret flags about who is turret allowed to shoot var/turret_flags = TURRET_FLAG_SHOOT_CRIMINALS | TURRET_FLAG_SHOOT_ANOMALOUS