diff --git a/code/__DEFINES/citadel_defines.dm b/code/__DEFINES/citadel_defines.dm
index 870816975b..2fed84553e 100644
--- a/code/__DEFINES/citadel_defines.dm
+++ b/code/__DEFINES/citadel_defines.dm
@@ -105,8 +105,9 @@
#define NOAROUSAL 37 //Stops all arousal effects
#define NOGENITALS 38 //Cannot create, use, or otherwise have genitals
-//Brainslugs
+//Citadel istypes
#define isborer(A) (istype(A, /mob/living/simple_animal/borer))
+#define isipcperson(A) (is_species(A, /datum/species/ipc))
#define CITADEL_MENTOR_OOC_COLOUR "#224724"
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 2bcb1d5189..17a42f4ad1 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -1052,18 +1052,3 @@
/mob/living/carbon/human/species/zombie/krokodil_addict
race = /datum/species/krokodil_addict
-
-/*
-//CITADEL EDIT - TODO: Enable people to set custom races
-/mob/living/carbon/human/species/mammal
- race = /datum/species/mammal
-/mob/living/carbon/human/species/avian
- race = /datum/species/avian
-/mob/living/carbon/human/species/aquatic
- race = /datum/species/aquatic
-/mob/living/carbon/human/species/insect
- race = /datum/species/insect
-/mob/living/carbon/human/species/xeno
- race = /datum/species/xeno
-/mob/living/carbon/human/species/guilmon
- race = /datum/species/guilmon */
diff --git a/modular_citadel/code/modules/mob/cit_emotes.dm b/modular_citadel/code/modules/mob/cit_emotes.dm
index 65b6d43a77..df97cee63b 100644
--- a/modular_citadel/code/modules/mob/cit_emotes.dm
+++ b/modular_citadel/code/modules/mob/cit_emotes.dm
@@ -4,7 +4,7 @@
//Disables the custom emote blacklist from TG that normally applies to slimes.
/datum/emote/living/custom
mob_type_blacklist_typecache = list(/mob/living/brain)
-
+
/datum/emote/living/scream/run_emote(mob/living/user, params) //I can't not port this shit, come on.
if(user.nextsoundemote >= world.time || user.stat != CONSCIOUS)
return
@@ -35,7 +35,7 @@
sound = 'modular_citadel/sound/voice/scream_lizard.ogg'
if(is_species(user, /datum/species/skeleton))
sound = 'modular_citadel/sound/voice/scream_skeleton.ogg'
- if (is_species(user, /datum/species/fly) || is_species(user, /datum/species/moth))
+ if (is_species(user, /datum/species/fly) || is_species(user, /datum/species/insect))
sound = 'modular_citadel/sound/voice/scream_moth.ogg'
if(isalien(user))
sound = 'sound/voice/hiss6.ogg'
@@ -49,7 +49,7 @@
else
message = "makes a very loud noise."
. = ..()
-
+
/datum/emote/sound/carbon/snap
key = "snap"
key_third_person = "snaps"
@@ -58,7 +58,7 @@
emote_type = EMOTE_AUDIBLE
sound = 'sound/effects/snap01.ogg'
mob_type_allowed_typecache = list(/mob/living/carbon/)
-
+
/datum/emote/living/snap
key = "snap"
diff --git a/modular_citadel/code/modules/mob/dead/new_player/sprite_accessories.dm b/modular_citadel/code/modules/mob/dead/new_player/sprite_accessories.dm
index a2d3ce7b85..1b1e2c81e5 100644
--- a/modular_citadel/code/modules/mob/dead/new_player/sprite_accessories.dm
+++ b/modular_citadel/code/modules/mob/dead/new_player/sprite_accessories.dm
@@ -878,23 +878,17 @@
/datum/sprite_accessory/xeno_dorsal
icon = 'modular_citadel/icons/mob/xeno_parts_greyscale.dmi'
-/datum/sprite_accessory/xeno_dorsal/none
- name = "None"
-
/datum/sprite_accessory/xeno_dorsal/standard
name = "Standard"
icon_state = "standard"
- icon = 'modular_citadel/icons/mob/xeno_parts_greyscale.dmi'
/datum/sprite_accessory/xeno_dorsal/royal
name = "Royal"
icon_state = "royal"
- icon = 'modular_citadel/icons/mob/xeno_parts_greyscale.dmi'
/datum/sprite_accessory/xeno_dorsal/down
name = "Dorsal Down"
icon_state = "down"
- icon = 'modular_citadel/icons/mob/xeno_parts_greyscale.dmi'
//Xeno Tail
/datum/sprite_accessory/xeno_tail
@@ -906,7 +900,6 @@
/datum/sprite_accessory/xeno_tail/standard
name = "Xenomorph Tail"
icon_state = "xeno"
- icon = 'modular_citadel/icons/mob/xeno_parts_greyscale.dmi'
//Xeno Caste Heads
/datum/sprite_accessory/xeno_head
@@ -915,28 +908,100 @@
/datum/sprite_accessory/xeno_head/standard
name = "Standard"
icon_state = "standard"
- icon = 'modular_citadel/icons/mob/xeno_parts_greyscale.dmi'
/datum/sprite_accessory/xeno_head/royal
name = "royal"
icon_state = "royal"
- icon = 'modular_citadel/icons/mob/xeno_parts_greyscale.dmi'
/datum/sprite_accessory/xeno_head/hollywood
name = "hollywood"
icon_state = "hollywood"
- icon = 'modular_citadel/icons/mob/xeno_parts_greyscale.dmi'
/datum/sprite_accessory/xeno_head/warrior
name = "warrior"
icon_state = "warrior"
- icon = 'modular_citadel/icons/mob/xeno_parts_greyscale.dmi'
// IPCs
/datum/sprite_accessory/screen
- icon = 'modular_citadel/icons/mob/mutant_bodyparts.dmi'
+ icon = 'modular_citadel/icons/mob/ipc_screens.dmi'
color_src = null
+/datum/sprite_accessory/screen/blank
+ name = "Blank"
+ icon_state = "blank"
+
+/datum/sprite_accessory/screen/pink
+ name = "Pink"
+ icon_state = "pink"
+
+/datum/sprite_accessory/screen/green
+ name = "Green"
+ icon_state = "green"
+
+/datum/sprite_accessory/screen/red
+ name = "Red"
+ icon_state = "red"
+
+/datum/sprite_accessory/screen/blue
+ name = "Blue"
+ icon_state = "blue"
+
+/datum/sprite_accessory/screen/yellow
+ name = "Yellow"
+ icon_state = "yellow"
+
+/datum/sprite_accessory/screen/shower
+ name = "Shower"
+ icon_state = "shower"
+
+/datum/sprite_accessory/screen/nature
+ name = "Nature"
+ icon_state = "nature"
+
+/datum/sprite_accessory/screen/eight
+ name = "Eight"
+ icon_state = "eight"
+
+/datum/sprite_accessory/screen/goggles
+ name = "Goggles"
+ icon_state = "goggles"
+
+/datum/sprite_accessory/screen/heart
+ name = "Heart"
+ icon_state = "heart"
+
+/datum/sprite_accessory/screen/monoeye
+ name = "Mono eye"
+ icon_state = "monoeye"
+
+/datum/sprite_accessory/screen/breakout
+ name = "Breakout"
+ icon_state = "breakout"
+
+/datum/sprite_accessory/screen/purple
+ name = "Purple"
+ icon_state = "purple"
+
+/datum/sprite_accessory/screen/scroll
+ name = "Scroll"
+ icon_state = "scroll"
+
+/datum/sprite_accessory/screen/console
+ name = "Console"
+ icon_state = "console"
+
+/datum/sprite_accessory/screen/rgb
+ name = "RGB"
+ icon_state = "rgb"
+
+/datum/sprite_accessory/screen/golglider
+ name = "Gol Glider"
+ icon_state = "golglider"
+
+/datum/sprite_accessory/screen/rainbow
+ name = "Rainbow"
+ icon_state = "rainbow"
+
/datum/sprite_accessory/screen/sunburst
name = "Sunburst"
icon_state = "sunburst"
@@ -944,7 +1009,41 @@
/datum/sprite_accessory/screen/static
name = "Static"
icon_state = "static"
-
+
+//Oracle Station sprites
+
+/datum/sprite_accessory/screen/bsod
+ name = "BSOD"
+ icon_state = "bsod"
+
+/datum/sprite_accessory/screen/redtext
+ name = "Red Text"
+ icon_state = "retext"
+
+/datum/sprite_accessory/screen/sinewave
+ name = "Sine wave"
+ icon_state = "sinewave"
+
+/datum/sprite_accessory/screen/squarewave
+ name = "Square wave"
+ icon_state = "squarwave"
+
+/datum/sprite_accessory/screen/ecgwave
+ name = "ECG wave"
+ icon_state = "ecgwave"
+
+/datum/sprite_accessory/screen/eyes
+ name = "Eyes"
+ icon_state = "eyes"
+
+/datum/sprite_accessory/screen/textdrop
+ name = "Text drop"
+ icon_state = "textdrop"
+
+/datum/sprite_accessory/screen/stars
+ name = "Stars"
+ icon_state = "stars"
+
// *** Snooooow flaaaaake ***
/datum/sprite_accessory/mam_body_markings/guilmon
diff --git a/modular_citadel/code/modules/mob/living/carbon/human/human.dm b/modular_citadel/code/modules/mob/living/carbon/human/human.dm
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm
index 801d64f5cf..68780d0890 100644
--- a/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm
+++ b/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm
@@ -201,117 +201,6 @@
acidpwr = 12 */
-//##########SLIMEPEOPLE##########
-
-/datum/species/jelly/roundstartslime
- name = "Slimeperson"
- id = "slimeperson"
- default_color = "00FFFF"
- species_traits = list(SPECIES_ORGANIC,MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,NOBLOOD)
- inherent_traits = list(TRAIT_TOXINLOVER)
- mutant_bodyparts = list("mam_tail", "mam_ears", "taur")
- default_features = list("mcolor" = "FFF", "mam_tail" = "None", "mam_ears" = "None")
- say_mod = "says"
- hair_color = "mutcolor"
- hair_alpha = 180
- liked_food = MEAT
- coldmod = 3
- heatmod = 1
- burnmod = 1
-
-/datum/action/innate/slime_change
- name = "Alter Form"
- check_flags = AB_CHECK_CONSCIOUS
- button_icon_state = "alter_form" //placeholder
- icon_icon = 'icons/mob/actions/actions_slime.dmi'
- background_icon_state = "bg_alien"
-
-/datum/action/innate/slime_change/Activate()
- var/mob/living/carbon/human/H = owner
- if(!isjellyperson(H))
- return
- else
- H.visible_message("[owner] gains a look of \
- concentration while standing perfectly still.\
- Their body seems to shift and starts getting more goo-like.",
- "You focus intently on altering your body while \
- standing perfectly still...")
- change_form()
-
-/datum/action/innate/slime_change/proc/change_form()
- var/mob/living/carbon/human/H = owner
- var/select_alteration = input(owner, "Select what part of your form to alter", "Form Alteration", "cancel") in list("Hair Style", "Genitals", "Tail", "Ears", "Taur body", "Cancel")
- if(select_alteration == "Hair Style")
- if(H.gender == MALE)
- var/new_style = input(owner, "Select a facial hair style", "Hair Alterations") as null|anything in GLOB.facial_hair_styles_list
- if(new_style)
- H.facial_hair_style = new_style
- else
- H.facial_hair_style = "Shaved"
- //handle normal hair
- var/new_style = input(owner, "Select a hair style", "Hair Alterations") as null|anything in GLOB.hair_styles_list
- if(new_style)
- H.hair_style = new_style
- H.update_hair()
- else if (select_alteration == "Genitals")
- var/list/organs = list()
- var/operation = input("Select organ operation.", "Organ Manipulation", "cancel") in list("add sexual organ", "remove sexual organ", "cancel")
- switch(operation)
- if("add sexual organ")
- var/new_organ = input("Select sexual organ:", "Organ Manipulation") in list("Penis", "Testicles", "Breasts", "Vagina", "Womb", "Cancel")
- if(new_organ == "Penis")
- H.give_penis()
- else if(new_organ == "Testicles")
- H.give_balls()
- else if(new_organ == "Breasts")
- H.give_breasts()
- else if(new_organ == "Vagina")
- H.give_vagina()
- else if(new_organ == "Womb")
- H.give_womb()
- else
- return
- if("remove sexual organ")
- for(var/obj/item/organ/genital/X in H.internal_organs)
- var/obj/item/organ/I = X
- organs["[I.name] ([I.type])"] = I
- var/obj/item/organ = input("Select sexual organ:", "Organ Manipulation", null) in organs
- organ = organs[organ]
- if(!organ)
- return
- var/obj/item/organ/genital/O
- if(isorgan(organ))
- O = organ
- O.Remove(H)
- organ.forceMove(get_turf(H))
- qdel(organ)
- H.update_body()
- else if (select_alteration == "Ears")
- var/new_ears
- new_ears = input(owner, "Choose your character's ears:", "Ear Alteration") as null|anything in GLOB.mam_ears_list
- if(new_ears)
- H.dna.features["mam_ears"] = new_ears
- H.update_body()
- else if (select_alteration == "Tail")
- var/new_tail
- new_tail = input(owner, "Choose your character's tail:", "Tail Alteration") as null|anything in GLOB.mam_tails_list
- if(new_tail)
- H.dna.features["mam_tail"] = new_tail
- if(new_tail != "None")
- H.dna.features["taur"] = "None"
- H.update_body()
- else if (select_alteration == "Taur body")
- var/new_taur
- new_taur = input(owner, "Choose your character's tauric body:", "Taur Body Alteration") as null|anything in GLOB.taur_list
- if(new_taur)
- H.dna.features["taur"] = new_taur
- if(new_taur != "None")
- H.dna.features["mam_tail"] = "None"
- H.dna.features["xenotail"] = "None"
- H.update_body()
- else
- return
-
//misc
/mob/living/carbon/human/dummy
no_vore = TRUE
diff --git a/modular_citadel/code/modules/mob/living/carbon/human/species_types/ipc.dm b/modular_citadel/code/modules/mob/living/carbon/human/species_types/ipc.dm
index 93823c03c8..f38cdb62f0 100644
--- a/modular_citadel/code/modules/mob/living/carbon/human/species_types/ipc.dm
+++ b/modular_citadel/code/modules/mob/living/carbon/human/species_types/ipc.dm
@@ -7,17 +7,38 @@
sexes = 0
species_traits = list(MUTCOLORS,NOEYES)
mutant_bodyparts = list("ipc_screen")
- default_features = list("ipc_screen" = "Sunburst")
+ default_features = list("ipc_screen" = "Blank")
species_traits = list(MUTCOLORS)
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/ipc
+ var/datum/action/innate/monitor_change/screen
+
/datum/species/ipc/on_species_gain(mob/living/carbon/human/C)
C.draw_citadel_parts()
- . = ..()
+ if(isipcperson(C) && !screen)
+ screen = new
+ screen.Grant(C)
+ ..()
/datum/species/ipc/on_species_loss(mob/living/carbon/human/C)
C.draw_citadel_parts(TRUE)
- . = ..()
+ if(screen)
+ screen.Remove(C)
+ ..()
/datum/species/ipc/get_spans()
- return SPAN_ROBOT
\ No newline at end of file
+ return SPAN_ROBOT
+
+/datum/action/innate/monitor_change
+ name = "Screen Change"
+ check_flags = AB_CHECK_CONSCIOUS
+ icon_icon = 'icons/mob/actions/actions_silicon.dmi'
+ button_icon_state = "drone_vision"
+
+/datum/action/innate/monitor_change/Activate()
+ var/mob/living/carbon/human/H = owner
+ var/new_ipc_screen = input(usr, "Choose your character's screen:", "Monitor Display") as null|anything in GLOB.ipc_screens_list
+ if(!new_ipc_screen)
+ return
+ H.dna.features["ipc_screen"] = new_ipc_screen
+ H.update_body()
diff --git a/modular_citadel/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/modular_citadel/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
index 5e3f58e26c..03a7cbc0a7 100644
--- a/modular_citadel/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
+++ b/modular_citadel/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
@@ -1,2 +1,113 @@
/datum/species/jelly/slime
name = "Xenobiological Slimeperson"
+
+//##########SLIMEPEOPLE##########
+
+/datum/species/jelly/roundstartslime
+ name = "Slimeperson"
+ id = "slimeperson"
+ default_color = "00FFFF"
+ species_traits = list(SPECIES_ORGANIC,MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,NOBLOOD)
+ inherent_traits = list(TRAIT_TOXINLOVER)
+ mutant_bodyparts = list("mam_tail", "mam_ears", "taur")
+ default_features = list("mcolor" = "FFF", "mam_tail" = "None", "mam_ears" = "None")
+ say_mod = "says"
+ hair_color = "mutcolor"
+ hair_alpha = 180
+ liked_food = MEAT
+ coldmod = 3
+ heatmod = 1
+ burnmod = 1
+
+/datum/action/innate/slime_change
+ name = "Alter Form"
+ check_flags = AB_CHECK_CONSCIOUS
+ button_icon_state = "alter_form" //placeholder
+ icon_icon = 'icons/mob/actions/actions_slime.dmi'
+ background_icon_state = "bg_alien"
+
+/datum/action/innate/slime_change/Activate()
+ var/mob/living/carbon/human/H = owner
+ if(!isjellyperson(H))
+ return
+ else
+ H.visible_message("[owner] gains a look of \
+ concentration while standing perfectly still.\
+ Their body seems to shift and starts getting more goo-like.",
+ "You focus intently on altering your body while \
+ standing perfectly still...")
+ change_form()
+
+/datum/action/innate/slime_change/proc/change_form()
+ var/mob/living/carbon/human/H = owner
+ var/select_alteration = input(owner, "Select what part of your form to alter", "Form Alteration", "cancel") in list("Hair Style", "Genitals", "Tail", "Ears", "Taur body", "Cancel")
+ if(select_alteration == "Hair Style")
+ if(H.gender == MALE)
+ var/new_style = input(owner, "Select a facial hair style", "Hair Alterations") as null|anything in GLOB.facial_hair_styles_list
+ if(new_style)
+ H.facial_hair_style = new_style
+ else
+ H.facial_hair_style = "Shaved"
+ //handle normal hair
+ var/new_style = input(owner, "Select a hair style", "Hair Alterations") as null|anything in GLOB.hair_styles_list
+ if(new_style)
+ H.hair_style = new_style
+ H.update_hair()
+ else if (select_alteration == "Genitals")
+ var/list/organs = list()
+ var/operation = input("Select organ operation.", "Organ Manipulation", "cancel") in list("add sexual organ", "remove sexual organ", "cancel")
+ switch(operation)
+ if("add sexual organ")
+ var/new_organ = input("Select sexual organ:", "Organ Manipulation") in list("Penis", "Testicles", "Breasts", "Vagina", "Womb", "Cancel")
+ if(new_organ == "Penis")
+ H.give_penis()
+ else if(new_organ == "Testicles")
+ H.give_balls()
+ else if(new_organ == "Breasts")
+ H.give_breasts()
+ else if(new_organ == "Vagina")
+ H.give_vagina()
+ else if(new_organ == "Womb")
+ H.give_womb()
+ else
+ return
+ if("remove sexual organ")
+ for(var/obj/item/organ/genital/X in H.internal_organs)
+ var/obj/item/organ/I = X
+ organs["[I.name] ([I.type])"] = I
+ var/obj/item/organ = input("Select sexual organ:", "Organ Manipulation", null) in organs
+ organ = organs[organ]
+ if(!organ)
+ return
+ var/obj/item/organ/genital/O
+ if(isorgan(organ))
+ O = organ
+ O.Remove(H)
+ organ.forceMove(get_turf(H))
+ qdel(organ)
+ H.update_body()
+ else if (select_alteration == "Ears")
+ var/new_ears
+ new_ears = input(owner, "Choose your character's ears:", "Ear Alteration") as null|anything in GLOB.mam_ears_list
+ if(new_ears)
+ H.dna.features["mam_ears"] = new_ears
+ H.update_body()
+ else if (select_alteration == "Tail")
+ var/new_tail
+ new_tail = input(owner, "Choose your character's tail:", "Tail Alteration") as null|anything in GLOB.mam_tails_list
+ if(new_tail)
+ H.dna.features["mam_tail"] = new_tail
+ if(new_tail != "None")
+ H.dna.features["taur"] = "None"
+ H.update_body()
+ else if (select_alteration == "Taur body")
+ var/new_taur
+ new_taur = input(owner, "Choose your character's tauric body:", "Taur Body Alteration") as null|anything in GLOB.taur_list
+ if(new_taur)
+ H.dna.features["taur"] = new_taur
+ if(new_taur != "None")
+ H.dna.features["mam_tail"] = "None"
+ H.dna.features["xenotail"] = "None"
+ H.update_body()
+ else
+ return
\ No newline at end of file
diff --git a/modular_citadel/icons/mob/ipc_screens.dmi b/modular_citadel/icons/mob/ipc_screens.dmi
new file mode 100644
index 0000000000..09b2493bbd
Binary files /dev/null and b/modular_citadel/icons/mob/ipc_screens.dmi differ
diff --git a/modular_citadel/icons/mob/mobs.dmi b/modular_citadel/icons/mob/mobs.dmi
deleted file mode 100644
index cf74d73796..0000000000
Binary files a/modular_citadel/icons/mob/mobs.dmi and /dev/null differ
diff --git a/modular_citadel/icons/mob/mutant_bodyparts.dmi b/modular_citadel/icons/mob/mutant_bodyparts.dmi
index f89d815b16..741051faa0 100644
Binary files a/modular_citadel/icons/mob/mutant_bodyparts.dmi and b/modular_citadel/icons/mob/mutant_bodyparts.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index f79ca52b3c..2ff341a744 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -2732,7 +2732,6 @@
#include "modular_citadel\code\modules\mob\living\carbon\carbon.dm"
#include "modular_citadel\code\modules\mob\living\carbon\damage_procs.dm"
#include "modular_citadel\code\modules\mob\living\carbon\reindex_screams.dm"
-#include "modular_citadel\code\modules\mob\living\carbon\human\human.dm"
#include "modular_citadel\code\modules\mob\living\carbon\human\human_defense.dm"
#include "modular_citadel\code\modules\mob\living\carbon\human\human_movement.dm"
#include "modular_citadel\code\modules\mob\living\carbon\human\life.dm"