diff --git a/code/__DEFINES/antagonists.dm b/code/__DEFINES/antagonists.dm
index 71b05eadd2f..70cbcb951e2 100644
--- a/code/__DEFINES/antagonists.dm
+++ b/code/__DEFINES/antagonists.dm
@@ -456,3 +456,9 @@ GLOBAL_LIST_INIT(human_invader_antagonists, list(
#define BATTLE_ROYALE_CAMERA_NET "battle_royale_camera_net"
#define MALF_MAX_PP 400
+
+//Uplink spawn loc
+#define UPLINK_PDA "PDA"
+#define UPLINK_RADIO "Radio"
+#define UPLINK_PEN "Pen" //like a real spy!
+#define UPLINK_IMPLANT "Implant"
diff --git a/code/__DEFINES/clothing.dm b/code/__DEFINES/clothing.dm
index a6370218fd4..805d3eccb38 100644
--- a/code/__DEFINES/clothing.dm
+++ b/code/__DEFINES/clothing.dm
@@ -42,3 +42,29 @@
/// How much integrity does a shirt lose every time we bite it?
#define MOTH_EATING_CLOTHING_DAMAGE 15
+
+//Suit/Skirt
+/// Preference: Jumpsuit
+#define PREF_SUIT "Jumpsuit"
+/// Preference: Jumpskirt
+#define PREF_SKIRT "Jumpskirt"
+
+// Types of backpack
+/// Backpack type: Department themed backpack
+#define DBACKPACK "Department Backpack"
+/// Backpack type: Department themed duffelbag
+#define DDUFFELBAG "Department Duffel Bag"
+/// Backpack type: Department themed satchel
+#define DSATCHEL "Department Satchel"
+/// Backpack type: Department themed messenger bag
+#define DMESSENGER "Department Messenger Bag"
+/// Backpack type: Grey backpack
+#define GBACKPACK "Grey Backpack"
+/// Backpack type: Grey duffelbag
+#define GDUFFELBAG "Grey Duffel Bag"
+/// Backpack type: Grey satchel
+#define GSATCHEL "Grey Satchel"
+/// Backpack type: Grey messenger bag
+#define GMESSENGER "Grey Messenger Bag"
+/// Backpack type: Leather satchel
+#define LSATCHEL "Leather Satchel"
diff --git a/code/__HELPERS/names.dm b/code/__HELPERS/names.dm
index 89541c1c187..55b9f23b658 100644
--- a/code/__HELPERS/names.dm
+++ b/code/__HELPERS/names.dm
@@ -399,3 +399,11 @@ GLOBAL_DATUM(syndicate_code_response_regex, /regex)
if(breaks.Find(given_name))
return FALSE
return TRUE
+
+/// Build a list of strings containing the numbers 1-99 as both arabic and roman numerals
+/proc/generate_number_strings()
+ var/list/L[198]
+ for(var/i in 1 to 99)
+ L += "[i]"
+ L += "\Roman[i]"
+ return L
diff --git a/code/_globalvars/lists/clothing.dm b/code/_globalvars/lists/clothing.dm
new file mode 100644
index 00000000000..674a32664a7
--- /dev/null
+++ b/code/_globalvars/lists/clothing.dm
@@ -0,0 +1,11 @@
+GLOBAL_LIST_INIT(backpacklist, list(
+ DBACKPACK,
+ DDUFFELBAG,
+ DSATCHEL,
+ DMESSENGER,
+ GBACKPACK,
+ GDUFFELBAG,
+ GSATCHEL,
+ GMESSENGER,
+ LSATCHEL,
+))
diff --git a/code/_globalvars/lists/color.dm b/code/_globalvars/lists/color.dm
index 1a195798f46..22bb20a4cfc 100644
--- a/code/_globalvars/lists/color.dm
+++ b/code/_globalvars/lists/color.dm
@@ -25,3 +25,35 @@ GLOBAL_LIST_INIT(carp_colors, list(
COLOR_CARP_PALE_GREEN = 7,
COLOR_CARP_SILVER = 1, // The rare silver carp
))
+
+/// List of possible ethereal colours
+GLOBAL_LIST_INIT(color_list_ethereal, list(
+ "Blue" = "#3399ff",
+ "Bright Yellow" = "#ffff99",
+ "Burnt Orange" = "#cc4400",
+ "Cyan Blue" = "#00ffff",
+ "Dark Blue" = "#6666ff",
+ "Dark Fuschia" = "#cc0066",
+ "Dark Green" = "#37835b",
+ "Dark Red" = "#9c3030",
+ "Dull Yellow" = "#fbdf56",
+ "Faint Blue" = "#b3d9ff",
+ "Faint Green" = "#ddff99",
+ "Faint Red" = "#ffb3b3",
+ "Green" = "#97ee63",
+ "Orange" = "#ffa64d",
+ "Pink" = "#ff99cc",
+ "Purple" = "#ee82ee",
+ "Red" = "#ff4d4d",
+ "Seafoam Green" = "#00fa9a",
+ "White" = "#f2f2f2",
+))
+
+/// List of possible lustrous ethereal colours
+GLOBAL_LIST_INIT(color_list_lustrous, list(
+ "Cyan Blue" = "#00ffff",
+ "Sky Blue" = "#37c0ff",
+ "Blue" = "#3374ff",
+ "Dark Blue" = "#5b5beb",
+ "Bright Red" = "#fa2d2d",
+))
diff --git a/code/_globalvars/lists/communication.dm b/code/_globalvars/lists/communication.dm
new file mode 100644
index 00000000000..c13cf6c03b3
--- /dev/null
+++ b/code/_globalvars/lists/communication.dm
@@ -0,0 +1,13 @@
+GLOBAL_LIST_INIT(admiral_messages, list(
+ "Error: No comment given.",
+ "null",
+ "Do you know how expensive these stations are?",
+ "I was sleeping, thanks a lot.",
+ "It's a good day to die!",
+ "No.",
+ "Stand and fight you cowards!",
+ "Stop being paranoid.",
+ "Stop wasting my time.",
+ "Whatever's broken just build a new one.",
+ "You knew the risks coming in.",
+))
diff --git a/code/_globalvars/lists/department.dm b/code/_globalvars/lists/department.dm
new file mode 100644
index 00000000000..2ec4a15d418
--- /dev/null
+++ b/code/_globalvars/lists/department.dm
@@ -0,0 +1,7 @@
+GLOBAL_LIST_INIT(security_depts_prefs, sort_list(list(
+ SEC_DEPT_ENGINEERING,
+ SEC_DEPT_MEDICAL,
+ SEC_DEPT_NONE,
+ SEC_DEPT_SCIENCE,
+ SEC_DEPT_SUPPLY,
+)))
diff --git a/code/_globalvars/lists/disposals.dm b/code/_globalvars/lists/disposals.dm
new file mode 100644
index 00000000000..f543343f3ed
--- /dev/null
+++ b/code/_globalvars/lists/disposals.dm
@@ -0,0 +1,52 @@
+// Reference list for disposal sort junctions. Set the sortType variable on disposal sort junctions to
+// the index of the sort department that you want. For example, sortType set to 2 will reroute all packages
+// tagged for the Cargo Bay.
+
+/* List of sortType codes for mapping reference
+0 Waste
+1 Disposals - All unwrapped items and untagged parcels get picked up by a junction with this sortType. Usually leads to the recycler.
+2 Cargo Bay
+3 QM Office
+4 Engineering
+5 CE Office
+6 Atmospherics
+7 Security
+8 HoS Office
+9 Medbay
+10 CMO Office
+11 Chemistry
+12 Research
+13 RD Office
+14 Robotics
+15 HoP Office
+16 Library
+17 Chapel
+18 Theatre
+19 Bar
+20 Kitchen
+21 Hydroponics
+22 Janitor
+23 Genetics
+24 Experimentor Lab
+25 Ordnance
+26 Dormitories
+27 Virology
+28 Xenobiology
+29 Law Office
+30 Detective's Office
+*/
+
+//The whole system for the sorttype var is determined based on the order of this list,
+//disposals must always be 1, since anything that's untagged will automatically go to disposals, or sorttype = 1 --Superxpdude
+
+//If you don't want to fuck up disposals, add to this list, and don't change the order.
+//If you insist on changing the order, you'll have to change every sort junction to reflect the new order. --Pete
+
+GLOBAL_LIST_INIT(TAGGERLOCATIONS, list("Disposals",
+ "Cargo Bay", "QM Office", "Engineering", "CE Office",
+ "Atmospherics", "Security", "HoS Office", "Medbay",
+ "CMO Office", "Chemistry", "Research", "RD Office",
+ "Robotics", "HoP Office", "Library", "Chapel", "Theatre",
+ "Bar", "Kitchen", "Hydroponics", "Janitor Closet","Genetics",
+ "Experimentor Lab", "Ordnance", "Dormitories", "Virology",
+ "Xenobiology", "Law Office","Detective's Office"))
diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm
deleted file mode 100644
index 13fbd4a80a0..00000000000
--- a/code/_globalvars/lists/flavor_misc.dm
+++ /dev/null
@@ -1,284 +0,0 @@
-GLOBAL_LIST_INIT(color_list_ethereal, list(
- "Blue" = "#3399ff",
- "Bright Yellow" = "#ffff99",
- "Burnt Orange" = "#cc4400",
- "Cyan Blue" = "#00ffff",
- "Dark Blue" = "#6666ff",
- "Dark Fuschia" = "#cc0066",
- "Dark Green" = "#37835b",
- "Dark Red" = "#9c3030",
- "Dull Yellow" = "#fbdf56",
- "Faint Blue" = "#b3d9ff",
- "Faint Green" = "#ddff99",
- "Faint Red" = "#ffb3b3",
- "Green" = "#97ee63",
- "Orange" = "#ffa64d",
- "Pink" = "#ff99cc",
- "Purple" = "#ee82ee",
- "Red" = "#ff4d4d",
- "Seafoam Green" = "#00fa9a",
- "White" = "#f2f2f2",
-))
-
-GLOBAL_LIST_INIT(color_list_lustrous, list(
- "Cyan Blue" = "#00ffff",
- "Sky Blue" = "#37c0ff",
- "Blue" = "#3374ff",
- "Dark Blue" = "#5b5beb",
- "Bright Red" = "#fa2d2d",
-))
-
-GLOBAL_LIST_INIT(ghost_forms_with_directions_list, list(
- "catghost",
- "ghost_black",
- "ghost_blazeit",
- "ghost_blue",
- "ghost_camo",
- "ghost_cyan",
- "ghost_dblue",
- "ghost_dcyan",
- "ghost_dgreen",
- "ghost_dpink",
- "ghost_dred",
- "ghost_dyellow",
- "ghost_fire",
- "ghost_funkypurp",
- "ghost_green",
- "ghost_grey",
- "ghost_mellow",
- "ghost_pink",
- "ghost_pinksherbert",
- "ghost_purpleswirl",
- "ghost_rainbow",
- "ghost_red",
- "ghost_yellow",
- "ghost",
- "ghostian",
- "ghostian2",
- "ghostking",
- "skeleghost",
-))
-//stores the ghost forms that support directional sprites
-
-GLOBAL_LIST_INIT(ghost_forms_with_accessories_list, list(
- "ghost_black",
- "ghost_blazeit",
- "ghost_blue",
- "ghost_camo",
- "ghost_cyan",
- "ghost_dblue",
- "ghost_dcyan",
- "ghost_dgreen",
- "ghost_dpink",
- "ghost_dred",
- "ghost_dyellow",
- "ghost_fire",
- "ghost_funkypurp",
- "ghost_green",
- "ghost_grey",
- "ghost_mellow",
- "ghost_pink",
- "ghost_pinksherbert",
- "ghost_purpleswirl",
- "ghost_rainbow",
- "ghost_red",
- "ghost_yellow",
- "ghost",
- "skeleghost",
-))
-//stores the ghost forms that support hair and other such things
-
-GLOBAL_LIST_INIT(security_depts_prefs, sort_list(list(
- SEC_DEPT_ENGINEERING,
- SEC_DEPT_MEDICAL,
- SEC_DEPT_NONE,
- SEC_DEPT_SCIENCE,
- SEC_DEPT_SUPPLY,
-)))
-
- //Backpacks
-#define DBACKPACK "Department Backpack"
-#define DDUFFELBAG "Department Duffel Bag"
-#define DSATCHEL "Department Satchel"
-#define DMESSENGER "Department Messenger Bag"
-#define GBACKPACK "Grey Backpack"
-#define GDUFFELBAG "Grey Duffel Bag"
-#define GSATCHEL "Grey Satchel"
-#define GMESSENGER "Grey Messenger Bag"
-#define LSATCHEL "Leather Satchel"
-GLOBAL_LIST_INIT(backpacklist, list(
- DBACKPACK,
- DDUFFELBAG,
- DSATCHEL,
- DMESSENGER,
- GBACKPACK,
- GDUFFELBAG,
- GSATCHEL,
- GMESSENGER,
- LSATCHEL,
-))
-
- //Suit/Skirt
-#define PREF_SUIT "Jumpsuit"
-#define PREF_SKIRT "Jumpskirt"
-
-//Uplink spawn loc
-#define UPLINK_PDA "PDA"
-#define UPLINK_RADIO "Radio"
-#define UPLINK_PEN "Pen" //like a real spy!
-#define UPLINK_IMPLANT "Implant"
-
- //Female Uniforms
-GLOBAL_LIST_EMPTY(female_clothing_icons)
-
-GLOBAL_LIST_INIT(scarySounds, list(
- 'sound/effects/footstep/clownstep1.ogg',
- 'sound/effects/footstep/clownstep2.ogg',
- 'sound/effects/glass/glassbr1.ogg',
- 'sound/effects/glass/glassbr2.ogg',
- 'sound/effects/glass/glassbr3.ogg',
- 'sound/items/tools/welder.ogg',
- 'sound/items/tools/welder2.ogg',
- 'sound/machines/airlock/airlock.ogg',
- 'sound/mobs/non-humanoids/hiss/hiss1.ogg',
- 'sound/mobs/non-humanoids/hiss/hiss2.ogg',
- 'sound/mobs/non-humanoids/hiss/hiss3.ogg',
- 'sound/mobs/non-humanoids/hiss/hiss4.ogg',
- 'sound/mobs/non-humanoids/hiss/hiss5.ogg',
- 'sound/mobs/non-humanoids/hiss/hiss6.ogg',
- 'sound/items/weapons/armbomb.ogg',
- 'sound/items/weapons/taser.ogg',
- 'sound/items/weapons/thudswoosh.ogg',
- 'sound/items/weapons/shove.ogg',
-))
-
-
-// Reference list for disposal sort junctions. Set the sortType variable on disposal sort junctions to
-// the index of the sort department that you want. For example, sortType set to 2 will reroute all packages
-// tagged for the Cargo Bay.
-
-/* List of sortType codes for mapping reference
-0 Waste
-1 Disposals - All unwrapped items and untagged parcels get picked up by a junction with this sortType. Usually leads to the recycler.
-2 Cargo Bay
-3 QM Office
-4 Engineering
-5 CE Office
-6 Atmospherics
-7 Security
-8 HoS Office
-9 Medbay
-10 CMO Office
-11 Chemistry
-12 Research
-13 RD Office
-14 Robotics
-15 HoP Office
-16 Library
-17 Chapel
-18 Theatre
-19 Bar
-20 Kitchen
-21 Hydroponics
-22 Janitor
-23 Genetics
-24 Experimentor Lab
-25 Ordnance
-26 Dormitories
-27 Virology
-28 Xenobiology
-29 Law Office
-30 Detective's Office
-*/
-
-//The whole system for the sorttype var is determined based on the order of this list,
-//disposals must always be 1, since anything that's untagged will automatically go to disposals, or sorttype = 1 --Superxpdude
-
-//If you don't want to fuck up disposals, add to this list, and don't change the order.
-//If you insist on changing the order, you'll have to change every sort junction to reflect the new order. --Pete
-
-GLOBAL_LIST_INIT(TAGGERLOCATIONS, list("Disposals",
- "Cargo Bay", "QM Office", "Engineering", "CE Office",
- "Atmospherics", "Security", "HoS Office", "Medbay",
- "CMO Office", "Chemistry", "Research", "RD Office",
- "Robotics", "HoP Office", "Library", "Chapel", "Theatre",
- "Bar", "Kitchen", "Hydroponics", "Janitor Closet","Genetics",
- "Experimentor Lab", "Ordnance", "Dormitories", "Virology",
- "Xenobiology", "Law Office","Detective's Office"))
-
-GLOBAL_LIST_INIT(station_prefixes, world.file2list("strings/station_prefixes.txt"))
-
-GLOBAL_LIST_INIT(station_names, world.file2list("strings/station_names.txt"))
-
-GLOBAL_LIST_INIT(station_suffixes, world.file2list("strings/station_suffixes.txt"))
-
-GLOBAL_LIST_INIT(greek_letters, world.file2list("strings/greek_letters.txt"))
-
-GLOBAL_LIST_INIT(phonetic_alphabet, world.file2list("strings/phonetic_alphabet.txt"))
-
-GLOBAL_LIST_INIT(numbers_as_words, world.file2list("strings/numbers_as_words.txt"))
-
-GLOBAL_LIST_INIT(wisdoms, world.file2list("strings/wisdoms.txt"))
-
-/proc/generate_number_strings()
- var/list/L[198]
- for(var/i in 1 to 99)
- L += "[i]"
- L += "\Roman[i]"
- return L
-
-GLOBAL_LIST_INIT(station_numerals, greek_letters + phonetic_alphabet + numbers_as_words + generate_number_strings())
-
-GLOBAL_LIST_INIT(admiral_messages, list(
- "Error: No comment given.",
- "null",
- "Do you know how expensive these stations are?",
- "I was sleeping, thanks a lot.",
- "It's a good day to die!",
- "No.",
- "Stand and fight you cowards!",
- "Stop being paranoid.",
- "Stop wasting my time.",
- "Whatever's broken just build a new one.",
- "You knew the risks coming in.",
-))
-
-GLOBAL_LIST_INIT(junkmail_messages, world.file2list("strings/junkmail.txt"))
-
-// All valid inputs to status display post_status
-GLOBAL_LIST_INIT(status_display_approved_pictures, list(
- "blank",
- "shuttle",
- "default",
- "biohazard",
- "lockdown",
- "greenalert",
- "bluealert",
- "violetalert", // SKYRAT EDIT ADD - Alert Levels
- "orangealert", // SKYRAT EDIT ADD - Alert Levels
- "amberalert", // SKYRAT EDIT ADD - Alert Levels
- "redalert",
- "deltaalert",
- "gammaalert", // SKYRAT EDIT ADD - Alert Levels
- "radiation",
- "currentalert", //For automatic set of status display on current level
-))
-
-// Members of status_display_approved_pictures that are actually states and not alert values
-GLOBAL_LIST_INIT(status_display_state_pictures, list(
- "blank",
- "shuttle",
-))
-
-GLOBAL_LIST_INIT(fishing_tips, world.file2list("strings/fishing_tips.txt"))
-
-/// 1000 element long list containing the 1000 most common words in the English language.
-/// Indexed by word, value is the rank of the word in the list. So accessing it is fasta.
-GLOBAL_LIST_INIT(most_common_words, init_common_words())
-
-/proc/init_common_words()
- . = list()
- var/i = 1
- for(var/word in world.file2list("strings/1000_most_common.txt"))
- .[word] = i
- i += 1
diff --git a/code/_globalvars/lists/ghost.dm b/code/_globalvars/lists/ghost.dm
new file mode 100644
index 00000000000..42db2c830ee
--- /dev/null
+++ b/code/_globalvars/lists/ghost.dm
@@ -0,0 +1,59 @@
+/// Stores the ghost forms that support directional sprites
+GLOBAL_LIST_INIT(ghost_forms_with_directions_list, list(
+ "catghost",
+ "ghost_black",
+ "ghost_blazeit",
+ "ghost_blue",
+ "ghost_camo",
+ "ghost_cyan",
+ "ghost_dblue",
+ "ghost_dcyan",
+ "ghost_dgreen",
+ "ghost_dpink",
+ "ghost_dred",
+ "ghost_dyellow",
+ "ghost_fire",
+ "ghost_funkypurp",
+ "ghost_green",
+ "ghost_grey",
+ "ghost_mellow",
+ "ghost_pink",
+ "ghost_pinksherbert",
+ "ghost_purpleswirl",
+ "ghost_rainbow",
+ "ghost_red",
+ "ghost_yellow",
+ "ghost",
+ "ghostian",
+ "ghostian2",
+ "ghostking",
+ "skeleghost",
+))
+
+/// Stores the ghost forms that support hair and other such things
+GLOBAL_LIST_INIT(ghost_forms_with_accessories_list, list(
+ "ghost_black",
+ "ghost_blazeit",
+ "ghost_blue",
+ "ghost_camo",
+ "ghost_cyan",
+ "ghost_dblue",
+ "ghost_dcyan",
+ "ghost_dgreen",
+ "ghost_dpink",
+ "ghost_dred",
+ "ghost_dyellow",
+ "ghost_fire",
+ "ghost_funkypurp",
+ "ghost_green",
+ "ghost_grey",
+ "ghost_mellow",
+ "ghost_pink",
+ "ghost_pinksherbert",
+ "ghost_purpleswirl",
+ "ghost_rainbow",
+ "ghost_red",
+ "ghost_yellow",
+ "ghost",
+ "skeleghost",
+))
diff --git a/code/_globalvars/lists/icons.dm b/code/_globalvars/lists/icons.dm
index 4d0b6279945..fd51a76c5f4 100644
--- a/code/_globalvars/lists/icons.dm
+++ b/code/_globalvars/lists/icons.dm
@@ -4,3 +4,5 @@ GLOBAL_LIST_EMPTY(icon_dimensions)
GLOBAL_LIST_EMPTY(icon_states_cache)
/// Cache of the states of icon files, stored associatively with TRUE for lookup
GLOBAL_LIST_EMPTY(icon_states_cache_lookup)
+/// Female Uniforms
+GLOBAL_LIST_EMPTY(female_clothing_icons)
diff --git a/code/_globalvars/lists/names.dm b/code/_globalvars/lists/names.dm
index f9f70a2c706..a564d55c420 100644
--- a/code/_globalvars/lists/names.dm
+++ b/code/_globalvars/lists/names.dm
@@ -1,47 +1,44 @@
GLOBAL_LIST_INIT(ai_names, world.file2list("strings/names/ai.txt"))
-GLOBAL_LIST_INIT(wizard_first, world.file2list("strings/names/wizardfirst.txt"))
-GLOBAL_LIST_INIT(wizard_second, world.file2list("strings/names/wizardsecond.txt"))
-GLOBAL_LIST_INIT(ninja_titles, world.file2list("strings/names/ninjatitle.txt"))
-GLOBAL_LIST_INIT(ninja_names, world.file2list("strings/names/ninjaname.txt"))
-GLOBAL_LIST_INIT(commando_names, world.file2list("strings/names/death_commando.txt"))
-GLOBAL_LIST_INIT(first_names, world.file2list("strings/names/first.txt"))
-GLOBAL_LIST_INIT(first_names_male, world.file2list("strings/names/first_male.txt"))
-GLOBAL_LIST_INIT(first_names_female, world.file2list("strings/names/first_female.txt"))
-GLOBAL_LIST_INIT(last_names, world.file2list("strings/names/last.txt"))
-GLOBAL_LIST_INIT(clown_names, world.file2list("strings/names/clown.txt"))
-GLOBAL_LIST_INIT(mime_names, world.file2list("strings/names/mime.txt"))
-GLOBAL_LIST_INIT(religion_names, world.file2list("strings/names/religion.txt"))
-GLOBAL_LIST_INIT(carp_names, world.file2list("strings/names/carp.txt"))
-GLOBAL_LIST_INIT(lizard_names_male, world.file2list("strings/names/lizard_male.txt"))
-GLOBAL_LIST_INIT(lizard_names_female, world.file2list("strings/names/lizard_female.txt"))
-GLOBAL_LIST_INIT(golem_names, world.file2list("strings/names/golem.txt"))
-GLOBAL_LIST_INIT(moth_first, world.file2list("strings/names/moth_first.txt"))
-GLOBAL_LIST_INIT(moth_last, world.file2list("strings/names/moth_last.txt"))
-GLOBAL_LIST_INIT(plasmaman_names, world.file2list("strings/names/plasmaman.txt"))
-GLOBAL_LIST_INIT(ethereal_names, world.file2list("strings/names/ethereal.txt"))
-GLOBAL_LIST_INIT(posibrain_names, world.file2list("strings/names/posibrain.txt"))
-GLOBAL_LIST_INIT(nightmare_names, world.file2list("strings/names/nightmare.txt"))
-GLOBAL_LIST_INIT(megacarp_first_names, world.file2list("strings/names/megacarp1.txt"))
-GLOBAL_LIST_INIT(megacarp_last_names, world.file2list("strings/names/megacarp2.txt"))
-GLOBAL_LIST_INIT(cyberauth_names, world.file2list("strings/names/cyberauth.txt"))
-GLOBAL_LIST_INIT(hacker_aliases, world.file2list("strings/names/hackers.txt"))
-GLOBAL_LIST_INIT(syndicate_monkey_names, world.file2list("strings/names/syndicate_monkey.txt"))
GLOBAL_LIST_INIT(cargorilla_names, world.file2list("strings/names/cargorilla.txt"))
+GLOBAL_LIST_INIT(carp_names, world.file2list("strings/names/carp.txt"))
+GLOBAL_LIST_INIT(clown_names, world.file2list("strings/names/clown.txt"))
+GLOBAL_LIST_INIT(commando_names, world.file2list("strings/names/death_commando.txt"))
+GLOBAL_LIST_INIT(cyberauth_names, world.file2list("strings/names/cyberauth.txt"))
+GLOBAL_LIST_INIT(ethereal_names, world.file2list("strings/names/ethereal.txt"))
+GLOBAL_LIST_INIT(first_names_female, world.file2list("strings/names/first_female.txt"))
+GLOBAL_LIST_INIT(first_names_male, world.file2list("strings/names/first_male.txt"))
+GLOBAL_LIST_INIT(first_names, world.file2list("strings/names/first.txt"))
+GLOBAL_LIST_INIT(golem_names, world.file2list("strings/names/golem.txt"))
+GLOBAL_LIST_INIT(guardian_fantasy_surnames, world.file2list("strings/names/guardian_tarot.txt"))
GLOBAL_LIST_INIT(guardian_first_names, world.file2list("strings/names/guardian_descriptions.txt"))
GLOBAL_LIST_INIT(guardian_tech_surnames, world.file2list("strings/names/guardian_gamepieces.txt"))
-GLOBAL_LIST_INIT(guardian_fantasy_surnames, world.file2list("strings/names/guardian_tarot.txt"))
-GLOBAL_LIST_INIT(operative_aliases, world.file2list("strings/names/operative_alias.txt"))
-GLOBAL_LIST_INIT(voidwalker_names, world.file2list("strings/names/voidwalker.txt"))
-
-GLOBAL_LIST_INIT(verbs, world.file2list("strings/names/verbs.txt"))
-GLOBAL_LIST_INIT(ing_verbs, world.file2list("strings/names/ing_verbs.txt"))
-GLOBAL_LIST_INIT(martial_prefix, world.file2list("strings/names/martial_prefix.txt"))
-GLOBAL_LIST_INIT(adverbs, world.file2list("strings/names/adverbs.txt"))
-GLOBAL_LIST_INIT(adjectives, world.file2list("strings/names/adjectives.txt"))
-GLOBAL_LIST_INIT(gross_adjectives, world.file2list("strings/names/gross_adjectives.txt"))
-GLOBAL_LIST_INIT(dream_strings, world.file2list("strings/dreamstrings.txt"))
-GLOBAL_LIST_INIT(vampire_house_names, world.file2list("strings/names/vampire_house_names.txt"))
-GLOBAL_LIST_INIT(greek_alphabet, world.file2list("strings/greek_alphabet.txt"))
+GLOBAL_LIST_INIT(hacker_aliases, world.file2list("strings/names/hackers.txt"))
GLOBAL_LIST_INIT(hive_names, world.file2list("strings/names/hive_names.txt"))
+GLOBAL_LIST_INIT(last_names, world.file2list("strings/names/last.txt"))
+GLOBAL_LIST_INIT(lizard_names_female, world.file2list("strings/names/lizard_female.txt"))
+GLOBAL_LIST_INIT(lizard_names_male, world.file2list("strings/names/lizard_male.txt"))
+GLOBAL_LIST_INIT(martial_prefix, world.file2list("strings/names/martial_prefix.txt"))
+GLOBAL_LIST_INIT(megacarp_first_names, world.file2list("strings/names/megacarp1.txt"))
+GLOBAL_LIST_INIT(megacarp_last_names, world.file2list("strings/names/megacarp2.txt"))
+GLOBAL_LIST_INIT(mime_names, world.file2list("strings/names/mime.txt"))
+GLOBAL_LIST_INIT(moth_first, world.file2list("strings/names/moth_first.txt"))
+GLOBAL_LIST_INIT(moth_last, world.file2list("strings/names/moth_last.txt"))
+GLOBAL_LIST_INIT(nightmare_names, world.file2list("strings/names/nightmare.txt"))
+GLOBAL_LIST_INIT(ninja_names, world.file2list("strings/names/ninjaname.txt"))
+GLOBAL_LIST_INIT(ninja_titles, world.file2list("strings/names/ninjatitle.txt"))
+GLOBAL_LIST_INIT(operative_aliases, world.file2list("strings/names/operative_alias.txt"))
+GLOBAL_LIST_INIT(plasmaman_names, world.file2list("strings/names/plasmaman.txt"))
+GLOBAL_LIST_INIT(posibrain_names, world.file2list("strings/names/posibrain.txt"))
+GLOBAL_LIST_INIT(religion_names, world.file2list("strings/names/religion.txt"))
+GLOBAL_LIST_INIT(station_names, world.file2list("strings/station_names.txt"))
+GLOBAL_LIST_INIT(station_numerals, greek_letters + phonetic_alphabet + numbers_as_words + generate_number_strings())
+GLOBAL_LIST_INIT(station_prefixes, world.file2list("strings/station_prefixes.txt"))
+GLOBAL_LIST_INIT(station_suffixes, world.file2list("strings/station_suffixes.txt"))
+GLOBAL_LIST_INIT(syndicate_monkey_names, world.file2list("strings/names/syndicate_monkey.txt"))
+GLOBAL_LIST_INIT(vampire_house_names, world.file2list("strings/names/vampire_house_names.txt"))
+GLOBAL_LIST_INIT(voidwalker_names, world.file2list("strings/names/voidwalker.txt"))
+GLOBAL_LIST_INIT(wizard_first, world.file2list("strings/names/wizardfirst.txt"))
+GLOBAL_LIST_INIT(wizard_second, world.file2list("strings/names/wizardsecond.txt"))
+
//loaded on startup because of "
//would include in rsc if ' was used
diff --git a/code/_globalvars/lists/sound.dm b/code/_globalvars/lists/sound.dm
new file mode 100644
index 00000000000..a8fc4ab698c
--- /dev/null
+++ b/code/_globalvars/lists/sound.dm
@@ -0,0 +1,20 @@
+GLOBAL_LIST_INIT(scarySounds, list(
+ 'sound/effects/footstep/clownstep1.ogg',
+ 'sound/effects/footstep/clownstep2.ogg',
+ 'sound/effects/glass/glassbr1.ogg',
+ 'sound/effects/glass/glassbr2.ogg',
+ 'sound/effects/glass/glassbr3.ogg',
+ 'sound/items/tools/welder.ogg',
+ 'sound/items/tools/welder2.ogg',
+ 'sound/machines/airlock/airlock.ogg',
+ 'sound/mobs/non-humanoids/hiss/hiss1.ogg',
+ 'sound/mobs/non-humanoids/hiss/hiss2.ogg',
+ 'sound/mobs/non-humanoids/hiss/hiss3.ogg',
+ 'sound/mobs/non-humanoids/hiss/hiss4.ogg',
+ 'sound/mobs/non-humanoids/hiss/hiss5.ogg',
+ 'sound/mobs/non-humanoids/hiss/hiss6.ogg',
+ 'sound/items/weapons/armbomb.ogg',
+ 'sound/items/weapons/taser.ogg',
+ 'sound/items/weapons/thudswoosh.ogg',
+ 'sound/items/weapons/shove.ogg',
+))
diff --git a/code/_globalvars/lists/status_display.dm b/code/_globalvars/lists/status_display.dm
new file mode 100644
index 00000000000..66ec47d9964
--- /dev/null
+++ b/code/_globalvars/lists/status_display.dm
@@ -0,0 +1,20 @@
+// All valid inputs to status display post_status
+GLOBAL_LIST_INIT(status_display_approved_pictures, list(
+ "blank",
+ "shuttle",
+ "default",
+ "biohazard",
+ "lockdown",
+ "greenalert",
+ "bluealert",
+ "redalert",
+ "deltaalert",
+ "radiation",
+ "currentalert", //For automatic set of status display on current level
+))
+
+// Members of status_display_approved_pictures that are actually states and not alert values
+GLOBAL_LIST_INIT(status_display_state_pictures, list(
+ "blank",
+ "shuttle",
+))
diff --git a/code/_globalvars/lists/strings.dm b/code/_globalvars/lists/strings.dm
new file mode 100644
index 00000000000..80cc4816c1e
--- /dev/null
+++ b/code/_globalvars/lists/strings.dm
@@ -0,0 +1,16 @@
+GLOBAL_LIST_INIT(adjectives, world.file2list("strings/names/adjectives.txt"))
+GLOBAL_LIST_INIT(adverbs, world.file2list("strings/names/adverbs.txt"))
+GLOBAL_LIST_INIT(dream_strings, world.file2list("strings/dreamstrings.txt"))
+GLOBAL_LIST_INIT(fishing_tips, world.file2list("strings/fishing_tips.txt"))
+GLOBAL_LIST_INIT(greek_letters, world.file2list("strings/greek_letters.txt"))
+GLOBAL_LIST_INIT(gross_adjectives, world.file2list("strings/names/gross_adjectives.txt"))
+GLOBAL_LIST_INIT(ing_verbs, world.file2list("strings/names/ing_verbs.txt"))
+GLOBAL_LIST_INIT(junkmail_messages, world.file2list("strings/junkmail.txt"))
+GLOBAL_LIST_INIT(most_common_words, world.file2list("strings/1000_most_common.txt"))
+GLOBAL_LIST_INIT(numbers_as_words, world.file2list("strings/numbers_as_words.txt"))
+GLOBAL_LIST_INIT(phonetic_alphabet, world.file2list("strings/phonetic_alphabet.txt"))
+GLOBAL_LIST_INIT(verbs, world.file2list("strings/names/verbs.txt"))
+GLOBAL_LIST_INIT(wisdoms, world.file2list("strings/wisdoms.txt"))
+
+//loaded on startup because of "
+//would include in rsc if ' was used
diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm
index 4c7c01d5c29..3dc3b5e0ce1 100644
--- a/code/datums/status_effects/buffs.dm
+++ b/code/datums/status_effects/buffs.dm
@@ -393,12 +393,12 @@
/datum/status_effect/lightningorb/on_apply()
. = ..()
- owner.add_movespeed_modifier(/datum/movespeed_modifier/yellow_orb)
+ owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/yellow_orb)
to_chat(owner, span_notice("You feel fast!"))
/datum/status_effect/lightningorb/on_remove()
. = ..()
- owner.remove_movespeed_modifier(/datum/movespeed_modifier/yellow_orb)
+ owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/yellow_orb)
to_chat(owner, span_notice("You slow down."))
/atom/movable/screen/alert/status_effect/lightningorb
diff --git a/code/game/objects/effects/decals/misc.dm b/code/game/objects/effects/decals/chemspray.dm
similarity index 94%
rename from code/game/objects/effects/decals/misc.dm
rename to code/game/objects/effects/decals/chemspray.dm
index 112f3b228dc..005f7482aac 100644
--- a/code/game/objects/effects/decals/misc.dm
+++ b/code/game/objects/effects/decals/chemspray.dm
@@ -95,10 +95,3 @@
reagents.expose(spraying, VAPOR)
log_combat(user, spraying, "sprayed", sprayer, addition = "which had [logging_string]")
-
-/obj/effect/decal/fakelattice
- name = "lattice"
- desc = "A lightweight support lattice."
- icon = 'icons/obj/smooth_structures/lattice.dmi'
- icon_state = "lattice-255"
- density = TRUE
diff --git a/code/game/objects/effects/decals/cleanable/ants.dm b/code/game/objects/effects/decals/cleanable/ants.dm
new file mode 100644
index 00000000000..b6a3fa38c3f
--- /dev/null
+++ b/code/game/objects/effects/decals/cleanable/ants.dm
@@ -0,0 +1,90 @@
+/obj/effect/decal/cleanable/ants
+ name = "space ants"
+ desc = "A small colony of space ants. They're normally used to the vacuum of space, so they can't climb too well."
+ icon = 'icons/obj/debris.dmi'
+ icon_state = "ants"
+ beauty = -150
+ plane = GAME_PLANE
+ layer = LOW_OBJ_LAYER
+ decal_reagent = /datum/reagent/ants
+ reagent_amount = 5
+ /// Sound the ants make when biting
+ var/bite_sound = 'sound/items/weapons/bite.ogg'
+
+/obj/effect/decal/cleanable/ants/Initialize(mapload)
+ if(mapload && reagent_amount > 2)
+ reagent_amount = rand((reagent_amount - 2), reagent_amount)
+ . = ..()
+ update_ant_damage()
+
+/obj/effect/decal/cleanable/ants/vv_edit_var(vname, vval)
+ . = ..()
+ if(vname == NAMEOF(src, bite_sound))
+ update_ant_damage()
+
+/obj/effect/decal/cleanable/ants/handle_merge_decal(obj/effect/decal/cleanable/merger)
+ . = ..()
+ var/obj/effect/decal/cleanable/ants/ants = merger
+ ants.update_ant_damage()
+
+/obj/effect/decal/cleanable/ants/proc/update_ant_damage(ant_min_damage, ant_max_damage)
+ if(!ant_max_damage)
+ ant_max_damage = min(10, round((reagents ? reagents.get_reagent_amount(/datum/reagent/ants) : reagent_amount) * 0.1,0.1)) // 100u ants = 10 max_damage
+ if(!ant_min_damage)
+ ant_min_damage = 0.1
+ var/ant_flags = (CALTROP_NOCRAWL | CALTROP_NOSTUN) /// Small amounts of ants won't be able to bite through shoes.
+ if(ant_max_damage > 1)
+ ant_flags = (CALTROP_NOCRAWL | CALTROP_NOSTUN | CALTROP_BYPASS_SHOES)
+
+ var/datum/component/caltrop/caltrop_comp = GetComponent(/datum/component/caltrop)
+ if(caltrop_comp)
+ caltrop_comp.min_damage = ant_min_damage
+ caltrop_comp.max_damage = ant_max_damage
+ caltrop_comp.flags = ant_flags
+ caltrop_comp.soundfile = bite_sound
+ else
+ AddComponent(/datum/component/caltrop, min_damage = ant_min_damage, max_damage = ant_max_damage, flags = ant_flags, soundfile = bite_sound)
+
+ update_appearance(UPDATE_ICON)
+
+/obj/effect/decal/cleanable/ants/update_icon_state()
+ if(istype(src, /obj/effect/decal/cleanable/ants/fire)) //i fucking hate this but you're forced to call parent in update_icon_state()
+ return ..()
+ if(!(flags_1 & INITIALIZED_1))
+ return ..()
+
+ var/datum/component/caltrop/caltrop_comp = GetComponent(/datum/component/caltrop)
+ if(!caltrop_comp)
+ return ..()
+
+ switch(caltrop_comp.max_damage)
+ if(0 to 1)
+ icon_state = initial(icon_state)
+ if(1.1 to 4)
+ icon_state = "[initial(icon_state)]_2"
+ if(4.1 to 7)
+ icon_state = "[initial(icon_state)]_3"
+ if(7.1 to INFINITY)
+ icon_state = "[initial(icon_state)]_4"
+ return ..()
+
+/obj/effect/decal/cleanable/ants/update_overlays()
+ . = ..()
+ . += emissive_appearance(icon, "[icon_state]_light", src, alpha = src.alpha, effect_type = EMISSIVE_NO_BLOOM)
+
+/obj/effect/decal/cleanable/ants/fire_act(exposed_temperature, exposed_volume)
+ new /obj/effect/decal/cleanable/ants/fire(loc)
+ qdel(src)
+
+/obj/effect/decal/cleanable/ants/fire
+ name = "space fire ants"
+ desc = "A small colony no longer. We are the fire nation."
+ decal_reagent = /datum/reagent/ants/fire
+ icon_state = "fire_ants"
+ mergeable_decal = FALSE
+
+/obj/effect/decal/cleanable/ants/fire/update_ant_damage(ant_min_damage, ant_max_damage)
+ return ..(15, 25)
+
+/obj/effect/decal/cleanable/ants/fire/fire_act(exposed_temperature, exposed_volume)
+ return
diff --git a/code/game/objects/effects/decals/cleanable/fuel.dm b/code/game/objects/effects/decals/cleanable/fuel.dm
new file mode 100644
index 00000000000..e372e93c43d
--- /dev/null
+++ b/code/game/objects/effects/decals/cleanable/fuel.dm
@@ -0,0 +1,113 @@
+/obj/effect/decal/cleanable/fuel_pool
+ name = "pool of fuel"
+ desc = "A pool of flammable fuel. Its probably wise to clean this off before something ignites it..."
+ icon_state = "fuel_pool"
+ beauty = -50
+ clean_type = CLEAN_TYPE_BLOOD
+ mouse_opacity = MOUSE_OPACITY_OPAQUE
+ resistance_flags = UNACIDABLE | ACID_PROOF | FIRE_PROOF | FLAMMABLE //gross way of doing this but would need to disassemble fire_act call stack otherwise
+ /// Maximum amount of hotspots this pool can create before deleting itself
+ var/burn_amount = 3
+ /// Is this fuel pool currently burning?
+ var/burning = FALSE
+ /// Type of hotspot fuel pool spawns upon being ignited
+ var/hotspot_type = /obj/effect/hotspot
+
+/obj/effect/decal/cleanable/fuel_pool/Initialize(mapload, burn_stacks)
+ . = ..()
+ var/static/list/loc_connections = list(
+ COMSIG_TURF_MOVABLE_THROW_LANDED = PROC_REF(ignition_trigger),
+ COMSIG_ATOM_ENTERED = PROC_REF(on_entered)
+ )
+ AddElement(/datum/element/connect_loc, loc_connections)
+ for(var/obj/effect/decal/cleanable/fuel_pool/pool in get_turf(src)) //Can't use locate because we also belong to that turf
+ if(pool == src)
+ continue
+ pool.burn_amount = max(min(pool.burn_amount + burn_stacks, 10), 1)
+ return INITIALIZE_HINT_QDEL
+
+ if(burn_stacks)
+ burn_amount = max(min(burn_stacks, 10), 1)
+
+ return INITIALIZE_HINT_LATELOAD
+
+// Just in case of fires, do this after mapload.
+/obj/effect/decal/cleanable/fuel_pool/LateInitialize()
+// We don't want to burn down the create_and_destroy test area
+#ifndef UNIT_TESTS
+ RegisterSignal(src, COMSIG_ATOM_TOUCHED_SPARKS, PROC_REF(ignition_trigger))
+#endif
+
+/obj/effect/decal/cleanable/fuel_pool/fire_act(exposed_temperature, exposed_volume)
+ . = ..()
+ ignite()
+
+/**
+ * Ignites the fuel pool. This should be the only way to ignite fuel pools.
+ */
+/obj/effect/decal/cleanable/fuel_pool/proc/ignite()
+ if(burning)
+ return
+ burning = TRUE
+ burn_process()
+
+/**
+ * Spends 1 burn_amount and spawns a hotspot. If burn_amount is equal to 0, deletes the fuel pool.
+ * Else, queues another call of this proc upon hotspot getting deleted and ignites other fuel pools around itself after 0.5 seconds.
+ * THIS SHOULD NOT BE CALLED DIRECTLY.
+ */
+/obj/effect/decal/cleanable/fuel_pool/proc/burn_process()
+ SIGNAL_HANDLER
+
+ burn_amount -= 1
+ var/obj/effect/hotspot/hotspot = new hotspot_type(get_turf(src))
+ addtimer(CALLBACK(src, PROC_REF(ignite_others)), 0.5 SECONDS)
+
+ if(!burn_amount)
+ qdel(src)
+ return
+
+ RegisterSignal(hotspot, COMSIG_QDELETING, PROC_REF(burn_process))
+
+/**
+ * Ignites other oil pools around itself.
+ */
+/obj/effect/decal/cleanable/fuel_pool/proc/ignite_others()
+ for(var/obj/effect/decal/cleanable/fuel_pool/oil in range(1, get_turf(src)))
+ oil.ignite()
+
+/obj/effect/decal/cleanable/fuel_pool/bullet_act(obj/projectile/hit_proj)
+ . = ..()
+ ignite()
+ log_combat(hit_proj.firer, src, "used [hit_proj] to ignite")
+
+/obj/effect/decal/cleanable/fuel_pool/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
+ if(item.ignition_effect(src, user))
+ ignite()
+ log_combat(user, src, "used [item] to ignite")
+ return ..()
+
+/obj/effect/decal/cleanable/fuel_pool/proc/on_entered(datum/source, atom/movable/entered_atom)
+ SIGNAL_HANDLER
+
+ if(!entered_atom.throwing) // don't light from things being thrown over us, we handle that somewhere else
+ ignition_trigger(source = src, enflammable_atom = entered_atom)
+
+/obj/effect/decal/cleanable/fuel_pool/proc/ignition_trigger(datum/source, atom/movable/enflammable_atom)
+ SIGNAL_HANDLER
+
+ if(isitem(enflammable_atom))
+ var/obj/item/enflamed_item = enflammable_atom
+ if(enflamed_item.get_temperature() > FIRE_MINIMUM_TEMPERATURE_TO_EXIST)
+ ignite()
+ return
+ else if(isliving(enflammable_atom))
+ var/mob/living/enflamed_liver = enflammable_atom
+ if(enflamed_liver.on_fire)
+ ignite()
+ else if(istype(enflammable_atom, /obj/effect/particle_effect/sparks))
+ ignite()
+
+
+/obj/effect/decal/cleanable/fuel_pool/hivis
+ icon_state = "fuel_pool_hivis"
diff --git a/code/game/objects/effects/decals/cleanable/misc.dm b/code/game/objects/effects/decals/cleanable/mess.dm
similarity index 62%
rename from code/game/objects/effects/decals/cleanable/misc.dm
rename to code/game/objects/effects/decals/cleanable/mess.dm
index db4e7e2047d..d31f44a4b01 100644
--- a/code/game/objects/effects/decals/cleanable/misc.dm
+++ b/code/game/objects/effects/decals/cleanable/mess.dm
@@ -365,211 +365,6 @@ GLOBAL_LIST_EMPTY(nebula_vomits)
. = ..()
AddElement(/datum/element/swabable, CELL_LINE_TABLE_SLUDGE, CELL_VIRUS_TABLE_GENERIC, rand(2,4), 15)
-/obj/effect/decal/cleanable/ants
- name = "space ants"
- desc = "A small colony of space ants. They're normally used to the vacuum of space, so they can't climb too well."
- icon = 'icons/obj/debris.dmi'
- icon_state = "ants"
- beauty = -150
- plane = GAME_PLANE
- layer = LOW_OBJ_LAYER
- decal_reagent = /datum/reagent/ants
- reagent_amount = 5
- /// Sound the ants make when biting
- var/bite_sound = 'sound/items/weapons/bite.ogg'
-
-/obj/effect/decal/cleanable/ants/Initialize(mapload)
- if(mapload && reagent_amount > 2)
- reagent_amount = rand((reagent_amount - 2), reagent_amount)
- . = ..()
- update_ant_damage()
-
-/obj/effect/decal/cleanable/ants/vv_edit_var(vname, vval)
- . = ..()
- if(vname == NAMEOF(src, bite_sound))
- update_ant_damage()
-
-/obj/effect/decal/cleanable/ants/handle_merge_decal(obj/effect/decal/cleanable/merger)
- . = ..()
- var/obj/effect/decal/cleanable/ants/ants = merger
- ants.update_ant_damage()
-
-/obj/effect/decal/cleanable/ants/proc/update_ant_damage(ant_min_damage, ant_max_damage)
- if(!ant_max_damage)
- ant_max_damage = min(10, round((reagents ? reagents.get_reagent_amount(/datum/reagent/ants) : reagent_amount) * 0.1,0.1)) // 100u ants = 10 max_damage
- if(!ant_min_damage)
- ant_min_damage = 0.1
- var/ant_flags = (CALTROP_NOCRAWL | CALTROP_NOSTUN) /// Small amounts of ants won't be able to bite through shoes.
- if(ant_max_damage > 1)
- ant_flags = (CALTROP_NOCRAWL | CALTROP_NOSTUN | CALTROP_BYPASS_SHOES)
-
- var/datum/component/caltrop/caltrop_comp = GetComponent(/datum/component/caltrop)
- if(caltrop_comp)
- caltrop_comp.min_damage = ant_min_damage
- caltrop_comp.max_damage = ant_max_damage
- caltrop_comp.flags = ant_flags
- caltrop_comp.soundfile = bite_sound
- else
- AddComponent(/datum/component/caltrop, min_damage = ant_min_damage, max_damage = ant_max_damage, flags = ant_flags, soundfile = bite_sound)
-
- update_appearance(UPDATE_ICON)
-
-/obj/effect/decal/cleanable/ants/update_icon_state()
- if(istype(src, /obj/effect/decal/cleanable/ants/fire)) //i fucking hate this but you're forced to call parent in update_icon_state()
- return ..()
- if(!(flags_1 & INITIALIZED_1))
- return ..()
-
- var/datum/component/caltrop/caltrop_comp = GetComponent(/datum/component/caltrop)
- if(!caltrop_comp)
- return ..()
-
- switch(caltrop_comp.max_damage)
- if(0 to 1)
- icon_state = initial(icon_state)
- if(1.1 to 4)
- icon_state = "[initial(icon_state)]_2"
- if(4.1 to 7)
- icon_state = "[initial(icon_state)]_3"
- if(7.1 to INFINITY)
- icon_state = "[initial(icon_state)]_4"
- return ..()
-
-/obj/effect/decal/cleanable/ants/update_overlays()
- . = ..()
- . += emissive_appearance(icon, "[icon_state]_light", src, alpha = src.alpha, effect_type = EMISSIVE_NO_BLOOM)
-
-/obj/effect/decal/cleanable/ants/fire_act(exposed_temperature, exposed_volume)
- new /obj/effect/decal/cleanable/ants/fire(loc)
- qdel(src)
-
-/obj/effect/decal/cleanable/ants/fire
- name = "space fire ants"
- desc = "A small colony no longer. We are the fire nation."
- decal_reagent = /datum/reagent/ants/fire
- icon_state = "fire_ants"
- mergeable_decal = FALSE
-
-/obj/effect/decal/cleanable/ants/fire/update_ant_damage(ant_min_damage, ant_max_damage)
- return ..(15, 25)
-
-/obj/effect/decal/cleanable/ants/fire/fire_act(exposed_temperature, exposed_volume)
- return
-
-/obj/effect/decal/cleanable/fuel_pool
- name = "pool of fuel"
- desc = "A pool of flammable fuel. Its probably wise to clean this off before something ignites it..."
- icon_state = "fuel_pool"
- beauty = -50
- clean_type = CLEAN_TYPE_BLOOD
- mouse_opacity = MOUSE_OPACITY_OPAQUE
- resistance_flags = UNACIDABLE | ACID_PROOF | FIRE_PROOF | FLAMMABLE //gross way of doing this but would need to disassemble fire_act call stack otherwise
- /// Maximum amount of hotspots this pool can create before deleting itself
- var/burn_amount = 3
- /// Is this fuel pool currently burning?
- var/burning = FALSE
- /// Type of hotspot fuel pool spawns upon being ignited
- var/hotspot_type = /obj/effect/hotspot
-
-/obj/effect/decal/cleanable/fuel_pool/Initialize(mapload, burn_stacks)
- . = ..()
- var/static/list/loc_connections = list(
- COMSIG_TURF_MOVABLE_THROW_LANDED = PROC_REF(ignition_trigger),
- COMSIG_ATOM_ENTERED = PROC_REF(on_entered)
- )
- AddElement(/datum/element/connect_loc, loc_connections)
- for(var/obj/effect/decal/cleanable/fuel_pool/pool in get_turf(src)) //Can't use locate because we also belong to that turf
- if(pool == src)
- continue
- pool.burn_amount = max(min(pool.burn_amount + burn_stacks, 10), 1)
- return INITIALIZE_HINT_QDEL
-
- if(burn_stacks)
- burn_amount = max(min(burn_stacks, 10), 1)
-
- return INITIALIZE_HINT_LATELOAD
-
-// Just in case of fires, do this after mapload.
-/obj/effect/decal/cleanable/fuel_pool/LateInitialize()
-// We don't want to burn down the create_and_destroy test area
-#ifndef UNIT_TESTS
- RegisterSignal(src, COMSIG_ATOM_TOUCHED_SPARKS, PROC_REF(ignition_trigger))
-#endif
-
-/obj/effect/decal/cleanable/fuel_pool/fire_act(exposed_temperature, exposed_volume)
- . = ..()
- ignite()
-
-/**
- * Ignites the fuel pool. This should be the only way to ignite fuel pools.
- */
-/obj/effect/decal/cleanable/fuel_pool/proc/ignite()
- if(burning)
- return
- burning = TRUE
- burn_process()
-
-/**
- * Spends 1 burn_amount and spawns a hotspot. If burn_amount is equal to 0, deletes the fuel pool.
- * Else, queues another call of this proc upon hotspot getting deleted and ignites other fuel pools around itself after 0.5 seconds.
- * THIS SHOULD NOT BE CALLED DIRECTLY.
- */
-/obj/effect/decal/cleanable/fuel_pool/proc/burn_process()
- SIGNAL_HANDLER
-
- burn_amount -= 1
- var/obj/effect/hotspot/hotspot = new hotspot_type(get_turf(src))
- addtimer(CALLBACK(src, PROC_REF(ignite_others)), 0.5 SECONDS)
-
- if(!burn_amount)
- qdel(src)
- return
-
- RegisterSignal(hotspot, COMSIG_QDELETING, PROC_REF(burn_process))
-
-/**
- * Ignites other oil pools around itself.
- */
-/obj/effect/decal/cleanable/fuel_pool/proc/ignite_others()
- for(var/obj/effect/decal/cleanable/fuel_pool/oil in range(1, get_turf(src)))
- oil.ignite()
-
-/obj/effect/decal/cleanable/fuel_pool/bullet_act(obj/projectile/hit_proj)
- . = ..()
- ignite()
- log_combat(hit_proj.firer, src, "used [hit_proj] to ignite")
-
-/obj/effect/decal/cleanable/fuel_pool/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)
- if(item.ignition_effect(src, user))
- ignite()
- log_combat(user, src, "used [item] to ignite")
- return ..()
-
-/obj/effect/decal/cleanable/fuel_pool/proc/on_entered(datum/source, atom/movable/entered_atom)
- SIGNAL_HANDLER
-
- if(!entered_atom.throwing) // don't light from things being thrown over us, we handle that somewhere else
- ignition_trigger(source = src, enflammable_atom = entered_atom)
-
-/obj/effect/decal/cleanable/fuel_pool/proc/ignition_trigger(datum/source, atom/movable/enflammable_atom)
- SIGNAL_HANDLER
-
- if(isitem(enflammable_atom))
- var/obj/item/enflamed_item = enflammable_atom
- if(enflamed_item.get_temperature() > FIRE_MINIMUM_TEMPERATURE_TO_EXIST)
- ignite()
- return
- else if(isliving(enflammable_atom))
- var/mob/living/enflamed_liver = enflammable_atom
- if(enflamed_liver.on_fire)
- ignite()
- else if(istype(enflammable_atom, /obj/effect/particle_effect/sparks))
- ignite()
-
-
-/obj/effect/decal/cleanable/fuel_pool/hivis
- icon_state = "fuel_pool_hivis"
-
/obj/effect/decal/cleanable/rubble
name = "rubble"
desc = "A pile of rubble."
diff --git a/code/game/objects/effects/decals/structure.dm b/code/game/objects/effects/decals/structure.dm
new file mode 100644
index 00000000000..66935498dff
--- /dev/null
+++ b/code/game/objects/effects/decals/structure.dm
@@ -0,0 +1,6 @@
+/obj/effect/decal/fakelattice
+ name = "lattice"
+ desc = "A lightweight support lattice."
+ icon = 'icons/obj/smooth_structures/lattice.dmi'
+ icon_state = "lattice-255"
+ density = TRUE
diff --git a/code/game/objects/effects/particles/echo.dm b/code/game/objects/effects/particles/echo.dm
new file mode 100644
index 00000000000..90c3533d8ce
--- /dev/null
+++ b/code/game/objects/effects/particles/echo.dm
@@ -0,0 +1,14 @@
+// Echolocation particles.
+/particles/echo
+ icon = 'icons/effects/particles/echo.dmi'
+ icon_state = list("echo1" = 1, "echo2" = 1, "echo3" = 2)
+ width = 480
+ height = 480
+ count = 1000
+ spawning = 0.5
+ lifespan = 2 SECONDS
+ fade = 1 SECONDS
+ gravity = list(0, -0.1)
+ position = generator(GEN_BOX, list(-240, -240), list(240, 240), NORMAL_RAND)
+ drift = generator(GEN_VECTOR, list(-0.1, 0), list(0.1, 0))
+ rotation = generator(GEN_NUM, 0, 360, NORMAL_RAND)
diff --git a/code/game/objects/effects/particles/food.dm b/code/game/objects/effects/particles/food.dm
new file mode 100644
index 00000000000..30f9e6ec2f4
--- /dev/null
+++ b/code/game/objects/effects/particles/food.dm
@@ -0,0 +1,13 @@
+// Food related particles.
+/particles/stink
+ icon = 'icons/effects/particles/stink.dmi'
+ icon_state = list("stink_1" = 1, "stink_2" = 2, "stink_3" = 2)
+ color = "#0BDA51"
+ width = 100
+ height = 100
+ count = 25
+ spawning = 0.25
+ lifespan = 1 SECONDS
+ fade = 1 SECONDS
+ position = generator(GEN_CIRCLE, 0, 16, UNIFORM_RAND)
+ gravity = list(0, 0.25)
diff --git a/code/game/objects/effects/particles/misc.dm b/code/game/objects/effects/particles/misc.dm
deleted file mode 100644
index a1f188f88c9..00000000000
--- a/code/game/objects/effects/particles/misc.dm
+++ /dev/null
@@ -1,45 +0,0 @@
-// General or un-matched particles, make a new file if a few can be sorted together.
-/particles/pollen
- icon = 'icons/effects/particles/pollen.dmi'
- icon_state = "pollen"
- width = 100
- height = 100
- count = 1000
- spawning = 4
- lifespan = 0.7 SECONDS
- fade = 1 SECONDS
- grow = -0.01
- velocity = list(0, 0)
- position = generator(GEN_CIRCLE, 0, 16, NORMAL_RAND)
- drift = generator(GEN_VECTOR, list(0, -0.2), list(0, 0.2))
- gravity = list(0, 0.95)
- scale = generator(GEN_VECTOR, list(0.3, 0.3), list(1,1), NORMAL_RAND)
- rotation = 30
- spin = generator(GEN_NUM, -20, 20)
-
-/particles/echo
- icon = 'icons/effects/particles/echo.dmi'
- icon_state = list("echo1" = 1, "echo2" = 1, "echo3" = 2)
- width = 480
- height = 480
- count = 1000
- spawning = 0.5
- lifespan = 2 SECONDS
- fade = 1 SECONDS
- gravity = list(0, -0.1)
- position = generator(GEN_BOX, list(-240, -240), list(240, 240), NORMAL_RAND)
- drift = generator(GEN_VECTOR, list(-0.1, 0), list(0.1, 0))
- rotation = generator(GEN_NUM, 0, 360, NORMAL_RAND)
-
-/particles/stink
- icon = 'icons/effects/particles/stink.dmi'
- icon_state = list("stink_1" = 1, "stink_2" = 2, "stink_3" = 2)
- color = "#0BDA51"
- width = 100
- height = 100
- count = 25
- spawning = 0.25
- lifespan = 1 SECONDS
- fade = 1 SECONDS
- position = generator(GEN_CIRCLE, 0, 16, UNIFORM_RAND)
- gravity = list(0, 0.25)
diff --git a/code/game/objects/effects/particles/plant.dm b/code/game/objects/effects/particles/plant.dm
new file mode 100644
index 00000000000..eca8b6fe5d0
--- /dev/null
+++ b/code/game/objects/effects/particles/plant.dm
@@ -0,0 +1,18 @@
+// Plant related particles.
+/particles/pollen
+ icon = 'icons/effects/particles/pollen.dmi'
+ icon_state = "pollen"
+ width = 100
+ height = 100
+ count = 1000
+ spawning = 4
+ lifespan = 0.7 SECONDS
+ fade = 1 SECONDS
+ grow = -0.01
+ velocity = list(0, 0)
+ position = generator(GEN_CIRCLE, 0, 16, NORMAL_RAND)
+ drift = generator(GEN_VECTOR, list(0, -0.2), list(0, 0.2))
+ gravity = list(0, 0.95)
+ scale = generator(GEN_VECTOR, list(0.3, 0.3), list(1,1), NORMAL_RAND)
+ rotation = 30
+ spin = generator(GEN_NUM, -20, 20)
diff --git a/code/modules/movespeed/modifiers/admin.dm b/code/modules/movespeed/modifiers/admin.dm
new file mode 100644
index 00000000000..c2002dec2d3
--- /dev/null
+++ b/code/modules/movespeed/modifiers/admin.dm
@@ -0,0 +1,4 @@
+/datum/movespeed_modifier/admin_varedit
+ variable = TRUE
+
+
diff --git a/code/modules/movespeed/modifiers/misc.dm b/code/modules/movespeed/modifiers/misc.dm
deleted file mode 100644
index e3aba912966..00000000000
--- a/code/modules/movespeed/modifiers/misc.dm
+++ /dev/null
@@ -1,6 +0,0 @@
-/datum/movespeed_modifier/admin_varedit
- variable = TRUE
-
-/datum/movespeed_modifier/yellow_orb
- multiplicative_slowdown = -0.65
- blacklisted_movetypes = (FLYING|FLOATING)
diff --git a/code/modules/movespeed/modifiers/status_effects.dm b/code/modules/movespeed/modifiers/status_effects.dm
index 26522d0793b..951944944c5 100644
--- a/code/modules/movespeed/modifiers/status_effects.dm
+++ b/code/modules/movespeed/modifiers/status_effects.dm
@@ -63,6 +63,10 @@
/datum/movespeed_modifier/status_effect/guardian_shield
multiplicative_slowdown = 1
+/datum/movespeed_modifier/status_effect/yellow_orb
+ multiplicative_slowdown = -0.65
+ blacklisted_movetypes = (FLYING|FLOATING)
+
///movespeed modifier that makes you go faster when wet and lying on the floor once past the fish organ set threshold.
/datum/movespeed_modifier/fish_flopping
blacklisted_movetypes = MOVETYPES_NOT_TOUCHING_GROUND
diff --git a/code/modules/reagents/reagent_containers/cups/mauna_mug.dm b/code/modules/reagents/reagent_containers/cups/mauna_mug.dm
new file mode 100644
index 00000000000..b443229358b
--- /dev/null
+++ b/code/modules/reagents/reagent_containers/cups/mauna_mug.dm
@@ -0,0 +1,117 @@
+/obj/item/reagent_containers/cup/maunamug
+ name = "mauna mug"
+ desc = "A drink served in a classy mug. Now with built-in heating!"
+ icon = 'icons/obj/devices/mauna_mug.dmi'
+ icon_state = "maunamug"
+ base_icon_state = "maunamug"
+ spillable = TRUE
+ reagent_flags = OPENCONTAINER
+ fill_icon_state = "maunafilling"
+ fill_icon_thresholds = list(25)
+ var/obj/item/stock_parts/power_store/cell
+ var/open = FALSE
+ var/on = FALSE
+
+/obj/item/reagent_containers/cup/maunamug/Initialize(mapload, vol)
+ . = ..()
+ cell = new /obj/item/stock_parts/power_store/cell(src)
+
+/obj/item/reagent_containers/cup/maunamug/get_cell()
+ return cell
+
+/obj/item/reagent_containers/cup/maunamug/examine(mob/user)
+ . = ..()
+ . += span_notice("The status display reads: Current temperature: [reagents.chem_temp]K Current Charge:[cell ? "[cell.charge / cell.maxcharge * 100]%" : "No cell found"].")
+ if(open)
+ . += span_notice("The battery case is open.")
+ if(cell && cell.charge > 0)
+ . += span_notice("Ctrl+Click to toggle the power.")
+
+/obj/item/reagent_containers/cup/maunamug/process(seconds_per_tick)
+ ..()
+ if(on && (!cell || cell.charge <= 0)) //Check if we ran out of power
+ change_power_status(FALSE)
+ return FALSE
+ cell.use(0.005 * STANDARD_CELL_RATE * seconds_per_tick) //Basic cell goes for like 200 seconds, bluespace for 8000
+ if(!reagents.total_volume)
+ return FALSE
+ var/max_temp = min(500 + (500 * (0.2 * cell.rating)), 1000) // 373 to 1000
+ reagents.adjust_thermal_energy(0.4 * cell.maxcharge * reagents.total_volume * seconds_per_tick, max_temp = max_temp) // 4 kelvin every tick on a basic cell. 160k on bluespace
+ reagents.handle_reactions()
+ update_appearance()
+ if(reagents.chem_temp >= max_temp)
+ change_power_status(FALSE)
+ audible_message(span_notice("The Mauna Mug lets out a happy beep and turns off!"))
+ playsound(src, 'sound/machines/chime.ogg', 50)
+
+/obj/item/reagent_containers/cup/maunamug/Destroy()
+ if(cell)
+ QDEL_NULL(cell)
+ STOP_PROCESSING(SSobj, src)
+ . = ..()
+
+/obj/item/reagent_containers/cup/maunamug/item_ctrl_click(mob/user)
+ if(on)
+ change_power_status(FALSE)
+ else
+ if(!cell || cell.charge <= 0)
+ return FALSE //No power, so don't turn on
+ change_power_status(TRUE)
+ return CLICK_ACTION_SUCCESS
+
+/obj/item/reagent_containers/cup/maunamug/proc/change_power_status(status)
+ on = status
+ if(on)
+ START_PROCESSING(SSobj, src)
+ else
+ STOP_PROCESSING(SSobj, src)
+ update_appearance()
+
+/obj/item/reagent_containers/cup/maunamug/screwdriver_act(mob/living/user, obj/item/I)
+ . = ..()
+ open = !open
+ to_chat(user, span_notice("You screw the battery case on [src] [open ? "open" : "closed"] ."))
+ update_appearance()
+
+/obj/item/reagent_containers/cup/maunamug/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
+ add_fingerprint(user)
+ if(!istype(I, /obj/item/stock_parts/power_store/cell))
+ return ..()
+ if(!open)
+ to_chat(user, span_warning("The battery case must be open to insert a power cell!"))
+ return FALSE
+ if(cell)
+ to_chat(user, span_warning("There is already a power cell inside!"))
+ return FALSE
+ else if(!user.transferItemToLoc(I, src))
+ return
+ cell = I
+ user.visible_message(span_notice("[user] inserts a power cell into [src]."), span_notice("You insert the power cell into [src]."))
+ update_appearance()
+
+/obj/item/reagent_containers/cup/maunamug/attack_hand(mob/living/user, list/modifiers)
+ if(cell && open)
+ user.put_in_hands(cell)
+ cell = null
+ to_chat(user, span_notice("You remove the power cell from [src]."))
+ on = FALSE
+ update_appearance()
+ return TRUE
+ return ..()
+
+/obj/item/reagent_containers/cup/maunamug/update_icon_state()
+ if(open)
+ icon_state = "[base_icon_state][cell ? null : "_no"]_bat"
+ return ..()
+ icon_state = "[base_icon_state][on ? "_on" : null]"
+ return ..()
+
+/obj/item/reagent_containers/cup/maunamug/update_overlays()
+ . = ..()
+ if(!reagents.total_volume || reagents.chem_temp < 400)
+ return
+
+ var/intensity = (reagents.chem_temp - 400) * 1 / 600 //Get the opacity of the incandescent overlay. Ranging from 400 to 1000
+ var/mutable_appearance/mug_glow = mutable_appearance(icon, "maunamug_incand")
+ mug_glow.alpha = 255 * intensity
+ . += mug_glow
diff --git a/code/modules/reagents/reagent_containers/misc.dm b/code/modules/reagents/reagent_containers/rag.dm
similarity index 64%
rename from code/modules/reagents/reagent_containers/misc.dm
rename to code/modules/reagents/reagent_containers/rag.dm
index 37185319b4d..bd73f20fe1f 100644
--- a/code/modules/reagents/reagent_containers/misc.dm
+++ b/code/modules/reagents/reagent_containers/rag.dm
@@ -1,121 +1,3 @@
-/obj/item/reagent_containers/cup/maunamug
- name = "mauna mug"
- desc = "A drink served in a classy mug. Now with built-in heating!"
- icon = 'icons/obj/devices/mauna_mug.dmi'
- icon_state = "maunamug"
- base_icon_state = "maunamug"
- spillable = TRUE
- reagent_flags = OPENCONTAINER
- fill_icon_state = "maunafilling"
- fill_icon_thresholds = list(25)
- var/obj/item/stock_parts/power_store/cell
- var/open = FALSE
- var/on = FALSE
-
-/obj/item/reagent_containers/cup/maunamug/Initialize(mapload, vol)
- . = ..()
- cell = new /obj/item/stock_parts/power_store/cell(src)
-
-/obj/item/reagent_containers/cup/maunamug/get_cell()
- return cell
-
-/obj/item/reagent_containers/cup/maunamug/examine(mob/user)
- . = ..()
- . += span_notice("The status display reads: Current temperature: [reagents.chem_temp]K Current Charge:[cell ? "[cell.charge / cell.maxcharge * 100]%" : "No cell found"].")
- if(open)
- . += span_notice("The battery case is open.")
- if(cell && cell.charge > 0)
- . += span_notice("Ctrl+Click to toggle the power.")
-
-/obj/item/reagent_containers/cup/maunamug/process(seconds_per_tick)
- ..()
- if(on && (!cell || cell.charge <= 0)) //Check if we ran out of power
- change_power_status(FALSE)
- return FALSE
- cell.use(0.005 * STANDARD_CELL_RATE * seconds_per_tick) //Basic cell goes for like 200 seconds, bluespace for 8000
- if(!reagents.total_volume)
- return FALSE
- var/max_temp = min(500 + (500 * (0.2 * cell.rating)), 1000) // 373 to 1000
- reagents.adjust_thermal_energy(0.4 * cell.maxcharge * reagents.total_volume * seconds_per_tick, max_temp = max_temp) // 4 kelvin every tick on a basic cell. 160k on bluespace
- reagents.handle_reactions()
- update_appearance()
- if(reagents.chem_temp >= max_temp)
- change_power_status(FALSE)
- audible_message(span_notice("The Mauna Mug lets out a happy beep and turns off!"))
- playsound(src, 'sound/machines/chime.ogg', 50)
-
-/obj/item/reagent_containers/cup/maunamug/Destroy()
- if(cell)
- QDEL_NULL(cell)
- STOP_PROCESSING(SSobj, src)
- . = ..()
-
-/obj/item/reagent_containers/cup/maunamug/item_ctrl_click(mob/user)
- if(on)
- change_power_status(FALSE)
- else
- if(!cell || cell.charge <= 0)
- return FALSE //No power, so don't turn on
- change_power_status(TRUE)
- return CLICK_ACTION_SUCCESS
-
-/obj/item/reagent_containers/cup/maunamug/proc/change_power_status(status)
- on = status
- if(on)
- START_PROCESSING(SSobj, src)
- else
- STOP_PROCESSING(SSobj, src)
- update_appearance()
-
-/obj/item/reagent_containers/cup/maunamug/screwdriver_act(mob/living/user, obj/item/I)
- . = ..()
- open = !open
- to_chat(user, span_notice("You screw the battery case on [src] [open ? "open" : "closed"] ."))
- update_appearance()
-
-/obj/item/reagent_containers/cup/maunamug/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
- add_fingerprint(user)
- if(!istype(I, /obj/item/stock_parts/power_store/cell))
- return ..()
- if(!open)
- to_chat(user, span_warning("The battery case must be open to insert a power cell!"))
- return FALSE
- if(cell)
- to_chat(user, span_warning("There is already a power cell inside!"))
- return FALSE
- else if(!user.transferItemToLoc(I, src))
- return
- cell = I
- user.visible_message(span_notice("[user] inserts a power cell into [src]."), span_notice("You insert the power cell into [src]."))
- update_appearance()
-
-/obj/item/reagent_containers/cup/maunamug/attack_hand(mob/living/user, list/modifiers)
- if(cell && open)
- user.put_in_hands(cell)
- cell = null
- to_chat(user, span_notice("You remove the power cell from [src]."))
- on = FALSE
- update_appearance()
- return TRUE
- return ..()
-
-/obj/item/reagent_containers/cup/maunamug/update_icon_state()
- if(open)
- icon_state = "[base_icon_state][cell ? null : "_no"]_bat"
- return ..()
- icon_state = "[base_icon_state][on ? "_on" : null]"
- return ..()
-
-/obj/item/reagent_containers/cup/maunamug/update_overlays()
- . = ..()
- if(!reagents.total_volume || reagents.chem_temp < 400)
- return
-
- var/intensity = (reagents.chem_temp - 400) * 1 / 600 //Get the opacity of the incandescent overlay. Ranging from 400 to 1000
- var/mutable_appearance/mug_glow = mutable_appearance(icon, "maunamug_incand")
- mug_glow.alpha = 255 * intensity
- . += mug_glow
-
/obj/item/rag
name = "damp rag"
desc = "For cleaning up messes, you suppose."
diff --git a/tgstation.dme b/tgstation.dme
index 0a15e3317b7..e220e38cb96 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -693,10 +693,14 @@
#include "code\_globalvars\lists\canisters.dm"
#include "code\_globalvars\lists\cargo.dm"
#include "code\_globalvars\lists\client.dm"
+#include "code\_globalvars\lists\clothing.dm"
#include "code\_globalvars\lists\color.dm"
+#include "code\_globalvars\lists\communication.dm"
#include "code\_globalvars\lists\crafting.dm"
+#include "code\_globalvars\lists\department.dm"
+#include "code\_globalvars\lists\disposals.dm"
#include "code\_globalvars\lists\engineering.dm"
-#include "code\_globalvars\lists\flavor_misc.dm"
+#include "code\_globalvars\lists\ghost.dm"
#include "code\_globalvars\lists\icons.dm"
#include "code\_globalvars\lists\keybindings.dm"
#include "code\_globalvars\lists\maintenance_loot.dm"
@@ -713,6 +717,9 @@
#include "code\_globalvars\lists\reagents.dm"
#include "code\_globalvars\lists\rtd.dm"
#include "code\_globalvars\lists\silo.dm"
+#include "code\_globalvars\lists\sound.dm"
+#include "code\_globalvars\lists\status_display.dm"
+#include "code\_globalvars\lists\strings.dm"
#include "code\_globalvars\lists\typecache.dm"
#include "code\_globalvars\lists\wiremod.dm"
#include "code\_globalvars\lists\xenobiology.dm"
@@ -2504,15 +2511,18 @@
#include "code\game\objects\effects\anomalies\anomalies_hallucination.dm"
#include "code\game\objects\effects\anomalies\anomalies_pyroclastic.dm"
#include "code\game\objects\effects\anomalies\anomalies_vortex.dm"
+#include "code\game\objects\effects\decals\chemspray.dm"
#include "code\game\objects\effects\decals\cleanable.dm"
#include "code\game\objects\effects\decals\crayon.dm"
#include "code\game\objects\effects\decals\decal.dm"
-#include "code\game\objects\effects\decals\misc.dm"
#include "code\game\objects\effects\decals\remains.dm"
+#include "code\game\objects\effects\decals\structure.dm"
#include "code\game\objects\effects\decals\cleanable\aliens.dm"
+#include "code\game\objects\effects\decals\cleanable\ants.dm"
#include "code\game\objects\effects\decals\cleanable\blood.dm"
#include "code\game\objects\effects\decals\cleanable\food.dm"
-#include "code\game\objects\effects\decals\cleanable\misc.dm"
+#include "code\game\objects\effects\decals\cleanable\fuel.dm"
+#include "code\game\objects\effects\decals\cleanable\mess.dm"
#include "code\game\objects\effects\decals\cleanable\robots.dm"
#include "code\game\objects\effects\decals\turfdecal\dirt.dm"
#include "code\game\objects\effects\decals\turfdecal\markings.dm"
@@ -2529,10 +2539,12 @@
#include "code\game\objects\effects\effect_system\fluid_spread\effects_smoke.dm"
#include "code\game\objects\effects\landmarks\atmospherics_sanity_landmarks.dm"
#include "code\game\objects\effects\particles\acid.dm"
+#include "code\game\objects\effects\particles\echo.dm"
#include "code\game\objects\effects\particles\fire.dm"
+#include "code\game\objects\effects\particles\food.dm"
#include "code\game\objects\effects\particles\gravity.dm"
-#include "code\game\objects\effects\particles\misc.dm"
#include "code\game\objects\effects\particles\note_particles.dm"
+#include "code\game\objects\effects\particles\plant.dm"
#include "code\game\objects\effects\particles\slime.dm"
#include "code\game\objects\effects\particles\smoke.dm"
#include "code\game\objects\effects\particles\water.dm"
@@ -5763,11 +5775,11 @@
#include "code\modules\modular_computers\file_system\programs\messenger\messenger_data.dm"
#include "code\modules\modular_computers\file_system\programs\messenger\messenger_program.dm"
#include "code\modules\movespeed\_movespeed_modifier.dm"
+#include "code\modules\movespeed\modifiers\admin.dm"
#include "code\modules\movespeed\modifiers\components.dm"
#include "code\modules\movespeed\modifiers\drugs.dm"
#include "code\modules\movespeed\modifiers\innate.dm"
#include "code\modules\movespeed\modifiers\items.dm"
-#include "code\modules\movespeed\modifiers\misc.dm"
#include "code\modules\movespeed\modifiers\mobs.dm"
#include "code\modules\movespeed\modifiers\reagent.dm"
#include "code\modules\movespeed\modifiers\status_effects.dm"
@@ -6095,9 +6107,9 @@
#include "code\modules\reagents\reagent_containers\hypospray.dm"
#include "code\modules\reagents\reagent_containers\jerrycan.dm"
#include "code\modules\reagents\reagent_containers\medigel.dm"
-#include "code\modules\reagents\reagent_containers\misc.dm"
#include "code\modules\reagents\reagent_containers\patch.dm"
#include "code\modules\reagents\reagent_containers\pill.dm"
+#include "code\modules\reagents\reagent_containers\rag.dm"
#include "code\modules\reagents\reagent_containers\spray.dm"
#include "code\modules\reagents\reagent_containers\syringes.dm"
#include "code\modules\reagents\reagent_containers\watering_can.dm"
@@ -6107,6 +6119,7 @@
#include "code\modules\reagents\reagent_containers\cups\drinkingglass.dm"
#include "code\modules\reagents\reagent_containers\cups\drinks.dm"
#include "code\modules\reagents\reagent_containers\cups\glassbottle.dm"
+#include "code\modules\reagents\reagent_containers\cups\mauna_mug.dm"
#include "code\modules\reagents\reagent_containers\cups\organ_jar.dm"
#include "code\modules\reagents\reagent_containers\cups\soda.dm"
#include "code\modules\reagents\withdrawal\_addiction.dm"