//simplified MC that is designed to fail when procs 'break'. When it fails it's just replaced with a new one. //It ensures master_controller.process() is never doubled up by killing the MC (hence terminating any of its sleeping procs) //WIP, needs lots of work still var/global/datum/controller/game_controller/master_controller //Set in world.New() var/global/controller_iteration = 0 var/global/last_tick_duration = 0 var/global/air_processing_killed = 0 var/global/pipe_processing_killed = 0 /datum/controller var/processing = 0 var/iteration = 0 var/processing_interval = 0 /datum/controller/proc/recover() // If we are replacing an existing controller (due to a crash) we attempt to preserve as much as we can. /datum/controller/game_controller var/list/shuttle_list // For debugging and VV /datum/controller/game_controller/New() //There can be only one master_controller. Out with the old and in with the new. if(master_controller != src) if(istype(master_controller)) del(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") 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() /datum/controller/game_controller/proc/setup() world.tick_lag = config.Ticklag zlevels.initialize() preloadTemplates() if(!config.disable_away_missions) createRandomZlevel() if(!config.disable_space_ruins) seedRuins(7, rand(0, 3), /area/space, space_ruins_templates) setup_objects() setupgenetics() setupfactions() setup_economy() for(var/i=0, i