mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-23 21:18:37 +01:00
[MIRROR] World Initialization Refactor [MDB IGNORE] (#20755)
* World Initialization Refactor * Update .github/CODEOWNERS * Update code/__HELPERS/global_lists.dm * Add logging for manually changing your targeted zone (#72814) See title. Surgery hud is exempt from this. Requested by @Mothblocks Signed-off-by: GitHub <noreply@github.com> Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com> Co-authored-by: dragomagol <66640614+dragomagol@users.noreply.github.com> * eee * Update tgstation.dme --------- Signed-off-by: GitHub <noreply@github.com> Co-authored-by: Jordan Dominion <Cyberboss@users.noreply.github.com> Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com> Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com> Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com> Co-authored-by: dragomagol <66640614+dragomagol@users.noreply.github.com> Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com>
This commit is contained in:
co-authored by
Mothblocks
dragomagol
Jordan Dominion
Tom
Zephyr
Gandalf
parent
11f5514dc7
commit
abf148d62b
@@ -1,4 +1,5 @@
|
||||
//See also controllers/globals.dm
|
||||
// See also controllers/globals.dm
|
||||
// See initialization order in /code/game/world.dm
|
||||
|
||||
/// Creates a global initializer with a given InitValue expression, do not use
|
||||
#define GLOBAL_MANAGED(X, InitValue)\
|
||||
@@ -20,11 +21,12 @@
|
||||
#define GLOBAL_PROTECT(X)
|
||||
#endif
|
||||
|
||||
/// Standard BYOND global, do not use
|
||||
#define GLOBAL_REAL_VAR(X) var/global/##X
|
||||
/// Standard BYOND global, seriously do not use without an earthshakingly good reason
|
||||
#define GLOBAL_REAL_VAR(X) var/global/##X;
|
||||
|
||||
/// Standard typed BYOND global, do not use
|
||||
#define GLOBAL_REAL(X, Typepath) var/global##Typepath/##X
|
||||
|
||||
/// Standard typed BYOND global, seriously do not use without an earthshakingly good reason
|
||||
#define GLOBAL_REAL(X, Typepath) var/global##Typepath/##X;
|
||||
|
||||
/// Defines a global var on the controller, do not use
|
||||
#define GLOBAL_RAW(X) /datum/controller/global_vars/var/global##X
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
#if DM_BUILD >= 1506
|
||||
// We don't actually care about storing the output here, this is just an easy way to ensure the profile runs first.
|
||||
GLOBAL_REAL_VAR(world_init_profiler) = world.Profile(PROFILE_RESTART)
|
||||
#endif
|
||||
@@ -10,5 +10,4 @@
|
||||
// Investigate
|
||||
#define INVESTIGATE_CIRCUIT "circuit"
|
||||
|
||||
GLOBAL_VAR(event_vote_log)
|
||||
GLOBAL_PROTECT(event_vote_log)
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
/////Initial Building/////
|
||||
//////////////////////////
|
||||
|
||||
/proc/make_datum_references_lists()
|
||||
/proc/init_sprite_accessories()
|
||||
//hair
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/hair, GLOB.hairstyles_list, GLOB.hairstyles_male_list, GLOB.hairstyles_female_list)
|
||||
//facial hair
|
||||
@@ -51,18 +51,23 @@
|
||||
sort_list(GLOB.laugh_types, GLOBAL_PROC_REF(cmp_typepaths_asc))
|
||||
//SKYRAT EDIT END
|
||||
|
||||
//Species
|
||||
/// Inits GLOB.species_list. Not using GLOBAL_LIST_INIT b/c it depends on GLOB.string_lists
|
||||
/proc/init_species_list()
|
||||
for(var/spath in subtypesof(/datum/species))
|
||||
var/datum/species/S = new spath()
|
||||
GLOB.species_list[S.id] = spath
|
||||
sort_list(GLOB.species_list, GLOBAL_PROC_REF(cmp_typepaths_asc))
|
||||
|
||||
//Surgeries
|
||||
/// Inits GLOB.surgeries
|
||||
/proc/init_surgeries()
|
||||
var/surgeries = list()
|
||||
for(var/path in subtypesof(/datum/surgery))
|
||||
GLOB.surgeries_list += new path()
|
||||
sort_list(GLOB.surgeries_list, GLOBAL_PROC_REF(cmp_typepaths_asc))
|
||||
surgeries += new path()
|
||||
sort_list(surgeries, GLOBAL_PROC_REF(cmp_typepaths_asc))
|
||||
return surgeries
|
||||
|
||||
// Hair Gradients - Initialise all /datum/sprite_accessory/hair_gradient into an list indexed by gradient-style name
|
||||
/// Hair Gradients - Initialise all /datum/sprite_accessory/hair_gradient into an list indexed by gradient-style name
|
||||
/proc/init_hair_gradients()
|
||||
for(var/path in subtypesof(/datum/sprite_accessory/gradient))
|
||||
var/datum/sprite_accessory/gradient/gradient = new path()
|
||||
if(gradient.gradient_category & GRADIENT_APPLIES_TO_HAIR)
|
||||
@@ -70,10 +75,15 @@
|
||||
if(gradient.gradient_category & GRADIENT_APPLIES_TO_FACIAL_HAIR)
|
||||
GLOB.facial_hair_gradients_list[gradient.name] = gradient
|
||||
|
||||
// Keybindings
|
||||
/// Legacy procs that really should be replaced with proper _INIT macros
|
||||
/proc/make_datum_reference_lists()
|
||||
// I tried to eliminate this proc but I couldn't untangle their init-order interdependencies -Dominion/Cyberboss
|
||||
init_sprite_accessories()
|
||||
init_species_list()
|
||||
init_hair_gradients()
|
||||
init_keybindings()
|
||||
|
||||
GLOB.emote_list = init_emote_list()
|
||||
GLOB.emote_list = init_emote_list() // WHY DOES THIS NEED TO GO HERE? IT JUST INITS DATUMS
|
||||
|
||||
make_skyrat_datum_references() //SKYRAT EDIT ADDITION - CUSTOMIZATION
|
||||
init_crafting_recipes()
|
||||
|
||||
@@ -2,25 +2,25 @@
|
||||
|
||||
/// General logging for admin actions
|
||||
/proc/log_admin(text)
|
||||
GLOB.admin_log.Add(text)
|
||||
GLOB.admin_activities.Add(text)
|
||||
if (CONFIG_GET(flag/log_admin))
|
||||
WRITE_LOG(GLOB.world_game_log, "ADMIN: [text]")
|
||||
|
||||
/// Logging for admin actions on or with circuits
|
||||
/proc/log_admin_circuit(text)
|
||||
GLOB.admin_log.Add(text)
|
||||
GLOB.admin_activities.Add(text)
|
||||
if(CONFIG_GET(flag/log_admin))
|
||||
WRITE_LOG(GLOB.world_game_log, "ADMIN: CIRCUIT: [text]")
|
||||
|
||||
/// General logging for admin actions
|
||||
/proc/log_admin_private(text)
|
||||
GLOB.admin_log.Add(text)
|
||||
GLOB.admin_activities.Add(text)
|
||||
if (CONFIG_GET(flag/log_admin))
|
||||
WRITE_LOG(GLOB.world_game_log, "ADMINPRIVATE: [text]")
|
||||
|
||||
/// Logging for AdminSay (ASAY) messages
|
||||
/proc/log_adminsay(text)
|
||||
GLOB.admin_log.Add(text)
|
||||
GLOB.admin_activities.Add(text)
|
||||
if (CONFIG_GET(flag/log_adminchat))
|
||||
WRITE_LOG(GLOB.world_game_log, "ADMINPRIVATE: ASAY: [text]")
|
||||
|
||||
|
||||
@@ -2,11 +2,3 @@
|
||||
/// Do not call directly, use the [stack_trace] macro instead.
|
||||
/proc/_stack_trace(message, file, line)
|
||||
CRASH("[message] ([file]:[line])")
|
||||
|
||||
GLOBAL_REAL_VAR(list/stack_trace_storage)
|
||||
/proc/gib_stack_trace()
|
||||
stack_trace_storage = list()
|
||||
stack_trace("")
|
||||
stack_trace_storage.Cut(1, min(3,stack_trace_storage.len))
|
||||
. = stack_trace_storage
|
||||
stack_trace_storage = null
|
||||
|
||||
@@ -3,9 +3,6 @@
|
||||
if (CONFIG_GET(flag/log_subtler))
|
||||
WRITE_LOG(GLOB.world_game_log, "SUBTLER EMOTE: [text]")
|
||||
|
||||
GLOBAL_VAR(character_creation_log)
|
||||
GLOBAL_PROTECT(character_creation_log)
|
||||
|
||||
/// This logs subtler emotes in game.txt, if the conflig flag in config\skyrat\skyrat_config.txt is true.
|
||||
/proc/log_creator(text)
|
||||
WRITE_LOG(GLOB.character_creation_log, "CREATOR LOG: [text]")
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
//Datum used to init Auxtools debugging as early as possible
|
||||
//Datum gets created in master.dm because for whatever reason global code in there gets runs first
|
||||
//In case we ever figure out how to manipulate global init order please move the datum creation into this file
|
||||
/datum/debugger
|
||||
|
||||
/datum/debugger/New()
|
||||
enable_debugger()
|
||||
|
||||
/datum/debugger/proc/enable_debugger()
|
||||
var/dll = world.GetConfig("env", "AUXTOOLS_DEBUG_DLL")
|
||||
if (dll)
|
||||
LIBCALL(dll, "auxtools_init")()
|
||||
enable_debugging()
|
||||
@@ -1,6 +1,7 @@
|
||||
// See initialization order in /code/game/world.dm
|
||||
GLOBAL_REAL(config, /datum/controller/configuration)
|
||||
|
||||
GLOBAL_DATUM(revdata, /datum/getrev)
|
||||
GLOBAL_DATUM_INIT(revdata, /datum/getrev, new)
|
||||
|
||||
GLOBAL_VAR(host)
|
||||
GLOBAL_VAR(station_name)
|
||||
|
||||
@@ -25,7 +25,7 @@ GLOBAL_LIST_INIT(chemical_name_list, init_chemical_name_list())
|
||||
GLOBAL_LIST(chemical_reactions_results_lookup_list) //List of all reactions with their associated product and result ids. Used for reaction lookups
|
||||
GLOBAL_LIST(fake_reagent_blacklist) //List of all reagents that are parent types used to define a bunch of children - but aren't used themselves as anything.
|
||||
GLOBAL_LIST_EMPTY(tech_list) //list of all /datum/tech datums indexed by id.
|
||||
GLOBAL_LIST_EMPTY(surgeries_list) //list of all surgeries by name, associated with their path.
|
||||
GLOBAL_LIST_INIT(surgeries_list, init_surgeries()) //list of all surgeries by name, associated with their path.
|
||||
|
||||
/// Global list of all non-cooking related crafting recipes.
|
||||
GLOBAL_LIST_EMPTY(crafting_recipes)
|
||||
|
||||
+83
-125
@@ -1,55 +1,78 @@
|
||||
GLOBAL_LIST_EMPTY(active_turfs_startlist)
|
||||
|
||||
GLOBAL_LIST_EMPTY(admin_log)
|
||||
GLOBAL_PROTECT(admin_log)
|
||||
GLOBAL_VAR(round_id)
|
||||
GLOBAL_PROTECT(round_id)
|
||||
|
||||
GLOBAL_LIST_EMPTY(adminlog)
|
||||
GLOBAL_PROTECT(adminlog)
|
||||
|
||||
GLOBAL_LIST_EMPTY(bombers)
|
||||
GLOBAL_PROTECT(bombers)
|
||||
|
||||
GLOBAL_LIST_EMPTY(combatlog)
|
||||
GLOBAL_PROTECT(combatlog)
|
||||
|
||||
GLOBAL_VAR(config_error_log)
|
||||
GLOBAL_PROTECT(config_error_log)
|
||||
|
||||
GLOBAL_VAR(demo_log)
|
||||
GLOBAL_PROTECT(demo_log)
|
||||
|
||||
GLOBAL_VAR(dynamic_log)
|
||||
GLOBAL_PROTECT(dynamic_log)
|
||||
|
||||
GLOBAL_VAR(filter_log)
|
||||
GLOBAL_PROTECT(filter_log)
|
||||
|
||||
#ifdef REFERENCE_DOING_IT_LIVE
|
||||
GLOBAL_LIST_EMPTY(harddel_log)
|
||||
GLOBAL_PROTECT(harddel_log)
|
||||
#endif
|
||||
|
||||
GLOBAL_LIST_EMPTY(IClog)
|
||||
GLOBAL_PROTECT(IClog)
|
||||
|
||||
/// Keeps last 100 signals here in format: "[src] used [REF(src)] @ location [src.loc]: [freq]/[code]"
|
||||
GLOBAL_LIST_EMPTY(lastsignalers)
|
||||
GLOBAL_PROTECT(lastsignalers)
|
||||
|
||||
/// Stores who uploaded laws to which silicon-based lifeform, and what the law was
|
||||
GLOBAL_LIST_EMPTY(lawchanges)
|
||||
GLOBAL_PROTECT(lawchanges)
|
||||
/// The directory in which ALL log files should be stored
|
||||
GLOBAL_VAR(log_directory)
|
||||
GLOBAL_PROTECT(log_directory)
|
||||
|
||||
GLOBAL_VAR(lua_log)
|
||||
GLOBAL_PROTECT(lua_log)
|
||||
#define DECLARE_LOG_NAMED(log_var_name, log_file_name, start)\
|
||||
GLOBAL_VAR(##log_var_name);\
|
||||
GLOBAL_PROTECT(##log_var_name);\
|
||||
/world/_initialize_log_files(temp_log_override = null){\
|
||||
..();\
|
||||
GLOB.##log_var_name = temp_log_override || "[GLOB.log_directory]/[##log_file_name].log";\
|
||||
if(!temp_log_override && ##start){\
|
||||
start_log(GLOB.##log_var_name);\
|
||||
}\
|
||||
}
|
||||
|
||||
GLOBAL_LIST_EMPTY(OOClog)
|
||||
GLOBAL_PROTECT(OOClog)
|
||||
#define DECLARE_LOG(log_name, start) DECLARE_LOG_NAMED(##log_name, "[copytext(#log_name, 1, length(#log_name) - 4)]", start)
|
||||
#define START_LOG TRUE
|
||||
#define DONT_START_LOG FALSE
|
||||
|
||||
GLOBAL_VAR(perf_log)
|
||||
GLOBAL_PROTECT(perf_log)
|
||||
/// Populated by log declaration macros to set log file names and start messages
|
||||
/world/proc/_initialize_log_files(temp_log_override = null)
|
||||
// Needs to be here to avoid compiler warnings
|
||||
SHOULD_CALL_PARENT(TRUE)
|
||||
return
|
||||
|
||||
// All individual log files
|
||||
DECLARE_LOG(config_error_log, DONT_START_LOG)
|
||||
DECLARE_LOG(dynamic_log, DONT_START_LOG)
|
||||
DECLARE_LOG(lua_log, DONT_START_LOG)
|
||||
DECLARE_LOG(perf_log, DONT_START_LOG) // Declared here but name is set in time_track subsystem
|
||||
DECLARE_LOG(query_debug_log, DONT_START_LOG)
|
||||
DECLARE_LOG(signals_log, DONT_START_LOG)
|
||||
DECLARE_LOG(tgui_log, START_LOG)
|
||||
#ifdef REFERENCE_DOING_IT_LIVE
|
||||
DECLARE_LOG_NAMED(harddel_log, "harddels", START_LOG)
|
||||
#endif
|
||||
#if defined(UNIT_TESTS) || defined(SPACEMAN_DMM)
|
||||
DECLARE_LOG_NAMED(test_log, "tests", START_LOG)
|
||||
#endif
|
||||
DECLARE_LOG_NAMED(filter_log, "filters", DONT_START_LOG)
|
||||
DECLARE_LOG_NAMED(sql_error_log, "sql", DONT_START_LOG)
|
||||
DECLARE_LOG_NAMED(world_asset_log, "asset", DONT_START_LOG)
|
||||
DECLARE_LOG_NAMED(world_attack_log, "attack", START_LOG)
|
||||
DECLARE_LOG_NAMED(world_econ_log, "econ", START_LOG)
|
||||
DECLARE_LOG_NAMED(world_game_log, "game", START_LOG)
|
||||
DECLARE_LOG_NAMED(world_href_log, "hrefs", START_LOG)
|
||||
DECLARE_LOG_NAMED(world_job_debug_log, "job_debug", START_LOG)
|
||||
DECLARE_LOG_NAMED(world_manifest_log, "manifest", START_LOG)
|
||||
DECLARE_LOG_NAMED(world_map_error_log, "map_errors", DONT_START_LOG)
|
||||
DECLARE_LOG_NAMED(world_mecha_log, "mecha", DONT_START_LOG)
|
||||
DECLARE_LOG_NAMED(world_mob_tag_log, "mob_tags", START_LOG)
|
||||
DECLARE_LOG_NAMED(world_paper_log, "paper", DONT_START_LOG)
|
||||
DECLARE_LOG_NAMED(world_pda_log, "pda", START_LOG)
|
||||
DECLARE_LOG_NAMED(world_qdel_log, "qdel", START_LOG)
|
||||
DECLARE_LOG_NAMED(world_runtime_log, "runtime", START_LOG)
|
||||
DECLARE_LOG_NAMED(world_shuttle_log, "shuttle", START_LOG)
|
||||
DECLARE_LOG_NAMED(world_silicon_log, "silicon", DONT_START_LOG)
|
||||
DECLARE_LOG_NAMED(world_speech_indicators_log, "speech_indicators", DONT_START_LOG)
|
||||
DECLARE_LOG_NAMED(world_telecomms_log, "telecomms", START_LOG)
|
||||
DECLARE_LOG_NAMED(world_tool_log, "tools", DONT_START_LOG)
|
||||
DECLARE_LOG_NAMED(world_uplink_log, "uplink", START_LOG)
|
||||
DECLARE_LOG_NAMED(world_virus_log, "virus", DONT_START_LOG)
|
||||
/// Log associated with [/proc/log_suspicious_login()]
|
||||
/// Intended to hold all logins that failed due to suspicious circumstances such as ban detection, CID randomisation etc.
|
||||
DECLARE_LOG_NAMED(world_suspicious_login_log, "suspicious_logins", DONT_START_LOG)
|
||||
|
||||
// SKYRAT EDIT ADDITION
|
||||
DECLARE_LOG_NAMED(event_vote_log, "event_vote", START_LOG)
|
||||
DECLARE_LOG_NAMED(character_creation_log, "character_creation", START_LOG)
|
||||
// SKYRAT EDIT END
|
||||
|
||||
/// Picture logging
|
||||
GLOBAL_VAR(picture_log_directory)
|
||||
@@ -61,88 +84,23 @@ GLOBAL_PROTECT(picture_logging_id)
|
||||
GLOBAL_VAR(picture_logging_prefix)
|
||||
GLOBAL_PROTECT(picture_logging_prefix)
|
||||
|
||||
GLOBAL_VAR(query_debug_log)
|
||||
GLOBAL_PROTECT(query_debug_log)
|
||||
/// All admin related log lines minus their categories
|
||||
GLOBAL_LIST_EMPTY(admin_activities)
|
||||
GLOBAL_PROTECT(admin_activities)
|
||||
|
||||
GLOBAL_VAR(round_id)
|
||||
GLOBAL_PROTECT(round_id)
|
||||
/// All bomb related messages
|
||||
GLOBAL_LIST_EMPTY(bombers)
|
||||
GLOBAL_PROTECT(bombers)
|
||||
|
||||
GLOBAL_VAR(signals_log)
|
||||
GLOBAL_PROTECT(signals_log)
|
||||
/// All signals here in format: "[src] used [REF(src)] @ location [src.loc]: [freq]/[code]"
|
||||
GLOBAL_LIST_EMPTY(lastsignalers)
|
||||
GLOBAL_PROTECT(lastsignalers)
|
||||
|
||||
GLOBAL_VAR(sql_error_log)
|
||||
GLOBAL_PROTECT(sql_error_log)
|
||||
/// Stores who uploaded laws to which silicon-based lifeform, and what the law was
|
||||
GLOBAL_LIST_EMPTY(lawchanges)
|
||||
GLOBAL_PROTECT(lawchanges)
|
||||
|
||||
GLOBAL_VAR(tgui_log)
|
||||
GLOBAL_PROTECT(tgui_log)
|
||||
|
||||
GLOBAL_VAR(world_asset_log)
|
||||
GLOBAL_PROTECT(world_asset_log)
|
||||
|
||||
GLOBAL_VAR(world_attack_log)
|
||||
GLOBAL_PROTECT(world_attack_log)
|
||||
|
||||
GLOBAL_VAR(world_cloning_log)
|
||||
GLOBAL_PROTECT(world_cloning_log)
|
||||
|
||||
GLOBAL_VAR(world_econ_log)
|
||||
GLOBAL_PROTECT(world_econ_log)
|
||||
|
||||
GLOBAL_VAR(world_game_log)
|
||||
GLOBAL_PROTECT(world_game_log)
|
||||
|
||||
GLOBAL_VAR(world_href_log)
|
||||
GLOBAL_PROTECT(world_href_log)
|
||||
|
||||
GLOBAL_VAR(world_job_debug_log)
|
||||
GLOBAL_PROTECT(world_job_debug_log)
|
||||
|
||||
GLOBAL_VAR(world_manifest_log)
|
||||
GLOBAL_PROTECT(world_manifest_log)
|
||||
|
||||
GLOBAL_VAR(world_map_error_log)
|
||||
GLOBAL_PROTECT(world_map_error_log)
|
||||
|
||||
GLOBAL_VAR(world_mecha_log)
|
||||
GLOBAL_PROTECT(world_mecha_log)
|
||||
|
||||
GLOBAL_VAR(world_mob_tag_log)
|
||||
GLOBAL_PROTECT(world_mob_tag_log)
|
||||
|
||||
GLOBAL_VAR(world_paper_log)
|
||||
GLOBAL_PROTECT(world_paper_log)
|
||||
|
||||
GLOBAL_VAR(world_pda_log)
|
||||
GLOBAL_PROTECT(world_pda_log)
|
||||
|
||||
GLOBAL_VAR(world_qdel_log)
|
||||
GLOBAL_PROTECT(world_qdel_log)
|
||||
|
||||
GLOBAL_VAR(world_runtime_log)
|
||||
GLOBAL_PROTECT(world_runtime_log)
|
||||
|
||||
GLOBAL_VAR(world_shuttle_log)
|
||||
GLOBAL_PROTECT(world_shuttle_log)
|
||||
|
||||
GLOBAL_VAR(world_silicon_log)
|
||||
GLOBAL_PROTECT(world_silicon_log)
|
||||
|
||||
GLOBAL_VAR(world_speech_indicators_log)
|
||||
GLOBAL_PROTECT(world_speech_indicators_log)
|
||||
|
||||
/// Log associated with [/proc/log_suspicious_login()]
|
||||
/// Intended to hold all logins that failed due to suspicious circumstances such as ban detection, CID randomisation etc.
|
||||
GLOBAL_VAR(world_suspicious_login_log)
|
||||
GLOBAL_PROTECT(world_suspicious_login_log)
|
||||
|
||||
GLOBAL_VAR(world_telecomms_log)
|
||||
GLOBAL_PROTECT(world_telecomms_log)
|
||||
|
||||
GLOBAL_VAR(world_tool_log)
|
||||
GLOBAL_PROTECT(world_tool_log)
|
||||
|
||||
GLOBAL_VAR(world_uplink_log)
|
||||
GLOBAL_PROTECT(world_uplink_log)
|
||||
|
||||
GLOBAL_VAR(world_virus_log)
|
||||
GLOBAL_PROTECT(world_virus_log)
|
||||
#undef DECLARE_LOG
|
||||
#undef DECLARE_LOG_NAMED
|
||||
#undef START_LOG
|
||||
#undef DONT_START_LOG
|
||||
|
||||
@@ -96,6 +96,8 @@
|
||||
LoadChatFilter()
|
||||
if(CONFIG_GET(flag/load_jobs_from_txt))
|
||||
validate_job_config()
|
||||
if(CONFIG_GET(flag/usewhitelist))
|
||||
load_whitelist()
|
||||
|
||||
// SKYRAT EDIT ADDITION START
|
||||
populate_interaction_instances()
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
* Pretty much pokes the MC to make sure it's still alive.
|
||||
**/
|
||||
|
||||
// See initialization order in /code/game/world.dm
|
||||
GLOBAL_REAL(Failsafe, /datum/controller/failsafe)
|
||||
|
||||
/datum/controller/failsafe // This thing pretty much just keeps poking the master controller
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
// See initialization order in /code/game/world.dm
|
||||
GLOBAL_REAL(GLOB, /datum/controller/global_vars)
|
||||
|
||||
/datum/controller/global_vars
|
||||
@@ -16,8 +17,6 @@ GLOBAL_REAL(GLOB, /datum/controller/global_vars)
|
||||
gvars_datum_in_built_vars = exclude_these.vars + list(NAMEOF(src, gvars_datum_protected_varlist), NAMEOF(src, gvars_datum_in_built_vars), NAMEOF(src, gvars_datum_init_order))
|
||||
QDEL_IN(exclude_these, 0) //signal logging isn't ready
|
||||
|
||||
log_world("[vars.len - gvars_datum_in_built_vars.len] global variables")
|
||||
|
||||
Initialize()
|
||||
|
||||
/datum/controller/global_vars/Destroy(force)
|
||||
@@ -46,9 +45,14 @@ GLOBAL_REAL(GLOB, /datum/controller/global_vars)
|
||||
for(var/I in global_procs)
|
||||
expected_global_procs -= replacetext("[I]", "InitGlobal", "")
|
||||
log_world("Missing procs: [expected_global_procs.Join(", ")]")
|
||||
|
||||
for(var/I in global_procs)
|
||||
var/start_tick = world.time
|
||||
call(src, I)()
|
||||
var/end_tick = world.time
|
||||
if(end_tick - start_tick)
|
||||
warning("Global [replacetext("[I]", "InitGlobal", "")] slept during initialization!")
|
||||
|
||||
// Someone make it so this call isn't necessary
|
||||
make_datum_reference_lists()
|
||||
|
||||
|
||||
@@ -7,19 +7,8 @@
|
||||
*
|
||||
**/
|
||||
|
||||
//Init the debugger datum first so we can debug Master
|
||||
//You might wonder why not just create the debugger datum global in its own file, since its loaded way earlier than this DM file
|
||||
//Well for whatever reason then the Master gets created first and then the debugger when doing that
|
||||
//So thats why this code lives here now, until someone finds out how Byond inits globals
|
||||
GLOBAL_REAL(Debugger, /datum/debugger) = new
|
||||
//This is the ABSOLUTE ONLY THING that should init globally like this
|
||||
//2019 update: the failsafe,config and Global controllers also do it
|
||||
GLOBAL_REAL(Master, /datum/controller/master) = new
|
||||
|
||||
//THIS IS THE INIT ORDER
|
||||
//Master -> SSPreInit -> GLOB -> world -> config -> SSInit -> Failsafe
|
||||
//GOT IT MEMORIZED?
|
||||
|
||||
// See initialization order in /code/game/world.dm
|
||||
GLOBAL_REAL(Master, /datum/controller/master)
|
||||
/datum/controller/master
|
||||
name = "Master"
|
||||
|
||||
@@ -88,7 +77,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
|
||||
|
||||
if(!random_seed)
|
||||
#ifdef UNIT_TESTS
|
||||
random_seed = 29051994
|
||||
random_seed = 29051994 // How about 22475?
|
||||
#else
|
||||
random_seed = rand(1, 1e9)
|
||||
#endif
|
||||
|
||||
@@ -281,7 +281,9 @@ SUBSYSTEM_DEF(dbcore)
|
||||
else
|
||||
log_sql("Database is not enabled in configuration.")
|
||||
|
||||
/datum/controller/subsystem/dbcore/proc/SetRoundID()
|
||||
/datum/controller/subsystem/dbcore/proc/InitializeRound()
|
||||
CheckSchemaVersion()
|
||||
|
||||
if(!Connect())
|
||||
return
|
||||
var/datum/db_query/query_round_initialize = SSdbcore.NewQuery(/* SKYRAT EDIT CHANGE - MULTISERVER */
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
#define PROFILER_FILENAME "profiler.json"
|
||||
#define SENDMAPS_FILENAME "sendmaps.json"
|
||||
GLOBAL_REAL_VAR(world_init_maptick_profiler) = world.Profile(PROFILE_RESTART, type = "sendmaps")
|
||||
|
||||
|
||||
SUBSYSTEM_DEF(profiler)
|
||||
name = "Profiler"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
//these are real globals so you can use profiling to profile early world init stuff.
|
||||
GLOBAL_REAL_VAR(list/PROFILE_STORE)
|
||||
GLOBAL_REAL(PROFILE_STORE, /list)
|
||||
GLOBAL_REAL_VAR(PROFILE_LINE)
|
||||
GLOBAL_REAL_VAR(PROFILE_FILE)
|
||||
GLOBAL_REAL_VAR(PROFILE_SLEEPCHECK)
|
||||
|
||||
+122
-111
@@ -7,6 +7,78 @@
|
||||
|
||||
GLOBAL_VAR(restart_counter)
|
||||
|
||||
/**
|
||||
* WORLD INITIALIZATION
|
||||
* THIS IS THE INIT ORDER:
|
||||
*
|
||||
* BYOND =>
|
||||
* - (secret init native) =>
|
||||
* - world.Genesis() =>
|
||||
* - world.init_byond_tracy()
|
||||
* - (Start native profiling)
|
||||
* - world.init_debugger()
|
||||
* - Master =>
|
||||
* - config *unloaded
|
||||
* - (all subsystems) PreInit()
|
||||
* - GLOB =>
|
||||
* - make_datum_reference_lists()
|
||||
* - (/static variable inits, reverse declaration order)
|
||||
* - (all pre-mapped atoms) /atom/New()
|
||||
* - world.New() =>
|
||||
* - config.Load()
|
||||
* - world.InitTgs() =>
|
||||
* - TgsNew() *may sleep
|
||||
* - GLOB.rev_data.load_tgs_info()
|
||||
* - world.ConfigLoaded() =>
|
||||
* - SSdbcore.InitializeRound()
|
||||
* - world.SetupLogs()
|
||||
* - load_admins()
|
||||
* - ...
|
||||
* - Master.Initialize() =>
|
||||
* - (all subsystems) Initialize()
|
||||
* - Master.StartProcessing() =>
|
||||
* - Master.Loop() =>
|
||||
* - Failsafe
|
||||
* - world.RunUnattendedFunctions()
|
||||
*
|
||||
* Now listen up because I want to make something clear:
|
||||
* If something is not in this list it should almost definitely be handled by a subsystem Initialize()ing
|
||||
* If whatever it is that needs doing doesn't fit in a subsystem you probably aren't trying hard enough tbhfam
|
||||
*
|
||||
* GOT IT MEMORIZED?
|
||||
* - Dominion/Cyberboss
|
||||
*/
|
||||
|
||||
/**
|
||||
* THIS !!!SINGLE!!! PROC IS WHERE ANY FORM OF INIITIALIZATION THAT CAN'T BE PERFORMED IN MASTER/NEW() IS DONE
|
||||
* NOWHERE THE FUCK ELSE
|
||||
* I DON'T CARE HOW MANY LAYERS OF DEBUG/PROFILE/TRACE WE HAVE, YOU JUST HAVE TO DEAL WITH THIS PROC EXISTING
|
||||
* I'M NOT EVEN GOING TO TELL YOU WHERE IT'S CALLED FROM BECAUSE I'M DECLARING THAT FORBIDDEN KNOWLEDGE
|
||||
* SO HELP ME GOD IF I FIND ABSTRACTION LAYERS OVER THIS!
|
||||
*/
|
||||
/world/proc/Genesis(tracy_initialized = FALSE)
|
||||
RETURN_TYPE(/datum/controller/master)
|
||||
|
||||
#ifdef USE_BYOND_TRACY
|
||||
#warn USE_BYOND_TRACY is enabled
|
||||
if(!tracy_initialized)
|
||||
init_byond_tracy()
|
||||
Genesis(tracy_initialized = TRUE)
|
||||
return
|
||||
#endif
|
||||
|
||||
Profile(PROFILE_RESTART)
|
||||
Profile(PROFILE_RESTART, type = "sendmaps")
|
||||
|
||||
// Write everything to this log file until we get to SetupLogs() later
|
||||
_initialize_log_files("data/logs/config_error.[GUID()].log")
|
||||
|
||||
// Init the debugger first so we can debug Master
|
||||
init_debugger()
|
||||
|
||||
// THAT'S IT, WE'RE DONE, THE. FUCKING. END.
|
||||
Master = new
|
||||
|
||||
/**
|
||||
* World creation
|
||||
*
|
||||
@@ -34,57 +106,55 @@ GLOBAL_VAR(restart_counter)
|
||||
* All atoms in both compiled and uncompiled maps are initialized()
|
||||
*/
|
||||
/world/New()
|
||||
#ifdef USE_BYOND_TRACY
|
||||
#warn USE_BYOND_TRACY is enabled
|
||||
init_byond_tracy()
|
||||
#endif
|
||||
|
||||
log_world("World loaded at [time_stamp()]!")
|
||||
|
||||
make_datum_references_lists() //initialises global lists for referencing frequently used datums (so that we only ever do it once)
|
||||
|
||||
GLOB.config_error_log = GLOB.world_manifest_log = GLOB.world_pda_log = GLOB.world_job_debug_log = GLOB.sql_error_log = GLOB.world_href_log = GLOB.world_runtime_log = GLOB.world_attack_log = GLOB.world_game_log = GLOB.world_econ_log = GLOB.world_shuttle_log = "data/logs/config_error.[GUID()].log" //temporary file used to record errors with loading config, moved to log directory once logging is set bl
|
||||
#ifdef REFERENCE_DOING_IT_LIVE
|
||||
GLOB.harddel_log = GLOB.world_game_log
|
||||
#endif
|
||||
|
||||
GLOB.revdata = new
|
||||
// From a really fucking old commit (91d7150)
|
||||
// I wanted to move it but I think this needs to be after /world/New is called but before any sleeps?
|
||||
// - Dominion/Cyberboss
|
||||
GLOB.timezoneOffset = text2num(time2text(0,"hh")) * 36000
|
||||
|
||||
// First possible sleep()
|
||||
InitTgs()
|
||||
|
||||
config.Load(params[OVERRIDE_CONFIG_DIRECTORY_PARAMETER])
|
||||
|
||||
load_admins()
|
||||
|
||||
//SetupLogs depends on the RoundID, so lets check
|
||||
//DB schema and set RoundID if we can
|
||||
SSdbcore.CheckSchemaVersion()
|
||||
SSdbcore.SetRoundID()
|
||||
SetupLogs()
|
||||
load_poll_data()
|
||||
|
||||
#ifndef USE_CUSTOM_ERROR_HANDLER
|
||||
world.log = file("[GLOB.log_directory]/dd.log")
|
||||
#else
|
||||
if (TgsAvailable())
|
||||
world.log = file("[GLOB.log_directory]/dd.log") //not all runtimes trigger world/Error, so this is the only way to ensure we can see all of them.
|
||||
#endif
|
||||
|
||||
LoadVerbs(/datum/verbs/menu)
|
||||
if(CONFIG_GET(flag/usewhitelist))
|
||||
load_whitelist()
|
||||
|
||||
GLOB.timezoneOffset = text2num(time2text(0,"hh")) * 36000
|
||||
|
||||
if(fexists(RESTART_COUNTER_PATH))
|
||||
GLOB.restart_counter = text2num(trim(file2text(RESTART_COUNTER_PATH)))
|
||||
fdel(RESTART_COUNTER_PATH)
|
||||
ConfigLoaded()
|
||||
|
||||
if(NO_INIT_PARAMETER in params)
|
||||
return
|
||||
|
||||
Master.Initialize(10, FALSE, TRUE)
|
||||
|
||||
RunUnattendedFunctions()
|
||||
|
||||
/// Initializes TGS and loads the returned revising info into GLOB.revdata
|
||||
/world/proc/InitTgs()
|
||||
TgsNew(new /datum/tgs_event_handler/impl, TGS_SECURITY_TRUSTED)
|
||||
GLOB.revdata.load_tgs_info()
|
||||
|
||||
/// Runs after config is loaded but before Master is initialized
|
||||
/world/proc/ConfigLoaded()
|
||||
// Everything in here is prioritized in a very specific way.
|
||||
// If you need to add to it, ask yourself hard if what your adding is in the right spot
|
||||
// (i.e. basically nothing should be added before load_admins() in here)
|
||||
|
||||
// Try to set round ID
|
||||
SSdbcore.InitializeRound()
|
||||
|
||||
SetupLogs()
|
||||
|
||||
load_admins()
|
||||
|
||||
load_poll_data()
|
||||
|
||||
LoadVerbs(/datum/verbs/menu)
|
||||
|
||||
if(fexists(RESTART_COUNTER_PATH))
|
||||
GLOB.restart_counter = text2num(trim(file2text(RESTART_COUNTER_PATH)))
|
||||
fdel(RESTART_COUNTER_PATH)
|
||||
|
||||
/// Runs after the call to Master.Initialize, but before the delay kicks in. Used to turn the world execution into some single function then exit
|
||||
/world/proc/RunUnattendedFunctions()
|
||||
#ifdef UNIT_TESTS
|
||||
HandleTestRun()
|
||||
#endif
|
||||
@@ -93,10 +163,6 @@ GLOBAL_VAR(restart_counter)
|
||||
setup_autowiki()
|
||||
#endif
|
||||
|
||||
/world/proc/InitTgs()
|
||||
TgsNew(new /datum/tgs_event_handler/impl, TGS_SECURITY_TRUSTED)
|
||||
GLOB.revdata.load_tgs_info()
|
||||
|
||||
/world/proc/HandleTestRun()
|
||||
//trigger things to run the whole process
|
||||
Master.sleep_offline_after_initializations = FALSE
|
||||
@@ -134,75 +200,9 @@ GLOBAL_VAR(restart_counter)
|
||||
GLOB.picture_log_directory = "data/picture_logs/[override_dir]"
|
||||
|
||||
GLOB.logger.init_logging()
|
||||
GLOB.demo_log = "[GLOB.log_directory]/demo.log"
|
||||
GLOB.dynamic_log = "[GLOB.log_directory]/dynamic.log"
|
||||
GLOB.filter_log = "[GLOB.log_directory]/filters.log"
|
||||
GLOB.lua_log = "[GLOB.log_directory]/lua.log"
|
||||
GLOB.query_debug_log = "[GLOB.log_directory]/query_debug.log"
|
||||
GLOB.signals_log = "[GLOB.log_directory]/signals.log"
|
||||
GLOB.sql_error_log = "[GLOB.log_directory]/sql.log"
|
||||
GLOB.tgui_log = "[GLOB.log_directory]/tgui.log"
|
||||
GLOB.world_asset_log = "[GLOB.log_directory]/asset.log"
|
||||
GLOB.world_attack_log = "[GLOB.log_directory]/attack.log"
|
||||
GLOB.world_cloning_log = "[GLOB.log_directory]/cloning.log"
|
||||
GLOB.world_econ_log = "[GLOB.log_directory]/econ.log"
|
||||
GLOB.world_game_log = "[GLOB.log_directory]/game.log"
|
||||
GLOB.world_href_log = "[GLOB.log_directory]/hrefs.log"
|
||||
GLOB.world_job_debug_log = "[GLOB.log_directory]/job_debug.log"
|
||||
GLOB.world_manifest_log = "[GLOB.log_directory]/manifest.log"
|
||||
GLOB.world_map_error_log = "[GLOB.log_directory]/map_errors.log"
|
||||
GLOB.world_mecha_log = "[GLOB.log_directory]/mecha.log"
|
||||
GLOB.world_mob_tag_log = "[GLOB.log_directory]/mob_tags.log"
|
||||
GLOB.world_qdel_log = "[GLOB.log_directory]/qdel.log"
|
||||
GLOB.world_paper_log = "[GLOB.log_directory]/paper.log"
|
||||
GLOB.world_pda_log = "[GLOB.log_directory]/pda.log"
|
||||
GLOB.world_runtime_log = "[GLOB.log_directory]/runtime.log"
|
||||
GLOB.world_shuttle_log = "[GLOB.log_directory]/shuttle.log"
|
||||
GLOB.world_silicon_log = "[GLOB.log_directory]/silicon.log"
|
||||
GLOB.world_speech_indicators_log = "[GLOB.log_directory]/speech_indicators.log"
|
||||
GLOB.world_suspicious_login_log = "[GLOB.log_directory]/suspicious_logins.log"
|
||||
GLOB.world_telecomms_log = "[GLOB.log_directory]/telecomms.log"
|
||||
GLOB.world_tool_log = "[GLOB.log_directory]/tools.log"
|
||||
GLOB.world_uplink_log = "[GLOB.log_directory]/uplink.log"
|
||||
GLOB.world_virus_log = "[GLOB.log_directory]/virus.log"
|
||||
|
||||
GLOB.character_creation_log = "[GLOB.log_directory]/creator.log" // SKYRAT EDIT ADDITION
|
||||
GLOB.event_vote_log = "[GLOB.log_directory]/event_vote.log" // SKYRAT EDIT ADDITION
|
||||
|
||||
#ifdef UNIT_TESTS
|
||||
GLOB.test_log = "[GLOB.log_directory]/tests.log"
|
||||
start_log(GLOB.test_log)
|
||||
#endif
|
||||
|
||||
#ifdef REFERENCE_DOING_IT_LIVE
|
||||
GLOB.harddel_log = "[GLOB.log_directory]/harddels.log"
|
||||
start_log(GLOB.harddel_log)
|
||||
#endif
|
||||
start_log(GLOB.tgui_log)
|
||||
start_log(GLOB.world_attack_log)
|
||||
start_log(GLOB.world_econ_log)
|
||||
start_log(GLOB.world_game_log)
|
||||
start_log(GLOB.world_href_log)
|
||||
start_log(GLOB.world_job_debug_log)
|
||||
start_log(GLOB.world_manifest_log)
|
||||
start_log(GLOB.world_mob_tag_log)
|
||||
start_log(GLOB.world_qdel_log)
|
||||
start_log(GLOB.world_runtime_log)
|
||||
start_log(GLOB.world_shuttle_log)
|
||||
start_log(GLOB.world_telecomms_log)
|
||||
start_log(GLOB.world_uplink_log)
|
||||
start_log(GLOB.world_pda_log)
|
||||
|
||||
// SKYRAT EDIT ADDITION
|
||||
start_log(GLOB.event_vote_log)
|
||||
start_log(GLOB.character_creation_log)
|
||||
// SKYRAT EDIT END
|
||||
|
||||
var/latest_changelog = file("[global.config.directory]/../html/changelogs/archive/" + time2text(world.timeofday, "YYYY-MM") + ".yml")
|
||||
GLOB.changelog_hash = fexists(latest_changelog) ? md5(latest_changelog) : 0 //for telling if the changelog has changed recently
|
||||
if(fexists(GLOB.config_error_log))
|
||||
fcopy(GLOB.config_error_log, "[GLOB.log_directory]/config_error.log")
|
||||
fdel(GLOB.config_error_log)
|
||||
|
||||
if(GLOB.round_id)
|
||||
log_game("Round ID: [GLOB.round_id]")
|
||||
@@ -212,6 +212,13 @@ GLOBAL_VAR(restart_counter)
|
||||
// log which is ultimately public.
|
||||
log_runtime(GLOB.revdata.get_log_message())
|
||||
|
||||
#ifndef USE_CUSTOM_ERROR_HANDLER
|
||||
world.log = file("[GLOB.log_directory]/dd.log")
|
||||
#else
|
||||
if (TgsAvailable()) // why
|
||||
world.log = file("[GLOB.log_directory]/dd.log") //not all runtimes trigger world/Error, so this is the only way to ensure we can see all of them.
|
||||
#endif
|
||||
|
||||
/world/Topic(T, addr, master, key)
|
||||
TGS_TOPIC //redirect to server tools if necessary
|
||||
|
||||
@@ -324,8 +331,7 @@ GLOBAL_VAR(restart_counter)
|
||||
auxcleanup()
|
||||
. = ..()
|
||||
|
||||
/* SKYRAT EDIT CHANGE - MOVED TO MODULAR
|
||||
|
||||
/* SKYRAT EDIT REMOVAL - OVERRIDEN
|
||||
/world/proc/update_status()
|
||||
|
||||
var/list/features = list()
|
||||
@@ -443,10 +449,15 @@ GLOBAL_VAR(restart_counter)
|
||||
else
|
||||
CRASH("Unsupported platform: [system_type]")
|
||||
|
||||
var/init_result = LIBCALL(library, "init")()
|
||||
var/init_result = LIBCALL(library, "init")("block")
|
||||
if (init_result != "0")
|
||||
CRASH("Error initializing byond-tracy: [init_result]")
|
||||
|
||||
/world/proc/init_debugger()
|
||||
var/dll = GetConfig("env", "AUXTOOLS_DEBUG_DLL")
|
||||
if (dll)
|
||||
LIBCALL(dll, "auxtools_init")()
|
||||
enable_debugging()
|
||||
|
||||
/world/Profile(command, type, format)
|
||||
if((command & PROFILE_STOP) || !global.config?.loaded || !CONFIG_GET(flag/forbid_all_profiling))
|
||||
|
||||
@@ -55,9 +55,9 @@ GLOBAL_DATUM(everyone_a_traitor, /datum/everyone_is_a_traitor_controller)
|
||||
//Generic Buttons anyone can use.
|
||||
if("admin_log")
|
||||
var/dat = "<meta charset='UTF-8'><B>Admin Log<HR></B>"
|
||||
for(var/l in GLOB.admin_log)
|
||||
for(var/l in GLOB.admin_activities)
|
||||
dat += "<li>[l]</li>"
|
||||
if(!GLOB.admin_log.len)
|
||||
if(!GLOB.admin_activities.len)
|
||||
dat += "No-one has done anything this round!"
|
||||
holder << browse(dat, "window=admin_log")
|
||||
if("show_admins")
|
||||
|
||||
@@ -26,12 +26,6 @@ GLOBAL_VAR_INIT(total_runtimes_skipped, 0)
|
||||
Reboot(reason = 1)
|
||||
return
|
||||
|
||||
if (islist(stack_trace_storage))
|
||||
for (var/line in splittext(E.desc, "\n"))
|
||||
if (text2ascii(line) != 32)
|
||||
stack_trace_storage += line
|
||||
return
|
||||
|
||||
var/static/list/error_last_seen = list()
|
||||
var/static/list/error_cooldown = list() /* Error_cooldown items will either be positive(cooldown time) or negative(silenced error)
|
||||
If negative, starts at -1, and goes down by 1 each time that error gets skipped*/
|
||||
|
||||
@@ -49,6 +49,12 @@ GLOBAL_PROTECT(logger)
|
||||
)
|
||||
rustg_file_write("[json_encode(log_start_entry)]\n", category_type.get_output_file(null))
|
||||
|
||||
if(fexists(GLOB.config_error_log))
|
||||
fcopy(GLOB.config_error_log, "[GLOB.log_directory]/config_error.log")
|
||||
fdel(GLOB.config_error_log)
|
||||
|
||||
world._initialize_log_files()
|
||||
|
||||
/// Tells the log_holder to not allow any more logging to be done, and dumps all categories to their json file
|
||||
/datum/log_holder/proc/shutdown_logging()
|
||||
if(shutdown)
|
||||
|
||||
@@ -13,7 +13,6 @@ You can use the run_loc_floor_bottom_left and run_loc_floor_top_right to get tur
|
||||
|
||||
GLOBAL_DATUM(current_test, /datum/unit_test)
|
||||
GLOBAL_VAR_INIT(failed_any_test, FALSE)
|
||||
GLOBAL_VAR(test_log)
|
||||
/// When unit testing, all logs sent to log_mapping are stored here and retrieved in log_mapping unit test.
|
||||
GLOBAL_LIST_EMPTY(unit_test_mapping_logs)
|
||||
|
||||
|
||||
+1
-3
@@ -1,5 +1,5 @@
|
||||
//This file is just for the necessary /world definition
|
||||
//Try looking in game/world.dm
|
||||
//Try looking in /code/game/world.dm, where initialization order is defined
|
||||
|
||||
/**
|
||||
* # World
|
||||
@@ -7,8 +7,6 @@
|
||||
* Two possibilities exist: either we are alone in the Universe or we are not. Both are equally terrifying. ~ Arthur C. Clarke
|
||||
*
|
||||
* The byond world object stores some basic byond level config, and has a few hub specific procs for managing hub visiblity
|
||||
*
|
||||
* The world /New() is the root of where a round itself begins
|
||||
*/
|
||||
/world
|
||||
mob = /mob/dead/new_player
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
|
||||
You look around.
|
||||
|
||||
There is nothing but naught about you.
|
||||
|
||||
You've come to the end of the world.
|
||||
|
||||
You get a feeling that you really shouldn't be here.
|
||||
|
||||
Ever.
|
||||
|
||||
But with all ends come beginnings.
|
||||
|
||||
As you turn to leave, you spot it out of the corner of your eye.
|
||||
|
||||
Your eye widen in wonder as you look upon the the legendary treasure.
|
||||
|
||||
After all these years of pouring through shitcode
|
||||
your endevours have brought you to...
|
||||
|
||||
*/
|
||||
|
||||
/**
|
||||
* THE GENESIS CALL
|
||||
*
|
||||
* THE VERY FIRST LINE OF DM CODE TO EXECUTE
|
||||
* Ong this must be done after !!!EVERYTHING!!! else
|
||||
* NO IFS ANDS OR BUTS
|
||||
* it's a hack, not an example of any sort, and DEFINITELY should NOT be emulated
|
||||
* IT JUST HAS TO BE LAST!!!!!!
|
||||
* If you want to do something in the initialization pipeline
|
||||
* FIRST RTFM IN /code/game/world.dm
|
||||
* AND THEN NEVER RETURN TO THIS PLACE
|
||||
*
|
||||
*
|
||||
*
|
||||
* If you're still here, here's an explanation:
|
||||
* BYOND loves to tell you about its loving spouse /global
|
||||
* But it's actually having a sexy an affair with /static
|
||||
* Specifically statics in procs
|
||||
* Priority is given to these lines of code in REVERSE order of declaration in the .dme
|
||||
* Which is why this file has a funky name
|
||||
* So this is what we use to call world.Genesis()
|
||||
* It's a nameless, no-op function, because it does absolutely nothing
|
||||
* It exists to hold a static var which is initialized to null
|
||||
* It's on /world to hide it from reflection
|
||||
* Painful right? Good, now you share my suffering
|
||||
* Please lock the door on your way out
|
||||
*/
|
||||
/world/proc/_()
|
||||
var/static/_ = world.Genesis()
|
||||
+2
-2
@@ -16,7 +16,6 @@
|
||||
#include "_maps\_basemap.dm"
|
||||
#include "code\__byond_version_compat.dm"
|
||||
#include "code\_compile_options.dm"
|
||||
#include "code\_debugger.dm"
|
||||
#include "code\_experiments.dm"
|
||||
#include "code\world.dm"
|
||||
#include "code\__DEFINES\_atoms.dm"
|
||||
@@ -24,7 +23,6 @@
|
||||
#include "code\__DEFINES\_click.dm"
|
||||
#include "code\__DEFINES\_globals.dm"
|
||||
#include "code\__DEFINES\_helpers.dm"
|
||||
#include "code\__DEFINES\_profile.dm"
|
||||
#include "code\__DEFINES\_protect.dm"
|
||||
#include "code\__DEFINES\_tick.dm"
|
||||
#include "code\__DEFINES\access.dm"
|
||||
@@ -3788,6 +3786,7 @@
|
||||
#include "code\modules\lighting\static_lighting_area.dm"
|
||||
#include "code\modules\logging\log_category.dm"
|
||||
#include "code\modules\logging\log_holder.dm"
|
||||
#include "code\modules\logging\categories\log_category_silo.dm"
|
||||
#include "code\modules\logging\categories\log_category_target_zone_switch.dm"
|
||||
#include "code\modules\mafia\_defines.dm"
|
||||
#include "code\modules\mafia\controller.dm"
|
||||
@@ -5323,6 +5322,7 @@
|
||||
#include "code\modules\wiremod\shell\shell_items.dm"
|
||||
#include "code\modules\zombie\items.dm"
|
||||
#include "code\modules\zombie\organs.dm"
|
||||
#include "code\ze_genesis_call\genesis_call.dm"
|
||||
#include "interface\fonts.dm"
|
||||
#include "interface\interface.dm"
|
||||
#include "interface\menu.dm"
|
||||
|
||||
Reference in New Issue
Block a user