diff --git a/code/ATMOSPHERICS/datum_pipeline.dm b/code/ATMOSPHERICS/datum_pipeline.dm index b4a0cd9ba7b..43082c38ded 100644 --- a/code/ATMOSPHERICS/datum_pipeline.dm +++ b/code/ATMOSPHERICS/datum_pipeline.dm @@ -22,7 +22,7 @@ A.nullifyPipenet(src) return ..() -/datum/pipeline/proc/process()//This use to be called called from the pipe networks +/datum/pipeline/process()//This use to be called called from the pipe networks if(update) update = 0 reconcile_air() diff --git a/code/__DEFINES/MC.dm b/code/__DEFINES/MC.dm index 1c4c12c243d..cbcf2c1dd90 100644 --- a/code/__DEFINES/MC.dm +++ b/code/__DEFINES/MC.dm @@ -21,7 +21,6 @@ #define START_PROCESSING(Processor, Datum) if (!Datum.isprocessing) {Datum.isprocessing = TRUE;Processor.processing += Datum} #define STOP_PROCESSING(Processor, Datum) Datum.isprocessing = FALSE;Processor.processing -= Datum -#define START_DEFERRED_PROCESSING(Processor, Datum) if (!Datum.isprocessing) {Datum.isprocessing = TRUE;Processor.processing.Insert(1,Datum)} //SubSystem flags (Please design any new flags so that the default is off, to make adding flags to subsystems easier) diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 5ee80535780..ba0d1858616 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -13,6 +13,8 @@ //Objects #define isitem(A) (istype(A, /obj/item)) +#define ismachinery(A) (istype(A, /obj/machinery)) + #define ismecha(A) (istype(A, /obj/mecha)) #define is_cleanable(A) (istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/rune)) //if something is cleanable diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 5ade3b0baef..29a93ae94f9 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -61,6 +61,8 @@ #define INIT_ORDER_LANGUAGE 6 #define INIT_ORDER_MACHINES 5 #define INIT_ORDER_CIRCUIT 4 +#define INIT_ORDER_HOLIDAY 3 +#define INIT_ORDER_ALARMS 2 #define INIT_ORDER_TIMER 1 #define INIT_ORDER_DEFAULT 0 #define INIT_ORDER_AIR -1 diff --git a/code/__HELPERS/names.dm b/code/__HELPERS/names.dm index 930a8ee9de5..5b90cda376e 100644 --- a/code/__HELPERS/names.dm +++ b/code/__HELPERS/names.dm @@ -49,10 +49,10 @@ var/religion_name = null name = "" // Prefix - for(var/holiday_name in holiday_master.holidays) + for(var/holiday_name in SSholiday.holidays) if(holiday_name == "Friday the 13th") random = 13 - var/datum/holiday/holiday = holiday_master.holidays[holiday_name] + var/datum/holiday/holiday = SSholiday.holidays[holiday_name] name = holiday.getStationPrefix() //get normal name if(!name) diff --git a/code/_compile_options.dm b/code/_compile_options.dm index 436970567a0..968a2f4d577 100644 --- a/code/_compile_options.dm +++ b/code/_compile_options.dm @@ -27,7 +27,5 @@ Due to BYOND features used in this codebase, you must update to version 510 or l This may require updating to a beta release. #endif -var/global/list/processing_objects = list() //This has to be initialized BEFORE world - // Macros that must exist before world.dm -#define to_chat to_chat_filename=__FILE__;to_chat_line=__LINE__;to_chat_src=src;__to_chat +#define to_chat to_chat_filename=__FILE__;to_chat_line=__LINE__;to_chat_src=src;__to_chat \ No newline at end of file diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index c7217221585..906bacf0e54 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -19,7 +19,6 @@ GLOBAL_LIST_INIT(navigation_computers, list()) GLOBAL_LIST_INIT(all_areas, list()) GLOBAL_LIST_INIT(machines, list()) -GLOBAL_LIST_INIT(fast_processing, list()) GLOBAL_LIST_INIT(processing_power_items, list()) //items that ask to be called every cycle GLOBAL_LIST_INIT(rcd_list, list()) //list of Rapid Construction Devices. diff --git a/code/_globalvars/misc.dm b/code/_globalvars/misc.dm index f0bb813a336..0b8c8d58a95 100644 --- a/code/_globalvars/misc.dm +++ b/code/_globalvars/misc.dm @@ -1,8 +1,6 @@ var/global/obj/effect/overlay/plmaster = null var/global/obj/effect/overlay/slmaster = null -// Event Manager, the manager for events. -var/datum/event_manager/event_manager = new() // Announcer intercom, because too much stuff creates an intercom for one message then hard del()s it. var/global/obj/item/radio/intercom/global_announcer = create_global_announcer() var/global/obj/item/radio/intercom/command/command_announcer = create_command_announcer() diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm index 24a2442faeb..e3d423130e5 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -154,6 +154,12 @@ #define ui_bot_radio "EAST-1:28,SOUTH:7" #define ui_bot_pull "EAST-2:26,SOUTH:7" +//Ghosts +#define ui_ghost_jumptomob "SOUTH:6,CENTER-2:24" +#define ui_ghost_orbit "SOUTH:6,CENTER-1:24" +#define ui_ghost_reenter_corpse "SOUTH:6,CENTER:24" +#define ui_ghost_teleport "SOUTH:6,CENTER+1:24" + //HUD styles. Please ensure HUD_VERSIONS is the same as the maximum index. Index order defines how they are cycled in F12. #define HUD_STYLE_STANDARD 1 #define HUD_STYLE_REDUCED 2 diff --git a/code/_onclick/hud/ghost.dm b/code/_onclick/hud/ghost.dm new file mode 100644 index 00000000000..4e92395f4cc --- /dev/null +++ b/code/_onclick/hud/ghost.dm @@ -0,0 +1,61 @@ +/mob/dead/observer/create_mob_hud() + if(client && !hud_used) + hud_used = new /datum/hud/ghost(src) + +/obj/screen/ghost + icon = 'icons/mob/screen_ghost.dmi' + +/obj/screen/ghost/MouseEntered() + flick(icon_state + "_anim", src) + +/obj/screen/ghost/jumptomob + name = "Jump to mob" + icon_state = "jumptomob" + +/obj/screen/ghost/jumptomob/Click() + var/mob/dead/observer/G = usr + G.jumptomob() + +/obj/screen/ghost/orbit + name = "Orbit" + icon_state = "orbit" + +/obj/screen/ghost/orbit/Click() + var/mob/dead/observer/G = usr + G.follow() + +/obj/screen/ghost/reenter_corpse + name = "Re-enter corpse" + icon_state = "reenter_corpse" + +/obj/screen/ghost/reenter_corpse/Click() + var/mob/dead/observer/G = usr + G.reenter_corpse() + +/obj/screen/ghost/teleport + name = "Teleport" + icon_state = "teleport" + +/obj/screen/ghost/teleport/Click() + var/mob/dead/observer/G = usr + G.dead_tele() + +/datum/hud/ghost/New(mob/owner) + ..() + var/obj/screen/using + + using = new /obj/screen/ghost/jumptomob() + using.screen_loc = ui_ghost_jumptomob + static_inventory += using + + using = new /obj/screen/ghost/orbit() + using.screen_loc = ui_ghost_orbit + static_inventory += using + + using = new /obj/screen/ghost/reenter_corpse() + using.screen_loc = ui_ghost_reenter_corpse + static_inventory += using + + using = new /obj/screen/ghost/teleport() + using.screen_loc = ui_ghost_teleport + static_inventory += using diff --git a/code/controllers/ProcessScheduler/core/process.dm b/code/controllers/ProcessScheduler/core/process.dm index 134eaec96a6..f997109f90b 100644 --- a/code/controllers/ProcessScheduler/core/process.dm +++ b/code/controllers/ProcessScheduler/core/process.dm @@ -158,7 +158,7 @@ /datum/controller/process/proc/setup() -/datum/controller/process/proc/process() +/datum/controller/process/proc/process_decrepit() started() doWork() finished() diff --git a/code/controllers/ProcessScheduler/core/processScheduler.dm b/code/controllers/ProcessScheduler/core/processScheduler.dm index 9fcf6d13759..66d101d178e 100644 --- a/code/controllers/ProcessScheduler/core/processScheduler.dm +++ b/code/controllers/ProcessScheduler/core/processScheduler.dm @@ -72,9 +72,9 @@ var/global/datum/controller/processScheduler/processScheduler scheduler_sleep_interval = world.tick_lag updateStartDelays() spawn(0) - process() + process_decrepit() -/datum/controller/processScheduler/proc/process() +/datum/controller/processScheduler/proc/process_decrepit() while(isRunning) checkRunningProcesses() queueProcesses() @@ -154,7 +154,7 @@ var/global/datum/controller/processScheduler/processScheduler /datum/controller/processScheduler/proc/runProcess(var/datum/controller/process/process) spawn(0) - process.process() + process.process_decrepit() /datum/controller/processScheduler/proc/processStarted(var/datum/controller/process/process) setRunningProcessState(process) diff --git a/code/controllers/Processes/alarm.dm b/code/controllers/Processes/alarm.dm deleted file mode 100644 index 068ef0c1213..00000000000 --- a/code/controllers/Processes/alarm.dm +++ /dev/null @@ -1,37 +0,0 @@ -// We manually initialize the alarm handlers instead of looping over all existing types -// to make it possible to write: camera.triggerAlarm() rather than alarm_manager.managers[datum/alarm_handler/camera].triggerAlarm() or a variant thereof. -/var/global/datum/alarm_handler/atmosphere/atmosphere_alarm = new() -/var/global/datum/alarm_handler/burglar/burglar_alarm = new() -/var/global/datum/alarm_handler/camera/camera_alarm = new() -/var/global/datum/alarm_handler/fire/fire_alarm = new() -/var/global/datum/alarm_handler/motion/motion_alarm = new() -/var/global/datum/alarm_handler/power/power_alarm = new() - -// Alarm Manager, the manager for alarms. -var/datum/controller/process/alarm/alarm_manager - -/datum/controller/process/alarm - var/list/datum/alarm/all_handlers - -/datum/controller/process/alarm/setup() - name = "alarm" - schedule_interval = 20 // every 2 seconds - all_handlers = list(atmosphere_alarm, burglar_alarm, camera_alarm, fire_alarm, motion_alarm, power_alarm) - -/datum/controller/process/alarm/doWork() - for(var/datum/alarm_handler/AH in all_handlers) - AH.process() - -DECLARE_GLOBAL_CONTROLLER(alarm, alarm_manager) - -/datum/controller/process/alarm/proc/active_alarms() - var/list/all_alarms = new - for(var/datum/alarm_handler/AH in all_handlers) - var/list/alarms = AH.alarms - all_alarms += alarms - - return all_alarms - -/datum/controller/process/alarm/proc/number_of_active_alarms() - var/list/alarms = active_alarms() - return alarms.len diff --git a/code/controllers/Processes/event.dm b/code/controllers/Processes/event.dm deleted file mode 100644 index 42e8c4bcc1d..00000000000 --- a/code/controllers/Processes/event.dm +++ /dev/null @@ -1,48 +0,0 @@ -/datum/controller/process/event/setup() - name = "event" - schedule_interval = 20 // every 2 seconds - if(!holiday_master) - holiday_master = new - holiday_master.Setup() - -/datum/controller/process/event/doWork() - event_manager.process() - holiday_master.process() - -///////// -//Holiday controller -///////// - -var/global/datum/controller/holiday/holiday_master //This has to be defined before world. - -/datum/controller/holiday - var/list/holidays - -/datum/controller/holiday/proc/Setup() - getHoliday() - -/datum/controller/holiday/proc/process() - if(holiday_master.holidays) - for(var/datum/holiday/H in holiday_master.holidays) - if(H.eventChance) - if(prob(H.eventChance)) - H.handle_event() - -/datum/controller/holiday/proc/getHoliday() - if(!config.allow_holidays) return //Holiday stuff was not enabled in the config! - - var/YY = text2num(time2text(world.timeofday, "YY")) // get the current year - var/MM = text2num(time2text(world.timeofday, "MM")) // get the current month - var/DD = text2num(time2text(world.timeofday, "DD")) // get the current day - - for(var/H in subtypesof(/datum/holiday)) - var/datum/holiday/holiday = new H() - if(holiday.shouldCelebrate(DD, MM, YY)) - holiday.celebrate() - if(!holidays) - holidays = list() - holidays[holiday.name] = holiday - - if(holidays) - holidays = shuffle(holidays) - world.update_status() diff --git a/code/controllers/Processes/fast_process.dm b/code/controllers/Processes/fast_process.dm deleted file mode 100644 index c27a749f526..00000000000 --- a/code/controllers/Processes/fast_process.dm +++ /dev/null @@ -1,17 +0,0 @@ -/datum/controller/process/fast_process/setup() - name = "fast processing" - schedule_interval = 2 //every 0.2 seconds - start_delay = 9 - log_startup_progress("Fast Processing starting up.") - -/datum/controller/process/fast_process/statProcess() - ..() - stat(null, "[GLOB.fast_processing.len] fast processes") - -/datum/controller/process/fast_process/doWork() - for(last_object in GLOB.fast_processing) - var/obj/O = last_object - try - O.process() - catch(var/exception/e) - catchException(e, O) \ No newline at end of file diff --git a/code/controllers/Processes/obj.dm b/code/controllers/Processes/obj.dm deleted file mode 100644 index 454709b6194..00000000000 --- a/code/controllers/Processes/obj.dm +++ /dev/null @@ -1,28 +0,0 @@ -/datum/controller/process/obj/setup() - name = "obj" - schedule_interval = 20 // every 2 seconds - start_delay = 8 - -/datum/controller/process/obj/started() - ..() - if(!processing_objects) - processing_objects = list() - -/datum/controller/process/obj/statProcess() - ..() - stat(null, "[processing_objects.len] objects") - -/datum/controller/process/obj/doWork() - for(last_object in processing_objects) - var/datum/O = last_object - if(istype(O) && !QDELETED(O)) - try - // Reagent datums get shoved in here, but the process proc isn't on the - // base datum type, so we just call it blindly. - O:process() - catch(var/exception/e) - catchException(e, O) - SCHECK - else - catchBadType(O) - processing_objects -= O diff --git a/code/controllers/Processes/ticker.dm b/code/controllers/Processes/ticker.dm index 8fc476116e5..578c2725710 100644 --- a/code/controllers/Processes/ticker.dm +++ b/code/controllers/Processes/ticker.dm @@ -30,7 +30,7 @@ DECLARE_GLOBAL_CONTROLLER(ticker, tickerProcess) lastTickerTime = currentTime - ticker.process() + ticker.process_decrepit() /datum/controller/process/ticker/proc/getLastTickerTimeDuration() return lastTickerTimeDuration diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm index 8fbed1f0b0f..79de45c3248 100644 --- a/code/controllers/subsystem/air.dm +++ b/code/controllers/subsystem/air.dm @@ -67,7 +67,7 @@ SUBSYSTEM_DEF(air) setup_allturfs() setup_atmos_machinery(GLOB.machines) setup_pipenets(GLOB.machines) - ..() + return ..() /datum/controller/subsystem/air/fire(resumed = 0) diff --git a/code/controllers/subsystem/alarm.dm b/code/controllers/subsystem/alarm.dm new file mode 100644 index 00000000000..90e3ff960f1 --- /dev/null +++ b/code/controllers/subsystem/alarm.dm @@ -0,0 +1,30 @@ +SUBSYSTEM_DEF(alarms) + name = "Alarms" + init_order = INIT_ORDER_ALARMS // 2 + var/datum/alarm_handler/atmosphere/atmosphere_alarm = new() + var/datum/alarm_handler/burglar/burglar_alarm = new() + var/datum/alarm_handler/camera/camera_alarm = new() + var/datum/alarm_handler/fire/fire_alarm = new() + var/datum/alarm_handler/motion/motion_alarm = new() + var/datum/alarm_handler/power/power_alarm = new() + var/list/datum/alarm/all_handlers + +/datum/controller/subsystem/alarms/Initialize(start_timeofday) + all_handlers = list(SSalarms.atmosphere_alarm, SSalarms.burglar_alarm, SSalarms.camera_alarm, SSalarms.fire_alarm, SSalarms.motion_alarm, SSalarms.power_alarm) + return ..() + +/datum/controller/subsystem/alarms/fire() + for(var/datum/alarm_handler/AH in all_handlers) + AH.process() + +/datum/controller/subsystem/alarms/proc/active_alarms() + var/list/all_alarms = new () + for(var/datum/alarm_handler/AH in all_handlers) + var/list/alarms = AH.alarms + all_alarms += alarms + + return all_alarms + +/datum/controller/subsystem/alarms/proc/number_of_active_alarms() + var/list/alarms = active_alarms() + return alarms.len diff --git a/code/controllers/subsystem/assets.dm b/code/controllers/subsystem/assets.dm index 1423c6cf9bd..cd531db614a 100644 --- a/code/controllers/subsystem/assets.dm +++ b/code/controllers/subsystem/assets.dm @@ -14,4 +14,4 @@ SUBSYSTEM_DEF(assets) for(var/client/C in GLOB.clients) addtimer(CALLBACK(GLOBAL_PROC, .proc/getFilesSlow, C, preload, FALSE), 10) - ..() \ No newline at end of file + return ..() \ No newline at end of file diff --git a/code/controllers/subsystem/atoms.dm b/code/controllers/subsystem/atoms.dm index a0b2d49d958..cbe8806fc15 100644 --- a/code/controllers/subsystem/atoms.dm +++ b/code/controllers/subsystem/atoms.dm @@ -19,6 +19,7 @@ SUBSYSTEM_DEF(atoms) setupgenetics() initialized = INITIALIZATION_INNEW_MAPLOAD InitializeAtoms() + return ..() diff --git a/code/modules/events/event_manager.dm b/code/controllers/subsystem/events.dm similarity index 73% rename from code/modules/events/event_manager.dm rename to code/controllers/subsystem/events.dm index 1545ddbbdf0..95553ab0d7e 100644 --- a/code/modules/events/event_manager.dm +++ b/code/controllers/subsystem/events.dm @@ -1,19 +1,25 @@ -/datum/event_manager +SUBSYSTEM_DEF(events) + name = "Events" + init_order = INIT_ORDER_EVENTS + runlevels = RUNLEVEL_GAME + // Report events at the end of the rouund + var/report_at_round_end = 0 + + // UI vars var/window_x = 700 var/window_y = 600 - var/report_at_round_end = 0 var/table_options = " align='center'" var/head_options = " style='font-weight:bold;'" var/row_options1 = " width='85px'" var/row_options2 = " width='260px'" var/row_options3 = " width='150px'" + + // Event vars var/datum/event_container/selected_event_container = null - - var/list/datum/event/active_events = list() - var/list/datum/event/finished_events = list() - - var/list/datum/event/allEvents - var/list/datum/event_container/event_containers = list( + var/list/active_events = list() + var/list/finished_events = list() + var/list/allEvents + var/list/event_containers = list( EVENT_LEVEL_MUNDANE = new/datum/event_container/mundane, EVENT_LEVEL_MODERATE = new/datum/event_container/moderate, EVENT_LEVEL_MAJOR = new/datum/event_container/major @@ -21,18 +27,19 @@ var/datum/event_meta/new_event = new -/datum/event_manager/New() +/datum/controller/subsystem/events/Initialize() allEvents = subtypesof(/datum/event) + return ..() -/datum/event_manager/proc/process() - for(var/datum/event/E in event_manager.active_events) +/datum/controller/subsystem/events/fire() + for(var/datum/event/E in active_events) E.process() for(var/i = EVENT_LEVEL_MUNDANE to EVENT_LEVEL_MAJOR) var/list/datum/event_container/EC = event_containers[i] EC.process() -/datum/event_manager/proc/event_complete(var/datum/event/E) +/datum/controller/subsystem/events/proc/event_complete(var/datum/event/E) if(!E.event_meta) // datum/event is used here and there for random reasons, maintaining "backwards compatibility" log_debug("Event of '[E.type]' with missing meta-data has completed.") return @@ -57,11 +64,11 @@ log_debug("Event '[EM.name]' has completed at [station_time_timestamp()].") -/datum/event_manager/proc/delay_events(var/severity, var/delay) +/datum/controller/subsystem/events/proc/delay_events(var/severity, var/delay) var/list/datum/event_container/EC = event_containers[severity] EC.next_event_time += delay -/datum/event_manager/proc/Interact(var/mob/living/user) +/datum/controller/subsystem/events/proc/Interact(var/mob/living/user) var/html = GetInteractWindow() @@ -69,7 +76,7 @@ popup.set_content(html) popup.open() -/datum/event_manager/proc/RoundEnd() +/datum/controller/subsystem/events/proc/RoundEnd() if(!report_at_round_end) return @@ -89,7 +96,7 @@ to_chat(world, message) -/datum/event_manager/proc/GetInteractWindow() +/datum/controller/subsystem/events/proc/GetInteractWindow() var/html = "Refresh" if(selected_event_container) @@ -197,7 +204,7 @@ return html -/datum/event_manager/Topic(href, href_list) +/datum/controller/subsystem/events/Topic(href, href_list) if(..()) return @@ -290,123 +297,3 @@ EC.next_event = null Interact(usr) - -/client/proc/forceEvent(var/type in event_manager.allEvents) - set name = "Trigger Event (Debug Only)" - set category = "Debug" - - if(!holder) - return - - if(ispath(type)) - new type(new /datum/event_meta(EVENT_LEVEL_MAJOR)) - message_admins("[key_name_admin(usr)] has triggered an event. ([type])", 1) - -/client/proc/event_manager_panel() - set name = "Event Manager Panel" - set category = "Event" - if(event_manager) - event_manager.Interact(usr) - feedback_add_details("admin_verb","EMP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - return - -/proc/findEventArea() //Here's a nice proc to use to find an area for your event to land in! - var/area/candidate = null - - var/list/safe_areas = list( - /area/turret_protected/ai, - /area/turret_protected/ai_upload, - /area/engine, - /area/solar, - /area/holodeck, - /area/shuttle/arrival, - /area/shuttle/escape, - /area/shuttle/escape_pod1/station, - /area/shuttle/escape_pod2/station, - /area/shuttle/escape_pod3/station, - /area/shuttle/escape_pod5/station, - /area/shuttle/specops/station, - /area/shuttle/prison/station, - /area/shuttle/administration/station - ) - - //These are needed because /area/engine has to be removed from the list, but we still want these areas to get fucked up. - var/list/danger_areas = list( - /area/engine/break_room, - /area/engine/chiefs_office) - - var/list/event_areas = list() - - for(var/areapath in the_station_areas) - event_areas += typesof(areapath) - for(var/areapath in safe_areas) - event_areas -= typesof(areapath) - for(var/areapath in danger_areas) - event_areas += typesof(areapath) - - while(event_areas.len > 0) - var/list/event_turfs = null - candidate = locate(pick_n_take(event_areas)) - event_turfs = get_area_turfs(candidate) - if(event_turfs.len > 0) - break - - return candidate - -/datum/event/proc/num_players() - var/players = 0 - for(var/mob/living/carbon/human/P in GLOB.player_list) - if(P.client) - players++ - return players - -// Returns how many characters are currently active(not logged out, not AFK for more than 10 minutes) -// with a specific role. -// Note that this isn't sorted by department, because e.g. having a roboticist shouldn't make meteors spawn. -/proc/number_active_with_role() - var/list/active_with_role = list() - active_with_role["Engineer"] = 0 - active_with_role["Medical"] = 0 - active_with_role["Security"] = 0 - active_with_role["Scientist"] = 0 - active_with_role["AI"] = 0 - active_with_role["Cyborg"] = 0 - active_with_role["Janitor"] = 0 - active_with_role["Botanist"] = 0 - active_with_role["Any"] = GLOB.player_list.len - - for(var/mob/M in GLOB.player_list) - if(!M.mind || !M.client || M.client.inactivity > 10 * 10 * 60) // longer than 10 minutes AFK counts them as inactive - continue - - if(istype(M, /mob/living/silicon/robot) && M:module && M:module.name == "engineering robot module") - active_with_role["Engineer"]++ - if(M.mind.assigned_role in list("Chief Engineer", "Station Engineer")) - active_with_role["Engineer"]++ - - if(istype(M, /mob/living/silicon/robot) && M:module && M:module.name == "medical robot module") - active_with_role["Medical"]++ - if(M.mind.assigned_role in list("Chief Medical Officer", "Medical Doctor")) - active_with_role["Medical"]++ - - if(istype(M, /mob/living/silicon/robot) && M:module && M:module.name == "security robot module") - active_with_role["Security"]++ - if(M.mind.assigned_role in security_positions) - active_with_role["Security"]++ - - if(M.mind.assigned_role in list("Research Director", "Scientist")) - active_with_role["Scientist"]++ - - if(M.mind.assigned_role == "AI") - active_with_role["AI"]++ - - if(M.mind.assigned_role == "Cyborg") - active_with_role["Cyborg"]++ - - if(M.mind.assigned_role == "Janitor") - active_with_role["Janitor"]++ - - if(M.mind.assigned_role == "Botanist") - active_with_role["Botanist"]++ - - return active_with_role diff --git a/code/controllers/subsystem/holiday.dm b/code/controllers/subsystem/holiday.dm new file mode 100644 index 00000000000..be9d6d4fc7d --- /dev/null +++ b/code/controllers/subsystem/holiday.dm @@ -0,0 +1,31 @@ +SUBSYSTEM_DEF(holiday) + name = "Holiday" + init_order = INIT_ORDER_HOLIDAY // 3 + flags = SS_NO_FIRE + var/list/holidays + +/datum/controller/subsystem/holiday/Initialize(start_timeofday) + if(!config.allow_holidays) + return ..() //Holiday stuff was not enabled in the config! + + var/YY = text2num(time2text(world.timeofday, "YY")) // get the current year + var/MM = text2num(time2text(world.timeofday, "MM")) // get the current month + var/DD = text2num(time2text(world.timeofday, "DD")) // get the current day + + for(var/H in subtypesof(/datum/holiday)) + var/datum/holiday/holiday = new H() + if(holiday.shouldCelebrate(DD, MM, YY)) + holiday.celebrate() + if(!holidays) + holidays = list() + holidays[holiday.name] = holiday + + if(holidays) + holidays = shuffle(holidays) + world.update_status() + for(var/datum/holiday/H in holidays) + if(H.eventChance) + if(prob(H.eventChance)) + H.handle_event() + + return ..() \ No newline at end of file diff --git a/code/controllers/subsystem/icon_smooth.dm b/code/controllers/subsystem/icon_smooth.dm index 65260e5af55..531b6af2e78 100644 --- a/code/controllers/subsystem/icon_smooth.dm +++ b/code/controllers/subsystem/icon_smooth.dm @@ -29,4 +29,4 @@ SUBSYSTEM_DEF(icon_smooth) smooth_icon(A) CHECK_TICK - ..() + return ..() diff --git a/code/controllers/subsystem/jobs.dm b/code/controllers/subsystem/jobs.dm index 3639db6bbd2..ccd83640aa6 100644 --- a/code/controllers/subsystem/jobs.dm +++ b/code/controllers/subsystem/jobs.dm @@ -17,7 +17,7 @@ SUBSYSTEM_DEF(jobs) if(!occupations.len) SetupOccupations() LoadJobs("config/jobs.txt") - ..() + return ..() /datum/controller/subsystem/jobs/proc/SetupOccupations(var/list/faction = list("Station")) occupations = list() diff --git a/code/controllers/subsystem/machinery.dm b/code/controllers/subsystem/machinery.dm index af6898c39bd..7038ad4db4f 100644 --- a/code/controllers/subsystem/machinery.dm +++ b/code/controllers/subsystem/machinery.dm @@ -17,7 +17,7 @@ SUBSYSTEM_DEF(machines) /datum/controller/subsystem/machines/Initialize() makepowernets() fire() - ..() + return ..() /datum/controller/subsystem/machines/proc/makepowernets() for(var/datum/powernet/PN in powernets) diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index 43c2f406365..d08fba5ff4f 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -28,7 +28,7 @@ SUBSYSTEM_DEF(mapping) // Populate mining Z-level hidden rooms for(var/i=0, i[loc.name]\'s flesh rapidly inflates, forming a bloated mass around [loc.p_their()] body!", "We inflate our flesh, creating a spaceproof suit!", "You hear organic matter ripping and tearing!") - processing_objects += src + START_PROCESSING(SSobj, src) /obj/item/clothing/suit/space/changeling/process() if(ishuman(loc)) diff --git a/code/game/gamemodes/cult/cult_comms.dm b/code/game/gamemodes/cult/cult_comms.dm index 2fbbcdc413d..e93556ca843 100644 --- a/code/game/gamemodes/cult/cult_comms.dm +++ b/code/game/gamemodes/cult/cult_comms.dm @@ -39,7 +39,7 @@ my_message = "Harbringer of the Slaughter: [message]" else my_message = "[(ishuman(user) ? "Acolyte" : "Construct")] [user]: [message]" - for(var/mob/M in GLOB.mob_list) + for(var/mob/M in GLOB.player_list) if(iscultist(M)) to_chat(M, my_message) else if(M in GLOB.dead_mob_list) diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm index 63e0626f481..60f878257db 100644 --- a/code/game/gamemodes/cult/cult_structures.dm +++ b/code/game/gamemodes/cult/cult_structures.dm @@ -193,11 +193,11 @@ var/list/blacklisted_pylon_turfs = typecacheof(list( return /obj/structure/cult/functional/pylon/New() - processing_objects |= src + START_PROCESSING(SSobj, src) ..() /obj/structure/cult/functional/pylon/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() /obj/structure/cult/functional/pylon/process() diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 535823ebfee..5f3ed489107 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -88,7 +88,7 @@ ///process() ///Called by the gameticker -/datum/game_mode/proc/process() +/datum/game_mode/process() return 0 //Called by the gameticker diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm index c2268063822..6ae995a1e77 100644 --- a/code/game/gamemodes/gameticker.dm +++ b/code/game/gamemodes/gameticker.dm @@ -172,10 +172,10 @@ var/round_start_time = 0 to_chat(world, "Enjoy the game!") world << sound('sound/AI/welcome.ogg')// Skie - if(holiday_master.holidays) + if(SSholiday.holidays) to_chat(world, "and...") - for(var/holidayname in holiday_master.holidays) - var/datum/holiday/holiday = holiday_master.holidays[holidayname] + for(var/holidayname in SSholiday.holidays) + var/datum/holiday/holiday = SSholiday.holidays[holidayname] to_chat(world, "

[holiday.greet()]

") spawn(0) // Forking dynamic room selection @@ -400,7 +400,7 @@ var/round_start_time = 0 if(m) to_chat(world, "Tip of the round: [html_encode(m)]") -/datum/controller/gameticker/proc/process() +/datum/controller/gameticker/proc/process_decrepit() if(current_state != GAME_STATE_PLAYING) return 0 @@ -506,7 +506,7 @@ var/round_start_time = 0 mode.declare_station_goal_completion() //Ask the event manager to print round end information - event_manager.RoundEnd() + SSevents.RoundEnd() return 1 diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm index 830ae26f3c1..bfde102ca35 100644 --- a/code/game/gamemodes/malfunction/Malf_Modules.dm +++ b/code/game/gamemodes/malfunction/Malf_Modules.dm @@ -56,7 +56,7 @@ var/announced = 0 /obj/machinery/doomsday_device/Destroy() - GLOB.fast_processing -= src + STOP_PROCESSING(SSfastprocess, src) SSshuttle.emergencyNoEscape = 0 if(SSshuttle.emergency.mode == SHUTTLE_STRANDED) SSshuttle.emergency.mode = SHUTTLE_DOCKED @@ -67,7 +67,7 @@ /obj/machinery/doomsday_device/proc/start() detonation_timer = world.time + default_timer timing = 1 - GLOB.fast_processing += src + START_PROCESSING(SSfastprocess, src) SSshuttle.emergencyNoEscape = 1 /obj/machinery/doomsday_device/proc/seconds_remaining() @@ -84,7 +84,7 @@ priority_announcement.Announce("Hostile environment resolved. You have 3 minutes to board the Emergency Shuttle.", "Priority Announcement", 'sound/AI/shuttledock.ogg') qdel(src) if(!timing) - GLOB.fast_processing -= src + STOP_PROCESSING(SSfastprocess, src) return var/sec_left = seconds_remaining() if(sec_left <= 0) diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm index 92ac300cc00..827eefb569d 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm @@ -110,15 +110,15 @@ M.SetStunned(0) M.SetWeakened(0) combat_cooldown = 0 - processing_objects.Add(src) + START_PROCESSING(SSobj, src) /obj/item/clothing/suit/armor/abductor/vest/process() combat_cooldown++ if(combat_cooldown==initial(combat_cooldown)) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) /obj/item/clothing/suit/armor/abductor/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) for(var/obj/machinery/abductor/console/C in GLOB.machines) if(C.vest == src) C.vest = null diff --git a/code/game/gamemodes/miniantags/abduction/gland.dm b/code/game/gamemodes/miniantags/abduction/gland.dm index 8f058a872e6..fbe1774525f 100644 --- a/code/game/gamemodes/miniantags/abduction/gland.dm +++ b/code/game/gamemodes/miniantags/abduction/gland.dm @@ -373,11 +373,11 @@ /obj/effect/cocoon/abductor/proc/Start() hatch_time = world.time + 600 - processing_objects.Add(src) + START_PROCESSING(SSobj, src) /obj/effect/cocoon/abductor/process() if(world.time > hatch_time) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) for(var/mob/M in contents) src.visible_message("[src] hatches!") M.forceMove(get_turf(src)) diff --git a/code/game/gamemodes/miniantags/borer/borer.dm b/code/game/gamemodes/miniantags/borer/borer.dm index 34d1f64f0d0..fa797ac929b 100644 --- a/code/game/gamemodes/miniantags/borer/borer.dm +++ b/code/game/gamemodes/miniantags/borer/borer.dm @@ -32,7 +32,7 @@ return FALSE return B.host.say_understands(other, speaking) -/mob/living/captive_brain/emote(var/message) +/mob/living/captive_brain/emote(act, m_type = 1, message = null, force) return /mob/living/captive_brain/resist() @@ -157,7 +157,7 @@ if(!istype(S.speaking, /datum/language/corticalborer) && loc == host && !talk_inside_host) to_chat(src, "You've disabled audible speech while inside a host! Re-enable it under the borer tab, or stick to borer communications.") return - + . = ..() /mob/living/simple_animal/borer/verb/Communicate() @@ -475,7 +475,7 @@ set category = "Borer" set name = "Dominate Victim" set desc = "Freeze the limbs of a potential host with supernatural fear." - + if(world.time - used_dominate < 150) to_chat(src, "You cannot use that ability again so soon.") return @@ -487,22 +487,22 @@ if(stat) to_chat(src, "You cannot do that in your current state.") return - + if(attempting_to_dominate) to_chat(src, "You're already targeting someone!") return - + var/list/choices = list() for(var/mob/living/carbon/C in view(3,src)) if(C.stat != DEAD) choices += C - + if(world.time - used_dominate < 300) to_chat(src, "You cannot use that ability again so soon.") return - + attempting_to_dominate = TRUE - + var/mob/living/carbon/M = input(src,"Who do you wish to dominate?") in null|choices if(!M) @@ -519,8 +519,8 @@ if(incapacitated()) attempting_to_dominate = FALSE - return - + return + if(get_dist(src, M) > 7) //to avoid people remotely doing from across the map etc, 7 is the default view range to_chat(src, "You're too far away!") attempting_to_dominate = FALSE @@ -760,10 +760,9 @@ to_chat(src, "Your host twitches and quivers as you rapdly excrete several larvae from your sluglike body.") visible_message("[src] heaves violently, expelling a rush of vomit and a wriggling, sluglike creature!") B.chemicals -= 100 - - new /obj/effect/decal/cleanable/vomit(get_turf(src)) - playsound(loc, 'sound/effects/splat.ogg', 50, 1) - new /mob/living/simple_animal/borer(get_turf(src),B.generation + 1) + var/turf/T = get_turf(src) + T.add_vomit_floor() + new /mob/living/simple_animal/borer(T, B.generation + 1) else to_chat(src, "You need 100 chemicals to reproduce!") diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index 94190149848..2e36488cc8a 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -407,7 +407,7 @@ var/bomb_set /obj/item/disk/nuclear/New() ..() - processing_objects.Add(src) + START_PROCESSING(SSobj, src) GLOB.poi_list |= src /obj/item/disk/nuclear/process() @@ -437,7 +437,7 @@ var/bomb_set message_admins("[src] has been !!force deleted!! in ([diskturf ? "[diskturf.x], [diskturf.y] ,[diskturf.z] - JMP":"nonexistent location"]).") log_game("[src] has been !!force deleted!! in ([diskturf ? "[diskturf.x], [diskturf.y] ,[diskturf.z]":"nonexistent location"]).") GLOB.poi_list.Remove(src) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() if(blobstart.len > 0) diff --git a/code/game/gamemodes/shadowling/shadowling_abilities.dm b/code/game/gamemodes/shadowling/shadowling_abilities.dm index 30c79798b2f..ea95f62af57 100644 --- a/code/game/gamemodes/shadowling/shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/shadowling_abilities.dm @@ -335,7 +335,7 @@ include_user = 1 var/blind_smoke_acquired var/screech_acquired - var/drainLifeAcquired + var/nullChargeAcquired var/reviveThrallAcquired action_icon_state = "collective_mind" @@ -370,10 +370,11 @@ It will create a choking cloud that will blind any non-thralls who enter.") target.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/blindness_smoke(null)) - if(thralls >= CEILING(7 * ticker.mode.thrall_ratio, 1) && !drainLifeAcquired) - drainLifeAcquired = 1 - to_chat(target, "The power of your thralls has granted you the Drain Life ability. You can now drain the health of nearby humans to heal yourself.") - target.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/drainLife(null)) + if(thralls >= CEILING(7 * ticker.mode.thrall_ratio, 1) && !nullChargeAcquired) + nullChargeAcquired = 1 + to_chat(user, "The power of your thralls has granted you the Null Charge ability. This ability will drain an APC's contents to the void, preventing it from recharging \ + or sending power until repaired.") + target.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/null_charge(null)) if(thralls >= CEILING(9 * ticker.mode.thrall_ratio, 1) && !reviveThrallAcquired) reviveThrallAcquired = 1 @@ -491,45 +492,57 @@ for(var/obj/structure/window/W in T.contents) W.take_damage(rand(80, 100)) -/obj/effect/proc_holder/spell/aoe_turf/drainLife - name = "Drain Life" - desc = "Damages nearby humans, draining their life and healing your own wounds." +/obj/effect/proc_holder/spell/aoe_turf/null_charge + name = "Null Charge" + desc = "Empties an APC, preventing it from recharging until fixed." panel = "Shadowling Abilities" - range = 3 - charge_max = 100 - clothes_req = 0 - var/targetsDrained - var/list/nearbyTargets - action_icon_state = "drain_life" + charge_max = 600 + clothes_req = FALSE + action_icon_state = "null_charge" -/obj/effect/proc_holder/spell/aoe_turf/drainLife/cast(list/targets, mob/user = usr) +/obj/effect/proc_holder/spell/aoe_turf/null_charge/cast(mob/user = usr) if(!shadowling_check(user)) charge_counter = charge_max return - var/mob/living/carbon/human/U = usr - targetsDrained = 0 - nearbyTargets = list() - for(var/turf/T in targets) - for(var/mob/living/carbon/M in T.contents) - if(M == src) - continue - targetsDrained++ - nearbyTargets.Add(M) - if(!targetsDrained) + + var/list/local_objs = view(1, user) + var/obj/machinery/power/apc/target_apc + for(var/object in local_objs) + if(istype(object, /obj/machinery/power/apc)) + target_apc = object + break + + if(!target_apc) + to_chat(user, "You must stand next to an APC to drain it!") charge_counter = charge_max - to_chat(U, "There were no nearby humans for you to drain.") return - for(var/mob/living/carbon/M in nearbyTargets) - U.heal_organ_damage(10, 10) - U.adjustToxLoss(-10) - U.adjustOxyLoss(-10) - U.adjustStaminaLoss(-20) - U.AdjustWeakened(-1) - U.AdjustStunned(-1) - M.adjustOxyLoss(20) - M.adjustStaminaLoss(20) - to_chat(M, "You feel a wave of exhaustion and a curious draining sensation directed towards [U]!") - to_chat(U, "You draw life from those around you to heal your wounds.") + + if(target_apc.cell?.charge == 0) + to_chat(user, "APC must have a power to drain!") + charge_counter = charge_max + return + + target_apc.operating = 0 + target_apc.update() + target_apc.update_icon() + target_apc.visible_message("The [target_apc] flickers and begins to grow dark.") + + to_chat(user, "You dim the APC's screen and carefully begin siphoning its power into the void.") + if(!do_after(user, 200, target=target_apc)) + //Whoops! The APC's powers back on + to_chat(user, "Your concentration breaks and the APC suddenly repowers!") + target_apc.operating = 1 + target_apc.update() + target_apc.update_icon() + target_apc.visible_message("The [target_apc] begins glowing brightly!") + else + //We did it! + to_chat(user, "You sent the APC's power to the void while overloading all it's lights!") + target_apc.cell?.charge = 0 //Sent to the shadow realm + target_apc.chargemode = 0 //Won't recharge either until an someone hits the button + target_apc.charging = 0 + target_apc.null_charge() + target_apc.update_icon() diff --git a/code/game/gamemodes/vampire/vampire_powers.dm b/code/game/gamemodes/vampire/vampire_powers.dm index f78520ac7eb..5e7b8f9a237 100644 --- a/code/game/gamemodes/vampire/vampire_powers.dm +++ b/code/game/gamemodes/vampire/vampire_powers.dm @@ -226,6 +226,7 @@ target.Weaken(5) target.stuttering = 20 to_chat(target, "You are blinded by [user]'s glare.") + add_attack_logs(user, target, "(Vampire) Glared at") /obj/effect/proc_holder/spell/vampire/self/shapeshift name = "Shapeshift (50)" diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index dbe3146dd7f..243f4e3a3fa 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -153,9 +153,13 @@ src.spawn_amt_left = spawn_amt src.desc = desc - processing_objects.Add(src) + START_PROCESSING(SSobj, src) //return +/obj/effect/rend/Destroy() + STOP_PROCESSING(SSobj, src) + return ..() + /obj/effect/rend/process() for(var/mob/M in loc) return diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index 66cdff69b3f..0a1340d885b 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -469,6 +469,24 @@ dat += "Already cast!
" return dat +/datum/spellbook_entry/summon/ghosts + name = "Summon Ghosts" + desc = "Spook the crew out by making them see dead people. Be warned, ghosts are capricious and occasionally vindicative, and some will use their incredibly minor abilities to frustrate you." + cost = 0 + +/datum/spellbook_entry/summon/ghosts/IsAvailible() + if(!ticker.mode) + return FALSE + else + return TRUE + +/datum/spellbook_entry/summon/ghosts/Buy(mob/living/carbon/human/user, obj/item/spellbook/book) + new /datum/event/wizard/ghost() + active = TRUE + to_chat(user, "You have cast summon ghosts!") + playsound(get_turf(user), 'sound/effects/ghost2.ogg', 50, 1) + return TRUE + /datum/spellbook_entry/summon/guns name = "Summon Guns" category = "Rituals" diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 7535381197a..0eb627d1e62 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -295,10 +295,10 @@ to_chat(O, "The screen bursts into static.") /obj/machinery/camera/proc/triggerCameraAlarm() - camera_alarm.triggerAlarm(loc, src) + SSalarms.camera_alarm.triggerAlarm(loc, src) /obj/machinery/camera/proc/cancelCameraAlarm() - camera_alarm.clearAlarm(loc, src) + SSalarms.camera_alarm.clearAlarm(loc, src) /obj/machinery/camera/proc/can_use() if(!status) diff --git a/code/game/machinery/camera/motion.dm b/code/game/machinery/camera/motion.dm index eeb9eeb60d3..17f64c07cb8 100644 --- a/code/game/machinery/camera/motion.dm +++ b/code/game/machinery/camera/motion.dm @@ -45,7 +45,7 @@ if(!status || (stat & NOPOWER)) return 0 if(detectTime == -1) - motion_alarm.clearAlarm(loc, src) + SSalarms.motion_alarm.clearAlarm(loc, src) detectTime = 0 return 1 @@ -53,7 +53,7 @@ if(!status || (stat & NOPOWER)) return 0 if(!detectTime) return 0 - motion_alarm.triggerAlarm(loc, src) + SSalarms.motion_alarm.triggerAlarm(loc, src) detectTime = -1 return 1 diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 6d360a2ddb3..54841a78a08 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -470,7 +470,7 @@ M.nutrition -= 50 //lose a lot of food var/turf/location = usr.loc if(istype(location, /turf/simulated)) - location.add_vomit_floor(src, 1) + location.add_vomit_floor(TRUE) if(ORION_TRAIL_FLUX) if(prob(75)) M.Weaken(3) diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm index f2137d2ee8f..f8c2979e043 100644 --- a/code/game/machinery/computer/atmos_alert.dm +++ b/code/game/machinery/computer/atmos_alert.dm @@ -12,10 +12,10 @@ var/global/list/minor_air_alarms = list() /obj/machinery/computer/atmos_alert/New() ..() - atmosphere_alarm.register(src, /obj/machinery/computer/station_alert/update_icon) + SSalarms.atmosphere_alarm.register(src, /obj/machinery/computer/station_alert/update_icon) /obj/machinery/computer/atmos_alert/Destroy() - atmosphere_alarm.unregister(src) + SSalarms.atmosphere_alarm.unregister(src) return ..() /obj/machinery/computer/atmos_alert/attack_hand(mob/user) @@ -33,10 +33,10 @@ var/global/list/minor_air_alarms = list() var/major_alarms[0] var/minor_alarms[0] - for(var/datum/alarm/alarm in atmosphere_alarm.major_alarms()) + for(var/datum/alarm/alarm in SSalarms.atmosphere_alarm.major_alarms()) major_alarms[++major_alarms.len] = list("name" = sanitize(alarm.alarm_name()), "ref" = "\ref[alarm]") - for(var/datum/alarm/alarm in atmosphere_alarm.minor_alarms()) + for(var/datum/alarm/alarm in SSalarms.atmosphere_alarm.minor_alarms()) minor_alarms[++minor_alarms.len] = list("name" = sanitize(alarm.alarm_name()), "ref" = "\ref[alarm]") data["priority_alarms"] = major_alarms @@ -45,11 +45,11 @@ var/global/list/minor_air_alarms = list() return data /obj/machinery/computer/atmos_alert/update_icon() - var/list/alarms = atmosphere_alarm.major_alarms() + var/list/alarms = SSalarms.atmosphere_alarm.major_alarms() if(alarms.len) icon_screen = "alert:2" else - alarms = atmosphere_alarm.minor_alarms() + alarms = SSalarms.atmosphere_alarm.minor_alarms() if(alarms.len) icon_screen = "alert:1" else @@ -61,7 +61,7 @@ var/global/list/minor_air_alarms = list() return 1 if(href_list["clear_alarm"]) - var/datum/alarm/alarm = locate(href_list["clear_alarm"]) in atmosphere_alarm.alarms + var/datum/alarm/alarm = locate(href_list["clear_alarm"]) in SSalarms.atmosphere_alarm.alarms if(alarm) for(var/datum/alarm_source/alarm_source in alarm.sources) var/obj/machinery/alarm/air_alarm = alarm_source.source diff --git a/code/game/machinery/dance_machine.dm b/code/game/machinery/dance_machine.dm index 8fefabbf877..75c4e466a79 100644 --- a/code/game/machinery/dance_machine.dm +++ b/code/game/machinery/dance_machine.dm @@ -54,6 +54,7 @@ /obj/machinery/disco/Destroy() dance_over() selection = null + STOP_PROCESSING(SSobj, src) return ..() /obj/machinery/disco/attackby(obj/item/O, mob/user, params) @@ -128,7 +129,7 @@ active = TRUE update_icon() dance_setup() - processing_objects.Add(src) + START_PROCESSING(SSobj, src) lights_spin() updateUsrDialog() else if(active) @@ -472,7 +473,7 @@ L.stop_sound_channel(CHANNEL_JUKEBOX) else if(active) active = FALSE - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) dance_over() playsound(src,'sound/machines/terminal_off.ogg',50,1) icon_state = "disco0" diff --git a/code/game/machinery/doors/airlock_control.dm b/code/game/machinery/doors/airlock_control.dm index 496d8942bcc..5a53381ef07 100644 --- a/code/game/machinery/doors/airlock_control.dm +++ b/code/game/machinery/doors/airlock_control.dm @@ -39,8 +39,7 @@ if(command_completed(cur_command)) cur_command = null else - if(!isprocessing) - START_PROCESSING(SSmachines, src) + START_PROCESSING(SSmachines, src) /obj/machinery/door/airlock/proc/do_command(command) switch(command) diff --git a/code/game/machinery/embedded_controller/embedded_program_base.dm b/code/game/machinery/embedded_controller/embedded_program_base.dm index 1fe527df13b..5bd46b2f3e0 100644 --- a/code/game/machinery/embedded_controller/embedded_program_base.dm +++ b/code/game/machinery/embedded_controller/embedded_program_base.dm @@ -17,8 +17,8 @@ /datum/computer/file/embedded_program/proc/receive_signal(datum/signal/signal, receive_method, receive_param) return -/datum/computer/file/embedded_program/proc/process() - return +/datum/computer/file/embedded_program/process() + return FALSE /datum/computer/file/embedded_program/proc/post_signal(datum/signal/signal, comm_line) if(master) diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index f1651d5bb99..835b0264229 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -143,7 +143,7 @@ FIRE ALARM alarm() time = 0 timing = 0 - processing_objects -= src + STOP_PROCESSING(SSobj, src) updateDialog() last_process = world.timeofday @@ -206,9 +206,9 @@ FIRE ALARM last_process = world.timeofday if(oldTiming != timing) if(timing) - processing_objects += src + START_PROCESSING(SSobj, src) else - processing_objects -= src + STOP_PROCESSING(SSobj, src) else if(href_list["tp"]) var/tp = text2num(href_list["tp"]) time += tp @@ -220,7 +220,7 @@ FIRE ALARM var/area/A = get_area(src) A.fire_reset() for(var/obj/machinery/firealarm/FA in A) - fire_alarm.clearAlarm(loc, FA) + SSalarms.fire_alarm.clearAlarm(loc, FA) return /obj/machinery/firealarm/proc/alarm(var/duration = 0) @@ -228,7 +228,7 @@ FIRE ALARM return var/area/A = get_area(src) for(var/obj/machinery/firealarm/FA in A) - fire_alarm.triggerAlarm(loc, FA, duration) + SSalarms.fire_alarm.triggerAlarm(loc, FA, duration) update_icon() //playsound(loc, 'sound/ambience/signal.ogg', 75, 0) return diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index c74ee23d25c..91dcb43ab57 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -118,25 +118,22 @@ Class Procs: var/use_log = list() var/list/settagwhitelist = list()//WHITELIST OF VARIABLES THAT THE set_tag HREF CAN MODIFY, DON'T PUT SHIT YOU DON'T NEED ON HERE, AND IF YOU'RE GONNA USE set_tag (format_tag() proc), ADD TO THIS LIST. atom_say_verb = "beeps" - var/defer_process = 0 var/siemens_strength = 0.7 // how badly will it shock you? -/obj/machinery/Initialize() - addAtProcessing() +/obj/machinery/Initialize(mapload) + if(!armor) + armor = list(melee = 25, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0) . = ..() - power_change() + GLOB.machines += src -/obj/machinery/proc/addAtProcessing() if(use_power) myArea = get_area(src) if(!speed_process) - if(!defer_process) - START_PROCESSING(SSmachines, src) - else - START_DEFERRED_PROCESSING(SSmachines, src) + START_PROCESSING(SSmachines, src) else - GLOB.fast_processing += src - isprocessing = TRUE // all of these isprocessing = TRUE can be removed when the PS is dead + START_PROCESSING(SSfastprocess, src) + + power_change() // gotta go fast /obj/machinery/makeSpeedProcess() @@ -144,7 +141,7 @@ Class Procs: return speed_process = TRUE STOP_PROCESSING(SSmachines, src) - GLOB.fast_processing += src + START_PROCESSING(SSfastprocess, src) // gotta go slow /obj/machinery/makeNormalProcess() @@ -152,20 +149,16 @@ Class Procs: return speed_process = FALSE START_PROCESSING(SSmachines, src) - GLOB.fast_processing -= src - -/obj/machinery/New() //new - if(!armor) - armor = list(melee = 25, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0) - GLOB.machines += src - ..() + STOP_PROCESSING(SSfastprocess, src) /obj/machinery/Destroy() if(myArea) myArea = null - GLOB.fast_processing -= src - STOP_PROCESSING(SSmachines, src) - GLOB.machines -= src + GLOB.machines.Remove(src) + if(!speed_process) + STOP_PROCESSING(SSmachines, src) + else + STOP_PROCESSING(SSfastprocess, src) return ..() /obj/machinery/proc/locate_machinery() diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index f02b8411e38..9f664eaad76 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -39,7 +39,7 @@ /obj/machinery/syndicatebomb/process() if(!active) - GLOB.fast_processing -= src + STOP_PROCESSING(SSfastprocess, src) detonation_timer = null next_beep = null countdown.stop() @@ -73,7 +73,7 @@ if(defused && payload in src) payload.defuse() countdown.stop() - GLOB.fast_processing -= src + STOP_PROCESSING(SSfastprocess, src) /obj/machinery/syndicatebomb/New() wires = new(src) @@ -86,7 +86,7 @@ /obj/machinery/syndicatebomb/Destroy() QDEL_NULL(wires) QDEL_NULL(countdown) - GLOB.fast_processing -= src + STOP_PROCESSING(SSfastprocess, src) return ..() /obj/machinery/syndicatebomb/examine(mob/user) @@ -205,7 +205,7 @@ /obj/machinery/syndicatebomb/proc/activate() active = TRUE - GLOB.fast_processing += src + START_PROCESSING(SSfastprocess, src) countdown.start() next_beep = world.time + 10 detonation_timer = world.time + (timer_set * 10) diff --git a/code/game/machinery/transformer.dm b/code/game/machinery/transformer.dm index 8014a149cf4..54bd17920bd 100644 --- a/code/game/machinery/transformer.dm +++ b/code/game/machinery/transformer.dm @@ -166,10 +166,10 @@ name = "Automatic X-Ray 5000" desc = "A large metalic machine with an entrance and an exit. A sign on the side reads, 'backpack go in, backpack come out', 'human go in, irradiated human come out'." -/obj/machinery/transformer/xray/New() +/obj/machinery/transformer/xray/Initialize(mapload) + . = ..() // On us new /obj/machinery/conveyor/auto(loc, EAST) - addAtProcessing() /obj/machinery/transformer/xray/conveyor/New() ..() diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm index f1ad010ea93..8a910670201 100644 --- a/code/game/mecha/equipment/tools/medical_tools.dm +++ b/code/game/mecha/equipment/tools/medical_tools.dm @@ -4,7 +4,7 @@ /obj/item/mecha_parts/mecha_equipment/medical/New() ..() - processing_objects.Add(src) + START_PROCESSING(SSobj, src) /obj/item/mecha_parts/mecha_equipment/medical/can_attach(obj/mecha/medical/M) @@ -13,19 +13,19 @@ /obj/item/mecha_parts/mecha_equipment/medical/attach(obj/mecha/M) ..() - processing_objects.Add(src) + START_PROCESSING(SSobj, src) /obj/item/mecha_parts/mecha_equipment/medical/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() /obj/item/mecha_parts/mecha_equipment/medical/process() if(!chassis) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return 1 /obj/item/mecha_parts/mecha_equipment/medical/detach() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() /obj/item/mecha_parts/mecha_equipment/medical/sleeper @@ -66,7 +66,7 @@ return target.forceMove(src) patient = target - processing_objects.Add(src) + START_PROCESSING(SSobj, src) update_equip_info() occupant_message("[target] successfully loaded into [src]. Life support functions engaged.") chassis.visible_message("[chassis] loads [target] into [src].") @@ -90,7 +90,7 @@ patient.forceMove(get_turf(src)) occupant_message("[patient] ejected. Life support functions disabled.") log_message("[patient] ejected. Life support functions disabled.") - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) patient = null update_equip_info() @@ -98,7 +98,7 @@ if(patient) occupant_message("Unable to detach [src] - equipment occupied!") return - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() /obj/item/mecha_parts/mecha_equipment/medical/sleeper/get_equip_info() @@ -221,7 +221,7 @@ set_ready_state(1) log_message("Deactivated.") occupant_message("[src] deactivated - no power.") - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return var/mob/living/carbon/M = patient if(!M) @@ -263,11 +263,11 @@ processed_reagents = new /obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/detach() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() /obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() /obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/critfail() @@ -374,7 +374,7 @@ m++ if(processed_reagents.len) message += " added to production" - processing_objects.Add(src) + START_PROCESSING(SSobj, src) occupant_message(message) occupant_message("Reagent processing started.") log_message("Reagent processing started.") @@ -513,7 +513,7 @@ if(!processed_reagents.len || reagents.total_volume >= reagents.maximum_volume || !chassis.has_charge(energy_drain)) occupant_message("Reagent processing stopped.") log_message("Reagent processing stopped.") - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return var/amount = synth_speed / processed_reagents.len for(var/reagent in processed_reagents) diff --git a/code/game/mecha/equipment/tools/mining_tools.dm b/code/game/mecha/equipment/tools/mining_tools.dm index b1a110813e8..edeb2424711 100644 --- a/code/game/mecha/equipment/tools/mining_tools.dm +++ b/code/game/mecha/equipment/tools/mining_tools.dm @@ -116,14 +116,14 @@ /obj/item/mecha_parts/mecha_equipment/mining_scanner/attach(obj/mecha/M) . = ..() - processing_objects.Add(src) + START_PROCESSING(SSobj, src) M.occupant_sight_flags |= SEE_TURFS if(M.occupant) M.occupant.update_sight() /obj/item/mecha_parts/mecha_equipment/mining_scanner/detach() chassis.occupant_sight_flags &= ~SEE_TURFS - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) if(chassis.occupant) chassis.occupant.update_sight() return ..() diff --git a/code/game/mecha/equipment/tools/other_tools.dm b/code/game/mecha/equipment/tools/other_tools.dm index a42e76015c1..4cfbc5c8143 100644 --- a/code/game/mecha/equipment/tools/other_tools.dm +++ b/code/game/mecha/equipment/tools/other_tools.dm @@ -193,7 +193,7 @@ selectable = 0 /obj/item/mecha_parts/mecha_equipment/repair_droid/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) if(chassis) chassis.overlays -= droid_overlay return ..() @@ -205,7 +205,7 @@ /obj/item/mecha_parts/mecha_equipment/repair_droid/detach() chassis.overlays -= droid_overlay - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) /obj/item/mecha_parts/mecha_equipment/repair_droid/get_equip_info() if(!chassis) return @@ -217,12 +217,12 @@ if(href_list["toggle_repairs"]) chassis.overlays -= droid_overlay if(equip_ready) - processing_objects.Add(src) + START_PROCESSING(SSobj, src) droid_overlay = new(icon, icon_state = "repair_droid_a") log_message("Activated.") set_ready_state(0) else - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) droid_overlay = new(icon, icon_state = "repair_droid") log_message("Deactivated.") set_ready_state(1) @@ -232,7 +232,7 @@ /obj/item/mecha_parts/mecha_equipment/repair_droid/process() if(!chassis) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) set_ready_state(1) return var/h_boost = health_boost @@ -250,10 +250,10 @@ repaired = 1 if(repaired) if(!chassis.use_power(energy_drain)) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) set_ready_state(1) else //no repair needed, we turn off - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) set_ready_state(1) chassis.overlays -= droid_overlay droid_overlay = new(icon, icon_state = "repair_droid") @@ -273,11 +273,11 @@ selectable = 0 /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/detach() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) ..() /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/proc/get_charge() @@ -302,11 +302,11 @@ ..() if(href_list["toggle_relay"]) if(equip_ready) //inactive - processing_objects.Add(src) + START_PROCESSING(SSobj, src) set_ready_state(0) log_message("Activated.") else - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) set_ready_state(1) log_message("Deactivated.") @@ -317,12 +317,12 @@ /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/process() if(!chassis || chassis.internal_damage & MECHA_INT_SHORT_CIRCUIT) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) set_ready_state(1) return var/cur_charge = chassis.get_charge() if(isnull(cur_charge) || !chassis.cell) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) set_ready_state(1) occupant_message("No powercell detected.") return @@ -358,11 +358,11 @@ /obj/item/mecha_parts/mecha_equipment/generator/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() /obj/item/mecha_parts/mecha_equipment/generator/detach() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) ..() /obj/item/mecha_parts/mecha_equipment/generator/Topic(href, href_list) @@ -370,11 +370,11 @@ if(href_list["toggle"]) if(equip_ready) //inactive set_ready_state(0) - processing_objects.Add(src) + START_PROCESSING(SSobj, src) log_message("Activated.") else set_ready_state(1) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) log_message("Deactivated.") /obj/item/mecha_parts/mecha_equipment/generator/get_equip_info() @@ -447,11 +447,11 @@ /obj/item/mecha_parts/mecha_equipment/generator/process() if(!chassis) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) set_ready_state(1) return if(fuel_amount<=0) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) log_message("Deactivated - no fuel.") set_ready_state(1) return @@ -460,7 +460,7 @@ set_ready_state(1) occupant_message("No powercell detected.") log_message("Deactivated.") - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return var/use_fuel = fuel_per_cycle_idle if(cur_charge < chassis.cell.maxcharge) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 6cfd1d63942..35b94e2eed2 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -118,7 +118,7 @@ smoke_system.attach(src) add_cell() - processing_objects.Add(src) + START_PROCESSING(SSobj, src) GLOB.poi_list |= src log_message("[src] created.") GLOB.mechas_list += src //global mech list @@ -670,7 +670,7 @@ QDEL_NULL(cell) QDEL_NULL(internal_tank) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) GLOB.poi_list.Remove(src) equipment.Cut() cell = null diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm index 59533b338a4..b44c4e3dd1b 100644 --- a/code/game/objects/effects/effect_system/effects_foam.dm +++ b/code/game/objects/effects/effect_system/effects_foam.dm @@ -24,7 +24,7 @@ spawn(3 + metal*3) process() spawn(120) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) sleep(30) if(metal) diff --git a/code/game/objects/effects/effect_system/effects_smoke.dm b/code/game/objects/effects/effect_system/effects_smoke.dm index 405a0ec46f7..ddce32f68fa 100644 --- a/code/game/objects/effects/effect_system/effects_smoke.dm +++ b/code/game/objects/effects/effect_system/effects_smoke.dm @@ -30,15 +30,15 @@ /obj/effect/particle_effect/smoke/New() ..() - processing_objects |= src + START_PROCESSING(SSobj, src) lifetime += rand(-1,1) /obj/effect/particle_effect/smoke/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() /obj/effect/particle_effect/smoke/proc/kill_smoke() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) INVOKE_ASYNC(src, .proc/fade_out) QDEL_IN(src, 10) diff --git a/code/game/objects/effects/snowcloud.dm b/code/game/objects/effects/snowcloud.dm index 08a64d62f17..5723b66bc04 100644 --- a/code/game/objects/effects/snowcloud.dm +++ b/code/game/objects/effects/snowcloud.dm @@ -9,12 +9,12 @@ /obj/effect/snowcloud/New(turf, obj/machinery/snow_machine/SM) ..() - processing_objects.Add(src) + START_PROCESSING(SSobj, src) if(SM && istype(SM)) parent_machine = SM /obj/effect/snowcloud/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() /obj/effect/snowcloud/process() @@ -73,12 +73,12 @@ anchored = TRUE /obj/effect/snow/New() - processing_objects.Add(src) + START_PROCESSING(SSobj, src) icon_state = "snow[rand(1,6)]" ..() /obj/effect/snow/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() /obj/effect/snow/process() diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index f0233bb0f9e..d4336aa6cf3 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -107,7 +107,7 @@ ..() pixel_x = rand(3,-3) pixel_y = rand(3,-3) - processing_objects.Add(src) + START_PROCESSING(SSobj, src) /obj/structure/spider/eggcluster/process() amount_grown += rand(0,2) @@ -140,10 +140,10 @@ ..() pixel_x = rand(6,-6) pixel_y = rand(6,-6) - processing_objects.Add(src) + START_PROCESSING(SSobj, src) /obj/structure/spider/spiderling/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) entry_vent = null return ..() diff --git a/code/game/objects/items/ashtray.dm b/code/game/objects/items/ashtray.dm index b32176cb155..8e85709ef97 100644 --- a/code/game/objects/items/ashtray.dm +++ b/code/game/objects/items/ashtray.dm @@ -28,7 +28,6 @@ var/obj/item/clothing/mask/cigarette/cig = W if(cig.lit == 1) src.visible_message("[user] crushes [cig] in [src], putting it out.") - processing_objects.Remove(cig) var/obj/item/butt = new cig.type_butt(src) cig.transfer_fingerprints_to(butt) qdel(cig) diff --git a/code/game/objects/items/candle.dm b/code/game/objects/items/candle.dm index 85780484264..5ea13308de5 100644 --- a/code/game/objects/items/candle.dm +++ b/code/game/objects/items/candle.dm @@ -18,7 +18,7 @@ light(show_message = 0) /obj/item/candle/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() /obj/item/candle/update_icon() @@ -62,7 +62,7 @@ if(show_message) usr.visible_message(show_message) set_light(CANDLE_LUM) - processing_objects.Add(src) + START_PROCESSING(SSobj, src) update_icon() diff --git a/code/game/objects/items/devices/camera_bug.dm b/code/game/objects/items/devices/camera_bug.dm index 575ce0cb6d6..7bf80244072 100644 --- a/code/game/objects/items/devices/camera_bug.dm +++ b/code/game/objects/items/devices/camera_bug.dm @@ -32,7 +32,7 @@ /obj/item/camera_bug/New() ..() - processing_objects += src + START_PROCESSING(SSobj, src) /obj/item/camera_bug/Destroy() get_cameras() diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index 27132b75346..5fa2bd692e0 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -227,7 +227,7 @@ return PROCESS_KILL /obj/item/borg_chameleon/proc/activate(mob/living/silicon/robot/syndicate/saboteur/user) - processing_objects.Add(src) + START_PROCESSING(SSobj, src) S = user user.base_icon = disguise user.icon_state = disguise @@ -236,7 +236,7 @@ user.update_icons() /obj/item/borg_chameleon/proc/deactivate(mob/living/silicon/robot/syndicate/saboteur/user) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) S = user user.base_icon = initial(user.base_icon) user.icon_state = initial(user.icon_state) diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index d0b8637b280..2fb1aae8ff0 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -207,10 +207,10 @@ /obj/item/flash/cameraflash/New() ..() - processing_objects.Add(src) + START_PROCESSING(SSobj, src) /obj/item/flash/cameraflash/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() /obj/item/flash/cameraflash/process() //this and the two parts above are part of the charge system. diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 24c8cbcd3b7..316b937f749 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -183,10 +183,10 @@ turn_off() if(!fuel) src.icon_state = "[initial(icon_state)]-empty" - processing_objects -= src + STOP_PROCESSING(SSobj, src) /obj/item/flashlight/flare/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() /obj/item/flashlight/flare/proc/turn_off() @@ -222,7 +222,7 @@ user.visible_message("[user] activates [src].", "You activate [src].") src.force = on_damage src.damtype = "fire" - processing_objects += src + START_PROCESSING(SSobj, src) // GLOWSTICKS @@ -344,10 +344,10 @@ /obj/item/flashlight/emp/New() ..() - processing_objects.Add(src) + START_PROCESSING(SSobj, src) /obj/item/flashlight/emp/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() /obj/item/flashlight/emp/process() diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm index 32b548c38aa..43b22eb4979 100644 --- a/code/game/objects/items/devices/laserpointer.dm +++ b/code/game/objects/items/devices/laserpointer.dm @@ -167,7 +167,7 @@ if(energy <= max_energy) if(!recharging) recharging = 1 - processing_objects.Add(src) + START_PROCESSING(SSobj, src) if(energy <= 0) to_chat(user, "You've overused the battery of [src], now it needs time to recharge!") recharge_locked = 1 diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index d142136ed23..62fc36863fc 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -47,10 +47,10 @@ /obj/item/multitool/ai_detect/New() ..() - processing_objects += src + START_PROCESSING(SSobj, src) /obj/item/multitool/ai_detect/Destroy() - processing_objects -= src + STOP_PROCESSING(SSobj, src) return ..() /obj/item/multitool/ai_detect/process() diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index 0d0475df8ee..463223f4268 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -26,7 +26,7 @@ var/obj/structure/cable/attached // the attached cable /obj/item/powersink/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) GLOB.processing_power_items.Remove(src) PN = null attached = null @@ -53,7 +53,7 @@ return else if(mode == 2) - processing_objects.Remove(src) // Now the power sink actually stops draining the station's power if you unhook it. --NeoFite + STOP_PROCESSING(SSobj, src) // Now the power sink actually stops draining the station's power if you unhook it. --NeoFite GLOB.processing_power_items.Remove(src) anchored = 0 mode = 0 @@ -76,14 +76,14 @@ src.visible_message("[user] activates [src]!") mode = 2 icon_state = "powersink1" - processing_objects.Add(src) + START_PROCESSING(SSobj, src) GLOB.processing_power_items.Add(src) if(2) //This switch option wasn't originally included. It exists now. --NeoFite src.visible_message("[user] deactivates [src]!") mode = 1 set_light(0) icon_state = "powersink0" - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) GLOB.processing_power_items.Remove(src) /obj/item/powersink/pwr_drain() diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index 62057880b9b..3064b0ae3c8 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -49,7 +49,7 @@ ..() buildstage = building if(buildstage) - processing_objects.Add(src) + START_PROCESSING(SSobj, src) else if(ndir) pixel_x = (ndir & EAST|WEST) ? (ndir == EAST ? 28 : -28) : 0 @@ -105,7 +105,7 @@ ) /obj/item/radio/intercom/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) GLOB.global_intercoms.Remove(src) return ..() @@ -150,7 +150,7 @@ b_stat = 1 buildstage = 1 update_icon() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return 1 else return ..() if(2) @@ -163,7 +163,7 @@ buildstage = 3 to_chat(user, "You secure the electronics!") update_icon() - processing_objects.Add(src) + START_PROCESSING(SSobj, src) for(var/i, i<= 5, i++) wires.UpdateCut(i,1) return 1 diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 4a20a52fa04..9bb036c4d05 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -34,7 +34,7 @@ REAGENT SCANNER /obj/item/t_scanner/Destroy() if(on) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() /obj/item/t_scanner/attack_self(mob/user) @@ -43,12 +43,12 @@ REAGENT SCANNER icon_state = copytext(icon_state, 1, length(icon_state))+"[on]" if(on) - processing_objects.Add(src) + START_PROCESSING(SSobj, src) /obj/item/t_scanner/process() if(!on) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return null scan() diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 064b66b78f4..0b9f6c3aca9 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -256,7 +256,7 @@ /obj/item/borg/upgrade/selfrepair/Destroy() cyborg = null - processing_objects -= src + STOP_PROCESSING(SSobj, src) on = 0 return ..() @@ -264,10 +264,10 @@ on = !on if(on) to_chat(cyborg, "You activate the self-repair module.") - processing_objects |= src + START_PROCESSING(SSobj, src) else to_chat(cyborg, "You deactivate the self-repair module.") - processing_objects -= src + STOP_PROCESSING(SSobj, src) update_icon() /obj/item/borg/upgrade/selfrepair/update_icon() @@ -280,7 +280,7 @@ icon_state = "cyborg_upgrade5" /obj/item/borg/upgrade/selfrepair/proc/deactivate() - processing_objects -= src + STOP_PROCESSING(SSobj, src) on = 0 update_icon() diff --git a/code/game/objects/items/weapons/caution.dm b/code/game/objects/items/weapons/caution.dm index a4599a2e79f..b1b573f77ad 100644 --- a/code/game/objects/items/weapons/caution.dm +++ b/code/game/objects/items/weapons/caution.dm @@ -26,7 +26,7 @@ return timing = !timing if(timing) - processing_objects.Add(src) + START_PROCESSING(SSobj, src) else armed = 0 timepassed = 0 @@ -34,7 +34,7 @@ /obj/item/caution/proximity_sign/process() if(!timing) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) timepassed++ if(timepassed >= 15 && !armed) armed = 1 diff --git a/code/game/objects/items/weapons/chrono_eraser.dm b/code/game/objects/items/weapons/chrono_eraser.dm index 58c2dd2594f..7e7f1642e3a 100644 --- a/code/game/objects/items/weapons/chrono_eraser.dm +++ b/code/game/objects/items/weapons/chrono_eraser.dm @@ -177,7 +177,7 @@ update_icon() desc = initial(desc) + "
It appears to contain [target.name]." - processing_objects.Add(src) + START_PROCESSING(SSobj, src) /obj/effect/chrono_field/Destroy() if(gun && gun.field_check(src)) diff --git a/code/game/objects/items/weapons/cigs.dm b/code/game/objects/items/weapons/cigs.dm index 1378b5c004d..ce9f5d916a2 100644 --- a/code/game/objects/items/weapons/cigs.dm +++ b/code/game/objects/items/weapons/cigs.dm @@ -48,7 +48,7 @@ LIGHTERS ARE IN LIGHTERS.DM /obj/item/clothing/mask/cigarette/Destroy() QDEL_NULL(reagents) - processing_objects -= src + STOP_PROCESSING(SSobj, src) return ..() /obj/item/clothing/mask/cigarette/attack(mob/living/M, mob/living/user, def_zone) @@ -161,7 +161,7 @@ LIGHTERS ARE IN LIGHTERS.DM var/turf/T = get_turf(src) T.visible_message(flavor_text) set_light(2, 0.25, "#E38F46") - processing_objects.Add(src) + START_PROCESSING(SSobj, src) /obj/item/clothing/mask/cigarette/process() @@ -213,7 +213,7 @@ LIGHTERS ARE IN LIGHTERS.DM var/mob/living/M = loc to_chat(M, "Your [name] goes out.") M.unEquip(src, 1) //Force the un-equip so the overlays update - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) qdel(src) @@ -341,7 +341,7 @@ LIGHTERS ARE IN LIGHTERS.DM if(flavor_text) var/turf/T = get_turf(src) T.visible_message(flavor_text) - processing_objects.Add(src) + START_PROCESSING(SSobj, src) /obj/item/clothing/mask/cigarette/pipe/process() var/turf/location = get_turf(src) @@ -355,7 +355,7 @@ LIGHTERS ARE IN LIGHTERS.DM icon_state = icon_off item_state = icon_off M.update_inv_wear_mask(0) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return smoke() return @@ -366,7 +366,7 @@ LIGHTERS ARE IN LIGHTERS.DM lit = 0 icon_state = icon_off item_state = icon_off - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return if(smoketime <= 0) to_chat(user, "You refill the pipe with tobacco.") diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index 75d29c7c6be..dd67d7c67a4 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -33,7 +33,7 @@ /obj/item/flamethrower/process() if(!lit) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return null var/turf/location = loc if(istype(location, /mob/)) @@ -141,7 +141,7 @@ if(!status) return lit = !lit if(lit) - processing_objects.Add(src) + START_PROCESSING(SSobj, src) if(href_list["remove"]) if(!ptank) return usr.put_in_hands(ptank) diff --git a/code/game/objects/items/weapons/garrote.dm b/code/game/objects/items/weapons/garrote.dm index dd65df1ea3f..4bddaf551ea 100644 --- a/code/game/objects/items/weapons/garrote.dm +++ b/code/game/objects/items/weapons/garrote.dm @@ -44,7 +44,7 @@ strangling = null update_icon() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) else ..() @@ -97,7 +97,7 @@ M.AdjustSilence(1) garrote_time = world.time + 10 - processing_objects.Add(src) + START_PROCESSING(SSobj, src) strangling = M update_icon() @@ -113,14 +113,14 @@ if(!strangling) // Our mark got gibbed or similar update_icon() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return if(!istype(loc, /mob/living/carbon/human)) strangling = null update_icon() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return var/mob/living/carbon/human/user = loc @@ -138,7 +138,7 @@ strangling = null update_icon() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return @@ -148,7 +148,7 @@ strangling = null update_icon() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return diff --git a/code/game/objects/items/weapons/holy_weapons.dm b/code/game/objects/items/weapons/holy_weapons.dm index 9e471583d3b..a20dd86c897 100644 --- a/code/game/objects/items/weapons/holy_weapons.dm +++ b/code/game/objects/items/weapons/holy_weapons.dm @@ -402,10 +402,10 @@ /obj/item/nullrod/tribal_knife/New() ..() - processing_objects.Add(src) + START_PROCESSING(SSobj, src) /obj/item/nullrod/tribal_knife/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() /obj/item/nullrod/tribal_knife/process() @@ -432,10 +432,10 @@ /obj/item/nullrod/rosary/New() ..() - processing_objects.Add(src) + START_PROCESSING(SSobj, src) /obj/item/nullrod/rosary/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() /obj/item/nullrod/rosary/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index 9a7c3f0e27c..88dc4ed6542 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -14,7 +14,7 @@ flags = DROPDEL -/obj/item/implant/proc/trigger(emote, mob/source) +/obj/item/implant/proc/trigger(emote, mob/source, force) return /obj/item/implant/proc/activate() diff --git a/code/game/objects/items/weapons/implants/implant_abductor.dm b/code/game/objects/items/weapons/implants/implant_abductor.dm index a86545f8722..64bb7345f7a 100644 --- a/code/game/objects/items/weapons/implants/implant_abductor.dm +++ b/code/game/objects/items/weapons/implants/implant_abductor.dm @@ -13,7 +13,7 @@ if(cooldown == total_cooldown) home.Retrieve(imp_in,1) cooldown = 0 - processing_objects.Add(src) + START_PROCESSING(SSobj, src) else to_chat(imp_in, "You must wait [(total_cooldown - cooldown)*2] seconds to use [src] again!") @@ -21,7 +21,7 @@ if(cooldown < total_cooldown) cooldown++ if(cooldown == total_cooldown) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) /obj/item/implant/abductor/implant(mob/source, mob/user) if(..()) diff --git a/code/game/objects/items/weapons/implants/implant_chem.dm b/code/game/objects/items/weapons/implants/implant_chem.dm index 5f0fea79da9..f1c4dd4126b 100644 --- a/code/game/objects/items/weapons/implants/implant_chem.dm +++ b/code/game/objects/items/weapons/implants/implant_chem.dm @@ -33,8 +33,8 @@ -/obj/item/implant/chem/trigger(emote, mob/source) - if(emote == "deathgasp") +/obj/item/implant/chem/trigger(emote, mob/source, force) + if(force && emote == "deathgasp") activate(reagents.total_volume) /obj/item/implant/chem/activate(cause) diff --git a/code/game/objects/items/weapons/implants/implant_death_alarm.dm b/code/game/objects/items/weapons/implants/implant_death_alarm.dm index dea34b2ba91..68c8e111520 100644 --- a/code/game/objects/items/weapons/implants/implant_death_alarm.dm +++ b/code/game/objects/items/weapons/implants/implant_death_alarm.dm @@ -18,7 +18,7 @@ return dat /obj/item/implant/death_alarm/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() /obj/item/implant/death_alarm/process() @@ -61,12 +61,12 @@ /obj/item/implant/death_alarm/implant(mob/target) if(..()) mobname = target.real_name - processing_objects.Add(src) + START_PROCESSING(SSobj, src) return 1 return 0 /obj/item/implant/death_alarm/removed(mob/target) if(..()) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return 1 return 0 diff --git a/code/game/objects/items/weapons/implants/implant_explosive.dm b/code/game/objects/items/weapons/implants/implant_explosive.dm index 30113ea4e96..f37e148bee6 100644 --- a/code/game/objects/items/weapons/implants/implant_explosive.dm +++ b/code/game/objects/items/weapons/implants/implant_explosive.dm @@ -20,8 +20,8 @@ "} return dat -/obj/item/implant/explosive/trigger(emote, mob/source) - if(emote == "deathgasp") +/obj/item/implant/explosive/trigger(emote, mob/source, force) + if(force && emote == "deathgasp") activate("death") /obj/item/implant/explosive/activate(cause) @@ -148,8 +148,8 @@ "} return dat -/obj/item/implant/dust/trigger(emote, mob/source) - if(emote == "deathgasp") +/obj/item/implant/dust/trigger(emote, mob/source, force) + if(force && emote == "deathgasp") activate("death") /obj/item/implant/dust/activate(cause) diff --git a/code/game/objects/items/weapons/lighters.dm b/code/game/objects/items/weapons/lighters.dm index a2d8b03da84..ab946de5f0f 100644 --- a/code/game/objects/items/weapons/lighters.dm +++ b/code/game/objects/items/weapons/lighters.dm @@ -58,7 +58,7 @@ user.visible_message("After a few attempts, [user] manages to light the [src], [user.p_they()] however burn[user.p_s()] [user.p_their()] finger in the process.") set_light(2) - processing_objects.Add(src) + START_PROCESSING(SSobj, src) else lit = 0 w_class = WEIGHT_CLASS_TINY @@ -74,7 +74,7 @@ user.visible_message("[user] quietly shuts off the [src].") set_light(0) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) else return ..() return @@ -181,7 +181,7 @@ name = "lit match" desc = "A match. This one is lit." attack_verb = list("burnt","singed") - processing_objects.Add(src) + START_PROCESSING(SSobj, src) update_icon() return TRUE @@ -196,7 +196,7 @@ name = "burnt match" desc = "A match. This one has seen better days." attack_verb = list("flicked") - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return TRUE /obj/item/match/dropped(mob/user) diff --git a/code/game/objects/items/weapons/mop.dm b/code/game/objects/items/weapons/mop.dm index e642e3b994a..7c5c6f9421f 100644 --- a/code/game/objects/items/weapons/mop.dm +++ b/code/game/objects/items/weapons/mop.dm @@ -89,14 +89,14 @@ /obj/item/mop/advanced/New() ..() - processing_objects.Add(src) + START_PROCESSING(SSobj, src) /obj/item/mop/advanced/attack_self(mob/user) refill_enabled = !refill_enabled if(refill_enabled) - processing_objects.Add(src) + START_PROCESSING(SSobj, src) else - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) to_chat(user, "You set the condenser switch to the '[refill_enabled ? "ON" : "OFF"]' position.") playsound(user, 'sound/machines/click.ogg', 30, 1) @@ -111,7 +111,7 @@ /obj/item/mop/advanced/Destroy() if(refill_enabled) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index 03cf28b25ed..e8a181a197b 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -107,7 +107,7 @@ /obj/item/storage/bag/plasticbag/equipped(var/mob/user, var/slot) if(slot==slot_head) storage_slots = 0 - processing_objects.Add(src) + START_PROCESSING(SSobj, src) return /obj/item/storage/bag/plasticbag/process() @@ -120,7 +120,7 @@ H.AdjustLoseBreath(1) else storage_slots = 7 - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return // ----------------------------- diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index abf68deb765..e406b097bee 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -642,9 +642,13 @@ new /obj/item/grenade/smokebomb(src) new /obj/item/restraints/legcuffs/bola(src) new /obj/item/restraints/legcuffs/bola(src) - processing_objects.Add(src) + START_PROCESSING(SSobj, src) cooldown = world.time +/obj/item/storage/belt/bluespace/owlman/Destroy() + STOP_PROCESSING(SSobj, src) + return ..() + /obj/item/storage/belt/bluespace/owlman/process() if(cooldown < world.time - 600) smokecount = 0 diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index d533a7e595b..c44264c6529 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -27,13 +27,13 @@ air_contents.volume = volume //liters air_contents.temperature = T20C - processing_objects.Add(src) + START_PROCESSING(SSobj, src) return /obj/item/tank/Destroy() QDEL_NULL(air_contents) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 98f97b66f53..7afb1885ea2 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -377,7 +377,7 @@ damtype = "brute" update_icon() if(!can_off_process) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return //Welders left on now use up fuel, but lets not have them run out quite that fast if(1) @@ -539,7 +539,7 @@ damtype = "fire" hitsound = 'sound/items/welder.ogg' update_icon() - processing_objects.Add(src) + START_PROCESSING(SSobj, src) else to_chat(user, "You need more fuel!") switched_off(user) diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index 29f2c2dd488..4053f747af5 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -557,10 +557,10 @@ /obj/item/twohanded/singularityhammer/New() ..() - processing_objects.Add(src) + START_PROCESSING(SSobj, src) /obj/item/twohanded/singularityhammer/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() /obj/item/twohanded/singularityhammer/process() @@ -664,10 +664,10 @@ /obj/item/twohanded/knighthammer/New() ..() - processing_objects.Add(src) + START_PROCESSING(SSobj, src) /obj/item/twohanded/knighthammer/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() /obj/item/twohanded/knighthammer/process() diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 6506a5fdf2e..c2428dd8d97 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -66,17 +66,14 @@ // Nada /obj/Destroy() - GLOB.machines -= src - processing_objects -= src - GLOB.fast_processing -= src + if(!ismachinery(src)) + if(!speed_process) + STOP_PROCESSING(SSobj, src) // TODO: Have a processing bitflag to reduce on unnecessary loops through the processing lists + else + STOP_PROCESSING(SSfastprocess, src) SSnanoui.close_uis(src) return ..() -/obj/proc/process() - set waitfor = 0 - processing_objects.Remove(src) - return 0 - //user: The mob that is suiciding //damagetype: The type of damage the item will inflict on the user //BRUTELOSS = 1 @@ -300,15 +297,15 @@ a { if(speed_process) return speed_process = TRUE - processing_objects.Remove(src) - GLOB.fast_processing.Add(src) + STOP_PROCESSING(SSobj, src) + START_PROCESSING(SSfastprocess, src) /obj/proc/makeNormalProcess() if(!speed_process) return speed_process = FALSE - processing_objects.Add(src) - GLOB.fast_processing.Remove(src) + START_PROCESSING(SSobj, src) + STOP_PROCESSING(SSfastprocess, src) /obj/vv_get_dropdown() . = ..() diff --git a/code/game/objects/structures/crates_lockers/closets/statue.dm b/code/game/objects/structures/crates_lockers/closets/statue.dm index 0692c90ec6d..909ee79e1ab 100644 --- a/code/game/objects/structures/crates_lockers/closets/statue.dm +++ b/code/game/objects/structures/crates_lockers/closets/statue.dm @@ -41,7 +41,7 @@ qdel(src) return - processing_objects.Add(src) + START_PROCESSING(SSobj, src) ..() /obj/structure/closet/statue/process() @@ -53,7 +53,7 @@ M.setOxyLoss(intialOxy) if(timer <= 0) dump_contents() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) qdel(src) /obj/structure/closet/statue/dump_contents() diff --git a/code/game/objects/structures/depot.dm b/code/game/objects/structures/depot.dm index b286749f908..a3dc4ac7007 100644 --- a/code/game/objects/structures/depot.dm +++ b/code/game/objects/structures/depot.dm @@ -87,7 +87,7 @@ /obj/effect/overload/New() . = ..() // Do not attempt to put the code below into Initialize() or even LateInitialize() with a "return INITIALIZE_HINT_LATELOAD". It won't work! - processing_objects.Add(src) + START_PROCESSING(SSobj, src) depotarea = areaMaster if(istype(depotarea)) if(!depotarea.used_self_destruct) @@ -122,6 +122,6 @@ for(var/obj/mecha/E in range(30, T)) E.Destroy() explosion(get_turf(src), 25, 35, 45, 55, 1, 1, 60, 0, 0) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) qdel(src) diff --git a/code/game/objects/structures/misc.dm b/code/game/objects/structures/misc.dm index 6be7bf072d8..01fab63dd57 100644 --- a/code/game/objects/structures/misc.dm +++ b/code/game/objects/structures/misc.dm @@ -92,11 +92,11 @@ last_ghost_alert = world.time attack_atom = src if(active) - processing_objects.Add(src) + START_PROCESSING(SSobj, src) /obj/structure/ghost_beacon/Destroy() if(active) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) attack_atom = null return ..() @@ -111,9 +111,9 @@ return to_chat(user, "You [active ? "disable" : "enable"] \the [src].") if(active) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) else - processing_objects.Add(src) + START_PROCESSING(SSobj, src) active = !active /obj/structure/ghost_beacon/process() diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index f0a0c89880f..1bb19a81bd2 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -14,7 +14,7 @@ GLOBAL_LIST_EMPTY(safes) desc = "A huge chunk of metal with a dial embedded in it. Fine print on the dial reads \"Scarborough Arms tumbler safe, guaranteed thermite resistant, explosion resistant, and assistant resistant.\"" icon = 'icons/obj/structures.dmi' icon_state = "safe" - + anchored = TRUE density = TRUE resistance_flags = LAVA_PROOF | FIRE_PROOF @@ -159,14 +159,14 @@ GLOBAL_LIST_EMPTY(safes) drill_start_time = world.time drill.soundloop.start() update_icon() - processing_objects.Add(src) + START_PROCESSING(SSobj, src) if("Turn Off") if(do_after(user, 2 SECONDS, target = src)) deltimer(drill_timer) drill_timer = null drill.soundloop.stop() update_icon() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) if("Remove Drill") if(drill_timer) to_chat(user, "You cant remove the drill while it's running!") @@ -208,7 +208,7 @@ GLOBAL_LIST_EMPTY(safes) if(current_tick == 2) to_chat(user, "The sounds from [src] are too fast and blend together.") - + if(total_ticks == 1 || prob(10)) to_chat(user, "You hear a [pick(sounds)] from [src].") @@ -252,7 +252,7 @@ GLOBAL_LIST_EMPTY(safes) var/invalid_turn = current_tumbler_index % 2 == 0 || current_tumbler_index > number_of_tumblers if(invalid_turn) // The moment you turn the wrong way or go too far, the tumblers reset current_tumbler_index = 1 - + if(!invalid_turn && dial == tumblers[current_tumbler_index]) notify_user(user, canhear, list("tink", "krink", "plink"), ticks, i) current_tumbler_index++ @@ -308,7 +308,7 @@ GLOBAL_LIST_EMPTY(safes) drill_timer = null drill.soundloop.stop() update_icon() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) /obj/structure/safe/attackby(obj/item/I, mob/user, params) if(open) diff --git a/code/game/objects/structures/transit_tubes/station.dm b/code/game/objects/structures/transit_tubes/station.dm index 810659d81bb..04271015f4c 100644 --- a/code/game/objects/structures/transit_tubes/station.dm +++ b/code/game/objects/structures/transit_tubes/station.dm @@ -19,10 +19,10 @@ /obj/structure/transit_tube/station/New() ..() - processing_objects += src + START_PROCESSING(SSobj, src) /obj/structure/transit_tube/station/Destroy() - processing_objects -= src + STOP_PROCESSING(SSobj, src) return ..() // Stations which will send the tube in the opposite direction after their stop. diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index e7078cb6877..6b4072a800b 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -224,6 +224,8 @@ var/list/admin_verbs_snpc = list( var/list/admin_verbs_ticket = list( /client/proc/openAdminTicketUI, /client/proc/toggleticketlogs, + /client/proc/openMentorTicketUI, + /client/proc/toggleMentorTicketLogs, /client/proc/resolveAllAdminTickets, /client/proc/resolveAllMentorTickets ) @@ -926,10 +928,10 @@ var/list/admin_verbs_ticket = list( to_chat(usr, "You now will get admin log messages.") /client/proc/toggleMentorTicketLogs() - set name = "Toggle Mentor Ticket Messgaes" + set name = "Toggle Mentor Ticket Messages" set category = "Preferences" - if(!check_rights(R_MENTOR)) + if(!check_rights(R_MENTOR|R_ADMIN)) return prefs.toggles ^= CHAT_NO_MENTORTICKETLOGS diff --git a/code/modules/admin/tickets/mentorticketsverbs.dm b/code/modules/admin/tickets/mentorticketsverbs.dm index 765a1afb9da..1122b770107 100644 --- a/code/modules/admin/tickets/mentorticketsverbs.dm +++ b/code/modules/admin/tickets/mentorticketsverbs.dm @@ -5,7 +5,7 @@ set name = "Open Mentor Ticket Interface" set category = "Admin" - if(!holder || !check_rights(R_MENTOR)) + if(!holder || !check_rights(R_MENTOR|R_ADMIN)) return SSmentor_tickets.showUI(usr) diff --git a/code/modules/alarm/alarm.dm b/code/modules/alarm/alarm.dm index 1d4a570999a..798c5176770 100644 --- a/code/modules/alarm/alarm.dm +++ b/code/modules/alarm/alarm.dm @@ -29,7 +29,7 @@ cameras() // Sets up both cameras and last alarm area. set_source_data(source, duration, severity) -/datum/alarm/proc/process() +/datum/alarm/process() // Has origin gone missing? if(!origin && !end_time) end_time = world.time + ALARM_RESET_DELAY diff --git a/code/modules/alarm/alarm_handler.dm b/code/modules/alarm/alarm_handler.dm index cd09ebe4427..56a673bb5b4 100644 --- a/code/modules/alarm/alarm_handler.dm +++ b/code/modules/alarm/alarm_handler.dm @@ -7,7 +7,7 @@ var/list/datum/alarm/alarms_assoc = new // Associative list of alarms, to efficiently acquire them based on origin. var/list/listeners = new // A list of all objects interested in alarm changes. -/datum/alarm_handler/proc/process() +/datum/alarm_handler/process() for(var/datum/alarm/A in alarms) A.process() check_alarm_cleared(A) diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index a5dfb44aae2..5e0b463af30 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -125,7 +125,7 @@ ..() /obj/item/assembly/process() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) /obj/item/assembly/examine(mob/user) ..() diff --git a/code/modules/assembly/health.dm b/code/modules/assembly/health.dm index 853733784fa..3a543e38f72 100644 --- a/code/modules/assembly/health.dm +++ b/code/modules/assembly/health.dm @@ -21,10 +21,10 @@ /obj/item/assembly/health/toggle_secure() secured = !secured if(secured && scanning) - processing_objects.Add(src) + START_PROCESSING(SSobj, src) else scanning = FALSE - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) update_icon() return secured @@ -66,9 +66,9 @@ return FALSE scanning = !scanning if(scanning) - processing_objects.Add(src) + START_PROCESSING(SSobj, src) else - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return /obj/item/assembly/health/interact(mob/user)//TODO: Change this to the wires thingy diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index d47e89a128a..98e59a7cbb5 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -42,12 +42,12 @@ /obj/item/assembly/infra/toggle_secure() secured = !secured if(secured) - processing_objects.Add(src) + START_PROCESSING(SSobj, src) else on = FALSE if(first) qdel(first) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) update_icon() return secured diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index 80e486170c2..e6ae3ec7bc4 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -28,11 +28,11 @@ /obj/item/assembly/prox_sensor/toggle_secure() secured = !secured if(secured) - processing_objects.Add(src) + START_PROCESSING(SSobj, src) else scanning = 0 timing = 0 - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) update_icon() return secured diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm index 5b7eb6ca50a..2c2216fa9d0 100644 --- a/code/modules/assembly/timer.dm +++ b/code/modules/assembly/timer.dm @@ -29,10 +29,10 @@ /obj/item/assembly/timer/toggle_secure() secured = !secured if(secured) - processing_objects.Add(src) + START_PROCESSING(SSobj, src) else timing = FALSE - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) update_icon() return secured diff --git a/code/modules/atmos_automation/statements.dm b/code/modules/atmos_automation/statements.dm index 31ee71b7a7d..72937e18eae 100644 --- a/code/modules/atmos_automation/statements.dm +++ b/code/modules/atmos_automation/statements.dm @@ -29,7 +29,7 @@ var/global/automation_types = subtypesof(/datum/automation) /datum/automation/proc/OnRemove() return -/datum/automation/proc/process() +/datum/automation/process() return /datum/automation/proc/Evaluate() diff --git a/code/modules/awaymissions/snpc.dm b/code/modules/awaymissions/snpc.dm index 04e3bf19b8e..8d65aa44a92 100644 --- a/code/modules/awaymissions/snpc.dm +++ b/code/modules/awaymissions/snpc.dm @@ -47,7 +47,7 @@ var/list/squad /obj/effect/spawner/snpc_squad/New() - processing_objects += src + START_PROCESSING(SSobj, src) squad = squads[squad_type] if(!squad) @@ -57,7 +57,7 @@ /obj/effect/spawner/snpc_squad/Destroy() squad = null - processing_objects -= src + STOP_PROCESSING(SSobj, src) return ..() /obj/effect/spawner/snpc_squad/process() diff --git a/code/modules/awaymissions/zvis.dm b/code/modules/awaymissions/zvis.dm index 03adaeda629..3697a4678df 100644 --- a/code/modules/awaymissions/zvis.dm +++ b/code/modules/awaymissions/zvis.dm @@ -58,11 +58,11 @@ owner = o if(args.len >= 3) params = args.Copy(3) - processing_objects += src + START_PROCESSING(SSobj, src) trigger() /obj/effect/portal_sensor/Destroy() - processing_objects -= src + STOP_PROCESSING(SSobj, src) return ..() /obj/effect/portal_sensor/Crossed(A) diff --git a/code/modules/busy_space/air_traffic.dm b/code/modules/busy_space/air_traffic.dm index de0b37ed3c3..b5cbf8e6fda 100644 --- a/code/modules/busy_space/air_traffic.dm +++ b/code/modules/busy_space/air_traffic.dm @@ -17,7 +17,7 @@ var/datum/lore/atc_controller/atc = new/datum/lore/atc_controller next_message = world.time + rand(delay_min, delay_max) process() -/datum/lore/atc_controller/proc/process() +/datum/lore/atc_controller/process() if(world.time >= next_message) if(squelched) next_message = world.time + backoff_delay diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index ba1b74aad66..ab0dffee5dc 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -94,7 +94,7 @@ /obj/item/clothing/head/cakehat/process() if(!onfire) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return var/turf/location = src.loc @@ -113,7 +113,7 @@ src.force = 3 src.damtype = "fire" src.icon_state = "cake1" - processing_objects.Add(src) + START_PROCESSING(SSobj, src) else src.force = null src.damtype = "brute" diff --git a/code/modules/clothing/spacesuits/chronosuit.dm b/code/modules/clothing/spacesuits/chronosuit.dm index 88f94e5b50a..fdd871a3448 100644 --- a/code/modules/clothing/spacesuits/chronosuit.dm +++ b/code/modules/clothing/spacesuits/chronosuit.dm @@ -122,7 +122,7 @@ else new_camera(user) else - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) /obj/item/clothing/suit/space/chronos/proc/activate() if(!activating && !activated && !teleporting) @@ -143,7 +143,7 @@ to_chat(user, "\[ ok \] Starting ui display driver") to_chat(user, "\[ ok \] Initializing chronowalk4-view") new_camera(user) - processing_objects.Add(src) + START_PROCESSING(SSobj, src) activated = 1 else to_chat(user, "\[ fail \] Mounting /dev/helmet") diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 382ff910277..9a0354b6b0f 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -633,7 +633,7 @@ owner.visible_message("[owner]'s shields deflect [attack_text] in a shower of sparks!") current_charges-- recharge_cooldown = world.time + recharge_delay - processing_objects |= src + START_PROCESSING(SSobj, src) if(current_charges <= 0) owner.visible_message("[owner]'s shield overloads!") shield_state = "broken" @@ -643,7 +643,7 @@ /obj/item/clothing/suit/space/hardsuit/shielded/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() /obj/item/clothing/suit/space/hardsuit/shielded/process() @@ -652,7 +652,7 @@ playsound(loc, 'sound/magic/charge.ogg', 50, 1) if(current_charges == max_charges) playsound(loc, 'sound/machines/ding.ogg', 50, 1) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) shield_state = "[shield_on]" if(istype(loc, /mob/living/carbon/human)) var/mob/living/carbon/human/C = loc diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index c65ea335c4d..913e65af734 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -110,7 +110,7 @@ spark_system.set_up(5, 0, src) spark_system.attach(src) - processing_objects.Add(src) + START_PROCESSING(SSobj, src) if(initial_modules && initial_modules.len) for(var/path in initial_modules) @@ -166,7 +166,7 @@ if(istype(M)) M.unEquip(piece) qdel(piece) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) QDEL_NULL(wires) QDEL_NULL(spark_system) return ..() diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 3499bce8e49..13ef3e074da 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -186,10 +186,10 @@ /obj/item/clothing/suit/corgisuit/super_hero/en/New() ..() - processing_objects.Add(src) + START_PROCESSING(SSobj, src) /obj/item/clothing/suit/corgisuit/super_hero/en/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() /obj/item/clothing/suit/corgisuit/super_hero/en/process() @@ -883,7 +883,7 @@ /obj/item/clothing/suit/advanced_protective_suit/Destroy() if(on) on = 0 - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() /obj/item/clothing/suit/advanced_protective_suit/ui_action_click() @@ -893,7 +893,7 @@ else on = 1 to_chat(usr, "You turn the suit's special processes on.") - processing_objects.Add(src) + START_PROCESSING(SSobj, src) /obj/item/clothing/suit/advanced_protective_suit/IsReflect() @@ -912,7 +912,7 @@ if(user.reagents.get_reagent_amount("syndicate_nanites") < 15) user.reagents.add_reagent("syndicate_nanites", 15) else - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) //Syndicate Chaplain Robe (WOLOLO!) /obj/item/clothing/suit/hooded/chaplain_hoodie/missionary_robe @@ -924,22 +924,22 @@ if(linked_staff) //delink on destruction linked_staff.robes = null linked_staff = null - processing_objects -= src //probably is cleared in a parent call already, but just in case we're gonna do it here + STOP_PROCESSING(SSobj, src) //probably is cleared in a parent call already, but just in case we're gonna do it here return ..() /obj/item/clothing/suit/hooded/chaplain_hoodie/missionary_robe/equipped(mob/living/carbon/human/H, slot) if(!istype(H) || slot != slot_wear_suit) - processing_objects -= src + STOP_PROCESSING(SSobj, src) return else - processing_objects |= src + START_PROCESSING(SSobj, src) /obj/item/clothing/suit/hooded/chaplain_hoodie/missionary_robe/process() if(!linked_staff) //if we don't have a linked staff, the rest of this is useless return if(!ishuman(loc)) //if we somehow try to process while not on a human, remove ourselves from processing and return - processing_objects -= src + STOP_PROCESSING(SSobj, src) return var/mob/living/carbon/human/H = loc diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm index 6b08e2e4e49..b1da17677de 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -574,7 +574,7 @@ /obj/item/clothing/accessory/petcollar/Destroy() QDEL_NULL(access_id) - processing_objects -= src + STOP_PROCESSING(SSobj, src) return ..() /obj/item/clothing/accessory/petcollar/attack_self(mob/user as mob) @@ -617,10 +617,10 @@ /obj/item/clothing/accessory/petcollar/equipped(mob/living/simple_animal/user) if(istype(user)) - processing_objects |= src + START_PROCESSING(SSobj, src) /obj/item/clothing/accessory/petcollar/dropped(mob/living/simple_animal/user) - processing_objects -= src + STOP_PROCESSING(SSobj, src) /obj/item/clothing/accessory/petcollar/process() var/mob/living/simple_animal/M = loc @@ -636,7 +636,7 @@ else a.autosay("[M] has been vandalized in [t.name]!", "[M]'s Death Alarm") qdel(a) - processing_objects -= src + STOP_PROCESSING(SSobj, src) /proc/english_accessory_list(obj/item/clothing/under/U) if(!istype(U) || !U.accessories.len) diff --git a/code/modules/countdown/countdown.dm b/code/modules/countdown/countdown.dm index d860ba9c4cd..8769e5e321a 100644 --- a/code/modules/countdown/countdown.dm +++ b/code/modules/countdown/countdown.dm @@ -28,13 +28,13 @@ /obj/effect/countdown/proc/start() if(!started) - GLOB.fast_processing += src + START_PROCESSING(SSfastprocess, src) started = TRUE /obj/effect/countdown/proc/stop() if(started) maptext = null - GLOB.fast_processing -= src + STOP_PROCESSING(SSfastprocess, src) started = FALSE /obj/effect/countdown/proc/get_value() @@ -57,7 +57,7 @@ /obj/effect/countdown/Destroy() attached_to = null - GLOB.fast_processing -= src + STOP_PROCESSING(SSfastprocess, src) return ..() /obj/effect/countdown/ex_act(severity) //immune to explosions diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index 23206e8b9b3..fc27234648d 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -760,10 +760,10 @@ /obj/item/clothing/head/pirate/fluff/stumpy/New() ..() - processing_objects.Add(src) + START_PROCESSING(SSobj, src) /obj/item/clothing/head/pirate/fluff/stumpy/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() /obj/item/clothing/head/pirate/fluff/stumpy/process() diff --git a/code/modules/events/event.dm b/code/modules/events/event.dm index 0f5c43059e8..1186da902f0 100644 --- a/code/modules/events/event.dm +++ b/code/modules/events/event.dm @@ -105,7 +105,7 @@ //Do not override this proc, instead use the appropiate procs. //This proc will handle the calls to the appropiate procs. -/datum/event/proc/process() +/datum/event/process() if(!processing) return @@ -137,12 +137,12 @@ end() endedAt = world.time - event_manager.active_events -= src - event_manager.event_complete(src) + SSevents.active_events -= src + SSevents.event_complete(src) /datum/event/New(var/datum/event_meta/EM) // event needs to be responsible for this, as stuff like APLUs currently make their own events for curious reasons - event_manager.active_events += src + SSevents.active_events += src if(!EM) EM = new /datum/event_meta(EVENT_LEVEL_MAJOR, "Unknown, Most likely admin called", src.type) diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm index 6cc12faf1b4..3f86b88924c 100644 --- a/code/modules/events/event_container.dm +++ b/code/modules/events/event_container.dm @@ -22,7 +22,7 @@ var/list/event_last_fired = list() var/last_world_time = 0 -/datum/event_container/proc/process() +/datum/event_container/process() if(!next_event_time) set_event_delay() diff --git a/code/modules/events/event_procs.dm b/code/modules/events/event_procs.dm new file mode 100644 index 00000000000..02ae1454597 --- /dev/null +++ b/code/modules/events/event_procs.dm @@ -0,0 +1,120 @@ + +/client/proc/forceEvent(var/type in SSevents.allEvents) + set name = "Trigger Event (Debug Only)" + set category = "Debug" + + if(!holder) + return + + if(ispath(type)) + new type(new /datum/event_meta(EVENT_LEVEL_MAJOR)) + message_admins("[key_name_admin(usr)] has triggered an event. ([type])", 1) + +/client/proc/event_manager_panel() + set name = "Event Manager Panel" + set category = "Event" + if(SSevents) + SSevents.Interact(usr) + feedback_add_details("admin_verb","EMP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + return + +/proc/findEventArea() //Here's a nice proc to use to find an area for your event to land in! + var/area/candidate = null + + var/list/safe_areas = list( + /area/turret_protected/ai, + /area/turret_protected/ai_upload, + /area/engine, + /area/solar, + /area/holodeck, + /area/shuttle/arrival, + /area/shuttle/escape, + /area/shuttle/escape_pod1/station, + /area/shuttle/escape_pod2/station, + /area/shuttle/escape_pod3/station, + /area/shuttle/escape_pod5/station, + /area/shuttle/specops/station, + /area/shuttle/prison/station, + /area/shuttle/administration/station + ) + + //These are needed because /area/engine has to be removed from the list, but we still want these areas to get fucked up. + var/list/danger_areas = list( + /area/engine/break_room, + /area/engine/chiefs_office) + + var/list/event_areas = list() + + for(var/areapath in the_station_areas) + event_areas += typesof(areapath) + for(var/areapath in safe_areas) + event_areas -= typesof(areapath) + for(var/areapath in danger_areas) + event_areas += typesof(areapath) + + while(event_areas.len > 0) + var/list/event_turfs = null + candidate = locate(pick_n_take(event_areas)) + event_turfs = get_area_turfs(candidate) + if(event_turfs.len > 0) + break + + return candidate + +// Returns how many characters are currently active(not logged out, not AFK for more than 10 minutes) +// with a specific role. +// Note that this isn't sorted by department, because e.g. having a roboticist shouldn't make meteors spawn. +/proc/number_active_with_role() + var/list/active_with_role = list() + active_with_role["Engineer"] = 0 + active_with_role["Medical"] = 0 + active_with_role["Security"] = 0 + active_with_role["Scientist"] = 0 + active_with_role["AI"] = 0 + active_with_role["Cyborg"] = 0 + active_with_role["Janitor"] = 0 + active_with_role["Botanist"] = 0 + active_with_role["Any"] = GLOB.player_list.len + + for(var/mob/M in GLOB.player_list) + if(!M.mind || !M.client || M.client.inactivity > 10 * 10 * 60) // longer than 10 minutes AFK counts them as inactive + continue + + if(istype(M, /mob/living/silicon/robot) && M:module && M:module.name == "engineering robot module") + active_with_role["Engineer"]++ + if(M.mind.assigned_role in list("Chief Engineer", "Station Engineer")) + active_with_role["Engineer"]++ + + if(istype(M, /mob/living/silicon/robot) && M:module && M:module.name == "medical robot module") + active_with_role["Medical"]++ + if(M.mind.assigned_role in list("Chief Medical Officer", "Medical Doctor")) + active_with_role["Medical"]++ + + if(istype(M, /mob/living/silicon/robot) && M:module && M:module.name == "security robot module") + active_with_role["Security"]++ + if(M.mind.assigned_role in security_positions) + active_with_role["Security"]++ + + if(M.mind.assigned_role in list("Research Director", "Scientist")) + active_with_role["Scientist"]++ + + if(M.mind.assigned_role == "AI") + active_with_role["AI"]++ + + if(M.mind.assigned_role == "Cyborg") + active_with_role["Cyborg"]++ + + if(M.mind.assigned_role == "Janitor") + active_with_role["Janitor"]++ + + if(M.mind.assigned_role == "Botanist") + active_with_role["Botanist"]++ + + return active_with_role + +/datum/event/proc/num_players() + var/players = 0 + for(var/mob/living/carbon/human/P in GLOB.player_list) + if(P.client) + players++ + return players diff --git a/code/modules/events/false_alarm.dm b/code/modules/events/false_alarm.dm index e63805d6a1d..a0aa17596fd 100644 --- a/code/modules/events/false_alarm.dm +++ b/code/modules/events/false_alarm.dm @@ -4,7 +4,7 @@ /datum/event/falsealarm/announce() var/weight = pickweight(list(EVENT_LEVEL_MUNDANE = 60, EVENT_LEVEL_MODERATE = 30, EVENT_LEVEL_MAJOR = 10)) - var/datum/event_container/container = event_manager.event_containers[weight] + var/datum/event_container/container = SSevents.event_containers[weight] var/datum/event/E = container.acquire_event() var/datum/event/Event = new E message_admins("False Alarm: [Event]") diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm index 7d52d7cd969..ced084f05a3 100644 --- a/code/modules/events/spacevine.dm +++ b/code/modules/events/spacevine.dm @@ -539,7 +539,7 @@ /obj/structure/spacevine_controller/New(loc, list/muts, potency, production) color = "#ffffff" spawn_spacevine_piece(loc, , muts) - processing_objects.Add(src) + START_PROCESSING(SSobj, src) init_subtypes(/datum/spacevine_mutation/, mutations_list) if(potency != null && potency > 0) // 1 mutativeness at 10 potency @@ -567,7 +567,7 @@ return /obj/structure/spacevine_controller/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() /obj/structure/spacevine_controller/proc/spawn_spacevine_piece(turf/location, obj/structure/spacevine/parent, list/muts) diff --git a/code/modules/events/wizard/ghost.dm b/code/modules/events/wizard/ghost.dm new file mode 100644 index 00000000000..11529e3080d --- /dev/null +++ b/code/modules/events/wizard/ghost.dm @@ -0,0 +1,5 @@ +/datum/event/wizard/ghost //The spook is real + +/datum/event/wizard/ghost/start() + var/msg = "You suddenly feel extremely obvious..." + set_observer_default_invisibility(0, msg) diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 855ac60666b..e937ec25ef9 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -138,7 +138,7 @@ Gunshots/explosions/opening doors/less rare audio (done) if(target.client) target.client.images |= flood_images next_expand = world.time + FAKE_FLOOD_EXPAND_TIME - processing_objects += src + START_PROCESSING(SSobj, src) /obj/effect/hallucination/fake_flood/process() if(next_expand <= world.time) @@ -162,7 +162,7 @@ Gunshots/explosions/opening doors/less rare audio (done) target.client.images |= flood_images /obj/effect/hallucination/fake_flood/Destroy() - processing_objects -= src + STOP_PROCESSING(SSobj, src) flood_turfs.Cut() if(target.client) target.client.images.Remove(flood_images) diff --git a/code/modules/holiday/holiday.dm b/code/modules/holiday/holiday.dm index 414df7f7589..f87422e2ad1 100644 --- a/code/modules/holiday/holiday.dm +++ b/code/modules/holiday/holiday.dm @@ -345,9 +345,9 @@ if(!istype(H)) return H.celebrate() - if(!holiday_master.holidays) - holiday_master.holidays = list() - holiday_master.holidays[H.name] = H + if(!SSholiday.holidays) + SSholiday.holidays = list() + SSholiday.holidays[H.name] = H //update our hub status world.update_status() diff --git a/code/modules/hydroponics/beekeeping/beebox.dm b/code/modules/hydroponics/beekeeping/beebox.dm index 371822643a1..21ba7cb89e2 100644 --- a/code/modules/hydroponics/beekeeping/beebox.dm +++ b/code/modules/hydroponics/beekeeping/beebox.dm @@ -47,11 +47,11 @@ /obj/structure/beebox/Initialize(mapload) . = ..() - processing_objects.Add(src) + START_PROCESSING(SSobj, src) /obj/structure/beebox/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) for(var/mob/living/simple_animal/hostile/poison/bees/B in bees) B.beehome = null bees.Cut() diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm index 4ed9d963274..90725f8e46e 100644 --- a/code/modules/hydroponics/grown/towercap.dm +++ b/code/modules/hydroponics/grown/towercap.dm @@ -151,7 +151,7 @@ burning = 1 set_light(6, l_color = "#ED9200") Burn() - processing_objects.Add(src) + START_PROCESSING(SSobj, src) /obj/structure/bonfire/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE) ..() @@ -186,7 +186,7 @@ icon_state = "bonfire" burning = 0 set_light(0) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) /obj/structure/bonfire/buckle_mob(mob/living/M, force = 0) if(..()) diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index b0eafcbc8bb..38d5436ecfb 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -701,8 +701,7 @@ H.nutrition -= 20 H.adjustToxLoss(-3) var/turf/T = get_turf(H) - T.add_vomit_floor(H) - playsound(H, 'sound/effects/splat.ogg', 50, 1) + T.add_vomit_floor() else visible_message("[src] flickers and fails, due to bluespace interference!") qdel(src) diff --git a/code/modules/mining/lavaland/loot/ashdragon_loot.dm b/code/modules/mining/lavaland/loot/ashdragon_loot.dm index f657fa6ec5f..fd8b8dfa4ef 100644 --- a/code/modules/mining/lavaland/loot/ashdragon_loot.dm +++ b/code/modules/mining/lavaland/loot/ashdragon_loot.dm @@ -35,14 +35,14 @@ /obj/item/melee/ghost_sword/New() ..() spirits = list() - processing_objects.Add(src) + START_PROCESSING(SSobj, src) GLOB.poi_list |= src /obj/item/melee/ghost_sword/Destroy() for(var/mob/dead/observer/G in spirits) G.invisibility = initial(G.invisibility) spirits.Cut() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) GLOB.poi_list -= src . = ..() diff --git a/code/modules/mining/lavaland/loot/colossus_loot.dm b/code/modules/mining/lavaland/loot/colossus_loot.dm index c3887fe4660..d7c6232121f 100644 --- a/code/modules/mining/lavaland/loot/colossus_loot.dm +++ b/code/modules/mining/lavaland/loot/colossus_loot.dm @@ -436,7 +436,7 @@ ..() if(isanimal(loc)) holder_animal = loc - processing_objects.Add(src) + START_PROCESSING(SSobj, src) /obj/structure/closet/stasis/Entered(atom/A) if(isliving(A) && holder_animal) @@ -450,7 +450,7 @@ holder_animal.verbs -= /mob/living/verb/pulled /obj/structure/closet/stasis/dump_contents(var/kill = 1) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) for(var/mob/living/L in src) L.disabilities &= ~MUTE L.status_flags &= ~GODMODE diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index dfd4e1e3332..db59a79ec21 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -3,6 +3,8 @@ var/list/image/ghost_darkness_images = list() //this is a list of images for things ghosts should still be able to see when they toggle darkness +GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) + /mob/dead/observer name = "ghost" desc = "It's a g-g-g-g-ghooooost!" //jinkies! @@ -29,6 +31,8 @@ var/list/image/ghost_darkness_images = list() //this is a list of images for thi var/ghost_orbit = GHOST_ORBIT_CIRCLE /mob/dead/observer/New(var/mob/body=null, var/flags=1) + set_invisibility(GLOB.observer_default_invisibility) + sight |= SEE_TURFS | SEE_MOBS | SEE_OBJS | SEE_SELF see_invisible = SEE_INVISIBLE_OBSERVER_AI_EYE see_in_dark = 100 @@ -384,7 +388,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp to_chat(usr, "AntagHud Toggled OFF") M.antagHUD = 0 -/mob/dead/observer/proc/dead_tele(A in ghostteleportlocs) +/mob/dead/observer/proc/dead_tele() set category = "Ghost" set name = "Teleport" set desc= "Teleport to a location" @@ -397,6 +401,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp spawn(30) usr.verbs += /mob/dead/observer/proc/dead_tele + var/area/A = input("Area to jump to", "BOOYEA") as null|anything in ghostteleportlocs var/area/thearea = ghostteleportlocs[A] if(!thearea) return @@ -410,13 +415,14 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp usr.forceMove(pick(L)) following = null -/mob/dead/observer/verb/follow(input in getmobs()) +/mob/dead/observer/verb/follow() set category = "Ghost" set name = "Orbit" // "Haunt" set desc = "Follow and orbit a mob." - var/target = getmobs()[input] - if(!target) return + var/list/mobs = getpois(skip_mindless=1) + var/input = input("Please, select a mob!", "Haunt", null, null) as null|anything in mobs + var/mob/target = mobs[input] ManualFollow(target) // This is the ghost's follow verb with an argument @@ -484,24 +490,29 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp update_following() return ..() -/mob/dead/observer/verb/jumptomob(target in getmobs()) //Moves the ghost instead of just changing the ghosts's eye -Nodrak +/mob/dead/observer/verb/jumptomob() //Moves the ghost instead of just changing the ghosts's eye -Nodrak set category = "Ghost" set name = "Jump to Mob" set desc = "Teleport to a mob" - if(istype(usr, /mob/dead/observer)) //Make sure they're an observer! + if(isobserver(usr)) //Make sure they're an observer! + var/list/dest = list() //List of possible destinations (mobs) + var/target = null //Chosen target. - if(!target)//Make sure we actually have a target + dest += getpois(mobs_only=1) //Fill list, prompt user with list + target = input("Please, select a mob!", "Jump to Mob", null, null) as null|anything in dest + + if(!target) //Make sure we actually have a target return else - var/mob/M = getmobs()[target] //Destination mob + var/mob/M = dest[target] //Destination mob + var/mob/A = src //Source mob var/turf/T = get_turf(M) //Turf of the destination mob if(T && isturf(T)) //Make sure the turf exists, then move the source to that destination. - forceMove(T) - following = null + A.forceMove(T) else - to_chat(src, "This mob is not located in the game world.") + to_chat(A, "This mob is not located in the game world.") /* Now a spell. See spells.dm @@ -742,6 +753,26 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp /mob/dead/observer/is_literate() return TRUE + +/mob/dead/observer/proc/set_invisibility(value) + invisibility = value + if(!value) + set_light(1, 2) + else + set_light(0, 0) + +/mob/dead/observer/vv_edit_var(var_name, var_value) + . = ..() + if(var_name == "invisibility") + set_invisibility(invisibility) // updates light + +/proc/set_observer_default_invisibility(amount, message=null) + for(var/mob/dead/observer/G in GLOB.player_list) + G.set_invisibility(amount) + if(message) + to_chat(G, message) + GLOB.observer_default_invisibility = amount + /mob/dead/observer/proc/open_spawners_menu() set name = "Mob spawners menu" set desc = "See all currently available ghost spawners" diff --git a/code/modules/mob/dead/observer/say.dm b/code/modules/mob/dead/observer/say.dm index ab47a84ee76..41c1d89f603 100644 --- a/code/modules/mob/dead/observer/say.dm +++ b/code/modules/mob/dead/observer/say.dm @@ -17,7 +17,7 @@ . = src.say_dead(message) -/mob/dead/observer/emote(var/act, var/type, var/message) +/mob/dead/observer/emote(act, type, message, force) message = sanitize(copytext(message, 1, MAX_MESSAGE_LEN)) if(!message) diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm index 0ec193c69e8..989decdb395 100644 --- a/code/modules/mob/emote.dm +++ b/code/modules/mob/emote.dm @@ -2,15 +2,20 @@ //Emote Cooldown System (it's so simple!) /mob/proc/handle_emote_CD(cooldown = EMOTE_COOLDOWN) - if(emote_cd == 2) return 1 // Cooldown emotes were disabled by an admin, prevent use - if(src.emote_cd == 1) return 1 // Already on CD, prevent use + if(emote_cd == 3) //Spam those emotes + return FALSE + if(emote_cd == 2) // Cooldown emotes were disabled by an admin, prevent use + return TRUE + if(emote_cd == 1) // Already on CD, prevent use + return TRUE - src.emote_cd = 1 // Starting cooldown + emote_cd = TRUE // Starting cooldown spawn(cooldown) - if(emote_cd == 2) return 1 // Don't reset if cooldown emotes were disabled by an admin during the cooldown - src.emote_cd = 0 // Cooldown complete, ready for more! + if(emote_cd == 2) + return TRUE // Don't reset if cooldown emotes were disabled by an admin during the cooldown + emote_cd = FALSE // Cooldown complete, ready for more! + return FALSE // Proceed with emote - return 0 // Proceed with emote //--FalseIncarnate /mob/proc/handle_emote_param(var/target, var/not_self, var/vicinity, var/return_mob) //Only returns not null if the target param is valid. diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm index 3a6c4d22a67..ee9a3c3cca2 100644 --- a/code/modules/mob/holder.dm +++ b/code/modules/mob/holder.dm @@ -7,10 +7,10 @@ /obj/item/holder/New() ..() - processing_objects.Add(src) + START_PROCESSING(SSobj, src) /obj/item/holder/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() /obj/item/holder/process() diff --git a/code/modules/mob/living/carbon/alien/humanoid/emote.dm b/code/modules/mob/living/carbon/alien/humanoid/emote.dm index f159abebbe4..7412120cff0 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/emote.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/emote.dm @@ -1,4 +1,4 @@ -/mob/living/carbon/alien/humanoid/emote(var/act,var/m_type=1,var/message = null) +/mob/living/carbon/alien/humanoid/emote(act, m_type = 1, message = null, force) var/param = null if(findtext(act, "-", 1, null)) var/t1 = findtext(act, "-", 1, null) @@ -25,7 +25,7 @@ if("flip") on_CD = handle_emote_CD() - if(on_CD) + if(!force && on_CD == 1) return switch(act) @@ -138,4 +138,4 @@ playsound(src.loc, 'sound/voice/hiss1.ogg', 30, 1, 1) if(act == "gnarl") playsound(src.loc, 'sound/voice/hiss4.ogg', 30, 1, 1) - ..(act, m_type, message) \ No newline at end of file + ..() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/larva/emote.dm b/code/modules/mob/living/carbon/alien/larva/emote.dm index 82ebcf943f6..3b18889176b 100644 --- a/code/modules/mob/living/carbon/alien/larva/emote.dm +++ b/code/modules/mob/living/carbon/alien/larva/emote.dm @@ -1,4 +1,4 @@ -/mob/living/carbon/alien/larva/emote(var/act,var/m_type=1,var/message = null) +/mob/living/carbon/alien/larva/emote(act, m_type = 1, message = null, force) var/param = null if(findtext(act, "-", 1, null)) var/t1 = findtext(act, "-", 1, null) diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm index 087ca959902..04f5cd53d00 100644 --- a/code/modules/mob/living/carbon/brain/brain_item.dm +++ b/code/modules/mob/living/carbon/brain/brain_item.dm @@ -107,7 +107,7 @@ /obj/item/organ/internal/brain/necrotize(update_sprite = TRUE) //Brain also has special handling for when it necrotizes damage = max_damage status |= ORGAN_DEAD - processing_objects -= src + STOP_PROCESSING(SSobj, src) if(dead_icon && !is_robotic()) icon_state = dead_icon if(owner && vital) diff --git a/code/modules/mob/living/carbon/brain/emote.dm b/code/modules/mob/living/carbon/brain/emote.dm index bf7962464da..dd1876e223f 100644 --- a/code/modules/mob/living/carbon/brain/emote.dm +++ b/code/modules/mob/living/carbon/brain/emote.dm @@ -1,4 +1,4 @@ -/mob/living/carbon/brain/emote(var/act,var/m_type=1,var/message = null) +/mob/living/carbon/brain/emote(act,m_type = 1, message = null, force) if(!(container && istype(container, /obj/item/mmi)))//No MMI, no emotes return @@ -48,4 +48,4 @@ to_chat(src, "alarm, alert, notice, flash,blink, whistle, beep, boop") if(message && !stat) - ..(act, m_type, message) \ No newline at end of file + ..() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 277bbbd8789..77373021727 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -109,7 +109,7 @@ adjustBruteLoss(3) else if(T) - T.add_vomit_floor(src) + T.add_vomit_floor() nutrition -= lost_nutrition if(stun) adjustToxLoss(-3) diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 7259a455154..6d245674fd1 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -93,7 +93,7 @@ /mob/living/carbon/human/death(gibbed) if(can_die() && !gibbed && deathgasp_on_death) - emote("deathgasp") //let the world KNOW WE ARE DEAD + emote("deathgasp", force = TRUE) //let the world KNOW WE ARE DEAD // Only execute the below if we successfully died . = ..(gibbed) diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 442d7aaf044..416fd911777 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -1,4 +1,4 @@ -/mob/living/carbon/human/emote(var/act,var/m_type=1,var/message = null,var/force) +/mob/living/carbon/human/emote(act, m_type = 1, message = null, force) if((stat == DEAD) || (status_flags & FAKEDEATH)) return // No screaming bodies @@ -13,22 +13,22 @@ if(muzzled) var/obj/item/clothing/mask/muzzle/M = wear_mask if(M.mute == MUZZLE_MUTE_NONE) - muzzled = 0 //Not all muzzles block sound + muzzled = FALSE //Not all muzzles block sound if(!can_speak()) - muzzled = 1 + muzzled = TRUE //var/m_type = 1 for(var/obj/item/implant/I in src) if(I.implanted) - I.trigger(act, src) + I.trigger(act, src, force) - var/miming = 0 + var/miming = FALSE if(mind) miming = mind.miming //Emote Cooldown System (it's so simple!) - // proc/handle_emote_CD() located in [code\modules\mob\emote.dm] - var/on_CD = 0 + //handle_emote_CD() located in [code\modules\mob\emote.dm] + var/on_CD = FALSE act = lowertext(act) switch(act) //Cooldown-inducing emotes @@ -61,16 +61,16 @@ else return if("squish", "squishes") - var/found_slime_bodypart = 0 + var/found_slime_bodypart = FALSE if(isslimeperson(src)) //Only Slime People can squish on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm' - found_slime_bodypart = 1 + found_slime_bodypart = TRUE else for(var/obj/item/organ/external/L in bodyparts) // if your limbs are squishy you can squish too! if(istype(L.dna.species, /datum/species/slime)) on_CD = handle_emote_CD() - found_slime_bodypart = 1 + found_slime_bodypart = TRUE break if(!found_slime_bodypart) //Everyone else fails, skip the emote attempt @@ -118,9 +118,9 @@ on_CD = handle_emote_CD() //Everything else, including typos of the above emotes else - on_CD = 0 //If it doesn't induce the cooldown, we won't check for the cooldown + on_CD = FALSE //If it doesn't induce the cooldown, we won't check for the cooldown - if(on_CD == 1) // Check if we need to suppress the emote attempt. + if(!force && on_CD == 1) // Check if we need to suppress the emote attempt. return // Suppress emote, you're still cooling off. switch(act) diff --git a/code/modules/mob/living/carbon/slime/emote.dm b/code/modules/mob/living/carbon/slime/emote.dm index a07f1ba3b2e..c938ac17214 100644 --- a/code/modules/mob/living/carbon/slime/emote.dm +++ b/code/modules/mob/living/carbon/slime/emote.dm @@ -1,4 +1,4 @@ -/mob/living/carbon/slime/emote(act, m_type = 1, message = null) +/mob/living/carbon/slime/emote(act, m_type = 1, message = null, force) if(findtext(act, "-", 1, null)) var/t1 = findtext(act, "-", 1, null) //param = copytext(act, t1 + 1, length(act) + 1) diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 003b5c3d4fe..37077881350 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -57,7 +57,7 @@ SetLoseBreath(0) if(!gibbed && deathgasp_on_death) - emote("deathgasp") + emote("deathgasp", force = TRUE) if(mind && suiciding) mind.suicided = TRUE diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index cf5fff66caa..95b44b15862 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -275,7 +275,7 @@ proc/get_radio_key_from_channel(var/channel) /mob/living/proc/GetVoice() return name -/mob/living/emote(var/act, var/type, var/message) //emote code is terrible, this is so that anything that isn't already snowflaked to shit can call the parent and handle emoting sanely +/mob/living/emote(act, type, message, force) //emote code is terrible, this is so that anything that isn't already snowflaked to shit can call the parent and handle emoting sanely if(client) if(client.prefs.muted & MUTE_IC) to_chat(src, "You cannot speak in IC (Muted).") @@ -284,7 +284,7 @@ proc/get_radio_key_from_channel(var/channel) if(stat) return 0 - if(..(act, type, message)) + if(..()) return 1 if(act && type && message) //parent call @@ -306,7 +306,8 @@ proc/get_radio_key_from_channel(var/channel) return 1 else //everything else failed, emote is probably invalid - if(act == "help") return //except help, because help is handled individually + if(act == "help") + return //except help, because help is handled individually to_chat(src, "Unusable emote '[act]'. Say *help for a list.") /mob/living/whisper(message as text) diff --git a/code/modules/mob/living/silicon/emote.dm b/code/modules/mob/living/silicon/emote.dm index 3385c4ce622..1b1ee4f7f48 100644 --- a/code/modules/mob/living/silicon/emote.dm +++ b/code/modules/mob/living/silicon/emote.dm @@ -1,4 +1,4 @@ -/mob/living/silicon/emote(var/act, var/m_type=1, var/message = null) +/mob/living/silicon/emote(act, m_type=1, message = null, force) var/param = null if(findtext(act, "-", 1, null)) var/t1 = findtext(act, "-", 1, null) @@ -6,7 +6,7 @@ act = copytext(act, 1, t1) //Emote Cooldown System (it's so simple!) - // proc/handle_emote_CD() located in [code\modules\mob\emote.dm] + //handle_emote_CD() located in [code\modules\mob\emote.dm] var/on_CD = 0 act = lowertext(act) switch(act) @@ -20,7 +20,7 @@ else on_CD = 0 //If it doesn't induce the cooldown, we won't check for the cooldown - if(on_CD == 1) // Check if we need to suppress the emote attempt. + if(!force && on_CD == 1) // Check if we need to suppress the emote attempt. return // Suppress emote, you're still cooling off. //--FalseIncarnate @@ -78,4 +78,4 @@ if("help") to_chat(src, "yes, no, beep, ping, buzz, scream, buzz2") - ..(act, m_type, message) + ..() diff --git a/code/modules/mob/living/silicon/pai/emote.dm b/code/modules/mob/living/silicon/pai/emote.dm deleted file mode 100644 index a418c0972d5..00000000000 --- a/code/modules/mob/living/silicon/pai/emote.dm +++ /dev/null @@ -1,2 +0,0 @@ -/mob/living/silicon/pai/emote(var/act, var/m_type=1, var/message = null) - ..(act, m_type, message) diff --git a/code/modules/mob/living/silicon/pai/recruit.dm b/code/modules/mob/living/silicon/pai/recruit.dm index fec27db5df8..989dcba3783 100644 --- a/code/modules/mob/living/silicon/pai/recruit.dm +++ b/code/modules/mob/living/silicon/pai/recruit.dm @@ -57,12 +57,6 @@ var/datum/paiController/paiController // Global handler for pAI candidates usr << browse(null, "window=findPai") - if(candidate) - if(candidate.key && usr.key && candidate.key != usr.key) - message_admins("Warning: possible href exploit by [key_name(usr)] (paiController/Topic, candidate and usr are different mobs)") - log_debug("Warning: possible href exploit by [key_name(usr)] (paiController/Topic, candidate and usr are different mobs)") - return - if("signup" in href_list) var/mob/dead/observer/O = locate(href_list["signup"]) if(!O) @@ -75,6 +69,11 @@ var/datum/paiController/paiController // Global handler for pAI candidates recruitWindow(O) return + if(candidate) + if(candidate.key && usr.key && candidate.key != usr.key) + message_admins("Warning: possible href exploit by [key_name(usr)] (paiController/Topic, candidate and usr are different mobs)") + log_debug("Warning: possible href exploit by [key_name(usr)] (paiController/Topic, candidate and usr are different mobs)") + return if(href_list["new"]) var/option = href_list["option"] diff --git a/code/modules/mob/living/silicon/robot/death.dm b/code/modules/mob/living/silicon/robot/death.dm index 21a09eed8a8..7402c4a65c9 100644 --- a/code/modules/mob/living/silicon/robot/death.dm +++ b/code/modules/mob/living/silicon/robot/death.dm @@ -50,7 +50,7 @@ /mob/living/silicon/robot/death(gibbed) if(can_die()) if(!gibbed && deathgasp_on_death) - emote("deathgasp") + emote("deathgasp", force = TRUE) if(module) module.handle_death(gibbed) diff --git a/code/modules/mob/living/silicon/robot/emote.dm b/code/modules/mob/living/silicon/robot/emote.dm index 9c130780d81..bec1e1ae668 100644 --- a/code/modules/mob/living/silicon/robot/emote.dm +++ b/code/modules/mob/living/silicon/robot/emote.dm @@ -1,4 +1,4 @@ -/mob/living/silicon/robot/emote(var/act, var/m_type=1, var/message = null) +/mob/living/silicon/robot/emote(act, m_type=1, message = null, force) var/param = null if(findtext(act, "-", 1, null)) var/t1 = findtext(act, "-", 1, null) @@ -6,7 +6,7 @@ act = copytext(act, 1, t1) //Emote Cooldown System (it's so simple!) - //proc/handle_emote_CD() located in [code\modules\mob\emote.dm] + //handle_emote_CD() located in [code\modules\mob\emote.dm] var/on_CD = 0 act = lowertext(act) switch(act) @@ -17,7 +17,7 @@ else on_CD = 0 //If it doesn't induce the cooldown, we won't check for the cooldown - if(on_CD == 1) // Check if we need to suppress the emote attempt. + if(!force && on_CD == 1) // Check if we need to suppress the emote attempt. return // Suppress emote, you're still cooling off. //--FalseIncarnate @@ -160,7 +160,7 @@ if("help") to_chat(src, "salute, bow-(none)/mob, clap, flap, aflap, twitch, twitches, nod, deathgasp, glare-(none)/mob, stare-(none)/mob, look,\n law, halt") - ..(act, m_type, message) + ..() /mob/living/silicon/robot/verb/powerwarn() set category = "Robot Commands" diff --git a/code/modules/mob/living/silicon/say.dm b/code/modules/mob/living/silicon/say.dm index 17a7e67adf7..8092947919f 100644 --- a/code/modules/mob/living/silicon/say.dm +++ b/code/modules/mob/living/silicon/say.dm @@ -103,7 +103,7 @@ return return 1 -/mob/living/silicon/ai/emote(var/act, var/type, var/message) +/mob/living/silicon/ai/emote(act, type, message, force) var/obj/machinery/hologram/holopad/T = current if(istype(T) && T.masters[src])//Is the AI using a holopad? src.holopad_emote(message) diff --git a/code/modules/mob/living/silicon/subsystems.dm b/code/modules/mob/living/silicon/subsystems.dm index fa3dcfd2cfa..8f7c2316768 100644 --- a/code/modules/mob/living/silicon/subsystems.dm +++ b/code/modules/mob/living/silicon/subsystems.dm @@ -41,7 +41,7 @@ if(!register_alarms) return - var/list/register_to = list(atmosphere_alarm, burglar_alarm, camera_alarm, fire_alarm, motion_alarm, power_alarm) + var/list/register_to = list(SSalarms.atmosphere_alarm, SSalarms.burglar_alarm, SSalarms.camera_alarm, SSalarms.fire_alarm, SSalarms.motion_alarm, SSalarms.power_alarm) for(var/datum/alarm_handler/AH in register_to) AH.register(src, /mob/living/silicon/proc/receive_alarm) queued_alarms[AH] = list() // Makes sure alarms remain listed in consistent order diff --git a/code/modules/mob/living/simple_animal/bot/emote.dm b/code/modules/mob/living/simple_animal/bot/emote.dm index eb6a18e8657..c59e044cc67 100644 --- a/code/modules/mob/living/simple_animal/bot/emote.dm +++ b/code/modules/mob/living/simple_animal/bot/emote.dm @@ -1,4 +1,4 @@ -/mob/living/simple_animal/bot/emote(act, m_type=1, message = null) +/mob/living/simple_animal/bot/emote(act, m_type = 1, message = null, force) var/param = null if(findtext(act, "-", 1, null)) var/t1 = findtext(act, "-", 1, null) @@ -9,7 +9,7 @@ act = copytext(act,1,length(act)) //Emote Cooldown System (it's so simple!) - //proc/handle_emote_CD() located in [code\modules\mob\emote.dm] + //handle_emote_CD() located in [code\modules\mob\emote.dm] var/on_CD = 0 act = lowertext(act) switch(act) @@ -22,7 +22,7 @@ else on_CD = 0 //If it doesn't induce the cooldown, we won't check for the cooldown - if(on_CD == 1) // Check if we need to suppress the emote attempt. + if(!force && on_CD == 1) // Check if we need to suppress the emote attempt. return // Suppress emote, you're still cooling off. //--FalseIncarnate @@ -71,4 +71,4 @@ if("help") to_chat(src, "scream(s), yes, no, beep, buzz, ping") - ..(act, m_type, message) + ..() diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index 9532daabab8..38787198a5f 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -147,7 +147,7 @@ stop_automated_movement = 1 walk_to(src,movement_target,0,3) -/mob/living/simple_animal/pet/cat/emote(act, m_type=1, message = null) +/mob/living/simple_animal/pet/cat/emote(act, m_type = 1, message = null, force) if(stat != CONSCIOUS) return @@ -163,9 +163,9 @@ else on_CD = 0 - if(on_CD == 1) + if(!force && on_CD == 1) return - + switch(act) if("meow") message = "[src] [pick(emote_hear)]!" @@ -225,9 +225,9 @@ maxHealth = 50 harm_intent_damage = 10 butcher_results = list( - /obj/item/organ/internal/brain = 1, - /obj/item/organ/internal/heart = 1, - /obj/item/reagent_containers/food/snacks/birthdaycakeslice = 3, + /obj/item/organ/internal/brain = 1, + /obj/item/organ/internal/heart = 1, + /obj/item/reagent_containers/food/snacks/birthdaycakeslice = 3, /obj/item/reagent_containers/food/snacks/meat/slab = 2 ) response_harm = "takes a bite out of" diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm index 832d92c9d8f..3ff26f7850c 100644 --- a/code/modules/mob/living/simple_animal/friendly/corgi.dm +++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm @@ -368,7 +368,7 @@ name = "Definitely Not [real_name]" desc = "That's Definitely Not [real_name]" valid = 1 - + if(/obj/item/clothing/head/beret/centcom/officer, /obj/item/clothing/head/beret/centcom/officer/navy) name = "Blueshield [real_name]" desc = "Will stand by you until the bitter end." @@ -407,7 +407,7 @@ playsound(src, yelp_sound, 75, 1) ..() -/mob/living/simple_animal/pet/corgi/emote(act, m_type=1, message = null) +/mob/living/simple_animal/pet/corgi/emote(act, m_type = 1, message = null, force) if(stat != CONSCIOUS) return @@ -421,9 +421,9 @@ else on_CD = 0 - if(on_CD == 1) + if(!force && on_CD == 1) return - + switch(act) if("bark") message = "[src] [pick(src.speak_emote)]!" diff --git a/code/modules/mob/living/simple_animal/friendly/diona.dm b/code/modules/mob/living/simple_animal/friendly/diona.dm index 07a5fcf0131..355d756288b 100644 --- a/code/modules/mob/living/simple_animal/friendly/diona.dm +++ b/code/modules/mob/living/simple_animal/friendly/diona.dm @@ -60,7 +60,7 @@ /datum/action/innate/diona/merge/Activate() var/mob/living/simple_animal/diona/user = owner user.merge() - + /datum/action/innate/diona/evolve name = "Evolve" icon_icon = 'icons/obj/cloning.dmi' @@ -109,7 +109,7 @@ forceMove(M) else get_scooped(M) - else + else ..() /mob/living/simple_animal/diona/proc/merge() @@ -151,7 +151,7 @@ to_chat(loc, "You feel a pang of loss as [src] splits away from your biomass.") to_chat(src, "You wiggle out of the depths of [loc]'s biomass and plop to the ground.") forceMove(T) - + var/hasMobs = FALSE for(var/atom/A in D.contents) if(istype(A, /mob/) || istype(A, /obj/item/holder)) @@ -163,9 +163,9 @@ return TRUE /mob/living/simple_animal/diona/proc/evolve() - if(stat != CONSCIOUS) + if(stat != CONSCIOUS) return FALSE - + if(donors.len < evolve_donors) to_chat(src, "You need more blood in order to ascend to a new state of consciousness...") return FALSE @@ -176,7 +176,7 @@ if(isdiona(loc) && !split()) //if it's merged with diona, needs to able to split before evolving return FALSE - + visible_message("[src] begins to shift and quiver, and erupts in a shower of shed bark as it splits into a tangle of nearly a dozen new dionaea.","You begin to shift and quiver, feeling your awareness splinter. All at once, we consume our stored nutrients to surge with growth, splitting into a tangle of at least a dozen new dionaea. We have attained our gestalt form.") var/mob/living/carbon/human/diona/adult = new(get_turf(loc)) @@ -202,14 +202,14 @@ qdel(src) return TRUE -/mob/living/simple_animal/diona/proc/steal_blood() - if(stat != CONSCIOUS) +/mob/living/simple_animal/diona/proc/steal_blood() + if(stat != CONSCIOUS) return FALSE - + var/list/choices = list() for(var/mob/living/carbon/human/H in oview(1,src)) if(Adjacent(H) && H.dna && !(NO_BLOOD in H.dna.species.species_traits)) - choices += H + choices += H if(!choices.len) to_chat(src, "No suitable blood donors nearby.") @@ -260,7 +260,7 @@ to_chat(src, "You don't have any hands!") return -/mob/living/simple_animal/diona/emote(act, m_type=1, message = null) +/mob/living/simple_animal/diona/emote(act, m_type = 1, message = null, force) if(stat != CONSCIOUS) return @@ -272,7 +272,7 @@ else on_CD = 0 - if(on_CD == 1) + if(!force && on_CD == 1) return switch(act) //IMPORTANT: Emotes MUST NOT CONFLICT anywhere along the chain. @@ -283,4 +283,4 @@ if("help") to_chat(src, "scream, chirp") - ..(act, m_type, message) \ No newline at end of file + ..() \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index dd0c5b9f72a..85e48c9a4d3 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -299,7 +299,7 @@ var/global/chicken_count = 0 E.pixel_y = rand(-6,6) if(eggsFertile) if(chicken_count < MAX_CHICKENS && prob(25)) - processing_objects.Add(E) + START_PROCESSING(SSobj, E) /obj/item/reagent_containers/food/snacks/egg/var/amount_grown = 0 /obj/item/reagent_containers/food/snacks/egg/process() @@ -308,10 +308,10 @@ var/global/chicken_count = 0 if(amount_grown >= 100) visible_message("[src] hatches with a quiet cracking sound.") new /mob/living/simple_animal/chick(get_turf(src)) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) qdel(src) else - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) /mob/living/simple_animal/pig diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index c84947c7363..ae19106e1af 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -109,7 +109,7 @@ if(client) client.time_died_as_mouse = world.time -/mob/living/simple_animal/mouse/emote(act, m_type=1, message = null) +/mob/living/simple_animal/mouse/emote(act, m_type = 1, message = null, force) if(stat != CONSCIOUS) return @@ -121,7 +121,7 @@ else on_CD = 0 - if(on_CD == 1) + if(!force && on_CD == 1) return switch(act) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 02f15a59709..b4019cff988 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -258,7 +258,7 @@ adjustBruteLoss(20) return -/mob/living/simple_animal/emote(var/act, var/m_type=1, var/message = null) +/mob/living/simple_animal/emote(act, m_type = 1, message = null, force) if(stat) return act = lowertext(act) @@ -269,7 +269,7 @@ if("help") to_chat(src, "scream") - ..(act, m_type, message) + ..() /mob/living/simple_animal/bullet_act(var/obj/item/projectile/Proj) if(!Proj) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index bb7cbde6e91..c2281a1b9a9 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1178,12 +1178,11 @@ var/list/slot_equipment_priority = list( \ if(green) if(!no_text) visible_message("[src] vomits up some green goo!","You vomit up some green goo!") - new /obj/effect/decal/cleanable/vomit/green(location) + location.add_vomit_floor(FALSE, TRUE) else if(!no_text) visible_message("[src] pukes all over [p_them()]self!","You puke all over yourself!") - location.add_vomit_floor(src, 1) - playsound(location, 'sound/effects/splat.ogg', 50, 1) + location.add_vomit_floor(TRUE) /mob/proc/AddSpell(obj/effect/proc_holder/spell/S) mob_spell_list += S @@ -1301,6 +1300,7 @@ var/list/slot_equipment_priority = list( \ .["Show player panel"] = "?_src_=vars;mob_player_panel=[UID()]" .["Give Spell"] = "?_src_=vars;give_spell=[UID()]" + .["Give Martial Art"] = "?_src_=vars;givemartialart=[UID()]" .["Give Disease"] = "?_src_=vars;give_disease=[UID()]" .["Toggle Godmode"] = "?_src_=vars;godmode=[UID()]" .["Toggle Build Mode"] = "?_src_=vars;build_mode=[UID()]" diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index aeb6d8f14bf..93eb035b187 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -98,7 +98,7 @@ return verb -/mob/proc/emote(var/act, var/type, var/message) +/mob/proc/emote(act, type, message, force) if(act == "me") return custom_emote(type, message) @@ -184,7 +184,7 @@ var/current = prefix_locations[i] // ["Common", keypos] // There are a few things that will make us want to ignore all other languages in - namely, HIVEMIND languages. - var/datum/language/L = current[1] + var/datum/language/L = current[1] if(L && L.flags & HIVEMIND) . = new /datum/multilingual_say_piece(L, trim(strip_prefixes(message))) break diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm index e978a2b4798..75aa563dd86 100644 --- a/code/modules/modular_computers/computers/item/computer.dm +++ b/code/modules/modular_computers/computers/item/computer.dm @@ -50,7 +50,7 @@ if(!physical) physical = src ..() - processing_objects += src + START_PROCESSING(SSobj, src) all_components = list() idle_threads = list() @@ -64,7 +64,7 @@ all_components.Remove(CH.device_type) qdel(CH) physical = null - processing_objects -= src + STOP_PROCESSING(SSobj, src) return ..() diff --git a/code/modules/modular_computers/file_system/programs/engineering/alarm.dm b/code/modules/modular_computers/file_system/programs/engineering/alarm.dm index 5fcaf9b03fd..226511e2c09 100644 --- a/code/modules/modular_computers/file_system/programs/engineering/alarm.dm +++ b/code/modules/modular_computers/file_system/programs/engineering/alarm.dm @@ -11,7 +11,7 @@ /datum/computer_file/program/alarm_monitor/New() ..() - alarm_handlers = list(atmosphere_alarm, fire_alarm, power_alarm) + alarm_handlers = list(SSalarms.atmosphere_alarm, SSalarms.fire_alarm, SSalarms.power_alarm) for(var/datum/alarm_handler/AH in alarm_handlers) AH.register(src, /datum/computer_file/program/alarm_monitor/proc/update_icon) diff --git a/code/modules/nano/modules/alarm_monitor.dm b/code/modules/nano/modules/alarm_monitor.dm index e4dd848dac6..dc52841a367 100644 --- a/code/modules/nano/modules/alarm_monitor.dm +++ b/code/modules/nano/modules/alarm_monitor.dm @@ -5,15 +5,15 @@ /datum/nano_module/alarm_monitor/all/New() ..() - alarm_handlers = list(atmosphere_alarm, burglar_alarm, camera_alarm, fire_alarm, motion_alarm, power_alarm) + alarm_handlers = list(SSalarms.atmosphere_alarm, SSalarms.burglar_alarm, SSalarms.camera_alarm, SSalarms.fire_alarm, SSalarms.motion_alarm, SSalarms.power_alarm) /datum/nano_module/alarm_monitor/engineering/New() ..() - alarm_handlers = list(atmosphere_alarm, fire_alarm, power_alarm) + alarm_handlers = list(SSalarms.atmosphere_alarm, SSalarms.fire_alarm, SSalarms.power_alarm) /datum/nano_module/alarm_monitor/security/New() ..() - alarm_handlers = list(burglar_alarm, camera_alarm, motion_alarm) + alarm_handlers = list(SSalarms.burglar_alarm, SSalarms.camera_alarm, SSalarms.motion_alarm) /datum/nano_module/alarm_monitor/proc/register(var/object, var/procName) for(var/datum/alarm_handler/AH in alarm_handlers) diff --git a/code/modules/nano/nanoui.dm b/code/modules/nano/nanoui.dm index 87649f97512..1dbdcc05b92 100644 --- a/code/modules/nano/nanoui.dm +++ b/code/modules/nano/nanoui.dm @@ -506,7 +506,7 @@ nanoui is used to open and update nano browser uis * * @return nothing */ -/datum/nanoui/proc/process(update = 0) +/datum/nanoui/process(update = 0) if(!src_object || !user) close() return diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index d5ca6b0b0f8..c40cb1667ad 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -108,7 +108,7 @@ /obj/item/paper/attack_self(mob/living/user as mob) user.examinate(src) - if(rigged && (holiday_master.holidays && holiday_master.holidays[APRIL_FOOLS])) + if(rigged && (SSholiday.holidays && SSholiday.holidays[APRIL_FOOLS])) if(spam_flag == 0) spam_flag = 1 playsound(loc, 'sound/items/bikehorn.ogg', 50, 1) @@ -621,11 +621,11 @@ /obj/item/paper/evilfax/New() ..() - processing_objects.Add(src) + START_PROCESSING(SSobj, src) /obj/item/paper/evilfax/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) if(mytarget && !used) var/mob/living/carbon/target = mytarget target.ForceContractDisease(new /datum/disease/transformation/corgi(0)) diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm index e8643c97cff..c9169a09757 100644 --- a/code/modules/paperwork/paperbin.dm +++ b/code/modules/paperwork/paperbin.dm @@ -72,7 +72,7 @@ papers.Remove(P) else P = new /obj/item/paper - if(holiday_master.holidays && holiday_master.holidays[APRIL_FOOLS]) + if(SSholiday.holidays && SSholiday.holidays[APRIL_FOOLS]) if(prob(30)) P.info = "HONK HONK HONK HONK HONK HONK HONK
HOOOOOOOOOOOOOOOOOOOOOONK
APRIL FOOLS
" P.rigged = 1 diff --git a/code/modules/pda/mob_hunt_game_app.dm b/code/modules/pda/mob_hunt_game_app.dm index c08e64b7ae3..2bb28ba0264 100644 --- a/code/modules/pda/mob_hunt_game_app.dm +++ b/code/modules/pda/mob_hunt_game_app.dm @@ -21,12 +21,12 @@ /datum/data/pda/app/mob_hunter_game/start() ..() - processing_objects.Add(pda) + START_PROCESSING(SSobj, pda) /datum/data/pda/app/mob_hunter_game/stop() ..() disconnect("Program Terminated") - processing_objects.Remove(pda) + STOP_PROCESSING(SSobj, pda) /datum/data/pda/app/mob_hunter_game/proc/scan_nearby() if(!SSmob_hunt || !connected) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index e8aab46dbbe..c7adce7f533 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -1173,14 +1173,14 @@ environ = autoset(environ, 1) autoflag = 3 if(report_power_alarm) - power_alarm.clearAlarm(loc, src) + SSalarms.power_alarm.clearAlarm(loc, src) else if(cell.charge < 1250 && cell.charge > 750 && longtermpower < 0) // <30%, turn off equipment if(autoflag != 2) equipment = autoset(equipment, 2) lighting = autoset(lighting, 1) environ = autoset(environ, 1) if(report_power_alarm) - power_alarm.triggerAlarm(loc, src) + SSalarms.power_alarm.triggerAlarm(loc, src) autoflag = 2 else if(cell.charge < 750 && cell.charge > 10) // <15%, turn off lighting & equipment if((autoflag > 1 && longtermpower < 0) || (autoflag > 1 && longtermpower >= 0)) @@ -1188,7 +1188,7 @@ lighting = autoset(lighting, 2) environ = autoset(environ, 1) if(report_power_alarm) - power_alarm.triggerAlarm(loc, src) + SSalarms.power_alarm.triggerAlarm(loc, src) autoflag = 1 else if(cell.charge <= 0) // zero charge, turn all off if(autoflag != 0) @@ -1196,7 +1196,7 @@ lighting = autoset(lighting, 0) environ = autoset(environ, 0) if(report_power_alarm) - power_alarm.triggerAlarm(loc, src) + SSalarms.power_alarm.triggerAlarm(loc, src) autoflag = 0 // now trickle-charge the cell @@ -1254,7 +1254,7 @@ lighting = autoset(lighting, 0) environ = autoset(environ, 0) if(report_power_alarm) - power_alarm.triggerAlarm(loc, src) + SSalarms.power_alarm.triggerAlarm(loc, src) autoflag = 0 // update icon & area power if anything changed @@ -1353,6 +1353,11 @@ L.broken(0, 1) stoplag() +/obj/machinery/power/apc/proc/null_charge() + for(var/obj/machinery/light/L in area) + L.broken(0, 1) + stoplag() + /obj/machinery/power/apc/proc/setsubsystem(val) if(cell && cell.charge > 0) return (val==1) ? 0 : val diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index dfe10113f12..4719ff75261 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -21,23 +21,23 @@ /obj/item/stock_parts/cell/New() ..() - processing_objects.Add(src) + START_PROCESSING(SSobj, src) charge = maxcharge if(ratingdesc) desc += " This one has a power rating of [DisplayPower(maxcharge)], and you should not swallow it." update_icon() /obj/item/stock_parts/cell/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() /obj/item/stock_parts/cell/vv_edit_var(var_name, var_value) switch(var_name) if("self_recharge") if(var_value) - processing_objects.Add(src) + START_PROCESSING(SSobj, src) else - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) . = ..() /obj/item/stock_parts/cell/process() diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 632fb7726ee..12d6c8b831a 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -35,7 +35,7 @@ src.energy = starting_energy ..() - processing_objects.Add(src) + START_PROCESSING(SSobj, src) GLOB.poi_list |= src GLOB.singularities += src for(var/obj/machinery/power/singularity_beacon/singubeacon in GLOB.machines) @@ -44,7 +44,7 @@ break /obj/singularity/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) GLOB.poi_list.Remove(src) GLOB.singularities -= src target = null diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 2884fc18b4c..f95f5ce2864 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -13,7 +13,6 @@ icon_state = "smes" density = 1 anchored = 1 - defer_process = 1 var/capacity = 5e6 // maximum charge var/charge = 0 // actual charge diff --git a/code/modules/projectiles/guns/alien.dm b/code/modules/projectiles/guns/alien.dm index 95e1a586469..2a20e7e6c81 100644 --- a/code/modules/projectiles/guns/alien.dm +++ b/code/modules/projectiles/guns/alien.dm @@ -15,10 +15,10 @@ /obj/item/gun/projectile/automatic/spikethrower/New() ..() - processing_objects.Add(src) + START_PROCESSING(SSobj, src) /obj/item/gun/projectile/automatic/spikethrower/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() /obj/item/gun/projectile/automatic/spikethrower/update_icon() diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index 8c9b0cf66f8..b25420b5491 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -32,7 +32,7 @@ power_supply.give(power_supply.maxcharge) update_ammo_types() if(selfcharge) - processing_objects.Add(src) + START_PROCESSING(SSobj, src) update_icon() /obj/item/gun/energy/proc/update_ammo_types() @@ -47,7 +47,7 @@ /obj/item/gun/energy/Destroy() if(selfcharge) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() /obj/item/gun/energy/process() @@ -167,9 +167,9 @@ switch(var_name) if("selfcharge") if(var_value) - processing_objects.Add(src) + START_PROCESSING(SSobj, src) else - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) . = ..() /obj/item/gun/energy/proc/robocharge() diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 623986f5837..fa34753c6a9 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -340,11 +340,11 @@ /obj/item/gun/energy/temperature/New() ..() update_icon() - processing_objects.Add(src) + START_PROCESSING(SSobj, src) /obj/item/gun/energy/temperature/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() /obj/item/gun/energy/temperature/newshot() diff --git a/code/modules/projectiles/guns/magic.dm b/code/modules/projectiles/guns/magic.dm index f6d84635c08..75f94dd83d0 100644 --- a/code/modules/projectiles/guns/magic.dm +++ b/code/modules/projectiles/guns/magic.dm @@ -51,12 +51,12 @@ charges = max_charges chambered = new ammo_type(src) if(can_charge) - processing_objects.Add(src) + START_PROCESSING(SSobj, src) /obj/item/gun/magic/Destroy() if(can_charge) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() diff --git a/code/modules/projectiles/guns/medbeam.dm b/code/modules/projectiles/guns/medbeam.dm index face61e79c3..a1677b764e0 100644 --- a/code/modules/projectiles/guns/medbeam.dm +++ b/code/modules/projectiles/guns/medbeam.dm @@ -17,10 +17,10 @@ /obj/item/gun/medbeam/New() ..() - processing_objects.Add(src) + START_PROCESSING(SSobj, src) /obj/item/gun/medbeam/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() /obj/item/gun/medbeam/handle_suicide() diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index 8d7201d0645..69023a3e6e8 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -16,7 +16,7 @@ var/const/INGEST = 2 /datum/reagents/New(maximum = 100) maximum_volume = maximum if(!(flags & REAGENT_NOREACT)) - processing_objects |= src + START_PROCESSING(SSobj, src) //I dislike having these here but map-objects are initialised before world/New() is called. >_> if(!GLOB.chemical_reagents_list) //Chemical Reagents - Initialises all /datum/reagent into a list indexed by reagent id @@ -333,9 +333,9 @@ var/const/INGEST = 2 od_chems.Add(R.id) return od_chems -/datum/reagents/proc/process() +/datum/reagents/process() if(flags & REAGENT_NOREACT) - processing_objects -= src + STOP_PROCESSING(SSobj, src) return for(var/datum/reagent/R in reagent_list) @@ -346,9 +346,9 @@ var/const/INGEST = 2 // Order is important, process() can remove from processing if // the flag is present flags &= ~(REAGENT_NOREACT) - processing_objects |= src + START_PROCESSING(SSobj, src) else - processing_objects -= src + STOP_PROCESSING(SSobj, src) flags |= REAGENT_NOREACT /* @@ -819,7 +819,7 @@ var/const/INGEST = 2 /datum/reagents/Destroy() . = ..() - processing_objects -= src + STOP_PROCESSING(SSobj, src) QDEL_LIST(reagent_list) reagent_list = null QDEL_LIST(addiction_list) diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index a2ecc811e6a..d4199c3dcec 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -169,7 +169,7 @@ return if(M.mind && M.mind.changeling && M.mind.changeling.regenerating) //no messing with changeling's fake death return - M.visible_message("[M] seizes up and falls limp, [M.p_their()] eyes dead and lifeless...") //so you can't trigger deathgasp emote on people. Edge case, but necessary. + M.emote("deathgasp") M.status_flags |= FAKEDEATH M.update_stat("fakedeath reagent") M.med_hud_set_health() diff --git a/code/modules/reagents/chemistry/reagents/drinks.dm b/code/modules/reagents/chemistry/reagents/drinks.dm index 52ae0f0c93b..b50ed09a27c 100644 --- a/code/modules/reagents/chemistry/reagents/drinks.dm +++ b/code/modules/reagents/chemistry/reagents/drinks.dm @@ -8,7 +8,7 @@ drink_desc = "Vitamins! Yay!" taste_message = "orange juice" -/datum/reagent/consumable/drink/orangejuicde/on_mob_life(mob/living/M) +/datum/reagent/consumable/drink/orangejuice/on_mob_life(mob/living/M) var/update_flags = STATUS_UPDATE_NONE if(prob(30)) update_flags |= M.adjustOxyLoss(-1*REAGENTS_EFFECT_MULTIPLIER, FALSE) @@ -89,7 +89,7 @@ drink_desc = "A healthy mixture of juices, guaranteed to keep you healthy until the next toolboxing takes place." taste_message = "healthy dietary choices" -/datum/reagent/consumable/drink/doctors_delight/on_mob_life(mob/living/M) +/datum/reagent/consumable/drink/doctor_delight/on_mob_life(mob/living/M) var/update_flags = STATUS_UPDATE_NONE if(prob(20)) update_flags |= M.adjustToxLoss(-1, FALSE) diff --git a/code/modules/reagents/chemistry/reagents/food.dm b/code/modules/reagents/chemistry/reagents/food.dm index 9b1aca91f8d..bf2417a192e 100644 --- a/code/modules/reagents/chemistry/reagents/food.dm +++ b/code/modules/reagents/chemistry/reagents/food.dm @@ -905,8 +905,7 @@ /datum/reagent/vomit/reaction_turf(turf/T, volume) if(volume >= 5 && !isspaceturf(T)) - new /obj/effect/decal/cleanable/vomit(T) - playsound(T, 'sound/effects/splat.ogg', 50, 1, -3) + T.add_vomit_floor() /datum/reagent/greenvomit name = "Green vomit" @@ -918,8 +917,7 @@ /datum/reagent/greenvomit/reaction_turf(turf/T, volume) if(volume >= 5 && !isspaceturf(T)) - new /obj/effect/decal/cleanable/vomit/green(T) - playsound(T, 'sound/effects/splat.ogg', 50, 1, -3) + T.add_vomit_floor(FALSE, TRUE) ////Lavaland Flora Reagents//// diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm index 4f92f21aee7..6e15090ea88 100644 --- a/code/modules/reagents/reagent_containers/borghydro.dm +++ b/code/modules/reagents/reagent_containers/borghydro.dm @@ -38,10 +38,10 @@ for(var/R in reagent_ids) add_reagent(R) - processing_objects.Add(src) + START_PROCESSING(SSobj, src) /obj/item/reagent_containers/borghypo/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() /obj/item/reagent_containers/borghypo/process() //Every [recharge_time] seconds, recharge some reagents for the cyborg diff --git a/code/modules/reagents/reagent_containers/iv_bag.dm b/code/modules/reagents/reagent_containers/iv_bag.dm index 709b20f070f..825aa69632b 100644 --- a/code/modules/reagents/reagent_containers/iv_bag.dm +++ b/code/modules/reagents/reagent_containers/iv_bag.dm @@ -42,11 +42,11 @@ /obj/item/reagent_containers/iv_bag/proc/begin_processing(mob/target) injection_target = target - processing_objects.Add(src) + START_PROCESSING(SSobj, src) /obj/item/reagent_containers/iv_bag/proc/end_processing() injection_target = null - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) /obj/item/reagent_containers/iv_bag/process() if(!injection_target) diff --git a/code/modules/response_team/ert.dm b/code/modules/response_team/ert.dm index 8cb29ecf3b4..0bac5824780 100644 --- a/code/modules/response_team/ert.dm +++ b/code/modules/response_team/ert.dm @@ -90,22 +90,13 @@ var/ert_request_answered = FALSE return 0 var/index = 1 - var/ert_spawn_seconds = 120 - spawn(ert_spawn_seconds * 10) // to account for spawn() using deciseconds - var/list/unspawnable_ert = list() - for(var/mob/M in response_team_members) - if(M) - unspawnable_ert |= M - if(unspawnable_ert.len) - message_admins("ERT SPAWN: The following ERT members could not be spawned within [ert_spawn_seconds] seconds:") - for(var/mob/M in unspawnable_ert) - message_admins("- Unspawned ERT: [ADMIN_FULLMONTY(M)]") for(var/mob/M in response_team_members) if(index > emergencyresponseteamspawn.len) index = 1 if(!M || !M.client) continue + log_debug("Spawning as ERT: [M.ckey] ([M])") var/client/C = M.client var/mob/living/new_commando = C.create_response_team(emergencyresponseteamspawn[index]) if(!M || !new_commando) diff --git a/code/modules/spacepods/spacepod.dm b/code/modules/spacepods/spacepod.dm index 715adb668ab..273ea75e832 100644 --- a/code/modules/spacepods/spacepod.dm +++ b/code/modules/spacepods/spacepod.dm @@ -152,7 +152,7 @@ if(src.empcounter > 0) src.empcounter-- else - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) /obj/spacepod/proc/update_icons() if(!pod_overlays) @@ -286,7 +286,7 @@ deal_damage(80 / severity) if(empcounter < (40 / severity)) empcounter = 40 / severity - processing_objects.Add(src) + START_PROCESSING(SSobj, src) switch(severity) if(1) diff --git a/code/modules/station_goals/shield.dm b/code/modules/station_goals/shield.dm index a4444938d96..09ccb3ce36b 100644 --- a/code/modules/station_goals/shield.dm +++ b/code/modules/station_goals/shield.dm @@ -175,7 +175,7 @@ change_meteor_chance(0.5) /obj/machinery/satellite/meteor_shield/proc/change_meteor_chance(mod) - for(var/datum/event_container/container in event_manager.event_containers) + for(var/datum/event_container/container in SSevents.event_containers) for(var/datum/event_meta/M in container.available_events) if(M.event_type == /datum/event/meteor_wave) M.weight *= mod diff --git a/code/modules/surgery/organs/body_egg.dm b/code/modules/surgery/organs/body_egg.dm index 335d4e5b751..a8ba9192ae4 100644 --- a/code/modules/surgery/organs/body_egg.dm +++ b/code/modules/surgery/organs/body_egg.dm @@ -13,13 +13,13 @@ /obj/item/organ/internal/body_egg/insert(var/mob/living/carbon/M, special = 0) ..() owner.status_flags |= XENO_HOST - processing_objects.Add(src) + START_PROCESSING(SSobj, src) owner.med_hud_set_status() spawn(0) AddInfectionImages(owner) /obj/item/organ/internal/body_egg/remove(var/mob/living/carbon/M, special = 0) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) if(owner) owner.status_flags &= ~(XENO_HOST) owner.med_hud_set_status() diff --git a/code/modules/surgery/organs/organ.dm b/code/modules/surgery/organs/organ.dm index a5e85bf572c..67ea1be1d05 100644 --- a/code/modules/surgery/organs/organ.dm +++ b/code/modules/surgery/organs/organ.dm @@ -33,7 +33,7 @@ /obj/item/organ/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) if(owner) remove(owner, 1) QDEL_LIST_ASSOC_VAL(autopsy_data) @@ -84,7 +84,7 @@ /obj/item/organ/proc/necrotize(update_sprite = TRUE) damage = max_damage status |= ORGAN_DEAD - processing_objects -= src + STOP_PROCESSING(SSobj, src) if(dead_icon && !is_robotic()) icon_state = dead_icon if(owner && vital) @@ -189,7 +189,7 @@ else status = 0 if(!owner) - processing_objects |= src + START_PROCESSING(SSobj, src) /obj/item/organ/proc/is_damaged() return damage > 0 @@ -295,7 +295,7 @@ if(affected) affected.internal_organs -= src loc = get_turf(owner) - processing_objects |= src + START_PROCESSING(SSobj, src) if(owner && vital && is_primary_organ()) // I'd do another check for species or whatever so that you couldn't "kill" an IPC by removing a human head from them, but it doesn't matter since they'll come right back from the dead add_attack_logs(user, owner, "Removed vital organ ([src])", !!user ? ATKLOG_FEW : ATKLOG_ALL) diff --git a/code/modules/surgery/organs/organ_external.dm b/code/modules/surgery/organs/organ_external.dm index f8534ffe078..4462e4ea470 100644 --- a/code/modules/surgery/organs/organ_external.dm +++ b/code/modules/surgery/organs/organ_external.dm @@ -286,7 +286,7 @@ This function completely restores a damaged organ to perfect condition. owner.updatehealth("limb rejuvenate") update_icon() if(!owner) - processing_objects |= src + START_PROCESSING(SSobj, src) /**************************************************** PROCESSING & UPDATING diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 063a4d6880a..2c42f421774 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -193,10 +193,10 @@ /obj/item/organ/internal/shadowtumor/New() ..() - processing_objects.Add(src) + START_PROCESSING(SSobj, src) /obj/item/organ/internal/shadowtumor/Destroy() - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return ..() /obj/item/organ/internal/shadowtumor/process() diff --git a/code/modules/telesci/gps.dm b/code/modules/telesci/gps.dm index 3672070e8f0..ca22fb5cb0e 100644 --- a/code/modules/telesci/gps.dm +++ b/code/modules/telesci/gps.dm @@ -137,10 +137,10 @@ var/list/GPS_list = list() for marking the area around the transition edges." var/list/turf/tagged -/obj/item/gps/visible_debug/New() +/obj/item/gps/visible_debug/Initialize(mapload) . = ..() tagged = list() - GLOB.fast_processing.Add(src) + START_PROCESSING(SSfastprocess, src) /obj/item/gps/visible_debug/process() var/turf/T = get_turf(src) @@ -161,5 +161,5 @@ var/list/GPS_list = list() if(tagged) clear() tagged = null - GLOB.fast_processing.Remove(src) + STOP_PROCESSING(SSfastprocess, src) . = ..() diff --git a/html/changelogs/AutoChangeLog-pr-11278.yml b/html/changelogs/AutoChangeLog-pr-11278.yml new file mode 100644 index 00000000000..24f9c3ab4cc --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11278.yml @@ -0,0 +1,4 @@ +author: "Arkatos" +delete-after: True +changes: + - rscadd: "Added new Wizard Spell - Summon Ghosts! This nefarious spell will make all ghosts visible to the living. Be careful though, as while they cannot harm you in any way, they might prove a bit.. annoying. Costs 0 points in the Wizard's spellbook." diff --git a/html/changelogs/AutoChangeLog-pr-11283.yml b/html/changelogs/AutoChangeLog-pr-11283.yml new file mode 100644 index 00000000000..9056578d68b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11283.yml @@ -0,0 +1,4 @@ +author: "Fox McCloud" +delete-after: True +changes: + - bugfix: "Fixes a few potential exploits with forcing chem, dust, and explosive implants activating with the deathgasp emote, prior to death" diff --git a/html/changelogs/AutoChangeLog-pr-11284.yml b/html/changelogs/AutoChangeLog-pr-11284.yml new file mode 100644 index 00000000000..433a7fb3f68 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11284.yml @@ -0,0 +1,6 @@ +author: "Arkatos" +delete-after: True +changes: + - rscadd: "Added new Shadowling Ability - Null Charge! This new ability allows Shadowling to completely drain an APC of it's power after a moderate delay. Shadowling must not be interrupted, or the whole process will fail." + - imageadd: "Added custom icon for the Null Charge ability" + - rscdel: "Shadowling Drain Life ability removed" diff --git a/html/changelogs/AutoChangeLog-pr-11292.yml b/html/changelogs/AutoChangeLog-pr-11292.yml new file mode 100644 index 00000000000..814c8530858 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11292.yml @@ -0,0 +1,5 @@ +author: "farie82" +delete-after: True +changes: + - tweak: "Makes puke less lag inducing" + - tweak: "Puke can now appear on all kinds of turfs except spess" diff --git a/html/changelogs/AutoChangeLog-pr-11300.yml b/html/changelogs/AutoChangeLog-pr-11300.yml new file mode 100644 index 00000000000..b949b7f91f5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11300.yml @@ -0,0 +1,5 @@ +author: "Arkatos" +delete-after: True +changes: + - rscadd: "Added Observer HUD buttons for Jump to Mob, Orbit, Re-enter corpse, and Teleport" + - imageadd: "Added custom icons for Observer HUD buttons" diff --git a/html/changelogs/AutoChangeLog-pr-11328.yml b/html/changelogs/AutoChangeLog-pr-11328.yml new file mode 100644 index 00000000000..e91103f07cd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11328.yml @@ -0,0 +1,5 @@ +author: "farie82" +delete-after: True +changes: + - bugfix: "Admins can now use all mhelp related things again" + - spellcheck: "Fixed the toggle mentor ticket messages text" diff --git a/html/changelogs/AutoChangeLog-pr-11329.yml b/html/changelogs/AutoChangeLog-pr-11329.yml new file mode 100644 index 00000000000..e25e56b8828 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11329.yml @@ -0,0 +1,4 @@ +author: "farie82" +delete-after: True +changes: + - bugfix: "Vampiric glaring is logged now" diff --git a/html/changelogs/AutoChangeLog-pr-11332.yml b/html/changelogs/AutoChangeLog-pr-11332.yml new file mode 100644 index 00000000000..f76e2e2b48b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11332.yml @@ -0,0 +1,4 @@ +author: "Arkatos" +delete-after: True +changes: + - rscadd: "Added an option to grant Martial Arts via administrative Var menu" diff --git a/html/changelogs/AutoChangeLog-pr-11355.yml b/html/changelogs/AutoChangeLog-pr-11355.yml new file mode 100644 index 00000000000..934e85808ba --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11355.yml @@ -0,0 +1,4 @@ +author: "Kyep" +delete-after: True +changes: + - bugfix: "Fixed an error message being inappropriately generated for admins when someone signs up as a pAI." diff --git a/html/changelogs/AutoChangeLog-pr-11360.yml b/html/changelogs/AutoChangeLog-pr-11360.yml new file mode 100644 index 00000000000..3fb01b5b8f9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11360.yml @@ -0,0 +1,6 @@ +author: "AffectedArc07" +delete-after: True +changes: + - rscadd: "SSevents" + - rscadd: "SSholiday" + - tweak: "We no longer check if its Christmas every tick. Dont ask." diff --git a/html/changelogs/AutoChangeLog-pr-11361.yml b/html/changelogs/AutoChangeLog-pr-11361.yml new file mode 100644 index 00000000000..7207d6d5daf --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11361.yml @@ -0,0 +1,4 @@ +author: "AffectedArc07" +delete-after: True +changes: + - rscadd: "SSalarms" diff --git a/html/changelogs/AutoChangeLog-pr-11362.yml b/html/changelogs/AutoChangeLog-pr-11362.yml new file mode 100644 index 00000000000..72282104dc1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11362.yml @@ -0,0 +1,4 @@ +author: "uc_guy" +delete-after: True +changes: + - bugfix: "Players in the lobby no longer see cult speak." diff --git a/html/changelogs/AutoChangeLog-pr-11364.yml b/html/changelogs/AutoChangeLog-pr-11364.yml new file mode 100644 index 00000000000..b331b4d009d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11364.yml @@ -0,0 +1,4 @@ +author: "Fox McCloud" +delete-after: True +changes: + - tweak: "object and fast processing are now proper subsystems" diff --git a/html/changelogs/AutoChangeLog-pr-11367.yml b/html/changelogs/AutoChangeLog-pr-11367.yml new file mode 100644 index 00000000000..5d90a0b3f30 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11367.yml @@ -0,0 +1,4 @@ +author: "farie82" +delete-after: True +changes: + - bugfix: "Doctor delight and orange juice now heal again" diff --git a/icons/mob/actions/actions.dmi b/icons/mob/actions/actions.dmi index d21323c80b1..b4d8a34a6e0 100644 Binary files a/icons/mob/actions/actions.dmi and b/icons/mob/actions/actions.dmi differ diff --git a/icons/mob/screen_ghost.dmi b/icons/mob/screen_ghost.dmi new file mode 100644 index 00000000000..6519d00aa97 Binary files /dev/null and b/icons/mob/screen_ghost.dmi differ diff --git a/paradise.dme b/paradise.dme index e4e291875b0..64b874db891 100644 --- a/paradise.dme +++ b/paradise.dme @@ -138,6 +138,7 @@ #include "code\_onclick\hud\constructs.dm" #include "code\_onclick\hud\devil.dm" #include "code\_onclick\hud\fullscreen.dm" +#include "code\_onclick\hud\ghost.dm" #include "code\_onclick\hud\guardian.dm" #include "code\_onclick\hud\hud.dm" #include "code\_onclick\hud\human.dm" @@ -198,20 +199,19 @@ #include "code\controllers\master.dm" #include "code\controllers\subsystem.dm" #include "code\controllers\verbs.dm" -#include "code\controllers\Processes\alarm.dm" -#include "code\controllers\Processes\event.dm" -#include "code\controllers\Processes\fast_process.dm" #include "code\controllers\Processes\lighting.dm" #include "code\controllers\Processes\npcai.dm" -#include "code\controllers\Processes\obj.dm" #include "code\controllers\Processes\ticker.dm" #include "code\controllers\ProcessScheduler\core\process.dm" #include "code\controllers\ProcessScheduler\core\processScheduler.dm" #include "code\controllers\subsystem\air.dm" +#include "code\controllers\subsystem\alarm.dm" #include "code\controllers\subsystem\assets.dm" #include "code\controllers\subsystem\atoms.dm" +#include "code\controllers\subsystem\events.dm" #include "code\controllers\subsystem\fires.dm" #include "code\controllers\subsystem\garbage.dm" +#include "code\controllers\subsystem\holiday.dm" #include "code\controllers\subsystem\icon_smooth.dm" #include "code\controllers\subsystem\input.dm" #include "code\controllers\subsystem\jobs.dm" @@ -232,6 +232,8 @@ #include "code\controllers\subsystem\timer.dm" #include "code\controllers\subsystem\vote.dm" #include "code\controllers\subsystem\weather.dm" +#include "code\controllers\subsystem\processing\fastprocess.dm" +#include "code\controllers\subsystem\processing\obj.dm" #include "code\controllers\subsystem\processing\processing.dm" #include "code\controllers\subsystem\tickets\mentor_tickets.dm" #include "code\controllers\subsystem\tickets\tickets.dm" @@ -1420,7 +1422,7 @@ #include "code\modules\events\electrical_storm.dm" #include "code\modules\events\event.dm" #include "code\modules\events\event_container.dm" -#include "code\modules\events\event_manager.dm" +#include "code\modules\events\event_procs.dm" #include "code\modules\events\false_alarm.dm" #include "code\modules\events\floorcluwne.dm" #include "code\modules\events\grid_check.dm" @@ -1452,6 +1454,7 @@ #include "code\modules\events\vent_clog.dm" #include "code\modules\events\wallrot.dm" #include "code\modules\events\wormholes.dm" +#include "code\modules\events\wizard\ghost.dm" #include "code\modules\examine\examine.dm" #include "code\modules\examine\descriptions\atmospherics.dm" #include "code\modules\examine\descriptions\engineering.dm" @@ -1817,7 +1820,6 @@ #include "code\modules\mob\living\silicon\decoy\decoy.dm" #include "code\modules\mob\living\silicon\decoy\life.dm" #include "code\modules\mob\living\silicon\pai\death.dm" -#include "code\modules\mob\living\silicon\pai\emote.dm" #include "code\modules\mob\living\silicon\pai\life.dm" #include "code\modules\mob\living\silicon\pai\pai.dm" #include "code\modules\mob\living\silicon\pai\personality.dm"