From 5e52882bd4dba730e2b63a5e516840d6d2b755e4 Mon Sep 17 00:00:00 2001
From: Fajetti <88633279+Fajetti@users.noreply.github.com>
Date: Sat, 16 Apr 2022 14:09:04 -0500
Subject: [PATCH 1/2] Plushie Sex Removal
---
code/game/objects/items/dehy_carp.dm | 3 -
code/game/objects/items/miscellaneous.dm | 2 +-
code/game/objects/items/plushes.dm | 370 +-----------------
.../reagents/chemistry/recipes/fermi.dm | 2 -
4 files changed, 2 insertions(+), 375 deletions(-)
diff --git a/code/game/objects/items/dehy_carp.dm b/code/game/objects/items/dehy_carp.dm
index 03ff354ffbc..792a895e2f4 100644
--- a/code/game/objects/items/dehy_carp.dm
+++ b/code/game/objects/items/dehy_carp.dm
@@ -20,9 +20,6 @@
else
return ..()
-/obj/item/toy/plush/carpplushie/dehy_carp/plop(obj/item/toy/plush/Daddy)
- return FALSE
-
/obj/item/toy/plush/carpplushie/dehy_carp/proc/Swell()
desc = "It's growing!"
visible_message("[src] swells up!")
diff --git a/code/game/objects/items/miscellaneous.dm b/code/game/objects/items/miscellaneous.dm
index 539e43bd84a..e9327d5a178 100644
--- a/code/game/objects/items/miscellaneous.dm
+++ b/code/game/objects/items/miscellaneous.dm
@@ -242,7 +242,7 @@
/obj/item/choice_beacon/box/plushie/generate_display_names()
var/list/plushie_list = list()
//plushie set 1: just subtypes of /obj/item/toy/plush
- var/list/plushies_set_one = subtypesof(/obj/item/toy/plush) - list(/obj/item/toy/plush/narplush, /obj/item/toy/plush/awakenedplushie, /obj/item/toy/plush/random_snowflake, /obj/item/toy/plush/plushling, /obj/item/toy/plush/random, /obj/item/toy/plush/goatplushie, /obj/item/toy/plush/goatplushie/angry, /obj/item/toy/plush/goatplushie/angry/realgoat, /obj/item/toy/plush/realgoat, /obj/item/toy/plush/goatplushie/angry/kinggoat, /obj/item/toy/plush/goatplushie/angry/kinggoat/ascendedkinggoat, /obj/item/toy/plush/goatplushie/angry/guardgoat, /obj/item/toy/plush/goatplushie/angry/guardgoat/masterguardgoat) //don't allow these special ones (you can still get narplush/hugbox)
+ var/list/plushies_set_one = subtypesof(/obj/item/toy/plush) - list(/obj/item/toy/plush/narplush, /obj/item/toy/plush/awakenedplushie, /obj/item/toy/plush/random_snowflake, /obj/item/toy/plush/random, /obj/item/toy/plush/goatplushie, /obj/item/toy/plush/goatplushie/angry, /obj/item/toy/plush/goatplushie/angry/realgoat, /obj/item/toy/plush/realgoat, /obj/item/toy/plush/goatplushie/angry/kinggoat, /obj/item/toy/plush/goatplushie/angry/kinggoat/ascendedkinggoat, /obj/item/toy/plush/goatplushie/angry/guardgoat, /obj/item/toy/plush/goatplushie/angry/guardgoat/masterguardgoat) //don't allow these special ones (you can still get narplush/hugbox)
for(var/V in plushies_set_one)
var/atom/A = V
plushie_list[initial(A.name)] = A
diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm
index 683232b540e..bcb8ad00b5e 100644
--- a/code/game/objects/items/plushes.dm
+++ b/code/game/objects/items/plushes.dm
@@ -10,27 +10,7 @@
var/stuffed = TRUE //If the plushie has stuffing in it
var/unstuffable = FALSE //for plushies that can't be stuffed
var/obj/item/grenade/grenade //You can remove the stuffing from a plushie and add a grenade to it for *nefarious uses*
- //--love ~<3--
gender = NEUTER
- var/obj/item/toy/plush/lover
- var/obj/item/toy/plush/partner
- var/obj/item/toy/plush/plush_child
- var/obj/item/toy/plush/paternal_parent //who initiated creation
- var/obj/item/toy/plush/maternal_parent //who owns, see love()
- var/static/list/breeding_blacklist = typecacheof(/obj/item/toy/plush/carpplushie/dehy_carp) // you cannot have sexual relations with this plush
- var/list/scorned = list() //who the plush hates
- var/list/scorned_by = list() //who hates the plush, to remove external references on Destroy()
- var/heartbroken = FALSE
- var/vowbroken = FALSE
- var/young = FALSE
- var/mood_message
- var/list/love_message
- var/list/partner_message
- var/list/heartbroken_message
- var/list/vowbroken_message
- var/list/parent_message
- var/normal_desc
- //--end of love :'(--
var/snowflake_id //if we set from a config snowflake plushie.
/// wrapper, do not use, read only
@@ -61,64 +41,13 @@
else
gender = MALE
- love_message = list("\n[src] is so happy, \he could rip a seam!")
- partner_message = list("\n[src] has a ring on \his finger! It says bound to my dear [partner].")
- heartbroken_message = list("\n[src] looks so sad.")
- vowbroken_message = list("\n[src] lost \his ring...")
- parent_message = list("\n[src] can't remember what sleep is.")
-
- normal_desc = desc
-
if(set_snowflake_id)
set_snowflake_from_config(set_snowflake_id)
+
/obj/item/toy/plush/Destroy()
QDEL_NULL(grenade)
- //inform next of kin and... acquaintances
- if(partner)
- partner.bad_news(src)
- partner = null
- lover = null
- else if(lover)
- lover.bad_news(src)
- lover = null
-
- if(paternal_parent)
- paternal_parent.bad_news(src)
- paternal_parent = null
-
- if(maternal_parent)
- maternal_parent.bad_news(src)
- maternal_parent = null
-
- if(plush_child)
- plush_child.bad_news(src)
- plush_child = null
-
- var/i
- var/obj/item/toy/plush/P
- for(i=1, i<=scorned.len, i++)
- P = scorned[i]
- P.bad_news(src)
- scorned = null
-
- for(i=1, i<=scorned_by.len, i++)
- P = scorned_by[i]
- P.bad_news(src)
- scorned_by = null
-
- //null remaining lists
- squeak_override = null
-
- love_message = null
- partner_message = null
- heartbroken_message = null
- vowbroken_message = null
- parent_message = null
-
- return ..()
-
/obj/item/toy/plush/vv_get_var(var_name)
if(var_name == NAMEOF(src, __ADMIN_SET_TO_ID))
return debug_variable("__ADMIN: SET SNOWFLAKE ID", snowflake_id, 0, src)
@@ -232,226 +161,8 @@
var/turf/grenade_turf = get_turf(src)
log_game("[key_name(user)] added a grenade ([I.name]) to [src] at [AREACOORD(grenade_turf)].")
return
- if(istype(I, /obj/item/toy/plush))
- love(I, user)
- SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT,"plushplay", /datum/mood_event/plushplay)
- return
return ..()
-/obj/item/toy/plush/proc/love(obj/item/toy/plush/Kisser, mob/living/user) //~<3
- var/chance = 100 //to steal a kiss, surely there's a 100% chance no-one would reject a plush such as I?
- var/concern = 20 //perhaps something might cloud true love with doubt
- var/loyalty = 30 //why should another get between us?
- var/duty = 50 //conquering another's is what I live for
-
- //we are not catholic
- if(young == TRUE || Kisser.young == TRUE)
- user.show_message(span_notice("[src] plays tag with [Kisser]."), MSG_VISUAL,
- span_notice("They're happy."), NONE)
- Kisser.cheer_up()
- cheer_up()
-
- //never again
- else if(Kisser in scorned)
- //message, visible, alternate message, neither visible nor audible
- user.show_message(span_notice("[src] rejects the advances of [Kisser]!"), MSG_VISUAL,
- span_notice("That didn't feel like it worked."), NONE)
- else if(src in Kisser.scorned)
- user.show_message(span_notice("[Kisser] realises who [src] is and turns away."), MSG_VISUAL,
- span_notice("That didn't feel like it worked."), NONE)
-
- //first comes love
- else if(Kisser.lover != src && Kisser.partner != src) //cannot be lovers or married
- if(Kisser.lover) //if the initiator has a lover
- Kisser.lover.heartbreak(Kisser) //the old lover can get over the kiss-and-run whilst the kisser has some fun
- chance -= concern //one heart already broken, what does another mean?
- if(lover) //if the recipient has a lover
- chance -= loyalty //mustn't... but those lips
- if(partner) //if the recipient has a partner
- chance -= duty //do we mate for life?
-
- if(prob(chance)) //did we bag a date?
- user.visible_message(span_notice("[user] makes [Kisser] kiss [src]!"),
- span_notice("You make [Kisser] kiss [src]!"))
- if(lover) //who cares for the past, we live in the present
- lover.heartbreak(src)
- new_lover(Kisser)
- Kisser.new_lover(src)
- else
- user.show_message(span_notice("[src] rejects the advances of [Kisser], maybe next time?"), MSG_VISUAL,
- span_notice("That didn't feel like it worked, this time."), NONE)
-
- //then comes marriage
- else if(Kisser.lover == src && Kisser.partner != src) //need to be lovers (assumes loving is a two way street) but not married (also assumes similar)
- user.visible_message(span_notice("[user] pronounces [Kisser] and [src] married! D'aw."),
- span_notice("You pronounce [Kisser] and [src] married!"))
- new_partner(Kisser)
- Kisser.new_partner(src)
-
- //then comes a baby in a baby's carriage, or an adoption in an adoption's orphanage
- else if(Kisser.partner == src && !plush_child) //the one advancing does not take ownership of the child and we have a one child policy in the toyshop
- user.visible_message(span_notice("[user] is going to break [Kisser] and [src] by bashing them like that."),
- span_notice("[Kisser] passionately embraces [src] in your hands. Look away you perv!"))
- user.client.give_award(/datum/award/achievement/misc/rule8, user)
- if(plop(Kisser))
- user.visible_message(span_notice("Something drops at the feet of [user]."),
- span_notice("The miracle of oh god did that just come out of [src]?!"))
-
- //then comes protection, or abstinence if we are catholic
- else if(Kisser.partner == src && plush_child)
- user.visible_message(span_notice("[user] makes [Kisser] nuzzle [src]!"),
- span_notice("You make [Kisser] nuzzle [src]!"))
-
- //then oh fuck something unexpected happened
- else
- user.show_message(span_warning("[Kisser] and [src] don't know what to do with one another."), NONE)
-
-/obj/item/toy/plush/proc/heartbreak(obj/item/toy/plush/Brutus)
- if(lover != Brutus)
- to_chat(world, "lover != Brutus")
- return //why are we considering someone we don't love?
-
- scorned.Add(Brutus)
- Brutus.scorned_by(src)
-
- lover = null
- Brutus.lover = null //feeling's mutual
-
- heartbroken = TRUE
- mood_message = pick(heartbroken_message)
-
- if(partner == Brutus) //oh dear...
- partner = null
- Brutus.partner = null //it'd be weird otherwise
- vowbroken = TRUE
- mood_message = pick(vowbroken_message)
-
- update_desc()
-
-/obj/item/toy/plush/proc/scorned_by(obj/item/toy/plush/Outmoded)
- scorned_by.Add(Outmoded)
-
-/obj/item/toy/plush/proc/new_lover(obj/item/toy/plush/Juliet)
- if(lover == Juliet)
- return //nice try
- lover = Juliet
-
- cheer_up()
- lover.cheer_up()
-
- mood_message = pick(love_message)
- update_desc()
-
- if(partner) //who?
- partner = null //more like who cares
-
-/obj/item/toy/plush/proc/new_partner(obj/item/toy/plush/Apple_of_my_eye)
- if(partner == Apple_of_my_eye)
- return //double marriage is just insecurity
- if(lover != Apple_of_my_eye)
- return //union not born out of love will falter
-
- partner = Apple_of_my_eye
-
- heal_memories()
- partner.heal_memories()
-
- mood_message = pick(partner_message)
- update_desc()
-
-/obj/item/toy/plush/proc/plop(obj/item/toy/plush/Daddy)
- if(partner != Daddy)
- return FALSE //we do not have bastards in our toyshop
-
- if(is_type_in_typecache(Daddy, breeding_blacklist))
- return FALSE // some love is forbidden
-
- if(prob(50)) //it has my eyes
- plush_child = new type(get_turf(loc))
- else //it has your eyes
- plush_child = new Daddy.type(get_turf(loc))
-
- plush_child.make_young(src, Daddy)
-
-/obj/item/toy/plush/proc/make_young(obj/item/toy/plush/Mama, obj/item/toy/plush/Dada)
- if(Mama == Dada)
- return //cloning is reserved for plants and spacemen
-
- maternal_parent = Mama
- paternal_parent = Dada
- young = TRUE
- name = "[Mama] Jr" //Icelandic naming convention pending
- normal_desc = "[src] is a little baby of [maternal_parent] and [paternal_parent]!" //original desc won't be used so the child can have moods
- update_desc()
-
- Mama.mood_message = pick(Mama.parent_message)
- Mama.update_desc()
- Dada.mood_message = pick(Dada.parent_message)
- Dada.update_desc()
-
-/obj/item/toy/plush/proc/bad_news(obj/item/toy/plush/Deceased) //cotton to cotton, sawdust to sawdust
- var/is_that_letter_for_me = FALSE
- if(partner == Deceased) //covers marriage
- is_that_letter_for_me = TRUE
- partner = null
- lover = null
- else if(lover == Deceased) //covers lovers
- is_that_letter_for_me = TRUE
- lover = null
-
- //covers children
- if(maternal_parent == Deceased)
- is_that_letter_for_me = TRUE
- maternal_parent = null
-
- if(paternal_parent == Deceased)
- is_that_letter_for_me = TRUE
- paternal_parent = null
-
- //covers parents
- if(plush_child == Deceased)
- is_that_letter_for_me = TRUE
- plush_child = null
-
- //covers bad memories
- if(Deceased in scorned)
- scorned.Remove(Deceased)
- cheer_up() //what cold button eyes you have
-
- if(Deceased in scorned_by)
- scorned_by.Remove(Deceased)
-
- //all references to the departed should be cleaned up by now
-
- if(is_that_letter_for_me)
- heartbroken = TRUE
- mood_message = pick(heartbroken_message)
- update_desc()
-
-/obj/item/toy/plush/proc/cheer_up() //it'll be all right
- if(!heartbroken)
- return //you cannot make smile what is already
- if(vowbroken)
- return //it's a pretty big deal
-
- heartbroken = !heartbroken
-
- if(mood_message in heartbroken_message)
- mood_message = null
- update_desc()
-
-/obj/item/toy/plush/proc/heal_memories() //time fixes all wounds
- if(!vowbroken)
- vowbroken = !vowbroken
- if(mood_message in vowbroken_message)
- mood_message = null
- cheer_up()
-
-/obj/item/toy/plush/update_desc()
- desc = normal_desc
- if(mood_message)
- desc += mood_message
-
GLOBAL_LIST_INIT(valid_plushie_paths, valid_plushie_paths())
/proc/valid_plushie_paths()
. = list()
@@ -857,86 +568,7 @@ GLOBAL_LIST_INIT(valid_plushie_paths, valid_plushie_paths())
desc = "A bundle of undigested fibers and scales. Yuck."
icon_state = "Hairball"
unstuffable = TRUE
- young = TRUE // Your own mouth-baby.
squeak_override = list('sound/misc/splort.ogg'=1)
attack_verb = list("sploshed", "splorted", "slushed")
can_random_spawn = FALSE
-/obj/item/toy/plush/plushling
- name = "peculiar plushie"
- desc = "An adorable stuffed toy- wait, did it just move?"
- can_random_spawn = FALSE
- var/absorb_cooldown = 100 //ticks cooldown between absorbs
- var/next_absorb = 0 //When can it absorb another plushie
- var/check_interval = 20
- var/next_check = 0
-
-//Overrides parent proc
-/obj/item/toy/plush/plushling/attack_self(mob/user)
- if(!user) //hmmmmm
- return
- to_chat(user, "You try to pet the plushie, but recoil as it bites your hand instead! OW!")
- SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT,"plush_bite", /datum/mood_event/plush_bite)
- var/mob/living/carbon/human/H = user
- if(!H)
- return //Type safety.
- H.apply_damage(5, BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM))
- addtimer(CALLBACK(H, /mob/living/carbon/human.proc/dropItemToGround, src, TRUE), 1)
-
-/obj/item/toy/plush/plushling/New()
- var/initial_state = pick("plushie_lizard", "plushie_snake", "plushie_slime", "fox")
- icon_state = initial_state
- item_state = initial_state
- START_PROCESSING(SSobj, src)
- . = ..()
-
-/obj/item/toy/plush/plushling/Destroy()
- STOP_PROCESSING(SSobj, src)
- . = ..()
-
-/obj/item/toy/plush/plushling/process()
- if(world.time < next_absorb || world.time < next_check)
- return
- next_check = world.time + check_interval
- var/obj/item/toy/plush/target
- for(var/obj/item/toy/plush/possible_target in loc) //First, it tries to get anything in its same location, be it a tile or a backpack
- if(possible_target == src || istype(possible_target, /obj/item/toy/plush/plushling))
- continue
- target = possible_target
- break
- if(!target)
- if(!isturf(loc))
- return
- for(var/obj/item/toy/plush/P in oview(1, src)) //If that doesn't work, it hunts for plushies adjacent to its own tile
- if(istype(P, /obj/item/toy/plush/plushling)) //These do not hunt their own kind
- continue
- src.throw_at(P, 1, 2)
- visible_message("[src] leaps at [P]!")
- break
- return
- if(istype(target, /obj/item/toy/plush/plushling)) //These do not consume their own.
- return
- next_absorb = world.time + absorb_cooldown
- plushie_absorb(target)
-
-/obj/item/toy/plush/plushling/proc/plushie_absorb(obj/item/toy/plush/victim)
- if(!victim)
- return
- visible_message("[src] gruesomely mutilliates [victim], leaving nothing more than dust!")
- if(victim.snowflake_id) //Snowflake code for snowflake plushies.
- set_snowflake_from_config(victim.snowflake_id)
- desc += " Wait, did it just move..?"
- else
- name = victim.name
- desc = victim.desc + " Wait, did it just move..?"
- icon_state = victim.icon_state
- item_state = victim.item_state
- squeak_override = victim.squeak_override
- attack_verb = victim.attack_verb
- new /obj/effect/decal/cleanable/ash(get_turf(victim))
- qdel(victim)
-
-/obj/item/toy/plush/plushling/love(obj/item/toy/plush/Kisser, mob/living/user) //You shouldn't have come here, poor plush.
- if(!Kisser)
- return
- plushie_absorb(Kisser)
diff --git a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm
index a78092988e3..cbcc43756a7 100644
--- a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm
@@ -511,8 +511,6 @@
/datum/chemical_reaction/fermi/plushmium/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH)
if(volume < 20) //It creates a normal plush at low volume.. at higher amounts, things get slightly more interesting.
new /obj/item/toy/plush/random(get_turf(my_atom))
- else
- new /obj/item/toy/plush/plushling(get_turf(my_atom))
my_atom.visible_message("The reaction suddenly zaps, creating a plushie!")
my_atom.reagents.clear_reagents()
From fddd28972c5ebcd557ec411d926571b4230f10bb Mon Sep 17 00:00:00 2001
From: Fajetti <88633279+Fajetti@users.noreply.github.com>
Date: Tue, 14 Jun 2022 03:11:12 -0500
Subject: [PATCH 2/2] uhoh
---
modular_citadel/README.md | 4 -
.../code/datums/components/souldeath.dm | 35 -
.../code/datums/status_effects/chems.dm | 643 ------
.../code/game/objects/cit_screenshake.dm | 51 -
.../effects/temporary_visuals/souldeath.dm | 5 -
modular_citadel/code/modules/admin/holder2.dm | 13 -
modular_citadel/code/modules/admin/secrets.dm | 8 -
.../code/modules/client/client_procs.dm | 49 -
.../code/modules/client/loadout/__donator.dm | 581 ------
.../code/modules/client/loadout/_loadout.dm | 91 -
.../code/modules/client/loadout/_medical.dm | 45 -
.../code/modules/client/loadout/_security.dm | 70 -
.../code/modules/client/loadout/_service.dm | 33 -
.../code/modules/client/loadout/backpack.dm | 177 --
.../code/modules/client/loadout/glasses.dm | 47 -
.../code/modules/client/loadout/gloves.dm | 15 -
.../code/modules/client/loadout/hands.dm | 54 -
.../code/modules/client/loadout/head.dm | 202 --
.../code/modules/client/loadout/mask.dm | 33 -
.../code/modules/client/loadout/neck.dm | 108 -
.../code/modules/client/loadout/shoes.dm | 77 -
.../code/modules/client/loadout/suit.dm | 326 ----
.../code/modules/client/loadout/uniform.dm | 741 -------
.../code/modules/client/loadout/unlockable.dm | 30 -
.../modules/client/preferences_savefile.dm | 78 -
.../modules/client/preferences_toggles.dm | 36 -
.../code/modules/client/verbs/who.dm | 131 --
modular_citadel/code/modules/clothing/neck.dm | 23 -
.../code/modules/clothing/suits/suits.dm | 30 -
modular_citadel/code/modules/clothing/trek.dm | 185 --
.../modules/custom_loadout/custom_items.dm | 675 -------
.../modules/custom_loadout/load_to_mob.dm | 61 -
.../modules/custom_loadout/read_from_file.dm | 71 -
.../eventmaps/Spookystation/JTGSZwork.dm | 1134 -----------
.../modules/eventmaps/Spookystation/Tick.ogg | Bin 21737 -> 0 bytes
.../modules/eventmaps/Spookystation/Tock.ogg | Bin 21591 -> 0 bytes
.../modules/eventmaps/Spookystation/areas.dmi | Bin 833 -> 0 bytes
.../eventmaps/Spookystation/basecaveloop.ogg | Bin 78707 -> 0 bytes
.../Spookystation/baseinsideloop.ogg | Bin 551342 -> 0 bytes
.../Spookystation/baseoutsideloop.ogg | Bin 69023 -> 0 bytes
.../eventmaps/Spookystation/caveloop1.ogg | Bin 34789 -> 0 bytes
.../eventmaps/Spookystation/caveloop2.ogg | Bin 34613 -> 0 bytes
.../eventmaps/Spookystation/caveloop3.ogg | Bin 23572 -> 0 bytes
.../eventmaps/Spookystation/caveloop4.ogg | Bin 23572 -> 0 bytes
.../eventmaps/Spookystation/clock32x49.dmi | Bin 2121 -> 0 bytes
.../Spookystation/halloweenPersiWork.dm | 311 ---
.../eventmaps/Spookystation/iconfile32.dmi | Bin 160322 -> 0 bytes
.../eventmaps/Spookystation/iconfile64.dmi | Bin 10810 -> 0 bytes
.../eventmaps/Spookystation/insideloop1.ogg | Bin 120908 -> 0 bytes
.../eventmaps/Spookystation/insideloop2.ogg | Bin 123100 -> 0 bytes
.../eventmaps/Spookystation/insideloop3.ogg | Bin 121935 -> 0 bytes
.../eventmaps/Spookystation/insideloop4.ogg | Bin 117839 -> 0 bytes
.../eventmaps/Spookystation/midnightchime.ogg | Bin 760553 -> 0 bytes
.../eventmaps/Spookystation/outsideloop1.ogg | Bin 73269 -> 0 bytes
.../eventmaps/Spookystation/outsideloop2.ogg | Bin 77084 -> 0 bytes
.../eventmaps/Spookystation/talltree128.dmi | Bin 7069 -> 0 bytes
.../eventmaps/Spookystation/treefall.ogg | Bin 53990 -> 0 bytes
.../eventmaps/Spookystation/woodchop.ogg | Bin 44792 -> 0 bytes
modular_citadel/code/modules/festive/32x64.dm | 60 -
.../code/modules/festive/32x64icons.dmi | Bin 2573 -> 0 bytes
.../code/modules/festive/alleywaybricks.dmi | Bin 753 -> 0 bytes
.../code/modules/festive/bigtree.dmi | Bin 235597 -> 0 bytes
.../code/modules/festive/blue_brick_wall.dmi | Bin 1691 -> 0 bytes
.../modules/festive/blue_brick_window.dmi | Bin 3943 -> 0 bytes
.../code/modules/festive/city_sign.dmi | Bin 1227 -> 0 bytes
.../code/modules/festive/cobblestone.dmi | Bin 1495 -> 0 bytes
.../code/modules/festive/festive_decals.dm | 53 -
.../code/modules/festive/festive_notes.dm | 7 -
.../code/modules/festive/festive_objects.dmi | Bin 2139 -> 0 bytes
.../code/modules/festive/grey_brick_wall.dmi | Bin 1624 -> 0 bytes
.../modules/festive/grey_brick_window.dmi | Bin 3789 -> 0 bytes
.../code/modules/festive/grey_panel_wall.dmi | Bin 1167 -> 0 bytes
.../code/modules/festive/privacy.dm | 26 -
.../code/modules/festive/rails.dmi | Bin 707 -> 0 bytes
.../code/modules/festive/red_brick_wall.dmi | Bin 1630 -> 0 bytes
.../code/modules/festive/red_brick_window.dmi | Bin 4028 -> 0 bytes
.../code/modules/festive/sidewalk.dmi | Bin 1071 -> 0 bytes
.../code/modules/festive/stairs.dmi | Bin 2179 -> 0 bytes
.../code/modules/festive/streetdecals.dmi | Bin 1807 -> 0 bytes
.../code/modules/festive/trainplatform.dmi | Bin 506 -> 0 bytes
.../modules/festive/trainplatformedges.dmi | Bin 444 -> 0 bytes
modular_citadel/code/modules/festive/turfs.dm | 1729 -----------------
.../code/modules/festive/wheelchair.dm | 114 --
.../modules/festive/white_alleywaybricks.dmi | Bin 753 -> 0 bytes
.../code/modules/festive/white_brick_wall.dmi | Bin 1623 -> 0 bytes
.../modules/festive/white_brick_window.dmi | Bin 3867 -> 0 bytes
.../code/modules/festive/wooden.dmi | Bin 423 -> 0 bytes
.../code/modules/mentor/dementor.dm | 19 -
modular_citadel/code/modules/mentor/follow.dm | 28 -
modular_citadel/code/modules/mentor/mentor.dm | 92 -
.../code/modules/mentor/mentor_memo.dm | 165 --
.../code/modules/mentor/mentor_verbs.dm | 13 -
.../code/modules/mentor/mentorhelp.dm | 98 -
.../code/modules/mentor/mentorpm.dm | 86 -
.../code/modules/mentor/mentorsay.dm | 19 -
.../code/modules/mob/cit_emotes.dm | 336 ----
.../code/modules/mob/living/carbon/carbon.dm | 16 -
.../modules/mob/living/carbon/damage_procs.dm | 12 -
.../modules/mob/living/carbon/human/human.dm | 27 -
.../mob/living/carbon/human/human_defense.dm | 8 -
.../mob/living/carbon/reindex_screams.dm | 57 -
.../code/modules/mob/living/living.dm | 24 -
.../ammunition/ballistic/smg/smg.dm | 5 -
.../projectiles/ammunition/caseless.dm | 13 -
.../projectiles/boxes_magazines/ammo_boxes.dm | 23 -
.../boxes_magazines/external/pistol.dm | 118 --
.../boxes_magazines/external/smg/smg.dm | 3 -
.../projectiles/bullets/bullets/smg.dm | 4 -
.../projectiles/guns/ballistic/handguns.dm | 46 -
.../projectiles/guns/ballistic/rifles.dm | 273 ---
.../projectiles/guns/ballistic/spinfusor.dm | 67 -
.../projectiles/guns/energy/energy_gun.dm | 47 -
.../modules/projectiles/guns/pumpenergy.dm | 193 --
.../code/modules/projectiles/guns/toys.dm | 68 -
.../projectiles/projectiles/reusable.dm | 22 -
.../reagents/chemistry/reagents/MKUltra.dm | 303 ---
.../reagents/chemistry/reagents/SDGF.dm | 400 ----
.../reagents/chemistry/reagents/astrogen.dm | 172 --
.../chemistry/reagents/eigentstasium.dm | 204 --
.../chemistry/reagents/enlargement.dm | 299 ---
.../chemistry/reagents/fermi_reagents.dm | 500 -----
.../reagents/chemistry/reagents/healing.dm | 223 ---
.../reagents/chemistry/recipes/FermiCalc.Py | 11 -
.../reagents/chemistry/recipes/fermi.dm | 617 ------
.../code/modules/reagents/objects/clothes.dm | 74 -
.../code/modules/reagents/objects/items.dm | 156 --
.../modules/vectorcrafts/vector_process.dm | 28 -
.../modules/vectorcrafts/vectorcar_heads.dm | 28 -
.../code/modules/vectorcrafts/vectorcraft.dm | 615 ------
.../code/modules/vectorcrafts/vectortruck.dm | 147 --
.../modules/vectorcrafts/vectorvariants.dm | 57 -
modular_citadel/icons/effects/souldeath.dmi | Bin 1914 -> 0 bytes
modular_citadel/icons/mob/64x32_effects.dmi | Bin 39945 -> 0 bytes
.../icons/mob/actions/actions_slime.dmi | Bin 664 -> 0 bytes
.../icons/mob/citadel/guns_lefthand.dmi | Bin 15284 -> 0 bytes
.../icons/mob/citadel/guns_righthand.dmi | Bin 15827 -> 0 bytes
modular_citadel/icons/mob/citadel/neck.dmi | Bin 347 -> 0 bytes
modular_citadel/icons/mob/citadel/suit.dmi | Bin 796 -> 0 bytes
.../icons/mob/citadel/uniforms.dmi | Bin 28379 -> 0 bytes
.../icons/mob/citadel_refs/borg HUDs.dmi | Bin 1338 -> 0 bytes
.../mob/citadel_refs/cit_tail_reference.dmi | Bin 83597 -> 0 bytes
.../icons/mob/citadel_refs/cit_wings.dmi | Bin 8741 -> 0 bytes
.../mob/citadel_refs/dogborg animations.dmi | Bin 41692 -> 0 bytes
.../mob/citadel_refs/furryrace_references.dmi | Bin 281009 -> 0 bytes
.../mob/citadel_refs/furrytail_references.dmi | Bin 71186 -> 0 bytes
.../mam_body_markings Matrixed Ref.dmi | Bin 57052 -> 0 bytes
.../mob/citadel_refs/snowflake_parts.dmi | Bin 2772 -> 0 bytes
.../taur_referencesVOREbellies.dmi | Bin 117208 -> 0 bytes
.../icons/mob/citadel_refs/widerobot_vr.dmi | Bin 349941 -> 0 bytes
.../icons/mob/clothing/devilwings64x64.dmi | Bin 790 -> 0 bytes
modular_citadel/icons/mob/clothing/necks.dmi | Bin 292 -> 0 bytes
.../icons/mob/clothing/trek_mob_icon.dmi | Bin 5178 -> 0 bytes
.../icons/mob/inhands/guns_lefthand.dmi | Bin 1593 -> 0 bytes
.../icons/mob/inhands/guns_righthand.dmi | Bin 1429 -> 0 bytes
.../icons/mob/inhands/stunsword_left.dmi | Bin 403 -> 0 bytes
.../icons/mob/inhands/stunsword_right.dmi | Bin 400 -> 0 bytes
modular_citadel/icons/mob/ipc_antennas.dmi | Bin 639 -> 0 bytes
modular_citadel/icons/mob/ipc_screens.dmi | Bin 6861 -> 0 bytes
.../icons/mob/legacy robo transforms.dmi | Bin 123757 -> 0 bytes
modular_citadel/icons/mob/mam_ears.dmi | Bin 10067 -> 0 bytes
modular_citadel/icons/mob/mam_markings.dmi | Bin 115508 -> 0 bytes
modular_citadel/icons/mob/mam_snouts.dmi | Bin 13065 -> 0 bytes
modular_citadel/icons/mob/mam_tails OLD.dmi | Bin 59777 -> 0 bytes
modular_citadel/icons/mob/mam_tails.dmi | Bin 78989 -> 0 bytes
modular_citadel/icons/mob/mam_taur.dmi | Bin 59290 -> 0 bytes
.../icons/mob/markings_notmammals.dmi | Bin 48261 -> 0 bytes
modular_citadel/icons/mob/robots.dmi | Bin 179052 -> 0 bytes
.../icons/mob/synthliz_antennas.dmi | Bin 1587 -> 0 bytes
.../icons/mob/synthliz_body_markings.dmi | Bin 1567 -> 0 bytes
modular_citadel/icons/mob/synthliz_snouts.dmi | Bin 781 -> 0 bytes
modular_citadel/icons/mob/synthliz_tails.dmi | Bin 1888 -> 0 bytes
modular_citadel/icons/mob/widerobot.dmi | Bin 722742 -> 0 bytes
.../icons/mob/xeno_parts_greyscale.dmi | Bin 3266 -> 0 bytes
modular_citadel/icons/obj/boombox.dmi | Bin 1091 -> 0 bytes
.../icons/obj/clothing/cit_hats.dmi | Bin 285 -> 0 bytes
.../icons/obj/clothing/cit_neck.dmi | Bin 1016 -> 0 bytes
.../icons/obj/clothing/trek_item_icon.dmi | Bin 2238 -> 0 bytes
modular_citadel/icons/obj/guns/VGguns.dmi | Bin 6361 -> 0 bytes
modular_citadel/icons/obj/guns/cit_guns.dmi | Bin 31462 -> 0 bytes
.../icons/obj/guns/pumpactionblaster.dmi | Bin 1307 -> 0 bytes
modular_citadel/icons/obj/guns/toys.dmi | Bin 625 -> 0 bytes
modular_citadel/icons/ui/backgrounds.dmi | Bin 2780 -> 0 bytes
modular_citadel/icons/ui/screen_clockwork.dmi | Bin 5174 -> 0 bytes
modular_citadel/icons/ui/screen_cyborg.dmi | Bin 1338 -> 0 bytes
modular_citadel/icons/ui/screen_gen.dmi | Bin 6123 -> 0 bytes
modular_citadel/icons/ui/screen_midnight.dmi | Bin 7416 -> 0 bytes
modular_citadel/icons/ui/screen_operative.dmi | Bin 7032 -> 0 bytes
.../icons/ui/screen_plasmafire.dmi | Bin 6597 -> 0 bytes
modular_citadel/icons/ui/screen_slimecore.dmi | Bin 6343 -> 0 bytes
modular_citadel/sound/voice/awoo.ogg | Bin 44457 -> 0 bytes
modular_citadel/sound/voice/bark1.ogg | Bin 10218 -> 0 bytes
modular_citadel/sound/voice/bark2.ogg | Bin 12733 -> 0 bytes
modular_citadel/sound/voice/clap.ogg | Bin 30547 -> 0 bytes
modular_citadel/sound/voice/hiss.ogg | Bin 17956 -> 0 bytes
.../sound/voice/human_female_pain_1.ogg | Bin 12831 -> 0 bytes
.../sound/voice/human_female_pain_2.ogg | Bin 12600 -> 0 bytes
.../sound/voice/human_female_pain_3.ogg | Bin 11713 -> 0 bytes
.../sound/voice/human_female_scream_2.ogg | Bin 11233 -> 0 bytes
.../sound/voice/human_female_scream_3.ogg | Bin 8957 -> 0 bytes
.../sound/voice/human_female_scream_4.ogg | Bin 6832 -> 0 bytes
.../sound/voice/human_male_pain_1.ogg | Bin 15956 -> 0 bytes
.../sound/voice/human_male_pain_2.ogg | Bin 12868 -> 0 bytes
.../sound/voice/human_male_pain_3.ogg | Bin 8959 -> 0 bytes
.../sound/voice/human_male_pain_rare.ogg | Bin 17007 -> 0 bytes
.../sound/voice/human_male_scream_1.ogg | Bin 6005 -> 0 bytes
.../sound/voice/human_male_scream_2.ogg | Bin 7305 -> 0 bytes
.../sound/voice/human_male_scream_3.ogg | Bin 7672 -> 0 bytes
.../sound/voice/human_male_scream_4.ogg | Bin 6490 -> 0 bytes
modular_citadel/sound/voice/meow1.ogg | Bin 9534 -> 0 bytes
modular_citadel/sound/voice/merowr.ogg | Bin 13163 -> 0 bytes
modular_citadel/sound/voice/merp.ogg | Bin 7826 -> 0 bytes
modular_citadel/sound/voice/mothsqueak.ogg | Bin 11207 -> 0 bytes
modular_citadel/sound/voice/nya.ogg | Bin 11142 -> 0 bytes
.../sound/voice/pain emote credits.txt | 1 -
modular_citadel/sound/voice/peep.ogg | Bin 9078 -> 0 bytes
modular_citadel/sound/voice/purr.ogg | Bin 78756 -> 0 bytes
modular_citadel/sound/voice/raptor_purr.ogg | Bin 24369 -> 0 bytes
modular_citadel/sound/voice/scream_cat.ogg | Bin 11599 -> 0 bytes
modular_citadel/sound/voice/scream_f1.ogg | Bin 7234 -> 0 bytes
modular_citadel/sound/voice/scream_f2.ogg | Bin 11794 -> 0 bytes
modular_citadel/sound/voice/scream_f3.ogg | Bin 5387 -> 0 bytes
.../sound/voice/scream_jelly_f1.ogg | Bin 16235 -> 0 bytes
.../sound/voice/scream_jelly_f2.ogg | Bin 24895 -> 0 bytes
.../sound/voice/scream_jelly_m1.ogg | Bin 31868 -> 0 bytes
.../sound/voice/scream_jelly_m2.ogg | Bin 36472 -> 0 bytes
modular_citadel/sound/voice/scream_lizard.ogg | Bin 7472 -> 0 bytes
modular_citadel/sound/voice/scream_m.ogg | Bin 17075 -> 0 bytes
modular_citadel/sound/voice/scream_m1.ogg | Bin 9625 -> 0 bytes
modular_citadel/sound/voice/scream_m2.ogg | Bin 13178 -> 0 bytes
modular_citadel/sound/voice/scream_monkey.ogg | Bin 8382 -> 0 bytes
modular_citadel/sound/voice/scream_moth.ogg | Bin 82001 -> 0 bytes
.../sound/voice/scream_silicon.ogg | Bin 10953 -> 0 bytes
.../sound/voice/scream_skeleton.ogg | Bin 14818 -> 0 bytes
modular_citadel/sound/voice/snap.ogg | Bin 9372 -> 0 bytes
modular_citadel/sound/voice/snap2.ogg | Bin 13617 -> 0 bytes
modular_citadel/sound/voice/snap3.ogg | Bin 18541 -> 0 bytes
modular_citadel/sound/voice/weh.ogg | Bin 8029 -> 0 bytes
237 files changed, 13879 deletions(-)
delete mode 100644 modular_citadel/README.md
delete mode 100644 modular_citadel/code/datums/components/souldeath.dm
delete mode 100644 modular_citadel/code/datums/status_effects/chems.dm
delete mode 100644 modular_citadel/code/game/objects/cit_screenshake.dm
delete mode 100644 modular_citadel/code/game/objects/effects/temporary_visuals/souldeath.dm
delete mode 100644 modular_citadel/code/modules/admin/holder2.dm
delete mode 100644 modular_citadel/code/modules/admin/secrets.dm
delete mode 100644 modular_citadel/code/modules/client/client_procs.dm
delete mode 100644 modular_citadel/code/modules/client/loadout/__donator.dm
delete mode 100644 modular_citadel/code/modules/client/loadout/_loadout.dm
delete mode 100644 modular_citadel/code/modules/client/loadout/_medical.dm
delete mode 100644 modular_citadel/code/modules/client/loadout/_security.dm
delete mode 100644 modular_citadel/code/modules/client/loadout/_service.dm
delete mode 100644 modular_citadel/code/modules/client/loadout/backpack.dm
delete mode 100644 modular_citadel/code/modules/client/loadout/glasses.dm
delete mode 100644 modular_citadel/code/modules/client/loadout/gloves.dm
delete mode 100644 modular_citadel/code/modules/client/loadout/hands.dm
delete mode 100644 modular_citadel/code/modules/client/loadout/head.dm
delete mode 100644 modular_citadel/code/modules/client/loadout/mask.dm
delete mode 100644 modular_citadel/code/modules/client/loadout/neck.dm
delete mode 100644 modular_citadel/code/modules/client/loadout/shoes.dm
delete mode 100644 modular_citadel/code/modules/client/loadout/suit.dm
delete mode 100644 modular_citadel/code/modules/client/loadout/uniform.dm
delete mode 100644 modular_citadel/code/modules/client/loadout/unlockable.dm
delete mode 100644 modular_citadel/code/modules/client/preferences_savefile.dm
delete mode 100644 modular_citadel/code/modules/client/preferences_toggles.dm
delete mode 100644 modular_citadel/code/modules/client/verbs/who.dm
delete mode 100644 modular_citadel/code/modules/clothing/neck.dm
delete mode 100644 modular_citadel/code/modules/clothing/suits/suits.dm
delete mode 100644 modular_citadel/code/modules/clothing/trek.dm
delete mode 100644 modular_citadel/code/modules/custom_loadout/custom_items.dm
delete mode 100644 modular_citadel/code/modules/custom_loadout/load_to_mob.dm
delete mode 100644 modular_citadel/code/modules/custom_loadout/read_from_file.dm
delete mode 100644 modular_citadel/code/modules/eventmaps/Spookystation/JTGSZwork.dm
delete mode 100644 modular_citadel/code/modules/eventmaps/Spookystation/Tick.ogg
delete mode 100644 modular_citadel/code/modules/eventmaps/Spookystation/Tock.ogg
delete mode 100644 modular_citadel/code/modules/eventmaps/Spookystation/areas.dmi
delete mode 100644 modular_citadel/code/modules/eventmaps/Spookystation/basecaveloop.ogg
delete mode 100644 modular_citadel/code/modules/eventmaps/Spookystation/baseinsideloop.ogg
delete mode 100644 modular_citadel/code/modules/eventmaps/Spookystation/baseoutsideloop.ogg
delete mode 100644 modular_citadel/code/modules/eventmaps/Spookystation/caveloop1.ogg
delete mode 100644 modular_citadel/code/modules/eventmaps/Spookystation/caveloop2.ogg
delete mode 100644 modular_citadel/code/modules/eventmaps/Spookystation/caveloop3.ogg
delete mode 100644 modular_citadel/code/modules/eventmaps/Spookystation/caveloop4.ogg
delete mode 100644 modular_citadel/code/modules/eventmaps/Spookystation/clock32x49.dmi
delete mode 100644 modular_citadel/code/modules/eventmaps/Spookystation/halloweenPersiWork.dm
delete mode 100644 modular_citadel/code/modules/eventmaps/Spookystation/iconfile32.dmi
delete mode 100644 modular_citadel/code/modules/eventmaps/Spookystation/iconfile64.dmi
delete mode 100644 modular_citadel/code/modules/eventmaps/Spookystation/insideloop1.ogg
delete mode 100644 modular_citadel/code/modules/eventmaps/Spookystation/insideloop2.ogg
delete mode 100644 modular_citadel/code/modules/eventmaps/Spookystation/insideloop3.ogg
delete mode 100644 modular_citadel/code/modules/eventmaps/Spookystation/insideloop4.ogg
delete mode 100644 modular_citadel/code/modules/eventmaps/Spookystation/midnightchime.ogg
delete mode 100644 modular_citadel/code/modules/eventmaps/Spookystation/outsideloop1.ogg
delete mode 100644 modular_citadel/code/modules/eventmaps/Spookystation/outsideloop2.ogg
delete mode 100644 modular_citadel/code/modules/eventmaps/Spookystation/talltree128.dmi
delete mode 100644 modular_citadel/code/modules/eventmaps/Spookystation/treefall.ogg
delete mode 100644 modular_citadel/code/modules/eventmaps/Spookystation/woodchop.ogg
delete mode 100644 modular_citadel/code/modules/festive/32x64.dm
delete mode 100644 modular_citadel/code/modules/festive/32x64icons.dmi
delete mode 100644 modular_citadel/code/modules/festive/alleywaybricks.dmi
delete mode 100644 modular_citadel/code/modules/festive/bigtree.dmi
delete mode 100644 modular_citadel/code/modules/festive/blue_brick_wall.dmi
delete mode 100644 modular_citadel/code/modules/festive/blue_brick_window.dmi
delete mode 100644 modular_citadel/code/modules/festive/city_sign.dmi
delete mode 100644 modular_citadel/code/modules/festive/cobblestone.dmi
delete mode 100644 modular_citadel/code/modules/festive/festive_decals.dm
delete mode 100644 modular_citadel/code/modules/festive/festive_notes.dm
delete mode 100644 modular_citadel/code/modules/festive/festive_objects.dmi
delete mode 100644 modular_citadel/code/modules/festive/grey_brick_wall.dmi
delete mode 100644 modular_citadel/code/modules/festive/grey_brick_window.dmi
delete mode 100644 modular_citadel/code/modules/festive/grey_panel_wall.dmi
delete mode 100644 modular_citadel/code/modules/festive/privacy.dm
delete mode 100644 modular_citadel/code/modules/festive/rails.dmi
delete mode 100644 modular_citadel/code/modules/festive/red_brick_wall.dmi
delete mode 100644 modular_citadel/code/modules/festive/red_brick_window.dmi
delete mode 100644 modular_citadel/code/modules/festive/sidewalk.dmi
delete mode 100644 modular_citadel/code/modules/festive/stairs.dmi
delete mode 100644 modular_citadel/code/modules/festive/streetdecals.dmi
delete mode 100644 modular_citadel/code/modules/festive/trainplatform.dmi
delete mode 100644 modular_citadel/code/modules/festive/trainplatformedges.dmi
delete mode 100644 modular_citadel/code/modules/festive/turfs.dm
delete mode 100644 modular_citadel/code/modules/festive/wheelchair.dm
delete mode 100644 modular_citadel/code/modules/festive/white_alleywaybricks.dmi
delete mode 100644 modular_citadel/code/modules/festive/white_brick_wall.dmi
delete mode 100644 modular_citadel/code/modules/festive/white_brick_window.dmi
delete mode 100644 modular_citadel/code/modules/festive/wooden.dmi
delete mode 100644 modular_citadel/code/modules/mentor/dementor.dm
delete mode 100644 modular_citadel/code/modules/mentor/follow.dm
delete mode 100644 modular_citadel/code/modules/mentor/mentor.dm
delete mode 100644 modular_citadel/code/modules/mentor/mentor_memo.dm
delete mode 100644 modular_citadel/code/modules/mentor/mentor_verbs.dm
delete mode 100644 modular_citadel/code/modules/mentor/mentorhelp.dm
delete mode 100644 modular_citadel/code/modules/mentor/mentorpm.dm
delete mode 100644 modular_citadel/code/modules/mentor/mentorsay.dm
delete mode 100644 modular_citadel/code/modules/mob/cit_emotes.dm
delete mode 100644 modular_citadel/code/modules/mob/living/carbon/carbon.dm
delete mode 100644 modular_citadel/code/modules/mob/living/carbon/damage_procs.dm
delete mode 100644 modular_citadel/code/modules/mob/living/carbon/human/human.dm
delete mode 100644 modular_citadel/code/modules/mob/living/carbon/human/human_defense.dm
delete mode 100644 modular_citadel/code/modules/mob/living/carbon/reindex_screams.dm
delete mode 100644 modular_citadel/code/modules/mob/living/living.dm
delete mode 100644 modular_citadel/code/modules/projectiles/ammunition/ballistic/smg/smg.dm
delete mode 100644 modular_citadel/code/modules/projectiles/ammunition/caseless.dm
delete mode 100644 modular_citadel/code/modules/projectiles/boxes_magazines/ammo_boxes.dm
delete mode 100644 modular_citadel/code/modules/projectiles/boxes_magazines/external/pistol.dm
delete mode 100644 modular_citadel/code/modules/projectiles/boxes_magazines/external/smg/smg.dm
delete mode 100644 modular_citadel/code/modules/projectiles/bullets/bullets/smg.dm
delete mode 100644 modular_citadel/code/modules/projectiles/guns/ballistic/handguns.dm
delete mode 100644 modular_citadel/code/modules/projectiles/guns/ballistic/rifles.dm
delete mode 100644 modular_citadel/code/modules/projectiles/guns/ballistic/spinfusor.dm
delete mode 100644 modular_citadel/code/modules/projectiles/guns/energy/energy_gun.dm
delete mode 100644 modular_citadel/code/modules/projectiles/guns/pumpenergy.dm
delete mode 100644 modular_citadel/code/modules/projectiles/guns/toys.dm
delete mode 100644 modular_citadel/code/modules/projectiles/projectiles/reusable.dm
delete mode 100644 modular_citadel/code/modules/reagents/chemistry/reagents/MKUltra.dm
delete mode 100644 modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm
delete mode 100644 modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm
delete mode 100644 modular_citadel/code/modules/reagents/chemistry/reagents/eigentstasium.dm
delete mode 100644 modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm
delete mode 100644 modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm
delete mode 100644 modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm
delete mode 100644 modular_citadel/code/modules/reagents/chemistry/recipes/FermiCalc.Py
delete mode 100644 modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm
delete mode 100644 modular_citadel/code/modules/reagents/objects/clothes.dm
delete mode 100644 modular_citadel/code/modules/reagents/objects/items.dm
delete mode 100644 modular_citadel/code/modules/vectorcrafts/vector_process.dm
delete mode 100644 modular_citadel/code/modules/vectorcrafts/vectorcar_heads.dm
delete mode 100644 modular_citadel/code/modules/vectorcrafts/vectorcraft.dm
delete mode 100644 modular_citadel/code/modules/vectorcrafts/vectortruck.dm
delete mode 100644 modular_citadel/code/modules/vectorcrafts/vectorvariants.dm
delete mode 100644 modular_citadel/icons/effects/souldeath.dmi
delete mode 100644 modular_citadel/icons/mob/64x32_effects.dmi
delete mode 100644 modular_citadel/icons/mob/actions/actions_slime.dmi
delete mode 100644 modular_citadel/icons/mob/citadel/guns_lefthand.dmi
delete mode 100644 modular_citadel/icons/mob/citadel/guns_righthand.dmi
delete mode 100644 modular_citadel/icons/mob/citadel/neck.dmi
delete mode 100644 modular_citadel/icons/mob/citadel/suit.dmi
delete mode 100644 modular_citadel/icons/mob/citadel/uniforms.dmi
delete mode 100644 modular_citadel/icons/mob/citadel_refs/borg HUDs.dmi
delete mode 100644 modular_citadel/icons/mob/citadel_refs/cit_tail_reference.dmi
delete mode 100644 modular_citadel/icons/mob/citadel_refs/cit_wings.dmi
delete mode 100644 modular_citadel/icons/mob/citadel_refs/dogborg animations.dmi
delete mode 100644 modular_citadel/icons/mob/citadel_refs/furryrace_references.dmi
delete mode 100644 modular_citadel/icons/mob/citadel_refs/furrytail_references.dmi
delete mode 100644 modular_citadel/icons/mob/citadel_refs/mam_body_markings Matrixed Ref.dmi
delete mode 100644 modular_citadel/icons/mob/citadel_refs/snowflake_parts.dmi
delete mode 100644 modular_citadel/icons/mob/citadel_refs/taur_referencesVOREbellies.dmi
delete mode 100644 modular_citadel/icons/mob/citadel_refs/widerobot_vr.dmi
delete mode 100644 modular_citadel/icons/mob/clothing/devilwings64x64.dmi
delete mode 100644 modular_citadel/icons/mob/clothing/necks.dmi
delete mode 100644 modular_citadel/icons/mob/clothing/trek_mob_icon.dmi
delete mode 100644 modular_citadel/icons/mob/inhands/guns_lefthand.dmi
delete mode 100644 modular_citadel/icons/mob/inhands/guns_righthand.dmi
delete mode 100644 modular_citadel/icons/mob/inhands/stunsword_left.dmi
delete mode 100644 modular_citadel/icons/mob/inhands/stunsword_right.dmi
delete mode 100644 modular_citadel/icons/mob/ipc_antennas.dmi
delete mode 100644 modular_citadel/icons/mob/ipc_screens.dmi
delete mode 100644 modular_citadel/icons/mob/legacy robo transforms.dmi
delete mode 100644 modular_citadel/icons/mob/mam_ears.dmi
delete mode 100644 modular_citadel/icons/mob/mam_markings.dmi
delete mode 100644 modular_citadel/icons/mob/mam_snouts.dmi
delete mode 100644 modular_citadel/icons/mob/mam_tails OLD.dmi
delete mode 100644 modular_citadel/icons/mob/mam_tails.dmi
delete mode 100644 modular_citadel/icons/mob/mam_taur.dmi
delete mode 100644 modular_citadel/icons/mob/markings_notmammals.dmi
delete mode 100644 modular_citadel/icons/mob/robots.dmi
delete mode 100644 modular_citadel/icons/mob/synthliz_antennas.dmi
delete mode 100644 modular_citadel/icons/mob/synthliz_body_markings.dmi
delete mode 100644 modular_citadel/icons/mob/synthliz_snouts.dmi
delete mode 100644 modular_citadel/icons/mob/synthliz_tails.dmi
delete mode 100644 modular_citadel/icons/mob/widerobot.dmi
delete mode 100644 modular_citadel/icons/mob/xeno_parts_greyscale.dmi
delete mode 100644 modular_citadel/icons/obj/boombox.dmi
delete mode 100644 modular_citadel/icons/obj/clothing/cit_hats.dmi
delete mode 100644 modular_citadel/icons/obj/clothing/cit_neck.dmi
delete mode 100644 modular_citadel/icons/obj/clothing/trek_item_icon.dmi
delete mode 100644 modular_citadel/icons/obj/guns/VGguns.dmi
delete mode 100644 modular_citadel/icons/obj/guns/cit_guns.dmi
delete mode 100644 modular_citadel/icons/obj/guns/pumpactionblaster.dmi
delete mode 100644 modular_citadel/icons/obj/guns/toys.dmi
delete mode 100644 modular_citadel/icons/ui/backgrounds.dmi
delete mode 100644 modular_citadel/icons/ui/screen_clockwork.dmi
delete mode 100644 modular_citadel/icons/ui/screen_cyborg.dmi
delete mode 100644 modular_citadel/icons/ui/screen_gen.dmi
delete mode 100644 modular_citadel/icons/ui/screen_midnight.dmi
delete mode 100644 modular_citadel/icons/ui/screen_operative.dmi
delete mode 100644 modular_citadel/icons/ui/screen_plasmafire.dmi
delete mode 100644 modular_citadel/icons/ui/screen_slimecore.dmi
delete mode 100644 modular_citadel/sound/voice/awoo.ogg
delete mode 100644 modular_citadel/sound/voice/bark1.ogg
delete mode 100644 modular_citadel/sound/voice/bark2.ogg
delete mode 100644 modular_citadel/sound/voice/clap.ogg
delete mode 100644 modular_citadel/sound/voice/hiss.ogg
delete mode 100644 modular_citadel/sound/voice/human_female_pain_1.ogg
delete mode 100644 modular_citadel/sound/voice/human_female_pain_2.ogg
delete mode 100644 modular_citadel/sound/voice/human_female_pain_3.ogg
delete mode 100644 modular_citadel/sound/voice/human_female_scream_2.ogg
delete mode 100644 modular_citadel/sound/voice/human_female_scream_3.ogg
delete mode 100644 modular_citadel/sound/voice/human_female_scream_4.ogg
delete mode 100644 modular_citadel/sound/voice/human_male_pain_1.ogg
delete mode 100644 modular_citadel/sound/voice/human_male_pain_2.ogg
delete mode 100644 modular_citadel/sound/voice/human_male_pain_3.ogg
delete mode 100644 modular_citadel/sound/voice/human_male_pain_rare.ogg
delete mode 100644 modular_citadel/sound/voice/human_male_scream_1.ogg
delete mode 100644 modular_citadel/sound/voice/human_male_scream_2.ogg
delete mode 100644 modular_citadel/sound/voice/human_male_scream_3.ogg
delete mode 100644 modular_citadel/sound/voice/human_male_scream_4.ogg
delete mode 100644 modular_citadel/sound/voice/meow1.ogg
delete mode 100644 modular_citadel/sound/voice/merowr.ogg
delete mode 100644 modular_citadel/sound/voice/merp.ogg
delete mode 100644 modular_citadel/sound/voice/mothsqueak.ogg
delete mode 100644 modular_citadel/sound/voice/nya.ogg
delete mode 100644 modular_citadel/sound/voice/pain emote credits.txt
delete mode 100644 modular_citadel/sound/voice/peep.ogg
delete mode 100644 modular_citadel/sound/voice/purr.ogg
delete mode 100644 modular_citadel/sound/voice/raptor_purr.ogg
delete mode 100644 modular_citadel/sound/voice/scream_cat.ogg
delete mode 100644 modular_citadel/sound/voice/scream_f1.ogg
delete mode 100644 modular_citadel/sound/voice/scream_f2.ogg
delete mode 100644 modular_citadel/sound/voice/scream_f3.ogg
delete mode 100644 modular_citadel/sound/voice/scream_jelly_f1.ogg
delete mode 100644 modular_citadel/sound/voice/scream_jelly_f2.ogg
delete mode 100644 modular_citadel/sound/voice/scream_jelly_m1.ogg
delete mode 100644 modular_citadel/sound/voice/scream_jelly_m2.ogg
delete mode 100644 modular_citadel/sound/voice/scream_lizard.ogg
delete mode 100644 modular_citadel/sound/voice/scream_m.ogg
delete mode 100644 modular_citadel/sound/voice/scream_m1.ogg
delete mode 100644 modular_citadel/sound/voice/scream_m2.ogg
delete mode 100644 modular_citadel/sound/voice/scream_monkey.ogg
delete mode 100644 modular_citadel/sound/voice/scream_moth.ogg
delete mode 100644 modular_citadel/sound/voice/scream_silicon.ogg
delete mode 100644 modular_citadel/sound/voice/scream_skeleton.ogg
delete mode 100644 modular_citadel/sound/voice/snap.ogg
delete mode 100644 modular_citadel/sound/voice/snap2.ogg
delete mode 100644 modular_citadel/sound/voice/snap3.ogg
delete mode 100644 modular_citadel/sound/voice/weh.ogg
diff --git a/modular_citadel/README.md b/modular_citadel/README.md
deleted file mode 100644
index c5443bdbb5c..00000000000
--- a/modular_citadel/README.md
+++ /dev/null
@@ -1,4 +0,0 @@
-Hooray modularity!
-
-Things that modify core files without directly touching said core files go here. This is similar to how Hippie handles things.
-This stops dreammaker from throwing errors and warnings if you try to compile these files while they're inside code/citadel/.
diff --git a/modular_citadel/code/datums/components/souldeath.dm b/modular_citadel/code/datums/components/souldeath.dm
deleted file mode 100644
index ab45210a466..00000000000
--- a/modular_citadel/code/datums/components/souldeath.dm
+++ /dev/null
@@ -1,35 +0,0 @@
-/datum/component/souldeath
- var/mob/living/wearer
- var/equip_slot
- var/signal = FALSE
-
-/datum/component/souldeath/Initialize()
- if(!isitem(parent))
- return COMPONENT_INCOMPATIBLE
- RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, .proc/equip)
- RegisterSignal(parent, COMSIG_ITEM_DROPPED, .proc/unequip)
-
-/datum/component/souldeath/proc/equip(datum/source, mob/living/equipper, slot)
- if(!slot || equip_slot == slot)
- wearer = equipper
- RegisterSignal(wearer, COMSIG_MOB_DEATH, .proc/die, TRUE)
- signal = TRUE
- else
- if(signal)
- UnregisterSignal(wearer, COMSIG_MOB_DEATH)
- signal = FALSE
- return
-
-/datum/component/souldeath/proc/unequip()
- UnregisterSignal(wearer, COMSIG_MOB_DEATH)
- wearer = null
- signal = FALSE
-
-/datum/component/souldeath/proc/die()
- if(!wearer)
- return //idfk
- new/obj/effect/temp_visual/souldeath(wearer.loc, wearer)
- playsound(wearer, 'sound/misc/souldeath.ogg', 100, FALSE)
-
-/datum/component/souldeath/neck
- equip_slot = SLOT_NECK
diff --git a/modular_citadel/code/datums/status_effects/chems.dm b/modular_citadel/code/datums/status_effects/chems.dm
deleted file mode 100644
index 0cef4b116f0..00000000000
--- a/modular_citadel/code/datums/status_effects/chems.dm
+++ /dev/null
@@ -1,643 +0,0 @@
-#define DICK_MOVEMENT_SPEED "hugedick"
-#define BREAST_MOVEMENT_SPEED "megamilk"
-
-/datum/status_effect/chem/SGDF
- id = "SGDF"
- var/mob/living/fermi_Clone
- var/mob/living/original
- var/datum/mind/originalmind
- var/status_set = FALSE
- alert_type = null
-
-/datum/status_effect/chem/SGDF/on_apply()
- log_reagent("FERMICHEM: SGDF status appied on [owner], ID: [owner.key]")
- fermi_Clone = owner
- return ..()
-
-/datum/status_effect/chem/SGDF/tick()
- if(!status_set)
- return ..()
- if(original.stat == DEAD || original == null || !original)
- if((fermi_Clone && fermi_Clone.stat != DEAD) || (fermi_Clone == null))
- if(originalmind)
- owner.remove_status_effect(src)
- ..()
-
-/datum/status_effect/chem/SGDF/on_remove()
- log_reagent("FERMICHEM: SGDF mind shift applied. [owner] is now playing as their clone and should not have memories after their clone split (look up SGDF status applied). ID: [owner.key]")
- originalmind.transfer_to(fermi_Clone)
- to_chat(owner, "Lucidity shoots to your previously blank mind as your mind suddenly finishes the cloning process. You marvel for a moment at yourself, as your mind subconciously recollects all your memories up until the point when you cloned yourself. Curiously, you find that you memories are blank after you ingested the synthetic serum, leaving you to wonder where the other you is.")
- fermi_Clone = null
- return ..()
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-///////////////////////////////////////////////
-// Astral INSURANCE
-///////////////////////////////////////////////
-//Makes sure people can't get trapped in each other's bodies if lag causes a deync between proc calls.
-
-
-/datum/status_effect/chem/astral_insurance
- id = "astral_insurance"
- var/mob/living/original
- var/datum/mind/originalmind
- alert_type = null
-
-/datum/status_effect/chem/astral_insurance/tick(mob/living/carbon/M)
- . = ..()
- if(owner.reagents.has_reagent(/datum/reagent/fermi/astral))
- return
- if(owner.mind == originalmind) //If they're home, let the chem deal with deletion.
- return
- if(owner.mind)
- var/mob/living/simple_animal/astral/G = new(get_turf(M.loc))
- owner.mind.transfer_to(G)//Just in case someone else is inside of you, it makes them a ghost and should hopefully bring them home at the end.
- to_chat(G, "[M]'s conciousness snaps back to them as their astrogen runs out, kicking your projected mind out!'")
- log_reagent("FERMICHEM: [M]'s possesser has been booted out into a astral ghost!")
- originalmind.transfer_to(original)
-
-/datum/status_effect/chem/astral_insurance/on_remove() //God damnit get them home!
- if(owner.mind != originalmind) //If they're home, HOORAY
- if(owner.mind)
- var/mob/living/simple_animal/astral/G = new(get_turf(owner))
- owner.mind.transfer_to(G)//Just in case someone else is inside of you, it makes them a ghost and should hopefully bring them home at the end.
- to_chat(G, "[owner]'s conciousness snaps back to them as their astrogen runs out, kicking your projected mind out!'")
- log_reagent("FERMICHEM: [owner]'s possesser has been booted out into a astral ghost!")
- originalmind.transfer_to(original)
- return ..()
-
-/*//////////////////////////////////////////
- Mind control functions!
-///////////////////////////////////////////
-*/
-
-//Preamble
-
-/mob/living/verb/toggle_hypno()
- set category = "IC"
- set name = "Toggle Lewd Hypno"
- set desc = "Allows you to toggle if you'd like lewd flavour messages for hypno features, such as MKUltra."
- client.prefs.cit_toggles ^= HYPNO
- to_chat(usr, "You [((client.prefs.cit_toggles & HYPNO) ?"will":"no longer")] receive lewd flavour messages for hypno.")
-
-/datum/status_effect/chem/enthrall
- id = "enthrall"
- alert_type = null
- //examine_text TODO
- var/enthrallTally = 1 //Keeps track of the enthralling process
- var/resistanceTally = 0 //Keeps track of the resistance
- var/deltaResist //The total resistance added per resist click
-
- var/phase = 1 //-1: resisted state, due to be removed.0: sleeper agent, no effects unless triggered 1: initial, 2: 2nd stage - more commands, 3rd: fully enthralled, 4th Mindbroken
-
- var/status = null //status effects
- var/statusStrength = 0 //strength of status effect
-
- var/mob/living/master //Enchanter's person
- var/enthrallID //Enchanter's ckey
- var/enthrallGender //Use master or mistress
-
- var/mental_capacity //Higher it is, lower the cooldown on commands, capacity reduces with resistance.
-
- var/distancelist = list(2,1.5,1,0.8,0.6,0.5,0.4,0.3,0.2) //Distance multipliers
-
- var/withdrawal = FALSE //withdrawl
- var/withdrawalTick = 0 //counts how long withdrawl is going on for
-
- var/list/customTriggers = list() //the list of custom triggers
-
- var/cooldown = 0 //cooldown on commands
- var/cooldownMsg = TRUE //If cooldown message has been sent
- var/cTriggered = FALSE //If someone is triggered (so they can't trigger themselves with what they say for infinite loops)
- var/resistGrowth = 0 //Resistance accrues over time
- var/DistApart = 1 //Distance between master and owner
- var/tranceTime = 0 //how long trance effects apply on trance status
-
- var/customEcho //Custom looping text in owner
- var/customSpan //Custom spans for looping text
-
- var/lewd = FALSE // Set on on_apply. Will only be true if both individuals involved have opted in.
-
-/datum/status_effect/chem/enthrall/on_apply()
- var/mob/living/carbon/M = owner
- var/datum/reagent/fermi/enthrall/E = locate(/datum/reagent/fermi/enthrall) in M.reagents.reagent_list
- if(!E)
- message_admins("WARNING: FermiChem: No master found in thrall, did you bus in the status? You need to set up the vars manually in the chem if it's not reacted/bussed. Someone set up the reaction/status proc incorrectly if not (Don't use donor blood). Console them with a chemcat plush maybe?")
- owner.remove_status_effect(src)
- enthrallID = E.creatorID
- enthrallGender = E.creatorGender
- master = get_mob_by_key(enthrallID)
- //if(M.ckey == enthrallID)
- // owner.remove_status_effect(src)//At the moment, a user can enthrall themselves, toggle this back in if that should be removed.
- RegisterSignal(owner, COMSIG_LIVING_RESIST, .proc/owner_resist) //Do resistance calc if resist is pressed#
- RegisterSignal(owner, COMSIG_MOVABLE_HEAR, .proc/owner_hear)
- mental_capacity = 500 - M.getOrganLoss(ORGAN_SLOT_BRAIN)//It's their brain!
- lewd = (owner.client?.prefs.cit_toggles & HYPNO) && (master.client?.prefs.cit_toggles & HYPNO)
- var/message = "[(lewd ? "I am a good pet for [enthrallGender]." : "[master] is a really inspirational person!")]"
- SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "enthrall", /datum/mood_event/enthrall, message)
- to_chat(owner, "You feel inexplicably drawn towards [master], their words having a demonstrable effect on you. It seems the closer you are to them, the stronger the effect is. However you aren't fully swayed yet and can resist their effects by repeatedly resisting as much as you can!")
- log_reagent("FERMICHEM: MKULTRA: Status applied on [owner] ckey: [owner.key] with a master of [master] ckey: [enthrallID].")
- SSblackbox.record_feedback("tally", "fermi_chem", 1, "Enthrall attempts")
- return ..()
-
-/datum/status_effect/chem/enthrall/tick()
- var/mob/living/carbon/M = owner
-
- //chem calculations
- if(!owner.reagents.has_reagent(/datum/reagent/fermi/enthrall))
- if (phase < 3 && phase != 0)
- deltaResist += 3//If you've no chem, then you break out quickly
- if(prob(5))
- to_chat(owner, "Your mind starts to restore some of it's clarity as you feel the effects of the drug wain.")
- if (mental_capacity <= 500 || phase == 4)
- if (owner.reagents.has_reagent(/datum/reagent/medicine/mannitol))
- mental_capacity += 5
- if (owner.reagents.has_reagent(/datum/reagent/medicine/neurine))
- mental_capacity += 10
-
- //mindshield check
- if(HAS_TRAIT(M, TRAIT_MINDSHIELD))//If you manage to enrapture a head, wow, GJ. (resisting gives a bigger bonus with a mindshield) From what I can tell, this isn't possible.
- resistanceTally += 2
- if(prob(10))
- to_chat(owner, "You feel lucidity returning to your mind as the mindshield buzzes, attempting to return your brain to normal function.")
- if(phase == 4)
- mental_capacity += 5
-
- //phase specific events
- switch(phase)
- if(-1)//fully removed
- SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "enthrall")
- log_reagent("FERMICHEM: MKULTRA: Status REMOVED from [owner] ckey: [owner.key] with a master of [master] ckey: [enthrallID].")
- owner.remove_status_effect(src)
- return
- if(0)// sleeper agent
- if (cooldown > 0)
- cooldown -= 1
- return
- if(1)//Initial enthrallment
- if (enthrallTally > 125)
- phase += 1
- mental_capacity -= resistanceTally//leftover resistance per step is taken away from mental_capacity.
- resistanceTally /= 2
- enthrallTally = 0
- SSblackbox.record_feedback("tally", "fermi_chem", 1, "Enthralled to state 2")
- if(lewd)
- to_chat(owner, "Your conciousness slips, as you sink deeper into trance and servitude.")
- else
- to_chat(owner, "Your conciousness slips, as you feel more drawn to following [master].")
-
- else if (resistanceTally > 125)
- phase = -1
- to_chat(owner, "You break free of the influence in your mind, your thoughts suddenly turning lucid!")
- if(DistApart < 10)
- to_chat(master, "[(lewd?"Your pet":"Your thrall")] seems to have broken free of your enthrallment!")
- SSblackbox.record_feedback("tally", "fermi_chem", 1, "Thralls broken free")
- owner.remove_status_effect(src) //If resisted in phase 1, effect is removed.
- if(prob(10))
- if(lewd)
- to_chat(owner, "[pick("It feels so good to listen to [master].", "You can't keep your eyes off [master].", "[master]'s voice is making you feel so sleepy.", "You feel so comfortable with [master]", "[master] is so dominant, it feels right to obey them.")].")
- if (2) //partially enthralled
- if(enthrallTally > 200)
- phase += 1
- mental_capacity -= resistanceTally//leftover resistance per step is taken away from mental_capacity.
- enthrallTally = 0
- resistanceTally /= 2
- if(lewd)
- to_chat(owner, "Your mind gives, eagerly obeying and serving [master].")
- to_chat(owner, "You are now fully enthralled to [master], and eager to follow their commands. However you find that in your intoxicated state you are unable to resort to violence. Equally you are unable to commit suicide, even if ordered to, as you cannot serve your [enthrallGender] in death. ")//If people start using this as an excuse to be violent I'll just make them all pacifists so it's not OP.
- else
- to_chat(owner, "You are unable to put up a resistance any longer, and now are under the influence of [master]. However you find that in your intoxicated state you are unable to resort to violence. Equally you are unable to commit suicide, even if ordered to, as you cannot follow [master] in death. ")
- to_chat(master, "Your [(lewd?"pet":"follower")] [owner] appears to have fully fallen under your sway.")
- log_reagent("FERMICHEM: MKULTRA: Status on [owner] ckey: [owner.key] has been fully entrhalled (state 3) with a master of [master] ckey: [enthrallID].")
- SSblackbox.record_feedback("tally", "fermi_chem", 1, "thralls fully enthralled.")
- else if (resistanceTally > 200)
- enthrallTally *= 0.5
- phase -= 1
- resistanceTally = 0
- resistGrowth = 0
- to_chat(owner, "You manage to shake some of the effects from your addled mind, however you can still feel yourself drawn towards [master].")
- if(lewd && prob(10))
- to_chat(owner, "[pick("It feels so good to listen to [enthrallGender].", "You can't keep your eyes off [enthrallGender].", "[enthrallGender]'s voice is making you feel so sleepy.", "You feel so comfortable with [enthrallGender]", "[enthrallGender] is so dominant, it feels right to obey them.")].")
- if (3)//fully entranced
- if ((resistanceTally >= 200 && withdrawalTick >= 150) || (HAS_TRAIT(M, TRAIT_MINDSHIELD) && (resistanceTally >= 100)))
- enthrallTally = 0
- phase -= 1
- resistanceTally = 0
- resistGrowth = 0
- to_chat(owner, "The separation from [(lewd?"your [enthrallGender]":"[master]")] sparks a small flame of resistance in yourself, as your mind slowly starts to return to normal.")
- REMOVE_TRAIT(owner, TRAIT_PACIFISM, "MKUltra")
- if(lewd && prob(1) && !customEcho)
- to_chat(owner, "[pick("I belong to [enthrallGender].", "[enthrallGender] knows whats best for me.", "Obedence is pleasure.", "I exist to serve [enthrallGender].", "[enthrallGender] is so dominant, it feels right to obey them.")].")
- if (4) //mindbroken
- if (mental_capacity >= 499 && (owner.getOrganLoss(ORGAN_SLOT_BRAIN) <=0 || HAS_TRAIT(M, TRAIT_MINDSHIELD)) && !owner.reagents.has_reagent(/datum/reagent/fermi/enthrall))
- phase = 2
- mental_capacity = 500
- customTriggers = list()
- to_chat(owner, "Your mind starts to heal, fixing the damage caused by the massive amounts of chem injected into your system earlier, returning clarity to your mind. Though, you still feel drawn towards [master]'s words...'")
- M.slurring = 0
- M.confused = 0
- resistGrowth = 0
- else
- if (cooldown > 0)
- cooldown -= (0.8 + (mental_capacity/500))
- cooldownMsg = FALSE
- else if (cooldownMsg == FALSE)
- if(DistApart < 10)
- if(lewd)
- to_chat(master, "Your pet [owner] appears to have finished internalising your last command.")
- cooldownMsg = TRUE
- else
- to_chat(master, "Your thrall [owner] appears to have finished internalising your last command.")
- cooldownMsg = TRUE
- if(get_dist(master, owner) > 10)
- if(prob(10))
- to_chat(owner, "You feel [(lewd ?"a deep NEED to return to your [enthrallGender]":"like you have to return to [master]")].")
- M.throw_at(get_step_towards(master,owner), 5, 1)
- return//If you break the mind of someone, you can't use status effects on them.
-
-
- //distance calculations
- DistApart = get_dist(master, owner)
- switch(DistApart)
- if(0 to 8)//If the enchanter is within range, increase enthrallTally, remove withdrawal subproc and undo withdrawal effects.
- if(phase <= 2)
- enthrallTally += distancelist[get_dist(master, owner)+1]
- if(withdrawalTick > 0)
- withdrawalTick -= 1
- //calming effects
- M.hallucination = max(0, M.hallucination - 5)
- M.stuttering = max(0, M.stuttering - 5)
- M.jitteriness = max(0, M.jitteriness - 5)
- if(owner.getOrganLoss(ORGAN_SLOT_BRAIN) >=20)
- owner.adjustOrganLoss(ORGAN_SLOT_BRAIN, -0.2)
- if(withdrawal == TRUE)
- REMOVE_TRAIT(owner, TRAIT_PACIFISM, "MKUltra")
- SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing1")
- SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing2")
- SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing3")
- SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing4")
- withdrawal = FALSE
- if(9 to INFINITY)//If they're not nearby, enable withdrawl effects.
- withdrawal = TRUE
-
- //Withdrawal subproc:
- if (withdrawal == TRUE)//Your minions are really REALLY needy.
- switch(withdrawalTick)//denial
- if(5)//To reduce spam
- to_chat(owner, "You are unable to complete [(lewd?"your [enthrallGender]":"[master]")]'s orders without their presence, and any commands and objectives given to you prior are not in effect until you are back with them.")
- ADD_TRAIT(owner, TRAIT_PACIFISM, "MKUltra") //IMPORTANT
- if(10 to 35)//Gives wiggle room, so you're not SUPER needy
- if(prob(5))
- to_chat(owner, "You're starting to miss [(lewd?"your [enthrallGender]":"[master]")].")
- if(prob(5))
- owner.adjustOrganLoss(ORGAN_SLOT_BRAIN, 0.1)
- to_chat(owner, "[(lewd?"[enthrallGender]":"[master]")] will surely be back soon") //denial
- if(36)
- var/message = "[(lewd?"I feel empty when [enthrallGender]'s not around..":"I miss [master]'s presence")]"
- SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "EnthMissing1", /datum/mood_event/enthrallmissing1, message)
- if(37 to 65)//barganing
- if(prob(10))
- to_chat(owner, "They are coming back, right...?")
- owner.adjustOrganLoss(ORGAN_SLOT_BRAIN, 0.5)
- if(prob(10))
- if(lewd)
- to_chat(owner, "I just need to be a good pet for [enthrallGender], they'll surely return if I'm a good pet.")
- owner.adjustOrganLoss(ORGAN_SLOT_BRAIN, -1.5)
- if(66)
- SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing1")
- var/message = "[(lewd?"I feel so lost in this complicated world without [enthrallGender]..":"I have to return to [master]!")]"
- to_chat(owner, "You start to feel really angry about how you're not with [(lewd?"your [enthrallGender]":"[master]")]!")
- SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "EnthMissing2", /datum/mood_event/enthrallmissing2, message)
- owner.stuttering += 50
- owner.jitteriness += 250
- if(67 to 89) //anger
- if(prob(10))
- addtimer(CALLBACK(M, /mob/verb/a_intent_change, INTENT_HARM), 2)
- addtimer(CALLBACK(M, /mob/proc/click_random_mob), 2)
- if(lewd)
- to_chat(owner, "You are overwhelmed with anger at the lack of [enthrallGender]'s presence and suddenly lash out!")
- else
- to_chat(owner, "You are overwhelmed with anger and suddenly lash out!")
- if(90)
- SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing2")
- var/message = "[(lewd?"Where are you [enthrallGender]??!":"I need to find [master]!")]"
- SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "EnthMissing3", /datum/mood_event/enthrallmissing3, message)
- if(lewd)
- to_chat(owner, "You need to find your [enthrallGender] at all costs, you can't hold yourself back anymore!")
- else
- to_chat(owner, "You need to find [master] at all costs, you can't hold yourself back anymore!")
- if(91 to 100)//depression
- if(prob(10))
- M.gain_trauma_type(BRAIN_TRAUMA_MILD)
- owner.stuttering += 35
- owner.jitteriness += 35
- else if(prob(25))
- M.hallucination += 10
- if(101)
- SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing3")
- var/message = "[(lewd?"I'm all alone, It's so hard to continute without [enthrallGender]...":"I really need to find [master]!!!")]"
- SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "EnthMissing4", /datum/mood_event/enthrallmissing4, message)
- to_chat(owner, "You can hardly find the strength to continue without [(lewd?"your [enthrallGender]":"[master]")].")
- M.gain_trauma_type(BRAIN_TRAUMA_SEVERE)
- if(102 to 140) //depression 2, revengeance
- if(prob(20))
- owner.Stun(50)
- owner.emote("cry")//does this exist?
- if(lewd)
- to_chat(owner, "You're unable to hold back your tears, suddenly sobbing as the desire to see your [enthrallGender] oncemore overwhelms you.")
- else
- to_chat(owner, "You are overwheled with withdrawl from [master].")
- owner.adjustOrganLoss(ORGAN_SLOT_BRAIN, 1)
- owner.stuttering += 35
- owner.jitteriness += 35
- if(prob(10))//2% chance
- switch(rand(1,5))//Now let's see what hopefully-not-important part of the brain we cut off
- if(1 to 3)
- M.gain_trauma_type(BRAIN_TRAUMA_MILD)
- if(4)
- M.gain_trauma_type(BRAIN_TRAUMA_SEVERE)
- if(5)//0.4% chance
- M.gain_trauma_type(BRAIN_TRAUMA_SPECIAL)
- if(prob(5))
- deltaResist += 5
- if(140 to INFINITY) //acceptance
- if(prob(15))
- deltaResist += 5
- owner.adjustOrganLoss(ORGAN_SLOT_BRAIN, -1)
- if(prob(20))
- if(lewd)
- to_chat(owner, "Maybe you'll be okay without your [enthrallGender].")
- else
- to_chat(owner, "You feel your mental functions slowly begin to return.")
- if(prob(5))
- owner.adjustOrganLoss(ORGAN_SLOT_BRAIN, 1)
- M.hallucination += 30
-
- withdrawalTick += 0.5//Enough to leave you with a major brain trauma, but not kill you.
-
- //Status subproc - statuses given to you from your Master
- //currently 3 statuses; antiresist -if you press resist, increases your enthrallment instead, HEAL - which slowly heals the pet, CHARGE - which breifly increases speed, PACIFY - makes pet a pacifist, ANTIRESIST - frustrates resist presses.
- if (status)
-
- if(status == "Antiresist")
- if (statusStrength < 0)
- status = null
- to_chat(owner, "Your mind feels able to resist oncemore.")
- else
- statusStrength -= 1
-
- else if(status == "heal")
- if (statusStrength < 0)
- status = null
- to_chat(owner, "You finish licking your wounds.")
- else
- statusStrength -= 1
- owner.heal_overall_damage(1, 1, 0, FALSE, FALSE)
- cooldown += 1 //Cooldown doesn't process till status is done
-
- else if(status == "charge")
- owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/mkultra)
- status = "charged"
- if(lewd)
- to_chat(owner, "Your [enthrallGender]'s order fills you with a burst of speed!")
- else
- to_chat(owner, "[master]'s command fills you with a burst of speed!")
-
- else if (status == "charged")
- if (statusStrength < 0)
- status = null
- owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/mkultra)
- owner.DefaultCombatKnockdown(50)
- to_chat(owner, "Your body gives out as the adrenaline in your system runs out.")
- else
- statusStrength -= 1
- cooldown += 1 //Cooldown doesn't process till status is done
-
- else if (status == "pacify")
- ADD_TRAIT(owner, TRAIT_PACIFISM, "MKUltraStatus")
- status = null
-
- //Truth serum?
- //adrenals?
-
- //customEcho
- if(customEcho && withdrawal == FALSE && lewd)
- if(prob(2))
- if(!customSpan) //just in case!
- customSpan = "notice"
- to_chat(owner, "[customEcho].")
-
- //final tidying
- resistanceTally += deltaResist
- deltaResist = 0
- if(cTriggered >= 0)
- cTriggered -= 1
- if (cooldown > 0)
- cooldown -= (0.8 + (mental_capacity/500))
- cooldownMsg = FALSE
- else if (cooldownMsg == FALSE)
- if(DistApart < 10)
- if(lewd)
- to_chat(master, "Your pet [owner] appears to have finished internalising your last command.")
- else
- to_chat(master, "Your thrall [owner] appears to have finished internalising your last command.")
- cooldownMsg = TRUE
- cooldown = 0
- if (tranceTime > 0 && tranceTime != 51) //custom trances only last 50 ticks.
- tranceTime -= 1
- else if (tranceTime == 0) //remove trance after.
- M.cure_trauma_type(/datum/brain_trauma/hypnosis, TRAUMA_RESILIENCE_SURGERY)
- M.remove_status_effect(/datum/status_effect/trance)
- tranceTime = 51
- //..()
-
-//Remove all stuff
-/datum/status_effect/chem/enthrall/on_remove()
- var/mob/living/carbon/M = owner
- M.mind.remove_antag_datum(/datum/antagonist/brainwashed)
- SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "enthrall")
- SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "enthrallpraise")
- SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "enthrallscold")
- SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing1")
- SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing2")
- SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing3")
- SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing4")
- UnregisterSignal(M, COMSIG_LIVING_RESIST)
- UnregisterSignal(owner, COMSIG_MOVABLE_HEAR)
- REMOVE_TRAIT(owner, TRAIT_PACIFISM, "MKUltra")
- to_chat(owner, "You're now free of [master]'s influence, and fully independent!'")
- UnregisterSignal(owner, COMSIG_GLOB_LIVING_SAY_SPECIAL)
- return ..()
-
-/datum/status_effect/chem/enthrall/proc/owner_hear(datum/source, list/hearing_args)
- if(lewd == FALSE)
- return
- if (cTriggered > 0)
- return
- var/mob/living/carbon/C = owner
- var/raw_message = lowertext(hearing_args[HEARING_RAW_MESSAGE])
- for (var/trigger in customTriggers)
- var/cached_trigger = lowertext(trigger)
- if (findtext(raw_message, cached_trigger))//if trigger1 is the message
- cTriggered = 5 //Stops triggerparties and as a result, stops servercrashes.
- log_reagent("FERMICHEM: MKULTRA: [owner] ckey: [owner.key] has been triggered with [cached_trigger] from [hearing_args[HEARING_SPEAKER]] saying: \"[hearing_args[HEARING_MESSAGE]]\". (their master being [master] ckey: [enthrallID].)")
-
- //Speak (Forces player to talk)
- if (lowertext(customTriggers[trigger][1]) == "speak")//trigger2
- var/saytext = "Your mouth moves on it's own before you can even catch it."
- addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, C, "[saytext]"), 5)
- addtimer(CALLBACK(C, /atom/movable/proc/say, "[customTriggers[trigger][2]]"), 5)
- log_reagent("FERMICHEM: MKULTRA: [owner] ckey: [owner.key] has been forced to say: \"[customTriggers[trigger][2]]\" from previous trigger.")
-
-
- //Echo (repeats message!) allows customisation, but won't display var calls! Defaults to hypnophrase.
- else if (lowertext(customTriggers[trigger][1]) == "echo")//trigger2
- addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, C, "[customTriggers[trigger][2]]"), 5)
- //(to_chat(owner, "[customTriggers[trigger][2]]"))//trigger3
-
- //Shocking truth!
- else if (lowertext(customTriggers[trigger]) == "shock")
- if (lewd && ishuman(C))
- var/mob/living/carbon/human/H = C
- H.adjust_arousal(5, "MKUltra", aphro = TRUE)
- C.jitteriness += 100
- C.stuttering += 25
- C.DefaultCombatKnockdown(60)
- C.Stun(60)
- to_chat(owner, "Your muscles seize up, then start spasming wildy!")
-
- else if (lewd && lowertext(customTriggers[trigger]) == "cum")//aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- if(ishuman(C))
- var/mob/living/carbon/human/H = C
- H.mob_climax(forced_climax=TRUE, cause = "MKUltra")
- C.SetStun(10)//We got your stun effects in somewhere, Kev.
-
- //kneel (knockdown)
- else if (lowertext(customTriggers[trigger]) == "kneel")//as close to kneeling as you can get, I suppose.
- to_chat(owner, "You drop to the ground unsurreptitiously.")
- C.lay_down()
-
- //strip (some) clothes
- else if (lowertext(customTriggers[trigger]) == "strip")//This wasn't meant to just be a lewd thing oops.
- var/mob/living/carbon/human/o = owner
- var/items = o.get_contents()
- for(var/obj/item/W in items)
- if(W == o.w_uniform || W == o.wear_suit)
- o.dropItemToGround(W, TRUE)
- to_chat(owner,"You feel compelled to strip your clothes.")
-
- //trance
- else if (lowertext(customTriggers[trigger]) == "trance")//Maaaybe too strong. Weakened it, only lasts 50 ticks.
- var/mob/living/carbon/human/o = owner
- o.apply_status_effect(/datum/status_effect/trance, 200, TRUE)
- tranceTime = 50
- log_reagent("FERMICHEM: MKULTRA: [owner] ckey: [owner.key] has been tranced from previous trigger.")
-
- return
-
-/datum/status_effect/chem/enthrall/proc/owner_resist()
- var/mob/living/carbon/M = owner
- to_chat(owner, "You attempt to fight against [master]'s influence!")
-
- //Able to resist checks
- if (status == "Sleeper" || phase == 0)
- return
- else if (phase == 4)
- if(lewd)
- to_chat(owner, "Your mind is too far gone to even entertain the thought of resisting. Unless you can fix the brain damage, you won't be able to break free of your [enthrallGender]'s control.")
- else
- to_chat(owner, "Your brain is too overwhelmed with from the high volume of chemicals in your system, rendering you unable to resist, unless you can fix the brain damage.")
- return
- else if (phase == 3 && withdrawal == FALSE)
- if(lewd)
- to_chat(owner, "The presence of your [enthrallGender] fully captures the horizon of your mind, removing any thoughts of resistance. If you get split up from them, then you might be able to entertain the idea of resisting.")
- else
- to_chat(owner, "You are unable to resist [master] in your current state. If you get split up from them, then you might be able to resist.")
- return
- else if (status == "Antiresist")//If ordered to not resist; resisting while ordered to not makes it last longer, and increases the rate in which you are enthralled.
- if (statusStrength > 0)
- if(lewd)
- to_chat(owner, "The order from your [enthrallGender] to give in is conflicting with your attempt to resist, drawing you deeper into trance! You'll have to wait a bit before attemping again, lest your attempts become frustrated again.")
- else
- to_chat(owner, "The order from your [master] to give in is conflicting with your attempt to resist. You'll have to wait a bit before attemping again, lest your attempts become frustrated again.")
- statusStrength += 1
- enthrallTally += 1
- return
- else
- status = null
-
- //base resistance
- if (deltaResist != 0)//So you can't spam it, you get one deltaResistance per tick.
- deltaResist += 0.1 //Though I commend your spamming efforts.
- return
- else
- deltaResist = 1.8 + resistGrowth
- resistGrowth += 0.05
-
- //distance modifer
- switch(DistApart)
- if(0)
- deltaResist *= 0.8
- if(1 to 8)//If they're far away, increase resistance.
- deltaResist *= (1+(DistApart/10))
- if(9 to INFINITY)//If
- deltaResist *= 2
-
-
- if(prob(5))
- M.emote("me",1,"squints, shaking their head for a moment.")//shows that you're trying to resist sometimes
- deltaResist *= 1.5
-
- //chemical resistance, brain and annaphros are the key to undoing, but the subject has to to be willing to resist.
- if (owner.reagents.has_reagent(/datum/reagent/medicine/mannitol))
- deltaResist *= 1.25
- if (owner.reagents.has_reagent(/datum/reagent/medicine/neurine))
- deltaResist *= 1.5
- if (!(owner.client?.prefs.cit_toggles & NO_APHRO) && lewd)
- if (owner.reagents.has_reagent(/datum/reagent/drug/anaphrodisiac))
- deltaResist *= 1.5
- if (owner.reagents.has_reagent(/datum/reagent/drug/anaphrodisiacplus))
- deltaResist *= 2
- if (owner.reagents.has_reagent(/datum/reagent/drug/aphrodisiac))
- deltaResist *= 0.75
- if (owner.reagents.has_reagent(/datum/reagent/drug/aphrodisiacplus))
- deltaResist *= 0.5
- //Antag resistance
- //cultists are already brainwashed by their god
- if(iscultist(owner))
- deltaResist *= 1.3
- else if (is_servant_of_ratvar(owner))
- deltaResist *= 1.3
- //antags should be able to resist, so they can do their other objectives. This chem does frustrate them, but they've all the tools to break free when an oportunity presents itself.
- else if (owner.mind.assigned_role in GLOB.antagonists)
- deltaResist *= 1.2
-
- //role resistance
- //Chaplains are already brainwashed by their god
- if(owner.mind.assigned_role == "Chaplain")
- deltaResist *= 1.2
- //Command staff has authority,
- if(owner.mind.assigned_role in GLOB.command_positions)
- deltaResist *= 1.1
- //Chemists should be familiar with drug effects
- if(owner.mind.assigned_role == "Chemist")
- deltaResist *= 1.2
-
- //Happiness resistance
- //Your Thralls are like pets, you need to keep them happy.
- if(owner.nutrition < 300)
- deltaResist += (300-owner.nutrition)/6
- if(owner.health < 100)//Harming your thrall will make them rebel harder.
- deltaResist *= ((120-owner.health)/100)+1
- //if(owner.mood.mood) //datum/component/mood TO ADD in FERMICHEM 2
- //Add cold/hot, oxygen, sanity, happiness? (happiness might be moot, since the mood effects are so strong)
- //Mental health could play a role too in the other direction
-
- //If you've a collar, you get a sense of pride
- if(istype(M.wear_neck, /obj/item/clothing/neck/petcollar))
- deltaResist *= 0.5
- if(HAS_TRAIT(M, TRAIT_MINDSHIELD))
- deltaResist += 5//even faster!
-
- return
diff --git a/modular_citadel/code/game/objects/cit_screenshake.dm b/modular_citadel/code/game/objects/cit_screenshake.dm
deleted file mode 100644
index 222de37f826..00000000000
--- a/modular_citadel/code/game/objects/cit_screenshake.dm
+++ /dev/null
@@ -1,51 +0,0 @@
-//we vlambeer now
-
-/obj/proc/shake_camera(mob/M, duration, strength=1)//byond's wonky with this shit
- set waitfor = FALSE
- if(!M || !M.client || duration <= 0)
- return
- var/client/C = M.client
- if (C.prefs.screenshake==0)
- return
- var/oldx = C.pixel_x
- var/oldy = C.pixel_y
- var/clientscreenshake = (C.prefs.screenshake * 0.01)
- var/max = (strength*clientscreenshake) * world.icon_size
- var/min = -((strength*clientscreenshake) * world.icon_size)
-
- for(var/i in 0 to duration-1)
- if (i == 0)
- animate(C, pixel_x=rand(min,max), pixel_y=rand(min,max), time=1)
- else
- animate(pixel_x=rand(min,max), pixel_y=rand(min,max), time=1)
- animate(pixel_x=oldx, pixel_y=oldy, time=1)
-
-/obj/item/gun/energy
- recoil = 0.1
-
-/obj/item/gun/energy/kinetic_accelerator
- recoil = 0.5
-
-/obj/item/gun/ballistic
- recoil = 0.25
-
-/obj/item/gun/ballistic/shotgun
- recoil = 1
-
-/obj/item/gun/ballistic/revolver
- recoil = 0.5
-
-/obj/item/gun/ballistic/revolver/doublebarrel
- recoil = 1
-
-/obj/item/gun/syringe
- recoil = 0.1
-
-/obj/item/pneumatic_cannon/fire_items(turf/target, mob/user)
- . = ..()
- shake_camera(user, (pressureSetting * 0.75 + 1), (pressureSetting * 0.75))
-
-/obj/item/attack_obj(obj/O, mob/living/user)
- . = ..()
- if(force >= 20)
- shake_camera(user, ((force - 15) * 0.01 + 1), ((force - 15) * 0.01))
diff --git a/modular_citadel/code/game/objects/effects/temporary_visuals/souldeath.dm b/modular_citadel/code/game/objects/effects/temporary_visuals/souldeath.dm
deleted file mode 100644
index bd5bd06df7f..00000000000
--- a/modular_citadel/code/game/objects/effects/temporary_visuals/souldeath.dm
+++ /dev/null
@@ -1,5 +0,0 @@
-/obj/effect/temp_visual/souldeath
- name = "soul death"
- icon = 'modular_citadel/icons/effects/souldeath.dmi'
- icon_state = "souldeath"
- duration = 30
diff --git a/modular_citadel/code/modules/admin/holder2.dm b/modular_citadel/code/modules/admin/holder2.dm
deleted file mode 100644
index e4806781d94..00000000000
--- a/modular_citadel/code/modules/admin/holder2.dm
+++ /dev/null
@@ -1,13 +0,0 @@
-/datum/admins
- var/following = null
-
-/datum/admins/associate(client/C)
- ..()
- if(istype(C))
- C.mentor_datum_set(TRUE)
-
-/datum/admins/disassociate()
- if(owner)
- owner.remove_mentor_verbs()
- owner.mentor_datum = null
- ..()
diff --git a/modular_citadel/code/modules/admin/secrets.dm b/modular_citadel/code/modules/admin/secrets.dm
deleted file mode 100644
index 56a6d316f83..00000000000
--- a/modular_citadel/code/modules/admin/secrets.dm
+++ /dev/null
@@ -1,8 +0,0 @@
-/datum/admins/proc/CitadelMentorLogSecret()
- var/dat = "Mentor Log
"
- for(var/l in GLOB.mentorlog)
- dat += "
[l]"
-
- if(!GLOB.mentorlog.len)
- dat += "No mentors have done anything this round!"
- usr << browse(dat, "window=mentor_log")
diff --git a/modular_citadel/code/modules/client/client_procs.dm b/modular_citadel/code/modules/client/client_procs.dm
deleted file mode 100644
index f20dd08a516..00000000000
--- a/modular_citadel/code/modules/client/client_procs.dm
+++ /dev/null
@@ -1,49 +0,0 @@
-/client/New()
- . = ..()
- mentor_datum_set()
-
-/client/proc/citadel_client_procs(href_list)
- if(href_list["mentor_msg"])
- if(CONFIG_GET(flag/mentors_mobname_only))
- var/mob/M = locate(href_list["mentor_msg"])
- cmd_mentor_pm(M,null)
- else
- cmd_mentor_pm(href_list["mentor_msg"],null)
- return TRUE
-
- //Mentor Follow
- if(href_list["mentor_follow"])
- var/mob/living/M = locate(href_list["mentor_follow"])
-
- if(istype(M))
- mentor_follow(M)
- return TRUE
-
- if(href_list["mentor_unfollow"])
- var/mob/living/M = locate(href_list["mentor_follow"])
- if(M && mentor_datum.following == M)
- mentor_unfollow()
- return TRUE
-
-/client/proc/mentor_datum_set(admin)
- mentor_datum = GLOB.mentor_datums[ckey]
- if(!mentor_datum && check_rights_for(src, R_ADMIN,0)) // admin with no mentor datum?let's fix that
- new /datum/mentors(ckey)
- if(mentor_datum)
- if(!check_rights_for(src, R_ADMIN,0) && !admin)
- GLOB.mentors |= src // don't add admins to this list too.
- mentor_datum.owner = src
- add_mentor_verbs()
- mentor_memo_output("Show")
-
-/client/proc/is_mentor() // admins are mentors too.
- if(mentor_datum || check_rights_for(src, R_ADMIN,0))
- return TRUE
-
-/client/verb/togglerightclickstuff()
- set category = "OOC"
- set name = "Toggle Rightclick"
- set desc = "Did the context menu get stuck on or off? Press this button."
-
- show_popup_menus = !show_popup_menus
- to_chat(src, "The right-click context menu is now [show_popup_menus ? "enabled" : "disabled"].")
diff --git a/modular_citadel/code/modules/client/loadout/__donator.dm b/modular_citadel/code/modules/client/loadout/__donator.dm
deleted file mode 100644
index f2c7b398cf0..00000000000
--- a/modular_citadel/code/modules/client/loadout/__donator.dm
+++ /dev/null
@@ -1,581 +0,0 @@
-//This is the file that handles donator loadout items.
-
-/datum/gear/donator
- name = "IF YOU SEE THIS, PING A CODER RIGHT NOW!"
- slot = SLOT_IN_BACKPACK
- path = /obj/item/bikehorn/golden
- category = LOADOUT_CATEGORY_DONATOR
- ckeywhitelist = list("This entry should never appear with this variable set.") //If it does, then that means somebody fucked up the whitelist system pretty hard
-
-/datum/gear/donator/pet
- name = "Pet Beacon"
- slot = SLOT_IN_BACKPACK
- path = /obj/item/choice_beacon/pet
- ckeywhitelist = list()
- donator_group_id = DONATOR_GROUP_TIER_1 // can be accessed by all donators
-
-/datum/gear/donator/carpet
- name = "Carpet Beacon"
- slot = SLOT_IN_BACKPACK
- path = /obj/item/choice_beacon/box/carpet
- ckeywhitelist = list()
- donator_group_id = DONATOR_GROUP_TIER_1
-
-/datum/gear/donator/chameleon_bedsheet
- name = "Chameleon Bedsheet"
- slot = SLOT_NECK
- path = /obj/item/bedsheet/chameleon
- ckeywhitelist = list()
- donator_group_id = DONATOR_GROUP_TIER_1
-
-/datum/gear/donator/donortestingbikehorn
- name = "Donor item testing bikehorn"
- slot = SLOT_IN_BACKPACK
- path = /obj/item/bikehorn
- geargroupID = list("DONORTEST") //This is a list mainly for the sake of testing, but geargroupID works just fine with ordinary strings
-
-/datum/gear/donator/kevhorn
- name = "Airhorn"
- slot = SLOT_IN_BACKPACK
- path = /obj/item/bikehorn/airhorn
- ckeywhitelist = list("kevinz000")
-
-/datum/gear/donator/kiaracloak
- name = "Kiara's cloak"
- slot = SLOT_NECK
- path = /obj/item/clothing/neck/cloak/inferno
- ckeywhitelist = list("inferno707")
-
-/datum/gear/donator/kiaracollar
- name = "Kiara's collar"
- slot = SLOT_NECK
- path = /obj/item/clothing/neck/petcollar/inferno
- ckeywhitelist = list("inferno707")
-
-/datum/gear/donator/kiaramedal
- name = "Insignia of Steele"
- slot = SLOT_IN_BACKPACK
- path = /obj/item/clothing/accessory/medal/steele
- ckeywhitelist = list("inferno707")
-
-/datum/gear/donator/hheart
- name = "The Hollow Heart"
- slot = SLOT_WEAR_MASK
- path = /obj/item/clothing/mask/hheart
- ckeywhitelist = list("inferno707")
-
-/datum/gear/donator/engravedzippo
- name = "Engraved zippo"
- slot = SLOT_HANDS
- path = /obj/item/lighter/gold
- ckeywhitelist = list("dirtyoldharry")
-
-/datum/gear/donator/geisha
- name = "Geisha suit"
- slot = SLOT_W_UNIFORM
- path = /obj/item/clothing/under/costume/geisha
- ckeywhitelist = list("atiefling")
-
-/datum/gear/donator/specialscarf
- name = "Special scarf"
- slot = SLOT_NECK
- path = /obj/item/clothing/neck/scarf/zomb
- ckeywhitelist = list("zombierobin")
-
-/datum/gear/donator/redmadcoat
- name = "The Mad's labcoat"
- slot = SLOT_WEAR_SUIT
- path = /obj/item/clothing/suit/toggle/labcoat/mad/red
- ckeywhitelist = list("zombierobin")
-
-/datum/gear/donator/santahat
- name = "Santa hat"
- slot = SLOT_HEAD
- path = /obj/item/clothing/head/santa/fluff
- ckeywhitelist = list("illotafv")
-
-/datum/gear/donator/reindeerhat
- name = "Reindeer hat"
- slot = SLOT_HEAD
- path = /obj/item/clothing/head/hardhat/reindeer/fluff
- ckeywhitelist = list("illotafv")
-
-/datum/gear/donator/treeplushie
- name = "Christmas tree plushie"
- slot = SLOT_IN_BACKPACK
- path = /obj/item/toy/plush/tree
- ckeywhitelist = list("illotafv")
-
-/datum/gear/donator/santaoutfit
- name = "Santa costume"
- slot = SLOT_WEAR_SUIT
- path = /obj/item/clothing/suit/space/santa/fluff
- ckeywhitelist = list("illotafv")
-
-/datum/gear/donator/treecloak
- name = "Christmas tree cloak"
- slot = SLOT_NECK
- path = /obj/item/clothing/neck/cloak/festive
- ckeywhitelist = list("illotafv")
-
-/datum/gear/donator/carrotplush
- name = "Carrot plushie"
- slot = SLOT_IN_BACKPACK
- path = /obj/item/toy/plush/carrot
- ckeywhitelist = list("improvedname")
-
-/datum/gear/donator/carrotcloak
- name = "Carrot cloak"
- slot = SLOT_NECK
- path = /obj/item/clothing/neck/cloak/carrot
- ckeywhitelist = list("improvedname")
-
-/datum/gear/donator/albortorosamask
- name = "Alborto Rosa mask"
- slot = SLOT_WEAR_MASK
- path = /obj/item/clothing/mask/luchador/zigfie
- ckeywhitelist = list("zigfie")
-
-/datum/gear/donator/mankini
- name = "Mankini"
- slot = SLOT_W_UNIFORM
- path = /obj/item/clothing/under/misc/stripper/mankini
- ckeywhitelist = list("zigfie")
-
-/datum/gear/donator/pinkshoes
- name = "Pink shoes"
- slot = SLOT_SHOES
- path = /obj/item/clothing/shoes/sneakers/pink
- ckeywhitelist = list("zigfie")
-
-/datum/gear/donator/reecesgreatcoat
- name = "Reece's Great Coat"
- slot = SLOT_WEAR_SUIT
- path = /obj/item/clothing/suit/trenchcoat/green
- ckeywhitelist = list("geemiesif")
-
-/datum/gear/donator/russianflask
- name = "Russian flask"
- slot = SLOT_IN_BACKPACK
- path = /obj/item/reagent_containers/food/drinks/flask/russian
- cost = 2
- ckeywhitelist = list("slomka")
-
-/datum/gear/donator/stalkermask
- name = "S.T.A.L.K.E.R. mask"
- slot = SLOT_WEAR_MASK
- path = /obj/item/clothing/mask/gas/stalker
- ckeywhitelist = list("slomka")
-
-/datum/gear/donator/stripedcollar
- name = "Striped collar"
- slot = SLOT_NECK
- path = /obj/item/clothing/neck/petcollar/stripe
- ckeywhitelist = list("jademanique")
-
-/datum/gear/donator/performersoutfit
- name = "Bluish performer's outfit"
- slot = SLOT_W_UNIFORM
- path = /obj/item/clothing/under/costume/singer/yellow/custom
- ckeywhitelist = list("killer402402")
-
-/datum/gear/donator/vermillion
- name = "Vermillion clothing"
- slot = SLOT_W_UNIFORM
- path = /obj/item/clothing/suit/vermillion
- ckeywhitelist = list("fractious")
-
-/datum/gear/donator/AM4B
- name = "Foam Force AM4-B"
- slot = SLOT_IN_BACKPACK
- path = /obj/item/gun/ballistic/automatic/AM4B
- ckeywhitelist = list("zeronetalpha")
-
-/datum/gear/donator/carrotsatchel
- name = "Carrot Satchel"
- slot = SLOT_HANDS
- path = /obj/item/storage/backpack/satchel/carrot
- ckeywhitelist = list("improvedname")
-
-/datum/gear/donator/naomisweater
- name = "worn black sweater"
- slot = SLOT_W_UNIFORM
- path = /obj/item/clothing/under/sweater/black/naomi
- ckeywhitelist = list("technicalmagi")
-
-/datum/gear/donator/naomicollar
- name = "worn pet collar"
- slot = SLOT_NECK
- path = /obj/item/clothing/neck/petcollar/naomi
- ckeywhitelist = list("technicalmagi")
-
-/datum/gear/donator/gladiator
- name = "Gladiator Armor"
- slot = SLOT_WEAR_SUIT
- path = /obj/item/clothing/under/costume/gladiator
- ckeywhitelist = list("aroche")
-
-/datum/gear/donator/bloodredtie
- name = "Blood Red Tie"
- slot = SLOT_NECK
- path = /obj/item/clothing/neck/tie/bloodred
- ckeywhitelist = list("kyutness")
-
-/datum/gear/donator/puffydress
- name = "Puffy Dress"
- slot = SLOT_WEAR_SUIT
- path = /obj/item/clothing/suit/puffydress
- ckeywhitelist = list("stallingratt")
-
-/datum/gear/donator/labredblack
- name = "Black and Red Coat"
- slot = SLOT_WEAR_SUIT
- path = /obj/item/clothing/suit/toggle/labcoat/labredblack
- ckeywhitelist = list("blakeryan", "durandalphor")
-
-/datum/gear/donator/torisword
- name = "Rainbow Zweihander"
- slot = SLOT_IN_BACKPACK
- path = /obj/item/dualsaber/hypereutactic/toy/rainbow
- ckeywhitelist = list("annoymous35")
-
-/datum/gear/donator/darksabre
- name = "Dark Sabre"
- slot = SLOT_IN_BACKPACK
- path = /obj/item/toy/darksabre
- ckeywhitelist = list("inferno707")
-
-/datum/gear/donator/darksabresheath
- name = "Dark Sabre Sheath"
- slot = SLOT_IN_BACKPACK
- path = /obj/item/storage/belt/sabre/darksabre
- ckeywhitelist = list("inferno707")
-
-/datum/gear/donator/toriball
- name = "Rainbow Tennis Ball"
- slot = SLOT_IN_BACKPACK
- path = /obj/item/toy/fluff/tennis_poly/tri/squeak/rainbow
- ckeywhitelist = list("annoymous35")
-
-/datum/gear/donator/izzyball
- name = "Katlin's Ball"
- slot = SLOT_IN_BACKPACK
- path = /obj/item/toy/fluff/tennis_poly/tri/squeak/izzy
- ckeywhitelist = list("izzyinbox")
-
-/datum/gear/donator/cloak
- name = "Green Cloak"
- slot = SLOT_NECK
- path = /obj/item/clothing/neck/cloak/green
- ckeywhitelist = list("killer402402")
-
-/datum/gear/donator/steelflask
- name = "Steel Flask"
- slot = SLOT_IN_BACKPACK
- path = /obj/item/reagent_containers/food/drinks/flask/steel
- cost = 2
- ckeywhitelist = list("nik707")
-
-/datum/gear/donator/paperhat
- name = "Paper Hat"
- slot = SLOT_HEAD
- path = /obj/item/clothing/head/paperhat
- ckeywhitelist = list("kered2")
-
-/datum/gear/donator/cloakce
- name = "Polychromic CE Cloak"
- slot = SLOT_IN_BACKPACK
- path = /obj/item/clothing/neck/cloak/polychromic/polyce
- ckeywhitelist = list("worksbythesea", "blakeryan")
- loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC
- loadout_initial_colors = list("#808080", "#8CC6FF", "#FF3535")
-
-/datum/gear/donator/ssk
- name = "Stun Sword Kit"
- slot = SLOT_IN_BACKPACK
- path = /obj/item/ssword_kit
- ckeywhitelist = list("phillip458")
-
-/datum/gear/donator/techcoat
- name = "Techomancers Labcoat"
- slot = SLOT_IN_BACKPACK
- path = /obj/item/clothing/suit/toggle/labcoat/mad/techcoat
- ckeywhitelist = list("wilchen")
-
-/datum/gear/donator/leechjar
- name = "Jar of Leeches"
- slot = SLOT_IN_BACKPACK
- path = /obj/item/custom/leechjar
- ckeywhitelist = list("sgtryder")
-
-/datum/gear/donator/darkarmor
- name = "Dark Armor"
- slot = SLOT_IN_BACKPACK
- path = /obj/item/clothing/suit/armor/vest/darkcarapace
- ckeywhitelist = list("inferno707")
-
-/datum/gear/donator/devilwings
- name = "Strange Wings"
- slot = SLOT_NECK
- path = /obj/item/clothing/neck/devilwings
- ckeywhitelist = list("kitsun")
-
-/datum/gear/donator/flagcape
- name = "US Flag Cape"
- slot = SLOT_IN_BACKPACK
- path = /obj/item/clothing/neck/flagcape
- ckeywhitelist = list("darnchacha")
-
-/datum/gear/donator/luckyjack
- name = "Lucky Jackboots"
- slot = SLOT_IN_BACKPACK
- path = /obj/item/clothing/shoes/lucky
- ckeywhitelist = list("donaldtrumpthecommunist")
-
-/datum/gear/donator/raiqbawks
- name = "Miami Boombox"
- slot = SLOT_HANDS
- cost = 2
- path = /obj/item/boombox/raiq
- ckeywhitelist = list("chefferz")
-
-/datum/gear/donator/m41
- name = "Toy M41"
- slot = SLOT_IN_BACKPACK
- path = /obj/item/toy/gun/m41
- ckeywhitelist = list("thalverscholen")
-
-/datum/gear/donator/Divine_robes
- name = "Divine robes"
- slot = SLOT_W_UNIFORM
- path = /obj/item/clothing/under/custom/lunasune
- ckeywhitelist = list("invader4352")
-
-/datum/gear/donator/gothcoat
- name = "Goth Coat"
- slot = SLOT_WEAR_SUIT
- path = /obj/item/clothing/suit/gothcoat
- ckeywhitelist = list("norko")
-
-/datum/gear/donator/corgisuit
- name = "Corgi Suit"
- slot = SLOT_WEAR_SUIT
- path = /obj/item/clothing/suit/hooded/ian_costume
- ckeywhitelist = list("cathodetherobot")
-
-/datum/gear/donator/sharkcloth
- name = "Leon's Skimpy Outfit"
- slot = SLOT_WEAR_SUIT
- path = /obj/item/clothing/under/custom/leoskimpy
- ckeywhitelist = list("spectrosis")
-
-/datum/gear/donator/mimemask
- name = "Mime Mask"
- slot = SLOT_WEAR_MASK
- path = /obj/item/clothing/mask/gas/mime
- ckeywhitelist = list("pireamaineach")
-
-/datum/gear/donator/mimeoveralls
- name = "Mime's Overalls"
- slot = SLOT_WEAR_SUIT
- path = /obj/item/clothing/under/custom/mimeoveralls
- ckeywhitelist = list("pireamaineach")
-
-/datum/gear/donator/soulneck
- name = "Soul Necklace"
- slot = SLOT_NECK
- path = /obj/item/clothing/neck/undertale
- ckeywhitelist = list("twilightic")
-
-/datum/gear/donator/frenchberet
- name = "French Beret"
- slot = SLOT_HEAD
- path = /obj/item/clothing/head/frenchberet
- ckeywhitelist = list("notazoltan")
-
-/datum/gear/donator/zuliecloak
- name = "Project: Zul-E"
- slot = SLOT_WEAR_SUIT
- path = /obj/item/clothing/suit/hooded/cloak/zuliecloak
- ckeywhitelist = list("asky")
-
-/datum/gear/donator/blackredgold
- name = "Black, Red, and Gold Coat"
- slot = SLOT_WEAR_SUIT
- path = /obj/item/clothing/suit/blackredgold
- ckeywhitelist = list("ttbnc")
-
-/datum/gear/donator/fritzplush
- name = "Fritz Plushie"
- slot = SLOT_IN_BACKPACK
- path = /obj/item/toy/plush/mammal/dog/fritz
- ckeywhitelist = list("analwerewolf")
-
-/datum/gear/donator/kimono
- name = "Kimono"
- slot = SLOT_WEAR_SUIT
- path = /obj/item/clothing/suit/kimono
- ckeywhitelist = list("sfox63")
-
-/datum/gear/donator/commjacket
- name = "Dusty Commisar's Cloak"
- slot = SLOT_WEAR_SUIT
- path = /obj/item/clothing/suit/commjacket
- ckeywhitelist = list("sadisticbatter")
-
-/datum/gear/donator/mw2_russian_para
- name = "Russian Paratrooper Jumper"
- slot = SLOT_W_UNIFORM
- path = /obj/item/clothing/under/custom/mw2_russian_para
- ckeywhitelist = list("investigator77")
-
-/datum/gear/donator/longblackgloves
- name = "Luna's Gauntlets"
- slot = SLOT_GLOVES
- path = /obj/item/clothing/gloves/longblackgloves
- ckeywhitelist = list("bigmanclancy")
-
-/datum/gear/donator/trendy_fit
- name = "Trendy Fit"
- slot = SLOT_W_UNIFORM
- path = /obj/item/clothing/under/custom/trendy_fit
- ckeywhitelist = list("midgetdragon")
-
-/datum/gear/donator/singery
- name = "Yellow Performer Outfit"
- slot = SLOT_W_UNIFORM
- path = /obj/item/clothing/under/costume/singer/yellow
- ckeywhitelist = list("maxlynchy")
-
-/datum/gear/donator/csheet
- name = "NT Bedsheet"
- slot = SLOT_NECK
- path = /obj/item/bedsheet/captain
- ckeywhitelist = list("tikibomb")
-
-/datum/gear/donator/borgplush
- name = "Robot Plush"
- slot = SLOT_IN_BACKPACK
- path = /obj/item/toy/plush/borgplushie
- ckeywhitelist = list("nicholaiavenicci")
-
-/datum/gear/donator/donorberet
- name = "Atmos Beret"
- slot = SLOT_HEAD
- path = /obj/item/clothing/head/blueberet
- ckeywhitelist = list("foxystalin")
-
-/datum/gear/donator/donorgoggles
- name = "Flight Goggles"
- slot = SLOT_HEAD
- path = /obj/item/clothing/head/flight
- ckeywhitelist = list("maxlynchy")
-
-/datum/gear/donator/onionneck
- name = "Onion Necklace"
- slot = SLOT_NECK
- path = /obj/item/clothing/neck/necklace/onion
- ckeywhitelist = list("cdrcross")
-
-/datum/gear/donator/mikubikini
- name = "starlight singer bikini"
- slot = SLOT_W_UNIFORM
- path = /obj/item/clothing/under/custom/mikubikini
- ckeywhitelist = list("grandvegeta")
-
-/datum/gear/donator/mikujacket
- name = "starlight singer jacket"
- slot = SLOT_WEAR_SUIT
- path = /obj/item/clothing/suit/mikujacket
- ckeywhitelist = list("grandvegeta")
-
-/datum/gear/donator/mikuhair
- name = "starlight singer hair"
- slot = SLOT_W_UNIFORM
- path = /obj/item/clothing/head/mikuhair
- ckeywhitelist = list("grandvegeta")
-
-/datum/gear/donator/mikugloves
- name = "starlight singer gloves"
- slot = SLOT_GLOVES
- path = /obj/item/clothing/gloves/mikugloves
- ckeywhitelist = list("grandvegeta")
-
-/datum/gear/donator/mikuleggings
- name = "starlight singer leggings"
- slot = SLOT_SHOES
- path = /obj/item/clothing/shoes/sneakers/mikuleggings
- ckeywhitelist = list("grandvegeta")
-
-/datum/gear/donator/cosmos
- name = "cosmic space bedsheet"
- slot = SLOT_IN_BACKPACK
- path = /obj/item/bedsheet/cosmos
- ckeywhitelist = list("grunnyyy")
-
-/datum/gear/donator/customskirt
- name = "custom atmos skirt"
- slot = SLOT_IN_BACKPACK
- path = /obj/item/clothing/under/custom/customskirt
- ckeywhitelist = list("thakyz")
-
-/datum/gear/donator/hisakaki
- name = "halo"
- slot = SLOT_HEAD
- path = /obj/item/clothing/head/halo
- ckeywhitelist = list("hisakaki")
-
-/datum/gear/donator/vest
- name = "vest and shirt"
- slot = SLOT_W_UNIFORM
- path = /obj/item/clothing/under/custom/vest
- ckeywhitelist = list("maylowfox")
-
-/datum/gear/donator/exo
- name = "exo frame"
- slot = SLOT_WEAR_SUIT
- path = /obj/item/clothing/suit/custom/exo
- ckeywhitelist = list("jesterz7")
-
-/datum/gear/donator/choker
- name = "NT Choker"
- slot = SLOT_NECK
- path = /obj/item/clothing/neck/petcollar/donorchoker
- ckeywhitelist = list("trigillass")
-
-/datum/gear/donator/strangemask
- name = "Strange Metal Mask"
- slot = SLOT_IN_BACKPACK
- path = /obj/item/clothing/mask/breath/mmask
- ckeywhitelist = list("sneka")
-
-/datum/gear/donator/smaiden
- name = "shrine maiden outfit"
- slot = SLOT_W_UNIFORM
- path = /obj/item/clothing/under/smaiden
- ckeywhitelist = list("ultimarifox")
-
-/datum/gear/donator/mgasmask
- name = "Military Gas Mask"
- slot = SLOT_IN_BACKPACK
- path = /obj/item/clothing/mask/gas/military
- ckeywhitelist = list("unclebourbon")
-
-/datum/gear/donator/clownmask
- name = "Clown Mask"
- path = SLOT_WEAR_MASK
- path = /obj/item/clothing/mask/gas/clown_hat
- ckeywhitelist = list("djkouta")
-
-/datum/gear/donator/spacehoodie
- name = "Space Hoodie"
- path = SLOT_WEAR_SUIT
- path = /obj/item/clothing/suit/spacehoodie
- ckeywhitelist = list("bidlink2")
-
-/datum/gear/donator/pokerchips
- name = "pokerchip set"
- slot = SLOT_IN_BACKPACK
- path = /obj/item/storage/box/pockerchips
- ckeywhitelist = list("greed2323")
-
diff --git a/modular_citadel/code/modules/client/loadout/_loadout.dm b/modular_citadel/code/modules/client/loadout/_loadout.dm
deleted file mode 100644
index 7d2a999c24b..00000000000
--- a/modular_citadel/code/modules/client/loadout/_loadout.dm
+++ /dev/null
@@ -1,91 +0,0 @@
-// Loadout system. All items are children of /datum/gear. To make a new item, you usually just define a new item like /datum/gear/example
-// then set required vars like name(string), category(slot define, take them from code/__DEFINES/inventory.dm (the lowertext ones) (be sure that there is an entry in
-// slot_to_string(slot) proc in hippiestation/code/_HELPERS/mobs.dm to show the category name in preferences menu) and path (the actual item path).
-// description defaults to the path initial desc, cost defaults to 1 point but if you think your item requires more points, the framework allows that
-// and lastly, restricted_roles list allows you to let someone spawn with certain items only if the job they spawned with is on the list.
-
-GLOBAL_LIST_EMPTY(loadout_items)
-GLOBAL_LIST_EMPTY(loadout_whitelist_ids)
-
-/proc/load_loadout_config(loadout_config)
- if(!loadout_config)
- loadout_config = "config/loadout_config.txt"
- var/list/file_lines = world.file2list(loadout_config)
- for(var/line in file_lines)
- if(!line || line[1] == "#")
- continue
- var/list/lineinfo = splittext(line, "|")
- var/lineID = lineinfo[1]
- for(var/subline in lineinfo)
- var/sublinetypedef = findtext(subline, "=")
- if(sublinetypedef)
- var/sublinetype = copytext(subline, 1, sublinetypedef)
- var/list/sublinecontent = splittext(copytext(subline, sublinetypedef+ length(sublinetypedef)), ",")
- if(sublinetype == "WHITELIST")
- GLOB.loadout_whitelist_ids["[lineID]"] = sublinecontent
-
-/proc/initialize_global_loadout_items()
- load_loadout_config()
- for(var/item in subtypesof(/datum/gear))
- var/datum/gear/I = item
- if(!initial(I.name))
- continue
- I = new item
- LAZYINITLIST(GLOB.loadout_items[I.category])
- LAZYINITLIST(GLOB.loadout_items[I.category][I.subcategory])
- GLOB.loadout_items[I.category][I.subcategory][I.name] = I
- if(islist(I.geargroupID))
- var/list/ggidlist = I.geargroupID
- I.ckeywhitelist = list()
- for(var/entry in ggidlist)
- if(entry in GLOB.loadout_whitelist_ids)
- I.ckeywhitelist |= GLOB.loadout_whitelist_ids["[entry]"]
- else if(I.geargroupID in GLOB.loadout_whitelist_ids)
- I.ckeywhitelist = GLOB.loadout_whitelist_ids["[I.geargroupID]"]
-
-
-/datum/gear
- var/name
- var/category = LOADOUT_CATEGORY_NONE
- var/subcategory = LOADOUT_SUBCATEGORY_NONE
- var/slot
- var/description
- var/path //item-to-spawn path
- var/cost = 1 //normally, each loadout costs a single point.
- var/geargroupID //defines the ID that the gear inherits from the config
- var/loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION
- var/list/loadout_initial_colors = list()
-
- //NEW DONATOR SYTSEM STUFF
- var/donoritem //autoset on new if null
- var/donator_group_id //New donator group ID system.
- //END
-
- var/list/restricted_roles
-
- //Old donator system/snowflake ckey whitelist, used for single ckeys/exceptions
- var/list/ckeywhitelist
- //END
-
- var/restricted_desc
-
- //skyrat edit
- var/has_colors = FALSE
- var/color = "#FFFFFF"
- //
-
-/datum/gear/New()
- if(isnull(donoritem))
- if(donator_group_id || ckeywhitelist)
- donoritem = TRUE
- if(!description && path)
- var/obj/O = path
- description = initial(O.desc)
-
-//a comprehensive donator check proc is intentionally not implemented due to the fact that we (((might))) have job-whitelists for donator items in the future and I like to stay on the safe side.
-
-//ckey only check
-/datum/gear/proc/donator_ckey_check(key)
- if(ckeywhitelist && ckeywhitelist.Find(key))
- return TRUE
- return IS_CKEY_DONATOR_GROUP(key, donator_group_id)
diff --git a/modular_citadel/code/modules/client/loadout/_medical.dm b/modular_citadel/code/modules/client/loadout/_medical.dm
deleted file mode 100644
index e371db94fce..00000000000
--- a/modular_citadel/code/modules/client/loadout/_medical.dm
+++ /dev/null
@@ -1,45 +0,0 @@
-/datum/gear/hands/medicbriefcase
- name = "Medical Briefcase"
- path = /obj/item/storage/briefcase/medical
- restricted_roles = list("Medical Doctor", "Chief Medical Officer")
- restricted_desc = "MD, CMO"
-
-/datum/gear/neck/stethoscope
- name = "Stethoscope"
- path = /obj/item/clothing/neck/stethoscope
- restricted_roles = list("Medical Doctor", "Chief Medical Officer")
-
-/datum/gear/uniform/bluescrubs
- name = "Blue Scrubs"
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- path = /obj/item/clothing/under/rank/medical/doctor/blue
- restricted_roles = list("Medical Doctor", "Chief Medical Officer", "Geneticist", "Chemist", "Virologist")
- restricted_desc = "Medical"
-
-/datum/gear/uniform/greenscrubs
- name = "Green Scrubs"
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- path = /obj/item/clothing/under/rank/medical/doctor/green
- restricted_roles = list("Medical Doctor", "Chief Medical Officer", "Geneticist", "Chemist", "Virologist")
- restricted_desc = "Medical"
-
-/datum/gear/uniform/purplescrubs
- name = "Purple Scrubs"
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- path = /obj/item/clothing/under/rank/medical/doctor/purple
- restricted_roles = list("Medical Doctor", "Chief Medical Officer", "Geneticist", "Chemist", "Virologist")
- restricted_desc = "Medical"
-
-/datum/gear/head/nursehat
- name = "Nurse Hat"
- path = /obj/item/clothing/head/nursehat
- subcategory = LOADOUT_SUBCATEGORY_HEAD_JOBS
- restricted_roles = list("Medical Doctor", "Chief Medical Officer", "Geneticist", "Chemist", "Virologist")
- restricted_desc = "Medical"
-
-/datum/gear/uniform/nursesuit
- name = "Nurse Suit"
- path = /obj/item/clothing/under/rank/medical/doctor/nurse
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_roles = list("Medical Doctor", "Chief Medical Officer", "Geneticist", "Chemist", "Virologist")
- restricted_desc = "Medical"
diff --git a/modular_citadel/code/modules/client/loadout/_security.dm b/modular_citadel/code/modules/client/loadout/_security.dm
deleted file mode 100644
index ab316d577b7..00000000000
--- a/modular_citadel/code/modules/client/loadout/_security.dm
+++ /dev/null
@@ -1,70 +0,0 @@
-/datum/gear/uniform/navyblueuniformhos
- name = "Head of Security navyblue uniform"
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- path = /obj/item/clothing/under/rank/security/head_of_security/formal
- restricted_roles = list("Head of Security")
-
-/datum/gear/head/navybluehosberet
- name = "Head of security's navyblue beret"
- path = /obj/item/clothing/head/beret/sec/navyhos
- subcategory = LOADOUT_SUBCATEGORY_HEAD_JOBS
- restricted_roles = list("Head of Security")
-
-/datum/gear/suit/navybluejackethos
- name = "head of security's navyblue jacket"
- subcategory = LOADOUT_SUBCATEGORY_SUIT_JOBS
- path = /obj/item/clothing/suit/armor/hos/navyblue
- restricted_roles = list("Head of Security")
-
-/datum/gear/suit/navybluejacketofficer
- name = "security officer's navyblue jacket"
- subcategory = LOADOUT_SUBCATEGORY_SUIT_JOBS
- path = /obj/item/clothing/suit/armor/navyblue
- restricted_roles = list("Security Officer")
-
-/datum/gear/head/navyblueofficerberet
- name = "Security officer's Navyblue beret"
- path = /obj/item/clothing/head/beret/sec/navyofficer
- subcategory = LOADOUT_SUBCATEGORY_HEAD_JOBS
- restricted_roles = list("Security Officer")
-
-/datum/gear/uniform/navyblueuniformofficer
- name = "Security officer navyblue uniform"
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- path = /obj/item/clothing/under/rank/security/officer/formal
- restricted_roles = list("Security Officer")
-
-/datum/gear/suit/navybluejacketwarden
- name = "warden navyblue jacket"
- subcategory = LOADOUT_SUBCATEGORY_SUIT_JOBS
- path = /obj/item/clothing/suit/armor/vest/warden/navyblue
- restricted_roles = list("Warden")
-
-/datum/gear/head/navybluewardenberet
- name = "Warden's navyblue beret"
- path = /obj/item/clothing/head/beret/sec/navywarden
- subcategory = LOADOUT_SUBCATEGORY_HEAD_JOBS
- restricted_roles = list("Warden")
-
-/datum/gear/uniform/navyblueuniformwarden
- name = "Warden navyblue uniform"
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- path = /obj/item/clothing/under/rank/security/warden/formal
- restricted_roles = list("Warden")
-
-/datum/gear/uniform/secskirt
- name = "Security skirt"
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- path = /obj/item/clothing/under/rank/security/officer/skirt
- restricted_roles = list("Security Officer", "Warden", "Head of Security")
-
-/datum/gear/uniform/hosskirt
- name = "Head of security's skirt"
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- path = /obj/item/clothing/under/rank/security/head_of_security/skirt
- restricted_roles = list("Head of Security")
-
-/datum/gear/glasses/sechud
- name = "Security Hud"
- path = /obj/item/clothing/glasses/hud/security
- restricted_roles = list("Security Officer", "Warden", "Head of Security")
diff --git a/modular_citadel/code/modules/client/loadout/_service.dm b/modular_citadel/code/modules/client/loadout/_service.dm
deleted file mode 100644
index 848ad6233c8..00000000000
--- a/modular_citadel/code/modules/client/loadout/_service.dm
+++ /dev/null
@@ -1,33 +0,0 @@
-/datum/gear/uniform/greytidestationwide
- name = "Staff Assistant's jumpsuit"
- path = /obj/item/clothing/under/misc/staffassistant
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_roles = list("Assistant")
-
-/datum/gear/suit/neetsuit
- name = "D.A.B. suit"
- path = /obj/item/clothing/suit/assu_suit
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_roles = list("Assistant")
- cost = 2
-
-/datum/gear/head/neethelm
- name = "D.A.B. helmet"
- path = /obj/item/clothing/head/assu_helmet
- subcategory = LOADOUT_SUBCATEGORY_HEAD_JOBS
- restricted_roles = list("Assistant")
- cost = 2
-
-/datum/gear/backpack/plushvar
- name = "Ratvar Plushie"
- path = /obj/item/toy/plush/plushvar
- subcategory = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
- cost = 5
- restricted_roles = list("Chaplain")
-
-/datum/gear/backpack/narplush
- name = "Narsie Plushie"
- path = /obj/item/toy/plush/narplush
- subcategory = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
- cost = 5
- restricted_roles = list("Chaplain")
diff --git a/modular_citadel/code/modules/client/loadout/backpack.dm b/modular_citadel/code/modules/client/loadout/backpack.dm
deleted file mode 100644
index 466ee504747..00000000000
--- a/modular_citadel/code/modules/client/loadout/backpack.dm
+++ /dev/null
@@ -1,177 +0,0 @@
-/datum/gear/backpack
- category = LOADOUT_CATEGORY_BACKPACK
- subcategory = LOADOUT_SUBCATEGORY_BACKPACK_GENERAL
- slot = SLOT_IN_BACKPACK
-
-/datum/gear/backpack/plushbox
- name = "Plushie Choice Box"
- path = /obj/item/choice_beacon/box/plushie
- subcategory = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
-
-/datum/gear/backpack/tennis
- name = "Polychromic Tennis Ball"
- path = /obj/item/toy/fluff/tennis_poly
- subcategory = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
-
-/datum/gear/backpack/tennis/red
- name = "Red Tennis Ball"
- path = /obj/item/toy/fluff/tennis_poly/red
-
-/datum/gear/backpack/tennis/yellow
- name = "Yellow Tennis Ball"
- path = /obj/item/toy/fluff/tennis_poly/yellow
-
-/datum/gear/backpack/tennis/green
- name = "Green Tennis Ball"
- path = /obj/item/toy/fluff/tennis_poly/green
-
-/datum/gear/backpack/tennis/cyan
- name = "Cyan Tennis Ball"
- path = /obj/item/toy/fluff/tennis_poly/cyan
-
-/datum/gear/backpack/tennis/blue
- name = "Blue Tennis Ball"
- path = /obj/item/toy/fluff/tennis_poly/blue
-
-/datum/gear/backpack/tennis/purple
- name = "Purple Tennis Ball"
- path = /obj/item/toy/fluff/tennis_poly/purple
-
-/datum/gear/backpack/tennis/tri
- name = "Tri-color Polychromic Tennis Ball"
- path = /obj/item/toy/fluff/tennis_poly/tri
- cost = 3
-
-/datum/gear/backpack/tennis/tri/squeak
- name = "Squeakable Tri-color Polychromic Tennis Ball"
- path = /obj/item/toy/fluff/tennis_poly/tri/squeak
- cost = 6
-
-/datum/gear/backpack/bone
- name = "Polychromic Bone"
- path = /obj/item/toy/fluff/bone_poly
- subcategory = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
-
-/datum/gear/backpack/bone/red
- name = "Red Polychromic Bone"
- path = /obj/item/toy/fluff/bone_poly/red
-
-/datum/gear/backpack/bone/yellow
- name = "Yellow Polychromic Bone"
- path = /obj/item/toy/fluff/bone_poly/yellow
-
-/datum/gear/backpack/bone/green
- name = "Green Polychromic Bone"
- path = /obj/item/toy/fluff/bone_poly/green
-
-/datum/gear/backpack/bone/cyan
- name = "Cyan Polychromic Bone"
- path = /obj/item/toy/fluff/bone_poly/cyan
-
-/datum/gear/backpack/bone/blue
- name = "Blue Polychromic Bone"
- path = /obj/item/toy/fluff/bone_poly/blue
-
-/datum/gear/backpack/bone/purple
- name = "Purple Polychromic Bone"
- path = /obj/item/toy/fluff/bone_poly/purple
-
-/datum/gear/backpack/bone/squeak
- name = "Squeakable Polychromic Bone"
- path = /obj/item/toy/fluff/bone_poly/squeak
- cost = 6
-
-/datum/gear/backpack/frisbee
- name = "Polychromic Frisbee"
- path = /obj/item/toy/fluff/frisbee_poly
- subcategory = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
-
-/datum/gear/backpack/frisbee/red
- name = "Red Polychromic Frisbee"
- path = /obj/item/toy/fluff/frisbee_poly/red
-
-/datum/gear/backpack/frisbee/yellow
- name = "Yellow Polychromic Frisbee"
- path = /obj/item/toy/fluff/frisbee_poly/yellow
-
-/datum/gear/backpack/frisbee/green
- name = "Green Polychromic Frisbee"
- path = /obj/item/toy/fluff/frisbee_poly/green
-
-/datum/gear/backpack/frisbee/cyan
- name = "Cyan Polychromic Frisbee"
- path = /obj/item/toy/fluff/frisbee_poly/cyan
-
-/datum/gear/backpack/frisbee/blue
- name = "Blue Polychromic Frisbee"
- path = /obj/item/toy/fluff/frisbee_poly/blue
-
-/datum/gear/backpack/frisbee/purple
- name = "Purple Polychromic Frisbee"
- path = /obj/item/toy/fluff/frisbee_poly/purple
-
-/datum/gear/backpack/dildo
- name = "Customizable dildo"
- path = /obj/item/dildo/custom
- subcategory = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
-
-/datum/gear/backpack/toykatana
- name = "Toy Katana"
- path = /obj/item/toy/katana
- subcategory = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
- cost = 3
-
-/datum/gear/backpack/tapeplayer
- name = "Taperecorder"
- path = /obj/item/taperecorder
-
-/datum/gear/backpack/tape
- name = "Spare cassette tape"
- path = /obj/item/tape/random
-
-/datum/gear/backpack/newspaper
- name = "Newspaper"
- path = /obj/item/newspaper
-
-/datum/gear/backpack/crayons
- name = "Box of crayons"
- path = /obj/item/storage/crayons
- subcategory = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
-
-/datum/gear/backpack/multipen
- name = "A multicolored pen"
- path = /obj/item/pen/fourcolor
-
-/datum/gear/backpack/fountainpen
- name = "A fancy pen"
- path = /obj/item/pen/fountain
- cost = 2
-
-/datum/gear/backpack/modular_tablet
- name = "A modular tablet"
- path = /obj/item/modular_computer/tablet/preset/cheap/
- cost = 4
-
-/datum/gear/backpack/modular_laptop
- name = "A modular laptop"
- path = /obj/item/modular_computer/laptop/preset/civilian
- cost = 7
-
-/datum/gear/backpack/ringbox_gold
- name = "A gold ring box"
- path = /obj/item/storage/fancy/ringbox
- cost = 3
-
-/datum/gear/backpack/ringbox_silver
- name = "A silver ring box"
- path = /obj/item/storage/fancy/ringbox/silver
- cost = 3
-
-/datum/gear/backpack/ringbox_diamond
- name = "A diamond ring box"
- path = /obj/item/storage/fancy/ringbox/diamond
- cost = 5
-
-/datum/gear/backpack/necklace//this is here because loadout doesn't support proper accessories
- name = "A renameable necklace"
- path = /obj/item/clothing/accessory/necklace
diff --git a/modular_citadel/code/modules/client/loadout/glasses.dm b/modular_citadel/code/modules/client/loadout/glasses.dm
deleted file mode 100644
index f3b07657f4e..00000000000
--- a/modular_citadel/code/modules/client/loadout/glasses.dm
+++ /dev/null
@@ -1,47 +0,0 @@
-/datum/gear/glasses
- category = LOADOUT_CATEGORY_GLASSES
- slot = SLOT_GLASSES
-
-/datum/gear/glasses/blindfold
- name = "Blindfold"
- path = /obj/item/clothing/glasses/sunglasses/blindfold
-
-/datum/gear/glasses/fakeblindfold
- name = "Fake Blindfold"
- path = /obj/item/clothing/glasses/fakeblindfold
-
-/datum/gear/glasses/cold
- name = "Cold goggles"
- path = /obj/item/clothing/glasses/cold
-
-/datum/gear/glasses/eyepatch
- name = "Eyepatch"
- path = /obj/item/clothing/glasses/eyepatch
-
-/datum/gear/glasses/heat
- name = "Heat goggles"
- path = /obj/item/clothing/glasses/heat
-
-/datum/gear/glasses/hipster
- name = "Hipster glasses"
- path = /obj/item/clothing/glasses/regular/hipster
-
-/datum/gear/glasses/jamjar
- name = "Jamjar glasses"
- path = /obj/item/clothing/glasses/regular/jamjar
-
-/datum/gear/glasses/monocle
- name = "Monocle"
- path = /obj/item/clothing/glasses/monocle
-
-/datum/gear/glasses/orange
- name = "Orange glasses"
- path = /obj/item/clothing/glasses/orange
-
-/datum/gear/glasses/red
- name = "Red Glasses"
- path = /obj/item/clothing/glasses/red
-
-/datum/gear/glasses/prescription
- name = "Prescription glasses"
- path = /obj/item/clothing/glasses/regular
diff --git a/modular_citadel/code/modules/client/loadout/gloves.dm b/modular_citadel/code/modules/client/loadout/gloves.dm
deleted file mode 100644
index 529d733e05f..00000000000
--- a/modular_citadel/code/modules/client/loadout/gloves.dm
+++ /dev/null
@@ -1,15 +0,0 @@
-/datum/gear/gloves
- category = LOADOUT_CATEGORY_GLOVES
- slot = SLOT_GLOVES
-
-/datum/gear/gloves/fingerless
- name = "Fingerless Gloves"
- path = /obj/item/clothing/gloves/fingerless
-
-/datum/gear/gloves/evening
- name = "Evening gloves"
- path = /obj/item/clothing/gloves/evening
-
-/datum/gear/gloves/midnight
- name = "Midnight gloves"
- path = /obj/item/clothing/gloves/evening/black
diff --git a/modular_citadel/code/modules/client/loadout/hands.dm b/modular_citadel/code/modules/client/loadout/hands.dm
deleted file mode 100644
index eb496ed78c1..00000000000
--- a/modular_citadel/code/modules/client/loadout/hands.dm
+++ /dev/null
@@ -1,54 +0,0 @@
-/datum/gear/hands
- category = LOADOUT_CATEGORY_HANDS
- slot = SLOT_HANDS
-
-/datum/gear/hands/cane
- name = "Cane"
- path = /obj/item/cane
-
-/datum/gear/hands/cigarettes
- name = "Cigarette pack"
- path = /obj/item/storage/fancy/cigarettes
-
-/datum/gear/hands/dice
- name = "Dice bag"
- path = /obj/item/storage/dice
-
-/datum/gear/hands/eightball
- name = "Magic eightball"
- path = /obj/item/toy/eightball
-
-/datum/gear/hands/matches
- name = "Matchbox"
- path = /obj/item/storage/box/matches
-
-/datum/gear/hands/cheaplighter
- name = "Cheap lighter"
- path = /obj/item/lighter/greyscale
-
-/datum/gear/hands/cards
- name = "Playing cards"
- path = /obj/item/toy/cards/deck
-
-/datum/gear/hands/skub
- name = "Skub"
- path = /obj/item/skub
-
-/datum/gear/hands/wallet
- name = "Wallet"
- path = /obj/item/storage/wallet
-
-/datum/gear/hands/flask
- name = "Flask"
- path = /obj/item/reagent_containers/food/drinks/flask
- cost = 2
-
-/datum/gear/hands/zippolighter
- name = "Zippo Lighter"
- path = /obj/item/lighter
- cost = 2
-
-/datum/gear/hands/cigar
- name = "Cigar"
- path = /obj/item/clothing/mask/cigarette/cigar
- cost = 4 //smoking is bad mkay
diff --git a/modular_citadel/code/modules/client/loadout/head.dm b/modular_citadel/code/modules/client/loadout/head.dm
deleted file mode 100644
index 6d6c803ef1c..00000000000
--- a/modular_citadel/code/modules/client/loadout/head.dm
+++ /dev/null
@@ -1,202 +0,0 @@
-/datum/gear/head
- category = LOADOUT_CATEGORY_HEAD
- subcategory = LOADOUT_SUBCATEGORY_HEAD_GENERAL
- slot = SLOT_HEAD
-
-/datum/gear/head/baseball
- name = "Ballcap"
- path = /obj/item/clothing/head/soft/mime
-
-/datum/gear/head/beanie
- name = "Beanie"
- path = /obj/item/clothing/head/beanie
-
-/datum/gear/head/beret
- name = "Black beret"
- path = /obj/item/clothing/head/beret/black
-
-/datum/gear/head/redberet
- name = "Red beret"
- path = /obj/item/clothing/head/beret
-
-/datum/gear/head/purpleberet
- name = "Purple beret"
- path = /obj/item/clothing/head/beret/purple
-
-/datum/gear/head/blueberet
- name = "Blue beret"
- path = /obj/item/clothing/head/beret/blue
-
-/datum/gear/head/flatcap
- name = "Flat cap"
- path = /obj/item/clothing/head/flatcap
-
-/datum/gear/head/pirate
- name = "Pirate hat"
- path = /obj/item/clothing/head/pirate
-
-/datum/gear/head/rice_hat
- name = "Rice hat"
- path = /obj/item/clothing/head/rice_hat
-
-/datum/gear/head/ushanka
- path = /obj/item/clothing/head/ushanka
-
-/datum/gear/head/slime
- name = "Slime hat"
- path = /obj/item/clothing/head/collectable/slime
-
-/datum/gear/head/fedora
- name = "Fedora"
- path = /obj/item/clothing/head/fedora
-
-/datum/gear/head/that
- name = "Top Hat"
- path = /obj/item/clothing/head/that
-
-/datum/gear/head/maidband
- name = "Maid headband"
- path= /obj/item/clothing/head/maid
-
-/datum/gear/head/flakhelm
- name = "Flak Helmet"
- path = /obj/item/clothing/head/flakhelm
- cost = 2
-
-/datum/gear/head/bunnyears
- name = "Bunny Ears"
- path = /obj/item/clothing/head/rabbitears
-
-/datum/gear/head/mailmanhat
- name = "Mailman's Hat"
- path = /obj/item/clothing/head/mailman
-
-//trek fancy Hats!
-/datum/gear/head/trekcap
- name = "Federation Officer's Cap (White)"
- path = /obj/item/clothing/head/caphat/formal/fedcover
- subcategory = LOADOUT_SUBCATEGORY_HEAD_JOBS
- restricted_roles = list("Captain","Head of Personnel")
-
-/datum/gear/head/trekcapcap
- name = "Federation Officer's Cap (Black)"
- path = /obj/item/clothing/head/caphat/formal/fedcover/black
- subcategory = LOADOUT_SUBCATEGORY_HEAD_JOBS
- restricted_roles = list("Captain","Head of Personnel")
-
-/datum/gear/head/trekcapmedisci
- name = "Federation Officer's Cap (Blue)"
- path = /obj/item/clothing/head/caphat/formal/fedcover/medsci
- subcategory = LOADOUT_SUBCATEGORY_HEAD_JOBS
- restricted_desc = "Medical and Science"
- restricted_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Virologist","Paramedic","Geneticist","Research Director","Scientist", "Roboticist")
-
-/datum/gear/head/trekcapeng
- name = "Federation Officer's Cap (Yellow)"
- path = /obj/item/clothing/head/caphat/formal/fedcover/eng
- subcategory = LOADOUT_SUBCATEGORY_HEAD_JOBS
- restricted_desc = "Engineering, Security, and Cargo"
- restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer","Head of Security","Cargo Technician", "Shaft Miner", "Quartermaster")
-
-/datum/gear/head/trekcapsec
- name = "Federation Officer's Cap (Red)"
- path = /obj/item/clothing/head/caphat/formal/fedcover/sec
- subcategory = LOADOUT_SUBCATEGORY_HEAD_JOBS
- restricted_desc = "Engineering, Security, and Cargo"
- restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer","Head of Security","Cargo Technician", "Shaft Miner", "Quartermaster")
-
-// orvilike "original" kepi
-/datum/gear/head/orvkepicom
- name = "Federation Kepi, command"
- description = "A visored cap. Intended to be used with ORV uniform."
- path = /obj/item/clothing/head/kepi/orvi/command
- subcategory = LOADOUT_SUBCATEGORY_HEAD_JOBS
- restricted_desc = "Heads of Staff"
- restricted_roles = list("Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Research Director", "Chief Medical Officer", "Quartermaster")
-
-/datum/gear/head/orvkepieng
- name = "Federation Kepi, eng"
- description = "A visored cap. Intended to be used with ORV uniform."
- path = /obj/item/clothing/head/kepi/orvi/eng
- subcategory = LOADOUT_SUBCATEGORY_HEAD_JOBS
- restricted_desc = "Engineering"
- restricted_roles = list("Chief Engineer", "Atmospheric Technician", "Station Engineer")
-
-/datum/gear/head/orvkepisec
- name = "Federation Kepi, sec"
- description = "A visored cap. Intended to be used with ORV uniform."
- path = /obj/item/clothing/head/kepi/orvi/sec
- subcategory = LOADOUT_SUBCATEGORY_HEAD_JOBS
- restricted_desc = "Security"
- restricted_roles = list("Warden", "Detective", "Security Officer", "Head of Security")
-
-/datum/gear/head/orvkepimedsci
- name = "Federation Kepi, medsci"
- description = "A visored cap. Intended to be used with ORV uniform."
- path = /obj/item/clothing/head/kepi/orvi/medsci
- subcategory = LOADOUT_SUBCATEGORY_HEAD_JOBS
- restricted_desc = "Medical and Science"
- restricted_roles = list("Chief Medical Officer", "Medical Doctor", "Chemist", "Virologist", "Paramedic", "Geneticist", "Research Director", "Scientist", "Roboticist")
-
-/datum/gear/head/orvkepisrv
- name = "Federation Kepi, service"
- description = "A visored cap. Intended to be used with ORV uniform."
- path = /obj/item/clothing/head/kepi/orvi/service
- subcategory = LOADOUT_SUBCATEGORY_HEAD_JOBS
- restricted_desc = "Service, Cargo and Civilian, barring Clown, Mime and Lawyer"
- restricted_roles = list("Bartender", "Botanist", "Cook", "Curator", "Janitor", "Chaplain", "Cargo Technician", "Shaft Miner")
-
-/datum/gear/head/orvkepiass
- name = "Federation Kepi, assistant"
- description = "A visored cap. Intended to be used with ORV uniform."
- path = /obj/item/clothing/head/kepi/orvi
- subcategory = LOADOUT_SUBCATEGORY_HEAD_JOBS
- restricted_roles = list("Assistant")
-
-/*Commenting out Until next Christmas or made automatic
-/datum/gear/santahatr
- name = "Red Santa Hat"
- category = SLOT_HEAD
- path = /obj/item/clothing/head/christmashat
-
-/datum/gear/santahatg
- name = "Green Santa Hat"
- category = SLOT_HEAD
- path = /obj/item/clothing/head/christmashatg
-*/
-
-//Cowboy Stuff
-/datum/gear/head/cowboyhat
- name = "Cowboy Hat, Brown"
- path = /obj/item/clothing/head/cowboyhat
-
-/datum/gear/head/cowboyhat/black
- name = "Cowboy Hat, Black"
- path = /obj/item/clothing/head/cowboyhat/black
-
-/datum/gear/head/cowboyhat/white
- name = "Cowboy Hat, White"
- path = /obj/item/clothing/head/cowboyhat/white
-
-/datum/gear/head/cowboyhat/pink
- name = "Cowboy Hat, Pink"
- path = /obj/item/clothing/head/cowboyhat/pink
-
-/datum/gear/head/cowboyhat/sec
- name = "Cowboy Hat, Security"
- path = /obj/item/clothing/head/cowboyhat/sec
- subcategory = LOADOUT_SUBCATEGORY_HEAD_JOBS
- restricted_desc = "Security"
- restricted_roles = list("Warden","Detective","Security Officer","Head of Security")
-
-/datum/gear/head/wkepi
- name = "white kepi"
- path = /obj/item/clothing/head/kepi
-
-/datum/gear/head/widered
- name = "Wide red hat"
- path = /obj/item/clothing/head/widered
-
-/datum/gear/head/kabuto
- name = "Kabuto helmet"
- path = /obj/item/clothing/head/kabuto
diff --git a/modular_citadel/code/modules/client/loadout/mask.dm b/modular_citadel/code/modules/client/loadout/mask.dm
deleted file mode 100644
index 576b29cddc1..00000000000
--- a/modular_citadel/code/modules/client/loadout/mask.dm
+++ /dev/null
@@ -1,33 +0,0 @@
-/datum/gear/mask
- category = LOADOUT_CATEGORY_MASK
- slot = SLOT_WEAR_MASK
-
-/datum/gear/mask/balaclava
- name = "Balaclava"
- path = /obj/item/clothing/mask/balaclava
-
-/datum/gear/mask/moustache
- name = "Fake moustache"
- path = /obj/item/clothing/mask/fakemoustache
-
-/datum/gear/mask/joy
- name = "Joy mask"
- path = /obj/item/clothing/mask/joy
- cost = 3
-
-/datum/gear/mask/gas
- name = "Gas Mask"
- path = /obj/item/clothing/mask/gas
- cost = 2
- restricted_roles = list("Chief Engineer", "Atmospheric Technician", "Station Engineer") //*shrug
-
-/datum/gear/mask/sterile
- name = "Aesthetic sterile mask"
- path = /obj/item/clothing/mask/surgical/aesthetic
- cost = 2
-
-/datum/gear/mask/paper
- name = "Paper mask"
- path = /obj/item/clothing/mask/paper
- cost = 2
-
diff --git a/modular_citadel/code/modules/client/loadout/neck.dm b/modular_citadel/code/modules/client/loadout/neck.dm
deleted file mode 100644
index 128285628a8..00000000000
--- a/modular_citadel/code/modules/client/loadout/neck.dm
+++ /dev/null
@@ -1,108 +0,0 @@
-/datum/gear/neck
- category = LOADOUT_CATEGORY_NECK
- subcategory = LOADOUT_SUBCATEGORY_NECK_GENERAL
- slot = SLOT_NECK
-
-/datum/gear/neck/bluetie
- name = "Blue tie"
- subcategory = LOADOUT_SUBCATEGORY_NECK_TIE
- path = /obj/item/clothing/neck/tie/blue
-
-/datum/gear/neck/redtie
- name = "Red tie"
- subcategory = LOADOUT_SUBCATEGORY_NECK_TIE
- path = /obj/item/clothing/neck/tie/red
-
-/datum/gear/neck/blacktie
- name = "Black tie"
- subcategory = LOADOUT_SUBCATEGORY_NECK_TIE
- path = /obj/item/clothing/neck/tie/black
-
-/datum/gear/neck/collar
- name = "Collar"
- path = /obj/item/clothing/neck/petcollar
- loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION | LOADOUT_CAN_COLOR_POLYCHROMIC
- loadout_initial_colors = list("#00BBBB")
-
-/datum/gear/neck/leathercollar
- name = "Leather collar"
- path = /obj/item/clothing/neck/petcollar/leather
-
-/datum/gear/neck/choker
- name = "Choker"
- path = /obj/item/clothing/neck/petcollar/choker
-
-/datum/gear/neck/cowbell
- name = "Cowbell collar"
- path = /obj/item/clothing/neck/necklace/cowbell
-
-/datum/gear/neck/scarf
- name = "White scarf"
- subcategory = LOADOUT_SUBCATEGORY_NECK_SCARVES
- path = /obj/item/clothing/neck/scarf
-
-/datum/gear/neck/scarf/black
- name = "Black scarf"
- path = /obj/item/clothing/neck/scarf/black
-
-/datum/gear/neck/scarf/red
- name = "Red scarf"
- path = /obj/item/clothing/neck/scarf/red
-
-/datum/gear/neck/scarf/green
- name = "Green scarf"
- path = /obj/item/clothing/neck/scarf/green
-
-/datum/gear/neck/scarf/darkblue
- name = "Dark blue scarf"
- path = /obj/item/clothing/neck/scarf/darkblue
-
-/datum/gear/neck/scarf/purple
- name = "Purple scarf"
- path = /obj/item/clothing/neck/scarf/purple
-
-/datum/gear/neck/scarf/yellow
- name = "Yellow scarf"
- path = /obj/item/clothing/neck/scarf/yellow
-
-/datum/gear/neck/scarf/orange
- name = "Orange scarf"
- path = /obj/item/clothing/neck/scarf/orange
-
-/datum/gear/neck/scarf/cyan
- name = "Cyan scarf"
- path = /obj/item/clothing/neck/scarf/cyan
-
-/datum/gear/neck/scarf/stripedred
- name = "Striped red scarf"
- path = /obj/item/clothing/neck/stripedredscarf
-
-/datum/gear/neck/scarf/stripedblue
- name = "Striped blue scarf"
- path = /obj/item/clothing/neck/stripedbluescarf
-
-/datum/gear/neck/scarf/stripedgreen
- name = "Striped green scarf"
- path = /obj/item/clothing/neck/stripedgreenscarf
-
-/datum/gear/neck/headphones
- name = "Headphones"
- path = /obj/item/clothing/ears/headphones
-
-/datum/gear/neck/polycloak
- name = "Polychromatic Cloak"
- path = /obj/item/clothing/neck/cloak/polychromic
- loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION | LOADOUT_CAN_COLOR_POLYCHROMIC
- loadout_initial_colors = list("#FFFFFF", "#FFFFFF", "#808080")
-
-/datum/gear/neck/altpolycloak
- name = "Alternate Cloak"
- path = /obj/item/clothing/neck/cloak/alt/polychromic
- loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC
- loadout_initial_colors = list("#FFFFFF", "#676767", "#4C4C4C")
-
-/datum/gear/neck/cancloak
- name = "Canvas Cloak"
- path = /obj/item/clothing/neck/cloak/cancloak/polychromic
- loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION | LOADOUT_CAN_COLOR_POLYCHROMIC
- loadout_initial_colors = list("#585858", "#373737", "#BEBEBE")
diff --git a/modular_citadel/code/modules/client/loadout/shoes.dm b/modular_citadel/code/modules/client/loadout/shoes.dm
deleted file mode 100644
index e2b3916ae00..00000000000
--- a/modular_citadel/code/modules/client/loadout/shoes.dm
+++ /dev/null
@@ -1,77 +0,0 @@
-/datum/gear/shoes
- category = LOADOUT_CATEGORY_SHOES
- slot = SLOT_SHOES
-
-/datum/gear/shoes/laceup
- name = "Laceup shoes"
- path = /obj/item/clothing/shoes/laceup
-
-/datum/gear/shoes/workboots
- name = "Work boots"
- path = /obj/item/clothing/shoes/workboots
-
-/datum/gear/shoes/jackboots
- name = "Jackboots"
- path = /obj/item/clothing/shoes/jackboots
-
-/datum/gear/shoes/winterboots
- name = "Winter boots"
- path = /obj/item/clothing/shoes/winterboots
-
-/datum/gear/shoes/sandals
- name = "Sandals"
- path = /obj/item/clothing/shoes/sandal
-
-/datum/gear/shoes/blackshoes
- name = "Black shoes"
- path = /obj/item/clothing/shoes/sneakers/black
-
-/datum/gear/shoes/brownshoes
- name = "Brown shoes"
- path = /obj/item/clothing/shoes/sneakers/brown
-
-/datum/gear/shoes/whiteshoes
- name = "White shoes"
- path = /obj/item/clothing/shoes/sneakers/white
-
-/datum/gear/shoes/poly
- name = "Polychromic shoes"
- path = /obj/item/clothing/shoes/sneakers/poly/polychromic
- loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION | LOADOUT_CAN_COLOR_POLYCHROMIC
- loadout_initial_colors = list("#FFFFFF", "#1D1D1D")
-
-/datum/gear/shoes/gildedcuffs
- name = "Gilded leg wraps"
- path= /obj/item/clothing/shoes/wraps
-
-/datum/gear/shoes/silvercuffs
- name = "Silver leg wraps"
- path= /obj/item/clothing/shoes/wraps/silver
-
-/datum/gear/shoes/redcuffs
- name = "Red leg wraps"
- path= /obj/item/clothing/shoes/wraps/red
-
-/datum/gear/shoes/bluecuffs
- name = "Blue leg wraps"
- path= /obj/item/clothing/shoes/wraps/blue
-
-/datum/gear/shoes/christmasbootsr
- name = "Red Christmas Boots"
- path= /obj/item/clothing/shoes/winterboots/christmasbootsr
-
-/datum/gear/shoes/christmasbootsg
- name = "Green Christmas Boots"
- path= /obj/item/clothing/shoes/winterboots/christmasbootsg
-
-/datum/gear/shoes/santaboots
- name = "Santa Boots"
- path= /obj/item/clothing/shoes/winterboots/santaboots
-
-/datum/gear/shoes/cowboyboots
- name = "Cowboy Boots, Brown"
- path = /obj/item/clothing/shoes/cowboyboots
-
-/datum/gear/shoes/cowboyboots/black
- name = "Cowboy Boots, Black"
- path = /obj/item/clothing/shoes/cowboyboots/black
diff --git a/modular_citadel/code/modules/client/loadout/suit.dm b/modular_citadel/code/modules/client/loadout/suit.dm
deleted file mode 100644
index 066bcf14c7d..00000000000
--- a/modular_citadel/code/modules/client/loadout/suit.dm
+++ /dev/null
@@ -1,326 +0,0 @@
-/datum/gear/suit
- category = LOADOUT_CATEGORY_SUIT
- subcategory = LOADOUT_SUBCATEGORY_SUIT_GENERAL
- slot = SLOT_WEAR_SUIT
-
-/datum/gear/suit/poncho
- name = "Poncho"
- path = /obj/item/clothing/suit/poncho
-
-/datum/gear/suit/ponchogreen
- name = "Green poncho"
- path = /obj/item/clothing/suit/poncho/green
-
-/datum/gear/suit/ponchored
- name = "Red poncho"
- path = /obj/item/clothing/suit/poncho/red
-
-/datum/gear/suit/redhood
- name = "Red cloak"
- path = /obj/item/clothing/suit/hooded/cloak/david
- cost = 3
-
-/datum/gear/suit/jacketbomber
- name = "Bomber jacket"
- path = /obj/item/clothing/suit/jacket
- subcategory = LOADOUT_SUBCATEGORY_SUIT_JACKETS
-
-/datum/gear/suit/jacketflannelblack // all of these are reskins of bomber jackets but with the vibe to make you look like a true lumberjack
- name = "Black flannel jacket"
- path = /obj/item/clothing/suit/toggle/jacket/flannel
- subcategory = LOADOUT_SUBCATEGORY_SUIT_JACKETS
-
-/datum/gear/suit/jacketflannelred
- name = "Red flannel jacket"
- path = /obj/item/clothing/suit/toggle/jacket/flannel/red
- subcategory = LOADOUT_SUBCATEGORY_SUIT_JACKETS
-
-/datum/gear/suit/jacketflannelaqua
- name = "Aqua flannel jacket"
- path = /obj/item/clothing/suit/toggle/jacket/flannel/aqua
- subcategory = LOADOUT_SUBCATEGORY_SUIT_JACKETS
-
-/datum/gear/suit/jacketflannelbrown
- name = "Brown flannel jacket"
- path = /obj/item/clothing/suit/toggle/jacket/flannel/brown
- subcategory = LOADOUT_SUBCATEGORY_SUIT_JACKETS
-
-/datum/gear/suit/jacketleather
- name = "Leather jacket"
- path = /obj/item/clothing/suit/jacket/leather
- subcategory = LOADOUT_SUBCATEGORY_SUIT_JACKETS
-
-/datum/gear/suit/overcoatleather
- name = "Leather overcoat"
- path = /obj/item/clothing/suit/jacket/leather/overcoat
- subcategory = LOADOUT_SUBCATEGORY_SUIT_JACKETS
-
-/datum/gear/suit/jacketpuffer
- name = "Puffer jacket"
- path = /obj/item/clothing/suit/jacket/puffer
- subcategory = LOADOUT_SUBCATEGORY_SUIT_JACKETS
-
-/datum/gear/suit/vestpuffer
- name = "Puffer vest"
- path = /obj/item/clothing/suit/jacket/puffer/vest
- subcategory = LOADOUT_SUBCATEGORY_SUIT_JACKETS
-
-/datum/gear/suit/jacketlettermanbrown
- name = "Brown letterman jacket"
- path = /obj/item/clothing/suit/jacket/letterman
- subcategory = LOADOUT_SUBCATEGORY_SUIT_JACKETS
-
-/datum/gear/suit/jacketlettermanred
- name = "Red letterman jacket"
- path = /obj/item/clothing/suit/jacket/letterman_red
- subcategory = LOADOUT_SUBCATEGORY_SUIT_JACKETS
-
-/datum/gear/suit/jacketlettermanNT
- name = "Nanotrasen letterman jacket"
- path = /obj/item/clothing/suit/jacket/letterman_nanotrasen
- subcategory = LOADOUT_SUBCATEGORY_SUIT_JACKETS
-
-/datum/gear/suit/coat
- name = "Winter coat"
- path = /obj/item/clothing/suit/hooded/wintercoat
- subcategory = LOADOUT_SUBCATEGORY_SUIT_COATS
-
-/datum/gear/suit/coat/aformal
- name = "Assistant's formal winter coat"
- path = /obj/item/clothing/suit/hooded/wintercoat/aformal
-
-/datum/gear/suit/coat/runed
- name = "Runed winter coat"
- path = /obj/item/clothing/suit/hooded/wintercoat/narsie/fake
-
-/datum/gear/suit/coat/brass
- name = "Brass winter coat"
- path = /obj/item/clothing/suit/hooded/wintercoat/ratvar/fake
-
-/datum/gear/suit/whitehoodie
- name = "Soft hoodie"
- path = /obj/item/clothing/suit/toggle/jacket/whitehoodie
- loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION
- subcategory = LOADOUT_SUBCATEGORY_SUIT_JACKETS
-
-/datum/gear/suit/jacketbluehoodie
- name = "Blue hoodie"
- path = /obj/item/clothing/suit/jacket/bluehoodie
- loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION
- subcategory = LOADOUT_SUBCATEGORY_SUIT_JACKETS
-/datum/gear/suit/jacketpurplehoodie
- name = "Purple hoodie"
- path = /obj/item/clothing/suit/jacket/purplehoodie
- loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION
- subcategory = LOADOUT_SUBCATEGORY_SUIT_JACKETS
-
-/datum/gear/suit/jacketheartcoat
- name = "Heart coat"
- path = /obj/item/clothing/suit/jacket/heartcoat
- loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION
- subcategory = LOADOUT_SUBCATEGORY_SUIT_JACKETS
-
-/datum/gear/suit/jacketgothiccoat
- name = "Long black coat with cuffs"
- path = /obj/item/clothing/suit/jacket/gothiccoat
- loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION
- subcategory = LOADOUT_SUBCATEGORY_SUIT_JACKETS
-
-/datum/gear/suit/jacketgothshirt
- name = "Black shirt with cuffs"
- path = /obj/item/clothing/suit/jacket/gothicshirt
- loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION
- subcategory = LOADOUT_SUBCATEGORY_SUIT_GENERAL
-
-/datum/gear/suit/jacketgothshirtcross
- name = "Black shirt with cross"
- path = /obj/item/clothing/suit/jacket/gothicshirtcross
- loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION
- subcategory = LOADOUT_SUBCATEGORY_SUIT_GENERAL
-
-/datum/gear/suit/gentlecoat
- name = "Grey coat"
- path = /obj/item/clothing/suit/jacket/gentlecoat
- loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION
- subcategory = LOADOUT_SUBCATEGORY_SUIT_COATS
-
-/datum/gear/suit/greenjacket
- name = "Green outdoorsman jacket"
- path = /obj/item/clothing/suit/toggle/jacket/greenjacket
- loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION
- subcategory = LOADOUT_SUBCATEGORY_SUIT_JACKETS
-
-/datum/gear/suit/fancytrench
- name = "Grey trenchcoat"
- path = /obj/item/clothing/suit/toggle/jacket/fancytrench
- loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION
- subcategory = LOADOUT_SUBCATEGORY_SUIT_COATS
-
-
-/datum/gear/suit/coat/polycoat
- name = "Polychromic winter coat"
- path = /obj/item/clothing/suit/hooded/wintercoat/polychromic
- cost = 4 //too many people with neon green coats is hard on the eyes
- loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION | LOADOUT_CAN_COLOR_POLYCHROMIC
- loadout_initial_colors = list("#6A6964", "#C4B8A6", "#0000FF")
-
-/datum/gear/suit/coat/wbreakpoly
- name = "Polychromic windbreaker"
- path = /obj/item/clothing/suit/toggle/wbreakpoly/polychromic
- cost = 4
- loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION | LOADOUT_CAN_COLOR_POLYCHROMIC
- loadout_initial_colors = list("#464F65", "#916035", "#474747")
-
-/datum/gear/suit/coat/med
- name = "Medical winter coat"
- path = /obj/item/clothing/suit/hooded/wintercoat/medical
- restricted_roles = list("Chief Medical Officer", "Medical Doctor") // Reserve it to Medical Doctors and their boss, the Chief Medical Officer
-
-/datum/gear/suit/coat/paramedic
- name = "Paramedic winter coat"
- path = /obj/item/clothing/suit/hooded/wintercoat/paramedic
- restricted_roles = list("Chief Medical Officer", "Paramedic") // Reserve it to Paramedics and their boss, the Chief Medical Officer
-
-/datum/gear/suit/coat/robotics
- name = "Robotics winter coat"
- path = /obj/item/clothing/suit/hooded/wintercoat/robotics
- restricted_roles = list("Research Director", "Roboticist")
-
-/datum/gear/suit/coat/sci
- name = "Science winter coat"
- path = /obj/item/clothing/suit/hooded/wintercoat/science
- restricted_roles = list("Research Director", "Scientist", "Roboticist") // Reserve it to the Science Departement
-
-/datum/gear/suit/coat/eng
- name = "Engineering winter coat"
- path = /obj/item/clothing/suit/hooded/wintercoat/engineering
- restricted_roles = list("Chief Engineer", "Station Engineer") // Reserve it to Station Engineers and their boss, the Chief Engineer
-
-/datum/gear/suit/coat/eng/atmos
- name = "Atmospherics winter coat"
- path = /obj/item/clothing/suit/hooded/wintercoat/engineering/atmos
- restricted_roles = list("Chief Engineer", "Atmospheric Technician") // Reserve it to Atmos Techs and their boss, the Chief Engineer
-
-/datum/gear/suit/coat/hydro
- name = "Hydroponics winter coat"
- path = /obj/item/clothing/suit/hooded/wintercoat/hydro
- restricted_roles = list("Head of Personnel", "Botanist") // Reserve it to Botanists and their boss, the Head of Personnel
-
-/datum/gear/suit/coat/bar
- name = "Bar winter coat"
- path = /obj/item/clothing/suit/hooded/wintercoat/bar
- restricted_roles = list("Bartender") // Reserve it to Bartenders and not the Head of Personnel because he doesnt deserve to look as fancy as them
-
-/datum/gear/suit/coat/cargo
- name = "Cargo winter coat"
- path = /obj/item/clothing/suit/hooded/wintercoat/cargo
- restricted_roles = list("Quartermaster", "Cargo Technician") // Reserve it to Cargo Techs and their boss, the Quartermaster
-
-/datum/gear/suit/coat/miner
- name = "Mining winter coat"
- path = /obj/item/clothing/suit/hooded/wintercoat/miner
- restricted_roles = list("Quartermaster", "Shaft Miner") // Reserve it to Miners and their boss, the Quartermaster
-
-/datum/gear/suit/militaryjacket
- name = "Military Jacket"
- path = /obj/item/clothing/suit/jacket/miljacket
- subcategory = LOADOUT_SUBCATEGORY_SUIT_JACKETS
-
-/datum/gear/suit/urbanjacket
- name = "Urban Jacket"
- path = /obj/item/clothing/suit/jacket/urbanjacket/polychromic
- subcategory = LOADOUT_SUBCATEGORY_SUIT_JACKETS
- loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION | LOADOUT_CAN_COLOR_POLYCHROMIC
- loadout_initial_colors = list("#3B4B2E", "#CBBDAF", "#444444")
-
-/datum/gear/suit/ianshirt
- name = "Ian Shirt"
- path = /obj/item/clothing/suit/ianshirt
-
-/datum/gear/suit/flakjack
- name = "Flak Jacket"
- path = /obj/item/clothing/suit/flakjack
- subcategory = LOADOUT_SUBCATEGORY_SUIT_JACKETS
- cost = 2
-
-/datum/gear/suit/trekds9_coat
- name = "DS9 Overcoat (use uniform)"
- path = /obj/item/clothing/suit/storage/trek/ds9
- subcategory = LOADOUT_SUBCATEGORY_SUIT_JOBS
- restricted_desc = "All, barring Service and Civilian"
- restricted_roles = list("Head of Security","Captain","Head of Personnel","Chief Engineer","Research Director","Chief Medical Officer","Quartermaster",
- "Medical Doctor","Chemist","Virologist","Paramedic","Geneticist","Scientist", "Roboticist",
- "Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer",
- "Cargo Technician", "Shaft Miner") //everyone who actually deserves a job.
-//Federation jackets from movies
-/datum/gear/suit/trekcmdcap
- name = "Fed (movie) uniform, Black"
- path = /obj/item/clothing/suit/storage/fluff/fedcoat/capt
- subcategory = LOADOUT_SUBCATEGORY_SUIT_JOBS
- restricted_roles = list("Captain","Head of Personnel")
-
-/datum/gear/suit/trekcmdmov
- name = "Fed (movie) uniform, Red"
- path = /obj/item/clothing/suit/storage/fluff/fedcoat
- subcategory = LOADOUT_SUBCATEGORY_SUIT_JOBS
- restricted_desc = "Heads of Staff and Security"
- restricted_roles = list("Head of Security","Captain","Head of Personnel","Chief Engineer","Research Director","Chief Medical Officer","Quartermaster","Warden","Detective","Security Officer")
-
-/datum/gear/suit/trekmedscimov
- name = "Fed (movie) uniform, Blue"
- path = /obj/item/clothing/suit/storage/fluff/fedcoat/medsci
- subcategory = LOADOUT_SUBCATEGORY_SUIT_JOBS
- restricted_desc = "Medical and Science"
- restricted_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Virologist","Paramedic","Geneticist","Research Director","Scientist", "Roboticist")
-
-/datum/gear/suit/trekengmov
- name = "Fed (movie) uniform, Yellow"
- path = /obj/item/clothing/suit/storage/fluff/fedcoat/eng
- subcategory = LOADOUT_SUBCATEGORY_SUIT_JOBS
- restricted_desc = "Engineering and Cargo"
- restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Cargo Technician", "Shaft Miner", "Quartermaster")
-
-/datum/gear/suit/trekcmdcapmod
- name = "Fed (Modern) uniform, White"
- path = /obj/item/clothing/suit/storage/fluff/modernfedcoat
- restricted_roles = list("Captain","Head of Personnel")
-
-/datum/gear/suit/trekcmdmod
- name = "Fed (Modern) uniform, Red"
- path = /obj/item/clothing/suit/storage/fluff/modernfedcoat/sec
- subcategory = LOADOUT_SUBCATEGORY_SUIT_JOBS
- restricted_desc = "Heads of Staff and Security"
- restricted_roles = list("Head of Security","Captain","Head of Personnel","Chief Engineer","Research Director","Chief Medical Officer","Quartermaster","Warden","Detective","Security Officer")
-
-/datum/gear/suit/trekmedscimod
- name = "Fed (Modern) uniform, Blue"
- path = /obj/item/clothing/suit/storage/fluff/modernfedcoat/medsci
- subcategory = LOADOUT_SUBCATEGORY_SUIT_JOBS
- restricted_desc = "Medical and Science"
- restricted_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Virologist","Paramedic","Geneticist","Research Director","Scientist", "Roboticist")
-
-/datum/gear/suit/trekengmod
- name = "Fed (Modern) uniform, Yellow"
- path = /obj/item/clothing/suit/storage/fluff/modernfedcoat/eng
- subcategory = LOADOUT_SUBCATEGORY_SUIT_JOBS
- restricted_desc = "Engineering and Cargo"
- restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Cargo Technician", "Shaft Miner", "Quartermaster")
-
-/datum/gear/suit/christmascoatr
- name = "Red Christmas Coat"
- path = /obj/item/clothing/suit/hooded/wintercoat/christmascoatr
- subcategory = LOADOUT_SUBCATEGORY_SUIT_COATS
-
-/datum/gear/suit/christmascoatg
- name = "Green Christmas Coat"
- path = /obj/item/clothing/suit/hooded/wintercoat/christmascoatg
- subcategory = LOADOUT_SUBCATEGORY_SUIT_COATS
-
-/datum/gear/suit/christmascoatrg
- name = "Red and Green Christmas Coat"
- path = /obj/item/clothing/suit/hooded/wintercoat/christmascoatrg
- subcategory = LOADOUT_SUBCATEGORY_SUIT_COATS
-
-/datum/gear/suit/samurai
- name = "Samurai outfit"
- path = /obj/item/clothing/suit/samurai
diff --git a/modular_citadel/code/modules/client/loadout/uniform.dm b/modular_citadel/code/modules/client/loadout/uniform.dm
deleted file mode 100644
index 86fcc867a3f..00000000000
--- a/modular_citadel/code/modules/client/loadout/uniform.dm
+++ /dev/null
@@ -1,741 +0,0 @@
-/datum/gear/uniform
- category = LOADOUT_CATEGORY_UNIFORM
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_GENERAL
- slot = SLOT_W_UNIFORM
-
-/datum/gear/uniform/suit
- name = "Black suit"
- path = /obj/item/clothing/under/suit/black
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_SUITS
-
-/datum/gear/uniform/suit/green
- name = "Green suit"
- path = /obj/item/clothing/under/suit/green
-
-/datum/gear/uniform/suit/red
- name = "Red suit"
- path = /obj/item/clothing/under/suit/red
-
-/datum/gear/uniform/suit/charcoal
- name = "Charcoal suit"
- path = /obj/item/clothing/under/suit/charcoal
-
-/datum/gear/uniform/suit/navy
- name = "Navy suit"
- path = /obj/item/clothing/under/suit/navy
-
-/datum/gear/uniform/suit/burgundy
- name = "Burgundy suit"
- path = /obj/item/clothing/under/suit/burgundy
-
-/datum/gear/uniform/suit/tan
- name = "Tan suit"
- path = /obj/item/clothing/under/suit/tan
-
-/datum/gear/uniform/suit/charismatic_suit
- name = "Charismatic suit"
- path = /obj/item/clothing/under/suit/charismatic_suit
-
-/datum/gear/uniform/suit/white
- name = "White suit"
- path = /obj/item/clothing/under/suit/white
-
-/datum/gear/uniform/assistantformal
- name = "Assistant's formal uniform"
- path = /obj/item/clothing/under/misc/assistantformal
-
-/datum/gear/uniform/maidcostume
- name = "Maid costume"
- path = /obj/item/clothing/under/costume/maid
-
-/datum/gear/uniform/maidcostume/polychromic
- name = "Polychromic maid costume"
- path = /obj/item/clothing/under/rank/civilian/janitor/maid/polychromic
- loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION | LOADOUT_CAN_COLOR_POLYCHROMIC
- loadout_initial_colors = list("#FFFFFF", "#000000")
-
-/datum/gear/uniform/mailmanuniform
- name = "Mailman's jumpsuit"
- path = /obj/item/clothing/under/misc/mailman
-
-/datum/gear/uniform/skirt
- name = "Black skirt"
- path = /obj/item/clothing/under/dress/skirt
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_SKIRTS
-
-/datum/gear/uniform/skirt/blue
- name = "Blue skirt"
- path = /obj/item/clothing/under/dress/skirt/blue
-
-/datum/gear/uniform/skirt/red
- name = "Red skirt"
- path = /obj/item/clothing/under/dress/skirt/red
-
-/datum/gear/uniform/skirt/purple
- name = "Purple skirt"
- path = /obj/item/clothing/under/dress/skirt/purple
-
-/datum/gear/uniform/skirt/plaid
- name = "Plaid skirt"
- path = /obj/item/clothing/under/dress/skirt/plaid
-
-/datum/gear/uniform/schoolgirlblue
- name = "Blue Schoolgirl Uniform"
- path = /obj/item/clothing/under/costume/schoolgirl
-
-/datum/gear/uniform/schoolgirlred
- name = "Red Schoolgirl Uniform"
- path = /obj/item/clothing/under/costume/schoolgirl/red
-
-/datum/gear/uniform/schoolgirlgreen
- name = "Green Schoolgirl Uniform"
- path = /obj/item/clothing/under/costume/schoolgirl/green
-
-/datum/gear/uniform/schoolgirlorange
- name = "Orange Schoolgirl Uniform"
- path = /obj/item/clothing/under/costume/schoolgirl/orange
-
-/datum/gear/uniform/dress
- name = "Striped Dress"
- path = /obj/item/clothing/under/dress/striped
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_DRESSES
-
-/datum/gear/uniform/dress/sun/white
- name = "White Sundress"
- path = /obj/item/clothing/under/dress/sundress/white
-
-/datum/gear/uniform/dress/sun
- name = "Sundress"
- path = /obj/item/clothing/under/dress/sundress
-
-/datum/gear/uniform/dress/green
- name = "Green Dress"
- path = /obj/item/clothing/under/dress/green
-
-/datum/gear/uniform/dress/pink
- name = "Pink Dress"
- path = /obj/item/clothing/under/dress/pink
-
-/datum/gear/uniform/dress/orange
- name = "Flower Dress"
- path = /obj/item/clothing/under/dress/flower
-
-/datum/gear/uniform/skirt/swept
- name = "Swept skirt"
- path = /obj/item/clothing/under/dress/skirt/swept
-
-/datum/gear/uniform/croptop
- name = "Croptop"
- path = /obj/item/clothing/under/croptop
-
-/datum/gear/uniform/pants
- name = "Yoga Pants"
- path = /obj/item/clothing/under/pants/yoga
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_PANTS
-
-/datum/gear/uniform/kilt
- name = "Kilt"
- path = /obj/item/clothing/under/costume/kilt
-
-/datum/gear/uniform/pants/camo
- name = "Camo Pants"
- path = /obj/item/clothing/under/pants/camo
-
-/datum/gear/uniform/shorts
- name = "Athletic Shorts"
- path = /obj/item/clothing/under/shorts/red
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_SHORTS
-
-/datum/gear/uniform/pants/bjeans
- name = "Black Jeans"
- path = /obj/item/clothing/under/pants/blackjeans
-
-/datum/gear/uniform/pants/cjeans
- name = "Classic Jeans"
- path = /obj/item/clothing/under/pants/classicjeans
-
-/datum/gear/uniform/pants/khaki
- name = "Khaki Pants"
- path = /obj/item/clothing/under/pants/khaki
-
-/datum/gear/uniform/pants/white
- name = "White Pants"
- path = /obj/item/clothing/under/pants/white
-
-/datum/gear/uniform/pants/red
- name = "Red Pants"
- path = /obj/item/clothing/under/pants/red
-
-/datum/gear/uniform/pants/tan
- name = "Tan Pants"
- path = /obj/item/clothing/under/pants/tan
-
-/datum/gear/uniform/pants/polypants
- name = "Polychromic Pants"
- path = /obj/item/clothing/under/pants/polypants/polychromic
- cost = 2
- loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION | LOADOUT_CAN_COLOR_POLYCHROMIC
- loadout_initial_colors = list("#75634F", "#3D3D3D", "#575757")
-
-/datum/gear/uniform/pants/track
- name = "Track Pants"
- path = /obj/item/clothing/under/pants/track
-
-/datum/gear/uniform/pants/ripped
- name = "Ripped Jeans"
- path = /obj/item/clothing/under/pants/jeanripped
-
-/datum/gear/uniform/shorts/jean
- name = "Jean Shorts"
- path = /obj/item/clothing/under/pants/jeanshort
-
-/datum/gear/uniform/skirt/denim
- name = "Denim Skirt"
- path = /obj/item/clothing/under/pants/denimskirt
-
-// Pantsless Sweaters
-
-/datum/gear/uniform/turtleneck
- name = "Tactitool Turtleneck"
- path = /obj/item/clothing/under/syndicate/cosmetic
-
-/datum/gear/uniform/skirtleneck
- name = "Tactitool Skirtleneck"
- path = /obj/item/clothing/under/syndicate/cosmetic/skirt
-
-/datum/gear/uniform/sweater
- name = "Cream Commando Sweater"
- path = /obj/item/clothing/under/sweater
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_SWEATERS
-
-/datum/gear/uniform/sweater/black
- name = "Black Commando Sweater"
- path = /obj/item/clothing/under/sweater/black
-
-/datum/gear/uniform/sweater/purple
- name = "Purple Commando Sweater"
- path = /obj/item/clothing/under/sweater/purple
-
-/datum/gear/uniform/sweater/green
- name = "Green Commando Sweater"
- path = /obj/item/clothing/under/sweater/green
-
-/datum/gear/uniform/sweater/red
- name = "Red Commando Sweater"
- path = /obj/item/clothing/under/sweater/red
-
-/datum/gear/uniform/sweater/blue
- name = "Navy Commando Sweater"
- path = /obj/item/clothing/under/sweater/blue
-
-/datum/gear/uniform/sweater/keyhole
- name = "Keyhole Sweater"
- path = /obj/item/clothing/under/misc/keyholesweater
-
-/datum/gear/uniform/tealturtle
- name = "Teal Turtleneck"
- path = /obj/item/clothing/under/suit/turtle/teal
-
-/datum/gear/uniform/greyturtle
- name = "Grey Turtleneck"
- path = /obj/item/clothing/under/suit/turtle/grey
-
-/datum/gear/uniform/purpleturtle
- name = "Purple Turtleneck"
- path = /obj/item/clothing/under/suit/turtle/purple
-
-/datum/gear/uniform/orangeturtle
- name = "Orange Turtleneck"
- path = /obj/item/clothing/under/suit/turtle/orange
-
-/datum/gear/uniform/blueturtle
- name = "Blue Turtleneck"
- path = /obj/item/clothing/under/suit/turtle/blue
-
-/datum/gear/uniform/redturtle
- name = "Red Turtleneck"
- path = /obj/item/clothing/under/suit/turtle/red
-
-/datum/gear/uniform/polyjump
- name = "Polychromic Jumpsuit"
- path = /obj/item/clothing/under/misc/polyjumpsuit
- cost = 2
- loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION | LOADOUT_CAN_COLOR_POLYCHROMIC
- loadout_initial_colors = list("#FFFFFF", "#808080", "#353535")
-
-/datum/gear/uniform/skirt/poly
- name = "Polychromic Jumpskirt"
- path = /obj/item/clothing/under/dress/skirt/polychromic
- cost = 2
- loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION | LOADOUT_CAN_COLOR_POLYCHROMIC
- loadout_initial_colors = list("#FFFFFF", "#F08080", "#808080")
-
-/datum/gear/uniform/suit/poly
- name = "Polychromic Button-up Shirt"
- path = /obj/item/clothing/under/misc/poly_shirt
- cost = 3
- loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION | LOADOUT_CAN_COLOR_POLYCHROMIC
- loadout_initial_colors = list("#FFFFFF", "#353535", "#353535")
-
-/datum/gear/uniform/skirt/poly/pleated
- name = "Polychromic Pleated Sweaterskirt"
- path = /obj/item/clothing/under/dress/skirt/polychromic/pleated
- cost = 3
- loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION | LOADOUT_CAN_COLOR_POLYCHROMIC
- loadout_initial_colors = list("#8CC6FF", "#808080", "#FF3535")
-
-/datum/gear/uniform/polykilt
- name = "Polychromic Kilt"
- path = /obj/item/clothing/under/costume/kilt/polychromic
- cost = 3
- loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION | LOADOUT_CAN_COLOR_POLYCHROMIC
- loadout_initial_colors = list("#FFFFFF", "#F08080")
-
-/datum/gear/uniform/shorts/poly
- name = "Polychromic Shorts"
- path = /obj/item/clothing/under/misc/polyshorts
- cost = 3
- loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION | LOADOUT_CAN_COLOR_POLYCHROMIC
- loadout_initial_colors = list("#353535", "#808080", "#808080")
-
-/datum/gear/uniform/shorts/poly/athletic
- name = "Polychromic Athletic Shorts"
- path = /obj/item/clothing/under/shorts/polychromic
- cost = 2
- loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION | LOADOUT_CAN_COLOR_POLYCHROMIC
- loadout_initial_colors = list("#FFFFFF", "#F08080")
-
-/datum/gear/uniform/hopcasual
- name = "Casual Head of Personnel's uniform"
- path = /obj/item/clothing/under/rank/civilian/head_of_personnel/whimsy
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_desc = "Head of Personnel"
- restricted_roles = list("Head of Personnel")
-
-/datum/gear/uniform/robosleek
- name = "Sleek roboticist's jumpsuit"
- path = /obj/item/clothing/under/rank/rnd/roboticist/sleek
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_desc = "Roboticist"
- restricted_roles = list("Roboticist")
-
-/datum/gear/uniform/seccorp
- name = "Corporate Security Uniform"
- path = /obj/item/clothing/under/rank/security/officer/blueshirt/seccorp
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_desc = "Security Officer"
- restricted_roles = list("Security Officer")
-
-/datum/gear/uniform/wardencorp
- name = "Corporate Warden's Uniform"
- path = /obj/item/clothing/under/rank/security/officer/blueshirt/seccorp/wardencorp
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_desc = "Warden"
- restricted_roles = list("Warden")
-
-/datum/gear/uniform/hoscorp
- name = "Corporate Head of Security's Uniform"
- path = /obj/item/clothing/under/rank/security/officer/blueshirt/seccorp/hoscorp
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_desc = "Head Of Security"
- restricted_roles = list("Head Of Security")
-
-/datum/gear/uniform/detcorp
- name = "Corporate Detective's Uniform"
- path = /obj/item/clothing/under/rank/security/officer/blueshirt/seccorp/detcorp
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_desc = "Detective"
- restricted_roles = list("Detective")
-
-/datum/gear/uniform/detbrown
- name = "Brown Worn Suit"
- path = /obj/item/clothing/under/rank/security/detective/brown
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_desc = "Detective"
- restricted_roles = list("Detective")
-
-/datum/gear/uniform/detbrown/detbrown2
- name = "Padded Worn Suit"
- path = /obj/item/clothing/under/rank/security/detective/brown/brown2
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_desc = "Detective"
- restricted_roles = list("Detective")
-
-
-// Grey utility
-
-/datum/gear/uniform/grey
- name = "Grey Uniform"
- path = /obj/item/clothing/under/rank/civilian/util/greyshirt
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_GENERAL
-
-/datum/gear/uniform/grey/util
- name = "Grey Utility Uniform"
- path = /obj/item/clothing/under/rank/civilian/util
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_GENERAL
-
-/datum/gear/uniform/grey/sec
- name = "Security Utility Uniform"
- path = /obj/item/clothing/under/rank/security/officer/util
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_desc = "Security"
- restricted_roles = list("Detective", "Security Officer", "Warden", "Head of Security")
-
-/datum/gear/uniform/grey/sci
- name = "Science Utility Uniform"
- path = /obj/item/clothing/under/rank/rnd/scientist/util
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_desc = "Science"
- restricted_roles = list("Scientist", "Roboticist", "Research Director", "Geneticist")
-
-/datum/gear/uniform/grey/med
- name = "Medical Utility Uniform"
- path = /obj/item/clothing/under/rank/medical/doctor/util
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_desc = "Medical"
- restricted_roles = list("Medical Doctor", "Virologist", "Chemist", "Geneticist", "Paramedic")
-
-/datum/gear/uniform/grey/eng
- name = "Engineering Utility Uniform"
- path = /obj/item/clothing/under/rank/engineering/engineer/util
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_desc = "Engineering"
- restricted_roles = list("Station Engineer", "Atmospheric Technician", "Chief Engineer")
-
-/datum/gear/uniform/grey/supply
- name = "Supply Utility Uniform"
- path = /obj/item/clothing/under/rank/cargo/util
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_desc = "Supply"
- restricted_roles = list("Shaft Miner", "Cargo Technician", "Quartermaster")
-
-/datum/gear/uniform/grey/com
- name = "Command Utility Uniform"
- path = /obj/item/clothing/under/rank/captain/util
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_desc = "Command"
- restricted_roles = list("Quartermaster", "Research Director", "Chief Medical Officer", "Head Of Security", "Head Of Personnel", "Captain")
-
-/datum/gear/uniform/grey/eng/mech
- name = "Mechanic's Uniform"
- path = /obj/item/clothing/under/rank/engineering/engineer/mechanic
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
-
-/datum/gear/unifrom/grey/med/red
- name = "Red Paramedic's Uniform"
- path = /obj/item/clothing/under/rank/medical/paramedic/red
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
-
-// Trekie things
-//TOS
-/datum/gear/uniform/trekcmdtos
- name = "TOS uniform, cmd"
- path = /obj/item/clothing/under/trek/command
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_desc = "Heads of Staff"
- restricted_roles = list("Head of Security","Captain","Head of Personnel","Chief Engineer","Research Director","Chief Medical Officer","Quartermaster")
-
-/datum/gear/uniform/trekmedscitos
- name = "TOS uniform, med/sci"
- path = /obj/item/clothing/under/trek/medsci
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_desc = "Medical and Science"
- restricted_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Virologist","Paramedic","Geneticist","Research Director","Scientist", "Roboticist")
-
-/datum/gear/uniform/trekengtos
- name = "TOS uniform, ops/sec"
- path = /obj/item/clothing/under/trek/engsec
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_desc = "Engineering, Security, and Cargo"
- restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer","Head of Security","Cargo Technician", "Shaft Miner", "Quartermaster")
-
-//TNG
-/datum/gear/uniform/trekcmdtng
- name = "TNG uniform, cmd"
- path = /obj/item/clothing/under/trek/command/next
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_desc = "Heads of Staff"
- restricted_roles = list("Head of Security","Captain","Head of Personnel","Chief Engineer","Research Director","Chief Medical Officer","Quartermaster")
-
-/datum/gear/uniform/trekmedscitng
- name = "TNG uniform, med/sci"
- path = /obj/item/clothing/under/trek/medsci/next
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_desc = "Medical and Science"
- restricted_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Virologist","Paramedic","Geneticist","Research Director","Scientist", "Roboticist")
-
-/datum/gear/uniform/trekengtng
- name = "TNG uniform, ops/sec"
- path = /obj/item/clothing/under/trek/engsec/next
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_desc = "Engineering, Security, and Cargo"
- restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer","Head of Security","Cargo Technician", "Shaft Miner", "Quartermaster")
-
-//VOY
-/datum/gear/uniform/trekcmdvoy
- name = "VOY uniform, cmd"
- path = /obj/item/clothing/under/trek/command/voy
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_desc = "Heads of Staff"
- restricted_roles = list("Head of Security","Captain","Head of Personnel","Chief Engineer","Research Director","Chief Medical Officer","Quartermaster")
-
-/datum/gear/uniform/trekmedscivoy
- name = "VOY uniform, med/sci"
- path = /obj/item/clothing/under/trek/medsci/voy
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_desc = "Medical and Science"
- restricted_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Virologist","Paramedic","Geneticist","Research Director","Scientist", "Roboticist")
-
-/datum/gear/uniform/trekengvoy
- name = "VOY uniform, ops/sec"
- path = /obj/item/clothing/under/trek/engsec/voy
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_desc = "Engineering, Security, and Cargo"
- restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer","Head of Security","Cargo Technician", "Shaft Miner", "Quartermaster")
-
-//DS9
-/datum/gear/uniform/trekcmdds9
- name = "DS9 uniform, cmd"
- path = /obj/item/clothing/under/trek/command/ds9
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_desc = "Heads of Staff"
- restricted_roles = list("Head of Security","Captain","Head of Personnel","Chief Engineer","Research Director","Chief Medical Officer","Quartermaster")
-
-/datum/gear/uniform/trekmedscids9
- name = "DS9 uniform, med/sci"
- path = /obj/item/clothing/under/trek/medsci/ds9
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_desc = "Medical and Science"
- restricted_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Virologist","Paramedic","Geneticist","Research Director","Scientist", "Roboticist")
-
-/datum/gear/uniform/trekengds9
- name = "DS9 uniform, ops/sec"
- path = /obj/item/clothing/under/trek/engsec/ds9
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_desc = "Engineering, Security, and Cargo"
- restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer","Head of Security","Cargo Technician", "Shaft Miner", "Quartermaster")
-
-//ENT
-/datum/gear/uniform/trekcmdent
- name = "ENT uniform, cmd"
- path = /obj/item/clothing/under/trek/command/ent
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_desc = "Heads of Staff"
- restricted_roles = list("Head of Security","Captain","Head of Personnel","Chief Engineer","Research Director","Chief Medical Officer","Quartermaster")
-
-/datum/gear/uniform/trekmedscient
- name = "ENT uniform, med/sci"
- path = /obj/item/clothing/under/trek/medsci/ent
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_desc = "Medical and Science"
- restricted_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Virologist","Paramedic","Geneticist","Research Director","Scientist", "Roboticist")
-
-/datum/gear/uniform/trekengent
- name = "ENT uniform, ops/sec"
- path = /obj/item/clothing/under/trek/engsec/ent
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_desc = "Engineering, Security, and Cargo"
- restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer","Head of Security","Cargo Technician", "Shaft Miner", "Quartermaster")
-
-//TheMotionPicture
-/datum/gear/uniform/trekfedutil
- name = "TMP uniform"
- path = /obj/item/clothing/under/trek/fedutil
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_desc = "All, barring Service and Civilian"
- restricted_roles = list("Head of Security","Captain","Head of Personnel","Chief Engineer","Research Director","Chief Medical Officer","Quartermaster",
- "Medical Doctor","Chemist","Virologist","Paramedic","Geneticist","Scientist", "Roboticist",
- "Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer",
- "Cargo Technician", "Shaft Miner")
-
-/datum/gear/uniform/trekfedtrainee
- name = "TMP uniform, trainee"
- path = /obj/item/clothing/under/trek/fedutil/trainee
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_roles = list("Assistant", "Janitor", "Cargo Technician")
-
-/datum/gear/uniform/trekfedservice
- name = "TMP uniform, service"
- path = /obj/item/clothing/under/trek/fedutil/service
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_desc = "Service and Civilian, barring Clown, Mime and Lawyer"
- restricted_roles = list("Assistant", "Bartender", "Botanist", "Cook", "Curator", "Janitor", "Chaplain")
-
-//Orvilike
-/datum/gear/uniform/orvcmd
- name = "ORV uniform, cmd"
- path = /obj/item/clothing/under/trek/command/orv
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_desc = "Heads of Staff"
- restricted_roles = list("Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Research Director", "Chief Medical Officer", "Quartermaster")
-
-/datum/gear/uniform/orvcmd_capt
- name = "ORV uniform, capt"
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- path = /obj/item/clothing/under/trek/command/orv/captain
- restricted_roles = list("Captain")
-
-/datum/gear/uniform/orvmedsci
- name = "ORV uniform, med/sci"
- path = /obj/item/clothing/under/trek/medsci/orv
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_desc = "Medical and Science"
- restricted_roles = list("Chief Medical Officer", "Medical Doctor", "Chemist", "Virologist", "Paramedic", "Geneticist", "Research Director", "Scientist", "Roboticist")
-
-/datum/gear/uniform/orvcmd_medsci
- name = "ORV uniform, med/sci, cmd"
- path = /obj/item/clothing/under/trek/command/orv/medsci
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_roles = list("Chief Medical Officer", "Research Director")
-
-/datum/gear/uniform/orvsec
- name = "ORV uniform, sec"
- path = /obj/item/clothing/under/trek/sec/orv
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_desc = "Security"
- restricted_roles = list("Warden", "Detective", "Security Officer", "Head of Security")
-
-/datum/gear/uniform/orveng
- name = "ORV uniform, eng"
- path = /obj/item/clothing/under/trek/eng/orv
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_desc = "Engineering"
- restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer")
-
-/datum/gear/uniform/orvcmd_sec
- name = "ORV uniform, sec, cmd"
- path = /obj/item/clothing/under/trek/command/orv/sec
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_roles = list("Head of Security")
-
-/datum/gear/uniform/orvcmd_eng
- name = "ORV uniform, eng, cmd"
- path = /obj/item/clothing/under/trek/command/orv/eng
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_roles = list("Chief Engineer")
-
-/datum/gear/uniform/orvass
- name = "ORV uniform, assistant"
- path = /obj/item/clothing/under/trek/orv
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_roles = list("Assistant")
-
-/datum/gear/uniform/orvsrv
- name = "ORV uniform, other"
- path = /obj/item/clothing/under/trek/orv/service
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_roles = list("Bartender", "Botanist", "Cook", "Curator", "Janitor", "Chaplain", "Cargo Technician", "Shaft Miner")
- restricted_desc = "Service, Cargo and Civilian, barring Clown, Mime and Lawyer"
-
-//Memes
-/datum/gear/uniform/gear_harnesses
- name = "Gear Harness"
- path = /obj/item/clothing/under/misc/gear_harness
-
-//Christmas
-/*Commenting out Until next Christmas or made automatic
-/datum/gear/uniform/christmasmaler
- name = "Red Masculine Christmas Suit"
- category = SLOT_W_UNIFORM
- path = /obj/item/clothing/under/costume/christmas
-
-/datum/gear/uniform/christmasmaleg
- name = "Green Masculine Christmas Suit"
- category = SLOT_W_UNIFORM
- path = /obj/item/clothing/under/costume/christmas/green
-
-/datum/gear/uniform/christmasfemaler
- name = "Red Feminine Christmas Suit"
- category = SLOT_W_UNIFORM
- path = /obj/item/clothing/under/costume/christmas/croptop
-
-/datum/gear/uniform/christmasfemaleg
- name = "Green Feminine Christmas Suit"
- category = SLOT_W_UNIFORM
- path = /obj/item/clothing/under/costume/christmas/croptop/green
-
-/datum/gear/uniform/pinkstripper
- name = "Pink stripper outfit"
- category = SLOT_W_UNIFORM
- path = /obj/item/clothing/under/misc/stripper
- cost = 3
-*/
-
-/datum/gear/uniform/greenstripper
- name = "Green stripper outfit"
- path = /obj/item/clothing/under/misc/stripper/green
- cost = 3
-
-/datum/gear/uniform/qipao
- name = "Qipao, Black"
- path = /obj/item/clothing/under/costume/qipao
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_DRESSES
- cost = 3
-
-/datum/gear/uniform/qipao/white
- name = "Qipao, White"
- path = /obj/item/clothing/under/costume/qipao/white
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_DRESSES
- cost = 3
-
-/datum/gear/uniform/qipao/red
- name = "Qipao, Red"
- path = /obj/item/clothing/under/costume/qipao/red
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_DRESSES
- cost = 3
-
-/datum/gear/uniform/cheongsam
- name = "Cheongsam, Black"
- path = /obj/item/clothing/under/costume/cheongsam
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_DRESSES
- cost = 3
-
-/datum/gear/uniform/cheongsam/white
- name = "Cheongsam, White"
- path = /obj/item/clothing/under/costume/cheongsam/white
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_DRESSES
- cost = 3
-
-/datum/gear/uniform/cheongsam/red
- name = "Cheongsam, Red"
- path = /obj/item/clothing/under/costume/cheongsam/red
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_DRESSES
- cost = 3
-
-/datum/gear/uniform/dress/black
- name = "Black dress"
- path = /obj/item/clothing/under/misc/black_dress
-
-/datum/gear/uniform/skirt/pinktutu
- name = "Pink tutu"
- path = /obj/item/clothing/under/misc/pinktutu
-
-/datum/gear/uniform/bathrobe
- name = "Bathrobe"
- path = /obj/item/clothing/under/misc/bathrobe
-
-/datum/gear/uniform/kimono
- name = "Kimono"
- path = /obj/item/clothing/under/costume/kimono
-
-/datum/gear/uniform/kimono/black
- name = "Black kimono"
- path = /obj/item/clothing/under/costume/kimono/black
-
-/datum/gear/uniform/kimono/kamishimo
- name = "Kamishimo"
- path = /obj/item/clothing/under/costume/kimono/kamishimo
-
-/datum/gear/uniform/kimono/fancy
- name = "Fancy kimono"
- path = /obj/item/clothing/under/costume/kimono/fancy
-
-/datum/gear/uniform/kimono/sakura
- name = "Sakura kimono"
- path = /obj/item/clothing/under/costume/kimono/sakura
-
-/datum/gear/uniform/ctlong
- name = "cargo tech's jumpsuit (long pants)"
- path = /obj/item/clothing/under/rank/cargo/tech/long
- subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
- restricted_roles = list("Cargo Technician")
diff --git a/modular_citadel/code/modules/client/loadout/unlockable.dm b/modular_citadel/code/modules/client/loadout/unlockable.dm
deleted file mode 100644
index 67e0c06d8c0..00000000000
--- a/modular_citadel/code/modules/client/loadout/unlockable.dm
+++ /dev/null
@@ -1,30 +0,0 @@
-/datum/gear/unlockable
- category = LOADOUT_CATEGORY_UNLOCKABLE
- slot = SLOT_NECK
-
- var/progress_required //what does our progress need to be to unlock it
- var/progress_key //what is the key used to retrieve existing progress for this unlockable
-
-/datum/gear/unlockable/janitor
- name = "Janitor Bedsheet"
- description = "Clean 100 messes with a mop to unlock this. It has a warning sign on!"
- path = /obj/item/bedsheet/unlockable/janitor
-
- progress_required = 100
- progress_key = "janitor"
-
-/datum/gear/unlockable/cook
- name = "Cook Bedsheet"
- description = "Cook 250 items using the microwave to unlock this. It has a microwave on!"
- path = /obj/item/bedsheet/unlockable/cook
-
- progress_required = 250
- progress_key = "cook"
-
-/datum/gear/unlockable/miner
- name = "Miner Bedsheet"
- description = "Redeem a total of 100,000 miner points to unlock this. It's made out of goliath hide!"
- path = /obj/item/bedsheet/unlockable/miner
-
- progress_required = 100000
- progress_key = "miner"
diff --git a/modular_citadel/code/modules/client/preferences_savefile.dm b/modular_citadel/code/modules/client/preferences_savefile.dm
deleted file mode 100644
index f78b63b1896..00000000000
--- a/modular_citadel/code/modules/client/preferences_savefile.dm
+++ /dev/null
@@ -1,78 +0,0 @@
-/datum/preferences/proc/cit_character_pref_load(savefile/S)
- //ipcs
- S["feature_ipc_screen"] >> features["ipc_screen"]
- S["feature_ipc_antenna"] >> features["ipc_antenna"]
-
- features["ipc_screen"] = sanitize_inlist(features["ipc_screen"], GLOB.ipc_screens_list)
- features["ipc_antenna"] = sanitize_inlist(features["ipc_antenna"], GLOB.ipc_antennas_list)
- //Citadel
- features["flavor_text"] = sanitize_text(features["flavor_text"], initial(features["flavor_text"]))
- if(!features["mcolor2"] || features["mcolor"] == "#000000")
- features["mcolor2"] = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F")
- if(!features["mcolor3"] || features["mcolor"] == "#000000")
- features["mcolor3"] = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F")
- features["mcolor2"] = sanitize_hexcolor(features["mcolor2"], 6, FALSE)
- features["mcolor3"] = sanitize_hexcolor(features["mcolor3"], 6, FALSE)
-
- // SKYRAT CHANGE START
- S["enable_personal_chat_color"] >> enable_personal_chat_color
- S["personal_chat_color"] >> personal_chat_color
-
- S["alt_titles_preferences"] >> alt_titles_preferences
- alt_titles_preferences = SANITIZE_LIST(alt_titles_preferences)
- if(SSjob)
- for(var/datum/job/job in sortList(SSjob.occupations, /proc/cmp_job_display_asc))
- if(alt_titles_preferences[job.title])
- if(!(alt_titles_preferences[job.title] in job.alt_titles))
- alt_titles_preferences.Remove(job.title)
-
- erppref = sanitize_text(S["erp_pref"], "Ask")
- if(!length(erppref)) erppref = "Ask"
- nonconpref = sanitize_text(S["noncon_pref"], "Ask")
- if(!length(nonconpref)) nonconpref = "Ask"
- vorepref = sanitize_text(S["vore_pref"], "Ask")
- if(!length(vorepref)) vorepref = "Ask"
- extremepref = sanitize_text(S["extremepref"], "No") //god has forsaken me
- if(!length(extremepref))
- extremepref = "No"
- extremeharm = sanitize_text(S["extremeharm"], "No")
- if(!length(extremeharm) || (extremepref = "No"))
- extremeharm = "No"
- enable_personal_chat_color = sanitize_integer(enable_personal_chat_color, 0, 1, initial(enable_personal_chat_color))
- personal_chat_color = sanitize_hexcolor(personal_chat_color, 6, 1, "#FFFFFF")
- lust_tolerance = sanitize_integer(lust_tolerance, 75, 200, initial(lust_tolerance))
- sexual_potency = sanitize_integer(sexual_potency, 10, 25, initial(sexual_potency))
-
-/datum/preferences/proc/cit_character_pref_save(savefile/S)
- //ipcs
- WRITE_FILE(S["feature_ipc_screen"], features["ipc_screen"])
- WRITE_FILE(S["feature_ipc_antenna"], features["ipc_antenna"])
- //Citadel
- WRITE_FILE(S["feature_genitals_use_skintone"], features["genitals_use_skintone"])
- WRITE_FILE(S["feature_mcolor2"], features["mcolor2"])
- WRITE_FILE(S["feature_mcolor3"], features["mcolor3"])
- WRITE_FILE(S["feature_mam_body_markings"], safe_json_encode(features["mam_body_markings"]))
- WRITE_FILE(S["feature_mam_tail"], features["mam_tail"])
- WRITE_FILE(S["feature_mam_ears"], features["mam_ears"])
- WRITE_FILE(S["feature_mam_tail_animated"], features["mam_tail_animated"])
- WRITE_FILE(S["feature_taur"], features["taur"])
- WRITE_FILE(S["feature_mam_snouts"], features["mam_snouts"])
- //Xeno features
- WRITE_FILE(S["feature_xeno_tail"], features["xenotail"])
- WRITE_FILE(S["feature_xeno_dors"], features["xenodorsal"])
- WRITE_FILE(S["feature_xeno_head"], features["xenohead"])
- //flavor text
- WRITE_FILE(S["feature_flavor_text"], features["flavor_text"])
- WRITE_FILE(S["silicon_feature_flavor_text"], features["silicon_flavor_text"])
-
- //sandstorm stuff
- WRITE_FILE(S["erp_pref"], erppref)
- WRITE_FILE(S["noncon_pref"], nonconpref)
- WRITE_FILE(S["vore_pref"], vorepref)
- WRITE_FILE(S["extremepref"], extremepref)
- WRITE_FILE(S["extremeharm"], extremeharm)
- WRITE_FILE(S["enable_personal_chat_color"], enable_personal_chat_color)
- WRITE_FILE(S["personal_chat_color"], personal_chat_color)
- WRITE_FILE(S["alt_titles_preferences"], alt_titles_preferences)
- WRITE_FILE(S["lust_tolerance"], lust_tolerance)
- WRITE_FILE(S["sexual_potency"], sexual_potency)
diff --git a/modular_citadel/code/modules/client/preferences_toggles.dm b/modular_citadel/code/modules/client/preferences_toggles.dm
deleted file mode 100644
index 350c19ab64a..00000000000
--- a/modular_citadel/code/modules/client/preferences_toggles.dm
+++ /dev/null
@@ -1,36 +0,0 @@
-TOGGLE_CHECKBOX(/datum/verbs/menu/Settings/Sound, toggleeatingnoise)()
- set name = "Toggle Eating Noises"
- set category = "Preferences"
- set desc = "Hear Eating noises"
- usr.client.prefs.cit_toggles ^= EATING_NOISES
- usr.client.prefs.save_preferences()
- usr.stop_sound_channel(CHANNEL_PRED)
- to_chat(usr, "You will [(usr.client.prefs.cit_toggles & EATING_NOISES) ? "now" : "no longer"] hear eating noises.")
-/datum/verbs/menu/Settings/Sound/toggleeatingnoise/Get_checked(client/C)
- return C.prefs.cit_toggles & EATING_NOISES
-
-
-TOGGLE_CHECKBOX(/datum/verbs/menu/Settings/Sound, toggledigestionnoise)()
- set name = "Toggle Digestion Noises"
- set category = "Preferences"
- set desc = "Hear digestive noises"
- usr.client.prefs.cit_toggles ^= DIGESTION_NOISES
- usr.client.prefs.save_preferences()
- usr.stop_sound_channel(CHANNEL_DIGEST)
- to_chat(usr, "You will [(usr.client.prefs.cit_toggles & DIGESTION_NOISES) ? "now" : "no longer"] hear digestion noises.")
-/datum/verbs/menu/Settings/Sound/toggledigestionnoise/Get_checked(client/C)
- return C.prefs.cit_toggles & DIGESTION_NOISES
-
-TOGGLE_CHECKBOX(/datum/verbs/menu/Settings/Sound, togglehoundsleeper)()
- set name = "Toggle Voracious Hound Sleepers"
- set category = "Preferences"
- set desc = "Toggles Voracious MediHound Sleepers"
- usr.client.prefs.cit_toggles ^= MEDIHOUND_SLEEPER
- usr.client.prefs.save_preferences()
- if(usr.client.prefs.cit_toggles & MEDIHOUND_SLEEPER)
- to_chat(usr, "You have opted in for voracious medihound sleepers.")
- else
- to_chat(usr, "Medihound sleepers will no longer be voracious when you're involved.")
- SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle MediHound Sleeper", "[usr.client.prefs.cit_toggles & MEDIHOUND_SLEEPER ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
-/datum/verbs/menu/Settings/Sound/togglehoundsleeper/Get_checked(client/C)
- return C.prefs.cit_toggles & MEDIHOUND_SLEEPER
diff --git a/modular_citadel/code/modules/client/verbs/who.dm b/modular_citadel/code/modules/client/verbs/who.dm
deleted file mode 100644
index 7640595e18f..00000000000
--- a/modular_citadel/code/modules/client/verbs/who.dm
+++ /dev/null
@@ -1,131 +0,0 @@
-/client/verb/mentorwho()
- set category = "Mentor"
- set name = "Mentorwho"
- var/msg = "Current Mentors:\n"
- for(var/X in GLOB.mentors)
- var/client/C = X
- if(!C)
- GLOB.mentors -= C
- continue // weird runtime that happens randomly
- var/suffix = ""
- if(holder)
- if(isobserver(C.mob))
- suffix += " - Observing"
- else if(istype(C.mob,/mob/dead/new_player))
- suffix += " - Lobby"
- else
- suffix += " - Playing"
-
- if(C.is_afk())
- suffix += " (AFK)"
- msg += "\t[C][suffix]\n"
- to_chat(src, msg)
-
-/client/verb/who()
- set name = "Who"
- set category = "OOC"
-
- var/msg = ""
-
- var/list/Lines = list()
- var/list/assembled = list()
- var/admin_mode = check_rights_for(src, R_ADMIN) && isobserver(mob)
- if(admin_mode)
- log_admin("[key_name(usr)] checked advanced who in-round")
- if(length(GLOB.admins))
- Lines += "Admins:"
- for(var/X in GLOB.admins)
- var/client/C = X
- if(C && C.holder && !C.holder.fakekey)
- assembled += "\t [C.key][admin_mode? "[show_admin_info(C)]":""] ([round(C.avgping, 1)]ms)"
- Lines += sortList(assembled)
- assembled.len = 0
- if(length(GLOB.mentors))
- Lines += "Mentors:"
- for(var/X in GLOB.mentors)
- var/client/C = X
- if(C && (!C.holder || (C.holder && !C.holder.fakekey))) //>using stuff this complex instead of just using if/else lmao
- assembled += "\t [C.key][admin_mode? "[show_admin_info(C)]":""] ([round(C.avgping, 1)]ms)"
- Lines += sortList(assembled)
- assembled.len = 0
- Lines += "Players:"
- for(var/X in sortList(GLOB.clients))
- var/client/C = X
- if(!C)
- continue
- var/key = C.key
- if(C.holder && C.holder.fakekey)
- key = C.holder.fakekey
- assembled += "\t [key][admin_mode? "[show_admin_info(C)]":""] ([round(C.avgping, 1)]ms)"
- Lines += sortList(assembled)
-
- for(var/line in Lines)
- msg += "[line]\n"
-
- msg += "Total Players: [length(GLOB.clients)]"
- to_chat(src, msg)
-
-/client/proc/show_admin_info(var/client/C)
- if(!C)
- return ""
-
- var/entry = ""
- if(C.holder && C.holder.fakekey)
- entry += " (as [C.holder.fakekey])"
- if (isnewplayer(C.mob))
- entry += " - In Lobby"
- else
- entry += " - Playing as [C.mob.real_name]"
- switch(C.mob.stat)
- if(UNCONSCIOUS)
- entry += " - Unconscious"
- if(DEAD)
- if(isobserver(C.mob))
- var/mob/dead/observer/O = C.mob
- if(O.started_as_observer)
- entry += " - Observing"
- else
- entry += " - DEAD"
- else
- entry += " - DEAD"
- if(is_special_character(C.mob))
- entry += " - Antagonist"
- entry += " (?)"
- return entry
-
-/client/verb/adminwho()
- set category = "Admin"
- set name = "Adminwho"
-
- var/msg = "Current Admins:\n"
- if(check_rights_for(src, R_ADMIN))
- for(var/X in GLOB.admins)
- var/client/C = X
- if(!check_rights_for(C, R_ADMIN))
- continue
- msg += "\t[C] is a [C.holder.rank]"
-
- if(C.holder.fakekey)
- msg += " (as [C.holder.fakekey])"
-
- if(isobserver(C.mob))
- msg += " - Observing"
- else if(isnewplayer(C.mob))
- msg += " - Lobby"
- else
- msg += " - Playing"
-
- if(C.is_afk())
- msg += " (AFK)"
- msg += "\n"
- else
- for(var/X in GLOB.admins)
- var/client/C = X
- if(!check_rights_for(C, R_ADMIN))
- continue
- if(C.is_afk())
- continue //Don't show afk admins to adminwho
- if(!C.holder.fakekey)
- msg += "\t[C] is a [C.holder.rank]\n"
- msg += "Adminhelps are also sent to Discord. If no admins are available in game adminhelp anyways and an admin on Discord will see it and respond."
- to_chat(src, msg)
diff --git a/modular_citadel/code/modules/clothing/neck.dm b/modular_citadel/code/modules/clothing/neck.dm
deleted file mode 100644
index f57e2ae5301..00000000000
--- a/modular_citadel/code/modules/clothing/neck.dm
+++ /dev/null
@@ -1,23 +0,0 @@
-/datum/action/item_action/zanderlocket
- name = "Activate the locket"
-
-/obj/item/clothing/neck/undertale
- name = "Sylphaen Heart Locket"
- desc = "A heart shaped locket...The name: 'Zander Sylphaen is inscribed on the front. Something about this necklace fills you with determination."
- icon = 'modular_citadel/icons/obj/clothing/cit_neck.dmi'
- item_state = "undertale"
- icon_state = "undertale"
- mob_overlay_icon = 'modular_citadel/icons/mob/clothing/necks.dmi'
- resistance_flags = FIRE_PROOF
- actions_types = list(/datum/action/item_action/zanderlocket)
- var/toggled = FALSE
- var/obj/effect/heart/heart
-
-/datum/action/item_action/zanderlocket/Trigger()
- new/obj/effect/temp_visual/souldeath(owner.loc, owner)
- playsound(owner, 'sound/misc/souldeath.ogg', 100, FALSE)
-
-
-/obj/item/clothing/neck/undertale/Initialize()
- ..()
- AddComponent(/datum/component/souldeath/neck)
diff --git a/modular_citadel/code/modules/clothing/suits/suits.dm b/modular_citadel/code/modules/clothing/suits/suits.dm
deleted file mode 100644
index 579476db04f..00000000000
--- a/modular_citadel/code/modules/clothing/suits/suits.dm
+++ /dev/null
@@ -1,30 +0,0 @@
-/*/////////////////////////////////////////////////////////////////////////////////
-/////// ///////
-/////// Cit's exclusive suits, armor, etc. go here ///////
-/////// ///////
-*//////////////////////////////////////////////////////////////////////////////////
-
-
-/obj/item/clothing/suit/armor/hos/trenchcoat/cloak
- name = "armored trenchcloak"
- desc = "A trenchcoat enchanced with a special lightweight kevlar. This one appears to be designed to be draped over one's shoulders rather than worn normally.."
- mob_overlay_icon = 'modular_citadel/icons/mob/citadel/suit.dmi'
- icon_state = "hostrench"
- item_state = "hostrench"
- mutantrace_variation = STYLE_DIGITIGRADE
- body_parts_covered = CHEST|ARMS|LEGS
-
-/obj/item/clothing/suit/hooded/cloak/david
- name = "red cloak"
- icon_state = "goliath_cloak"
- desc = "Ever wanted to look like a badass without ANY effort? Try this nanotrasen brand red cloak, perfect for kids"
- hoodtype = /obj/item/clothing/head/hooded/cloakhood/david
- body_parts_covered = CHEST|GROIN|ARMS
- mutantrace_variation = STYLE_DIGITIGRADE
-
-/obj/item/clothing/head/hooded/cloakhood/david
- name = "red cloak hood"
- icon_state = "golhood"
- desc = "conceal your face in shame with this nanotrasen brand hood"
- flags_inv = HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR
- mutantrace_variation = NONE
diff --git a/modular_citadel/code/modules/clothing/trek.dm b/modular_citadel/code/modules/clothing/trek.dm
deleted file mode 100644
index cf422053c74..00000000000
--- a/modular_citadel/code/modules/clothing/trek.dm
+++ /dev/null
@@ -1,185 +0,0 @@
-/*/////////////////////////////////////////////////////////////////////////////////
-/////// ///////
-/////// Star Trek Stuffs ///////
-/////// ///////
-*//////////////////////////////////////////////////////////////////////////////////
-// <3 Nienhaus && Joan.
-// I made the Voy and DS9 stuff tho. - Poojy
-// Armor lists for even Heads of Staff is Nulled out do round start armor as well most armor going onto the suit itself rather then a armor slot - Trilby
-///////////////////////////////////////////////////////////////////////////////////
-
-//DS9
-
-/obj/item/clothing/suit/storage/trek/ds9
- name = "Padded Overcoat"
- desc = "The overcoat worn by all officers of the 2380s."
- icon = 'modular_citadel/icons/obj/clothing/trek_item_icon.dmi'
- icon_state = "trek_ds9_coat"
- mob_overlay_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi'
- item_state = "trek_ds9_coat"
- body_parts_covered = CHEST|GROIN|ARMS
- mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
- permeability_coefficient = 0.50
- allowed = list(
- /obj/item/flashlight, /obj/item/analyzer,
- /obj/item/radio, /obj/item/tank/internals/emergency_oxygen,
- /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer,/obj/item/reagent_containers/syringe,
- /obj/item/reagent_containers/glass/bottle/vial,/obj/item/reagent_containers/glass/beaker,
- /obj/item/reagent_containers/pill,/obj/item/storage/pill_bottle, /obj/item/restraints/handcuffs,/obj/item/hypospray
- )
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
-
-/obj/item/clothing/suit/storage/trek/ds9/admiral // Only for adminuz
- name = "Admiral Overcoat"
- desc = "Admirality specialty coat to keep flag officers fashionable and protected."
- icon_state = "trek_ds9_coat_adm"
- item_state = "trek_ds9_coat_adm"
- permeability_coefficient = 0.01
- armor = list("melee" = 50, "bullet" = 50, "laser" = 50,"energy" = 50, "bomb" = 50, "bio" = 50, "rad" = 50, "fire" = 50, "acid" = 50)
-
-//MODERN ish Joan sqrl sprites. I think
-
-//For general use
-/obj/item/clothing/suit/storage/fluff/fedcoat
- name = "Federation Uniform Jacket"
- desc = "A uniform jacket from the United Federation. Set phasers to awesome."
- icon = 'modular_citadel/icons/obj/clothing/trek_item_icon.dmi'
- mob_overlay_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi'
- icon_state = "fedcoat"
- item_state = "fedcoat"
- mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
- blood_overlay_type = "coat"
- body_parts_covered = CHEST|GROIN|ARMS
- allowed = list(
- /obj/item/tank/internals/emergency_oxygen,
- /obj/item/flashlight,
- /obj/item/analyzer,
- /obj/item/radio,
- /obj/item/gun,
- /obj/item/melee/baton,
- /obj/item/restraints/handcuffs,
- /obj/item/reagent_containers/hypospray,
- /obj/item/hypospray,
- /obj/item/healthanalyzer,
- /obj/item/reagent_containers/syringe,
- /obj/item/reagent_containers/glass/bottle/vial,
- /obj/item/reagent_containers/glass/beaker,
- /obj/item/storage/pill_bottle,
- /obj/item/taperecorder)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
- var/unbuttoned = FALSE
-
-/obj/item/clothing/suit/storage/fluff/fedcoat/verb/toggle()
- set name = "Toggle coat buttons"
- set category = "Object"
- set src in usr
-
- var/mob/living/L = usr
- if(!istype(L) || !CHECK_MOBILITY(L, MOBILITY_USE))
- return FALSE
-
- switch(unbuttoned)
- if(FALSE)
- icon_state = "[initial(icon_state)]_open"
- item_state = "[initial(item_state)]_open"
- unbuttoned = TRUE
- to_chat(usr,"You unbutton the coat.")
- if(TRUE)
- icon_state = "[initial(icon_state)]"
- item_state = "[initial(item_state)]"
- unbuttoned = FALSE
- to_chat(usr,"You button up the coat.")
- usr.update_inv_wear_suit()
-
-//Variants
-/obj/item/clothing/suit/storage/fluff/fedcoat/medsci
- icon_state = "fedblue"
- item_state = "fedblue"
-
-/obj/item/clothing/suit/storage/fluff/fedcoat/eng
- icon_state = "fedeng"
- item_state = "fedeng"
-
-/obj/item/clothing/suit/storage/fluff/fedcoat/capt
- icon_state = "fedcapt"
- item_state = "fedcapt"
-
-//"modern" ones for fancy
-
-/obj/item/clothing/suit/storage/fluff/modernfedcoat
- name = "Modern Federation Uniform Jacket"
- desc = "A modern uniform jacket from the United Federation."
- icon = 'modular_citadel/icons/obj/clothing/trek_item_icon.dmi'
- mob_overlay_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi'
- icon_state = "fedmodern"
- item_state = "fedmodern"
- mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
- body_parts_covered = CHEST|GROIN|ARMS
- allowed = list(
- /obj/item/flashlight, /obj/item/analyzer,
- /obj/item/radio, /obj/item/tank/internals/emergency_oxygen,
- /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer,/obj/item/reagent_containers/syringe,
- /obj/item/reagent_containers/glass/bottle/vial,/obj/item/reagent_containers/glass/beaker,
- /obj/item/reagent_containers/pill,/obj/item/storage/pill_bottle, /obj/item/restraints/handcuffs,/obj/item/hypospray
- )
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
-
-//Variants
-/obj/item/clothing/suit/storage/fluff/modernfedcoat/medsci
- icon_state = "fedmodernblue"
- item_state = "fedmodernblue"
-
-/obj/item/clothing/suit/storage/fluff/modernfedcoat/eng
- icon_state = "fedmoderneng"
- item_state = "fedmoderneng"
-
-/obj/item/clothing/suit/storage/fluff/modernfedcoat/sec
- icon_state = "fedmodernsec"
- item_state = "fedmodernsec"
-
-/obj/item/clothing/head/caphat/formal/fedcover
- name = "Federation Officer's Cap"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
- desc = "An officer's cap that demands discipline from the one who wears it."
- icon = 'modular_citadel/icons/obj/clothing/trek_item_icon.dmi'
- icon_state = "fedcapofficer"
- mob_overlay_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi'
- item_state = "fedcapofficer"
-
-//Variants
-/obj/item/clothing/head/caphat/formal/fedcover/medsci
- icon_state = "fedcapsci"
- item_state = "fedcapsci"
-
-/obj/item/clothing/head/caphat/formal/fedcover/eng
- icon_state = "fedcapeng"
- item_state = "fedcapeng"
-
-/obj/item/clothing/head/caphat/formal/fedcover/sec
- icon_state = "fedcapsec"
- item_state = "fedcapsec"
-
-/obj/item/clothing/head/caphat/formal/fedcover/black
- icon_state = "fedcapblack"
- item_state = "fedcapblack"
-
-//orvilike caps
-/obj/item/clothing/head/kepi/orvi
- name = "\improper Federation kepi"
- desc = "A visored cap worn by all officers since 2550s."
- icon_state = "kepi_ass"
-
-/obj/item/clothing/head/kepi/orvi/command
- icon_state = "kepi_com"
-
-/obj/item/clothing/head/kepi/orvi/sec
- icon_state = "kepi_sec"
-
-/obj/item/clothing/head/kepi/orvi/eng
- icon_state = "kepi_eng"
-
-/obj/item/clothing/head/kepi/orvi/medsci
- icon_state = "kepi_medsci"
-
-/obj/item/clothing/head/kepi/orvi/service
- icon_state = "kepi_srv"
diff --git a/modular_citadel/code/modules/custom_loadout/custom_items.dm b/modular_citadel/code/modules/custom_loadout/custom_items.dm
deleted file mode 100644
index cb1b9728af8..00000000000
--- a/modular_citadel/code/modules/custom_loadout/custom_items.dm
+++ /dev/null
@@ -1,675 +0,0 @@
-//For custom items.
-
-// Unless there's a digitigrade version make sure you add mutantrace_variation = NONE to all clothing/under and shoes - Pooj
-// Digitigrade stuff is uniform_digi.dmi and digishoes.dmi in icons/mob
-
-/obj/item/clothing/neck/cloak/inferno
- name = "Kiara's Cloak"
- desc = "The design on this seems a little too familiar."
- icon = 'icons/obj/custom.dmi'
- icon_state = "infcloak"
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- item_state = "infcloak"
- w_class = WEIGHT_CLASS_SMALL
- body_parts_covered = CHEST|GROIN|LEGS|ARMS
-
-/obj/item/clothing/neck/petcollar/inferno
- name = "Kiara's Collar"
- desc = "A soft black collar that seems to stretch to fit whoever wears it."
- icon = 'icons/obj/custom.dmi'
- icon_state = "infcollar"
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- item_state = "infcollar"
- tagname = null
-
-/obj/item/clothing/accessory/medal/steele
- name = "Insignia Of Steele"
- desc = "An intricate pendant given to those who help a key member of the Steele Corporation."
- icon = 'icons/obj/custom.dmi'
- icon_state = "steele"
- medaltype = "medal-silver"
-
-/obj/item/toy/darksabre
- name = "Kiara's Sabre"
- desc = "This blade looks as dangerous as its owner."
- icon = 'icons/obj/custom.dmi'
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- icon_state = "darksabre"
- item_state = "darksabre"
- lefthand_file = 'modular_citadel/icons/mob/inhands/stunsword_left.dmi'
- righthand_file = 'modular_citadel/icons/mob/inhands/stunsword_right.dmi'
- attack_verb = list("attacked", "struck", "hit")
-
-/obj/item/toy/darksabre/get_belt_overlay()
- return mutable_appearance('icons/obj/custom.dmi', "darksheath-darksabre")
-
-/obj/item/toy/darksabre/get_worn_belt_overlay(icon_file)
- return mutable_appearance(icon_file, "darksheath-darksabre")
-
-/obj/item/storage/belt/sabre/darksabre
- name = "Ornate Sheathe"
- desc = "An ornate and rather sinister looking sabre sheathe."
- icon = 'icons/obj/custom.dmi'
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- icon_state = "darksheath"
- item_state = "darksheath"
- fitting_swords = list(/obj/item/toy/darksabre)
- starting_sword = /obj/item/toy/darksabre
-
-/obj/item/clothing/suit/armor/vest/darkcarapace
- name = "Dark Armor"
- desc = "A dark, non-functional piece of armor sporting a red and black finish."
- icon = 'icons/obj/custom.dmi'
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- icon_state = "darkcarapace"
- item_state = "darkcarapace"
- blood_overlay_type = "armor"
- dog_fashion = /datum/dog_fashion/back
- mutantrace_variation = NONE
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
-
-
-/obj/item/lighter/gold
- name = "\improper Engraved Zippo"
- desc = "A shiny and relatively expensive zippo lighter. There's a small etched in verse on the bottom that reads, 'No Gods, No Masters, Only Man.'"
- icon = 'icons/obj/custom.dmi'
- icon_state = "gold_zippo"
- item_state = "gold_zippo"
- w_class = WEIGHT_CLASS_TINY
- flags_1 = CONDUCT_1
- slot_flags = SLOT_BELT
- heat = 1500
- resistance_flags = FIRE_PROOF
- light_color = LIGHT_COLOR_FIRE
-
-/obj/item/clothing/neck/scarf/zomb
- name = "A special scarf"
- icon = 'icons/obj/custom.dmi'
- icon_state = "zombscarf"
- desc = "A fashionable collar"
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- dog_fashion = /datum/dog_fashion/head
-
-/obj/item/clothing/suit/toggle/labcoat/mad/red
- name = "\improper The Mad's labcoat"
- desc = "An oddly special looking coat."
- icon = 'icons/obj/custom.dmi'
- icon_state = "labred"
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- item_state = "labred"
- mutantrace_variation = NONE
-
-/obj/item/clothing/suit/toggle/labcoat/labredblack
- name = "Black and Red Coat"
- desc = "An oddly special looking coat."
- icon = 'icons/obj/custom.dmi'
- icon_state = "labredblack"
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- item_state = "labredblack"
- mutantrace_variation = NONE
-
-/obj/item/toy/plush/carrot
- name = "carrot plushie"
- desc = "While a normal carrot would be good for your eyes, this one seems a bit more for hugging then eating."
- icon = 'icons/obj/hydroponics/harvest.dmi'
- icon_state = "carrot"
- item_state = "carrot"
- w_class = WEIGHT_CLASS_SMALL
- attack_verb = list("slapped")
- resistance_flags = FLAMMABLE
- squeak_override = list('sound/items/bikehorn.ogg'= 1)
-
-/obj/item/clothing/neck/cloak/carrot
- name = "carrot cloak"
- desc = "A cloak in the shape and color of a carrot!"
- icon = 'icons/obj/custom.dmi'
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- icon_state = "carrotcloak"
- item_state = "carrotcloak"
- w_class = WEIGHT_CLASS_SMALL
- body_parts_covered = CHEST|GROIN|LEGS|ARMS
-
-/obj/item/storage/backpack/satchel/carrot
- name = "carrot satchel"
- desc = "An satchel that is designed to look like an carrot"
- icon = 'icons/obj/custom.dmi'
- icon_state = "satchel_carrot"
- item_state = "satchel_carrot"
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
-
-/obj/item/storage/backpack/satchel/carrot/Initialize()
- . = ..()
- AddComponent(/datum/component/squeak, list('sound/items/toysqueak1.ogg'=1), 50)
-
-/obj/item/toy/plush/tree
- name = "christmass tree plushie"
- desc = "A festive plush that squeeks when you squeeze it!"
- icon = 'icons/obj/custom.dmi'
- icon_state = "pine_c"
- item_state = "pine_c"
- w_class = WEIGHT_CLASS_SMALL
- attack_verb = list("slapped")
- resistance_flags = FLAMMABLE
- squeak_override = list('sound/misc/server-ready.ogg'= 1)
-
-/obj/item/clothing/neck/cloak/festive
- name = "Celebratory Cloak of Morozko"
- desc = " It probably will protect from snow, charcoal or elves."
- icon = 'icons/obj/custom.dmi'
- icon_state = "festive"
- item_state = "festive"
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- w_class = WEIGHT_CLASS_SMALL
- body_parts_covered = CHEST|GROIN|LEGS|ARMS
-
-/obj/item/clothing/mask/luchador/zigfie
- name = "Alboroto Rosa mask"
- icon = 'icons/obj/custom.dmi'
- icon_state = "lucharzigfie"
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- item_state = "lucharzigfie"
-
-/obj/item/clothing/head/hardhat/reindeer/fluff
- name = "novelty reindeer hat"
- desc = "Some fake antlers and a very fake red nose - Sponsored by PWR Game(tm)"
- icon_state = "hardhat0_reindeer"
- item_state = "hardhat0_reindeer"
- hat_type = "reindeer"
- flags_inv = 0
- armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0)
- brightness_on = 0 //luminosity when on
- dynamic_hair_suffix = ""
-
-/obj/item/clothing/head/santa/fluff
- name = "santa's hat"
- desc = "On the first day of christmas my employer gave to me! - From Vlad with Salad"
- icon_state = "santahatnorm"
- item_state = "that"
- dog_fashion = /datum/dog_fashion/head/santa
-
-//Removed all of the space flags from this suit so it utilizes nothing special.
-/obj/item/clothing/suit/space/santa/fluff
- name = "Santa's suit"
- desc = "Festive!"
- icon_state = "santa"
- item_state = "santa"
- slowdown = 0
-
-/obj/item/clothing/mask/hheart
- name = "The Hollow heart"
- desc = "Sometimes things are too much to hide."
- icon = 'icons/obj/custom.dmi'
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- icon_state = "hheart"
- item_state = "hheart"
- flags_inv = HIDEFACE|HIDEFACIALHAIR
-
-/obj/item/clothing/suit/trenchcoat/green
- name = "Reece's Great Coat"
- desc = "You would swear this was in your nightmares after eating too many veggies."
- icon = 'icons/obj/custom.dmi'
- icon_state = "hos-g"
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- item_state = "hos-g"
- body_parts_covered = CHEST|GROIN|ARMS|LEGS
- mutantrace_variation = NONE
-
-/obj/item/reagent_containers/food/drinks/flask/russian
- name = "russian flask"
- desc = "Every good russian spaceman knows it's a good idea to bring along a couple of pints of whiskey wherever they go."
- icon = 'icons/obj/custom.dmi'
- icon_state = "russianflask"
- volume = 60
-
-/obj/item/clothing/mask/gas/stalker
- name = "S.T.A.L.K.E.R. mask"
- desc = "Smells like reactor four."
- icon = 'icons/obj/custom.dmi'
- item_state = "stalker"
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- icon_state = "stalker"
-
-/obj/item/clothing/mask/gas/military
- name = "Military Gas Mask"
- desc = "A rare PMC gas mask, one of the very expensive kinds. The inside looks comfortable to wear for a while. The blood red eyes however seem to stare back at you. Creepy."
- icon = 'icons/obj/custom.dmi'
- item_state = "mgas"
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- icon_state = "mgas"
-
-/obj/item/reagent_containers/food/drinks/flask/steel
- name = "The End"
- desc = "A plain steel flask, sealed by lock and key. The front is inscribed with The End."
- icon = 'icons/obj/custom.dmi'
- icon_state = "steelflask"
- volume = 60
-
-/obj/item/clothing/neck/petcollar/stripe //don't really wear this though please c'mon seriously guys
- name = "collar"
- desc = "It's a collar..."
- icon = 'icons/obj/custom.dmi'
- icon_state = "petcollar-stripe"
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- item_state = "petcollar-stripe"
- tagname = null
-
-/obj/item/clothing/under/costume/singer/yellow/custom
- name = "bluish performer's outfit"
- desc = "Just looking at this makes you want to sing."
- icon = 'icons/obj/custom.dmi'
- icon_state = "singer"
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- item_state = "singer"
- fitted = NO_FEMALE_UNIFORM
- alternate_worn_layer = ABOVE_SHOES_LAYER
- can_adjust = 0
- mutantrace_variation = NONE
-
-/obj/item/clothing/shoes/sneakers/pink
- icon = 'icons/obj/custom.dmi'
- icon_state = "pink"
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- item_state = "pink"
- mutantrace_variation = NONE
-
-/obj/item/clothing/neck/tie/bloodred
- name = "Blood Red Tie"
- desc = "A neosilk clip-on tie. This one has a black S on the tipping and looks rather unique."
- icon = 'icons/obj/custom.dmi'
- icon_state = "bloodredtie"
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
-
-/obj/item/clothing/suit/puffydress
- name = "Puffy Dress"
- desc = "A formal puffy black and red Victorian dress."
- icon = 'icons/obj/custom.dmi'
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- icon_state = "puffydress"
- item_state = "puffydress"
- body_parts_covered = CHEST|GROIN|LEGS
- mutantrace_variation = NONE
-
-/obj/item/clothing/suit/vermillion
- name = "vermillion clothing"
- desc = "Some clothing."
- icon_state = "vermillion"
- item_state = "vermillion"
- body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS
- icon = 'icons/obj/custom.dmi'
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- mutantrace_variation = NONE
-
-/obj/item/clothing/under/sweater/black/naomi
- name = "worn black sweater"
- mutantrace_variation = NONE
- desc = "A well-loved sweater, showing signs of several cleanings and re-stitchings. And a few stains. Is that cat fur?"
-
-/obj/item/clothing/neck/petcollar/naomi
- name = "worn pet collar"
- desc = "A pet collar that looks well used."
-
-/obj/item/clothing/neck/cloak/green
- name = "Generic Green Cloak"
- desc = "This cloak doesn't seem too special."
- icon = 'icons/obj/custom.dmi'
- icon_state = "wintergreencloak"
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- item_state = "wintergreencloak"
- w_class = WEIGHT_CLASS_SMALL
- body_parts_covered = CHEST|GROIN|LEGS|ARMS
-
-/obj/item/clothing/head/paperhat
- name = "paperhat"
- desc = "A piece of paper folded into neat little hat."
- icon_state = "paperhat"
- item_state = "paperhat"
-
-/obj/item/clothing/suit/toggle/labcoat/mad/techcoat
- name = "Techomancers Labcoat"
- desc = "An oddly special looking coat."
- icon = 'icons/obj/custom.dmi'
- icon_state = "rdcoat"
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- item_state = "rdcoat"
- mutantrace_variation = NONE
-
-/obj/item/custom/leechjar
- name = "Jar of Leeches"
- desc = "A dubious cure-all. The cork seems to be sealed fairly well, and the glass impossible to break."
- icon = 'icons/obj/custom.dmi'
- icon_state = "leechjar"
- item_state = "leechjar"
-
-/obj/item/clothing/neck/devilwings
- name = "Strange Wings"
- desc = "These strange wings look like they once attached to something... or someone...? Whatever the case, their presence makes you feel uneasy.."
- icon = 'icons/obj/custom.dmi'
- icon_state = "devilwings"
- mob_overlay_icon = 'modular_citadel/icons/mob/clothing/devilwings64x64.dmi'
- item_state = "devilwings"
- worn_x_dimension = 64
- worn_y_dimension = 34
-
-/obj/item/clothing/neck/flagcape
- name = "Flag Cape"
- desc = "A truly patriotic form of heroic attire."
- icon = 'icons/obj/custom.dmi'
- resistance_flags = FLAMMABLE
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- icon_state = "flagcape"
- item_state = "flagcape"
-
-/obj/item/clothing/shoes/lucky
- name = "Lucky Jackboots"
- icon = 'icons/obj/custom.dmi'
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- desc = "Comfy Lucky Jackboots with the word Luck on them."
- item_state = "luckyjack"
- icon_state = "luckyjack"
- mutantrace_variation = NONE
-
-/obj/item/clothing/under/custom/lunasune
- name = "Divine Robes"
- icon = 'icons/obj/custom.dmi'
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- desc = "Heavenly robes of the kitsune Luna Pumpkin,you can feel radiance coming from them."
- item_state = "Divine_robes"
- icon_state = "Divine_robes"
- mutantrace_variation = NONE
-
-/obj/item/clothing/under/custom/leoskimpy
- name = "Leon's Skimpy Outfit"
- icon = 'icons/obj/custom.dmi'
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- desc = "A rather skimpy outfit."
- item_state = "shark_cloth"
- icon_state = "shark_cloth"
- mutantrace_variation = NONE
-
-/obj/item/clothing/under/custom/mimeoveralls
- name = "Mime's Overalls"
- icon = 'icons/obj/custom.dmi'
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- desc = "A less-than-traditional mime's attire, completed by a set of dorky-looking overalls."
- item_state = "moveralls"
- icon_state = "moveralls"
- mutantrace_variation = NONE
-
-/obj/item/clothing/suit/hooded/cloak/zuliecloak
- name = "Project: Zul-E"
- desc = "A standard version of a prototype cloak given out by Nanotrasen higher ups. It's surprisingly thick and heavy for a cloak despite having most of it's tech stripped. It also comes with a bluespace trinket which calls it's accompanying hat onto the user. A worn inscription on the inside of the cloak reads 'Fleuret' ...the rest is faded away."
- icon_state = "zuliecloak"
- item_state = "zuliecloak"
- icon = 'icons/obj/custom.dmi'
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- hoodtype = /obj/item/clothing/head/hooded/cloakhood/zuliecloak
- body_parts_covered = CHEST|GROIN|ARMS
- slot_flags = SLOT_WEAR_SUIT | ITEM_SLOT_NECK //it's a cloak. it's cosmetic. so why the hell not? what could possibly go wrong?
- mutantrace_variation = NONE
-
-/obj/item/clothing/head/hooded/cloakhood/zuliecloak
- name = "NT Special Issue"
- desc = "This hat is unquestionably the best one, bluespaced to and from CentComm. It smells of Fish and Tea with a hint of antagonism"
- icon_state = "zuliecap"
- item_state = "zuliecap"
- icon = 'icons/obj/custom.dmi'
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- flags_inv = HIDEEARS|HIDEHAIR
- mutantrace_variation = NONE
-
-/obj/item/clothing/suit/blackredgold
- name = "Multicolor Coat"
- desc = "An oddly special looking coat with black, red, and gold"
- icon = 'icons/obj/custom.dmi'
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- icon_state = "redgoldjacket"
- item_state = "redgoldjacket"
- body_parts_covered = CHEST|GROIN|LEGS|ARMS
- mutantrace_variation = NONE
-
-/obj/item/clothing/suit/kimono
- name = "Blue Kimono"
- desc = "A traditional kimono, this one is blue with purple flowers."
- icon_state = "kimono"
- item_state = "kimono"
- icon = 'icons/obj/custom.dmi'
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- body_parts_covered = CHEST|GROIN|LEGS|ARMS
- mutantrace_variation = NONE
-
-/obj/item/clothing/suit/commjacket
- name = "Dusty Commisar's Cloak"
- desc = "An Imperial Commisar's Coat, straight from the frontline of battle, filled with dirt, bulletholes, and dozens of little pockets. Alongside a curious golden eagle sitting on it's left breast, the marking '200th Venoland' is clearly visible on the inner workings of the coat. It certainly holds an imposing flair, however."
- icon_state = "commjacket"
- item_state = "commjacket"
- icon = 'icons/obj/custom.dmi'
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- body_parts_covered = CHEST|GROIN|LEGS|ARMS
- mutantrace_variation = NONE
-
-/obj/item/clothing/under/custom/mw2_russian_para
- name = "Russian Paratrooper Jumper"
- desc = "A Russian made old paratrooper jumpsuit, has many pockets for easy storage of gear from a by gone era. As bulky as it looks, its shockingly light!"
- icon_state = "mw2_russian_para"
- item_state = "mw2_russian_para"
- icon = 'icons/obj/custom.dmi'
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- mutantrace_variation = NONE
-
-/obj/item/clothing/gloves/longblackgloves
- name = "Luna's Gauntlets"
- desc = "These gloves seem to have a coating of slime fluid on them, you should possibly return them to their rightful owner."
- icon_state = "longblackgloves"
- item_state = "longblackgloves"
- icon = 'icons/obj/custom.dmi'
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
-
-/obj/item/clothing/under/custom/trendy_fit
- name = "Trendy Fitting Clothing"
- desc = "An outfit straight from the boredom of space, its the type of thing only someone trying to entertain themselves on the way to their next destination would wear."
- icon_state = "trendy_fit"
- item_state = "trendy_fit"
- icon = 'icons/obj/custom.dmi'
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- mutantrace_variation = NONE
-
-/obj/item/clothing/head/blueberet
- name = "Atmos Beret"
- desc = "A fitted beret designed to be worn by Atmos Techs."
- icon_state = "blueberet"
- item_state = "blueberet"
- icon = 'icons/obj/custom.dmi'
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- dynamic_hair_suffix = ""
-
-/obj/item/clothing/head/flight
- name = "flight goggles"
- desc = "Old style flight goggles with a leather cap attached."
- icon_state = "flight-g"
- item_state = "flight-g"
- icon = 'icons/obj/custom.dmi'
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
-
-/obj/item/clothing/neck/necklace/onion
- name = "Onion Necklace"
- desc = "A string of onions sequenced together to form a necklace."
- icon = 'icons/obj/custom.dmi'
- icon_state = "onion"
- item_state = "onion"
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
-
-/obj/item/clothing/under/custom/mikubikini
- name = "starlight singer bikini"
- desc = " "
- icon_state = "mikubikini"
- item_state = "mikubikini"
- icon = 'icons/obj/custom.dmi'
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- mutantrace_variation = NONE
-
-/obj/item/clothing/suit/mikujacket
- name = "starlight singer jacket"
- desc = " "
- icon_state = "mikujacket"
- item_state = "mikujacket"
- icon = 'icons/obj/custom.dmi'
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- mutantrace_variation = NONE
-
-/obj/item/clothing/head/mikuhair
- name = "starlight singer hair"
- desc = " "
- icon_state = "mikuhair"
- item_state = "mikuhair"
- icon = 'icons/obj/custom.dmi'
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- mutantrace_variation = NONE
- flags_inv = HIDEHAIR
-
-/obj/item/clothing/gloves/mikugloves
- name = "starlight singer gloves"
- desc = " "
- icon_state = "mikugloves"
- item_state = "mikugloves"
- icon = 'icons/obj/custom.dmi'
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- mutantrace_variation = NONE
-
-/obj/item/clothing/shoes/sneakers/mikuleggings
- name = "starlight singer leggings"
- desc = " "
- icon_state = "mikuleggings"
- item_state = "mikuleggings"
- icon = 'icons/obj/custom.dmi'
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- mutantrace_variation = NONE
-
-/obj/item/toy/plush/mammal/dog/fritz
- icon = 'icons/obj/custom.dmi'
- icon_state = "fritz"
- item_state = "fritz"
- attack_verb = list("barked", "boofed", "shotgun'd")
- obj_flags = UNIQUE_RENAME
- unique_reskin = list("Goodboye" = "fritz", "Badboye" = "fritz_bad")
- mutantrace_variation = NONE
-
-/obj/item/clothing/neck/cloak/polychromic/polyce
- name = "polychromic embroidered cloak"
- desc = "A fancy cloak embroidered with polychromatic thread in a pattern that reminds one of the wielders of unlimited power."
- icon_state = "polyce"
- poly_colors = list("#808080", "#8CC6FF", "#FF3535")
-
-/obj/item/clothing/under/custom/customskirt
- name = "unzipped atmos skirt"
- desc = "atmos jumpsuit skirt with the top half zipped down and wrapped around the waist."
- icon_state = "atmos_skirt"
- item_state = "atmos_skirt"
- icon = 'icons/obj/custom.dmi'
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
-
-/obj/item/clothing/head/halo
- name = "transdimensional halo"
- desc = "An oddly shaped halo that magically hovers above the head."
- icon_state = "halo"
- item_state = "halo"
- icon = 'icons/mob/clothing/custom_w.dmi'
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- dynamic_hair_suffix = ""
-
-/obj/item/clothing/under/custom/vest
- name = "vest"
- desc = "A vest with a shirt underlining it."
- icon_state = "vest"
- item_state = "vest"
- icon = 'icons/obj/custom.dmi'
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- mutantrace_variation = STYLE_DIGITIGRADE
-
-/obj/item/clothing/suit/custom/exo
- name = "Full ExoFrame"
- desc = "A suit specially designed for those who live and breath hardware with custom tooled robotic manipulators for working with precision even on the most hazardous of jobs."
- icon_state = "frame"
- item_state = "frame"
- icon = 'icons/obj/custom.dmi'
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- mutantrace_variation = NONE
-
-/obj/item/clothing/neck/petcollar/donorchoker
- name = "NT Choker"
- desc = "NT property since January 21st, 2562."
- icon = 'icons/obj/custom.dmi'
- icon_state = "choker"
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- item_state = "choker"
-
-/obj/item/clothing/mask/breath/mmask
- name = "Strange Metal Mask"
- desc = "An odd metal mask."
- icon = 'icons/obj/custom.dmi'
- item_state = "mmask"
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- icon_state = "mmask"
-
-/obj/item/clothing/under/smaiden
- name = "shrine maiden outfit"
- desc = "Seems questionably tight for religious purposes."
- icon_state = "smaiden"
- item_state = "smaiden"
- icon = 'icons/obj/custom.dmi'
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- mutantrace_variation = NONE
-
-/obj/item/clothing/suit/spacehoodie
- name = "space hoodie"
- desc = "You are not sure why this hoodie exists... but it does and it is comfortable."
- icon_state = "starhoodie"
- item_state = "starhoodie"
- icon = 'icons/obj/custom.dmi'
- mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
- mutantrace_variation = NONE
-
-/obj/item/coin/red
- name = "red pokerchip"
- desc = "A red pokerchip."
- icon_state = "c_red"
- item_state = "c_red"
- icon = 'icons/obj/custom.dmi'
-
-/obj/item/coin/blue
- name = "blue pokerchip"
- desc = "A blue pokerchip."
- icon_state = "c_nlue"
- item_state = "c_blue"
- icon = 'icons/obj/custom.dmi'
-
-/obj/item/coin/green
- name = "green pokerchip"
- desc = "A green pokerchip."
- icon_state = "c_green"
- item_state = "c_green"
- icon = 'icons/obj/custom.dmi'
-
-/obj/item/coin/black
- name = "black pokerchip"
- desc = "A black pokerchip."
- icon_state = "c_black"
- item_state = "c_black"
- icon = 'icons/obj/custom.dmi'
-
-/obj/item/storage/box/pockerchips
- name = "tray of pocker chips"
- desc = "A tray of green, red, blue, and black pocker chips."
- icon_state = "c_holder"
- icon = 'icons/obj/custom.dmi'
- illustration=null
-
-/obj/item/storage/box/pokerchips/PopulateContents()
- for(var/i in 1 to 5)
- new /obj/item/coin/red(src)
- for(var/i in 1 to 10)
- new /obj/item/coin/blue(src)
- for(var/i in 1 to 15)
- new /obj/item/coin/black(src)
- for(var/i in 1 to 20)
- new /obj/item/coin/green(src)
-
diff --git a/modular_citadel/code/modules/custom_loadout/load_to_mob.dm b/modular_citadel/code/modules/custom_loadout/load_to_mob.dm
deleted file mode 100644
index 79f17afc747..00000000000
--- a/modular_citadel/code/modules/custom_loadout/load_to_mob.dm
+++ /dev/null
@@ -1,61 +0,0 @@
-
-//Proc that does the actual loading of items to mob
-/*Itemlists are formatted as
-"[typepath]" = number_of_it_to_spawn
-*/
-
-#define DROP_TO_FLOOR 0
-#define LOADING_TO_HUMAN 1
-
-/proc/handle_roundstart_items(mob/living/M, ckey_override, job_override, special_override)
- if(!istype(M) || (!M.ckey && !ckey_override) || (!M.mind && (!job_override || !special_override)))
- return FALSE
- return load_itemlist_to_mob(M, parse_custom_roundstart_items(ckey_override? ckey_override : M.ckey, M.name, job_override? job_override : M.mind.assigned_role, special_override? special_override : M.mind.special_role), TRUE, TRUE, FALSE)
-
-//Just incase there's extra mob selections in the future.....
-/proc/load_itemlist_to_mob(mob/living/L, list/itemlist, drop_on_floor_if_full = TRUE, load_to_all_slots = TRUE, replace_slots = FALSE)
- if(!istype(L) || !islist(itemlist))
- return FALSE
- var/loading_mode = DROP_TO_FLOOR
- var/turf/current_turf = get_turf(L)
- if(ishuman(L))
- loading_mode = LOADING_TO_HUMAN
- switch(loading_mode)
- if(DROP_TO_FLOOR)
- for(var/I in itemlist)
- var/typepath = text2path(I)
- if(!typepath)
- continue
- for(var/i = 0, i < itemlist[I], i++)
- new typepath(current_turf)
- return TRUE
- if(LOADING_TO_HUMAN)
- return load_itemlist_to_human(L, itemlist, drop_on_floor_if_full, load_to_all_slots, replace_slots)
-
-/proc/load_itemlist_to_human(mob/living/carbon/human/H, list/itemlist, drop_on_floor_if_full = TRUE, load_to_all_slots = TRUE, replace_slots = FALSE)
- if(!istype(H) || !islist(itemlist))
- return FALSE
- var/turf/T = get_turf(H)
- for(var/item in itemlist)
- var/path = item
- if(!ispath(path))
- path = text2path(path)
- if(!path)
- continue
- var/amount = itemlist[item]
- for(var/i in 1 to amount)
- var/atom/movable/loaded_atom = new path
- if(!istype(loaded_atom))
- QDEL_NULL(loaded_atom)
- continue
- if(!istype(loaded_atom, /obj/item))
- loaded_atom.forceMove(T)
- continue
- var/obj/item/loaded = loaded_atom
- var/obj/item/storage/S = H.get_item_by_slot(SLOT_BACK)
- if(istype(S))
- SEND_SIGNAL(S, COMSIG_TRY_STORAGE_INSERT,loaded, TRUE, H) //Force it into their backpack
- continue
- if(!H.put_in_hands(loaded)) //They don't have one/somehow that failed, put it in their hands
- loaded.forceMove(T) //Guess we're just dumping it on the floor!
- return TRUE
diff --git a/modular_citadel/code/modules/custom_loadout/read_from_file.dm b/modular_citadel/code/modules/custom_loadout/read_from_file.dm
deleted file mode 100644
index 004757add4a..00000000000
--- a/modular_citadel/code/modules/custom_loadout/read_from_file.dm
+++ /dev/null
@@ -1,71 +0,0 @@
-
-GLOBAL_LIST(custom_item_list)
-//Layered list in form of custom_item_list[ckey][job][items][amounts]
-//ckey is key, job is specific jobs, or "ALL" for all jobs, items for items, amounts for amount of item.
-
-//File should be in the format of ckey|exact job name/exact job name/or put ALL instead of any job names|/path/to/item=amount;/path/to/item=amount
-//Each ckey should be in a different line
-//if there's multiple entries of a single ckey the later ones will add to the earlier definitions.
-
-/proc/reload_custom_roundstart_items_list(custom_filelist)
- if(!custom_filelist)
- custom_filelist = "config/custom_roundstart_items.txt"
- GLOB.custom_item_list = list()
- var/list/file_lines = world.file2list(custom_filelist)
- for(var/line in file_lines)
- if(!length(line)) //Emptyline, no one cares.
- continue
- if(copytext(line,1,3) == "//") //Commented line, ignore. 3 == length("//") + 1
- continue
- var/ckey_str_sep = findtext(line, "|") //Process our stuff..
- var/char_str_sep = findtext(line, "|", ckey_str_sep + length(line[ckey_str_sep]))
- var/job_str_sep = findtext(line, "|", char_str_sep + length(line[char_str_sep]))
- var/item_str_sep = findtext(line, "|", job_str_sep + length(line[job_str_sep]))
- var/ckey_str = ckey(copytext(line, 1, ckey_str_sep))
- var/char_str = copytext(line, ckey_str_sep + length(line[ckey_str_sep]), char_str_sep)
- var/job_str = copytext(line, char_str_sep + length(line[char_str_sep]), job_str_sep)
- var/item_str = copytext(line, job_str_sep + length(line[job_str_sep]), item_str_sep)
- if(!ckey_str || !char_str || !job_str || !item_str || !length(ckey_str) || !length(char_str) || !length(job_str) || !length(item_str))
- log_admin("Errored custom_items_whitelist line: [line] - Component/separator missing!")
- if(!islist(GLOB.custom_item_list[ckey_str]))
- GLOB.custom_item_list[ckey_str] = list() //Initialize list for this ckey if it isn't initialized..
- var/list/characters = splittext(char_str, "/")
- for(var/character in characters)
- if(!islist(GLOB.custom_item_list[ckey_str][character]))
- GLOB.custom_item_list[ckey_str][character] = list()
- var/list/jobs = splittext(job_str, "/")
- for(var/job in jobs)
- for(var/character in characters)
- if(!islist(GLOB.custom_item_list[ckey_str][character][job]))
- GLOB.custom_item_list[ckey_str][character][job] = list() //Initialize item list for this job of this ckey if not already initialized.
- var/list/item_strings = splittext(item_str, ";") //Get item strings in format of /path/to/item=amount
- for(var/item_string in item_strings)
- var/path_str_sep = findtext(item_string, "=")
- var/path = copytext(item_string, 1, path_str_sep) //Path to spawn
- var/amount = copytext(item_string, path_str_sep + length(item_string[path_str_sep])) //Amount to spawn
- //world << "DEBUG: Item string [item_string] processed"
- amount = text2num(amount)
- path = text2path(path)
- if(!ispath(path) || !isnum(amount))
- log_admin("Errored custom_items_whitelist line: [line] - Path/number for item missing or invalid.")
- for(var/character in characters)
- for(var/job in jobs)
- if(!GLOB.custom_item_list[ckey_str][character][job][path]) //Doesn't exist, make it exist!
- GLOB.custom_item_list[ckey_str][character][job][path] = amount
- else
- GLOB.custom_item_list[ckey_str][character][job][path] += amount //Exists, we want more~
- return GLOB.custom_item_list
-
-/proc/parse_custom_roundstart_items(ckey, char_name = "ALL", job_name = "ALL", special_role)
- var/list/ret = list()
- if(GLOB.custom_item_list[ckey])
- for(var/char in GLOB.custom_item_list[ckey])
- if((char_name == char) || (char_name == "ALL") || (char == "ALL"))
- for(var/job in GLOB.custom_item_list[ckey][char])
- if((job_name == job) || (job == "ALL") || (job_name == "ALL") || (special_role && (job == special_role)))
- for(var/item_path in GLOB.custom_item_list[ckey][char][job])
- if(ret[item_path])
- ret[item_path] += GLOB.custom_item_list[ckey][char][job][item_path]
- else
- ret[item_path] = GLOB.custom_item_list[ckey][char][job][item_path]
- return ret
diff --git a/modular_citadel/code/modules/eventmaps/Spookystation/JTGSZwork.dm b/modular_citadel/code/modules/eventmaps/Spookystation/JTGSZwork.dm
deleted file mode 100644
index e3f23a49924..00000000000
--- a/modular_citadel/code/modules/eventmaps/Spookystation/JTGSZwork.dm
+++ /dev/null
@@ -1,1134 +0,0 @@
-/*
-⢀⡴⠑⡄⠀⠀⠀⠀⠀⠀⠀⣀⣀⣤⣤⣤⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
-⠸⡇⠀⠿⡀⠀⠀⠀⣀⡴⢿⣿⣿⣿⣿⣿⣿⣿⣷⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀
-⠀⠀⠀⠀⠑⢄⣠⠾⠁⣀⣄⡈⠙⣿⣿⣿⣿⣿⣿⣿⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀
-⠀⠀⠀⠀⢀⡀⠁⠀⠀⠈⠙⠛⠂⠈⣿⣿⣿⣿⣿⠿⡿⢿⣆⠀⠀⠀⠀⠀⠀⠀
-⠀⠀⠀⢀⡾⣁⣀⠀⠴⠂⠙⣗⡀⠀⢻⣿⣿⠭⢤⣴⣦⣤⣹⠀⠀⠀⢀⢴⣶⣆
-⠀⠀⢀⣾⣿⣿⣿⣷⣮⣽⣾⣿⣥⣴⣿⣿⡿⢂⠔⢚⡿⢿⣿⣦⣴⣾⠁⠸⣼⡿
-⠀⢀⡞⠁⠙⠻⠿⠟⠉⠀⠛⢹⣿⣿⣿⣿⣿⣌⢤⣼⣿⣾⣿⡟⠉⠀⠀⠀⠀⠀
-⠀⣾⣷⣶⠇⠀⠀⣤⣄⣀⡀⠈⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀ WARNING: THE SHITCODE BELOW HAS BEEN HASTILY
-⠀⠉⠈⠉⠀⠀⢦⡈⢻⣿⣿⣿⣶⣶⣶⣶⣤⣽⡹⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀ COPY AND PASTED, PORTED FROM AWKWARD PLACES, AND PROBABLY MADE WORSE.
-⠀⠀⠀⠀⠀⠀⠀⠉⠲⣽⡻⢿⣿⣿⣿⣿⣿⣿⣷⣜⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀
-⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣷⣶⣮⣭⣽⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀
-⠀⠀⠀⠀⠀⠀⣀⣀⣈⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⠀⠀⠀⠀⠀⠀⠀ WELCOME TO JT's TG-CODE HALLOWEEN BALL CODEFILE.
-⠀⠀⠀⠀⠀⠀⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀ ALL OF IT WILL HOPEFULLY BE BELOW.
-⠀⠀⠀⠀⠀⠀⠀⠹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀
-⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠻⠿⠿⠿⠿⠛⠉
-*/
-//Also Shrek will crash your dmlang server repeatedly if you edit him.
-//JT is weird, considering my handle is a acronym.
-//Considering I can't grab defines from everywhere, I hope you enjoy strings and numbers plebs.
-//Update - Moved to modular citadel so we are after everything has loaded...probably we gucci - jtgsz
-
-/*
- AREAS
- */
-//This is generally how you handle planet areas, gen 1 large outside area is good for outside effects.
-//PS: Mountain has a soundloop, outside has a soundloop, inside has a soundloop, mountaininside is silent
-//This is for the rain weather my man.
-/area/eventmap
- name = "Dont use this" //Its the parent to any dunces out there.
- has_gravity = STANDARD_GRAVITY //We have gravity
- icon = 'modular_citadel/code/modules/eventmaps/Spookystation/areas.dmi' //It unsets the icon. don't make a err icon.
- requires_power = 0 // We don't need power anywhere.
- flags_1 = NONE
- dynamic_lighting = DYNAMIC_LIGHTING_FORCED
-
-/area/eventmap/outside //We are outside
- name = "Outside"
- icon_state = "outside"
- outdoors = 0 //I set outdoors to false. So areas can be edited.
-
-/area/eventmap/inside //We are inside, all things are pretty normal.
- name = "Inside"
- icon_state = "inside"
-
-/area/eventmap/mountain //Mostly so I can see the area lines of the mountain area in the minimap.
- name = "Mountain"
- icon_state = "mountain"
- var/mountain = 1
-
-/area/eventmap/mountaininside
- name = "Silent Mountain Inside"
- icon_state = "mountain_inside"
- outdoors = 0
-
-/*
- OUTSIDE WALLS I WANT NOT NEED
- */
-//These exist mostly to limit the amount of space we use organically really.
-//Decided to just use the denserock within the regular code.
-
-/turf/closed/indestructible/spookytime/matrixblocker //Two times the reference power.
- name = "matrix"
- icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile32.dmi'
- icon_state = "matrix"
- desc = "You suddenly realize the truth - there is no spoon.
Digital simulation ends here ONCE AGAIN."
-
-/*
- OUTSIDE TURFS WITH NO GEN JUS MIDNIGHT LIGHT BABY
- */
-
-//In a ideal world, we would have split the turfs onto a single parent.
-//Then we would tree from INSIDE and OUTSIDE, with outside having the lighting set, for the day/night subsystem to change.
-//Outside would also have the planetary atmos and config on it.
-//Inside would be a case to case basis depending on if you want it to scrub or not.. and not have the lighting.
-//Along with what needs to be constructed on etc.
-//This is not a ideal world so enjoy the overload.
-
-//Parent of all our outside turfs. Both the inside and outside should be on a parent like this.
-/turf/open/floor/spooktime //But for now, we just handle what is outside, for light control etc.
- name = "You fucked up pal"
- desc = "Don't use this turf its a parent and just a holder."
- planetary_atmos = 1 //REVERT TO INITIAL AIR GASMIX OVER TIME WITH LINDA. AKA SUPERSCRUBBER
- light_range = 3 //MIDNIGHT BLUE
- light_power = 0.15 //NOT PITCH BLACK, JUST REALLY DARK
- light_color = "#00111a" //The light can technically cycle on a timer worldwide, but no daynight cycle.
- baseturfs = /turf/open/floor/plating/spookbase/dirtattachmentpoint //If we explode or die somehow, we just become grass
- gender = PLURAL //THE GENDER IS PLURAL
- tiled_dirt = 0 //NO TILESMOOTHING DIRT/DIRT SPAWNS OR SOME SHIT
-
-/turf/open/floor/spooktime/break_tile()
- return
-/turf/open/floor/spooktime/burn_tile()
- return
-
-/turf/open/floor/spooktime/pry_tile(obj/item/I, mob/user, silent = FALSE)
- return //No prying these tiles, you instead shovel it if avail.
-
-/*
- Baseturf, when we call scrapeaway() after a shoveling. So people can attach tiles
- */
-
-//WARNING VERY IMPORTANT AND HACKJOBBISH - Basically this handles construction on everything.
-/turf/open/floor/plating/spookbase/dirtattachmentpoint //Lighted variant
- name = "the ground"
- desc = "Looks like its been dugged out and prepped for construction"
- icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile32.dmi'
- icon_state = "dugdirt"
- footstep = FOOTSTEP_GRASS
- barefootstep = FOOTSTEP_GRASS
- clawfootstep = FOOTSTEP_GRASS
- heavyfootstep = FOOTSTEP_GENERIC_HEAVY
- attachment_holes = TRUE
- planetary_atmos = 1
- light_range = 3 //We reset this
- light_power = 0.15 //The lighting will unset when people place their tiles/etc on it.
- light_color = "#00111a" //It should be fine
-
- baseturfs = /turf/open/floor/plating/spookbase/dirtattachmentpoint //No going lower than this.
-
-/turf/open/floor/plating/spookbase/dirtattachmentpoint/mountain
- name = "the ground"
- desc = "It has been dug out and prepared for construction."
- light_range = 0
- light_power = 0
-
- baseturfs = /turf/open/floor/plating/spookbase/dirtattachmentpoint/mountain
-
-/turf/open/floor/plating/spookbase/sandattachmentpoint
- name = "the sand"
- desc = "Looks like its been dugged out and prepped for construction"
- icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile32.dmi'
- icon_state = "dugsand"
- footstep = FOOTSTEP_GRASS
- barefootstep = FOOTSTEP_GRASS
- clawfootstep = FOOTSTEP_GRASS
- heavyfootstep = FOOTSTEP_GENERIC_HEAVY
- attachment_holes = TRUE
- planetary_atmos = 1
- light_range = 3
- light_power = 0.15
- light_color = "#00111a"
-
- baseturfs = /turf/open/floor/plating/spookbase/sandattachmentpoint // The sand version.
-
-/*
- FLOOR TILES
- */
-/obj/item/stack/tile/nonspooktimegrass
- name = "clumps of grass"
- singular_name = "clump of grass"
- desc = "This is a clump of grass."
- icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile32.dmi'
- icon_state = "grass_clump"
- turf_type = /turf/open/floor/spooktime/nonspooktimegrass
- resistance_flags = FLAMMABLE
-
-/obj/item/stack/tile/normalasssand
- name = "piles of sand"
- singular_name = "pile of sand"
- desc = "This is a pile of sand"
- icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile32.dmi'
- icon_state = "sand_clump"
- turf_type = /turf/open/floor/spooktime/beach
-
-/*
- IMPORTANT TURFS */
-
-//Grass with no flora generation on it.
-/turf/open/floor/spooktime/nonspooktimegrass
- name = "grass patch"
- desc = "You can't tell if this is real grass... Ah, who are you kidding, it totally is real grass."
- icon_state = "grass_1" //Grass of the varied variety.
- icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile32.dmi'
- baseturfs = /turf/open/floor/plating/spookbase/dirtattachmentpoint
- footstep = FOOTSTEP_GRASS
- barefootstep = FOOTSTEP_GRASS
- clawfootstep = FOOTSTEP_GRASS
- heavyfootstep = FOOTSTEP_GENERIC_HEAVY
- var/turfverb = "dig out"
-
-/turf/open/floor/spooktime/nonspooktimegrass/Initialize() //Init rng icon.
- . = ..()
- icon_state = "grass_[rand(1,3)]"
-
-/turf/open/floor/spooktime/nonspooktimegrass/attackby(obj/item/C, mob/user, params) //We dig it out with a shovel.
- if((C.tool_behaviour == TOOL_SHOVEL) && params) //And beneath it we reveal dirt
- new /obj/item/stack/tile/nonspooktimegrass(src)
- user.visible_message("[user] digs up [src].", "You [turfverb] [src].")
- playsound(src, 'sound/effects/shovel_dig.ogg', 50, 1)
- make_plating()
- if(..())
- return
-
-
-//Dirt patches with no lighting.
-/turf/open/floor/spooktime/dirtpatch
- name = "clearly dirt"
- desc = "Its dirt alright"
- icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile32.dmi'
- icon_state = "smoothdarkdirt"
- light_range = 0 //We set the lights to nothing on the CLEARLY DIRT
- light_power = 0 //ayep
- footstep = FOOTSTEP_SAND
- barefootstep = FOOTSTEP_SAND
- clawfootstep = FOOTSTEP_SAND
- heavyfootstep = FOOTSTEP_GENERIC_HEAVY
- baseturfs = /turf/open/floor/plating/spookbase/dirtattachmentpoint/mountain //no light variant
- var/turfverb = "dig out"
-
-/turf/open/floor/spooktime/dirtpatch/attackby(obj/item/C, mob/user, params) //We dig it out with a shovel.
- if((C.tool_behaviour == TOOL_SHOVEL) && params) //And beneath it we reveal dirt
- user.visible_message("[user] digs up [src].", "You [turfverb] [src].")
- playsound(src, 'sound/effects/shovel_dig.ogg', 50, 1)
- make_plating()
- if(..())
- return
-
-//Snow with no planetary atmos, so the map doesn't atmos crash.
-/turf/open/floor/spooktime/snow
- gender = PLURAL
- name = "snow"
- icon = 'icons/turf/snow.dmi'
- desc = "Looks cold."
- icon_state = "snow"
- slowdown = 2
- light_range = 0
- light_power = 0
- bullet_sizzle = 1
- footstep = FOOTSTEP_SAND
- barefootstep = FOOTSTEP_SAND
- clawfootstep = FOOTSTEP_SAND
- heavyfootstep = FOOTSTEP_GENERIC_HEAVY
-
-/turf/open/floor/spooktime/snow/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
- return
-
-/turf/open/floor/spooktime/snow/crowbar_act(mob/living/user, obj/item/I)
- return
-
-/*
- Basic Grass turf w Flora gen
- */
-/turf/open/floor/spooktime/spooktimegrass
- name = "the ground"
- desc = "It clearly looks like grass and dirt, clearly."
- icon_state = "grass_1"
- icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile32.dmi' //32x32 iconfile, sry we had different sizes.
- broken_states = list("sand")
- footstep = FOOTSTEP_GRASS //Finally I can have my footstep noises
- barefootstep = FOOTSTEP_GRASS
- clawfootstep = FOOTSTEP_GRASS
- heavyfootstep = FOOTSTEP_GENERIC_HEAVY
- var/turfverb = "dig out"
-
-
- baseturfs = /turf/open/floor/plating/spookbase/dirtattachmentpoint //beneath the grass there is dirt.
-
- //Holders for what can occur on the turf.
- var/obj/structure/flora/turfGrass = null
- var/obj/structure/flora/turfTree = null
- var/obj/structure/flora/turfAusflora = null
- var/obj/structure/flora/turfRocks = null
- var/obj/structure/flora/turfDebris = null
-
-
-/turf/open/floor/spooktime/spooktimegrass/Initialize() //Considering adding dirtgen here too.
- . = ..()
- if(prob(1))
- icon_state = "smoothdarkdirt" //Sometimes we can be dirt.
- else
- icon_state = "grass_[rand(1,3)]" //Icon state variation for how many states of grass I got... 3 lul
- //If no fences, machines (soil patches are machines), etc. try to plant grass
- if(!(\
- (locate(/obj/structure) in src) || \
- (locate(/obj/machinery) in src) ))
- floraGen() //And off we go riding into hell.
- update_icon()
-
-/turf/open/floor/spooktime/spooktimegrass/attackby(obj/item/C, mob/user, params) //We dig it out with a shovel.
- if((C.tool_behaviour == TOOL_SHOVEL) && params) //And beneath it we reveal dirt)
- new /obj/item/stack/tile/nonspooktimegrass(src)
- user.visible_message("[user] digs up [src].", "You [turfverb] [src].")
- playsound(src, 'sound/effects/shovel_dig.ogg', 50, 1)
- make_plating()
- if(..())
- return
-
-/turf/open/floor/spooktime/spooktimegrass/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
- return //No replacing it
-
-/turf/open/floor/spooktime/spooktimegrass/burn_tile()
- return //No burning it
-
-/turf/open/floor/spooktime/spooktimegrass/MakeSlippery(wet_setting, min_wet_time, wet_time_to_add, max_wet_time, permanent)
- return //No slippery
-
-/turf/open/floor/spooktime/spooktimegrass/MakeDry()
- return //No making it dry.
-
-/*
- FLORA GEN PROCEDURE
- */
-
-//This is mostly for flora/doodads. I don't feel like there needs to be lake/cave and animals generation..
-//For the halloween map at least, so I used the f13 flora gen and appended to it instead of usin cellular automata.
-//Soooo, its just tied to the turf initialize on init right now.
-//Right now each segment generates independantly, but it wouldn't be hard to do it in a chain
-//And check for what else is there before a list of objects has the option to appear.
-//Or even change weighting based on the weight of other things that the turf has checked in its range.
-//But at the same time, the stacked flora/rocks etc look pretty okay together honestly.
-//On the other side of the coin, you could even adjust their pixel x and y for better thickets.
-//Since after-all things in nature don't just occupy one spot each a lot of the time.
-
-//That being said you have somewhere around 50 seconds of init, and 160 seconds of pre-game time.
-//To finish generation if you need to split it up by chunks and add more checks.
-//Its more time than you could ever want considering how fast it finishes like this without hiccups really.
-//Ironically, not very resource intensive or slow to do this much of it.
-
-//I have turned what used to be simple into hell.
-//We can keep appending stuff here as we go, it basically just spawns it all on turf spooktimegrass on init.
-
-//============> Current Set value // JTGSZ Tuned Reference Value <==============
-#define GRASS_SPONTANEOUS 2//2 //chance it appears on the tile on its own
-#define GRASS_WEIGHT 4//4 //multiplier increase if theres some nearby
-#define TREE_SPONTANEOUS 4//4
-#define TREE_WEIGHT 4//4
-#define AUSFLORA_SPONTANEOUS 2//2
-#define AUSFLORA_WEIGHT 3//3
-#define ROCKS_SPONTANEOUS 2//2 //Technically this can be moved to the desolate spawn list tied to grass.
-#define ROCKS_WEIGHT 1//1 //Lower weight cause rock clusters were too common...But cool honestly.
-#define DEBRIS_SPONTANEOUS 2//2
-#define DEBRIS_WEIGHT 2//2
-
-//These are basically what can spawn in the lists, the number is the weight.
-//The weight dictates how likely it is to spawn over other things in the lists. If you were to use pickweight.
-#define LUSH_GRASS_SPAWN_LIST list(/obj/structure/flora/grass/spookytime = 4,\
- /obj/structure/flora/ausbushes/lavendergrass = 3,\
- /obj/structure/flora/ausbushes/sparsegrass = 6,\
- /obj/structure/flora/ausbushes/fullgrass = 1\
- )
-
-#define TREE_SPAWN_LIST list(/obj/structure/flora/tree/spookytime = 9,\
- /obj/structure/flora/tree/spookytimexl = 2,\
- /obj/structure/flora/tree/jungle = 1,\
- /obj/structure/flora/tree/jungle/small = 1\
- )
-
-#define AUSFLORA_SPAWN_LIST list(/obj/structure/flora/ausbushes = 3,\
- /obj/structure/flora/ausbushes/grassybush = 3,\
- /obj/structure/flora/ausbushes/fernybush = 1,\
- /obj/structure/flora/ausbushes/sunnybush = 1,\
- /obj/structure/flora/ausbushes/reedbush = 1,\
- /obj/structure/flora/ausbushes/palebush = 1,\
- /obj/structure/flora/ausbushes/stalkybush = 1\
- )
-
-#define ROCKS_SPAWN_LIST list(/obj/structure/flora/spookyrock = 1\
- )
-
-#define DEBRIS_SPAWN_LIST list(/obj/structure/flora/tree/spookybranch = 5, \
- /obj/structure/flora/tree/spookylog = 1\
- )
-
-//Lists that occur when the cluster doesn't happen but probability dictates it tries.
-#define DESOLATE_SPAWN_LIST list(/obj/structure/flora/grass/spookytime = 1,\
- /obj/structure/flora/ausbushes/sparsegrass = 1\
- )
-
-//I just kinda made it worse... Like a lot worse. Ngl man.
-/turf/open/floor/spooktime/spooktimegrass/proc/floraGen()
- var/grassWeight = 0 //grassWeight holders for each individual layer
- var/treeWeight = 0
- var/ausfloraWeight = 0
- var/rocksWeight = 0
- var/debrisWeight = 0
-
- var/randGrass = null //The random plant picked
- var/randTree = null //The random deadtree picked
- var/randAusflora = null //The random Ausflora picked
- var/randRocks = null //The random rock picked
- var/randDebris = null //The random wood debris picked
-
- //spontaneously spawn the objects based on probability from the define.
- //Ngl, a lot of this is going to be have to generate in certain orders later in this proc.
- if(prob(GRASS_SPONTANEOUS)) //If probability THE DEFINE NUMBER
- randGrass = pickweight(LUSH_GRASS_SPAWN_LIST) //randgrass is assigned a obj from the weighted list
- turfGrass = new randGrass(src) //The var on the turf now has a new randgrass from the list.
-
- if(prob(TREE_SPONTANEOUS))
- randTree = pickweight(TREE_SPAWN_LIST)
- turfTree = new randTree(src)
-
- if(prob(AUSFLORA_SPONTANEOUS))
- randAusflora = pickweight(AUSFLORA_SPAWN_LIST)
- turfAusflora = new randAusflora(src)
-
- if(prob(ROCKS_SPONTANEOUS))
- randRocks = pickweight(ROCKS_SPAWN_LIST)
- turfRocks = new randRocks(src)
-
- if(prob(DEBRIS_SPONTANEOUS))
- randDebris = pickweight(DEBRIS_SPAWN_LIST)
- turfDebris = new randDebris(src)
-
-
- //loop through neighbouring turfs, if they have grass, then increase weight, cluster prep.
- for(var/turf/open/floor/spooktime/spooktimegrass/T in RANGE_TURFS(3, src))
- if(T.turfGrass) //We check what is around our turf
- grassWeight += GRASS_WEIGHT //The weight is increased by grass weight per every grass we find
- if(T.turfTree)
- treeWeight += TREE_WEIGHT
- if(T.turfAusflora)
- ausfloraWeight += AUSFLORA_WEIGHT
- if(T.turfRocks)
- rocksWeight += ROCKS_WEIGHT
- if(T.turfDebris)
- debrisWeight += DEBRIS_WEIGHT
-
-
- //Below is where we handle clusters really.
- //use weight to try to spawn grass
- if(prob(grassWeight)) //Basically the probability goes by the DEFINE WEIGHT the more of it is around.
- //If surrounded on 5+ sides, pick from lush
- if(grassWeight == (5 * GRASS_WEIGHT)) //If we are five times the define value, aka 5 detected.
- randGrass = pickweight(LUSH_GRASS_SPAWN_LIST) //We weighted pick from the lush list, aka boys that can be together.
- else //Else.
- randGrass = pickweight(DESOLATE_SPAWN_LIST) //We weighted pick from boys that are fine being alone.
- turfGrass = new randGrass(src) //And at the end we set the turfgrass to this object.
-
- if(prob(treeWeight)) //We can technically redirect individuals down here too, but lets just focus on clumps.
- randTree = pickweight(TREE_SPAWN_LIST)
- turfTree = new randTree(src)
-
- if(prob(ausfloraWeight))
- randAusflora = pickweight(AUSFLORA_SPAWN_LIST)
- turfAusflora = new randAusflora(src)
-
- if(prob(rocksWeight))
- randRocks = pickweight(ROCKS_SPAWN_LIST)
- turfRocks = new randRocks(src)
-
- if(prob(debrisWeight))
- randDebris = pickweight(DEBRIS_SPAWN_LIST)
- turfDebris = new randDebris(src)
-
-//Make sure we delete the objects if we ever change turfs
-/turf/open/floor/spooktime/spooktimegrass/ChangeTurf(flags = CHANGETURF_INHERIT_AIR)
- if(turfGrass)
- qdel(turfGrass)
- //if(turfTree)
- // qdel(turfTree)
- if(turfAusflora)
- qdel(turfAusflora)
- if(turfRocks)
- qdel(turfRocks)
- if(turfDebris)
- qdel(turfDebris)
- . = ..()
-
-//Grass baseturf helper, more than likely completely unneeded since its set on the original turf too.
-/obj/effect/baseturf_helper/spooktimegrass
- name = "grass baseturf helper" //Basically just changes the baseturf into grass
- baseturf = /turf/open/floor/spooktime/spooktimegrass //Wherever it is at.
-
-//A reference to this list is passed into area sound managers, and it's modified in a manner that preserves that reference in ash_storm.dm
-GLOBAL_LIST_EMPTY(rain_sounds)
-
-// HEY!! IF THIS DOES NOT WORK CHECK LOGIN.DM !!!!!
-
-/*
- HERE COMES THE MOTHERFUCKING RAIN
- */
-/datum/weather/long_rain
- name = "Long rain at midnight"
- desc = "The planet sometimes rains, nothing special about it really."
-
- telegraph_duration = 130
- telegraph_message = "Water droplets begin falling from the sky."
- telegraph_overlay = "regular_rain" //Ya my apologies for not making a new rain icon
-
- weather_message = "The droplets become a downpour, rain now falls all around you from the night sky."
- weather_overlay = "regular_rain" //But I need to work on my mouse on the day of 10/24/2019, so lets call it here.
- weather_duration_lower = 12000 //these are deciseconds.
- weather_duration_upper = 15000
-
- end_duration = 100
- end_message = "The downpour gradually slows until it stops."
-
- area_type = /area/eventmap/outside
- target_trait = ZTRAIT_LONGRAIN
- probability = 90
-
- barometer_predictable = TRUE
-
- var/list/outside_longrain = list()
- var/list/inside_longrain = list()
- var/list/mountain_longrain = list()
- // var/datum/looping_sound/active_outside_longrain/sound_ao = new(list(), FALSE, TRUE) //Outside
- // var/datum/looping_sound/active_inside_longrain/sound_ai = new(list(), FALSE, TRUE) //Inside
- // var/datum/looping_sound/active_mountain_longrain/sound_am = new(list(), FALSE, TRUE) //Mountain
-
-/datum/weather/long_rain/telegraph() //Yeah, I'm sorry but I just stole ash storm sound loops
- . = ..()
- var/list/eligible_areas = list()
- for(var/z in impacted_z_levels) //We check the Z level
- eligible_areas += SSmapping.areas_in_z["[z]"] //And append them to eligible areas list
-
-
- for(var/i in 1 to eligible_areas.len)
- var/area/place = eligible_areas[i]
- if(istype(place, /area/eventmap/outside)) //If the place is this path
- outside_longrain[place] = /datum/looping_sound/active_outside_longrain //Outside areas is the place
- if(istype(place, /area/eventmap/inside))
- inside_longrain[place] = /datum/looping_sound/active_inside_longrain
- if(istype(place, /area/eventmap/mountain))
- mountain_longrain[place] = /datum/looping_sound/active_mountain_longrain
-
- CHECK_TICK
-
- //We modify this list instead of setting it to weak/stron sounds in order to preserve things that hold a reference to it
- //It's essentially a playlist for a bunch of components that chose what sound to loop based on the area a player is in
- GLOB.rain_sounds += outside_longrain
- return ..()
-
-/datum/weather/long_rain/start()
- GLOB.ash_storm_sounds += mountain_longrain
- GLOB.ash_storm_sounds += inside_longrain
- return ..()
-
-/datum/weather/long_rain/end()
- GLOB.ash_storm_sounds -= outside_longrain
- GLOB.ash_storm_sounds -= inside_longrain
- GLOB.ash_storm_sounds -= mountain_longrain
- return ..()
-
-/datum/looping_sound/active_outside_longrain
- mid_sounds = list('modular_citadel/code/modules/eventmaps/Spookystation/outsideloop1.ogg'=1,
- 'modular_citadel/code/modules/eventmaps/Spookystation/outsideloop2.ogg'=1)
- mid_length = 3.8 //ahahaa aaaaaaaaaa fucking shit man, but its what I got.
- volume = 70
- start_sound = 'sound/ambience/acidrain_start.ogg'
- start_length = 13
- end_sound = 'sound/ambience/acidrain_end.ogg'
-
-/datum/looping_sound/active_inside_longrain
- mid_sounds = list('modular_citadel/code/modules/eventmaps/Spookystation/insideloop1.ogg'=1,
- 'modular_citadel/code/modules/eventmaps/Spookystation/insideloop2.ogg'=1,
- 'modular_citadel/code/modules/eventmaps/Spookystation/insideloop3.ogg'=1,
- 'modular_citadel/code/modules/eventmaps/Spookystation/insideloop4.ogg'=1)
- mid_length = 5.1 //AAAAAAAAAAAAAAAAAAAAAAA
- volume = 60
-
-/datum/looping_sound/active_mountain_longrain
- mid_sounds = list('modular_citadel/code/modules/eventmaps/Spookystation/basecaveloop.ogg'=1)
- mid_length = 12 //Why are we still here? Just to suffer?
- volume = 60
-
-/*
- GRANDFATHER CLOCK
- */
-
-/*
- 1:00 AM - overlay-2
- 2:00 AM - overlay-2
- 3:00 AM - overlay-3
- 4:00 AM - overlay-4
- 5:00 AM - overlay-4
- 6:00 AM - overlay-6
- 7:00 AM - overlay-7
- 8:00 AM - overlay-7
- 9:00 AM - overlay-9
- 10:00 AM - overlay-10
- 11:00 AM - overlay-10
- 12:00 AM - overlay-0
- */
-
-/obj/machinery/grandfatherclock
- name = "Grandfather Clock"
- desc = "Keeps track of the time with its dials."
- icon = 'modular_citadel/code/modules/eventmaps/Spookystation/clock32x49.dmi'
- icon_state = "grandfathermk4right"
- density = 1
- anchored = 1
- use_power = 0
- max_integrity = 250
- var/HRimgstate = "asshouroverlay-0"
- var/MMimgstate = "assminuteoverlay-0"
- var/ticktock = 0 // We hold this here
- var/dyndial_cycle_ticker = 0 //How many
- var/playchime = 1 //Procs will reset their vars.
-
-/obj/machinery/grandfatherclock/Initialize()
- . = ..()
- update_icon() //We get it done
-
-/obj/machinery/grandfatherclock/process()
- doodad_clock_ticker()
-
-
-/obj/machinery/grandfatherclock/proc/doodad_clock_ticker() //We basically throttle the rest of this machine here.
-
- dyndial_cycle_ticker++
-
- if(ticktock) //If we are true
- playsound(src.loc, 'modular_citadel/code/modules/eventmaps/Spookystation/Tock.ogg', 100,0)
- icon_state = "grandfathermk4right"
- flick("tick", src)
- ticktock = 0 //Play this noise set to false
- else
- playsound(src.loc, 'modular_citadel/code/modules/eventmaps/Spookystation/Tick.ogg', 100,0)
- flick("tock", src)
- icon_state = "grandfathermk4left"
- ticktock = 1 //If we are not true, play this noise set to true
-
- if(dyndial_cycle_ticker >= 20) //Handles the dynamic dial
- dyndial_cycle()
- dyndial_cycle_ticker = 0
-
-/obj/machinery/grandfatherclock/proc/dyndial_cycle()
- var/ass_time = STATION_TIME(TRUE, world.time) //Fun fact, space station time has a timezone offset, If its not on display time. I added world.time to fix the compile error. I dunno if it works as intended still!!
- var/hour = (text2num(time2text(ass_time, "hh"))%12)
- var/minute = text2num(time2text(ass_time, "mm"))
-
- //to_chat(world, "dyndial cycle current says: [hour]:[minute] - Ass_time currently says [ass_time]")
- if(playchime && hour == 0)
- playsound(src.loc, 'modular_citadel/code/modules/eventmaps/Spookystation/midnightchime.ogg', 100, 0)
- playchime = 0
- if(!playchime && hour == 11)
- playchime = 1
-
- switch(hour)
- if(1 || 2)
- HRimgstate = "asshouroverlay-2" //Now it is ass, mostly because someones going to kill me for the other names.
- if(3)
- HRimgstate = "asshouroverlay-3"
- if(4 || 5)
- HRimgstate = "asshouroverlay-4"
- if(6)
- HRimgstate = "asshouroverlay-6"
- if(7 || 8)
- HRimgstate = "asshouroverlay-7"
- if(9)
- HRimgstate = "asshouroverlay-9"
- if(10 || 11)
- HRimgstate = "asshouroverlay-10"
- else
- HRimgstate = "asshouroverlay-0" //Station time wraps to 0, and so does our hours.
-
- switch(minute)
- if(0 to 3)
- MMimgstate = "assminuteoverlay-0"
- if(4 to 15)
- MMimgstate = "assminuteoverlay-2"
- if(16 to 22)
- MMimgstate = "assminuteoverlay-3"
- if(23 to 28)
- MMimgstate = "assminuteoverlay-4"
- if(29 to 33)
- MMimgstate = "assminuteoverlay-6"
- if(34 to 41)
- MMimgstate = "assminuteoverlay-7"
- if(42 to 49)
- MMimgstate = "assminuteoverlay-9"
- if(50 to 57)
- MMimgstate = "assminuteoverlay-10"
- else
- MMimgstate = "assminuteoverlay-0" //This has 58 to 60 and everything else.
-
- update_icon() //Everything is set, lets update.
-
-/obj/machinery/grandfatherclock/update_icon()
- cut_overlays() //We cut the overlays.
-
- add_overlay(MMimgstate) //And append our new states, Minute
- add_overlay(HRimgstate) //Hour.
-
-/*
- The Flora that is generated onto the basic grassturf, or can be placed for tone building.
- */
-
-//For ease of use, I should have appended it all here..
-//Stripped the other segments out, people don't need hay and interactions right now you know man?
-//Technically we could also randomize the pixel_x, pixel_y placement of these guys for more dynamic thickets.
-/obj/structure/flora/grass/spookytime
- icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile32.dmi' //32x32 iconfile
- desc = "Some dry, virtually dead grass, cause its fall and not a wasteland this time."
- icon_state = "tall_grass_1"
-
-/obj/structure/flora/grass/spookytime/New()
- ..()
- icon_state = "tall_grass_[rand(1,8)]" //We have 8 states.
-
-/obj/structure/flora/grass/spookytime/attackby(obj/item/W, mob/user, params)
- if(W.sharpness && W.force > 0 && !(NODECONSTRUCT_1 in flags_1))
- to_chat(user, "You begin to harvest [src]...")
- if(do_after(user, 100/W.force, target = user))
- to_chat(user, "You've collected [src]")
- var/obj/item/stack/sheet/hay/H = user.get_inactive_held_item()
- if(istype(H))
- H.add(1)
- else
- new /obj/item/stack/sheet/hay/(get_turf(src))
- qdel(src)
- return 1
- else
- . = ..()
-
-/obj/structure/flora/tree/spookytime
- name = "dead tree"
- desc = "It's a tree. Useful for combustion and/or construction."
- icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile64.dmi' //64x64 iconfile
- icon_state = "deadtree_1"
- log_amount = 3
- density = 1
- obj_integrity = 100
- max_integrity = 100
-
-/obj/structure/flora/tree/spookytime/New()
- icon_state = "deadtree_[rand(1,6)]" //We have 6 states
- ..()
-
-/obj/structure/flora/tree/spookytimexl
- name = "tall dead tree"
- desc = "It's a tree. Useful for combustion and/or construction. This ones quite tall"
- icon = 'modular_citadel/code/modules/eventmaps/Spookystation/talltree128.dmi'
- icon_state = "tree_1"
- log_amount = 12
- density = 1
- obj_integrity = 200
- max_integrity = 200
-
-/obj/structure/flora/tree/spookytimexl/New()
- icon_state = "tree_[rand(1,3)]" //We have 3 states.
- ..()
-
-/obj/structure/flora/tree/spookybranch
- name = "fallen branch"
- desc = "A branch from a tree"
- icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile32.dmi'
- icon_state = "branch_1"
- log_amount = 1
- density = 0
- obj_integrity = 30
- max_integrity = 30
-
-/obj/structure/flora/tree/spookybranch/New()
- icon_state = "branch_[rand(1,4)]"
- ..()
-
-/obj/structure/flora/tree/spookylog
- name = "fallen tree"
- desc = "A tree, that turned horizontal after it died"
- icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile32.dmi'
- icon_state = "timber"
- log_amount = 5
- density = 0
- obj_integrity = 100
- max_integrity = 100 //only got one state man.
-
-/obj/structure/flora/spookyrock
- name = "rock"
- desc = "Its a rock man. Hard as shit, and for you quite impassible."
- icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile32.dmi'
- icon_state = "rock_1"
- density = 1
-
-/obj/structure/flora/spookyrock/New()
- icon_state = "rock_[rand(1,3)]"
- ..()
-
-/*
- WALLS - BECAUSE I HAD TO REPLACE ALL OF THEM ON THE MAP AND DO IT RIGHT THIS TIME
- */
-/turf/closed/wall/mineral/wood
-
-
-/obj/structure/falsewall/wood
-
-//Due to the behavior of walls generally, I'm not going to make a microcosm of full flexibility
-//and functionability for a ball map, but heres everything we are usually using for future reference.
-
-/*
- TURF DIRECTIONALS, OVERALL SPAMMED STUFF ETC
- */
-
-//Mostly here because I was tired of searching the top stuff.
-//Damaged plasteel plates, cause fuck varediting all these icons my man.
-//Just search damturf for the tree
-
-/turf/open/floor/plasteel/damturf //ez search plasteel parent
-/turf/open/floor/plasteel/damturf/damage1
- icon_state = "damaged1"
-/turf/open/floor/plasteel/damturf/damage2
- icon_state = "damaged2"
-/turf/open/floor/plasteel/damturf/
- icon_state = "damaged3"
-/turf/open/floor/plasteel/damturf/damage4
- icon_state = "damaged4"
-/turf/open/floor/plasteel/damturf/damage5
- icon_state = "damaged5"
-/turf/open/floor/plasteel/damturf/scorched
- icon_state = "panelscorched"
-/turf/open/floor/plasteel/damturf/scorched1
- icon_state = "floorscorched1"
-/turf/open/floor/plasteel/damturf/scorched2
- icon_state = "floorscorched2"
-/turf/open/floor/plasteel/damturf/platdmg1
- icon_state = "platingdmg1"
-/turf/open/floor/plasteel/damturf/platdmg2
- icon_state = "platingdmg2"
-/turf/open/floor/plasteel/damturf/platdmg3
- icon_state = "platingdmg3"
-
-/turf/open/floor/wood/damturf //ez search wood parent
-/turf/open/floor/wood/damturf/broken1
- icon_state = "wood-broken"
-/turf/open/floor/wood/damturf/broken2
- icon_state = "wood-broken2"
-/turf/open/floor/wood/damturf/broken3
- icon_state = "wood-broken3"
-/turf/open/floor/wood/damturf/broken4
- icon_state = "wood-broken4"
-/turf/open/floor/wood/damturf/broken5
- icon_state = "wood-broken5"
-/turf/open/floor/wood/damturf/broken6
- icon_state = "wood-broken6"
-/turf/open/floor/wood/damturf/broken7
- icon_state = "wood-broken7"
-
-//Parent that goes into coasts too
-/turf/open/floor/spooktime/beach //laketime
- gender = PLURAL
- name = "sand"
- desc = "ITS SAND!"
- icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile32.dmi'
- icon_state = "sand"
- bullet_bounce_sound = null
- tiled_dirt = 0
- var/turfverb = "dig up"
-
- baseturfs = /turf/open/floor/plating/spookbase/sandattachmentpoint //Alas, now people can dig out lakes.
-
-/turf/open/floor/spooktime/beach/attackby(obj/item/C, mob/user, params) //We dig it out with a shovel.
- if((C.tool_behaviour == TOOL_SHOVEL) && params) //And beneath it we reveal dirt
- new /obj/item/stack/tile/normalasssand(src) //EDIT THIS
- user.visible_message("[user] digs up [src].", "You [turfverb] [src].")
- playsound(src, 'sound/effects/shovel_dig.ogg', 50, 1)
- make_plating()
- if(..())
- return
-
-//Beaches and coasts and sand and shit.
-/turf/open/floor/spooktime/beach/coasts
- gender = NEUTER
- name = "coastline"
- desc = "The coastline of a sandy shore"
- icon_state = "sandwater_t_S"
-
-/turf/open/floor/spooktime/beach/coasts/attackby(obj/item/C, mob/user, params)
- return //Upon testing, digging out the coasts makes the map look like ass.
-
-//The water that follows the coastline also animated.
-/turf/open/floor/spooktime/beach/coasts/coastS
- icon_state = "sandwater_t_S"
-/turf/open/floor/spooktime/beach/coasts/coastN
- icon_state = "sandwater_t_N"
-/turf/open/floor/spooktime/beach/coasts/coastE
- icon_state = "sandwater_t_E"
-/turf/open/floor/spooktime/beach/coasts/coastW
- icon_state = "sandwater_t_W"
-/turf/open/floor/spooktime/beach/coasts/coastSE
- icon_state = "sandwater_t_SE"
-/turf/open/floor/spooktime/beach/coasts/coastSW
- icon_state = "sandwater_t_SW"
-/turf/open/floor/spooktime/beach/coasts/coastNE
- icon_state = "sandwater_t_NE"
-/turf/open/floor/spooktime/beach/coasts/coastNW
- icon_state = "sandwater_t_NW"
-
-//The coastline itself with sand
-/turf/open/floor/spooktime/beach/coasts/watercoastS
- icon_state = "sandwater_b_S"
-/turf/open/floor/spooktime/beach/coasts/watercoastN
- icon_state = "sandwater_b_N"
-/turf/open/floor/spooktime/beach/coasts/watercoastW
- icon_state = "sandwater_b_W"
-/turf/open/floor/spooktime/beach/coasts/watercoastE
- icon_state = "sandwater_b_E"
-/turf/open/floor/spooktime/beach/coasts/watercoastSE
- icon_state = "sandwater_b_SE"
-/turf/open/floor/spooktime/beach/coasts/watercoastSW
- icon_state = "sandwater_b_SW"
-/turf/open/floor/spooktime/beach/coasts/watercoastNE
- icon_state = "sandwater_b_NE"
-/turf/open/floor/spooktime/beach/coasts/watercoastNW
- icon_state = "sandwater_b_NW"
-
-//Beach corners
-/turf/open/floor/spooktime/beach/coasts/innerN
- icon_state = "sandwater_inner_N"
-/turf/open/floor/spooktime/beach/coasts/innerS
- icon_state = "sandwater_inner_S"
-/turf/open/floor/spooktime/beach/coasts/innerE
- icon_state = "sandwater_inner_E"
-/turf/open/floor/spooktime/beach/coasts/innerW
- icon_state = "sandwater_inner_W"
-
-//Shallow water same color as beach water
-/turf/open/floor/spooktime/beach/water
- name = "water"
- desc = "Its water that seems to be a bit deep, still can wade through though."
- icon_state = "water"
- bullet_sizzle = 1
- footstep = FOOTSTEP_WATER
- barefootstep = FOOTSTEP_WATER
- clawfootstep = FOOTSTEP_WATER
- heavyfootstep = FOOTSTEP_WATER
-
-/turf/open/floor/spooktime/beach/water/attackby(obj/item/C, mob/user, params)
- return //haha nope
-
-//Slightly darker than the beach water color.
-/turf/open/floor/spooktime/beach/watersolid //Gotta stop you at a certain point man
- name = "water"
- desc = "Water thats deep enough to where your spaceman ass cannot swim."
- icon_state = "water2" //Now its darker lol
- bullet_sizzle = 1
- density = 1 //We are now dense
- footstep = FOOTSTEP_WATER
- barefootstep = FOOTSTEP_WATER
- clawfootstep = FOOTSTEP_WATER
- heavyfootstep = FOOTSTEP_WATER
-
-/turf/open/floor/spooktime/beach/watersolid/attackby(obj/item/C, mob/user, params)
- return //You aren't digging my lake out unless I want you to fool.
-
-//Motion river water with the lighting on it.
-/turf/open/floor/spooktime/riverwatermotion
- gender = PLURAL
- name = "water"
- desc = "Shallow water."
- icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile32.dmi'
- icon_state = "riverwater_motion"
- slowdown = 1
- bullet_sizzle = 1
- bullet_bounce_sound = null //needs a splashing sound one day.
- footstep = FOOTSTEP_WATER
- barefootstep = FOOTSTEP_WATER
- clawfootstep = FOOTSTEP_WATER
- heavyfootstep = FOOTSTEP_WATER
-
-//No motion river water with the lighting on it.
-/turf/open/floor/spooktime/riverwatermotion/nomotion
- icon_state = "riverwater"
-
-//Cobblestone and all of its directions tied to the parent.
-/turf/open/floor/spooktime/cobble //Middle and parent
- name = "cobblestone path" //We don't use directional varedits otherwise the map can load them incorrect.
- desc = "A simple but beautiful path made of various sized stones."
- icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile32.dmi'
- icon_state = "cobble_mid" //as to why? Sometimes it will spawn the turf elsewhere and move it into place.
- //That means the direction will change because of this movement, usually when theres things ontop of it.
- footstep = FOOTSTEP_FLOOR
- barefootstep = FOOTSTEP_HARD_BAREFOOT
- clawfootstep = FOOTSTEP_HARD_CLAW
- heavyfootstep = FOOTSTEP_GENERIC_HEAVY
- tiled_dirt = 0
-
-/turf/open/floor/spooktime/cobble/cornerNW //First corner
- icon_state = "cobble_corner_nw"
-/turf/open/floor/spooktime/cobble/cornerNE //Now that these are hardcoded individuals.
- icon_state = "cobble_corner_ne" //Movement won't change what they are on mapload.
-/turf/open/floor/spooktime/cobble/cornerSW
- icon_state = "cobble_corner_sw"
-/turf/open/floor/spooktime/cobble/cornerSE //I found i don't need most of these but still lol.
- icon_state = "cobble_corner_se"
-
-/turf/open/floor/spooktime/cobble/sideN //First Side
- icon_state = "cobble_side_n"
-/turf/open/floor/spooktime/cobble/sideS
- icon_state = "cobble_side_s"
-/turf/open/floor/spooktime/cobble/sideE
- icon_state = "cobble_side_e"
-/turf/open/floor/spooktime/cobble/sideW
- icon_state = "cobble_side_w"
-
-//A tiny tiny bit of the total road icon file from f13 edited for grass not desert hastily.
-//Theres something like 30 pieces including crosswalks, sidewalks, potholes and other shit in it man.
-/turf/open/floor/spooktime/cobble/roadmid //Center piece
- name = "road"
- desc = "Its asphault alright"
- icon_state = "road"
-
-/turf/open/floor/spooktime/cobble/roadsideN //road edges, I have a lot of these
- icon_state = "road_side_N"
-/turf/open/floor/spooktime/cobble/roadsideS //But i don't feel like adding them all for a temp map.
- icon_state = "road_side_S"
-/turf/open/floor/spooktime/cobble/roadsideE
- icon_state = "road_side_E"
-/turf/open/floor/spooktime/cobble/roadsideW
- icon_state = "road_side_W"
-/turf/open/floor/spooktime/cobble/roadcornerSW
- icon_state = "road_corner_sw"
-
-/turf/open/indestructible/spooknecropolis
- name = "necropolis floor"
- desc = "It's regarding you suspiciously."
- icon = 'icons/turf/floors.dmi'
- icon_state = "necro1"
- baseturfs = /turf/open/indestructible/necropolis
- footstep = FOOTSTEP_LAVA
- barefootstep = FOOTSTEP_LAVA
- clawfootstep = FOOTSTEP_LAVA
- heavyfootstep = FOOTSTEP_LAVA
- tiled_dirt = FALSE
-
-//Fermis's umbrella
-
-/obj/item/umbrella
- name = "umbrella"
- desc = "To keep the rain off you. Use with caution on windy days."
- icon = 'icons/obj/items_and_weapons.dmi'
- lefthand_file = 'icons/mob/inhands/items_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/items_righthand.dmi'
- icon_state = "umbrella_closed"
- slot_flags = SLOT_BELT
- force = 5
- throwforce = 5
- w_class = WEIGHT_CLASS_SMALL
- var/open = FALSE
-
-/obj/item/umbrella/Initialize()
- ..()
- color = RANDOM_COLOUR
- update_icon()
-
-/obj/item/umbrella/attack_self()
- toggle_umbrella()
-
-/obj/item/umbrella/proc/toggle_umbrella()
- open = !open
- icon_state = "umbrella_[open ? "open" : "closed"]"
- item_state = icon_state
- update_icon()
-
-//Keep the mechs out of the mech arena
-/obj/structure/trap/ctf/nomech
- name = "anti-mech barrier"
- desc = "attempts to bring mechs into the regular ball space may result in spontaneous crabification"
-
-/obj/structure/trap/ctf/nomech/Crossed(atom/movable/AM)
- if(is_type_in_typecache(AM, ignore_typecache))
- return
- flare()
- if(ismecha(AM) || istype(AM, /obj/item/mecha_parts) || istype(AM, /obj/structure/mecha_wreckage))
- qdel(AM)
-
-/*
- Shitty Hay Objects Sprited by me in a rush when I was half-asleep at 9am + The material
- */
-
-GLOBAL_LIST_INIT(hay_recipes, list ( \
- new/datum/stack_recipe("Rice Hat", /obj/item/clothing/head/rice_hat, 4, time = 5, one_per_turf = 0, on_floor = 0), \
- new/datum/stack_recipe("Hay Bed", /obj/structure/bed/badhaybed, 4, time = 15, one_per_turf = 1, on_floor = 0), \
- new/datum/stack_recipe("Wicker Basket", /obj/structure/closet/crate/awfulwickerbasket, 5, time = 40, one_per_turf = 0, on_floor = 1), \
-))
-//Thanks Gomble
-/obj/item/stack/sheet/hay
- name = "hay"
- desc = "A bundle of hay. Food for livestock, and useful for weaving. Hail the Wickerman."
- singular_name = "hay stalk"
- icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile32.dmi'
- icon_state = "hay"
- item_state = "hay"
- force = 1
- throwforce = 1
- throw_speed = 1
- throw_range = 2
- max_amount = 500
- attack_verb = list("tickled", "poked", "whipped")
- hitsound = 'sound/weapons/grenadelaunch.ogg'
-
-/obj/item/stack/sheet/hay/Initialize(mapload, new_amount, merge = TRUE)
- recipes = GLOB.hay_recipes
- return ..()
-
-/obj/item/stack/sheet/hay/fifty
- amount = 50
-
-/obj/item/stack/sheet/hay/twenty
- amount = 20
-
-/obj/item/stack/sheet/hay/ten
- amount = 10
-
-/obj/item/stack/sheet/hay/five
- amount = 5
-
-
-/obj/item/stack/sheet/hay/update_icon()
- var/amount = get_amount()
- if((amount <= 4) && (amount > 0))
- icon_state = "hay[amount]"
- else
- icon_state = "hay"
-
-/*
- Hay Objects hastily drawn by me at 9am in a rush.
- */
-//Shitty bed
-/obj/structure/bed/badhaybed
- name = "Low-quality Hay Bed"
- desc = "It looks like someone hastily put this together, even if the builder didn't."
- icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile32.dmi'
- icon_state = "shitty_hay_bed"
- anchored = 1
- can_buckle = 1
- buckle_lying = 1
- resistance_flags = FLAMMABLE
- max_integrity = 50
- integrity_failure = 30
- buildstacktype = /obj/item/stack/sheet/hay
- buildstackamount = 5
-
-//Awful Wicker Basket
-/obj/structure/closet/crate/awfulwickerbasket
- name = "Low-quality Wicker Basket"
- desc = "A handmade wicker basket, you don't know why it looks like this. But you probably don't like it."
- icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile32.dmi'
- icon_state = "shitty_basket" //yes, there is no space on crates so the other state is shitty_basketopen
- resistance_flags = FLAMMABLE
- material_drop = /obj/item/stack/sheet/hay
- material_drop_amount = 5
diff --git a/modular_citadel/code/modules/eventmaps/Spookystation/Tick.ogg b/modular_citadel/code/modules/eventmaps/Spookystation/Tick.ogg
deleted file mode 100644
index a3e0e3931e36eac74706c703f4007923cc96087a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 21737
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
AF8}}l
diff --git a/modular_citadel/code/modules/eventmaps/Spookystation/basecaveloop.ogg b/modular_citadel/code/modules/eventmaps/Spookystation/basecaveloop.ogg
deleted file mode 100644
index da25ab77a0fea0a72d33398158e09b059bd20de3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 78707
zcmeFYXIvB8w?7>8D3+t>v5OE3f+C6(L0aNLML_`t0TBU}UL(CG(PKf8q98Sds5GT2
zEz%MdAp$8vfCzy^1QH;G0D(aIfAIY7z0Zs1-Tl9Np7{)6_UtyZ+Ft9s*Vy{_*n?Jq
z{&S>-{(JE@@#6ypRfR}c=pDbXm0PQ}9{aaux01r|iyQ^pm7f27tn^%|SvYki^-mM|
ze;=-^{~ctd`*pv&z9(!$ef9_X-EsUq^nT0zx+isXPwJl3+keD1DA@0As8^U*aQM-c
zaTV75+jXn?Sw~=K1<;>%+YcPxV{hfLF2m05=o%G|D=rsQJbH~R4tQ>{e`2|(D9%#HIY;T!imkC^XY`4F7z`kF{>vh=nOOGwr9}cvx4BvTaBF7_B$3n$}
ze8URu(XRuvv$L~&9k$!p`>^MBV~e(lJMkxtGv1gV!4VjClgA$=x+J#H_S$ofKiqxE
z@AJCbVcfdDAuIp3-5yCg?QOs8kNorfxx;TNocTlH_cLz*fxcY%^ZeC&D-~zfg6@H~
zpAXqi2-$ZbO|5Iy?m_IS9(eBGw|=XZpCzp<_|?1~j}%XRYp@j~-kMxI+9
zB;8lsVcuz^cre21=-R^{9nIVKZP{CG4q8V7oxJ$he!soIxk6;%xR}4zH-8;){#yj4
zu@rJAR?h#F|2O~k$Ef~%dJs7OGl=h-b;E?>0I1WtyTIT3EgLpDZv}l_4>}F#JqYwEWM3B`
z?t~DnjUbR#SC2jj^j_-{^?yy2KR}>APlG^zWM5eeOt>C&P64$0&+}AJ=9>3f_lgzt
zH~owOb+67=2W;(TZ_-1N2S&bun{1X4cet+xh7H;-?4CQTgY#
z7Ei{!S=YBAke*4ihwy&)<3*c@rb_XVbGSpK)0@Jx12Yn
zY&%cA=HT#%9g}|~@r_?;Dd!8{)OI`2(V;KmKw`d6Zt=U)N>1aJ^AtU6pd~HBHMXf-McWGlK&~VGjEKU)w&TE0;
zRvI1a0`&o-Wq3KSeOtI)
zJngF2R)gHTBMQJfoCj@L1K8Mtmv^l8w5vV*%lvEh!z<=*3ts|j&5nnES!ovibH)7P
zYfn2nt9LIqm>)g-=*r(mie7F3jJyfJXOrK2UJn{m0Bw1=|0}R4SgzmWK{R6Tf0(4h
z$_ulzYTq43HadFPBgu%J_p%503A3@9%meOe6or$4V!GY$qUF)wMPOcIpvfxGy$$<-
zH6n2PK;A92x8I*RKVIwSBspH6I|lwL_npCH40mhnRf!(>F&Fi%WlV
znc}Y@}{qp(O2*77Czj>GYR+Yx`3G{qJ*r^W&~-
zU%11-4iG3GkeF+?TBp`&ocFl@TV`|t**4!|XLX?PrTN99kDl9YH~?7I)tiA8Q2ph7
zU~yXodIt#g0XwUsMKA3R76C5=TwNmq@Av!a|LTwVy4RpH(;F1;q1P!pUO0Vp??$cP
zQVBfG?gv{uw%GX}Z{KjBX#dNe8_yaX*XgW%{j&c?xsET<=;+ZpfLDKekS#5bw(kzu
zqzSx9!14B6kGsbozP#~Fr+x6jmeRVN9_0kb4SX-DY#(9_4TL-tgJK*Nudc02Xfqos78)x@Yx1l?&Xc6{}%rhg#WbjI}TI?{HI&*4S%3$r}^)AAkeGTD@Nv!=JBsKdX=WDE^ODm
zdB~_Mh3U@b7xAa8C(zuMo8E$rEq#PtbwCZ{L6Yc|_qLU}?9U
z0mSg%>q@vN)`yooqDaM?g_
z