diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm
index 0280698546..fb5ad3eee6 100644
--- a/_maps/map_files/BoxStation/BoxStation.dmm
+++ b/_maps/map_files/BoxStation/BoxStation.dmm
@@ -56662,6 +56662,7 @@
},
/area/maintenance/bar)
"mqZ" = (
+/obj/structure/reagent_dispensers/keg/aphro/strong,
/obj/item/reagent_containers/glass/beaker,
/turf/open/floor/plating,
/area/maintenance/bar)
diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm
index 7cff8514bc..d0db7b142a 100644
--- a/_maps/map_files/Deltastation/DeltaStation2.dmm
+++ b/_maps/map_files/Deltastation/DeltaStation2.dmm
@@ -126027,6 +126027,7 @@
/turf/open/floor/plating,
/area/chapel/office)
"ijB" = (
+/obj/structure/reagent_dispensers/keg/aphro/strong,
/obj/item/reagent_containers/glass/beaker,
/turf/open/floor/plating,
/area/crew_quarters/abandoned_gambling_den)
diff --git a/_maps/map_files/LambdaStation/lambda.dmm b/_maps/map_files/LambdaStation/lambda.dmm
index 2a595d7136..ffc713b565 100644
--- a/_maps/map_files/LambdaStation/lambda.dmm
+++ b/_maps/map_files/LambdaStation/lambda.dmm
@@ -44383,6 +44383,7 @@
/turf/open/floor/plasteel/white,
/area/hallway/primary/aft)
"bFB" = (
+/obj/structure/reagent_dispensers/keg/aphro/strong,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/wood{
icon_state = "wood-broken5"
diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm
index 49f526a59e..8f220ac250 100644
--- a/_maps/map_files/PubbyStation/PubbyStation.dmm
+++ b/_maps/map_files/PubbyStation/PubbyStation.dmm
@@ -60065,6 +60065,7 @@
/turf/open/floor/plasteel/dark,
/area/chapel/office)
"tap" = (
+/obj/structure/reagent_dispensers/keg/aphro,
/turf/open/floor/wood,
/area/maintenance/department/crew_quarters/dorms)
"taA" = (
diff --git a/code/controllers/subsystem/processing/circuit.dm b/code/controllers/subsystem/processing/circuit.dm
index ac720a7fb4..880e7a16a8 100644
--- a/code/controllers/subsystem/processing/circuit.dm
+++ b/code/controllers/subsystem/processing/circuit.dm
@@ -50,17 +50,20 @@ PROCESSING_SUBSYSTEM_DEF(circuit)
/obj/item/electronic_assembly/simple,
/obj/item/electronic_assembly/hook,
/obj/item/electronic_assembly/pda,
+ /obj/item/electronic_assembly/dildo,
/obj/item/electronic_assembly/small/default,
/obj/item/electronic_assembly/small/cylinder,
/obj/item/electronic_assembly/small/scanner,
/obj/item/electronic_assembly/small/hook,
/obj/item/electronic_assembly/small/box,
+ /obj/item/electronic_assembly/small/dildo,
/obj/item/electronic_assembly/medium/default,
/obj/item/electronic_assembly/medium/box,
/obj/item/electronic_assembly/medium/clam,
/obj/item/electronic_assembly/medium/medical,
/obj/item/electronic_assembly/medium/gun,
/obj/item/electronic_assembly/medium/radio,
+ /obj/item/electronic_assembly/medium/dildo,
/obj/item/electronic_assembly/large/default,
/obj/item/electronic_assembly/large/scope,
/obj/item/electronic_assembly/large/terminal,
diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm
index 6564a83729..8944b55cc4 100644
--- a/code/game/objects/effects/spawners/lootdrop.dm
+++ b/code/game/objects/effects/spawners/lootdrop.dm
@@ -380,6 +380,8 @@
name = "random keg spawner"
lootcount = 1
loot = list(/obj/structure/reagent_dispensers/keg/mead = 5,
+ /obj/structure/reagent_dispensers/keg/aphro = 2,
+ /obj/structure/reagent_dispensers/keg/aphro/strong = 2,
/obj/structure/reagent_dispensers/keg/gargle = 1)
/obj/effect/spawner/lootdrop/coin
diff --git a/code/modules/cargo/packs/misc.dm b/code/modules/cargo/packs/misc.dm
index c6728831eb..65a20bb6c5 100644
--- a/code/modules/cargo/packs/misc.dm
+++ b/code/modules/cargo/packs/misc.dm
@@ -415,7 +415,8 @@
/obj/item/restraints/handcuffs/fake/kinky,
/obj/item/clothing/head/kitty/genuine, // Why its illegal
/obj/item/clothing/head/kitty/genuine,
- /obj/item/storage/pill_bottle/penis_enlargement)
+ /obj/item/storage/pill_bottle/penis_enlargement,
+ /obj/structure/reagent_dispensers/keg/aphro)
crate_name = "lewd kit"
crate_type = /obj/structure/closet/crate
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 8f83c97e1c..1b048c9a2e 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -86,6 +86,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/gender = MALE //gender of character (well duh)
var/age = 30 //age of character
//SKYRAT CHANGES BEGIN
+ var/skyrat_ooc_notes = ""
var/erppref = "Ask"
var/nonconpref = "Ask"
var/vorepref = "Ask"
@@ -407,13 +408,13 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "Set Silicon Examine Text
"
if(length(features["silicon_flavor_text"]) <= 40)
if(!length(features["silicon_flavor_text"]))
- dat += "\[...\]"
+ dat += "\[...\]
"
else
- dat += "[features["silicon_flavor_text"]]"
+ dat += "[features["silicon_flavor_text"]]
"
else
dat += "[TextPreview(features["silicon_flavor_text"])]...
"
dat += "
OOC notes
"
- dat += "Set OOC notes
"
+ /*dat += "Set OOC notes
"
var/ooc_notes_len = length(features["ooc_notes"])
if(ooc_notes_len <= 40)
if(!ooc_notes_len)
@@ -422,8 +423,9 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "[features["ooc_notes"]]
"
else
dat += "[TextPreview(features["ooc_notes"])]...
"
-
+ */
//SKYRAT EDIT
+ dat += "Set OOC Notes
"
dat += "ERP : [erppref]
"
dat += "Non-Con : [nonconpref]
"
dat += "Vore : [vorepref]
"
@@ -868,7 +870,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "Jumpsuit:
[jumpsuit_style]
"
if((HAS_FLESH in pref_species.species_traits) || (HAS_BONE in pref_species.species_traits))
dat += "
Temporal Scarring:
[(persistent_scars) ? "Enabled" : "Disabled"]"
- dat += "Clear scar slots"
+ dat += "Clear scar slots
"
dat += "Uplink Location:[uplink_spawn_loc]"
dat += ""
@@ -1195,6 +1197,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "Breast Enlargement: [(cit_toggles & BREAST_ENLARGEMENT) ? "Allowed" : "Disallowed"]
"
dat += "Penis Enlargement: [(cit_toggles & PENIS_ENLARGEMENT) ? "Allowed" : "Disallowed"]
"
dat += "Hypno: [(cit_toggles & NEVER_HYPNO) ? "Disallowed" : "Allowed"]
"
+ dat += "Aphrodisiacs: [(cit_toggles & NO_APHRO) ? "Disallowed" : "Allowed"]
"
dat += "Ass Slapping: [(cit_toggles & NO_ASS_SLAP) ? "Disallowed" : "Allowed"]
"
//SKYRAT EDIT
dat += "Extreme ERP verbs : [extremepref]
" // https://youtu.be/0YrU9ASVw6w
@@ -1820,19 +1823,26 @@ GLOBAL_LIST_EMPTY(preferences_datums)
medical_records = rec
if("flavor_text")
- var/msg = stripped_multiline_input(usr, "Set the flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!", "Flavor Text", html_decode(features["flavor_text"]), MAX_FLAVOR_LEN, TRUE)
+ var/msg = input(usr, "Set the flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!", "Flavor Text", features["flavor_text"]) as message|null //Skyrat edit, removed stripped_multiline_input()
if(!isnull(msg))
- features["flavor_text"] = msg
+ features["flavor_text"] = strip_html_simple(msg, MAX_FLAVOR_LEN, TRUE) //Skyrat edit, removed strip_html_simple()
if("silicon_flavor_text")
- var/msg = stripped_multiline_input(usr, "Set the silicon flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!", "Silicon Flavor Text", html_decode(features["silicon_flavor_text"]), MAX_FLAVOR_LEN, TRUE)
+ var/msg = input(usr, "Set the silicon flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!", "Silicon Flavor Text", features["silicon_flavor_text"]) as message|null //Skyrat edit, removed stripped_multiline_input()
if(!isnull(msg))
- features["silicon_flavor_text"] = msg
+ features["silicon_flavor_text"] = strip_html_simple(msg, MAX_FLAVOR_LEN, TRUE) //Skyrat edit, uses strip_html_simple()
+ //SKYRAT CHANGES
+ if("skyrat_ooc_notes")
+ var/msg = input(usr, "Set your OOC Notes", "OOC Notes", skyrat_ooc_notes) as message|null
+ if(msg)
+ skyrat_ooc_notes = strip_html_simple(msg, MAX_FLAVOR_LEN, TRUE)
+
+ /* Skyrat changes - do nothing here because we dont use this and this may be exploited
if("ooc_notes")
var/msg = stripped_multiline_input(usr, "Set always-visible OOC notes related to content preferences. THIS IS NOT FOR CHARACTER DESCRIPTIONS!", "OOC notes", html_decode(features["ooc_notes"]), MAX_FLAVOR_LEN, TRUE)
if(!isnull(msg))
- features["ooc_notes"] = msg
+ features["ooc_notes"] = msg*/
if("hair")
var/new_hair = input(user, "Choose your character's hair colour:", "Character Preference","#"+hair_color) as color|null
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index 16435bb154..7d68fe89e0 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -196,9 +196,9 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["horn_color"] >> features["horns_color"]
if(current_version < 33)
- features["flavor_text"] = html_encode(features["flavor_text"])
- features["silicon_flavor_text"] = html_encode(features["silicon_flavor_text"])
- features["ooc_notes"] = html_encode(features["ooc_notes"])
+ features["flavor_text"] = strip_html_simple(features["flavor_text"], MAX_FLAVOR_LEN, TRUE)
+ features["silicon_flavor_text"] = strip_html_simple(features["silicon_flavor_text"], MAX_FLAVOR_LEN, TRUE)
+ features["ooc_notes"] = strip_html_simple(features["ooc_notes"], MAX_FLAVOR_LEN, TRUE)
/datum/preferences/proc/load_path(ckey,filename="preferences.sav")
if(!ckey)
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index 13828a48a6..7d6c5c7986 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -157,9 +157,6 @@
else // Skyrat Change
. += "[t_His] player has not allowed lewd verbs." // Skyrat Change
- if(client && client.prefs) //what about a runtime for not having clients!
- . += "[src]'s Prefs :
ERP : [client.prefs.erppref] | Non-Con : [client.prefs.nonconpref] | Vore : [client.prefs.vorepref]
"
-
var/list/missing = list(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)
var/list/disabled = list()
for(var/X in bodyparts)
@@ -451,6 +448,11 @@
. += "Traits: [traitstring]"
SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, user, .) //This also handles flavor texts now
+
+ var/invisible_man = skipface || get_visible_name() == "Unknown" // SKYRAT EDIT -- BEGIN
+ if(!invisible_man)
+ if(client)
+ . += "OOC Notes: \[View\]" // SKYRAT EDIT -- END
. += "*---------*"
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index bdaa8b6714..154fc067ee 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -44,7 +44,7 @@
AddComponent(/datum/component/combat_mode)
AddElement(/datum/element/flavor_text/carbon, _name = "Flavor Text", _save_key = "flavor_text")
AddElement(/datum/element/flavor_text, "", "Temporary Flavor Text", "This should be used only for things pertaining to the current round!")
- AddElement(/datum/element/flavor_text, _name = "OOC Notes", _addendum = "Put information on ERP/vore/lewd-related preferences here. THIS SHOULD NOT CONTAIN REGULAR FLAVORTEXT!!", _always_show = TRUE, _save_key = "ooc_notes", _examine_no_preview = TRUE)
+ //AddElement(/datum/element/flavor_text, _name = "OOC Notes", _addendum = "Put information on ERP/vore/lewd-related preferences here. THIS SHOULD NOT CONTAIN REGULAR FLAVORTEXT!!", _always_show = TRUE, _save_key = "ooc_notes", _examine_no_preview = TRUE) //Skyrat change - we have our own OOC notes
/mob/living/carbon/human/Destroy()
QDEL_NULL(physiology)
diff --git a/code/modules/mob/living/silicon/pai/pai_shell.dm b/code/modules/mob/living/silicon/pai/pai_shell.dm
index 63fb82082f..3c0032ea6b 100644
--- a/code/modules/mob/living/silicon/pai/pai_shell.dm
+++ b/code/modules/mob/living/silicon/pai/pai_shell.dm
@@ -61,6 +61,7 @@
client.perspective = EYE_PERSPECTIVE
client.eye = card
var/turf/T = drop_location()
+ release_vore_contents()
card.forceMove(T)
forceMove(card)
density = FALSE
diff --git a/code/modules/mob/living/silicon/robot/examine.dm b/code/modules/mob/living/silicon/robot/examine.dm
index 6ac1d410eb..5e0b7a1fd4 100644
--- a/code/modules/mob/living/silicon/robot/examine.dm
+++ b/code/modules/mob/living/silicon/robot/examine.dm
@@ -48,6 +48,12 @@
. += "It doesn't seem to be responding."
if(DEAD)
. += "It looks like its system is corrupted and requires a reset."
+
+ //SKYRAT EDIT - OOC NOTES!
+ if(client)
+ . += "OOC Notes: \[View\]"
+ //END SKYRAT EDIT
+
. += "*---------*"
. += ..()
diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index 7a9610fb53..36ab85e4f2 100644
--- a/code/modules/mob/living/silicon/silicon.dm
+++ b/code/modules/mob/living/silicon/silicon.dm
@@ -14,7 +14,6 @@
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
speech_span = SPAN_ROBOT
flags_1 = PREVENT_CONTENTS_EXPLOSION_1 | HEAR_1
- vore_flags = NO_VORE
var/datum/ai_laws/laws = null//Now... THEY ALL CAN ALL HAVE LAWS
var/last_lawchange_announce = 0
@@ -60,7 +59,7 @@
. = ..()
AddElement(/datum/element/flavor_text, _name = "Silicon Flavor Text", _save_key = "silicon_flavor_text")
AddElement(/datum/element/flavor_text, "", "Temporary Flavor Text", "This should be used only for things pertaining to the current round!")
- AddElement(/datum/element/flavor_text, _name = "OOC Notes", _addendum = "Put information on ERP/vore/lewd-related preferences here. THIS SHOULD NOT CONTAIN REGULAR FLAVORTEXT!!", _always_show = TRUE, _save_key = "ooc_notes", _examine_no_preview = TRUE)
+ //AddElement(/datum/element/flavor_text, _name = "OOC Notes", _addendum = "Put information on ERP/vore/lewd-related preferences here. THIS SHOULD NOT CONTAIN REGULAR FLAVORTEXT!!", _always_show = TRUE, _save_key = "ooc_notes", _examine_no_preview = TRUE) //Skyrat edit
/mob/living/silicon/med_hud_set_health()
return //we use a different hud
diff --git a/code/modules/reagents/chemistry/reagents/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drink_reagents.dm
index e1433eb64e..9257f4a50d 100644
--- a/code/modules/reagents/chemistry/reagents/drink_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/drink_reagents.dm
@@ -1044,6 +1044,12 @@
M.emote("nya")
if(prob(20))
to_chat(M, "[pick("Headpats feel nice.", "Backrubs would be nice.", "Mew")]")
+ if(ishuman(M) && !(M.client?.prefs.cit_toggles & NO_APHRO))
+ var/mob/living/carbon/human/H = M
+ var/list/adjusted = H.adjust_arousal(5,aphro = TRUE)
+ for(var/g in adjusted)
+ var/obj/item/organ/genital/G = g
+ to_chat(M, "You feel like playing with your [G.name]!")
..()
/datum/reagent/consumable/monkey_energy
diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm
index b6de7b2eab..c6d850ceac 100644
--- a/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -2197,6 +2197,12 @@
M.emote("nya")
if(prob(20))
to_chat(M, "[pick("Headpats feel nice.", "The feeling of a hairball...", "Backrubs would be nice.", "Whats behind those doors?")]")
+ if(ishuman(M) && !(M.client?.prefs.cit_toggles & NO_APHRO))
+ var/mob/living/carbon/human/H = M
+ var/list/adjusted = H.adjust_arousal(2,aphro = TRUE)
+ for(var/g in adjusted)
+ var/obj/item/organ/genital/G = g
+ to_chat(M, "You feel like playing with your [G.name]!")
..()
/datum/reagent/preservahyde
diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm
index 09b7eabbc1..19bd14c813 100644
--- a/code/modules/reagents/chemistry/recipes/others.dm
+++ b/code/modules/reagents/chemistry/recipes/others.dm
@@ -687,7 +687,7 @@
name = "felinid mutation toxic"
id = /datum/reagent/mutationtoxin/felinid
results = list(/datum/reagent/mutationtoxin/felinid = 1)
- required_reagents = list(/datum/reagent/toxin/mindbreaker = 1, /datum/reagent/ammonia = 1, /datum/reagent/water = 1, /datum/reagent/pax/catnip = 1, /datum/reagent/mutationtoxin = 1)
+ required_reagents = list(/datum/reagent/toxin/mindbreaker = 1, /datum/reagent/ammonia = 1, /datum/reagent/water = 1, /datum/reagent/drug/aphrodisiac = 10, /datum/reagent/mutationtoxin = 1) // Maybe aphro+ if it becomes a shitty meme
required_temp = 450
/datum/chemical_reaction/moff
diff --git a/code/modules/vending/kinkmate.dm b/code/modules/vending/kinkmate.dm
index dc4f4e9273..df8a4e8a96 100644
--- a/code/modules/vending/kinkmate.dm
+++ b/code/modules/vending/kinkmate.dm
@@ -36,10 +36,13 @@
/obj/item/clothing/under/misc/keyholesweater = 2,
/obj/item/clothing/under/misc/stripper/mankini = 2,
/obj/item/clothing/under/costume/jabroni = 2,
- /obj/item/dildo/flared/huge = 3
+ /obj/item/dildo/flared/huge = 3,
+ /obj/item/reagent_containers/glass/bottle/crocin = 5,
+ /obj/item/reagent_containers/glass/bottle/camphor = 5
)
premium = list(
/obj/item/clothing/accessory/skullcodpiece/fake = 3,
+ /obj/item/reagent_containers/glass/bottle/hexacrocin = 10,
/obj/item/clothing/under/pants/chaps = 5
)
refill_canister = /obj/item/vending_refill/kink
diff --git a/modular_citadel/code/datums/status_effects/chems.dm b/modular_citadel/code/datums/status_effects/chems.dm
index 0e971d4ced..4fa2a51fac 100644
--- a/modular_citadel/code/datums/status_effects/chems.dm
+++ b/modular_citadel/code/datums/status_effects/chems.dm
@@ -583,6 +583,16 @@
C.Stun(60)
to_chat(owner, "Your muscles seize up, then start spasming wildy!")
+ //wah intensifies wah-rks
+ else if (lowertext(customTriggers[trigger]) == "cum")//aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ if (lewd)
+ if(ishuman(C))
+ var/mob/living/carbon/human/H = C
+ H.mob_climax(forced_climax=TRUE)
+ C.SetStun(10)//We got your stun effects in somewhere, Kev.
+ else
+ C.throw_at(get_step_towards(hearing_args[HEARING_SPEAKER],C), 3, 1) //cut this if it's too hard to get working
+
//kneel (knockdown)
else if (lowertext(customTriggers[trigger]) == "kneel")//as close to kneeling as you can get, I suppose.
to_chat(owner, "You drop to the ground unsurreptitiously.")
@@ -664,6 +674,15 @@
deltaResist *= 1.25
if (owner.reagents.has_reagent(/datum/reagent/medicine/neurine))
deltaResist *= 1.5
+ if (!(owner.client?.prefs.cit_toggles & NO_APHRO) && lewd)
+ if (owner.reagents.has_reagent(/datum/reagent/drug/anaphrodisiac))
+ deltaResist *= 1.5
+ if (owner.reagents.has_reagent(/datum/reagent/drug/anaphrodisiacplus))
+ deltaResist *= 2
+ if (owner.reagents.has_reagent(/datum/reagent/drug/aphrodisiac))
+ deltaResist *= 0.75
+ if (owner.reagents.has_reagent(/datum/reagent/drug/aphrodisiacplus))
+ deltaResist *= 0.5
//Antag resistance
//cultists are already brainwashed by their god
if(iscultist(owner))
diff --git a/modular_citadel/code/modules/client/preferences_savefile.dm b/modular_citadel/code/modules/client/preferences_savefile.dm
index e3af277025..7b304dd113 100644
--- a/modular_citadel/code/modules/client/preferences_savefile.dm
+++ b/modular_citadel/code/modules/client/preferences_savefile.dm
@@ -14,10 +14,11 @@
features["mcolor2"] = sanitize_hexcolor(features["mcolor2"], 6, FALSE)
features["mcolor3"] = sanitize_hexcolor(features["mcolor3"], 6, FALSE)
- //Skyrat
+ // SKYRAT CHANGE START
S["enable_personal_chat_color"] >> enable_personal_chat_color
S["personal_chat_color"] >> personal_chat_color
- //skyrat begin
+ skyrat_ooc_notes = sanitize_text(S["skyrat_ooc_notes"])
+ skyrat_ooc_notes = strip_html_simple(skyrat_ooc_notes, MAX_FLAVOR_LEN, TRUE)
erppref = sanitize_text(S["erp_pref"], "Ask")
if(!length(erppref)) erppref = "Ask"
nonconpref = sanitize_text(S["noncon_pref"], "Ask")
@@ -30,10 +31,13 @@
extremeharm = sanitize_text(S["extremeharm"], "No")
if(!length(extremeharm) || (extremepref = "No"))
extremeharm = "No"
- //skyrat end
- //skyrat extras
enable_personal_chat_color = sanitize_integer(enable_personal_chat_color, 0, 1, initial(enable_personal_chat_color))
personal_chat_color = sanitize_hexcolor(personal_chat_color, 6, 1, "#FFFFFF")
+ //Moves over the previous OOC notes to our ooc notes
+ if(length(features["ooc_notes"]) > length(skyrat_ooc_notes))
+ skyrat_ooc_notes = features["ooc_notes"]
+ features["ooc_notes"] = ""
+ //END OF SKYRAT CHANGES
/datum/preferences/proc/cit_character_pref_save(savefile/S)
//ipcs
@@ -58,6 +62,7 @@
WRITE_FILE(S["silicon_feature_flavor_text"], features["silicon_flavor_text"])
//skyrat stuff
+ WRITE_FILE(S["skyrat_ooc_notes"], skyrat_ooc_notes)
WRITE_FILE(S["erp_pref"], erppref)
WRITE_FILE(S["noncon_pref"], nonconpref)
WRITE_FILE(S["vore_pref"], vorepref)
diff --git a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm
index 39ba69bd61..4e6e0fa153 100644
--- a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm
@@ -178,7 +178,7 @@
name = "Sucubus milk"
id = /datum/reagent/fermi/breast_enlarger
results = list(/datum/reagent/fermi/breast_enlarger = 8)
- required_reagents = list(/datum/reagent/medicine/salglu_solution = 2, /datum/reagent/consumable/milk = 1, /datum/reagent/medicine/synthflesh = 2, /datum/reagent/silicon = 5)
+ required_reagents = list(/datum/reagent/medicine/salglu_solution = 1, /datum/reagent/consumable/milk = 1, /datum/reagent/medicine/synthflesh = 2, /datum/reagent/silicon = 3, /datum/reagent/drug/aphrodisiac = 3)
mix_message = "the reaction gives off a mist of milk."
//FermiChem vars:
OptimalTempMin = 200
@@ -218,7 +218,7 @@
name = "Incubus draft"
id = /datum/reagent/fermi/penis_enlarger
results = list(/datum/reagent/fermi/penis_enlarger = 8)
- required_reagents = list(/datum/reagent/blood = 5, /datum/reagent/medicine/synthflesh = 2, /datum/reagent/carbon = 5, /datum/reagent/medicine/salglu_solution = 2)
+ required_reagents = list(/datum/reagent/blood = 5, /datum/reagent/medicine/synthflesh = 2, /datum/reagent/carbon = 2, /datum/reagent/drug/aphrodisiac = 2, /datum/reagent/medicine/salglu_solution = 1)
mix_message = "the reaction gives off a spicy mist."
//FermiChem vars:
OptimalTempMin = 200
@@ -384,7 +384,7 @@
name = "Furranium"
id = /datum/reagent/fermi/furranium
results = list(/datum/reagent/fermi/furranium = 5)
- required_reagents = list(/datum/reagent/pax/catnip = 1, /datum/reagent/silver = 2, /datum/reagent/medicine/salglu_solution = 2)
+ required_reagents = list(/datum/reagent/drug/aphrodisiac = 1, /datum/reagent/moonsugar = 1, /datum/reagent/silver = 2, /datum/reagent/medicine/salglu_solution = 1)
mix_message = "You think you can hear a howl come from the beaker."
//FermiChem vars:
OptimalTempMin = 350
diff --git a/sandcode/code/modules/cargo/packs/misc.dm b/sandcode/code/modules/cargo/packs/misc.dm
new file mode 100644
index 0000000000..7dbcf545f3
--- /dev/null
+++ b/sandcode/code/modules/cargo/packs/misc.dm
@@ -0,0 +1,9 @@
+/datum/supply_pack/misc/lewdkeg
+ name = "Lewd Deluxe Keg"
+ desc = "That other stuff not getting you ready? Well I have a Chemslut making tons of the good stuff."
+ cost = 7500 //It can be a weapon
+ contraband = TRUE
+ contains = list(/obj/structure/reagent_dispensers/keg/aphro/strong)
+ crate_name = "deluxe keg"
+ crate_type = /obj/structure/closet/crate
+
diff --git a/sandcode/code/modules/integrated_electronics/core/assemblies.dm b/sandcode/code/modules/integrated_electronics/core/assemblies.dm
new file mode 100644
index 0000000000..e986b936df
--- /dev/null
+++ b/sandcode/code/modules/integrated_electronics/core/assemblies.dm
@@ -0,0 +1,14 @@
+/obj/item/electronic_assembly/small/dildo
+ name = "type-f electronic device"
+ icon_state = "setup_dildo_small"
+ desc = "It's a case, for building tiny-sized electronics with. This one has a phallic design."
+
+/obj/item/electronic_assembly/dildo
+ name = "type-g electronic assembly"
+ icon_state = "setup_dildo_medium"
+ desc = "It's a case, for building small electronics with. This one has a phallic design."
+
+/obj/item/electronic_assembly/medium/dildo
+ name = "type-g electronic mechanism"
+ icon_state = "setup_dildo_large"
+ desc = "It's a case, for building medium-sized electronics with. This one has a phallic design."
diff --git a/sandcode/code/modules/mob/living/carbon/human/human.dm b/sandcode/code/modules/mob/living/carbon/human/human.dm
new file mode 100644
index 0000000000..d797abb637
--- /dev/null
+++ b/sandcode/code/modules/mob/living/carbon/human/human.dm
@@ -0,0 +1,12 @@
+/mob/living/carbon/human/Topic(href, href_list)
+ . = ..()
+ if(href_list["skyrat_ooc_notes"])
+ if(client)
+ var/str = "[src]'s OOC Notes :
ERP : [client.prefs.erppref] | Non-Con : [client.prefs.nonconpref] | Vore : [client.prefs.vorepref]"
+ if(client.prefs.extremepref == "Yes")
+ str += "
Extreme content : [client.prefs.extremepref] | Extreme content harm : [client.prefs.extremeharm]"
+ str += "
[html_encode(client.prefs.skyrat_ooc_notes)]"
+ var/datum/browser/popup = new(usr, "[name]'s ooc info", "[name]'s OOC Information", 500, 200)
+ popup.set_content(text("[][]", "[name]'s OOC information", replacetext(str, "\n", "
")))
+ popup.open()
+ return
diff --git a/sandcode/code/modules/mob/living/silicon/silicon.dm b/sandcode/code/modules/mob/living/silicon/silicon.dm
new file mode 100644
index 0000000000..ff32f5810b
--- /dev/null
+++ b/sandcode/code/modules/mob/living/silicon/silicon.dm
@@ -0,0 +1,17 @@
+/mob/living/silicon/Topic(href, href_list)
+ . = ..()
+ if(href_list["skyrat_ooc_notes"])
+ if(client)
+ var/str = "[src]'s OOC Notes :
ERP : [client.prefs.erppref] | Non-Con : [client.prefs.nonconpref] | Vore : [client.prefs.vorepref]
[client.prefs.skyrat_ooc_notes]"
+ usr << browse(text("[][]", "[name]'s OOC information", replacetext(str, "\n", "
")), text("window=[];size=500x200", "[name]'s ooc info"))
+ onclose(usr, "[name]'s ooc info")
+
+/mob/living/silicon/verb/robot_nom(var/mob/living/T in oview(1))
+ set name = "Eat Mob"
+ set category = "Vore"
+ set desc = "Allows you to eat someone."
+
+ if(!CHECK_BITFIELD(T.vore_flags,DEVOURABLE))
+ to_chat(src, "System error: Unauthorized operation.")
+ return
+ return feed_grabbed_to_self(src,T)
diff --git a/sandcode/code/modules/reagents/chemistry/reagents/drugs_reagents.dm b/sandcode/code/modules/reagents/chemistry/reagents/drugs_reagents.dm
new file mode 100644
index 0000000000..eb531e789e
--- /dev/null
+++ b/sandcode/code/modules/reagents/chemistry/reagents/drugs_reagents.dm
@@ -0,0 +1,126 @@
+//aphrodisiac & anaphrodisiac
+
+/datum/reagent/drug/aphrodisiac
+ name = "Crocin"
+ description = "Naturally found in the crocus and gardenia flowers, this drug acts as a natural and safe aphrodisiac."
+ taste_description = "strawberries"
+ 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))
+ if((prob(min(current_cycle/2,5))))
+ M.emote(pick("moan","blush"))
+ if(prob(min(current_cycle/4,10)))
+ var/aroused_message = pick("You feel frisky.", "You're having trouble suppressing your urges.", "You feel in the mood.")
+ to_chat(M, "[aroused_message]")
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ var/list/genits = H.adjust_arousal(current_cycle, aphro = TRUE) // redundant but should still be here
+ for(var/g in genits)
+ var/obj/item/organ/genital/G = g
+ to_chat(M, "[G.arousal_verb]!")
+ ..()
+
+/datum/reagent/drug/aphrodisiacplus
+ name = "Hexacrocin"
+ description = "Chemically condensed form of basic crocin. This aphrodisiac is extremely powerful and addictive in most animals.\
+ Addiction withdrawals can cause brain damage and shortness of breath. Overdosage can lead to brain damage and a \
+ permanent increase in libido (commonly referred to as 'bimbofication')."
+ taste_description = "liquid desire"
+ 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))
+ if(prob(5))
+ if(prob(current_cycle))
+ M.say(pick("Hnnnnngghh...", "Ohh...", "Mmnnn..."))
+ else
+ M.emote(pick("moan","blush"))
+ if(prob(5))
+ var/aroused_message
+ if(current_cycle>25)
+ aroused_message = pick("You need to fuck someone!", "You're bursting with sexual tension!", "You can't get sex off your mind!")
+ else
+ aroused_message = pick("You feel a bit hot.", "You feel strong sexual urges.", "You feel in the mood.", "You're ready to go down on someone.")
+ to_chat(M, "[aroused_message]")
+ REMOVE_TRAIT(M,TRAIT_NEVERBONER,APHRO_TRAIT)
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ var/list/genits = H.adjust_arousal(100, aphro = TRUE) // redundant but should still be here
+ for(var/g in genits)
+ var/obj/item/organ/genital/G = g
+ to_chat(M, "[G.arousal_verb]!")
+ ..()
+
+/datum/reagent/drug/aphrodisiacplus/addiction_act_stage2(mob/living/M)
+ if(prob(30))
+ M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 2)
+ ..()
+/datum/reagent/drug/aphrodisiacplus/addiction_act_stage3(mob/living/M)
+ if(prob(30))
+ M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 3)
+
+ ..()
+/datum/reagent/drug/aphrodisiacplus/addiction_act_stage4(mob/living/M)
+ if(prob(30))
+ M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 4)
+ ..()
+
+/datum/reagent/drug/aphrodisiacplus/overdose_process(mob/living/M)
+ if(M && M.client?.prefs.arousable && !(M.client?.prefs.cit_toggles & NO_APHRO) && prob(33))
+ if(prob(5) && ishuman(M) && M.has_dna() && (M.client?.prefs.cit_toggles & BIMBOFICATION))
+ if(!HAS_TRAIT(M,TRAIT_PERMABONER))
+ to_chat(M, "Your libido is going haywire!")
+ ADD_TRAIT(M,TRAIT_PERMABONER,APHRO_TRAIT)
+ ..()
+
+/datum/reagent/drug/anaphrodisiac
+ name = "Camphor"
+ description = "Naturally found in some species of evergreen trees, camphor is a waxy substance. When injested by most animals, it acts as an anaphrodisiac\
+ , reducing libido and calming them. Non-habit forming and not addictive."
+ taste_description = "dull bitterness"
+ 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) && !(M.client?.prefs.cit_toggles & NO_APHRO))
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ var/list/genits = H.adjust_arousal(-100, aphro = TRUE)
+ if(genits.len)
+ to_chat(M, "You no longer feel aroused.")
+ ..()
+
+/datum/reagent/drug/anaphrodisiacplus
+ name = "Hexacamphor"
+ description = "Chemically condensed camphor. Causes an extreme reduction in libido and a permanent one if overdosed. Non-addictive."
+ taste_description = "tranquil celibacy"
+ 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 && !(M.client?.prefs.cit_toggles & NO_APHRO))
+ REMOVE_TRAIT(M,TRAIT_PERMABONER,APHRO_TRAIT)
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ var/list/genits = H.adjust_arousal(-100, aphro = TRUE)
+ if(genits.len)
+ to_chat(M, "You no longer feel aroused.")
+
+ ..()
+
+/datum/reagent/drug/anaphrodisiacplus/overdose_process(mob/living/M)
+ if(M && M.client?.prefs.arousable && prob(5))
+ to_chat(M, "You feel like you'll never feel aroused again...")
+ ADD_TRAIT(M,TRAIT_NEVERBONER,APHRO_TRAIT)
+ ..()
+
+//If the ##badword## thing already had a check how did it even prefbreak, you guys are geniouses. If it were for me, you wouldn't be able to opt-out.
diff --git a/sandcode/code/modules/reagents/chemistry/recipes/drugs.dm b/sandcode/code/modules/reagents/chemistry/recipes/drugs.dm
new file mode 100644
index 0000000000..0672e67925
--- /dev/null
+++ b/sandcode/code/modules/reagents/chemistry/recipes/drugs.dm
@@ -0,0 +1,31 @@
+/datum/chemical_reaction/aphro
+ name = "crocin"
+ id = /datum/reagent/drug/aphrodisiac
+ results = list(/datum/reagent/drug/aphrodisiac = 6)
+ required_reagents = list(/datum/reagent/carbon = 2, /datum/reagent/hydrogen = 2, /datum/reagent/oxygen = 2, /datum/reagent/water = 1)
+ required_temp = 400
+ mix_message = "The mixture boils off a pink vapor..."//The water boils off, leaving the crocin
+
+/datum/chemical_reaction/aphroplus
+ name = "hexacrocin"
+ id = /datum/reagent/drug/aphrodisiacplus
+ results = list(/datum/reagent/drug/aphrodisiacplus = 1)
+ required_reagents = list(/datum/reagent/drug/aphrodisiac = 6, /datum/reagent/phenol = 1)
+ required_temp = 400
+ mix_message = "The mixture rapidly condenses and darkens in color..."
+
+/datum/chemical_reaction/anaphro
+ name = "camphor"
+ id = /datum/reagent/drug/anaphrodisiac
+ results = list(/datum/reagent/drug/anaphrodisiac = 6)
+ required_reagents = list(/datum/reagent/carbon = 2, /datum/reagent/hydrogen = 2, /datum/reagent/oxygen = 2, /datum/reagent/sulfur = 1)
+ required_temp = 400
+ mix_message = "The mixture boils off a yellow, smelly vapor..."//Sulfur burns off, leaving the camphor
+
+/datum/chemical_reaction/anaphroplus
+ name = "pentacamphor"
+ id = /datum/reagent/drug/anaphrodisiacplus
+ results = list(/datum/reagent/drug/anaphrodisiacplus = 1)
+ required_reagents = list(/datum/reagent/drug/aphrodisiac = 5, /datum/reagent/acetone = 1)
+ required_temp = 300
+ mix_message = "The mixture thickens and heats up slighty..."
diff --git a/sandcode/code/modules/reagents/chemistry/recipes/fermi.dm b/sandcode/code/modules/reagents/chemistry/recipes/fermi.dm
new file mode 100644
index 0000000000..073091a0a0
--- /dev/null
+++ b/sandcode/code/modules/reagents/chemistry/recipes/fermi.dm
@@ -0,0 +1,3 @@
+/datum/chemical_reaction/fermi/furranium/organic
+ id = "furranium_organic"
+ required_reagents = list(/datum/reagent/drug/aphrodisiac = 1, /datum/reagent/pax/catnip = 1, /datum/reagent/silver = 2, /datum/reagent/medicine/salglu_solution = 1)
diff --git a/sandcode/code/modules/reagents/reagent_containers/bottle.dm b/sandcode/code/modules/reagents/reagent_containers/bottle.dm
new file mode 100644
index 0000000000..c187ccfa27
--- /dev/null
+++ b/sandcode/code/modules/reagents/reagent_containers/bottle.dm
@@ -0,0 +1,21 @@
+//Lewd Stuff
+
+/obj/item/reagent_containers/glass/bottle/crocin
+ name = "Crocin bottle"
+ desc = "A bottle of mild aphrodisiac. Increases libido."
+ list_reagents = list(/datum/reagent/drug/aphrodisiac = 30)
+
+/obj/item/reagent_containers/glass/bottle/hexacrocin
+ name = "Hexacrocin bottle"
+ desc = "A bottle of strong aphrodisiac. Increases libido."
+ list_reagents = list(/datum/reagent/drug/aphrodisiacplus = 30)
+
+/obj/item/reagent_containers/glass/bottle/camphor
+ name = "Camphor bottle"
+ desc = "A bottle of mild anaphrodisiac. Reduces libido."
+ list_reagents = list(/datum/reagent/drug/anaphrodisiac = 30)
+
+/obj/item/reagent_containers/glass/bottle/hexacamphor
+ name = "Hexacamphor bottle"
+ desc = "A bottle of strong anaphrodisiac. Reduces libido."
+ list_reagents = list(/datum/reagent/drug/anaphrodisiacplus = 30)
diff --git a/sandcode/code/modules/reagents/reagent_dispenser.dm b/sandcode/code/modules/reagents/reagent_dispenser.dm
new file mode 100644
index 0000000000..08d436c427
--- /dev/null
+++ b/sandcode/code/modules/reagents/reagent_dispenser.dm
@@ -0,0 +1,12 @@
+/obj/structure/reagent_dispensers/keg/aphro
+ name = "keg of aphrodisiac"
+ desc = "A keg of aphrodisiac."
+ icon_state = "pinkkeg"
+ reagent_id = /datum/reagent/drug/aphrodisiac
+ tank_volume = 150
+
+/obj/structure/reagent_dispensers/keg/aphro/strong
+ name = "keg of strong aphrodisiac"
+ desc = "A keg of strong and addictive aphrodisiac."
+ reagent_id = /datum/reagent/drug/aphrodisiacplus
+ tank_volume = 120
diff --git a/tgstation.dme b/tgstation.dme
index 17b3dffb30..f715a9e84e 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -3598,6 +3598,7 @@
#include "sandcode\code\interactions\lewd\objects.dm"
#include "sandcode\code\modules\atmospherics\machinery\pipes\bluespace.dm"
#include "sandcode\code\modules\cargo\packs\emergency.dm"
+#include "sandcode\code\modules\cargo\packs\misc.dm"
#include "sandcode\code\modules\client\asset_cache.dm"
#include "sandcode\code\modules\clothing\refactor.dm"
#include "sandcode\code\modules\clothing\head\misc.dm"
@@ -3607,6 +3608,7 @@
#include "sandcode\code\modules\clothing\spacesuits\hardsuit.dm"
#include "sandcode\code\modules\crafting\recipes\recipes_misc.dm"
#include "sandcode\code\modules\hydroponics\grown\misc.dm"
+#include "sandcode\code\modules\integrated_electronics\core\assemblies.dm"
#include "sandcode\code\modules\integrated_electronics\subtypes\output.dm"
#include "sandcode\code\modules\keybindings\keybind\carbon.dm"
#include "sandcode\code\modules\language\dragon.dm"
@@ -3626,6 +3628,8 @@
#include "sandcode\code\modules\mob\living\typing_indicator_overrides.dm"
#include "sandcode\code\modules\mob\living\carbon\give.dm"
#include "sandcode\code\modules\mob\living\carbon\show.dm"
+#include "sandcode\code\modules\mob\living\carbon\human\human.dm"
+#include "sandcode\code\modules\mob\living\silicon\silicon.dm"
#include "sandcode\code\modules\mob\living\simple_animal\friendly\doges.dm"
#include "sandcode\code\modules\mob\living\simple_animal\hostile\megafauna\blood_drunk_miner.dm"
#include "sandcode\code\modules\mob\living\simple_animal\hostile\megafauna\bubblegum.dm"
@@ -3662,7 +3666,12 @@
#include "sandcode\code\modules\power\port_gen.dm"
#include "sandcode\code\modules\projectiles\guns\ballistic\pistol.dm"
#include "sandcode\code\modules\projectiles\guns\energy\kinetic_accelerator.dm"
+#include "sandcode\code\modules\reagents\reagent_dispenser.dm"
+#include "sandcode\code\modules\reagents\chemistry\reagents\drugs_reagents.dm"
#include "sandcode\code\modules\reagents\chemistry\reagents\other_reagents.dm"
+#include "sandcode\code\modules\reagents\chemistry\recipes\drugs.dm"
+#include "sandcode\code\modules\reagents\chemistry\recipes\fermi.dm"
+#include "sandcode\code\modules\reagents\reagent_containers\bottle.dm"
#include "sandcode\code\modules\reagents\reagent_containers\spray.dm"
#include "sandcode\code\modules\research\designs\autolathe_designs.dm"
#include "sandcode\code\modules\research\designs\biogenerator_designs.dm"