diff --git a/code/__defines/dcs/signals_ch/signals_subsystem.dm b/code/__defines/dcs/signals_ch/signals_subsystem.dm new file mode 100644 index 0000000000..26daf58e1a --- /dev/null +++ b/code/__defines/dcs/signals_ch/signals_subsystem.dm @@ -0,0 +1,7 @@ +// Subsystem signals. Format: +// When the signal is called: (signal arguments) +// All signals send the source datum of the signal as the first argument + +///Subsystem signals +///From base of datum/controller/subsystem/Initialize +#define COMSIG_SUBSYSTEM_POST_INITIALIZE "subsystem_post_initialize" diff --git a/code/__defines/span_vr.dm b/code/__defines/span_vr.dm index ff861348c7..bfe82ec319 100644 --- a/code/__defines/span_vr.dm +++ b/code/__defines/span_vr.dm @@ -94,6 +94,7 @@ #define span_orange(str) ("" + str + "") #define span_blue(str) ("" + str + "") #define span_boldannounce(str) ("" + str + "") // CHOMPEdit - Boldannounce +#define span_boldwarning(str) ("" + str + "") // CHOMPEdit - Boldwarning #define span_green(str) ("" + str + "") #define span_purple(str) ("" + str + "") #define span_yellow(str) ("" + str + "") diff --git a/code/__defines/subsystems.dm b/code/__defines/subsystems.dm index 98af700d1e..aa5f29cd90 100644 --- a/code/__defines/subsystems.dm +++ b/code/__defines/subsystems.dm @@ -181,3 +181,6 @@ var/global/list/runlevel_flags = list(RUNLEVEL_LOBBY, RUNLEVEL_SETUP, RUNLEVEL_G * * timer_subsystem the subsystem to insert this timer into */ #define addtimer(args...) _addtimer(args, file = __FILE__, line = __LINE__) + +/// The timer key used to know how long subsystem initialization takes // CHOMPEdit +#define SS_INIT_TIMER_KEY "ss_init" // CHOMPEdit diff --git a/code/controllers/master.dm b/code/controllers/master.dm index 8698e7265a..dd52c1a3cc 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -59,9 +59,11 @@ GLOBAL_REAL(Master, /datum/controller/master) = new var/current_runlevel //!for scheduling different subsystems for different stages of the round + // CHOMPEdit Start /// During initialization, will be the instanced subsytem that is currently initializing. /// Outside of initialization, returns null. var/current_initializing_subsystem = null + // CHOMPEdit End var/static/restart_clear = 0 var/static/restart_timeout = 0 @@ -207,8 +209,10 @@ GLOBAL_REAL(Master, /datum/controller/master) = new for (var/datum/controller/subsystem/SS in subsystems) if (SS.flags & SS_NO_INIT) continue - SS.Initialize(REALTIMEOFDAY) + //SS.Initialize(REALTIMEOFDAY) // CHOMPEdit + init_subsystem(SS) // CHOMPEdit CHECK_TICK + current_initializing_subsystem = null // CHOMPEdit current_ticklimit = TICK_LIMIT_RUNNING var/time = (REALTIMEOFDAY - start_timeofday) / 10 @@ -239,6 +243,82 @@ GLOBAL_REAL(Master, /datum/controller/master) = new // Loop. Master.StartProcessing(0) +// CHOMPEdit Start +/** + * Initialize a given subsystem and handle the results. + * + * Arguments: + * * subsystem - the subsystem to initialize. + */ +/datum/controller/master/proc/init_subsystem(datum/controller/subsystem/subsystem) + var/static/list/valid_results = list( + SS_INIT_FAILURE, + SS_INIT_NONE, + SS_INIT_SUCCESS, + SS_INIT_NO_NEED, + ) + + if (subsystem.flags & SS_NO_INIT || subsystem.subsystem_initialized) //Don't init SSs with the corresponding flag or if they already are initialized + return + + current_initializing_subsystem = subsystem + rustg_time_reset(SS_INIT_TIMER_KEY) + + var/result = subsystem.Initialize() + + // Capture end time + var/time = rustg_time_milliseconds(SS_INIT_TIMER_KEY) + var/seconds = round(time / 1000, 0.01) + + // Always update the blackbox tally regardless. + // SSblackbox.record_feedback("tally", "subsystem_initialize", time, subsystem.name) + feedback_set_details("subsystem_initialize", "[time] [subsystem.name]") + + // Gave invalid return value. + if(result && !(result in valid_results)) + warning("[subsystem.name] subsystem initialized, returning invalid result [result]. This is a bug.") + + // just returned ..() or didn't implement Initialize() at all + if(result == SS_INIT_NONE) + warning("[subsystem.name] subsystem does not implement Initialize() or it returns ..(). If the former is true, the SS_NO_INIT flag should be set for this subsystem.") + + if(result != SS_INIT_FAILURE) + // Some form of success, implicit failure, or the SS in unused. + subsystem.subsystem_initialized = TRUE + + SEND_SIGNAL(subsystem, COMSIG_SUBSYSTEM_POST_INITIALIZE) + else + // The subsystem officially reports that it failed to init and wishes to be treated as such. + subsystem.subsystem_initialized = FALSE + subsystem.can_fire = FALSE + + // The rest of this proc is printing the world log and chat message. + var/message_prefix + + // If true, print the chat message with boldwarning text. + var/chat_warning = FALSE + + switch(result) + if(SS_INIT_FAILURE) + message_prefix = "Failed to initialize [subsystem.name] subsystem after" + chat_warning = TRUE + if(SS_INIT_SUCCESS) + message_prefix = "Initialized [subsystem.name] subsystem within" + if(SS_INIT_NO_NEED) + // This SS is disabled or is otherwise shy. + return + else + // SS_INIT_NONE or an invalid value. + message_prefix = "Initialized [subsystem.name] subsystem with errors within" + chat_warning = TRUE + + var/message = "[message_prefix] [seconds] second[seconds == 1 ? "" : "s"]!" + var/chat_message = chat_warning ? span_boldwarning(message) : span_boldannounce(message) + + to_chat(world, chat_message) + log_world(message) +// CHOMPEdit End + /datum/controller/master/proc/SetRunLevel(new_runlevel) var/old_runlevel = isnull(current_runlevel) ? "NULL" : runlevel_flags[current_runlevel] testing("MC: Runlevel changed from [old_runlevel] to [new_runlevel]") diff --git a/code/controllers/subsystem.dm b/code/controllers/subsystem.dm index 6ce2bb00eb..74f24bc801 100644 --- a/code/controllers/subsystem.dm +++ b/code/controllers/subsystem.dm @@ -224,15 +224,13 @@ if(SS_SLEEPING) state = SS_PAUSING - -//used to initialize the subsystem AFTER the map has loaded -/datum/controller/subsystem/Initialize(start_timeofday) - subsystem_initialized = TRUE - var/time = (REALTIMEOFDAY - start_timeofday) / 10 - var/msg = "Initialized [name] subsystem within [time] second[time == 1 ? "" : "s"]!" - to_chat(world, "[msg]") - log_world(msg) - return time +// CHOMPEdit Start +/** + * Used to initialize the subsystem. This is expected to be overriden by subtypes. + */ +/datum/controller/subsystem/Initialize() + return SS_INIT_NONE +// CHOMPEdit End //hook for printing stats to the "MC" statuspanel for admins to see performance and related stats etc. //CHOMPEdit Begin diff --git a/code/controllers/subsystems/air.dm b/code/controllers/subsystems/air.dm index 3b3bece7bf..28254d0f8c 100644 --- a/code/controllers/subsystems/air.dm +++ b/code/controllers/subsystems/air.dm @@ -33,7 +33,8 @@ SUBSYSTEM_DEF(air) /datum/controller/subsystem/air/PreInit() air_master = src -/datum/controller/subsystem/air/Initialize(timeofday) +/datum/controller/subsystem/air/Initialize() // CHOMPEdit + var/start_timeofday = REALTIMEOFDAY // CHOMPEdit report_progress("Processing Geometry...") current_cycle = 0 @@ -43,7 +44,8 @@ SUBSYSTEM_DEF(air) S.update_air_properties() CHECK_TICK - admin_notice({"Geometry initialized in [round(0.1*(REALTIMEOFDAY-timeofday),0.1)] seconds. + // CHOMPEdit + admin_notice({"Geometry initialized in [round(0.1*(REALTIMEOFDAY-start_timeofday),0.1)](?) seconds. Total Simulated Turfs: [simulated_turf_count] Total Zones: [zones.len] @@ -98,7 +100,7 @@ Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_coun log_debug("Active Edges on ZAS Startup\n" + edge_log.Join("\n")) startup_active_edge_log = edge_log.Copy() - ..() + return SS_INIT_SUCCESS // CHOMPEdit /datum/controller/subsystem/air/fire(resumed = 0) var/timer diff --git a/code/controllers/subsystems/alarm.dm b/code/controllers/subsystems/alarm.dm index ebfbabc906..bd1394749c 100644 --- a/code/controllers/subsystems/alarm.dm +++ b/code/controllers/subsystems/alarm.dm @@ -18,7 +18,7 @@ SUBSYSTEM_DEF(alarm) /datum/controller/subsystem/alarm/Initialize() all_handlers = list(atmosphere_alarm, camera_alarm, fire_alarm, motion_alarm, power_alarm) - . = ..() + return SS_INIT_SUCCESS // CHOMPEdit /datum/controller/subsystem/alarm/fire(resumed = FALSE) if(!resumed) diff --git a/code/controllers/subsystems/atoms.dm b/code/controllers/subsystems/atoms.dm index a62c5265c5..8a3cef984d 100644 --- a/code/controllers/subsystems/atoms.dm +++ b/code/controllers/subsystems/atoms.dm @@ -17,13 +17,13 @@ SUBSYSTEM_DEF(atoms) var/list/BadInitializeCalls = list() -/datum/controller/subsystem/atoms/Initialize(timeofday) +/datum/controller/subsystem/atoms/Initialize() // CHOMPEdit setupgenetics() //to set the mutations' place in structural enzymes, so initializers know where to put mutations. initialized = INITIALIZATION_INNEW_MAPLOAD to_world_log("Initializing objects") admin_notice("Initializing objects", R_DEBUG) InitializeAtoms() - return ..() + return SS_INIT_SUCCESS // CHOMPEdit /datum/controller/subsystem/atoms/proc/InitializeAtoms(list/atoms) if(initialized == INITIALIZATION_INSSATOMS) diff --git a/code/controllers/subsystems/character_setup.dm b/code/controllers/subsystems/character_setup.dm index fdad93fbbb..73c1bc613e 100644 --- a/code/controllers/subsystems/character_setup.dm +++ b/code/controllers/subsystems/character_setup.dm @@ -2,7 +2,7 @@ SUBSYSTEM_DEF(character_setup) name = "Character Setup" init_order = INIT_ORDER_DEFAULT priority = FIRE_PRIORITY_CHARSETUP - flags = SS_BACKGROUND + flags = SS_BACKGROUND | SS_NO_INIT // CHOMPEdit wait = 1 SECOND runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT diff --git a/code/controllers/subsystems/chemistry.dm b/code/controllers/subsystems/chemistry.dm index 79a8e8a7f5..b49ac839fd 100644 --- a/code/controllers/subsystems/chemistry.dm +++ b/code/controllers/subsystems/chemistry.dm @@ -18,7 +18,7 @@ SUBSYSTEM_DEF(chemistry) /datum/controller/subsystem/chemistry/Initialize() initialize_chemical_reagents() initialize_chemical_reactions() - ..() + return SS_INIT_SUCCESS // CHOMPEdit //CHOMPEdit Begin /datum/controller/subsystem/chemistry/stat_entry(msg) diff --git a/code/controllers/subsystems/circuits.dm b/code/controllers/subsystems/circuits.dm index f417ce3055..e2add442ef 100644 --- a/code/controllers/subsystems/circuits.dm +++ b/code/controllers/subsystems/circuits.dm @@ -17,9 +17,9 @@ SUBSYSTEM_DEF(circuit) /datum/controller/subsystem/circuit/Recover() flags |= SS_NO_INIT // Make extra sure we don't initialize twice. -/datum/controller/subsystem/circuit/Initialize(timeofday) +/datum/controller/subsystem/circuit/Initialize() // CHOMPEdit circuits_init() - return ..() + return SS_INIT_SUCCESS // CHOMPEdit /datum/controller/subsystem/circuit/proc/circuits_init() //Cached lists for free performance diff --git a/code/controllers/subsystems/dbcore.dm b/code/controllers/subsystems/dbcore.dm index 107e991648..c3a4ee8973 100644 --- a/code/controllers/subsystems/dbcore.dm +++ b/code/controllers/subsystems/dbcore.dm @@ -41,7 +41,7 @@ SUBSYSTEM_DEF(dbcore) //var/db_daemon_started = FALSE /datum/controller/subsystem/dbcore/Initialize() - return ..() + return SS_INIT_SUCCESS /datum/controller/subsystem/dbcore/stat_entry(msg) msg = "P:[length(all_queries)]|Active:[length(queries_active)]|Standby:[length(queries_standby)]" diff --git a/code/controllers/subsystems/events.dm b/code/controllers/subsystems/events.dm index d75df4f90e..5837e16d74 100644 --- a/code/controllers/subsystems/events.dm +++ b/code/controllers/subsystems/events.dm @@ -21,7 +21,7 @@ SUBSYSTEM_DEF(events) ) if(global.using_map.use_overmap) GLOB.overmap_event_handler.create_events(global.using_map.overmap_z, global.using_map.overmap_size, global.using_map.overmap_event_areas) - return ..() + return SS_INIT_SUCCESS // CHOMPEdit /datum/controller/subsystem/events/fire(resumed) if (!resumed) diff --git a/code/controllers/subsystems/game_master.dm b/code/controllers/subsystems/game_master.dm index 6b2e8c7bf0..d50f5ffcdd 100644 --- a/code/controllers/subsystems/game_master.dm +++ b/code/controllers/subsystems/game_master.dm @@ -36,7 +36,7 @@ SUBSYSTEM_DEF(game_master) if(config && !config.enable_game_master) can_fire = FALSE - return ..() + return SS_INIT_SUCCESS // CHOMPEdit /datum/controller/subsystem/game_master/fire(resumed) adjust_staleness(1) diff --git a/code/controllers/subsystems/holomaps.dm b/code/controllers/subsystems/holomaps.dm index fd72842a76..79571d8311 100644 --- a/code/controllers/subsystems/holomaps.dm +++ b/code/controllers/subsystems/holomaps.dm @@ -14,9 +14,9 @@ SUBSYSTEM_DEF(holomaps) /datum/controller/subsystem/holomaps/Recover() flags |= SS_NO_INIT // Make extra sure we don't initialize twice. -/datum/controller/subsystem/holomaps/Initialize(timeofday) +/datum/controller/subsystem/holomaps/Initialize() // CHOMPEdit generateHoloMinimaps() - . = ..() + return SS_INIT_SUCCESS // CHOMPEdit /datum/controller/subsystem/holomaps/stat_entry(msg) if (!Debug2) diff --git a/code/controllers/subsystems/input.dm b/code/controllers/subsystems/input.dm index 62fe0184ff..88f010f9b0 100644 --- a/code/controllers/subsystems/input.dm +++ b/code/controllers/subsystems/input.dm @@ -2,7 +2,7 @@ SUBSYSTEM_DEF(input) name = "Input" wait = 1 // SS_TICKER means this runs every tick init_order = INIT_ORDER_INPUT - flags = SS_TICKER + flags = SS_TICKER | SS_NO_INIT // CHOMPEdit priority = FIRE_PRIORITY_INPUT runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY diff --git a/code/controllers/subsystems/job.dm b/code/controllers/subsystems/job.dm index c137582c7c..42956bee8f 100644 --- a/code/controllers/subsystems/job.dm +++ b/code/controllers/subsystems/job.dm @@ -11,12 +11,12 @@ SUBSYSTEM_DEF(job) var/debug_messages = FALSE -/datum/controller/subsystem/job/Initialize(timeofday) +/datum/controller/subsystem/job/Initialize() // CHOMPEdit if(!department_datums.len) setup_departments() if(!occupations.len) setup_occupations() - return ..() + return SS_INIT_SUCCESS // CHOMPEdit /datum/controller/subsystem/job/proc/setup_occupations(faction = "Station") occupations = list() diff --git a/code/controllers/subsystems/lighting.dm b/code/controllers/subsystems/lighting.dm index 522bab602b..883fb4d324 100644 --- a/code/controllers/subsystems/lighting.dm +++ b/code/controllers/subsystems/lighting.dm @@ -12,7 +12,7 @@ SUBSYSTEM_DEF(lighting) return ..() -/datum/controller/subsystem/lighting/Initialize(timeofday) +/datum/controller/subsystem/lighting/Initialize() // CHOMPEdit if(!subsystem_initialized) if (config.starlight) for(var/area/A in world) @@ -24,7 +24,7 @@ SUBSYSTEM_DEF(lighting) fire(FALSE, TRUE) - return ..() + return SS_INIT_SUCCESS // CHOMPEdit /datum/controller/subsystem/lighting/fire(resumed, init_tick_checks) MC_SPLIT_TICK_INIT(3) diff --git a/code/controllers/subsystems/machines.dm b/code/controllers/subsystems/machines.dm index fb189bfa62..e6fb543902 100644 --- a/code/controllers/subsystems/machines.dm +++ b/code/controllers/subsystems/machines.dm @@ -30,12 +30,12 @@ SUBSYSTEM_DEF(machines) var/list/powernets = list() var/list/powerobjs = list() -/datum/controller/subsystem/machines/Initialize(timeofday) +/datum/controller/subsystem/machines/Initialize() // CHOMPEdit makepowernets() admin_notice("Initializing atmos machinery.", R_DEBUG) setup_atmos_machinery(all_machines) fire() - ..() + return SS_INIT_SUCCESS // CHOMPEdit /datum/controller/subsystem/machines/fire(resumed = 0) var/timer = TICK_USAGE diff --git a/code/controllers/subsystems/mail_ch.dm b/code/controllers/subsystems/mail_ch.dm index 59dc5b3bb8..4ead7fe114 100644 --- a/code/controllers/subsystems/mail_ch.dm +++ b/code/controllers/subsystems/mail_ch.dm @@ -3,7 +3,7 @@ SUBSYSTEM_DEF(mail) wait = 60 SECONDS priority = FIRE_PRIORITY_SUPPLY - flags = SS_NO_TICK_CHECK + flags = SS_NO_TICK_CHECK | SS_NO_INIT var/mail_waiting = 0 // Pending mail var/mail_per_process = 0.45 // Mail to be generated diff --git a/code/controllers/subsystems/mapping.dm b/code/controllers/subsystems/mapping.dm index c9fe2a128c..51d68d4e27 100644 --- a/code/controllers/subsystems/mapping.dm +++ b/code/controllers/subsystems/mapping.dm @@ -13,7 +13,7 @@ SUBSYSTEM_DEF(mapping) flags |= SS_NO_INIT // Make extra sure we don't initialize twice. shelter_templates = SSmapping.shelter_templates -/datum/controller/subsystem/mapping/Initialize(timeofday) +/datum/controller/subsystem/mapping/Initialize() // CHOMPEdit if(subsystem_initialized) return world.max_z_changed() // This is to set up the player z-level list, maxz hasn't actually changed (probably) @@ -31,7 +31,7 @@ SUBSYSTEM_DEF(mapping) // Lateload Code related to Expedition areas. if(using_map) // VOREStation Edit: Re-enable this. loadLateMaps() - ..() + return SS_INIT_SUCCESS // CHOMPEdit /datum/controller/subsystem/mapping/proc/load_map_templates() for(var/datum/map_template/template as anything in subtypesof(/datum/map_template)) diff --git a/code/controllers/subsystems/media_tracks.dm b/code/controllers/subsystems/media_tracks.dm index 0fd045d354..c4ff746642 100644 --- a/code/controllers/subsystems/media_tracks.dm +++ b/code/controllers/subsystems/media_tracks.dm @@ -13,10 +13,10 @@ SUBSYSTEM_DEF(media_tracks) var/list/casino_tracks = list() /// CHOMPstation edit end -/datum/controller/subsystem/media_tracks/Initialize(timeofday) +/datum/controller/subsystem/media_tracks/Initialize() // CHOMPEdit load_tracks() sort_tracks() - return ..() + return SS_INIT_SUCCESS // CHOMPEdit /datum/controller/subsystem/media_tracks/proc/load_tracks() for(var/filename in config.jukebox_track_files) diff --git a/code/controllers/subsystems/nightshift.dm b/code/controllers/subsystems/nightshift.dm index 91b1c6bb35..23faa46a5a 100644 --- a/code/controllers/subsystems/nightshift.dm +++ b/code/controllers/subsystems/nightshift.dm @@ -17,7 +17,7 @@ SUBSYSTEM_DEF(nightshift) if(config.randomize_shift_time) GLOB.gametime_offset = rand(0, 23) HOURS */ - return ..() + return SS_INIT_SUCCESS // CHOMPEdit /datum/controller/subsystem/nightshift/fire(resumed = FALSE) if(round_duration_in_ds < nightshift_first_check) diff --git a/code/controllers/subsystems/overlays.dm b/code/controllers/subsystems/overlays.dm index cc17831371..bbd9a506ac 100644 --- a/code/controllers/subsystems/overlays.dm +++ b/code/controllers/subsystems/overlays.dm @@ -27,15 +27,15 @@ SUBSYSTEM_DEF(overlays) atom.flags &= ~OVERLAY_QUEUED CHECK_TICK - -/datum/controller/subsystem/overlays/Initialize(timeofday) - fire(FALSE, TRUE) - ..() //CHOMPEdit Begin +/datum/controller/subsystem/overlays/Initialize() + fire(FALSE, TRUE) + return SS_INIT_SUCCESS + /datum/controller/subsystem/overlays/stat_entry(msg) msg = "Queued Atoms: [queue.len], Cache Size: [cache_size]" return ..() -//CHOMPEdit End + /datum/controller/subsystem/overlays/fire(resumed, no_mc_tick) var/count = 1 for (var/atom/atom as anything in queue) diff --git a/code/controllers/subsystems/overmap_renamer_vr.dm b/code/controllers/subsystems/overmap_renamer_vr.dm index 5b2cd75da4..9494946684 100644 --- a/code/controllers/subsystems/overmap_renamer_vr.dm +++ b/code/controllers/subsystems/overmap_renamer_vr.dm @@ -8,12 +8,9 @@ SUBSYSTEM_DEF(overmap_renamer) runlevels = RUNLEVEL_INIT flags = SS_NO_FIRE - - -/datum/controller/subsystem/overmap_renamer/Initialize(timeofday) +/datum/controller/subsystem/overmap_renamer/Initialize() // CHOMPEdit update_names() - - ..() + return SS_INIT_SUCCESS // CHOMPEdit /*Shouldn't be a switch statement. We want ALL of the if(map_template.name in visitable_z_leves_name_list) to fire if we end up with multiple renamable lateload overmap objects.*/ diff --git a/code/controllers/subsystems/persistence.dm b/code/controllers/subsystems/persistence.dm index e8df77bd35..d8cc0012e3 100644 --- a/code/controllers/subsystems/persistence.dm +++ b/code/controllers/subsystems/persistence.dm @@ -4,19 +4,21 @@ SUBSYSTEM_DEF(persistence) flags = SS_NO_FIRE var/list/tracking_values = list() var/list/persistence_datums = list() - + /// Places our subsystem can spawn paintings (helps with art spawning differently across maps) var/list/obj/structure/sign/painting/painting_frames = list() var/list/all_paintings = list() var/list/unpicked_paintings = list() +// CHOMPEdit Start /datum/controller/subsystem/persistence/Initialize() - . = ..() for(var/datum/persistent/P as anything in subtypesof(/datum/persistent)) if(initial(P.name)) P = new P persistence_datums[P.type] = P P.Initialize() + return SS_INIT_SUCCESS +// CHOMPEdit End /datum/controller/subsystem/persistence/Shutdown() for(var/thing in persistence_datums) diff --git a/code/controllers/subsystems/planets.dm b/code/controllers/subsystems/planets.dm index 1d4c1f3bed..5dae5a35cc 100644 --- a/code/controllers/subsystems/planets.dm +++ b/code/controllers/subsystems/planets.dm @@ -14,10 +14,10 @@ SUBSYSTEM_DEF(planets) var/static/list/needs_sun_update = list() var/static/list/needs_temp_update = list() -/datum/controller/subsystem/planets/Initialize(timeofday) +/datum/controller/subsystem/planets/Initialize() // CHOMPEdit admin_notice("Initializing planetary weather.", R_DEBUG) createPlanets() - ..() + return SS_INIT_SUCCESS // CHOMPEdit /datum/controller/subsystem/planets/proc/createPlanets() var/list/planet_datums = using_map.planet_datums_to_make diff --git a/code/controllers/subsystems/plants.dm b/code/controllers/subsystems/plants.dm index 7748ed2424..5827e9654a 100644 --- a/code/controllers/subsystems/plants.dm +++ b/code/controllers/subsystems/plants.dm @@ -21,14 +21,16 @@ SUBSYSTEM_DEF(plants) // Hydro trays and growing food normally just chill in SSobj var/list/processing = list() var/list/currentrun = list() + //CHOMPEdit Begin /datum/controller/subsystem/plants/stat_entry(msg) msg = "P:[processing.len]|S:[seeds.len]" return ..() -//CHOMPEdit End -/datum/controller/subsystem/plants/Initialize(timeofday) + +/datum/controller/subsystem/plants/Initialize() setup() - return ..() + return SS_INIT_SUCCESS +//CHOMPEdit End // Predefined/roundstart varieties use a string key to make it // easier to grab the new variety when mutating. Post-roundstart diff --git a/code/controllers/subsystems/player_tips.dm b/code/controllers/subsystems/player_tips.dm index 7ac58b52bd..adfab4db0c 100644 --- a/code/controllers/subsystems/player_tips.dm +++ b/code/controllers/subsystems/player_tips.dm @@ -5,12 +5,10 @@ SUBSYSTEM_DEF(player_tips) name = "Periodic Player Tips" priority = FIRE_PRIORITY_PLAYERTIPS runlevels = RUNLEVEL_GAME - wait = 3000 //We check if it's time to send a tip every 5 minutes (300 seconds) + flags = SS_NO_INIT + var/static/datum/player_tips/player_tips = new - - - /datum/controller/subsystem/player_tips/fire() player_tips.send_tips() diff --git a/code/controllers/subsystems/processing/fastprocess.dm b/code/controllers/subsystems/processing/fastprocess.dm index bda0bb6fb6..384fc78e9e 100644 --- a/code/controllers/subsystems/processing/fastprocess.dm +++ b/code/controllers/subsystems/processing/fastprocess.dm @@ -4,6 +4,7 @@ PROCESSING_SUBSYSTEM_DEF(fastprocess) name = "Fast Processing" wait = 2 stat_tag = "FP" + flags = SS_NO_INIT // CHOMPEdit /datum/controller/subsystem/processing/fastprocess/Recover() log_debug("[name] subsystem Recover().") @@ -12,4 +13,4 @@ PROCESSING_SUBSYSTEM_DEF(fastprocess) var/list/old_processing = SSfastprocess.processing.Copy() for(var/datum/D in old_processing) if(CHECK_BITFIELD(D.datum_flags, DF_ISPROCESSING)) - processing |= D \ No newline at end of file + processing |= D diff --git a/code/controllers/subsystems/processing/instruments.dm b/code/controllers/subsystems/processing/instruments.dm index 72770ea39b..86c4eed871 100644 --- a/code/controllers/subsystems/processing/instruments.dm +++ b/code/controllers/subsystems/processing/instruments.dm @@ -24,7 +24,7 @@ PROCESSING_SUBSYSTEM_DEF(instruments) /datum/controller/subsystem/processing/instruments/Initialize() initialize_instrument_data() synthesizer_instrument_ids = get_allowed_instrument_ids() - return ..() + return SS_INIT_SUCCESS // CHOMPEdit /datum/controller/subsystem/processing/instruments/proc/on_song_new(datum/song/S) songs += S diff --git a/code/controllers/subsystems/processing/turfs.dm b/code/controllers/subsystems/processing/turfs.dm index d28f4b4809..a451eed1e9 100644 --- a/code/controllers/subsystems/processing/turfs.dm +++ b/code/controllers/subsystems/processing/turfs.dm @@ -1,6 +1,7 @@ PROCESSING_SUBSYSTEM_DEF(turfs) name = "Turf Processing" wait = 20 + flags = SS_NO_INIT // CHOMPEdit /datum/controller/subsystem/processing/turfs/Recover() log_debug("[name] subsystem Recover().") @@ -11,4 +12,4 @@ PROCESSING_SUBSYSTEM_DEF(turfs) if(!isturf(D)) log_debug("[name] subsystem Recover() found inappropriate item in list: [D.type]") if(CHECK_BITFIELD(D.datum_flags, DF_ISPROCESSING)) - processing |= D \ No newline at end of file + processing |= D diff --git a/code/controllers/subsystems/reflect_ch.dm b/code/controllers/subsystems/reflect_ch.dm index b9be3d4252..106f559357 100644 --- a/code/controllers/subsystems/reflect_ch.dm +++ b/code/controllers/subsystems/reflect_ch.dm @@ -2,7 +2,7 @@ SUBSYSTEM_DEF(reflector) name = "Reflectors" priority = FIRE_PRIORITY_REFLECTOR - flags = SS_BACKGROUND|SS_NO_INIT + flags = SS_BACKGROUND | SS_NO_INIT wait = 5 var/stat_tag = "R" //Used for logging diff --git a/code/controllers/subsystems/robot_sprites.dm b/code/controllers/subsystems/robot_sprites.dm index 8fd72b0a15..7a383fbbe0 100644 --- a/code/controllers/subsystems/robot_sprites.dm +++ b/code/controllers/subsystems/robot_sprites.dm @@ -10,7 +10,7 @@ SUBSYSTEM_DEF(robot_sprites) /datum/controller/subsystem/robot_sprites/Initialize() initialize_borg_sprites() - ..() + return SS_INIT_SUCCESS // CHOMPEdit /datum/controller/subsystem/robot_sprites/proc/initialize_borg_sprites() @@ -112,4 +112,4 @@ SUBSYSTEM_DEF(robot_sprites) if(RS.whitelist_ckey == ckey && RS.whitelist_charname == spritename) . |= RS - return \ No newline at end of file + return diff --git a/code/controllers/subsystems/shuttles.dm b/code/controllers/subsystems/shuttles.dm index 0ebbce81ed..13dd6e1377 100644 --- a/code/controllers/subsystems/shuttles.dm +++ b/code/controllers/subsystems/shuttles.dm @@ -32,7 +32,7 @@ SUBSYSTEM_DEF(shuttles) var/tmp/list/current_run // Shuttles remaining to process this fire() tick -/datum/controller/subsystem/shuttles/Initialize(timeofday) +/datum/controller/subsystem/shuttles/Initialize() // CHOMPEdit last_landmark_registration_time = world.time // Find all declared shuttle datums and initailize them. (Okay, queue them for initialization a few lines further down) for(var/shuttle_type in subtypesof(/datum/shuttle)) // This accounts for most shuttles, though away maps can queue up more. @@ -43,7 +43,7 @@ SUBSYSTEM_DEF(shuttles) LAZYDISTINCTADD(shuttles_to_initialize, shuttle_type) block_init_queue = FALSE process_init_queues() - return ..() + return SS_INIT_SUCCESS // CHOMPEdit /datum/controller/subsystem/shuttles/fire(resumed = 0) if (!resumed) diff --git a/code/controllers/subsystems/skybox.dm b/code/controllers/subsystems/skybox.dm index 52065ad241..4d4c53e852 100644 --- a/code/controllers/subsystems/skybox.dm +++ b/code/controllers/subsystems/skybox.dm @@ -28,7 +28,7 @@ SUBSYSTEM_DEF(skybox) normal_space.layer = TURF_LAYER normal_space.icon = 'icons/turf/space.dmi' normal_space.icon_state = "white" - + //Static for (var/i in 0 to 25) var/mutable_appearance/MA = new(normal_space) @@ -36,12 +36,12 @@ SUBSYSTEM_DEF(skybox) im.plane = DUST_PLANE im.alpha = 128 //80 im.blend_mode = BLEND_ADD - + MA.cut_overlays() MA.add_overlay(im) dust_cache["[i]"] = MA - + //Moving for (var/i in 0 to 14) // NORTH/SOUTH @@ -57,12 +57,12 @@ SUBSYSTEM_DEF(skybox) im = image('icons/turf/space_dust_transit.dmi', "speedspace_ew_[i]") im.plane = DUST_PLANE im.blend_mode = BLEND_ADD - + MA.cut_overlays() MA.add_overlay(im) - + speedspace_cache["EW_[i]"] = MA - + //Over-the-edge images for (var/dir in alldirs) var/mutable_appearance/MA = new(normal_space) @@ -90,7 +90,7 @@ SUBSYSTEM_DEF(skybox) . = ..() /datum/controller/subsystem/skybox/Initialize() - . = ..() + return SS_INIT_SUCCESS // CHOMPEdit /datum/controller/subsystem/skybox/proc/get_skybox(z) if(!subsystem_initialized) @@ -101,9 +101,9 @@ SUBSYSTEM_DEF(skybox) /datum/controller/subsystem/skybox/proc/generate_skybox(z) var/datum/skybox_settings/settings = global.using_map.get_skybox_datum(z) - + var/new_overlays = list() - + var/image/res = image(settings.icon) res.appearance_flags = KEEP_TOGETHER @@ -136,7 +136,7 @@ SUBSYSTEM_DEF(skybox) for(var/datum/event/E in SSevents.active_events) if(E.has_skybox_image && E.isRunning && (z in E.affecting_z)) new_overlays += E.get_skybox_image() - + for(var/image/I in new_overlays) I.appearance_flags |= RESET_COLOR @@ -161,7 +161,7 @@ SUBSYSTEM_DEF(skybox) var/icon_state = "dyable" var/color var/random_color = FALSE - + var/use_stars = TRUE var/star_icon = 'icons/skybox/skybox.dmi' var/star_state = "stars" diff --git a/code/controllers/subsystems/sounds.dm b/code/controllers/subsystems/sounds.dm index 7d94a3d21d..17d3c560ca 100644 --- a/code/controllers/subsystems/sounds.dm +++ b/code/controllers/subsystems/sounds.dm @@ -25,7 +25,7 @@ SUBSYSTEM_DEF(sounds) /datum/controller/subsystem/sounds/Initialize() setup_available_channels() - return ..() + return SS_INIT_SUCCESS // CHOMPEdit /datum/controller/subsystem/sounds/proc/setup_available_channels() channel_list = list() diff --git a/code/controllers/subsystems/sqlite.dm b/code/controllers/subsystems/sqlite.dm index 20a5a59475..c4f5cc3eba 100644 --- a/code/controllers/subsystems/sqlite.dm +++ b/code/controllers/subsystems/sqlite.dm @@ -7,11 +7,11 @@ SUBSYSTEM_DEF(sqlite) flags = SS_NO_FIRE var/database/sqlite_db = null -/datum/controller/subsystem/sqlite/Initialize(timeofday) +/datum/controller/subsystem/sqlite/Initialize() // CHOMPEdit connect() if(sqlite_db) init_schema(sqlite_db) - return ..() + return SS_INIT_SUCCESS // CHOMPEdit /datum/controller/subsystem/sqlite/proc/connect() if(!config.sqlite_enabled) diff --git a/code/controllers/subsystems/sun.dm b/code/controllers/subsystems/sun.dm index 551130a20b..f0c484273e 100644 --- a/code/controllers/subsystems/sun.dm +++ b/code/controllers/subsystems/sun.dm @@ -1,6 +1,7 @@ SUBSYSTEM_DEF(sun) name = "Sun" wait = 600 + flags = SS_NO_INIT // CHOMPEdit var/static/datum/sun/sun = new /datum/controller/subsystem/sun/fire() diff --git a/code/controllers/subsystems/supply.dm b/code/controllers/subsystems/supply.dm index 55e5f0fc16..43cb014c33 100644 --- a/code/controllers/subsystems/supply.dm +++ b/code/controllers/subsystems/supply.dm @@ -35,7 +35,7 @@ SUBSYSTEM_DEF(supply) else qdel(P) - . = ..() + return SS_INIT_SUCCESS // CHOMPEdit // Supply shuttle ticker - handles supply point regeneration. Just add points over time. /datum/controller/subsystem/supply/fire() diff --git a/code/controllers/subsystems/ticker.dm b/code/controllers/subsystems/ticker.dm index 3bcfa885ed..e7bfe6a7ae 100644 --- a/code/controllers/subsystems/ticker.dm +++ b/code/controllers/subsystems/ticker.dm @@ -59,7 +59,7 @@ var/global/datum/controller/subsystem/ticker/ticker ) ) GLOB.autospeaker = new (null, null, null, 1) //Set up Global Announcer - return ..() + return SS_INIT_SUCCESS // CHOMPEdit /datum/controller/subsystem/ticker/fire(resumed = FALSE) switch(current_state) diff --git a/code/controllers/subsystems/transcore_vr.dm b/code/controllers/subsystems/transcore_vr.dm index 23c7ca3140..d82ef22ae5 100644 --- a/code/controllers/subsystems/transcore_vr.dm +++ b/code/controllers/subsystems/transcore_vr.dm @@ -36,7 +36,7 @@ SUBSYSTEM_DEF(transcore) warning("Instantiated transcore DB without a key: [t]") continue databases[db.key] = db - return ..() + return SS_INIT_SUCCESS // CHOMPEdit /datum/controller/subsystem/transcore/fire(resumed = 0) var/timer = TICK_USAGE diff --git a/code/controllers/subsystems/vis_overlays.dm b/code/controllers/subsystems/vis_overlays.dm index d807986b0b..298fff21ed 100644 --- a/code/controllers/subsystems/vis_overlays.dm +++ b/code/controllers/subsystems/vis_overlays.dm @@ -9,7 +9,7 @@ SUBSYSTEM_DEF(vis_overlays) /datum/controller/subsystem/vis_overlays/Initialize() vis_overlay_cache = list() - return ..() + return SS_INIT_SUCCESS // CHOMPEdit /datum/controller/subsystem/vis_overlays/fire(resumed = FALSE) if(!resumed) @@ -82,8 +82,8 @@ SUBSYSTEM_DEF(vis_overlays) if(istext(icon)) iconstate = icon icon = src.icon - + return SSvis_overlays.add_vis_overlay(src, icon, iconstate, layer, plane, dir, alpha, add_appearance_flags, add_vis_flags, unique) /atom/proc/remove_vis_overlay(list/overlays) - return SSvis_overlays.remove_vis_overlay(src, overlays) \ No newline at end of file + return SSvis_overlays.remove_vis_overlay(src, overlays) diff --git a/code/controllers/subsystems/webhooks.dm b/code/controllers/subsystems/webhooks.dm index 1e7a27924f..660d346612 100644 --- a/code/controllers/subsystems/webhooks.dm +++ b/code/controllers/subsystems/webhooks.dm @@ -6,7 +6,7 @@ SUBSYSTEM_DEF(webhooks) /datum/controller/subsystem/webhooks/Initialize() load_webhooks() - . = ..() + return SS_INIT_SUCCESS // CHOMPEdit /datum/controller/subsystem/webhooks/proc/load_webhooks() diff --git a/code/controllers/subsystems/xenoarch.dm b/code/controllers/subsystems/xenoarch.dm index 6f728b158e..c81037e283 100644 --- a/code/controllers/subsystems/xenoarch.dm +++ b/code/controllers/subsystems/xenoarch.dm @@ -14,9 +14,9 @@ SUBSYSTEM_DEF(xenoarch) var/list/artifact_spawning_turfs = list() var/list/digsite_spawning_turfs = list() -/datum/controller/subsystem/xenoarch/Initialize(timeofday) +/datum/controller/subsystem/xenoarch/Initialize() // CHOMPEdit SetupXenoarch() - ..() + return SS_INIT_SUCCESS // CHOMPEdit /datum/controller/subsystem/xenoarch/Recover() if (istype(SSxenoarch.artifact_spawning_turfs)) diff --git a/vorestation.dme b/vorestation.dme index 8b3cc0fc54..0068e5b4ac 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -130,6 +130,7 @@ #include "code\__defines\dcs\helpers.dm" #include "code\__defines\dcs\signals.dm" #include "code\__defines\dcs\signals_ch.dm" +#include "code\__defines\dcs\signals_ch\signals_subsystem.dm" #include "code\__defines\traits\_traits.dm" #include "code\_global_vars\_regexes.dm" #include "code\_global_vars\bitfields.dm"