This commit is contained in:
Ghommie
2020-04-13 02:01:01 +02:00
1606 changed files with 335062 additions and 34873 deletions
@@ -33,7 +33,7 @@
hidden_underwear = on_off
hidden_socks = on_off
update_body()
update_body(TRUE)
/mob/living/carbon/human/proc/adjust_arousal(strength,aphro = FALSE,maso = FALSE) // returns all genitals that were adjust
@@ -1,7 +1,7 @@
/obj/item/organ/genital
color = "#fcccb3"
w_class = WEIGHT_CLASS_NORMAL
var/shape = "human"
var/shape
var/sensitivity = 1 // wow if this were ever used that'd be cool but it's not but i'm keeping it for my unshit code
var/genital_flags //see citadel_defines.dm
var/masturbation_verb = "masturbate"
@@ -41,6 +41,9 @@
return
update_size()
update_appearance()
if(genital_flags & UPDATE_OWNER_APPEARANCE && owner && ishuman(owner))
var/mob/living/carbon/human/H = owner
H.update_genitals()
if(linked_organ_slot || (linked_organ && !owner))
update_link()
@@ -49,9 +52,16 @@
var/list/exposed_genitals = list() //Keeping track of them so we don't have to iterate through every genitalia and see if exposed
/obj/item/organ/genital/proc/is_exposed()
if(!owner || CHECK_BITFIELD(genital_flags, GENITAL_INTERNAL) || CHECK_BITFIELD(genital_flags, GENITAL_HIDDEN))
if(!owner || genital_flags & (GENITAL_INTERNAL|GENITAL_HIDDEN))
return FALSE
if(CHECK_BITFIELD(genital_flags, GENITAL_THROUGH_CLOTHES))
if(genital_flags & GENITAL_UNDIES_HIDDEN && ishuman(owner))
var/mob/living/carbon/human/H = owner
if(!(NO_UNDERWEAR in H.dna.species.species_traits))
var/datum/sprite_accessory/underwear/top/T = H.hidden_undershirt ? null : GLOB.undershirt_list[H.undershirt]
var/datum/sprite_accessory/underwear/bottom/B = H.hidden_underwear ? null : GLOB.underwear_list[H.underwear]
if(zone == BODY_ZONE_CHEST ? (T?.covers_chest || B?.covers_chest) : (T?.covers_groin || B?.covers_groin))
return FALSE
if(genital_flags & GENITAL_THROUGH_CLOTHES)
return TRUE
switch(zone) //update as more genitals are added
@@ -60,25 +70,21 @@
if(BODY_ZONE_PRECISE_GROIN)
return owner.is_groin_exposed()
/obj/item/organ/genital/proc/toggle_visibility(visibility)
/obj/item/organ/genital/proc/toggle_visibility(visibility, update = TRUE)
genital_flags &= ~(GENITAL_THROUGH_CLOTHES|GENITAL_HIDDEN|GENITAL_UNDIES_HIDDEN)
if(owner)
owner.exposed_genitals -= src
switch(visibility)
if("Always visible")
ENABLE_BITFIELD(genital_flags, GENITAL_THROUGH_CLOTHES)
DISABLE_BITFIELD(genital_flags, GENITAL_HIDDEN)
if(!(src in owner.exposed_genitals))
if(GEN_VISIBLE_ALWAYS)
genital_flags |= GENITAL_THROUGH_CLOTHES
if(owner)
owner.exposed_genitals += src
if("Hidden by clothes")
DISABLE_BITFIELD(genital_flags, GENITAL_THROUGH_CLOTHES)
DISABLE_BITFIELD(genital_flags, GENITAL_HIDDEN)
if(src in owner.exposed_genitals)
owner.exposed_genitals -= src
if("Always hidden")
DISABLE_BITFIELD(genital_flags, GENITAL_THROUGH_CLOTHES)
ENABLE_BITFIELD(genital_flags, GENITAL_HIDDEN)
if(src in owner.exposed_genitals)
owner.exposed_genitals -= src
if(GEN_VISIBLE_NO_UNDIES)
genital_flags |= GENITAL_UNDIES_HIDDEN
if(GEN_VISIBLE_NEVER)
genital_flags |= GENITAL_HIDDEN
if(ishuman(owner)) //recast to use update genitals proc
if(update && owner && ishuman(owner)) //recast to use update genitals proc
var/mob/living/carbon/human/H = owner
H.update_genitals()
@@ -87,6 +93,10 @@
set name = "Expose/Hide genitals"
set desc = "Allows you to toggle which genitals should show through clothes or not."
if(stat != CONSCIOUS)
to_chat(usr, "<span class='warning'>You can toggle genitals visibility right now...</span>")
return
var/list/genital_list = list()
for(var/obj/item/organ/genital/G in internal_organs)
if(!CHECK_BITFIELD(G.genital_flags, GENITAL_INTERNAL))
@@ -95,10 +105,11 @@
return
//Full list of exposable genitals created
var/obj/item/organ/genital/picked_organ
picked_organ = input(src, "Choose which genitalia to expose/hide", "Expose/Hide genitals", null) in genital_list
if(picked_organ)
var/picked_visibility = input(src, "Choose visibility setting", "Expose/Hide genitals", "Hidden by clothes") in list("Always visible", "Hidden by clothes", "Always hidden")
picked_organ.toggle_visibility(picked_visibility)
picked_organ = input(src, "Choose which genitalia to expose/hide", "Expose/Hide genitals") as null|anything in genital_list
if(picked_organ && (picked_organ in internal_organs))
var/picked_visibility = input(src, "Choose visibility setting", "Expose/Hide genitals") as null|anything in GLOB.genitals_visibility_toggles
if(picked_visibility && picked_organ && (picked_organ in internal_organs))
picked_organ.toggle_visibility(picked_visibility)
return
/mob/living/carbon/verb/toggle_arousal_state()
@@ -182,14 +193,19 @@
if(.)
update()
RegisterSignal(owner, COMSIG_MOB_DEATH, .proc/update_appearance)
if(genital_flags & GENITAL_THROUGH_CLOTHES)
owner.exposed_genitals += src
/obj/item/organ/genital/Remove(special = FALSE)
. = ..()
var/mob/living/carbon/human/H = .
var/mob/living/carbon/C = .
update()
if(!QDELETED(H))
UnregisterSignal(H, COMSIG_MOB_DEATH)
H.update_genitals()
if(!QDELETED(C))
if(genital_flags & UPDATE_OWNER_APPEARANCE && ishuman(C))
var/mob/living/carbon/human/H = .
H.update_genitals()
C.exposed_genitals -= src
UnregisterSignal(C, COMSIG_MOB_DEATH)
//proc to give a player their genitals and stuff when they log in
/mob/living/carbon/human/proc/give_genitals(clean = FALSE)//clean will remove all pre-existing genitals. proc will then give them any genitals that are enabled in their DNA
@@ -208,12 +224,6 @@
give_genital(/obj/item/organ/genital/breasts)
if(dna.features["has_cock"])
give_genital(/obj/item/organ/genital/penis)
/*
if(dna.features["has_ovi"])
give_genital(/obj/item/organ/genital/ovipositor)
if(dna.features["has_eggsack"])
give_genital(/obj/item/organ/genital/eggsack)
*/
/mob/living/carbon/human/proc/give_genital(obj/item/organ/genital/G)
if(!dna || (NOGENITALS in dna.species.species_traits) || getorganslot(initial(G.slot)))
@@ -292,10 +302,21 @@
if(!S || S.icon_state == "none")
continue
var/aroused_state = G.aroused_state && S.alt_aroused
var/accessory_icon = S.icon
var/do_center = S.center
var/dim_x = S.dimension_x
var/dim_y = S.dimension_y
if(G.genital_flags & GENITAL_CAN_TAUR && S.taur_icon && (!S.feat_taur || dna.features[S.feat_taur]) && dna.species.mutant_bodyparts["taur"])
var/datum/sprite_accessory/taur/T = GLOB.taur_list[dna.features["taur"]]
if(T?.taur_mode & S.accepted_taurs)
accessory_icon = S.taur_icon
do_center = TRUE
dim_x = S.taur_dimension_x
dim_y = S.taur_dimension_y
var/mutable_appearance/genital_overlay = mutable_appearance(S.icon, layer = -layer)
if(S.center)
genital_overlay = center_image(genital_overlay, S.dimension_x, S.dimension_y)
var/mutable_appearance/genital_overlay = mutable_appearance(accessory_icon, layer = -layer)
if(do_center)
genital_overlay = center_image(genital_overlay, dim_x, dim_y)
if(dna.species.use_skintones && dna.features["genitals_use_skintone"])
genital_overlay.color = "#[skintone2hex(skin_tone)]"
@@ -312,9 +333,9 @@
genital_overlay.icon_state = "[G.slot]_[S.icon_state]_[size][dna.species.use_skintones ? "_s" : ""]_[aroused_state]_[layertext]"
if(layer == GENITALS_FRONT_LAYER && CHECK_BITFIELD(G.genital_flags, GENITAL_THROUGH_CLOTHES))
if(layers_num[layer] == GENITALS_FRONT_LAYER && G.genital_flags & GENITAL_THROUGH_CLOTHES)
genital_overlay.layer = -GENITALS_EXPOSED_LAYER
LAZYADD(fully_exposed, genital_overlay) // to be added to a layer with higher priority than clothes, hence the name of the bitflag.
LAZYADD(fully_exposed, genital_overlay)
else
genital_overlay.layer = -layers_num[layer]
standing += genital_overlay
@@ -343,11 +364,10 @@
if(ishuman(src) && dna.species.id == "human")
dna.features["genitals_use_skintone"] = TRUE
dna.species.use_skintones = TRUE
if(MUTCOLORS)
if(src.dna.species.fixed_mut_color)
dna.features["cock_color"] = "[dna.species.fixed_mut_color]"
dna.features["breasts_color"] = "[dna.species.fixed_mut_color]"
return
if(src.dna.species.fixed_mut_color)
dna.features["cock_color"] = "[dna.species.fixed_mut_color]"
dna.features["breasts_color"] = "[dna.species.fixed_mut_color]"
return
//So people who haven't set stuff up don't get rainbow surprises.
dna.features["cock_color"] = "[dna.features["mcolor"]]"
dna.features["breasts_color"] = "[dna.features["mcolor"]]"
@@ -1,5 +1,10 @@
/datum/sprite_accessory
var/alt_aroused = FALSE //CIT CODE if this is TRUE, then the genitals will use an alternate icon_state when aroused.
var/taur_icon //leave null if the genital doesn't have a taur counterpart.
var/accepted_taurs = STYLE_HOOF_TAURIC|STYLE_PAW_TAURIC //Types that match with the accessory.
var/feat_taur //the text string of the dna feature to check for those who want to opt out.
var/taur_dimension_y = 32
var/taur_dimension_x = 32
//DICKS,COCKS,PENISES,WHATEVER YOU WANT TO CALL THEM
@@ -8,6 +13,7 @@
name = "penis" //the preview name of the accessory
color_src = "cock_color"
alt_aroused = TRUE
feat_taur = "cock_taur"
/datum/sprite_accessory/penis/human
icon_state = "human"
@@ -16,10 +22,14 @@
/datum/sprite_accessory/penis/knotted
icon_state = "knotted"
name = "Knotted"
taur_icon = 'modular_citadel/icons/obj/genitals/taur_penis_onmob.dmi'
taur_dimension_y = 64
/datum/sprite_accessory/penis/flared
icon_state = "flared"
name = "Flared"
taur_icon = 'modular_citadel/icons/obj/genitals/taur_penis_onmob.dmi'
taur_dimension_y = 64
/datum/sprite_accessory/penis/barbknot
icon_state = "barbknot"
@@ -28,6 +38,8 @@
/datum/sprite_accessory/penis/tapered
icon_state = "tapered"
name = "Tapered"
taur_icon = 'modular_citadel/icons/obj/genitals/taur_penis_onmob.dmi'
taur_dimension_y = 64
/datum/sprite_accessory/penis/tentacle
icon_state = "tentacle"
@@ -41,46 +53,16 @@
icon_state = "hemiknot"
name = "Knotted Hemi"
////////////////////////
// Taur cocks go here //
////////////////////////
/datum/sprite_accessory/penis/taur_flared
icon = 'modular_citadel/icons/obj/genitals/taur_penis_onmob.dmi' //Needed larger width
icon_state = "flared"
name = "Taur, Flared"
center = TRUE //Center the image 'cause 2-tile wide.
dimension_x = 64
/datum/sprite_accessory/penis/taur_knotted
icon = 'modular_citadel/icons/obj/genitals/taur_penis_onmob.dmi' //Needed larger width
icon_state = "knotted"
name = "Taur, Knotted"
center = TRUE //Center the image 'cause 2-tile wide.
dimension_x = 64
/datum/sprite_accessory/penis/taur_tapered
icon = 'modular_citadel/icons/obj/genitals/taur_penis_onmob.dmi' //Needed larger width
icon_state = "tapered"
name = "Taur, Tapered"
center = TRUE //Center the image 'cause 2-tile wide.
dimension_x = 64
//Testicles
//These ones aren't inert
/datum/sprite_accessory/testicles
icon = 'modular_citadel/icons/obj/genitals/testicles_onmob.dmi'
icon_state = "testicle"
name = "testicle" //the preview name of the accessory
color_src = "balls_color"
/datum/sprite_accessory/testicles/hidden
icon_state = "none"
name = "Hidden"
/datum/sprite_accessory/testicles/single
icon_state = "single"
name = "Single"
name = "Single" //Single as "single pair", for clarity.
//Vaginas
/datum/sprite_accessory/vagina
@@ -137,14 +119,3 @@
/datum/sprite_accessory/breasts/sextuple
icon_state = "sextuple"
name = "Sextuple"
//OVIPOSITORS BE HERE
/datum/sprite_accessory/ovipositor
icon = 'modular_citadel/icons/obj/genitals/penis_onmob.dmi'
icon_state = null
name = "Ovipositor" //the preview name of the accessory
color_src = "cock_color"
/datum/sprite_accessory/ovipositor/knotted
icon_state = "knotted"
name = "Knotted"
@@ -8,11 +8,11 @@
icon = 'modular_citadel/icons/obj/genitals/breasts.dmi'
zone = BODY_ZONE_CHEST
slot = ORGAN_SLOT_BREASTS
size = "c" //refer to the breast_values static list below for the cups associated number values
size = BREASTS_SIZE_DEF // "c". Refer to the breast_values static list below for the cups associated number values
fluid_id = /datum/reagent/consumable/milk
fluid_rate = MILK_RATE
shape = "pair"
genital_flags = CAN_MASTURBATE_WITH|CAN_CLIMAX_WITH|GENITAL_FUID_PRODUCTION|GENITAL_CAN_AROUSE
shape = DEF_BREASTS_SHAPE
genital_flags = CAN_MASTURBATE_WITH|CAN_CLIMAX_WITH|GENITAL_FUID_PRODUCTION|GENITAL_CAN_AROUSE|UPDATE_OWNER_APPEARANCE|GENITAL_UNDIES_HIDDEN
masturbation_verb = "massage"
arousal_verb = "Your breasts start feeling sensitive"
unarousal_verb = "Your breasts no longer feel sensitive"
@@ -64,9 +64,6 @@
icon_state += "_s"
else
color = "#[owner.dna.features["breasts_color"]]"
if(ishuman(owner))
var/mob/living/carbon/human/H = owner
H.update_genitals()
//Allows breasts to grow and change size, with sprite changes too.
//maximum wah
@@ -133,6 +130,7 @@
cached_size = size
size = breast_values[size]
prev_size = cached_size
toggle_visibility(D.features["breasts_visibility"], FALSE)
#undef BREASTS_ICON_MIN_SIZE
#undef BREASTS_ICON_MAX_SIZE
@@ -1,14 +0,0 @@
/obj/item/organ/genital/eggsack
name = "Egg sack"
desc = "An egg producing reproductive organ."
icon_state = "egg_sack"
icon = 'modular_citadel/icons/obj/genitals/ovipositor.dmi'
zone = BODY_ZONE_PRECISE_GROIN
slot = ORGAN_SLOT_TESTICLES
genital_flags = GENITAL_INTERNAL|GENITAL_BLACKLISTED //unimplemented
linked_organ_slot = ORGAN_SLOT_PENIS
color = null //don't use the /genital color since it already is colored
var/egg_girth = EGG_GIRTH_DEF
var/cum_mult = CUM_RATE_MULT
var/cum_rate = CUM_RATE
var/cum_efficiency = CUM_EFFICIENCY
@@ -1,16 +0,0 @@
/obj/item/organ/genital/ovipositor
name = "Ovipositor"
desc = "An egg laying reproductive organ."
icon_state = "ovi_knotted_2"
icon = 'modular_citadel/icons/obj/genitals/ovipositor.dmi'
zone = BODY_ZONE_PRECISE_GROIN
slot = ORGAN_SLOT_PENIS
genital_flags = GENITAL_BLACKLISTED //unimplemented
shape = "knotted"
size = 3
layer_index = PENIS_LAYER_INDEX
var/length = 6 //inches
var/girth = 0
var/girth_ratio = COCK_DIAMETER_RATIO_DEF //citadel_defines.dm for these defines
var/knot_girth_ratio = KNOT_GIRTH_RATIO_DEF
var/list/oviflags = list()
@@ -8,9 +8,10 @@
masturbation_verb = "stroke"
arousal_verb = "You pop a boner"
unarousal_verb = "Your boner goes down"
genital_flags = CAN_MASTURBATE_WITH|CAN_CLIMAX_WITH|GENITAL_CAN_AROUSE
genital_flags = CAN_MASTURBATE_WITH|CAN_CLIMAX_WITH|GENITAL_CAN_AROUSE|UPDATE_OWNER_APPEARANCE|GENITAL_UNDIES_HIDDEN|GENITAL_CAN_TAUR
linked_organ_slot = ORGAN_SLOT_TESTICLES
fluid_transfer_factor = 0.5
shape = DEF_COCK_SHAPE
size = 2 //arbitrary value derived from length and diameter for sprites.
layer_index = PENIS_LAYER_INDEX
var/length = 6 //inches
@@ -65,9 +66,9 @@
if(owner)
if (round(length) > round(prev_length))
to_chat(owner, "<span class='warning'>Your [pick(GLOB.gentlemans_organ_names)] [pick("swells up to", "flourishes into", "expands into", "bursts forth into", "grows eagerly into", "amplifys into")] a [uppertext(round(length))] inch penis.</b></span>")
to_chat(owner, "<span class='warning'>Your [pick(GLOB.dick_nouns)] [pick("swells up to", "flourishes into", "expands into", "bursts forth into", "grows eagerly into", "amplifys into")] a [uppertext(round(length))] inch penis.</b></span>")
else if ((round(length) < round(prev_length)) && (length > 0.5))
to_chat(owner, "<span class='warning'>Your [pick(GLOB.gentlemans_organ_names)] [pick("shrinks down to", "decreases into", "diminishes into", "deflates into", "shrivels regretfully into", "contracts into")] a [uppertext(round(length))] inch penis.</b></span>")
to_chat(owner, "<span class='warning'>Your [pick(GLOB.dick_nouns)] [pick("shrinks down to", "decreases into", "diminishes into", "deflates into", "shrivels regretfully into", "contracts into")] a [uppertext(round(length))] inch penis.</b></span>")
icon_state = sanitize_text("penis_[shape]_[size]")
diameter = (length * diameter_ratio)//Is it just me or is this ludicous, why not make it exponentially decay?
@@ -78,7 +79,6 @@
var/icon_shape = S ? S.icon_state : "human"
icon_state = "penis_[icon_shape]_[size]"
var/lowershape = lowertext(shape)
desc = "You see [aroused_state ? "an erect" : "a flaccid"] [lowershape] [name]. You estimate it's about [round(length, 0.25)] inch[round(length, 0.25) != 1 ? "es" : ""] long and [round(diameter, 0.25)] inch[round(diameter, 0.25) != 1 ? "es" : ""] in diameter."
if(owner)
if(owner.dna.species.use_skintones && owner.dna.features["genitals_use_skintone"])
@@ -88,9 +88,12 @@
icon_state += "_s"
else
color = "#[owner.dna.features["cock_color"]]"
if(ishuman(owner))
var/mob/living/carbon/human/H = owner
H.update_genitals()
if(genital_flags & GENITAL_CAN_TAUR && S?.taur_icon && (!S.feat_taur || owner.dna.features[S.feat_taur]) && owner.dna.species.mutant_bodyparts["taur"])
var/datum/sprite_accessory/taur/T = GLOB.taur_list[owner.dna.features["taur"]]
if(T.taur_mode & S.accepted_taurs) //looks out of place on those.
lowershape = "taur, [lowershape]"
desc = "You see [aroused_state ? "an erect" : "a flaccid"] [lowershape] [name]. You estimate it's about [round(length, 0.25)] inch[round(length, 0.25) != 1 ? "es" : ""] long and [round(diameter, 0.25)] inch[round(diameter, 0.25) != 1 ? "es" : ""] in diameter."
/obj/item/organ/genital/penis/get_features(mob/living/carbon/human/H)
var/datum/dna/D = H.dna
@@ -102,3 +105,4 @@
diameter_ratio = D.features["cock_diameter_ratio"]
shape = D.features["cock_shape"]
prev_length = length
toggle_visibility(D.features["cock_visibility"], FALSE)
@@ -9,10 +9,9 @@
arousal_verb = "Your balls ache a little"
unarousal_verb = "Your balls finally stop aching, again"
linked_organ_slot = ORGAN_SLOT_PENIS
genital_flags = CAN_MASTURBATE_WITH|MASTURBATE_LINKED_ORGAN|GENITAL_FUID_PRODUCTION
genital_flags = CAN_MASTURBATE_WITH|MASTURBATE_LINKED_ORGAN|GENITAL_FUID_PRODUCTION|UPDATE_OWNER_APPEARANCE|GENITAL_UNDIES_HIDDEN
var/size_name = "average"
shape = "Single"
var/sack_size = BALLS_SACK_SIZE_DEF
shape = DEF_BALLS_SHAPE
fluid_id = /datum/reagent/consumable/semen
masturbation_verb = "massage"
layer_index = TESTICLES_LAYER_INDEX
@@ -54,9 +53,6 @@
icon_state += "_s"
else
color = "#[owner.dna.features["balls_color"]]"
if(ishuman(owner))
var/mob/living/carbon/human/H = owner
H.update_genitals()
/obj/item/organ/genital/testicles/get_features(mob/living/carbon/human/H)
var/datum/dna/D = H.dna
@@ -64,10 +60,8 @@
color = "#[skintone2hex(H.skin_tone)]"
else
color = "#[D.features["balls_color"]]"
sack_size = D.features["balls_sack_size"]
shape = D.features["balls_shape"]
if(D.features["balls_shape"] == "Hidden")
ENABLE_BITFIELD(genital_flags, GENITAL_INTERNAL)
fluid_rate = D.features["balls_cum_rate"]
fluid_mult = D.features["balls_cum_mult"]
fluid_efficiency = D.features["balls_efficiency"]
toggle_visibility(D.features["balls_visibility"], FALSE)
@@ -6,7 +6,8 @@
zone = BODY_ZONE_PRECISE_GROIN
slot = "vagina"
size = 1 //There is only 1 size right now
genital_flags = CAN_MASTURBATE_WITH|CAN_CLIMAX_WITH|GENITAL_CAN_AROUSE
shape = DEF_VAGINA_SHAPE
genital_flags = CAN_MASTURBATE_WITH|CAN_CLIMAX_WITH|GENITAL_CAN_AROUSE|GENITAL_UNDIES_HIDDEN
masturbation_verb = "finger"
arousal_verb = "You feel wetness on your crotch"
unarousal_verb = "You no longer feel wet"
@@ -69,3 +70,4 @@
else
color = "[D.features["vag_color"]]"
shape = "[D.features["vag_shape"]]"
toggle_visibility(D.features["vag_visibility"], FALSE)
@@ -57,7 +57,7 @@
/datum/gear/geisha
name = "Geisha suit"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/geisha
path = /obj/item/clothing/under/costume/geisha
ckeywhitelist = list("atiefling")
/datum/gear/specialscarf
@@ -123,7 +123,7 @@
/datum/gear/mankini
name = "Mankini"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/mankini
path = /obj/item/clothing/under/misc/stripper/mankini
ckeywhitelist = list("zigfie")
/datum/gear/pinkshoes
@@ -160,7 +160,7 @@
/datum/gear/performersoutfit
name = "Bluish performer's outfit"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/singery/custom
path = /obj/item/clothing/under/costume/singer/yellow/custom
ckeywhitelist = list("killer402402")
/datum/gear/vermillion
@@ -184,7 +184,7 @@
/datum/gear/naomisweater
name = "worn black sweater"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/bb_sweater/black/naomi
path = /obj/item/clothing/under/sweater/black/naomi
ckeywhitelist = list("technicalmagi")
/datum/gear/naomicollar
@@ -196,7 +196,7 @@
/datum/gear/gladiator
name = "Gladiator Armor"
category = SLOT_WEAR_SUIT
path = /obj/item/clothing/under/gladiator
path = /obj/item/clothing/under/costume/gladiator
ckeywhitelist = list("aroche")
/datum/gear/bloodredtie
@@ -330,7 +330,7 @@ datum/gear/darksabresheath
/datum/gear/Divine_robes
name = "Divine robes"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/lunasune
path = /obj/item/clothing/under/custom/lunasune
ckeywhitelist = list("invader4352")
/datum/gear/gothcoat
@@ -348,7 +348,7 @@ datum/gear/darksabresheath
/datum/gear/sharkcloth
name = "Leon's Skimpy Outfit"
category = SLOT_WEAR_SUIT
path = /obj/item/clothing/under/leoskimpy
path = /obj/item/clothing/under/custom/leoskimpy
ckeywhitelist = list("spectrosis")
/datum/gear/mimemask
@@ -360,7 +360,7 @@ datum/gear/darksabresheath
/datum/gear/mimeoveralls
name = "Mime's Overalls"
category = SLOT_WEAR_SUIT
path = /obj/item/clothing/under/mimeoveralls
path = /obj/item/clothing/under/custom/mimeoveralls
ckeywhitelist = list("pireamaineach")
/datum/gear/soulneck
@@ -408,7 +408,7 @@ datum/gear/darksabresheath
/datum/gear/mw2_russian_para
name = "Russian Paratrooper Jumper"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/mw2_russian_para
path = /obj/item/clothing/under/custom/mw2_russian_para
ckeywhitelist = list("investigator77")
/datum/gear/longblackgloves
@@ -420,13 +420,13 @@ datum/gear/darksabresheath
/datum/gear/trendy_fit
name = "Trendy Fit"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/trendy_fit
path = /obj/item/clothing/under/custom/trendy_fit
ckeywhitelist = list("midgetdragon")
/datum/gear/singery
name = "Yellow Performer Outfit"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/singery
path = /obj/item/clothing/under/costume/singer/yellow
ckeywhitelist = list("maxlynchy")
/datum/gear/csheet
@@ -462,7 +462,7 @@ datum/gear/darksabresheath
/datum/gear/mikubikini
name = "starlight singer bikini"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/mikubikini
path = /obj/item/clothing/under/custom/mikubikini
ckeywhitelist = list("grandvegeta")
/datum/gear/mikujacket
@@ -14,21 +14,21 @@
/datum/gear/bluescrubs
name = "Blue Scrubs"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/rank/medical/blue
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/greenscrubs
name = "Green Scrubs"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/rank/medical/green
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/purplescrubs
name = "Purple Scrubs"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/rank/medical/purple
path = /obj/item/clothing/under/rank/medical/doctor/purple
restricted_roles = list("Medical Doctor", "Chief Medical Officer", "Geneticist", "Chemist", "Virologist")
restricted_desc = "Medical"
@@ -42,6 +42,6 @@
/datum/gear/nursesuit
name = "Nurse Suit"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/rank/nursesuit
path = /obj/item/clothing/under/rank/medical/doctor/nurse
restricted_roles = list("Medical Doctor", "Chief Medical Officer", "Geneticist", "Chemist", "Virologist")
restricted_desc = "Medical"
@@ -1,7 +1,7 @@
/datum/gear/navyblueuniformhos
name = "Head of Security navyblue uniform"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/rank/head_of_security/navyblue
path = /obj/item/clothing/under/rank/security/head_of_security/formal
restricted_roles = list("Head of Security")
/datum/gear/navybluehosberet
@@ -31,7 +31,7 @@
/datum/gear/navyblueuniformofficer
name = "Security officer navyblue uniform"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/rank/security/navyblue
path = /obj/item/clothing/under/rank/security/officer/formal
restricted_roles = list("Security Officer")
/datum/gear/navybluejacketwarden
@@ -49,19 +49,19 @@
/datum/gear/navyblueuniformwarden
name = "Warden navyblue uniform"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/rank/warden/navyblue
path = /obj/item/clothing/under/rank/security/warden/formal
restricted_roles = list("Warden")
/datum/gear/secskirt
name = "Security skirt"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/rank/security/skirt
path = /obj/item/clothing/under/rank/security/officer/skirt
restricted_roles = list("Security Officer", "Warden", "Head of Security")
/datum/gear/hosskirt
name = "Head of security's skirt"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/rank/head_of_security/skirt
path = /obj/item/clothing/under/rank/security/head_of_security/skirt
restricted_roles = list("Head of Security")
/datum/gear/sechud
@@ -1,7 +1,7 @@
/datum/gear/greytidestationwide
name = "Staff Assistant's jumpsuit"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/staffassistant
path = /obj/item/clothing/under/misc/staffassistant
restricted_roles = list("Assistant")
/datum/gear/neetsuit
@@ -1,136 +1,136 @@
/datum/gear/suitblack
name = "Black suit"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/suit_jacket
path = /obj/item/clothing/under/suit/black
/datum/gear/suitgreen
name = "Green suit"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/suit_jacket/green
path = /obj/item/clothing/under/suit/green
/datum/gear/suitred
name = "Red suit"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/suit_jacket/red
path = /obj/item/clothing/under/suit/red
/datum/gear/suitcharcoal
name = "Charcoal suit"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/suit_jacket/charcoal
path = /obj/item/clothing/under/suit/charcoal
/datum/gear/suitnavy
name = "Navy suit"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/suit_jacket/navy
path = /obj/item/clothing/under/suit/navy
/datum/gear/suitburgundy
name = "Burgundy suit"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/suit_jacket/burgundy
path = /obj/item/clothing/under/suit/burgundy
/datum/gear/suittan
name = "Tan suit"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/suit_jacket/tan
path = /obj/item/clothing/under/suit/tan
/datum/gear/suitwhite
name = "White suit"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/suit_jacket/white
path = /obj/item/clothing/under/suit/white
/datum/gear/assistantformal
name = "Assistant's formal uniform"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/assistantformal
path = /obj/item/clothing/under/misc/assistantformal
/datum/gear/maidcostume
name = "Maid costume"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/maid
path = /obj/item/clothing/under/costume/maid
/datum/gear/mailmanuniform
name = "Mailman's jumpsuit"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/rank/mailman
path = /obj/item/clothing/under/misc/mailman
/datum/gear/skirtblack
name = "Black skirt"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/skirt/black
path = /obj/item/clothing/under/dress/skirt
/datum/gear/skirtblue
name = "Blue skirt"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/skirt/blue
path = /obj/item/clothing/under/dress/skirt/blue
/datum/gear/skirtred
name = "Red skirt"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/skirt/red
path = /obj/item/clothing/under/dress/skirt/red
/datum/gear/skirtpurple
name = "Purple skirt"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/skirt/purple
path = /obj/item/clothing/under/dress/skirt/purple
/datum/gear/skirtplaid
name = "Plaid skirt"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/plaid_skirt
path = /obj/item/clothing/under/dress/skirt/plaid
/datum/gear/schoolgirlblue
name = "Blue Schoolgirl Uniform"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/schoolgirl
path = /obj/item/clothing/under/costume/schoolgirl
/datum/gear/schoolgirlred
name = "Red Schoolgirl Uniform"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/schoolgirl/red
path = /obj/item/clothing/under/costume/schoolgirl/red
/datum/gear/schoolgirlgreen
name = "Green Schoolgirl Uniform"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/schoolgirl/green
path = /obj/item/clothing/under/costume/schoolgirl/green
/datum/gear/schoolgirlorange
name = "Orange Schoolgirl Uniform"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/schoolgirl/orange
path = /obj/item/clothing/under/costume/schoolgirl/orange
/datum/gear/stripeddress
name = "Striped Dress"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/stripeddress
path = /obj/item/clothing/under/dress/striped
/datum/gear/sundresswhite
name = "White Sundress"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/sundresswhite
path = /obj/item/clothing/under/dress/sundress/white
/datum/gear/sundress
name = "Sundress"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/sundress
path = /obj/item/clothing/under/dress/sundress
/datum/gear/greendress
name = "Green Dress"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/greendress
path = /obj/item/clothing/under/dress/green
/datum/gear/pinkdress
name = "Pink Dress"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/pinkdress
path = /obj/item/clothing/under/dress/pink
/datum/gear/flowerdress
name = "Flower Dress"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/flowerdress
path = /obj/item/clothing/under/dress/flower
/datum/gear/sweptskirt
name = "Swept skirt"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/sweptskirt
path = /obj/item/clothing/under/dress/skirt/swept
/datum/gear/croptop
name = "Croptop"
@@ -145,7 +145,7 @@
/datum/gear/kilt
name = "Kilt"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/kilt
path = /obj/item/clothing/under/costume/kilt
/datum/gear/camoshorts
name = "Camo Pants"
@@ -222,54 +222,54 @@
/datum/gear/creamsweater
name = "Cream Commando Sweater"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/bb_sweater
path = /obj/item/clothing/under/sweater
/datum/gear/blacksweater
name = "Black Commando Sweater"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/bb_sweater/black
path = /obj/item/clothing/under/sweater/black
/datum/gear/purpsweater
name = "Purple Commando Sweater"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/bb_sweater/purple
path = /obj/item/clothing/under/sweater/purple
/datum/gear/greensweater
name = "Green Commando Sweater"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/bb_sweater/green
path = /obj/item/clothing/under/sweater/green
/datum/gear/redsweater
name = "Red Commando Sweater"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/bb_sweater/red
path = /obj/item/clothing/under/sweater/red
/datum/gear/bluesweater
name = "Navy Commando Sweater"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/bb_sweater/blue
path = /obj/item/clothing/under/sweater/blue
/datum/gear/keyholesweater
name = "Keyhole Sweater"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/keyholesweater
path = /obj/item/clothing/under/misc/keyholesweater
/datum/gear/polykilt
name = "Polychromic Kilt"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/polychromic/kilt
path = /obj/item/clothing/under/costume/kilt/polychromic
cost = 3
/datum/gear/polyshorts
name = "Polychromic Shorts"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/polychromic/shorts
path = /obj/item/clothing/under/misc/polyshorts
cost = 3
/datum/gear/polyshortpants
name = "Polychromic Athletic Shorts"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/polychromic/shortpants
path = /obj/item/clothing/under/shorts/polychromic
cost = 2
// Trekie things
@@ -277,21 +277,21 @@
/datum/gear/trekcmdtos
name = "TOS uniform, cmd"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/rank/trek/command
path = /obj/item/clothing/under/trek/command
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/trekmedscitos
name = "TOS uniform, med/sci"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/rank/trek/medsci
path = /obj/item/clothing/under/trek/medsci
restricted_desc = "Medical and Science"
restricted_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Virologist","Geneticist","Research Director","Scientist", "Roboticist")
/datum/gear/trekengtos
name = "TOS uniform, ops/sec"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/rank/trek/engsec
path = /obj/item/clothing/under/trek/engsec
restricted_desc = "Engineering and Security"
restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer","Head of Security","Cargo Technician", "Shaft Miner", "Quartermaster")
@@ -299,21 +299,21 @@
/datum/gear/trekcmdtng
name = "TNG uniform, cmd"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/rank/trek/command/next
path = /obj/item/clothing/under/trek/command/next
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/trekmedscitng
name = "TNG uniform, med/sci"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/rank/trek/medsci/next
path = /obj/item/clothing/under/trek/medsci/next
restricted_desc = "Medical and Science"
restricted_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Virologist","Geneticist","Research Director","Scientist", "Roboticist")
/datum/gear/trekengtng
name = "TNG uniform, ops/sec"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/rank/trek/engsec/next
path = /obj/item/clothing/under/trek/engsec/next
restricted_desc = "Engineering and Security"
restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer","Head of Security","Cargo Technician", "Shaft Miner", "Quartermaster")
@@ -321,21 +321,21 @@
/datum/gear/trekcmdvoy
name = "VOY uniform, cmd"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/rank/trek/command/voy
path = /obj/item/clothing/under/trek/command/voy
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/trekmedscivoy
name = "VOY uniform, med/sci"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/rank/trek/medsci/voy
path = /obj/item/clothing/under/trek/medsci/voy
restricted_desc = "Medical and Science"
restricted_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Virologist","Geneticist","Research Director","Scientist", "Roboticist")
/datum/gear/trekengvoy
name = "VOY uniform, ops/sec"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/rank/trek/engsec/voy
path = /obj/item/clothing/under/trek/engsec/voy
restricted_desc = "Engineering and Security"
restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer","Head of Security","Cargo Technician", "Shaft Miner", "Quartermaster")
@@ -343,21 +343,21 @@
/datum/gear/trekcmdds9
name = "DS9 uniform, cmd"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/rank/trek/command/ds9
path = /obj/item/clothing/under/trek/command/ds9
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/trekmedscids9
name = "DS9 uniform, med/sci"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/rank/trek/medsci/ds9
path = /obj/item/clothing/under/trek/medsci/ds9
restricted_desc = "Medical and Science"
restricted_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Virologist","Geneticist","Research Director","Scientist", "Roboticist")
/datum/gear/trekengds9
name = "DS9 uniform, ops/sec"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/rank/trek/engsec/ds9
path = /obj/item/clothing/under/trek/engsec/ds9
restricted_desc = "Engineering and Security"
restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer","Head of Security","Cargo Technician", "Shaft Miner", "Quartermaster")
@@ -365,21 +365,21 @@
/datum/gear/trekcmdent
name = "ENT uniform, cmd"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/rank/trek/command/ent
path = /obj/item/clothing/under/trek/command/ent
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/trekmedscient
name = "ENT uniform, med/sci"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/rank/trek/medsci/ent
path = /obj/item/clothing/under/trek/medsci/ent
restricted_desc = "Medical and Science"
restricted_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Virologist","Geneticist","Research Director","Scientist", "Roboticist")
/datum/gear/trekengent
name = "ENT uniform, ops/sec"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/rank/trek/engsec/ent
path = /obj/item/clothing/under/trek/engsec/ent
restricted_desc = "Engineering and Security"
restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer","Head of Security","Cargo Technician", "Shaft Miner", "Quartermaster")
@@ -387,75 +387,75 @@
/datum/gear/gear_harnesses
name = "Gear Harness"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/gear_harness
path = /obj/item/clothing/under/misc/gear_harness
//Christmas
/*Commenting out Until next Christmas or made automatic
/datum/gear/christmasmaler
name = "Red Masculine Christmas Suit"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/christmas/christmasmaler
path = /obj/item/clothing/under/costume/christmas
/datum/gear/christmasmaleg
name = "Green Masculine Christmas Suit"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/christmas/christmasmaleg
path = /obj/item/clothing/under/costume/christmas/green
/datum/gear/christmasfemaler
name = "Red Feminine Christmas Suit"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/christmas/christmasfemaler
path = /obj/item/clothing/under/costume/christmas/croptop
/datum/gear/christmasfemaleg
name = "Green Feminine Christmas Suit"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/christmas/christmasfemaleg
path = /obj/item/clothing/under/costume/christmas/croptop/green
/datum/gear/pinkstripper
name = "Pink stripper outfit"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/stripper_pink
path = /obj/item/clothing/under/misc/stripper
cost = 3
*/
/datum/gear/greenstripper
name = "Green stripper outfit"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/stripper_green
path = /obj/item/clothing/under/misc/stripper/green
cost = 3
/datum/gear/qipao
name = "Qipao, Black"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/lunar/qipao
path = /obj/item/clothing/under/costume/qipao
cost = 3
/datum/gear/qipao/white
name = "Qipao, White"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/lunar/qipao/white
path = /obj/item/clothing/under/costume/qipao/white
cost = 3
/datum/gear/qipao/red
name = "Qipao, Red"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/lunar/qipao/red
path = /obj/item/clothing/under/costume/qipao/red
cost = 3
/datum/gear/cheongsam
name = "Cheongsam, Black"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/lunar/cheongsam
path = /obj/item/clothing/under/costume/cheongsam
cost = 3
/datum/gear/cheongsam/white
name = "Cheongsam, White"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/lunar/cheongsam/white
path = /obj/item/clothing/under/costume/cheongsam/white
cost = 3
/datum/gear/cheongsam/red
name = "Cheongsam, Red"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/lunar/cheongsam/red
path = /obj/item/clothing/under/costume/cheongsam/red
cost = 3
@@ -45,10 +45,3 @@
else
if(L[slot_to_string(slot)] < DEFAULT_SLOT_AMT)
return TRUE
/datum/preferences/copy_to(mob/living/carbon/human/character, icon_updates = 1)
..()
character.give_genitals(TRUE)
character.flavor_text = features["flavor_text"] //Let's update their flavor_text at least initially
if(icon_updates)
character.update_genitals()
@@ -44,31 +44,6 @@
WRITE_FILE(S["feature_xeno_tail"], features["xenotail"])
WRITE_FILE(S["feature_xeno_dors"], features["xenodorsal"])
WRITE_FILE(S["feature_xeno_head"], features["xenohead"])
//cock features
WRITE_FILE(S["feature_has_cock"], features["has_cock"])
WRITE_FILE(S["feature_cock_shape"], features["cock_shape"])
WRITE_FILE(S["feature_cock_color"], features["cock_color"])
WRITE_FILE(S["feature_cock_length"], features["cock_length"])
WRITE_FILE(S["feature_cock_girth"], features["cock_girth"])
WRITE_FILE(S["feature_has_sheath"], features["sheath_color"])
//balls features
WRITE_FILE(S["feature_has_balls"], features["has_balls"])
WRITE_FILE(S["feature_balls_color"], features["balls_color"])
WRITE_FILE(S["feature_balls_size"], features["balls_size"])
WRITE_FILE(S["feature_balls_shape"], features["balls_shape"])
WRITE_FILE(S["feature_balls_sack_size"], features["balls_sack_size"])
//breasts features
WRITE_FILE(S["feature_has_breasts"], features["has_breasts"])
WRITE_FILE(S["feature_breasts_size"], features["breasts_size"])
WRITE_FILE(S["feature_breasts_shape"], features["breasts_shape"])
WRITE_FILE(S["feature_breasts_color"], features["breasts_color"])
WRITE_FILE(S["feature_breasts_producing"], features["breasts_producing"])
//vagina features
WRITE_FILE(S["feature_has_vag"], features["has_vag"])
WRITE_FILE(S["feature_vag_shape"], features["vag_shape"])
WRITE_FILE(S["feature_vag_color"], features["vag_color"])
//womb features
WRITE_FILE(S["feature_has_womb"], features["has_womb"])
//flavor text
WRITE_FILE(S["feature_flavor_text"], features["flavor_text"])
@@ -7,7 +7,7 @@
icon = 'modular_citadel/icons/obj/clothing/cit_neck.dmi'
item_state = "undertale"
icon_state = "undertale"
alternate_worn_icon = 'modular_citadel/icons/mob/clothing/necks.dmi'
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
@@ -1,9 +0,0 @@
/obj/item/flightpack
armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 20, "fire" = 20, "acid" = 20)
/obj/item/clothing/suit/space/hardsuit/flightsuit
armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 20, "fire" = 20, "acid" = 20)
/obj/item/clothing/head/helmet/space/hardsuit/flightsuit
armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 20, "fire" = 20, "acid" = 20)
@@ -2,9 +2,8 @@
name = "polychromic cloak"
desc = "For when you want to show off your horrible colour coordination skills."
icon = 'modular_citadel/icons/polyclothes/item/neck.dmi'
alternate_worn_icon = 'modular_citadel/icons/polyclothes/mob/neck.dmi'
mob_overlay_icon = 'modular_citadel/icons/polyclothes/mob/neck.dmi'
icon_state = "polyce"
item_color = "polyce"
item_state = "qmcloak"
hasprimary = TRUE
hassecondary = TRUE
@@ -13,20 +12,20 @@
secondary_color = "#FFFFFF"
tertiary_color = "#808080"
/obj/item/clothing/neck/cloak/polychromic/worn_overlays(isinhands, icon_file, used_state, style_flags = NONE) //this is where the main magic happens. Also mandates that ALL polychromic stuff MUST USE alternate_worn_icon
/obj/item/clothing/neck/cloak/polychromic/worn_overlays(isinhands, icon_file, used_state, style_flags = NONE) //this is where the main magic happens.
. = ..()
if(hasprimary | hassecondary | hastertiary)
if(!isinhands) //prevents the worn sprites from showing up if you're just holding them
if(hasprimary) //checks if overlays are enabled
var/mutable_appearance/primary_worn = mutable_appearance(alternate_worn_icon, "[item_color]-primary") //automagical sprite selection
var/mutable_appearance/primary_worn = mutable_appearance(mob_overlay_icon, "[icon_state]-primary") //automagical sprite selection
primary_worn.color = primary_color //colors the overlay
. += primary_worn //adds the overlay onto the buffer list to draw on the mob sprite.
if(hassecondary)
var/mutable_appearance/secondary_worn = mutable_appearance(alternate_worn_icon, "[item_color]-secondary")
var/mutable_appearance/secondary_worn = mutable_appearance(mob_overlay_icon, "[icon_state]-secondary")
secondary_worn.color = secondary_color
. += secondary_worn
if(hastertiary)
var/mutable_appearance/tertiary_worn = mutable_appearance(alternate_worn_icon, "[item_color]-tertiary")
var/mutable_appearance/tertiary_worn = mutable_appearance(mob_overlay_icon, "[icon_state]-tertiary")
tertiary_worn.color = tertiary_color
. += tertiary_worn
@@ -34,7 +33,6 @@
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"
item_color = "polyce"
primary_color = "#808080" //RGB in hexcode
secondary_color = "#8CC6FF"
tertiary_color = "#FF3535"
@@ -8,7 +8,7 @@
/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.."
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/suit.dmi'
mob_overlay_icon = 'modular_citadel/icons/mob/citadel/suit.dmi'
icon_state = "hostrench"
item_state = "hostrench"
mutantrace_variation = NONE
@@ -8,85 +8,6 @@
// 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
///////////////////////////////////////////////////////////////////////////////////
/obj/item/clothing/under/rank/trek
name = "Section 31 Uniform"
desc = "Oooh... right."
icon = 'modular_citadel/icons/obj/clothing/trek_item_icon.dmi'
alternate_worn_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi'
mutantrace_variation = NONE
item_state = ""
can_adjust = FALSE //to prevent you from "wearing it casually"
//TOS
/obj/item/clothing/under/rank/trek/command
name = "Command Uniform"
desc = "The uniform worn by command officers in the mid 2260s."
icon_state = "trek_command"
item_state = "trek_command"
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
/obj/item/clothing/under/rank/trek/engsec
name = "Operations Uniform"
desc = "The uniform worn by operations officers of the mid 2260s. You feel strangely vulnerable just seeing this..."
icon_state = "trek_engsec"
item_state = "trek_engsec"
/obj/item/clothing/under/rank/trek/medsci
name = "MedSci Uniform"
desc = "The uniform worn by medsci officers in the mid 2260s."
icon_state = "trek_medsci"
item_state = "trek_medsci"
permeability_coefficient = 0.50
//TNG
/obj/item/clothing/under/rank/trek/command/next
desc = "The uniform worn by command officers. This one's from the mid 2360s."
icon_state = "trek_next_command"
item_state = "trek_next_command"
/obj/item/clothing/under/rank/trek/engsec/next
desc = "The uniform worn by operation officers. This one's from the mid 2360s."
icon_state = "trek_next_engsec"
item_state = "trek_next_engsec"
/obj/item/clothing/under/rank/trek/medsci/next
desc = "The uniform worn by medsci officers. This one's from the mid 2360s."
icon_state = "trek_next_medsci"
item_state = "trek_next_medsci"
//ENT
/obj/item/clothing/under/rank/trek/command/ent
desc = "The uniform worn by command officers of the 2140s."
icon_state = "trek_ent_command"
item_state = "trek_ent_command"
/obj/item/clothing/under/rank/trek/engsec/ent
desc = "The uniform worn by operations officers of the 2140s."
icon_state = "trek_ent_engsec"
item_state = "trek_ent_engsec"
/obj/item/clothing/under/rank/trek/medsci/ent
desc = "The uniform worn by medsci officers of the 2140s."
icon_state = "trek_ent_medsci"
item_state = "trek_ent_medsci"
//VOY
/obj/item/clothing/under/rank/trek/command/voy
desc = "The uniform worn by command officers of the 2370s."
icon_state = "trek_voy_command"
item_state = "trek_voy_command"
/obj/item/clothing/under/rank/trek/engsec/voy
desc = "The uniform worn by operations officers of the 2370s."
icon_state = "trek_voy_engsec"
item_state = "trek_voy_engsec"
/obj/item/clothing/under/rank/trek/medsci/voy
desc = "The uniform worn by medsci officers of the 2370s."
icon_state = "trek_voy_medsci"
item_state = "trek_voy_medsci"
//DS9
/obj/item/clothing/suit/storage/trek/ds9
@@ -94,7 +15,7 @@
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"
alternate_worn_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi'
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 = NONE
@@ -116,21 +37,6 @@
permeability_coefficient = 0.01
armor = list("melee" = 50, "bullet" = 50, "laser" = 50,"energy" = 50, "bomb" = 50, "bio" = 50, "rad" = 50, "fire" = 50, "acid" = 50)
/obj/item/clothing/under/rank/trek/command/ds9
desc = "The uniform worn by command officers of the 2380s."
icon_state = "trek_ds9_command"
item_state = "trek_ds9_command"
/obj/item/clothing/under/rank/trek/engsec/ds9
desc = "The uniform worn by operations officers of the 2380s."
icon_state = "trek_ds9_engsec"
item_state = "trek_ds9_engsec"
/obj/item/clothing/under/rank/trek/medsci/ds9
desc = "The uniform undershirt worn by medsci officers of the 2380s."
icon_state = "trek_ds9_medsci"
item_state = "trek_ds9_medsci"
//MODERN ish Joan sqrl sprites. I think
//For general use
@@ -138,7 +44,7 @@
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'
alternate_worn_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi'
mob_overlay_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi'
icon_state = "fedcoat"
item_state = "fedcoat"
mutantrace_variation = NONE
@@ -204,7 +110,7 @@
name = "Modern Federation Uniform Jacket"
desc = "A modern uniform jacket from the United Federation."
icon = 'modular_citadel/icons/obj/clothing/trek_item_icon.dmi'
alternate_worn_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi'
mob_overlay_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi'
icon_state = "fedmodern"
item_state = "fedmodern"
body_parts_covered = CHEST|GROIN|ARMS
@@ -236,7 +142,7 @@
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"
alternate_worn_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi'
mob_overlay_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi'
item_state = "fedcapofficer"
//Variants
@@ -1,80 +0,0 @@
/*
* Turtlenecks in general go here!
*/
//CMO's Turtleneck, because they don't have any unique clothes!
/obj/item/clothing/under/rank/chief_medical_officer/turtleneck
desc = "It's a turtleneck worn by those with the experience to be \"Chief Medical Officer\". It provides minor biological protection, for an officer with a superior sense of style and practicality."
name = "chief medical officer's turtleneck"
alternate_worn_icon = 'modular_citadel/icons/mob/clothing/turtlenecks.dmi'
icon = 'modular_citadel/icons/obj/clothing/turtlenecks.dmi'
icon_state = "cmoturtle"
item_state = "w_suit"
item_color = "cmoturtle"
permeability_coefficient = 0.5
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0, fire = 0, acid = 0)
can_adjust = TRUE
alt_covers_chest = TRUE
mutantrace_variation = NONE
/obj/structure/closet/secure_closet/CMO/PopulateContents() //This is placed here because it's a very specific addition for a very specific niche
..()
new /obj/item/clothing/under/rank/chief_medical_officer/turtleneck(src)
/obj/item/clothing/under/syndicate/cosmetic
name = "tactitool turtleneck"
desc = "Just looking at it makes you want to buy an SKS, go into the woods, and -operate-."
icon_state = "tactifool"
item_state = "bl_suit"
item_color = "tactifool"
has_sensor = TRUE
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/clothing/under/syndicate/tacticool
has_sensor = TRUE
// Sweaters are good enough for this category too.
/obj/item/clothing/under/bb_sweater
name = "cream sweater"
desc = "Why trade style for comfort? Now you can go commando down south and still be cozy up north."
icon_state = "bb_turtle"
item_state = "w_suit"
item_color = "bb_turtle"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = TRUE
icon = 'modular_citadel/icons/obj/clothing/turtlenecks.dmi'
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
mutantrace_variation = NONE
/obj/item/clothing/under/bb_sweater/black
name = "black sweater"
icon_state = "bb_turtleblk"
item_state = "bl_suit"
item_color = "bb_turtleblk"
/obj/item/clothing/under/bb_sweater/purple
name = "purple sweater"
icon_state = "bb_turtlepur"
item_state = "p_suit"
item_color = "bb_turtlepur"
/obj/item/clothing/under/bb_sweater/green
name = "green sweater"
icon_state = "bb_turtlegrn"
item_state = "g_suit"
item_color = "bb_turtlegrn"
/obj/item/clothing/under/bb_sweater/red
name = "red sweater"
icon_state = "bb_turtlered"
item_state = "r_suit"
item_color = "bb_turtlered"
/obj/item/clothing/under/bb_sweater/blue
name = "blue sweater"
icon_state = "bb_turtleblu"
item_state = "b_suit"
item_color = "bb_turtleblu"
@@ -1,29 +0,0 @@
/*/////////////////////////////////////////////////////////////////////////////////
/////// ///////
/////// Cit's exclusive jumpsuits, uniforms, etc. go here ///////
/////// ///////
*//////////////////////////////////////////////////////////////////////////////////
/obj/item/clothing/under/corporateuniform
name = "corporate uniform"
desc = "A comfortable, tight fitting jumpsuit made of premium materials. Not space-proof."
icon = 'modular_citadel/icons/obj/clothing/cit_clothes.dmi'
icon_state = "tssuit"
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
item_state = "r_suit"
can_adjust = FALSE
mutantrace_variation = NONE
/obj/item/clothing/under/rank/captain/femformal
name ="captain's female formal outfit"
desc = ""
icon = 'modular_citadel/icons/obj/clothing/cit_clothes.dmi'
icon_state = "lewdcap"
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
item_state = "lewdcap"
item_color = "lewdcap"
can_adjust = FALSE
sensor_mode = SENSOR_COORDS //it's still a captain's suit nerd
random_sensor = FALSE
mutantrace_variation = NONE
@@ -26,7 +26,7 @@
desc = "The design on this seems a little too familiar."
icon = 'icons/obj/custom.dmi'
icon_state = "infcloak"
alternate_worn_icon = 'icons/mob/custom_w.dmi'
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
item_state = "infcloak"
w_class = WEIGHT_CLASS_SMALL
body_parts_covered = CHEST|GROIN|LEGS|ARMS
@@ -36,9 +36,8 @@
desc = "A soft black collar that seems to stretch to fit whoever wears it."
icon = 'icons/obj/custom.dmi'
icon_state = "infcollar"
alternate_worn_icon = 'icons/mob/custom_w.dmi'
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
item_state = "infcollar"
item_color = null
tagname = null
/obj/item/clothing/accessory/medal/steele
@@ -46,14 +45,13 @@
desc = "An intricate pendant given to those who help a key member of the Steele Corporation."
icon = 'icons/obj/custom.dmi'
icon_state = "steele"
item_color = "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'
alternate_worn_icon = 'icons/mob/custom_w.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'
@@ -70,7 +68,7 @@
name = "Ornate Sheathe"
desc = "An ornate and rather sinister looking sabre sheathe."
icon = 'icons/obj/custom.dmi'
alternate_worn_icon = 'icons/mob/custom_w.dmi'
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
icon_state = "darksheath"
item_state = "darksheath"
fitting_swords = list(/obj/item/toy/darksabre)
@@ -80,7 +78,7 @@
name = "Dark Armor"
desc = "A dark, non-functional piece of armor sporting a red and black finish."
icon = 'icons/obj/custom.dmi'
alternate_worn_icon = 'icons/mob/custom_w.dmi'
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
icon_state = "darkcarapace"
item_state = "darkcarapace"
blood_overlay_type = "armor"
@@ -107,8 +105,7 @@
icon = 'icons/obj/custom.dmi'
icon_state = "zombscarf"
desc = "A fashionable collar"
alternate_worn_icon = 'icons/mob/custom_w.dmi'
item_color = "zombscarf"
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
dog_fashion = /datum/dog_fashion/head
/obj/item/clothing/suit/toggle/labcoat/mad/red
@@ -116,7 +113,7 @@
desc = "An oddly special looking coat."
icon = 'icons/obj/custom.dmi'
icon_state = "labred"
alternate_worn_icon = 'icons/mob/custom_w.dmi'
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
item_state = "labred"
mutantrace_variation = NONE
@@ -125,7 +122,7 @@
desc = "An oddly special looking coat."
icon = 'icons/obj/custom.dmi'
icon_state = "labredblack"
alternate_worn_icon = 'icons/mob/custom_w.dmi'
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
item_state = "labredblack"
mutantrace_variation = NONE
@@ -144,7 +141,7 @@
name = "carrot cloak"
desc = "A cloak in the shape and color of a carrot!"
icon = 'icons/obj/custom.dmi'
alternate_worn_icon = 'icons/mob/custom_w.dmi'
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
icon_state = "carrotcloak"
item_state = "carrotcloak"
w_class = WEIGHT_CLASS_SMALL
@@ -156,7 +153,7 @@
icon = 'icons/obj/custom.dmi'
icon_state = "satchel_carrot"
item_state = "satchel_carrot"
alternate_worn_icon = 'icons/mob/custom_w.dmi'
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
/obj/item/storage/backpack/satchel/carrot/Initialize()
. = ..()
@@ -179,7 +176,7 @@
icon = 'icons/obj/custom.dmi'
icon_state = "festive"
item_state = "festive"
alternate_worn_icon = 'icons/mob/custom_w.dmi'
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
w_class = WEIGHT_CLASS_SMALL
body_parts_covered = CHEST|GROIN|LEGS|ARMS
@@ -187,7 +184,7 @@
name = "Alboroto Rosa mask"
icon = 'icons/obj/custom.dmi'
icon_state = "lucharzigfie"
alternate_worn_icon = 'icons/mob/custom_w.dmi'
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
item_state = "lucharzigfie"
/obj/item/clothing/head/hardhat/reindeer/fluff
@@ -195,7 +192,7 @@
desc = "Some fake antlers and a very fake red nose - Sponsored by PWR Game(tm)"
icon_state = "hardhat0_reindeer"
item_state = "hardhat0_reindeer"
item_color = "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
@@ -220,7 +217,7 @@
name = "The Hollow heart"
desc = "Sometimes things are too much to hide."
icon = 'icons/obj/custom.dmi'
alternate_worn_icon = 'icons/mob/custom_w.dmi'
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
icon_state = "hheart"
item_state = "hheart"
flags_inv = HIDEFACE|HIDEFACIALHAIR
@@ -230,7 +227,7 @@
desc = "You would swear this was in your nightmares after eating too many veggies."
icon = 'icons/obj/custom.dmi'
icon_state = "hos-g"
alternate_worn_icon = 'icons/mob/custom_w.dmi'
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
item_state = "hos-g"
body_parts_covered = CHEST|GROIN|ARMS|LEGS
mutantrace_variation = NONE
@@ -247,7 +244,7 @@
desc = "Smells like reactor four."
icon = 'icons/obj/custom.dmi'
item_state = "stalker"
alternate_worn_icon = 'icons/mob/custom_w.dmi'
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
icon_state = "stalker"
/obj/item/reagent_containers/food/drinks/flask/steel
@@ -262,18 +259,17 @@
desc = "It's a collar..."
icon = 'icons/obj/custom.dmi'
icon_state = "petcollar-stripe"
alternate_worn_icon = 'icons/mob/custom_w.dmi'
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
item_state = "petcollar-stripe"
tagname = null
/obj/item/clothing/under/singery/custom
/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"
alternate_worn_icon = 'icons/mob/custom_w.dmi'
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
item_state = "singer"
item_color = "singer"
fitted = NO_FEMALE_UNIFORM
alternate_worn_layer = ABOVE_SHOES_LAYER
can_adjust = 0
@@ -282,7 +278,7 @@
/obj/item/clothing/shoes/sneakers/pink
icon = 'icons/obj/custom.dmi'
icon_state = "pink"
alternate_worn_icon = 'icons/mob/custom_w.dmi'
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
item_state = "pink"
mutantrace_variation = NONE
@@ -291,13 +287,13 @@
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"
alternate_worn_icon = 'icons/mob/custom_w.dmi'
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'
alternate_worn_icon = 'icons/mob/custom_w.dmi'
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
icon_state = "puffydress"
item_state = "puffydress"
body_parts_covered = CHEST|GROIN|LEGS
@@ -310,10 +306,10 @@
item_state = "vermillion"
body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS
icon = 'icons/obj/custom.dmi'
alternate_worn_icon = 'icons/mob/custom_w.dmi'
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
mutantrace_variation = NONE
/obj/item/clothing/under/bb_sweater/black/naomi
/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?"
@@ -327,7 +323,7 @@
desc = "This cloak doesn't seem too special."
icon = 'icons/obj/custom.dmi'
icon_state = "wintergreencloak"
alternate_worn_icon = 'icons/mob/custom_w.dmi'
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
item_state = "wintergreencloak"
w_class = WEIGHT_CLASS_SMALL
body_parts_covered = CHEST|GROIN|LEGS|ARMS
@@ -343,7 +339,7 @@
desc = "An oddly special looking coat."
icon = 'icons/obj/custom.dmi'
icon_state = "rdcoat"
alternate_worn_icon = 'icons/mob/custom_w.dmi'
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
item_state = "rdcoat"
mutantrace_variation = NONE
@@ -359,7 +355,7 @@
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"
alternate_worn_icon = 'modular_citadel/icons/mob/clothing/devilwings64x64.dmi'
mob_overlay_icon = 'modular_citadel/icons/mob/clothing/devilwings64x64.dmi'
item_state = "devilwings"
worn_x_dimension = 64
worn_y_dimension = 34
@@ -369,41 +365,41 @@
desc = "A truly patriotic form of heroic attire."
icon = 'icons/obj/custom.dmi'
resistance_flags = FLAMMABLE
alternate_worn_icon = 'icons/mob/custom_w.dmi'
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'
alternate_worn_icon = 'icons/mob/custom_w.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/lunasune
/obj/item/clothing/under/custom/lunasune
name = "Divine Robes"
icon = 'icons/obj/custom.dmi'
alternate_worn_icon = 'icons/mob/custom_w.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/leoskimpy
/obj/item/clothing/under/custom/leoskimpy
name = "Leon's Skimpy Outfit"
icon = 'icons/obj/custom.dmi'
alternate_worn_icon = 'icons/mob/custom_w.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/mimeoveralls
/obj/item/clothing/under/custom/mimeoveralls
name = "Mime's Overalls"
icon = 'icons/obj/custom.dmi'
alternate_worn_icon = 'icons/mob/custom_w.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"
@@ -415,7 +411,7 @@
icon_state = "zuliecloak"
item_state = "zuliecloak"
icon = 'icons/obj/custom.dmi'
alternate_worn_icon = 'icons/mob/custom_w.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?
@@ -427,7 +423,7 @@
icon_state = "zuliecap"
item_state = "zuliecap"
icon = 'icons/obj/custom.dmi'
alternate_worn_icon = 'icons/mob/custom_w.dmi'
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
flags_inv = HIDEEARS|HIDEHAIR
mutantrace_variation = NONE
@@ -435,7 +431,7 @@
name = "Multicolor Coat"
desc = "An oddly special looking coat with black, red, and gold"
icon = 'icons/obj/custom.dmi'
alternate_worn_icon = 'icons/mob/custom_w.dmi'
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
icon_state = "redgoldjacket"
item_state = "redgoldjacket"
body_parts_covered = CHEST|GROIN|LEGS|ARMS
@@ -447,7 +443,7 @@
icon_state = "kimono"
item_state = "kimono"
icon = 'icons/obj/custom.dmi'
alternate_worn_icon = 'icons/mob/custom_w.dmi'
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
body_parts_covered = CHEST|GROIN|LEGS|ARMS
mutantrace_variation = NONE
@@ -457,17 +453,17 @@
icon_state = "commjacket"
item_state = "commjacket"
icon = 'icons/obj/custom.dmi'
alternate_worn_icon = 'icons/mob/custom_w.dmi'
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
body_parts_covered = CHEST|GROIN|LEGS|ARMS
mutantrace_variation = NONE
/obj/item/clothing/under/mw2_russian_para
/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'
alternate_worn_icon = 'icons/mob/custom_w.dmi'
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
mutantrace_variation = NONE
/obj/item/clothing/gloves/longblackgloves
@@ -476,15 +472,15 @@
icon_state = "longblackgloves"
item_state = "longblackgloves"
icon = 'icons/obj/custom.dmi'
alternate_worn_icon = 'icons/mob/custom_w.dmi'
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
/obj/item/clothing/under/trendy_fit
/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'
alternate_worn_icon = 'icons/mob/custom_w.dmi'
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
mutantrace_variation = NONE
/obj/item/clothing/head/blueberet
@@ -493,7 +489,7 @@
icon_state = "blueberet"
item_state = "blueberet"
icon = 'icons/obj/custom.dmi'
alternate_worn_icon = 'icons/mob/custom_w.dmi'
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
dynamic_hair_suffix = ""
/obj/item/clothing/head/flight
@@ -502,7 +498,7 @@
icon_state = "flight-g"
item_state = "flight-g"
icon = 'icons/obj/custom.dmi'
alternate_worn_icon = 'icons/mob/custom_w.dmi'
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
/obj/item/clothing/neck/necklace/onion
name = "Onion Necklace"
@@ -510,15 +506,15 @@
icon = 'icons/obj/custom.dmi'
icon_state = "onion"
item_state = "onion"
alternate_worn_icon = 'icons/mob/custom_w.dmi'
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
/obj/item/clothing/under/mikubikini
/obj/item/clothing/under/custom/mikubikini
name = "starlight singer bikini"
desc = " "
icon_state = "mikubikini"
item_state = "mikubikini"
icon = 'icons/obj/custom.dmi'
alternate_worn_icon = 'icons/mob/custom_w.dmi'
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
mutantrace_variation = NONE
/obj/item/clothing/suit/mikujacket
@@ -527,7 +523,7 @@
icon_state = "mikujacket"
item_state = "mikujacket"
icon = 'icons/obj/custom.dmi'
alternate_worn_icon = 'icons/mob/custom_w.dmi'
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
mutantrace_variation = NONE
/obj/item/clothing/head/mikuhair
@@ -536,7 +532,7 @@
icon_state = "mikuhair"
item_state = "mikuhair"
icon = 'icons/obj/custom.dmi'
alternate_worn_icon = 'icons/mob/custom_w.dmi'
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
mutantrace_variation = NONE
flags_inv = HIDEHAIR
@@ -546,7 +542,7 @@
icon_state = "mikugloves"
item_state = "mikugloves"
icon = 'icons/obj/custom.dmi'
alternate_worn_icon = 'icons/mob/custom_w.dmi'
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
mutantrace_variation = NONE
/obj/item/clothing/shoes/sneakers/mikuleggings
@@ -555,7 +551,7 @@
icon_state = "mikuleggings"
item_state = "mikuleggings"
icon = 'icons/obj/custom.dmi'
alternate_worn_icon = 'icons/mob/custom_w.dmi'
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
mutantrace_variation = NONE
/obj/item/toy/plush/mammal/dog/fritz
@@ -0,0 +1,19 @@
/client/proc/cmd_mentor_dementor()
set category = "Mentor"
set name = "dementor"
if(!is_mentor())
return
remove_mentor_verbs()
if (/client/proc/mentor_unfollow in verbs)
mentor_unfollow()
GLOB.mentors -= src
verbs += /client/proc/cmd_mentor_rementor
/client/proc/cmd_mentor_rementor()
set category = "Mentor"
set name = "rementor"
if(!is_mentor())
return
add_mentor_verbs()
GLOB.mentors += src
verbs -= /client/proc/cmd_mentor_rementor
@@ -1,6 +1,7 @@
GLOBAL_LIST_INIT(mentor_verbs, list(
/client/proc/cmd_mentor_say,
/client/proc/show_mentor_memo
/client/proc/show_mentor_memo,
/client/proc/cmd_mentor_dementor
))
GLOBAL_PROTECT(mentor_verbs)
@@ -38,8 +38,9 @@
if(!msg)
msg = input(src,"Message:", "Private message") as text|null
if(!msg && is_mentor(whom))
to_chat(GLOB.admins | GLOB.mentors, "<span class='purple'>[src] has stopped their reply to [whom]'s mhelp.</span>")
if(!msg)
if (is_mentor(whom))
to_chat(GLOB.admins | GLOB.mentors, "<span class='purple'>[src] has stopped their reply to [whom]'s mhelp.</span>")
return
if(!C)
@@ -54,10 +55,10 @@
return
msg = sanitize(copytext_char(msg, 1, MAX_MESSAGE_LEN))
if(!msg && is_mentor(whom))
to_chat(GLOB.admins | GLOB.mentors, "<span class='purple'>[src] has stopped their reply to [whom]'s mhelp.</span>")
if(!msg)
if (is_mentor(whom))
to_chat(GLOB.admins | GLOB.mentors, "<span class='purple'>[src] has stopped their reply to [whom]'s mhelp.</span>")
return
log_mentor("Mentor PM: [key_name(src)]->[key_name(C)]: [msg]")
msg = emoji_parse(msg)
@@ -1,73 +1,29 @@
/mob/living/carbon
var/combatmode = FALSE //literally lifeweb
var/lastmousedir
var/wrongdirmovedelay
var/lastdirchange
var/combatmessagecooldown
//oh no vore time
var/voremode = FALSE
/mob/living/carbon/proc/toggle_combat_mode(forced, silent)
if(!forced)
if(recoveringstam || stat != CONSCIOUS)
return TRUE
for(var/i in status_effects)
var/datum/status_effect/S = i
if(S.blocks_combatmode)
return TRUE
combatmode = !combatmode
if(voremode)
toggle_vore_mode()
if(!silent)
if(combatmode)
if(world.time >= combatmessagecooldown)
if(a_intent != INTENT_HELP)
visible_message("<span class='warning'>[src] [resting ? "tenses up" : (prob(95)? "drops into a combative stance" : (prob(95)? "poses aggressively" : "asserts dominance with their pose"))].</span>")
else
visible_message("<span class='notice'>[src] [pick("looks","seems","goes")] [pick("alert","attentive","vigilant")].</span>")
playsound_local(src, 'sound/misc/ui_toggle.ogg', 50, FALSE, pressure_affected = FALSE) //Sound from interbay!
else
playsound_local(src, 'sound/misc/ui_toggleoff.ogg', 50, FALSE, pressure_affected = FALSE) //Slightly modified version of the above!
if(client)
client.show_popup_menus = !combatmode // So we can right-click for alternate actions and all that other good shit. Also moves examine to shift+rightclick to make it possible to attack while sprinting
var/obj/screen/combattoggle/T = locate() in hud_used?.static_inventory
T?.update_icon_state()
combatmessagecooldown = 10 SECONDS + world.time //This is set 100% of the time to make sure squeezing regen out of process cycles doesn't result in the combat mode message getting spammed
SEND_SIGNAL(src, COMSIG_COMBAT_TOGGLED, src, combatmode)
return TRUE
mob/living/carbon/proc/toggle_vore_mode()
/mob/living/carbon/proc/toggle_vore_mode()
voremode = !voremode
var/obj/screen/voretoggle/T = locate() in hud_used?.static_inventory
T?.update_icon_state()
if(combatmode)
if(combat_flags & COMBAT_FLAG_COMBAT_TOGGLED)
return FALSE //let's not override the main draw of the game these days
SEND_SIGNAL(src, COMSIG_VORE_TOGGLED, src, voremode)
return TRUE
/mob/living/carbon/Move(atom/newloc, direct = 0)
var/currentdirection = dir
. = ..()
wrongdirmovedelay = FALSE
if(combatmode && client && lastmousedir)
if((combat_flags & COMBAT_FLAG_COMBAT_ACTIVE) && client && lastmousedir)
if(lastmousedir != dir)
wrongdirmovedelay = TRUE
setDir(lastmousedir, ismousemovement = TRUE)
if(currentdirection != dir)
lastdirchange = world.time
/mob/living/carbon/onMouseMove(object, location, control, params)
if(!combatmode)
if(!(combat_flags & COMBAT_FLAG_COMBAT_ACTIVE))
return
mouse_face_atom(object)
lastmousedir = dir
/mob/living/carbon/setDir(newdir, ismousemovement = FALSE)
if(!combatmode || ismousemovement)
if(dir != newdir)
lastdirchange = world.time
. = ..()
else
return
@@ -15,24 +15,6 @@
if(!forced && (status_flags & GODMODE))
return FALSE
apply_damage(amount > 0 ? amount*incomingstammult : amount, STAMINA, affected_zone)
if(recoveringstam && amount > 20)
if((combat_flags & COMBAT_FLAG_HARD_STAMCRIT) && amount > 20)
incomingstammult = max(0.01, incomingstammult/(amount*0.05))
return amount
/mob/living/carbon/doSprintLossTiles(tiles)
doSprintBufferRegen(FALSE) //first regen.
if(sprint_buffer)
var/use = min(tiles, sprint_buffer)
sprint_buffer -= use
tiles -= use
update_hud_sprint_bar()
if(!tiles) //we had enough, we're done!
return
adjustStaminaLoss(tiles * sprint_stamina_cost) //use stamina to cover deficit.
/mob/living/carbon/proc/doSprintBufferRegen(updating = TRUE)
var/diff = world.time - sprint_buffer_regen_last
sprint_buffer_regen_last = world.time
sprint_buffer = min(sprint_buffer_max, sprint_buffer + sprint_buffer_regen_ds * diff)
if(updating)
update_hud_sprint_bar()
@@ -19,6 +19,7 @@
L.embedded_objects -= I
L.receive_damage(I.embedding.embedded_unsafe_removal_pain_multiplier*I.w_class*painmul)//It hurts to rip it out, get surgery you dingus. And if you're ripping it out quickly via resist, it's gonna hurt even more
I.forceMove(get_turf(src))
I.unembedded()
user.put_in_hands(I)
user.emote("scream")
user.visible_message("[user] rips [I] out of [user.p_their()] [L.name]!","<span class='notice'>You remove [I] from your [L.name].</span>")
@@ -1,37 +0,0 @@
/mob/living/carbon/human/Move(NewLoc, direct)
var/oldpseudoheight = pseudo_z_axis
. = ..()
if(. && sprinting && !(movement_type & FLYING) && CHECK_MULTIPLE_BITFIELDS(mobility_flags, MOBILITY_MOVE|MOBILITY_STAND) && m_intent == MOVE_INTENT_RUN && has_gravity(loc) && !pulledby)
if(!HAS_TRAIT(src, TRAIT_FREESPRINT))
doSprintLossTiles(1)
if((oldpseudoheight - pseudo_z_axis) >= 8)
to_chat(src, "<span class='warning'>You trip off of the elevated surface!</span>")
for(var/obj/item/I in held_items)
accident(I)
DefaultCombatKnockdown(80)
/mob/living/carbon/human/movement_delay()
. = 0
if((mobility_flags & MOBILITY_STAND) && m_intent == MOVE_INTENT_RUN && sprinting)
var/static/datum/config_entry/number/movedelay/sprint_speed_increase/SSI
if(!SSI)
SSI = CONFIG_GET_ENTRY(number/movedelay/sprint_speed_increase)
. -= SSI.config_entry_value
if(wrongdirmovedelay)
. += 1
. += ..()
/mob/living/carbon/human/proc/togglesprint() // If you call this proc outside of hotkeys or clicking the HUD button, I'll be disappointed in you.
sprinting = !sprinting
if((m_intent == MOVE_INTENT_RUN) && CHECK_MULTIPLE_BITFIELDS(mobility_flags, MOBILITY_STAND|MOBILITY_MOVE))
if(sprinting)
playsound_local(src, 'sound/misc/sprintactivate.ogg', 50, FALSE, pressure_affected = FALSE)
else
playsound_local(src, 'sound/misc/sprintdeactivate.ogg', 50, FALSE, pressure_affected = FALSE)
var/obj/screen/sprintbutton/S = locate() in hud_used?.static_inventory
S?.update_icon_state()
return TRUE
/mob/living/carbon/human/proc/sprint_hotkey(targetstatus)
if(targetstatus ? !sprinting : sprinting)
togglesprint()
@@ -1,5 +1,2 @@
/mob/living/proc/adjustStaminaLossBuffered(amount, updating_health = TRUE, forced = FALSE)
return
/mob/living/proc/doSprintLossTiles(amount)
return
@@ -1,32 +1,4 @@
/mob/living
var/sprinting = FALSE
var/recoveringstam = FALSE
var/incomingstammult = 1
var/bufferedstam = 0
var/stambuffer = 20
var/stambufferregentime
var/attemptingstandup = FALSE
var/intentionalresting = FALSE
var/attemptingcrawl = FALSE
//Sprint buffer---
var/sprint_buffer = 42 //Tiles
var/sprint_buffer_max = 42
var/sprint_buffer_regen_ds = 0.3 //Tiles per world.time decisecond
var/sprint_buffer_regen_last = 0 //last world.time this was regen'd for math.
var/sprint_stamina_cost = 0.70 //stamina loss per tile while insufficient sprint buffer.
//---End
/mob/living/update_config_movespeed()
. = ..()
sprint_buffer_max = CONFIG_GET(number/movedelay/sprint_buffer_max)
sprint_buffer_regen_ds = CONFIG_GET(number/movedelay/sprint_buffer_regen_per_ds)
sprint_stamina_cost = CONFIG_GET(number/movedelay/sprint_stamina_cost)
/mob/living/movement_delay(ignorewalk = 0)
. = ..()
if(!CHECK_MOBILITY(src, MOBILITY_STAND))
. += 6
/atom
var/pseudo_z_axis
@@ -55,22 +27,23 @@
/mob/living/carbon/update_stamina()
var/total_health = getStaminaLoss()
if(total_health >= STAMINA_SOFTCRIT)
if(!(combat_flags & COMBAT_FLAG_SOFT_STAMCRIT))
ENABLE_BITFIELD(combat_flags, COMBAT_FLAG_SOFT_STAMCRIT)
else
if(combat_flags & COMBAT_FLAG_SOFT_STAMCRIT)
DISABLE_BITFIELD(combat_flags, COMBAT_FLAG_SOFT_STAMCRIT)
if(total_health)
if(!recoveringstam && total_health >= STAMINA_CRIT && !stat)
if(!(combat_flags & COMBAT_FLAG_HARD_STAMCRIT) && total_health >= STAMINA_CRIT && !stat)
to_chat(src, "<span class='notice'>You're too exhausted to keep going...</span>")
set_resting(TRUE, FALSE, FALSE)
if(combatmode)
toggle_combat_mode(TRUE)
recoveringstam = TRUE
disable_intentional_combat_mode(TRUE, FALSE)
ENABLE_BITFIELD(combat_flags, COMBAT_FLAG_HARD_STAMCRIT)
filters += CIT_FILTER_STAMINACRIT
update_mobility()
if(recoveringstam && total_health <= STAMINA_SOFTCRIT)
if((combat_flags & COMBAT_FLAG_HARD_STAMCRIT) && total_health <= STAMINA_SOFTCRIT)
to_chat(src, "<span class='notice'>You don't feel nearly as exhausted anymore.</span>")
recoveringstam = FALSE
DISABLE_BITFIELD(combat_flags, COMBAT_FLAG_HARD_STAMCRIT | COMBAT_FLAG_SOFT_STAMCRIT)
filters -= CIT_FILTER_STAMINACRIT
update_mobility()
update_health_hud()
/mob/living/proc/update_hud_sprint_bar()
if(hud_used && hud_used.sprint_buffer)
hud_used.sprint_buffer.update_to_mob(src)
@@ -424,15 +424,15 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm !
if(hit_atom)
if(isliving(hit_atom))
var/mob/living/L = hit_atom
if(!L.check_shields(0, "the [name]", src, attack_type = LEAP_ATTACK))
if(L.run_block(0, "the [name]", src, ATTACK_TYPE_TACKLE, 0, src) & BLOCK_SUCCESS)
DefaultCombatKnockdown(15, 1, 1)
else
L.visible_message("<span class ='danger'>[src] pounces on [L]!</span>", "<span class ='userdanger'>[src] pounces on you!</span>")
L.DefaultCombatKnockdown(iscarbon(L) ? 60 : 45, override_stamdmg = CLAMP(pounce_stamloss, 0, pounce_stamloss_cap-L.getStaminaLoss())) // Temporary. If someone could rework how dogborg pounces work to accomodate for combat changes, that'd be nice.
playsound(src, 'sound/weapons/Egloves.ogg', 50, 1)
sleep(2)//Runtime prevention (infinite bump() calls on hulks)
step_towards(src,L)
log_combat(src, L, "borg pounced")
else
DefaultCombatKnockdown(15, 1, 1)
pounce_cooldown = !pounce_cooldown
spawn(pounce_cooldown_time) //3s by default
@@ -1,30 +0,0 @@
/mob/living/silicon/robot/Move(NewLoc, direct)
. = ..()
if(. && sprinting && !(movement_type & FLYING) && CHECK_MULTIPLE_BITFIELDS(mobility_flags, MOBILITY_STAND | MOBILITY_MOVE))
if(!(cell?.use(25)))
togglesprint(TRUE)
/mob/living/silicon/robot/movement_delay()
. = ..()
if(!resting && !sprinting)
. += 1
. += speed
/mob/living/silicon/robot/proc/togglesprint(shutdown = FALSE) //Basically a copypaste of the proc from /mob/living/carbon/human
if(!shutdown && (!cell || cell.charge < 25) || !cansprint)
return FALSE
sprinting = shutdown ? FALSE : !sprinting
if(CHECK_MULTIPLE_BITFIELDS(mobility_flags, MOBILITY_STAND|MOBILITY_MOVE))
if(sprinting)
playsound_local(src, 'sound/misc/sprintactivate.ogg', 50, FALSE, pressure_affected = FALSE)
else
if(shutdown)
playsound_local(src, 'sound/effects/light_flicker.ogg', 50, FALSE, pressure_affected = FALSE)
playsound_local(src, 'sound/misc/sprintdeactivate.ogg', 50, FALSE, pressure_affected = FALSE)
var/obj/screen/sprintbutton/S = locate() in hud_used?.static_inventory
S?.update_icon_state()
return TRUE
/mob/living/silicon/robot/proc/sprint_hotkey(targetstatus)
if(targetstatus ? !sprinting : sprinting)
togglesprint()
@@ -1,34 +1,3 @@
////////////Anti Tank Pistol////////////
/obj/item/gun/ballistic/automatic/pistol/antitank
name = "Anti Tank Pistol"
desc = "A massively impractical and silly monstrosity of a pistol that fires .50 calliber rounds. The recoil is likely to dislocate your wrist."
icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi'
icon_state = "atp"
item_state = "pistol"
recoil = 4
mag_type = /obj/item/ammo_box/magazine/sniper_rounds
fire_delay = 50
burst_size = 1
can_suppress = 0
w_class = WEIGHT_CLASS_NORMAL
actions_types = list()
fire_sound = 'sound/weapons/blastcannon.ogg'
spread = 20 //damn thing has no rifling.
/obj/item/gun/ballistic/automatic/pistol/antitank/update_icon()
..()
if(magazine)
cut_overlays()
add_overlay("atp-mag")
else
cut_overlays()
icon_state = "[initial(icon_state)][chambered ? "" : "-e"]"
/obj/item/gun/ballistic/automatic/pistol/antitank/syndicate
name = "Syndicate Anti Tank Pistol"
desc = "A massively impractical and silly monstrosity of a pistol that fires .50 calliber rounds. The recoil is likely to dislocate a variety of joints without proper bracing."
pin = /obj/item/firing_pin/implant/pindicate
///foam stealth pistol///
@@ -56,75 +25,6 @@
cut_overlays()
icon_state = "[initial(icon_state)][chambered ? "" : "-e"]"
//////10mm soporific bullets//////
obj/item/projectile/bullet/c10mm/soporific
name ="10mm soporific bullet"
armour_penetration = 0
nodamage = TRUE
dismemberment = 0
knockdown = 0
/obj/item/projectile/bullet/c10mm/soporific/on_hit(atom/target, blocked = FALSE)
. = ..()
if((blocked != 100) && isliving(target))
var/mob/living/L = target
L.blur_eyes(6)
if(L.getStaminaLoss() >= 60)
L.Sleeping(300)
else
L.adjustStaminaLoss(25)
/obj/item/ammo_casing/c10mm/soporific
name = ".10mm soporific bullet casing"
desc = "A 10mm soporific bullet casing."
projectile_type = /obj/item/projectile/bullet/c10mm/soporific
/obj/item/ammo_box/magazine/m10mm/soporific
name = "pistol magazine (10mm soporific)"
icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi'
icon_state = "9x19pS"
desc = "A gun magazine. Loaded with rounds which inject the target with a variety of illegal substances to induce sleep in the target."
ammo_type = /obj/item/ammo_casing/c10mm/soporific
/obj/item/ammo_box/c10mm/soporific
name = "ammo box (10mm soporific)"
ammo_type = /obj/item/ammo_casing/c10mm/soporific
max_ammo = 24
//////modular pistol////// (reskinnable stetchkins)
/obj/item/gun/ballistic/automatic/pistol/modular
name = "modular pistol"
desc = "A small, easily concealable 10mm handgun. Has a threaded barrel for suppressors."
icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi'
icon_state = "cde"
can_unsuppress = TRUE
obj_flags = UNIQUE_RENAME
unique_reskin = list("Default" = "cde",
"NT-99" = "n99",
"Stealth" = "stealthpistol",
"HKVP-78" = "vp78",
"Luger" = "p08b",
"Mk.58" = "secguncomp",
"PX4 Storm" = "px4"
)
/obj/item/gun/ballistic/automatic/pistol/modular/update_icon()
..()
if(current_skin)
icon_state = "[unique_reskin[current_skin]][chambered ? "" : "-e"][suppressed ? "-suppressed" : ""]"
else
icon_state = "[initial(icon_state)][chambered ? "" : "-e"][suppressed ? "-suppressed" : ""]"
if(magazine && suppressed)
cut_overlays()
add_overlay("[unique_reskin[current_skin]]-magazine-sup") //Yes, this means the default iconstate can't have a magazine overlay
else if (magazine)
cut_overlays()
add_overlay("[unique_reskin[current_skin]]-magazine")
else
cut_overlays()
/////////RAYGUN MEMES/////////
/obj/item/projectile/beam/lasertag/ray //the projectile, compatible with regular laser tag armor
@@ -144,4 +44,4 @@ obj/item/projectile/bullet/c10mm/soporific
icon_state = "raygun"
desc = "A toy laser with a classic, retro feel and look. Compatible with existing laser tag systems."
ammo_type = list(/obj/item/ammo_casing/energy/laser/raytag)
selfcharge = EGUN_SELFCHARGE
selfcharge = EGUN_SELFCHARGE
@@ -185,10 +185,15 @@
name = "electron blast"
icon_state = "stunjectile"
color = null
nodamage = 1
nodamage = TRUE
knockdown = 100
stamina = 5
knockdown_stamoverride = 0
knockdown_stam_max = 0
stamina = 18
stutter = 5
jitter = 20
strong_tase = FALSE
tase_duration = 0
hitsound = 'sound/weapons/taserhit.ogg'
range = 7
range = 3
strong_tase = FALSE
@@ -155,7 +155,7 @@
M.Sleeping(100, 0)
M.Jitter(50)
M.DefaultCombatKnockdown(100)
to_chat(M, "<span class='userdanger'>You feel your eigenstate settle, snapping an alternative version of yourself into reality. All your previous memories are lost and replaced with the alternative version of yourself. This version of you feels more [pick("affectionate", "happy", "lusty", "radical", "shy", "ambitious", "frank", "voracious", "sensible", "witty")] than your previous self, sent to god knows what universe.</span>")
to_chat(M, "<span class='userdanger'>You feel your eigenstate settle, snapping an alternative version of yourself into reality. All your previous memories are lost and replaced with the alternative version of yourself.</span>")
M.emote("me",1,"flashes into reality suddenly, gasping as they gaze around in a bewildered and highly confused fashion!",TRUE)
log_game("FERMICHEM: [M] ckey: [M.key] has become an alternative universe version of themselves.")
M.reagents.remove_all_type(/datum/reagent, 100, 0, 1)
@@ -104,8 +104,7 @@
var/obj/item/organ/genital/womb/W = M.getorganslot(ORGAN_SLOT_WOMB)
if(M.gender == MALE)
M.gender = FEMALE
M.visible_message("<span class='boldnotice'>[M] suddenly looks more feminine!</span>", "<span class='boldwarning'>You suddenly feel more feminine!</span>")
M.set_gender(FEMALE)
if(P)
P.modify_size(-0.05)
@@ -251,8 +250,7 @@
var/obj/item/organ/genital/womb/W = M.getorganslot(ORGAN_SLOT_WOMB)
if(M.gender == FEMALE)
M.gender = MALE
M.visible_message("<span class='boldnotice'>[M] suddenly looks more masculine!</span>", "<span class='boldwarning'>You suddenly feel more masculine!</span>")
M.set_gender(MALE)
if(B)
B.modify_size(-0.05)
@@ -191,7 +191,7 @@
var/datum/component/nanites/N = C.GetComponent(/datum/component/nanites)
if(prob(5))
to_chat(C, "<span class='warning'>The residual voltage from the nanites causes you to seize up!</b></span>")
C.electrocute_act(10, (get_turf(C)), 1, FALSE, FALSE, FALSE, TRUE)
C.electrocute_act(10, (get_turf(C)), 1, SHOCK_ILLUSION)
if(prob(10))
var/atom/T = C
T.emp_act(EMP_HEAVY)
@@ -218,7 +218,7 @@ datum/reagent/fermi/nanite_b_gone/reaction_obj(obj/O, reac_volume)
/datum/reagent/fermi/nanite_b_goneTox/on_mob_life(mob/living/carbon/C)//Damages the taker if their purity is low. Extended use of impure chemicals will make the original die. (thus can't be spammed unless you've very good)
if(prob(15))
to_chat(C, "<span class='warning'>The residual voltage in your system causes you to seize up!</b></span>")
C.electrocute_act(10, (get_turf(C)), 1, FALSE, FALSE, FALSE, TRUE)
C.electrocute_act(10, (get_turf(C)), 1, SHOCK_ILLUSION)
if(prob(50))
var/atom/T = C
T.emp_act(EMP_HEAVY)
@@ -54,7 +54,6 @@
to_chat(user, "<span class='warning'>[src] is empty!</span>")
add_fingerprint(user)
return
..()
/obj/item/fermichem/pHpaper
name = "pH indicator strip"
@@ -95,6 +95,7 @@
taste_description = "strawberry roofies"
taste_mult = 2 //Hide the roofies in stronger flavors
color = "#FFADFF"//PINK, rgb(255, 173, 255)
can_synth = FALSE
/datum/reagent/drug/aphrodisiac/on_mob_life(mob/living/M)
if(M && M.client?.prefs.arousable && !(M.client?.prefs.cit_toggles & NO_APHRO))
@@ -120,6 +121,7 @@
color = "#FF2BFF"//dark pink
addiction_threshold = 20
overdose_threshold = 20
can_synth = FALSE
/datum/reagent/drug/aphrodisiacplus/on_mob_life(mob/living/M)
if(M && M.client?.prefs.arousable && !(M.client?.prefs.cit_toggles & NO_APHRO))
@@ -174,6 +176,7 @@
taste_mult = 2
color = "#D9D9D9"//rgb(217, 217, 217)
reagent_state = SOLID
can_synth = FALSE
/datum/reagent/drug/anaphrodisiac/on_mob_life(mob/living/M)
if(M && M.client?.prefs.arousable && prob(16))
@@ -191,6 +194,7 @@
color = "#D9D9D9"//rgb(217, 217, 217)
reagent_state = SOLID
overdose_threshold = 20
can_synth = FALSE
/datum/reagent/drug/anaphrodisiacplus/on_mob_life(mob/living/M)
if(M && M.client?.prefs.arousable)