From c93e2c767941a7fbae0621fa13e53ab641c21365 Mon Sep 17 00:00:00 2001 From: Letter N <24603524+LetterN@users.noreply.github.com> Date: Thu, 12 Feb 2026 01:26:19 +0800 Subject: [PATCH] tracy (proper this time) and debugger (#7496) ## About The Pull Request port genisis proc from tg, also tracy & debugger is boxed in their own datums. also explode world.dm merg https://github.com/Citadel-Station-13/Citadel-Station-13-RP/pull/7495 and https://github.com/Citadel-Station-13/Citadel-Station-13-RP/pull/7497 before this one --- citadel.dme | 10 +- .../controllers/_subsystem-priority.dm | 4 +- code/__DEFINES/tracy.dm | 5 + code/__HELPERS/_auxtools_api.dm | 29 ----- code/_globals/configuration.dm | 2 +- code/controllers/master.dm | 2 +- code/controllers/subsystem/atoms.dm | 3 + code/controllers/subsystem/early_init.dm | 7 ++ code/controllers/subsystem/minimaps.dm | 1 + code/controllers/subsystem/overmaps.dm | 2 +- code/game/world.dm | 104 ++++++++++-------- code/genesis_call.dme | 52 +++++++++ code/modules/catalogue/catalogue_data.dm | 2 +- code/modules/debugging/debugger.dm | 54 +++++++++ code/modules/debugging/tracy.dm | 65 +++++++++++ code/modules/modular_computers/NTNet/NTNet.dm | 4 +- code/world.dm | 35 ++++++ 17 files changed, 296 insertions(+), 85 deletions(-) create mode 100644 code/__DEFINES/tracy.dm delete mode 100644 code/__HELPERS/_auxtools_api.dm create mode 100644 code/genesis_call.dme create mode 100644 code/modules/debugging/debugger.dm create mode 100644 code/modules/debugging/tracy.dm create mode 100644 code/world.dm diff --git a/citadel.dme b/citadel.dme index 21f4d74198a..bd1466f523a 100644 --- a/citadel.dme +++ b/citadel.dme @@ -1,6 +1,11 @@ // DM Environment file for citadel.dme // All manual changes should be made outside the BEGIN_ and END_ blocks. // New source code should be placed in .dm files: choose File/New --> Code File. + +// This should always be the VERY FIRST THING. No exceptions. Read the file for more info, but basically, this needs to be here so that we can ensure specific code is always the very first thing to execute. +#include "code\genesis_call.dme" +// Again, DO NOT MOVE IT OR ALLOW ANY OTHER #include TO PRECEDE THE ONE ABOVE. + // BEGIN_INTERNALS // END_INTERNALS @@ -20,6 +25,7 @@ #include "code\__global_init.dm" #include "code\_macros.dm" #include "code\global.dm" +#include "code\world.dm" #include "code\__DEFINES\_atoms.dm" #include "code\__DEFINES\_bitfields.dm" #include "code\__DEFINES\_bitfields_enums_legacy.dm" @@ -108,6 +114,7 @@ #include "code\__DEFINES\tgs.dm" #include "code\__DEFINES\tgui.dm" #include "code\__DEFINES\time.dm" +#include "code\__DEFINES\tracy.dm" #include "code\__DEFINES\transform.dm" #include "code\__DEFINES\turfs.dm" #include "code\__DEFINES\typeids.dm" @@ -399,7 +406,6 @@ #include "code\__DEFINES\turfs\flooring.dm" #include "code\__DEFINES\turfs\turfs.dm" #include "code\__DEFINES\turfs\type_generation.dm" -#include "code\__HELPERS\_auxtools_api.dm" #include "code\__HELPERS\_global_objects.dm" #include "code\__HELPERS\_lists_tg.dm" #include "code\__HELPERS\_logging.dm" @@ -3024,6 +3030,8 @@ #include "code\modules\clothing\under\workwear\oricon\service.dm" #include "code\modules\clothing\under\workwear\oricon\utility.dm" #include "code\modules\customitems\item_spawning.dm" +#include "code\modules\debugging\debugger.dm" +#include "code\modules\debugging\tracy.dm" #include "code\modules\detectivework\forensics.dm" #include "code\modules\detectivework\microscope\dnascanner.dm" #include "code\modules\detectivework\microscope\microscope.dm" diff --git a/code/__DEFINES/controllers/_subsystem-priority.dm b/code/__DEFINES/controllers/_subsystem-priority.dm index 49e0699e35a..024d36ffe56 100644 --- a/code/__DEFINES/controllers/_subsystem-priority.dm +++ b/code/__DEFINES/controllers/_subsystem-priority.dm @@ -49,7 +49,7 @@ #define FIRE_PRIORITY_OVERLAYS 100 #define FIRE_PRIORITY_SMOOTHING 100 #define FIRE_PRIORITY_CHAT 100 -#define FIRE_PRIORITY_INPUT 100 +#define FIRE_PRIORITY_INPUT 130 //? Ticker Subsystems - Highest priority // Any subsystem flagged with SS_TICKER is here! @@ -59,7 +59,7 @@ // DEFAULT PRIORITY IS HERE (50) #define FIRE_PRIORITY_DPC 100 -#define FIRE_PRIORITY_TIMER 100 +#define FIRE_PRIORITY_TIMER 120 // we need to fire above everyone else but not above input. //? Special diff --git a/code/__DEFINES/tracy.dm b/code/__DEFINES/tracy.dm new file mode 100644 index 00000000000..0a9ab8d68ee --- /dev/null +++ b/code/__DEFINES/tracy.dm @@ -0,0 +1,5 @@ +/// File path used for the "enable tracy next round" functionality +#define TRACY_ENABLE_PATH "data/enable_tracy" + +/// The DLL path for byond-tracy. +#define TRACY_DLL_PATH (world.system_type == MS_WINDOWS ? "prof.dll" : "./libprof.so") diff --git a/code/__HELPERS/_auxtools_api.dm b/code/__HELPERS/_auxtools_api.dm deleted file mode 100644 index ffbef3b0f74..00000000000 --- a/code/__HELPERS/_auxtools_api.dm +++ /dev/null @@ -1,29 +0,0 @@ -GLOBAL_LIST_EMPTY(auxtools_initialized) - -#define AUXTOOLS_CHECK(LIB)\ - if (!GLOB.auxtools_initialized[LIB]) {\ - if (fexists(LIB)) {\ - var/string = call(LIB,"auxtools_init")();\ - if(findtext(string, "SUCCESS")) {\ - GLOB.auxtools_initialized[LIB] = TRUE;\ - } else {\ - CRASH(string);\ - }\ - } else {\ - CRASH("No file named [LIB] found!")\ - }\ - }\ - -#define AUXTOOLS_SHUTDOWN(LIB)\ - if (GLOB.auxtools_initialized[LIB] && fexists(LIB)){\ - call(LIB,"auxtools_shutdown")();\ - GLOB.auxtools_initialized[LIB] = FALSE;\ - }\ - -// #define AUXTOOLS_YAML (world.system_type == MS_WINDOWS? "auxyaml.dll" : null) - -// /proc/yaml_encode(content) -// CRASH("auxtools didn't hook this") - -// /proc/yaml_decode(content) -// CRASH("auxtools didn't hook this") diff --git a/code/_globals/configuration.dm b/code/_globals/configuration.dm index b2670ee322c..86089fafdf2 100644 --- a/code/_globals/configuration.dm +++ b/code/_globals/configuration.dm @@ -1,5 +1,5 @@ GLOBAL_REAL(config, /datum/controller/configuration) -GLOBAL_DATUM(revdata, /datum/getrev) +GLOBAL_DATUM_INIT(revdata, /datum/getrev, new) GLOBAL_VAR_INIT(changelog_hash, "") diff --git a/code/controllers/master.dm b/code/controllers/master.dm index 5c32b89a1b3..079e03b05d9 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -10,7 +10,7 @@ /** * This is the ABSOLUTE ONLY THING that should init globally like this. */ -GLOBAL_REAL(Master, /datum/controller/master) = new +GLOBAL_REAL(Master, /datum/controller/master) /** * THIS IS THE INIT ORDER diff --git a/code/controllers/subsystem/atoms.dm b/code/controllers/subsystem/atoms.dm index ce03cc2859c..858d3271dd5 100644 --- a/code/controllers/subsystem/atoms.dm +++ b/code/controllers/subsystem/atoms.dm @@ -35,6 +35,9 @@ SUBSYSTEM_DEF(atoms) InitializeAtoms() atom_init_status = ATOM_INIT_IN_NEW_REGULAR + // HACK: fucking overmaps r so stupid (cant move its order to front of atoms YET) + SSovermaps.rebuild_helm_computers() + // end hack return SS_INIT_SUCCESS /datum/controller/subsystem/atoms/proc/InitializeAtoms(list/atoms, list/atoms_to_return) diff --git a/code/controllers/subsystem/early_init.dm b/code/controllers/subsystem/early_init.dm index afe2ab418e9..dfe2e0429b6 100644 --- a/code/controllers/subsystem/early_init.dm +++ b/code/controllers/subsystem/early_init.dm @@ -5,6 +5,13 @@ SUBSYSTEM_DEF(early_init) subsystem_flags = SS_NO_FIRE /datum/controller/subsystem/early_init/Initialize() + if (!GLOB.catalogue_data) + GLOB.catalogue_data = new + if (!ntnet_global) + ntnet_global = new // temporary house + ntnet_global.initialize_ntnet() + CHECK_TICK + init_bitfield_meta() init_emote_meta() init_crayon_decal_meta() diff --git a/code/controllers/subsystem/minimaps.dm b/code/controllers/subsystem/minimaps.dm index 63a4d3bb9a1..bcf9cd4876f 100644 --- a/code/controllers/subsystem/minimaps.dm +++ b/code/controllers/subsystem/minimaps.dm @@ -23,4 +23,5 @@ SUBSYSTEM_DEF(minimaps) */ var/name = "[z] - Station" station_minimaps += new /datum/minimap(z, name = name) + CHECK_TICK station_minimap = new(station_minimaps, "Station") diff --git a/code/controllers/subsystem/overmaps.dm b/code/controllers/subsystem/overmaps.dm index 01d8efb1df3..679ad6b9dfb 100644 --- a/code/controllers/subsystem/overmaps.dm +++ b/code/controllers/subsystem/overmaps.dm @@ -74,7 +74,7 @@ SUBSYSTEM_DEF(overmaps) // queues a rebuild_helm_computers(), as it's very expensive to run. /datum/controller/subsystem/overmaps/proc/queue_helm_computer_rebuild() - if(!initialized) + if(!initialized || !SSatoms.initialized) // see ssatoms init. return addtimer(CALLBACK(src, PROC_REF(rebuild_helm_computers)), 0, TIMER_UNIQUE) diff --git a/code/game/world.dm b/code/game/world.dm index f5a9f222a93..06b86550ebc 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -1,36 +1,12 @@ #define RESTART_COUNTER_PATH "data/round_counter.txt" +/// Load byond-tracy. If USE_BYOND_TRACY is defined, then this is ignored and byond-tracy is always loaded. +#define USE_TRACY_PARAMETER "tracy" GLOBAL_VAR(restart_counter) GLOBAL_VAR_INIT(hub_visibility, TRUE) GLOBAL_VAR(topic_status_lastcache) GLOBAL_LIST(topic_status_cache) -/world - mob = /mob/new_player - // TODO: replace with /turf/unallocated - // -- DO NOT USE THIS TURF ANYWHERE ELSE! -- - // -- DO NOT EVEN REFERENCE WORLD.TURF OTHER THAN TO CHECK FOR IT. -- - turf = /turf/space/basic - // TODO: replace with /area/unallocated - area = /area/space - view = "15x15" - name = "Citadel Station 13 - Roleplay" - status = "ERROR: Default status" - /// world visibility. this should never, ever be touched. - /// a weird byond bug yet to be resolved is probably making this - /// permanently delist the server if this is disabled at any point. - visibility = TRUE - /// static value, do not change - hub = "Exadv1.spacestation13" - /// static value, do not change, except to toggle visibility - /// * use this instead of `visibility` to toggle, via `update_hub_visibility` - hub_password = "kMZy3U5jJHSiBQjr" - movement_mode = PIXEL_MOVEMENT_MODE - fps = 20 -#ifdef FIND_REF_NO_CHECK_TICK - loop_checks = FALSE -#endif - /** * WORLD INITIALIZATION * THIS IS THE INIT ORDER: @@ -63,6 +39,49 @@ GLOBAL_LIST(topic_status_cache) * - world.RunUnattendedFunctions() */ +/** + * THIS !!!SINGLE!!! PROC IS WHERE ANY FORM OF INIITIALIZATION THAT CAN'T BE PERFORMED IN SUBSYSTEMS OR WORLD/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) + + if(!tracy_initialized) + Tracy = new +#ifdef USE_BYOND_TRACY + if(Tracy.enable("USE_BYOND_TRACY defined")) + Genesis(tracy_initialized = TRUE) + return +#else + var/tracy_enable_reason + if(USE_TRACY_PARAMETER in params) + tracy_enable_reason = "world.params" + if(fexists(TRACY_ENABLE_PATH)) + tracy_enable_reason ||= "enabled for round" + SEND_TEXT(world.log, "[TRACY_ENABLE_PATH] exists, initializing byond-tracy!") + fdel(TRACY_ENABLE_PATH) + if(!isnull(tracy_enable_reason) && Tracy.enable(tracy_enable_reason)) + 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 + var/tempfile = "data/logs/config_error.[GUID()].log" //temporary file used to record errors with loading config, moved to log directory once logging is set + // citadel edit: world runtime log removed due to world.log shunt doing that for us + GLOB.config_error_log = GLOB.world_href_log = GLOB.world_map_error_log = GLOB.world_attack_log = GLOB.world_game_log = tempfile + + // Init the debugger first so we can debug Master + Debugger = new + + // THAT'S IT, WE'RE DONE, THE. FUCKING. END. + Master = new + /** * World creation * @@ -90,24 +109,13 @@ GLOBAL_LIST(topic_status_cache) * 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()]!") - var/tempfile = "data/logs/config_error.[GUID()].log" //temporary file used to record errors with loading config, moved to log directory once logging is set - // citadel edit: world runtime log removed due to world.log shunt doing that for us - GLOB.config_error_log = GLOB.world_href_log = GLOB.world_map_error_log = GLOB.world_attack_log = GLOB.world_game_log = tempfile - - world.Profile(PROFILE_START) - setupgenetics() - - GLOB.revdata = new - // First possible sleep() InitTgs() + setupgenetics() + // load configuration load_legacy_configuration() config.Load(params[OVERRIDE_CONFIG_DIRECTORY_PARAMETER]) @@ -378,18 +386,16 @@ GLOBAL_LIST(topic_status_cache) if(check_hard_reboot()) log_world("World hard rebooted at [time_stamp()]") shutdown_logging() // See comment below. + QDEL_NULL(Tracy) + QDEL_NULL(Debugger) TgsEndProcess() return ..() log_world("World rebooted at [time_stamp()]") shutdown_logging() // Past this point, no logging procs can be used, at risk of data loss. - - TgsReboot() // TGS can decide to kill us right here, so it's important to do it last - - - //! Shutdown Auxtools - // AUXTOOLS_SHUTDOWN(AUXTOOLS_YAML) + QDEL_NULL(Tracy) + QDEL_NULL(Debugger) //! Finale // hmmm let's sleep for one (1) second incase rust_g threads are running for whatever reason @@ -398,9 +404,8 @@ GLOBAL_LIST(topic_status_cache) ..() /world/Del() - var/debug_server = world.GetConfig("env", "AUXTOOLS_DEBUG_DLL") - if (debug_server) - call_ext(debug_server, "auxtools_shutdown")() + QDEL_NULL(Tracy) + QDEL_NULL(Debugger) . = ..() /legacy_hook/startup/proc/loadMode() @@ -670,3 +675,6 @@ GLOBAL_LIST(topic_status_cache) var/init_result = call(library, "init")() if (init_result != "0") CRASH("Error initializing byond-tracy: [init_result]") + +#undef USE_TRACY_PARAMETER +#undef RESTART_COUNTER_PATH diff --git a/code/genesis_call.dme b/code/genesis_call.dme new file mode 100644 index 00000000000..2466af786c1 --- /dev/null +++ b/code/genesis_call.dme @@ -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 before !!!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 FIRST!!!!!! + * 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() diff --git a/code/modules/catalogue/catalogue_data.dm b/code/modules/catalogue/catalogue_data.dm index 0e2153fbe97..abb1d8d17f2 100644 --- a/code/modules/catalogue/catalogue_data.dm +++ b/code/modules/catalogue/catalogue_data.dm @@ -1,4 +1,4 @@ -GLOBAL_DATUM_INIT(catalogue_data, /datum/category_collection/catalogue, new) +GLOBAL_DATUM(catalogue_data, /datum/category_collection/catalogue) // The collection holds everything together and is GLOB accessible. /datum/category_collection/catalogue diff --git a/code/modules/debugging/debugger.dm b/code/modules/debugging/debugger.dm new file mode 100644 index 00000000000..6ae39399591 --- /dev/null +++ b/code/modules/debugging/debugger.dm @@ -0,0 +1,54 @@ +/// The debugger instance. +/// This is a GLOBAL_REAL because it initializes before the MC or GLOB. +/// Really only used to check to see if the debugger is enabled or not, +/// and to separate debugger-related code into its own thing. +GLOBAL_REAL(Debugger, /datum/debugger) + +/datum/debugger + /// Is the debugger enabled? + VAR_FINAL/enabled = FALSE + /// The error text, if initializing the debugger errored. + VAR_FINAL/error + /// The path to the auxtools debug DLL, if it sets. + /// Defaults to the environmental variable AUXTOOLS_DEBUG_DLL. + VAR_FINAL/dll_path + +/datum/debugger/New(dll_path) + if(!isnull(Debugger)) + CRASH("Attempted to initialize /datum/debugger when global.Debugger is already set!") + Debugger = src +#ifndef OPENDREAM_REAL + src.dll_path = dll_path || world.GetConfig("env", "AUXTOOLS_DEBUG_DLL") + enable() +#endif + +/datum/debugger/Destroy() +#ifndef OPENDREAM_REAL + if(enabled) + call_ext(dll_path, "auxtools_shutdown")() +#endif + return ..() + +/// Attempt to enable the debugger. +/datum/debugger/proc/enable() +#ifndef OPENDREAM_REAL + if(enabled) + CRASH("Attempted to enable debugger while its already enabled, somehow.") + if(!dll_path) + return FALSE + var/result = call_ext(dll_path, "auxtools_init")() + if(result != "SUCCESS") + error = result + return FALSE + enable_debugging() + enabled = TRUE + return TRUE +#else + return FALSE +#endif + +/datum/debugger/vv_edit_var(var_name, var_value) + return FALSE // no. + +/datum/debugger/CanProcCall(procname) + return FALSE // double no. diff --git a/code/modules/debugging/tracy.dm b/code/modules/debugging/tracy.dm new file mode 100644 index 00000000000..ac661466e9d --- /dev/null +++ b/code/modules/debugging/tracy.dm @@ -0,0 +1,65 @@ +/// The byond-tracy instance. +/// This is a GLOBAL_REAL because it is the VERY FIRST THING to initialize, even before the MC or GLOB. +GLOBAL_REAL(Tracy, /datum/tracy) + +/datum/tracy + /// Is byond-tracy enabled and running? + VAR_FINAL/enabled = FALSE + /// The error text, if initializing byond-tracy errored. + VAR_FINAL/error + /// A description of what / who enabled byond-tracy. + VAR_FINAL/init_reason + /// A path to the file containing the output trace, if any. + VAR_FINAL/trace_path + +/datum/tracy/New() + if(!isnull(Tracy)) + CRASH("Attempted to initialize /datum/tracy when global.Tracy is already set!") + Tracy = src + +/datum/tracy/Destroy() +#ifndef OPENDREAM_REAL + if(enabled) + call_ext(TRACY_DLL_PATH, "destroy")() +#endif + return ..() + +/// Tries to initialize byond-tracy. +/datum/tracy/proc/enable(init_reason) +#ifndef OPENDREAM_REAL + if(enabled) + return TRUE + src.init_reason = init_reason + if(!fexists(TRACY_DLL_PATH)) + error = "[TRACY_DLL_PATH] not found" + SEND_TEXT(world.log, "Error initializing byond-tracy: [error]") + return FALSE + + var/init_result = call_ext(TRACY_DLL_PATH, "init")("block") + if(length(init_result) != 0 && init_result[1] == ".") // if first character is ., then it returned the output filename + SEND_TEXT(world.log, "byond-tracy initialized (logfile: [init_result])") + enabled = TRUE + trace_path = init_result + return TRUE + else if(init_result == "already initialized") // not gonna question it. + enabled = TRUE + SEND_TEXT(world.log, "byond-tracy already initialized ([trace_path ? "logfile: [trace_path]" : "no logfile"])") + return TRUE + else if(init_result != "0") + error = init_result + SEND_TEXT(world.log, "Error initializing byond-tracy: [init_result]") + return FALSE + else + enabled = TRUE + SEND_TEXT(world.log, "byond-tracy initialized (no logfile)") + return TRUE +#else + error = "OpenDream not supported" + return FALSE +#endif + +/datum/tracy/vv_edit_var(var_name, var_value) + return FALSE // no. + +/datum/tracy/CanProcCall(procname) + return FALSE // double no. diff --git a/code/modules/modular_computers/NTNet/NTNet.dm b/code/modules/modular_computers/NTNet/NTNet.dm index 1c5f96b523b..fff660ab1f9 100644 --- a/code/modules/modular_computers/NTNet/NTNet.dm +++ b/code/modules/modular_computers/NTNet/NTNet.dm @@ -1,4 +1,4 @@ -var/global/datum/ntnet/ntnet_global = new() +var/global/datum/ntnet/ntnet_global // This is the NTNet datum. There can be only one NTNet datum in game at once. Modular computers read data from this. @@ -31,6 +31,8 @@ var/global/datum/ntnet/ntnet_global = new() /datum/ntnet/New() if(ntnet_global && (ntnet_global != src)) ntnet_global = src // There can be only one. + +/datum/ntnet/proc/initialize_ntnet() for(var/obj/machinery/ntnet_relay/R in GLOB.machines) relays.Add(R) R.NTNet = src diff --git a/code/world.dm b/code/world.dm new file mode 100644 index 00000000000..5474d4b945a --- /dev/null +++ b/code/world.dm @@ -0,0 +1,35 @@ +//This file is just for the necessary /world definition +//Try looking in /code/game/world.dm, where initialization order is defined + +/** + * # World + * + * 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 visibility + */ +/world + mob = /mob/new_player + // TODO: replace with /turf/unallocated + // -- DO NOT USE THIS TURF ANYWHERE ELSE! -- + // -- DO NOT EVEN REFERENCE WORLD.TURF OTHER THAN TO CHECK FOR IT. -- + turf = /turf/space/basic + // TODO: replace with /area/unallocated + area = /area/space + view = "15x15" + name = "Citadel Station 13 - Roleplay" + status = "ERROR: Default status" + /// world visibility. this should never, ever be touched. + /// a weird byond bug yet to be resolved is probably making this + /// permanently delist the server if this is disabled at any point. + visibility = TRUE + /// static value, do not change + hub = "Exadv1.spacestation13" + /// static value, do not change, except to toggle visibility + /// * use this instead of `visibility` to toggle, via `update_hub_visibility` + hub_password = "kMZy3U5jJHSiBQjr" + movement_mode = PIXEL_MOVEMENT_MODE + fps = 20 +#ifdef FIND_REF_NO_CHECK_TICK + loop_checks = FALSE +#endif