Merge remote-tracking branch 'citadel/master' into god_wish_your_plushies_holy_shit

This commit is contained in:
kevinz000
2020-02-03 13:07:49 -07:00
1017 changed files with 48557 additions and 10431 deletions
@@ -8,8 +8,8 @@
size = 1 //There is only 1 size right now
genital_flags = CAN_MASTURBATE_WITH|CAN_CLIMAX_WITH
masturbation_verb = "finger"
arousal_verb = "You feel wetness on your crotch."
unarousal_verb = "You no longer feel wet."
arousal_verb = "You feel wetness on your crotch"
unarousal_verb = "You no longer feel wet"
fluid_transfer_factor = 0.1 //Yes, some amount is exposed to you, go get your AIDS
layer_index = VAGINA_LAYER_INDEX
var/cap_length = 8//D E P T H (cap = capacity)
@@ -305,7 +305,7 @@ datum/gear/darksabresheath
/datum/gear/flagcape
name = "US Flag Cape"
category = SLOT_IN_BACKPACK
path = /obj/item/bedsheet/custom/flagcape
path = /obj/item/clothing/neck/flagcape
ckeywhitelist = list("darnchacha")
/datum/gear/luckyjack
@@ -488,3 +488,9 @@ datum/gear/darksabresheath
category = SLOT_SHOES
path = /obj/item/clothing/shoes/sneakers/mikuleggings
ckeywhitelist = list("grandvegeta")
/datum/gear/cosmos
name = "cosmic space bedsheet"
category = SLOT_IN_BACKPACK
path = /obj/item/bedsheet/cosmos
ckeywhitelist = list("grunnyyy")
@@ -13,7 +13,7 @@ GLOBAL_LIST_EMPTY(loadout_whitelist_ids)
LAZYINITLIST(GLOB.loadout_whitelist_ids)
var/list/file_lines = world.file2list(loadout_config)
for(var/line in file_lines)
if(!line || findtextEx(line,"#",1,2))
if(!line || line[1] == "#")
continue
var/list/lineinfo = splittext(line, "|")
var/lineID = lineinfo[1]
@@ -21,7 +21,7 @@ GLOBAL_LIST_EMPTY(loadout_whitelist_ids)
var/sublinetypedef = findtext(subline, "=")
if(sublinetypedef)
var/sublinetype = copytext(subline, 1, sublinetypedef)
var/list/sublinecontent = splittext(copytext(subline, sublinetypedef+1), ",")
var/list/sublinecontent = splittext(copytext(subline, sublinetypedef+ length(sublinetypedef)), ",")
if(sublinetype == "WHITELIST")
GLOB.loadout_whitelist_ids["[lineID]"] = sublinecontent
@@ -1,8 +1,9 @@
/datum/gear/stethoscope
/datum/gear/medicbriefcase
name = "Medical Briefcase"
category = SLOT_HANDS
path = /obj/item/storage/briefcase/medical
restricted_roles = list("Medical Doctor", "Chief Medical Officer")
restricted_desc = "MD, CMO"
/datum/gear/stethoscope
name = "Stethoscope"
@@ -30,3 +31,17 @@
path = /obj/item/clothing/under/rank/medical/purple
restricted_roles = list("Medical Doctor", "Chief Medical Officer", "Geneticist", "Chemist", "Virologist")
restricted_desc = "Medical"
/datum/gear/nursehat
name = "Nurse Hat"
category = SLOT_HEAD
path = /obj/item/clothing/head/nursehat
restricted_roles = list("Medical Doctor", "Chief Medical Officer", "Geneticist", "Chemist", "Virologist")
restricted_desc = "Medical"
/datum/gear/nursesuit
name = "Nurse Suit"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/rank/nursesuit
restricted_roles = list("Medical Doctor", "Chief Medical Officer", "Geneticist", "Chemist", "Virologist")
restricted_desc = "Medical"
@@ -128,4 +128,22 @@
category = SLOT_IN_BACKPACK
path = /obj/item/modular_computer/laptop/preset/civilian
cost = 7
/datum/gear/ringbox_gold
name = "A gold ring box"
category = SLOT_IN_BACKPACK
path = /obj/item/storage/fancy/ringbox
cost = 3
/datum/gear/ringbox_silver
name = "A silver ring box"
category = SLOT_IN_BACKPACK
path = /obj/item/storage/fancy/ringbox/silver
cost = 3
/datum/gear/ringbox_diamond
name = "A diamond ring box"
category = SLOT_IN_BACKPACK
path = /obj/item/storage/fancy/ringbox/diamond
cost = 5
@@ -2,3 +2,22 @@
name = "Fingerless Gloves"
category = SLOT_GLOVES
path = /obj/item/clothing/gloves/fingerless
/datum/gear/goldring
name = "A gold ring"
category = SLOT_GLOVES
path = /obj/item/clothing/gloves/ring
cost = 2
/datum/gear/silverring
name = "A silver ring"
category = SLOT_GLOVES
path = /obj/item/clothing/gloves/ring/silver
cost = 2
/datum/gear/diamondring
name = "A diamond ring"
category = SLOT_GLOVES
path = /obj/item/clothing/gloves/ring/diamond
cost = 4
@@ -59,6 +59,11 @@
category = SLOT_HEAD
path = /obj/item/clothing/head/rabbitears
/datum/gear/mailmanhat
name = "Mailman's Hat"
category = SLOT_HEAD
path = /obj/item/clothing/head/mailman
//trek fancy Hats!
/datum/gear/trekcap
name = "Federation Officer's Cap (White)"
@@ -105,6 +110,7 @@
path = /obj/item/clothing/head/christmashatg
*/
//Cowboy Stuff
/datum/gear/cowboyhat
name = "Cowboy Hat, Brown"
category = SLOT_HEAD
@@ -79,6 +79,12 @@
category = SLOT_WEAR_SUIT
path = /obj/item/clothing/suit/hooded/wintercoat/ratvar/fake
/datum/gear/coat/polycoat
name = "Polychromic winter coat"
category = SLOT_WEAR_SUIT
path = /obj/item/clothing/suit/hooded/wintercoat/polychromic
cost = 4 //too many people with neon green coats is hard on the eyes
/* Commented out until it is "balanced"
/datum/gear/coat/sec
name = "Security winter coat"
@@ -23,9 +23,6 @@
var/hound_sleeper = TRUE
var/cit_toggles = TOGGLES_CITADEL
// stuff that was in base
max_save_slots = 10
/datum/preferences/New(client/C)
..()
@@ -364,10 +364,11 @@
worn_x_dimension = 64
worn_y_dimension = 34
/obj/item/bedsheet/custom/flagcape
/obj/item/clothing/neck/flagcape
name = "Flag Cape"
desc = "A truly patriotic form of heroic attire."
icon = 'icons/obj/custom.dmi'
resistance_flags = FLAMMABLE
alternate_worn_icon = 'icons/mob/custom_w.dmi'
icon_state = "flagcape"
item_state = "flagcape"
@@ -13,18 +13,18 @@ GLOBAL_LIST(custom_item_list)
GLOB.custom_item_list = list()
var/list/file_lines = world.file2list(custom_filelist)
for(var/line in file_lines)
if(length(line) == 0) //Emptyline, no one cares.
if(!length(line)) //Emptyline, no one cares.
continue
if(copytext(line,1,3) == "//") //Commented line, ignore.
if(copytext(line,1,3) == "//") //Commented line, ignore. 3 == length("//") + 1
continue
var/ckey_str_sep = findtext(line, "|") //Process our stuff..
var/char_str_sep = findtext(line, "|", ckey_str_sep+1)
var/job_str_sep = findtext(line, "|", char_str_sep+1)
var/item_str_sep = findtext(line, "|", job_str_sep+1)
var/char_str_sep = findtext(line, "|", ckey_str_sep + length(ckey_str_sep))
var/job_str_sep = findtext(line, "|", char_str_sep + length(char_str_sep))
var/item_str_sep = findtext(line, "|", job_str_sep + length(job_str_sep))
var/ckey_str = ckey(copytext(line, 1, ckey_str_sep))
var/char_str = copytext(line, ckey_str_sep+1, char_str_sep)
var/job_str = copytext(line, char_str_sep+1, job_str_sep)
var/item_str = copytext(line, job_str_sep+1, item_str_sep)
var/char_str = copytext(line, ckey_str_sep + length(ckey_str_sep), char_str_sep)
var/job_str = copytext(line, char_str_sep + length(char_str_sep), job_str_sep)
var/item_str = copytext(line, job_str_sep + length(job_str_sep), item_str_sep)
if(!ckey_str || !char_str || !job_str || !item_str || !length(ckey_str) || !length(char_str) || !length(job_str) || !length(item_str))
log_admin("Errored custom_items_whitelist line: [line] - Component/separator missing!")
if(!islist(GLOB.custom_item_list[ckey_str]))
@@ -42,7 +42,7 @@ GLOBAL_LIST(custom_item_list)
for(var/item_string in item_strings)
var/path_str_sep = findtext(item_string, "=")
var/path = copytext(item_string, 1, path_str_sep) //Path to spawn
var/amount = copytext(item_string, path_str_sep+1) //Amount to spawn
var/amount = copytext(item_string, path_str_sep + length(path_str_sep)) //Amount to spawn
//world << "DEBUG: Item string [item_string] processed"
amount = text2num(amount)
path = text2path(path)
@@ -10,9 +10,9 @@
spawn(300)
verbs += /client/verb/mentorhelp // 30 second cool-down for mentorhelp
msg = sanitize(copytext(msg,1,MAX_MESSAGE_LEN))
if(!msg) return
if(!mob) return //this doesn't happen
msg = sanitize(copytext_char(msg, 1, MAX_MESSAGE_LEN))
if(!msg || !mob)
return
var/show_char = CONFIG_GET(flag/mentors_mobname_only)
var/mentor_msg = "<span class='mentornotice'><b><font color='purple'>MENTORHELP:</b> <b>[key_name_mentor(src, 1, 0, 1, show_char)]</b>: [msg]</font></span>"
@@ -53,7 +53,7 @@
if (!C.is_mentor() && !is_mentor())
return
msg = sanitize(copytext(msg,1,MAX_MESSAGE_LEN))
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>")
return
@@ -5,8 +5,9 @@
if(!is_mentor())
return
msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN)
if(!msg) return
msg = copytext_char(sanitize(msg), 1, MAX_MESSAGE_LEN)
if(!msg)
return
msg = emoji_parse(msg)
log_mentor("MSAY: [key_name(src)] : [msg]")
@@ -12,8 +12,11 @@
/mob/living/carbon/human/movement_delay()
. = 0
if(!resting && m_intent == MOVE_INTENT_RUN && !sprinting)
. += 1
if(!resting && 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
. += ..()
@@ -17,6 +17,12 @@
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(resting)
@@ -333,6 +333,8 @@ Creating a chem with a low purity will make you permanently fall in love with so
..()
/datum/reagent/fermi/proc/FallInLove(mob/living/carbon/Lover, mob/living/carbon/Love)
if(Lover.client?.prefs.cit_toggles & NEVER_HYPNO)
return // doesn't even give a message, it's just ignored
if(Lover.has_status_effect(STATUS_EFFECT_INLOVE))
to_chat(Lover, "<span class='warning'>You are already fully devoted to someone else!</span>")
return
@@ -10,7 +10,7 @@
if(clear_conversion == REACTION_CLEAR_IMPURE | REACTION_CLEAR_INVERSE)
for(var/id in results)
var/datum/reagent/R = my_atom.reagents.has_reagent(id)
if(R.purity == 1)
if(!R || R.purity == 1)
continue
var/cached_volume = R.volume
@@ -25,7 +25,6 @@
my_atom.reagents.add_reagent(R.impure_chem, impureVol, FALSE, other_purity = 1)
R.cached_purity = R.purity
R.purity = 1
return
//Called when temperature is above a certain threshold, or if purity is too low.
/datum/chemical_reaction/proc/FermiExplode(datum/reagents/R0, var/atom/my_atom, volume, temp, pH, Exploding = FALSE)
@@ -71,7 +71,7 @@
if(!istype(cont))
return
if(used == TRUE)
to_chat(user, "<span class='warning'>[user] has already been used!</span>")
to_chat(user, "<span class='warning'>[src] has already been used!</span>")
return
if(!LAZYLEN(cont.reagents.reagent_list))
return
@@ -107,6 +107,7 @@
if(-INFINITY to 1)
color = "#c6040c"
desc += " The paper looks to be around a pH of [round(cont.reagents.pH, 1)]"
name = "used [name]"
used = TRUE
/obj/item/fermichem/pHmeter
@@ -1,7 +1,7 @@
//body bluids
/datum/reagent/consumable/semen
name = "Semen"
description = "Sperm from some animal. I bet you'll drink this out of a bucket someday."
description = "Sperm from some animal. Useless for anything but insemination, really."
taste_description = "something salty"
taste_mult = 2 //Not very overpowering flavor
data = list("donor"=null,"viruses"=null,"donor_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null)
@@ -32,15 +32,15 @@
icon_state = "semen1"
random_icon_states = list("semen1", "semen2", "semen3", "semen4")
/obj/effect/decal/cleanable/semen/New()
..()
dir = pick(1,2,4,8)
/obj/effect/decal/cleanable/semen/Initialize(mapload)
. = ..()
dir = GLOB.cardinals
add_blood_DNA(list("Non-human DNA" = "A+"))
/obj/effect/decal/cleanable/semen/replace_decal(obj/effect/decal/cleanable/semen/S)
if(S.blood_DNA)
blood_DNA |= S.blood_DNA.Copy()
..()
blood_DNA |= S.blood_DNA
return ..()
/datum/reagent/consumable/femcum
name = "Female Ejaculate"
@@ -65,15 +65,15 @@
blood_state = null
bloodiness = null
/obj/effect/decal/cleanable/femcum/New()
..()
dir = pick(1,2,4,8)
/obj/effect/decal/cleanable/femcum/Initialize(mapload)
. = ..()
dir = GLOB.cardinals
add_blood_DNA(list("Non-human DNA" = "A+"))
/obj/effect/decal/cleanable/femcum/replace_decal(obj/effect/decal/cleanable/femcum/F)
if(F.blood_DNA)
blood_DNA |= F.blood_DNA.Copy()
..()
blood_DNA |= F.blood_DNA
return ..()
/datum/reagent/consumable/femcum/reaction_turf(turf/T, reac_volume)
if(!istype(T))