diff --git a/code/_helpers/logging.dm b/code/_helpers/logging.dm
index 35618c9b66..9cf853f456 100644
--- a/code/_helpers/logging.dm
+++ b/code/_helpers/logging.dm
@@ -82,6 +82,13 @@
if(config.log_world_output)
diary << "\[[time_stamp()]]DD_OUTPUT: [text][log_end]"
+/*
+ Standardized method for tracking startup times.
+*/
+/proc/log_startup_progress(var/message)
+ admin_notice("[message]", R_DEBUG)
+ log_to_dd(message)
+
/proc/log_misc(text)
diary << "\[[time_stamp()]]MISC: [text][log_end]"
diff --git a/code/_helpers/time.dm b/code/_helpers/time.dm
index 19e2206cd0..4443440615 100644
--- a/code/_helpers/time.dm
+++ b/code/_helpers/time.dm
@@ -55,3 +55,16 @@ var/round_start_time = 0
last_round_duration = "[hours]:[mins]"
next_duration_update = world.time + 1 MINUTES
return last_round_duration
+
+/*
+ Returns "watch handle" (really just a timestamp)
+*/
+/proc/start_watch()
+ return world.timeofday
+
+/*
+ Returns number of seconds elapsed.
+ @param wh number The "Watch Handle" from start_watch(). (timestamp)
+*/
+/proc/stop_watch(wh)
+ return round(0.1*(world.timeofday-wh),0.1)
\ No newline at end of file
diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm
index 682b0fb3d0..44cdeb8b79 100644
--- a/code/controllers/master_controller.dm
+++ b/code/controllers/master_controller.dm
@@ -21,11 +21,13 @@ datum/controller/game_controller/New()
qdel(master_controller)
master_controller = src
+ var/watch = 0
if(!job_master)
+ watch = start_watch()
job_master = new /datum/controller/occupations()
job_master.SetupOccupations()
job_master.LoadJobs("config/jobs.txt")
- admin_notice("Job setup complete", R_DEBUG)
+ log_startup_progress("Job setup complete in [stop_watch(watch)]s.")
if(!syndicate_code_phrase) syndicate_code_phrase = generate_code_phrase()
if(!syndicate_code_response) syndicate_code_response = generate_code_phrase()
@@ -44,31 +46,56 @@ datum/controller/game_controller/proc/setup()
datum/controller/game_controller/proc/setup_objects()
- admin_notice("Initializing objects", R_DEBUG)
- sleep(-1)
+ var/watch = start_watch()
+ var/count = 0
+ var/overwatch = start_watch() //Overall.
+
+ log_startup_progress("Populating asset cache...")
+ populate_asset_cache()
+ log_startup_progress(" Populated [asset_cache.len] assets in [stop_watch(watch)]s.")
+
+ watch = start_watch()
+ log_startup_progress("Initializing objects")
+// sleep(-1)
for(var/atom/movable/object in world)
if(isnull(object.gcDestroyed))
object.initialize()
+ count++
+ log_startup_progress(" Initialized [count] objects in [stop_watch(watch)]s.")
- admin_notice("Initializing areas", R_DEBUG)
- sleep(-1)
+ watch = start_watch()
+ count = 0
+ log_startup_progress("Initializing areas")
+// sleep(-1)
for(var/area/area in all_areas)
area.initialize()
+ count++
+ log_startup_progress(" Initialized [count] areas in [stop_watch(watch)]s.")
- admin_notice("Initializing pipe networks", R_DEBUG)
- sleep(-1)
+ watch = start_watch()
+ count = 0
+ log_startup_progress("Initializing pipe networks")
+// sleep(-1)
for(var/obj/machinery/atmospherics/machine in machines)
machine.build_network()
+ count++
+ log_startup_progress(" Initialized [count] pipe networks in [stop_watch(watch)]s.")
- admin_notice("Initializing atmos machinery.", R_DEBUG)
- sleep(-1)
+ watch = start_watch()
+ count = 0
+ log_startup_progress("Initializing atmos machinery.")
+// sleep(-1)
for(var/obj/machinery/atmospherics/unary/U in machines)
if(istype(U, /obj/machinery/atmospherics/unary/vent_pump))
var/obj/machinery/atmospherics/unary/vent_pump/T = U
T.broadcast_status()
+ count++
else if(istype(U, /obj/machinery/atmospherics/unary/vent_scrubber))
var/obj/machinery/atmospherics/unary/vent_scrubber/T = U
T.broadcast_status()
+ count++
+ log_startup_progress(" Initialized [count] atmospherics devices in [stop_watch(watch)]s.")
+ log_startup_progress("Finished object initializations in [stop_watch(overwatch)]s.")
// Set up antagonists.
populate_antag_type_list()
@@ -76,5 +103,5 @@ datum/controller/game_controller/proc/setup_objects()
//Set up spawn points.
populate_spawn_points()
- admin_notice("Initializations complete.", R_DEBUG)
- sleep(-1)
+ log_startup_progress("Initializations complete.")
+// sleep(-1)
diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm
index 89042464b3..a61526a417 100644
--- a/code/game/objects/items/devices/paicard.dm
+++ b/code/game/objects/items/devices/paicard.dm
@@ -198,7 +198,7 @@
dat += {"
pAI Request Module
Requesting AI personalities from central database... If there are no entries, or if a suitable entry is not listed, check again later as more personalities may be added.
-
Searching for personalities