diff --git a/code/_onclick/hud/credits.dm b/code/_onclick/hud/credits.dm
index 8f20f218ac2..702aa1cdcb8 100644
--- a/code/_onclick/hud/credits.dm
+++ b/code/_onclick/hud/credits.dm
@@ -2,7 +2,7 @@
#define CREDIT_SPAWN_SPEED 10
#define CREDIT_ANIMATE_HEIGHT (14 * world.icon_size)
#define CREDIT_EASE_DURATION 22
-#define CREDITS_PATH "[GLOB.config_dir]contributors.dmi"
+#define CREDITS_PATH "[global.config.directory]/contributors.dmi"
/client/proc/RollCredits()
set waitfor = FALSE
diff --git a/code/controllers/configuration/configuration.dm b/code/controllers/configuration/configuration.dm
index 6e2a050fd07..8db99180dd0 100644
--- a/code/controllers/configuration/configuration.dm
+++ b/code/controllers/configuration/configuration.dm
@@ -1,9 +1,8 @@
-GLOBAL_VAR_INIT(config_dir, "config/")
-GLOBAL_PROTECT(config_dir)
-
/datum/controller/configuration
name = "Configuration"
+ var/directory = "config"
+
var/hiding_entries_by_type = TRUE //Set for readability, admins can set this to FALSE if they want to debug it
var/list/entries
var/list/entries_by_type
@@ -24,7 +23,7 @@ GLOBAL_PROTECT(config_dir)
config = src
InitEntries()
LoadModes()
- if(fexists("config/config.txt") && LoadEntries("config.txt") <= 1)
+ if(fexists("[directory]/config.txt") && LoadEntries("config.txt") <= 1)
log_config("No $include directives found in config.txt! Loading legacy game_options/dbconfig/comms files...")
LoadEntries("game_options.txt")
LoadEntries("dbconfig.txt")
@@ -74,7 +73,7 @@ GLOBAL_PROTECT(config_dir)
stack = stack + filename_to_test
log_config("Loading config file [filename]...")
- var/list/lines = world.file2list("[GLOB.config_dir][filename]")
+ var/list/lines = world.file2list("[directory]/[filename]")
var/list/_entries = entries
for(var/L in lines)
if(!L)
@@ -131,10 +130,11 @@ GLOBAL_PROTECT(config_dir)
++.
/datum/controller/configuration/can_vv_get(var_name)
- return (var_name != "entries_by_type" || !hiding_entries_by_type) && ..()
+ return (var_name != NAMEOF(src, entries_by_type) || !hiding_entries_by_type) && ..()
/datum/controller/configuration/vv_edit_var(var_name, var_value)
- return !(var_name in list("entries_by_type", "entries")) && ..()
+ var/list/banned_edits = list(NAMEOF(src, entries_by_type), NAMEOF(src, entries), NAMEOF(src, directory))
+ return !(var_name in banned_edits) && ..()
/datum/controller/configuration/stat_entry()
if(!statclick)
@@ -196,14 +196,14 @@ GLOBAL_PROTECT(config_dir)
votable_modes += "secret"
/datum/controller/configuration/proc/LoadMOTD()
- motd = file2text("[GLOB.config_dir]/motd.txt")
+ motd = file2text("[directory]/motd.txt")
var/tm_info = GLOB.revdata.GetTestMergeInfo()
if(motd || tm_info)
motd = motd ? "[motd]
[tm_info]" : tm_info
/datum/controller/configuration/proc/loadmaplist(filename)
log_config("Loading config file [filename]...")
- filename = "[GLOB.config_dir][filename]"
+ filename = "[directory]/[filename]"
var/list/Lines = world.file2list(filename)
var/datum/map_config/currentmap = null
diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm
index 5e780731a30..4e185300c24 100644
--- a/code/controllers/subsystem/job.dm
+++ b/code/controllers/subsystem/job.dm
@@ -443,7 +443,7 @@ SUBSYSTEM_DEF(job)
/datum/controller/subsystem/job/proc/LoadJobs()
- var/jobstext = file2text("config/jobs.txt")
+ var/jobstext = file2text("[global.config.directory]/jobs.txt")
for(var/datum/job/J in occupations)
var/regex/jobs = new("[J.title]=(-1|\\d+),(-1|\\d+)")
jobs.Find(jobstext)
diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm
index 8046dab41e3..efce03f0821 100644
--- a/code/controllers/subsystem/mapping.dm
+++ b/code/controllers/subsystem/mapping.dm
@@ -229,8 +229,8 @@ GLOBAL_LIST_EMPTY(the_station_areas)
/datum/controller/subsystem/mapping/proc/preloadRuinTemplates()
// Still supporting bans by filename
- var/list/banned = generateMapList("config/lavaruinblacklist.txt")
- banned += generateMapList("config/spaceruinblacklist.txt")
+ var/list/banned = generateMapList("[global.config.directory]/lavaruinblacklist.txt")
+ banned += generateMapList("[global.config.directory]/spaceruinblacklist.txt")
for(var/item in sortList(subtypesof(/datum/map_template/ruin), /proc/cmp_ruincost_priority))
var/datum/map_template/ruin/ruin_type = item
@@ -251,7 +251,7 @@ GLOBAL_LIST_EMPTY(the_station_areas)
space_ruins_templates[R.name] = R
/datum/controller/subsystem/mapping/proc/preloadShuttleTemplates()
- var/list/unbuyable = generateMapList("config/unbuyableshuttles.txt")
+ var/list/unbuyable = generateMapList("[global.config.directory]/unbuyableshuttles.txt")
for(var/item in subtypesof(/datum/map_template/shuttle))
var/datum/map_template/shuttle/shuttle_type = item
diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm
index 4e7c41d1400..eab8da98679 100755
--- a/code/controllers/subsystem/ticker.dm
+++ b/code/controllers/subsystem/ticker.dm
@@ -82,7 +82,7 @@ SUBSYSTEM_DEF(ticker)
"aiff" = TRUE
)
- var/list/provisional_title_music = flist("config/title_music/sounds/")
+ var/list/provisional_title_music = flist("[global.config.directory]/title_music/sounds/")
var/list/music = list()
var/use_rare_music = prob(1)
@@ -118,7 +118,7 @@ SUBSYSTEM_DEF(ticker)
music = world.file2list(ROUND_START_MUSIC_LIST, "\n")
login_music = pick(music)
else
- login_music = "config/title_music/sounds/[pick(music)]"
+ login_music = "[global.config.directory]/title_music/sounds/[pick(music)]"
if(!GLOB.syndicate_code_phrase)
diff --git a/code/controllers/subsystem/title.dm b/code/controllers/subsystem/title.dm
index 6445ea2fbc1..94dff9b7425 100644
--- a/code/controllers/subsystem/title.dm
+++ b/code/controllers/subsystem/title.dm
@@ -17,7 +17,7 @@ SUBSYSTEM_DEF(title)
previous_icon = new(previous_icon)
fdel("data/previous_title.dat")
- var/list/provisional_title_screens = flist("config/title_screens/images/")
+ var/list/provisional_title_screens = flist("[global.config.directory]/title_screens/images/")
var/list/title_screens = list()
var/use_rare_screens = prob(1)
@@ -27,8 +27,8 @@ SUBSYSTEM_DEF(title)
title_screens += S
if(length(title_screens))
- file_path = "config/title_screens/images/[pick(title_screens)]"
-
+ file_path = "[global.config.directory]/title_screens/images/[pick(title_screens)]"
+
if(!file_path)
file_path = "icons/default_title.dmi"
diff --git a/code/datums/ai_laws.dm b/code/datums/ai_laws.dm
index c12a08a7928..e45ff4535b2 100644
--- a/code/datums/ai_laws.dm
+++ b/code/datums/ai_laws.dm
@@ -190,7 +190,7 @@
/datum/ai_laws/custom/New() //This reads silicon_laws.txt and allows server hosts to set custom AI starting laws.
..()
- for(var/line in world.file2list("config/silicon_laws.txt"))
+ for(var/line in world.file2list("[global.config.directory]/silicon_laws.txt"))
if(!line)
continue
if(findtextEx(line,"#",1,2))
diff --git a/code/game/objects/items/AI_modules.dm b/code/game/objects/items/AI_modules.dm
index 9cc28a1b4b7..919bea60b4b 100644
--- a/code/game/objects/items/AI_modules.dm
+++ b/code/game/objects/items/AI_modules.dm
@@ -400,7 +400,7 @@ AI MODULES
/obj/item/aiModule/core/full/custom/Initialize()
. = ..()
- for(var/line in world.file2list("config/silicon_laws.txt"))
+ for(var/line in world.file2list("[global.config.directory]/silicon_laws.txt"))
if(!line)
continue
if(findtextEx(line,"#",1,2))
diff --git a/code/game/world.dm b/code/game/world.dm
index 33dad9a72b1..574875d996f 100644
--- a/code/game/world.dm
+++ b/code/game/world.dm
@@ -43,7 +43,7 @@ GLOBAL_PROTECT(security_mode)
/world/proc/SetupExternalRSC()
#if (PRELOAD_RSC == 0)
- GLOB.external_rsc_urls = world.file2list("config/external_rsc_urls.txt","\n")
+ GLOB.external_rsc_urls = world.file2list("[global.config.directory]/external_rsc_urls.txt","\n")
var/i=1
while(i<=GLOB.external_rsc_urls.len)
if(GLOB.external_rsc_urls[i])
diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm
index 7332eab8d05..6824171f802 100644
--- a/code/modules/admin/admin_ranks.dm
+++ b/code/modules/admin/admin_ranks.dm
@@ -122,7 +122,7 @@ GLOBAL_PROTECT(admin_ranks)
if(CONFIG_GET(flag/admin_legacy_system))
var/previous_rights = 0
//load text from file and process each line separately
- for(var/line in world.file2list("config/admin_ranks.txt"))
+ for(var/line in world.file2list("[global.config.directory]/admin_ranks.txt"))
if(!line)
continue
if(findtextEx(line,"#",1,2))
@@ -195,7 +195,7 @@ GLOBAL_PROTECT(admin_ranks)
if(CONFIG_GET(flag/admin_legacy_system))
//load text from file
- var/list/lines = world.file2list("config/admins.txt")
+ var/list/lines = world.file2list("[global.config.directory]/admins.txt")
//process each line separately
for(var/line in lines)
diff --git a/code/modules/admin/verbs/deadsay.dm b/code/modules/admin/verbs/deadsay.dm
index 491d058feae..8d24e92e81f 100644
--- a/code/modules/admin/verbs/deadsay.dm
+++ b/code/modules/admin/verbs/deadsay.dm
@@ -19,7 +19,7 @@
if (!msg)
return
- var/static/nicknames = world.file2list("config/admin_nicknames.txt")
+ var/static/nicknames = world.file2list("[global.config.directory]/admin_nicknames.txt")
var/rendered = "DEAD: ADMIN([src.holder.fakekey ? pick(nicknames) : src.key]) says, \"[msg]\""
diff --git a/code/modules/admin/whitelist.dm b/code/modules/admin/whitelist.dm
index 082936e0e85..55206f6debb 100644
--- a/code/modules/admin/whitelist.dm
+++ b/code/modules/admin/whitelist.dm
@@ -1,4 +1,4 @@
-#define WHITELISTFILE "config/whitelist.txt"
+#define WHITELISTFILE "[global.config.directory]/whitelist.txt"
GLOBAL_LIST(whitelist)
GLOBAL_PROTECT(whitelist)
diff --git a/code/modules/awaymissions/zlevel.dm b/code/modules/awaymissions/zlevel.dm
index b321b8ae945..a8f68511515 100644
--- a/code/modules/awaymissions/zlevel.dm
+++ b/code/modules/awaymissions/zlevel.dm
@@ -1,5 +1,5 @@
// How much "space" we give the edge of the map
-GLOBAL_LIST_INIT(potentialRandomZlevels, generateMapList(filename = "config/awaymissionconfig.txt"))
+GLOBAL_LIST_INIT(potentialRandomZlevels, generateMapList(filename = "[global.config.directory]/awaymissionconfig.txt"))
/proc/createRandomZlevel()
if(GLOB.awaydestinations.len) //crude, but it saves another var!