diff --git a/code/__DEFINES/surgery.dm b/code/__DEFINES/surgery.dm
index 48d1117241f..b930c3711de 100644
--- a/code/__DEFINES/surgery.dm
+++ b/code/__DEFINES/surgery.dm
@@ -36,11 +36,6 @@
/// Scarring on the left eye
#define LEFT_EYE_SCAR (1<<1)
-/// Scarring on the right eye
-#define RIGHT_EYE_SCAR (1<<0)
-/// Scarring on the left eye
-#define LEFT_EYE_SCAR (1<<1)
-
/// Helper to figure out if a limb is organic
#define IS_ORGANIC_LIMB(limb) (limb.bodytype & BODYTYPE_ORGANIC)
/// Helper to figure out if a limb is robotic
diff --git a/code/__DEFINES/~~bubber_defines/chat.dm b/code/__DEFINES/~~bubber_defines/chat.dm
index dbfa4540563..aed899b5bd4 100644
--- a/code/__DEFINES/~~bubber_defines/chat.dm
+++ b/code/__DEFINES/~~bubber_defines/chat.dm
@@ -1,3 +1,4 @@
// Additional message types for TGUI chat panel filtering
#define MESSAGE_TYPE_LOOC "looc"
#define MESSAGE_TYPE_REMOTE_LOOC "rlooc"
+#define MESSAGE_TYPE_SUBTLE "subtle"
diff --git a/code/__DEFINES/~~bubber_defines/span.dm b/code/__DEFINES/~~bubber_defines/span.dm
index 1970f8254ea..ae88cc47010 100644
--- a/code/__DEFINES/~~bubber_defines/span.dm
+++ b/code/__DEFINES/~~bubber_defines/span.dm
@@ -1,4 +1,6 @@
+#define span_subtle(str) ("" + str + "")
#define span_subtlepda(str) ("" + str + "")
+#define span_subtler(str) ("" + str + "")
#define span_velvet(str) ("" + str + "")
#define vote_font(str) ("" + str + "")
diff --git a/code/_globalvars/lists/ambience.dm b/code/_globalvars/lists/ambience.dm
index 6cc984adf1c..ed3409da940 100644
--- a/code/_globalvars/lists/ambience.dm
+++ b/code/_globalvars/lists/ambience.dm
@@ -89,6 +89,7 @@ GLOBAL_LIST_INIT(icemoon_ambience,list(
'sound/ambience/icemoon/ambiicesting3.ogg',
'sound/ambience/icemoon/ambiicesting4.ogg',
'sound/ambience/icemoon/ambiicesting5.ogg',
+ 'modular_zubbers/sound/ambiance/bangle-freezer.ogg', // Bubber Edit - Credit: Bangle
))
GLOBAL_LIST_INIT(medical_ambience,list(
diff --git a/code/controllers/subsystem/pai.dm b/code/controllers/subsystem/pai.dm
index e3d47a5c0cd..c5754115a6e 100644
--- a/code/controllers/subsystem/pai.dm
+++ b/code/controllers/subsystem/pai.dm
@@ -52,18 +52,18 @@ SUBSYSTEM_DEF(pai)
return FALSE
switch(action)
if("submit")
- candidate.comments = trim(params["comments"], MAX_BROADCAST_LEN)
- candidate.description = trim(params["description"], MAX_BROADCAST_LEN)
- candidate.name = trim(params["name"], MAX_NAME_LEN)
+ candidate.comments = reject_bad_name(params["comments"], allow_numbers = TRUE, max_length = MAX_BROADCAST_LEN, strict = TRUE, cap_after_symbols = FALSE) || "Unknown"
+ candidate.description = reject_bad_name(params["description"], allow_numbers = TRUE, max_length = MAX_BROADCAST_LEN, strict = TRUE, cap_after_symbols = FALSE) || "Unknown"
+ candidate.name = reject_bad_name(params["name"], allow_numbers = TRUE, max_length = MAX_NAME_LEN, strict = TRUE, cap_after_symbols = FALSE) || "Unknown"
candidate.ckey = user.ckey
candidate.ready = TRUE
ui.close()
submit_alert(user)
return TRUE
if("save")
- candidate.comments = params["comments"]
- candidate.description = params["description"]
- candidate.name = params["name"]
+ candidate.comments = reject_bad_name(params["comments"], allow_numbers = TRUE, max_length = MAX_BROADCAST_LEN, strict = TRUE, cap_after_symbols = FALSE) || "Unknown"
+ candidate.description = reject_bad_name(params["description"], allow_numbers = TRUE, max_length = MAX_BROADCAST_LEN, strict = TRUE, cap_after_symbols = FALSE) || "Unknown"
+ candidate.name = reject_bad_name(params["name"], allow_numbers = TRUE, max_length = MAX_NAME_LEN, strict = TRUE, cap_after_symbols = FALSE) || "Unknown"
candidate.savefile_save(user)
return TRUE
if("load")
diff --git a/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm b/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm
index 1dfb765d970..87ae6f2bbe7 100644
--- a/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm
+++ b/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm
@@ -27,16 +27,16 @@
if(imprint_on_next_insertion) //We only want this set *once*
var/feature_name = receiver.dna.features[feature_key]
if (isnull(feature_name))
- /* NOVA EDIT - Customization - ORIGINAL:
+ /* SKYRAT EDIT - Customization - ORIGINAL:
feature_name = receiver.dna.species.mutant_organs[parent.type]
- */ // NOVA EDIT START
+ */ // SKYRAT EDIT START
if(!set_appearance_from_dna(receiver.dna))
- set_appearance_from_name(receiver.dna.species.mutant_organs[parent.type])
- // NOVA EDIT END
- // NOVA EDIT START - Puts the following line in an else block
+ set_appearance_from_name(receiver.dna.species.mutant_organs[parent.type] || pick(get_global_feature_list()))
+ // SKYRAT EDIT END
+ // SKYRAT EDIT START - Puts the following line in an else block
else
set_appearance_from_name(feature_name)
- // NOVA EDIT END
+ // SKYRAT EDIT END
imprint_on_next_insertion = FALSE
/datum/bodypart_overlay/mutant/get_overlay(layer, obj/item/bodypart/limb)
diff --git a/code/datums/status_effects/debuffs/dna_transformation.dm b/code/datums/status_effects/debuffs/dna_transformation.dm
index 243d20b1917..7504977e98f 100644
--- a/code/datums/status_effects/debuffs/dna_transformation.dm
+++ b/code/datums/status_effects/debuffs/dna_transformation.dm
@@ -33,9 +33,9 @@
// Save the old DNA
transforming.dna.copy_dna(old_dna)
// Makes them into the new DNA
- transforming.visual_only_organs = TRUE // NOVA EDIT ADDITION - Customization
+ transforming.visual_only_organs = TRUE // SKYRAT EDIT ADDITION - Customization
new_dna.transfer_identity(transforming)
- transforming.visual_only_organs = FALSE // NOVA EDIT ADDITION - Customization
+ transforming.visual_only_organs = FALSE // SKYRAT EDIT ADDITION - Customization
transforming.real_name = new_dna.real_name
transforming.name = transforming.get_visible_name()
transforming.updateappearance(mutcolor_update = TRUE)
@@ -46,9 +46,9 @@
var/mob/living/carbon/transforming = owner
if(!QDELING(owner)) // Don't really need to do appearance stuff if we're being deleted
- transforming.visual_only_organs = TRUE // NOVA EDIT ADDITION - Customization
+ transforming.visual_only_organs = TRUE // SKYRAT EDIT ADDITION - Customization
old_dna.transfer_identity(transforming)
- transforming.visual_only_organs = FALSE // NOVA EDIT ADDITION - Customization
+ transforming.visual_only_organs = FALSE // SKYRAT EDIT ADDITION - Customization
transforming.updateappearance(mutcolor_update = TRUE)
transforming.domutcheck()
diff --git a/code/game/machinery/computer/records/medical.dm b/code/game/machinery/computer/records/medical.dm
index 2043e129da3..1073c845375 100644
--- a/code/game/machinery/computer/records/medical.dm
+++ b/code/game/machinery/computer/records/medical.dm
@@ -101,7 +101,9 @@
if("add_note")
if(!params["content"])
return FALSE
- var/content = trim(params["content"], MAX_MESSAGE_LEN)
+ var/content = reject_bad_name(params["content"], allow_numbers = TRUE, max_length = MAX_MESSAGE_LEN, strict = TRUE, cap_after_symbols = FALSE)
+ if(!content)
+ return FALSE
var/datum/medical_note/new_note = new(usr.name, content)
while(length(target.medical_notes) > 2)
diff --git a/code/game/machinery/computer/records/records.dm b/code/game/machinery/computer/records/records.dm
index 7d01d973549..30fe231d101 100644
--- a/code/game/machinery/computer/records/records.dm
+++ b/code/game/machinery/computer/records/records.dm
@@ -41,9 +41,9 @@
if(!field || !(field in target?.vars))
return FALSE
- var/value = trim(params["value"], MAX_BROADCAST_LEN)
- investigate_log("[key_name(user)] changed the field: \"[field]\" with value: \"[target.vars[field]]\" to new value: \"[value || "Unknown"]\"", INVESTIGATE_RECORDS)
- target.vars[field] = value || "Unknown"
+ var/value = reject_bad_name(params["value"], allow_numbers = TRUE, max_length = MAX_BROADCAST_LEN, strict = TRUE, cap_after_symbols = FALSE) || "Unknown"
+ investigate_log("[key_name(user)] changed the field: \"[field]\" with value: \"[target.vars[field]]\" to new value: \"[value]\"", INVESTIGATE_RECORDS)
+ target.vars[field] = value
return TRUE
diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm
index 244694c7dcc..1bde98e582f 100644
--- a/code/modules/antagonists/changeling/changeling.dm
+++ b/code/modules/antagonists/changeling/changeling.dm
@@ -953,10 +953,10 @@
user.regenerate_icons()
user.name = user.get_visible_name()
current_profile = chosen_profile
- // NOVA EDIT START
- user.visual_only_organs = TRUE // NOVA EDIT ADDITION - Customization
+ // SKYRAT EDIT START
+ user.visual_only_organs = TRUE // SKYRAT EDIT ADDITION - Customization
chosen_dna.transfer_identity(user, TRUE)
- user.visual_only_organs = FALSE // NOVA EDIT ADDITION - Customization
+ user.visual_only_organs = FALSE // SKYRAT EDIT ADDITION - Customization
user.updateappearance(mutcolor_update = TRUE, eyeorgancolor_update = TRUE)
user.regenerate_icons()
user.name = user.get_visible_name()
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 0d458f723af..aee974ce57b 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -276,7 +276,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if (istype(requested_preference, /datum/preference/name))
tainted_character_profiles = TRUE
//SKYRAT EDIT
- update_mutant_bodyparts(requested_preference)
+ update_body_parts(requested_preference)
for (var/datum/preference_middleware/preference_middleware as anything in middleware)
if (preference_middleware.post_set_preference(usr, requested_preference_key, value))
return TRUE
diff --git a/code/modules/client/preferences/_preference.dm b/code/modules/client/preferences/_preference.dm
index 9e3b24e0f69..cfba821725f 100644
--- a/code/modules/client/preferences/_preference.dm
+++ b/code/modules/client/preferences/_preference.dm
@@ -333,7 +333,7 @@ GLOBAL_LIST_INIT(preference_entries_by_key, init_preference_entries_by_key())
if ( \
!isnull(relevant_inherent_trait) \
- || !isnull(relevant_mutant_bodypart) /* NOVA EDIT ADDITION - Since we still use relevant_mutant_bodypart, we need it here. */ \
+ || !isnull(relevant_mutant_bodypart) /* SKYRAT EDIT ADDITION - Since we still use relevant_mutant_bodypart, we need it here. */ \
|| !isnull(relevant_external_organ) \
|| !isnull(relevant_head_flag) \
|| !isnull(relevant_body_markings) \
diff --git a/code/modules/mob/dead/new_player/login.dm b/code/modules/mob/dead/new_player/login.dm
index 91aa6b932e9..440292b7a4f 100644
--- a/code/modules/mob/dead/new_player/login.dm
+++ b/code/modules/mob/dead/new_player/login.dm
@@ -34,7 +34,7 @@
//SKYRAT EDIT ADDITION
var/soft_player_cap = CONFIG_GET(number/player_soft_cap)
- if(soft_player_cap >= TGS_CLIENT_COUNT)
+ if(soft_player_cap && TGS_CLIENT_COUNT >= soft_player_cap)
INVOKE_ASYNC(src, PROC_REF(connect_to_second_server))
//SKYRAT EDIT END
diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm
index 8483767912b..ef035165614 100644
--- a/code/modules/mob/living/carbon/human/_species.dm
+++ b/code/modules/mob/living/carbon/human/_species.dm
@@ -311,7 +311,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
qdel(existing_organ)
continue
- if(existing_organ && !disallow_customizable_dna_features) // NOVA EDIT CHANGE - Though sometimes we might want to do that. - ORIGINAL: if(existing_organ)
+ if(existing_organ) // SKYRAT EDIT CHANGE - Though sometimes we might want to do that. - ORIGINAL: if(existing_organ)
// we dont want to remove organs that were not from the old species (such as from freak surgery or prosthetics)
if(existing_organ.type != old_organ_type && !replace_current)
continue
@@ -387,7 +387,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
if(old_species.type != type)
replace_body(human_who_gained_species, src)
- regenerate_organs(human_who_gained_species, old_species, replace_current = human_who_gained_species.visual_only_organs, visual_only = human_who_gained_species.visual_only_organs) // NOVA EDIT - Allows existing organs to be properly removed when regenerating organs - ORIGINAL: regenerate_organs(human_who_gained_species, old_species, replace_current = FALSE, visual_only = human_who_gained_species.visual_only_organs)
+ regenerate_organs(human_who_gained_species, old_species, replace_current = human_who_gained_species.visual_only_organs, visual_only = human_who_gained_species.visual_only_organs) // SKYRAT EDIT - Allows existing organs to be properly removed when regenerating organs - ORIGINAL: regenerate_organs(human_who_gained_species, old_species, replace_current = FALSE, visual_only = human_who_gained_species.visual_only_organs)
// Update locked slots AFTER all organ and body stuff is handled
human_who_gained_species.hud_used?.update_locked_slots()
// Drop the items the new species can't wear
@@ -404,7 +404,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
//Resets blood if it is excessively high so they don't gib
normalize_blood(human_who_gained_species)
- //add_body_markings(human_who_gained_species) // NOVA EDIT REMOVAL - We do this differently
+ //add_body_markings(human_who_gained_species) // SKYRAT EDIT REMOVAL - We do this differently
if(length(inherent_traits))
human_who_gained_species.add_traits(inherent_traits, SPECIES_TRAIT)
@@ -532,7 +532,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
species_human.apply_overlay(BODY_LAYER)
update_body_markings(species_human)
*/
-//NOVA EDIT REMOVAL END
+//SKYRAT EDIT REMOVAL END
//This exists so sprite accessories can still be per-layer without having to include that layer's
//number in their sprite name, which causes issues when those numbers change.
diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
index 1f720451982..fe3412245cd 100644
--- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
@@ -7,7 +7,7 @@
TRAIT_MUTANT_COLORS,
)
inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_REPTILE
- mutant_bodyparts = list("body_markings" = "None", "legs" = "Normal Legs") // NOVA EDIT CHANGE - ORIGINAL: body_markings = list(/datum/bodypart_overlay/simple/body_marking/lizard = "None")
+ mutant_bodyparts = list("body_markings" = "None", "legs" = "Normal Legs") // SKYRAT EDIT CHANGE - ORIGINAL: body_markings = list(/datum/bodypart_overlay/simple/body_marking/lizard = "None")
mutant_organs = list(
/obj/item/organ/external/horns = "None",
/obj/item/organ/external/frills = "None",
diff --git a/code/modules/mob/living/carbon/human/species_types/mothmen.dm b/code/modules/mob/living/carbon/human/species_types/mothmen.dm
index b2da4ab759e..2045b9b0643 100644
--- a/code/modules/mob/living/carbon/human/species_types/mothmen.dm
+++ b/code/modules/mob/living/carbon/human/species_types/mothmen.dm
@@ -3,8 +3,8 @@
plural_form = "Mothmen"
id = SPECIES_MOTH
inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BUG
- mutant_bodyparts = list("moth_markings" = "None") // NOVA EDIT CHANGE - ORIGINAL: body_markings = list(/datum/bodypart_overlay/simple/body_marking/moth = "None")
- //mutant_organs = list(/obj/item/organ/external/wings/moth = "Plain", /obj/item/organ/external/antennae = "Plain") // NOVA EDIT REMOVAL - Fixing moths
+ mutant_bodyparts = list("moth_markings" = "None") // SKYRAT EDIT CHANGE - ORIGINAL: body_markings = list(/datum/bodypart_overlay/simple/body_marking/moth = "None")
+ //mutant_organs = list(/obj/item/organ/external/wings/moth = "Plain", /obj/item/organ/external/antennae = "Plain") // SKYRAT EDIT REMOVAL - Fixing moths
meat = /obj/item/food/meat/slab/human/mutant/moth
mutanttongue = /obj/item/organ/internal/tongue/moth
mutanteyes = /obj/item/organ/internal/eyes/moth
diff --git a/code/modules/mob/living/carbon/human/species_types/podpeople.dm b/code/modules/mob/living/carbon/human/species_types/podpeople.dm
index 577e80c9124..83ce525ec83 100644
--- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/podpeople.dm
@@ -8,7 +8,7 @@
TRAIT_PLANT_SAFE,
)
mutant_organs = list(
- // /obj/item/organ/external/pod_hair = "None", // NOVA EDIT REMOVAL - Customization (it messes up unit tests.)
+ // /obj/item/organ/external/pod_hair = "None", // SKYRAT EDIT REMOVAL - Customization (it messes up unit tests.)
)
inherent_biotypes = MOB_ORGANIC | MOB_HUMANOID | MOB_PLANT
inherent_factions = list(FACTION_PLANTS, FACTION_VINES)
diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm
index c9dc7fd9c76..5d594986a69 100644
--- a/code/modules/power/supermatter/supermatter.dm
+++ b/code/modules/power/supermatter/supermatter.dm
@@ -254,7 +254,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
QDEL_NULL(radio)
QDEL_NULL(countdown)
if(is_main_engine && GLOB.main_supermatter_engine == src)
- SSpersistence.reset_delam_counter() // NOVA EDIT ADDITION BEGIN - DELAM SCRAM
+ SSpersistence.reset_delam_counter() // SKYRAT EDIT ADDITION BEGIN - DELAM SCRAM
GLOB.main_supermatter_engine = null
QDEL_NULL(soundloop)
return ..()
diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm
index dcfda6e31ac..b8883c8b97b 100644
--- a/code/modules/surgery/bodyparts/_bodyparts.dm
+++ b/code/modules/surgery/bodyparts/_bodyparts.dm
@@ -994,7 +994,7 @@
markings_alpha = owner_species.markings_alpha
else
markings = list()
- // NOVA EDIT END
+ // SKYRAT EDIT END
recolor_bodypart_overlays()
return TRUE
diff --git a/code/modules/surgery/organs/external/tails.dm b/code/modules/surgery/organs/external/tails.dm
index 8944e7474c3..2e8b5a04072 100644
--- a/code/modules/surgery/organs/external/tails.dm
+++ b/code/modules/surgery/organs/external/tails.dm
@@ -67,9 +67,9 @@
// SKYRAT EDIT ADDITION START
if(!bodypart.owner.dna.mutant_bodyparts["spines"])
bodypart.owner.dna.mutant_bodyparts["spines"] = list(MUTANT_INDEX_NAME = "None", MUTANT_INDEX_COLOR_LIST = list("#886600", "#886600", "#886600"))
- // NOVA EDIT ADDITION END
- var/feature_name = bodypart.owner.dna.mutant_bodyparts["spines"][MUTANT_INDEX_NAME] // NOVA EDIT CHANGE - ORIGINAL: var/feature_name = bodypart.owner.dna.features["spines"] //tail spines don't live in DNA, but share feature names with regular spines
- tail_spines_overlay.set_appearance_from_dna(bodypart.owner.dna, feature_name, feature_key = "spines") // NOVA EDIT CHANGE - ORIGINAL: tail_spines_overlay.set_appearance_from_name(feature_name)
+ // SKYRAT EDIT ADDITION END
+ var/feature_name = bodypart.owner.dna.mutant_bodyparts["spines"][MUTANT_INDEX_NAME] // SKYRAT EDIT CHANGE - ORIGINAL: var/feature_name = bodypart.owner.dna.features["spines"] //tail spines don't live in DNA, but share feature names with regular spines
+ tail_spines_overlay.set_appearance_from_dna(bodypart.owner.dna, feature_name, feature_key = "spines") // SKYRAT EDIT CHANGE - ORIGINAL: tail_spines_overlay.set_appearance_from_name(feature_name)
bodypart.add_bodypart_overlay(tail_spines_overlay)
/// If we have a tail spines overlay, delete it
diff --git a/code/modules/surgery/organs/internal/ears/_ears.dm b/code/modules/surgery/organs/internal/ears/_ears.dm
index 3ff6c5daf65..6f6210ba90b 100644
--- a/code/modules/surgery/organs/internal/ears/_ears.dm
+++ b/code/modules/surgery/organs/internal/ears/_ears.dm
@@ -155,7 +155,7 @@
preference = "feature_human_ears"
- //dna_block = DNA_EARS_BLOCK // NOVA EDIT REMOVAL - Customization - We have our own system to handle DNA.
+ //dna_block = DNA_EARS_BLOCK // SKYRAT EDIT REMOVAL - Customization - We have our own system to handle DNA.
bodypart_overlay = /datum/bodypart_overlay/mutant/cat_ears
@@ -169,7 +169,7 @@
var/inner_layer = EXTERNAL_FRONT
/datum/bodypart_overlay/mutant/cat_ears/get_global_feature_list()
- return SSaccessories.sprite_accessories["ears"] // NOVA EDIT - Customization - ORIGINAL: return SSaccessories.ears_list
+ return SSaccessories.sprite_accessories["ears"] // SKYRAT EDIT - Customization - ORIGINAL: return SSaccessories.ears_list
/datum/bodypart_overlay/mutant/cat_ears/can_draw_on_bodypart(mob/living/carbon/human/human)
if((human.head?.flags_inv & HIDEHAIR) || (human.wear_mask?.flags_inv & HIDEHAIR))
diff --git a/code/modules/surgery/organs/internal/eyes/_eyes.dm b/code/modules/surgery/organs/internal/eyes/_eyes.dm
index 798e0a26691..4c593a1f975 100644
--- a/code/modules/surgery/organs/internal/eyes/_eyes.dm
+++ b/code/modules/surgery/organs/internal/eyes/_eyes.dm
@@ -50,7 +50,7 @@
/// indication that the eyes are undergoing some negative effect
var/damaged = FALSE
/// Native FOV that will be applied if a config is enabled
- var/native_fov = NONE //NOVA EDIT CHANGE - ORIGINAL: var/native_fov = FOV_90_DEGREES
+ var/native_fov = NONE //SKYRAT EDIT CHANGE - ORIGINAL: var/native_fov = FOV_90_DEGREES
/// Scarring on this organ
var/scarring = NONE
@@ -125,7 +125,7 @@
organ_owner.update_tint()
organ_owner.update_sight()
- is_emissive = FALSE // NOVA EDIT ADDITION
+ is_emissive = FALSE // SKYRAT EDIT ADDITION
UnregisterSignal(organ_owner, COMSIG_ATOM_BULLET_ACT)
/obj/item/organ/internal/eyes/proc/on_bullet_act(datum/source, obj/projectile/proj, def_zone)
diff --git a/code/modules/unit_tests/dna_infusion.dm b/code/modules/unit_tests/dna_infusion.dm
index 0fd898e00de..4bd0469ca1d 100644
--- a/code/modules/unit_tests/dna_infusion.dm
+++ b/code/modules/unit_tests/dna_infusion.dm
@@ -38,13 +38,13 @@
for(var/datum/infuser_entry/infuser_entry as anything in flatten_list(GLOB.infuser_entries))
var/output_organs = infuser_entry.output_organs
var/mob/living/carbon/human/lab_rat = allocate(/mob/living/carbon/human/consistent)
- // NOVA EDIT ADDITION START - Customization
+ // SKYRAT EDIT ADDITION START - Customization
lab_rat.dna.mutant_bodyparts["moth_antennae"] = list(MUTANT_INDEX_NAME = "Plain", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF"), MUTANT_INDEX_EMISSIVE_LIST = list(FALSE))
lab_rat.dna.mutant_bodyparts["tail"] = list(MUTANT_INDEX_NAME = "Light Tiger", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF"))
lab_rat.dna.mutant_bodyparts["snout"] = list(MUTANT_INDEX_NAME = "Sharp + Light", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF"))
lab_rat.dna.mutant_bodyparts["horns"] = list(MUTANT_INDEX_NAME = "Simple", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF"))
lab_rat.dna.mutant_bodyparts["frills"] = list(MUTANT_INDEX_NAME = "Aquatic", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF"))
- // NOVA EDIT END
+ // SKYRAT EDIT END
var/list/obj/item/organ/inserted_organs = list()
// Attempt to insert entire list of mutant organs for the given infusion_entry.
diff --git a/html/changelogs/AutoChangeLog-pr-2898.yml b/html/changelogs/AutoChangeLog-pr-2898.yml
deleted file mode 100644
index 70c1fea25b5..00000000000
--- a/html/changelogs/AutoChangeLog-pr-2898.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "LT3"
-delete-after: True
-changes:
- - rscdel: "Pun Pun's suit sensors are off by default"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-2901.yml b/html/changelogs/AutoChangeLog-pr-2901.yml
deleted file mode 100644
index a82180ac30a..00000000000
--- a/html/changelogs/AutoChangeLog-pr-2901.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "StrangeWeirdKitten"
-delete-after: True
-changes:
- - bugfix: "Subtler will now filter out clientless mobs"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-2912.yml b/html/changelogs/AutoChangeLog-pr-2912.yml
new file mode 100644
index 00000000000..d5b8d9c75aa
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-2912.yml
@@ -0,0 +1,4 @@
+author: "StrangeWeirdKitten, Bangle"
+delete-after: True
+changes:
+ - rscadd: "Adds another ambiance track to Icebox called Freezer, by Bangle."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-2913.yml b/html/changelogs/AutoChangeLog-pr-2913.yml
new file mode 100644
index 00000000000..50587e820ff
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-2913.yml
@@ -0,0 +1,4 @@
+author: "MosleyTheMalO"
+delete-after: True
+changes:
+ - bugfix: "makes the softcap config disableable again"
\ No newline at end of file
diff --git a/html/changelogs/archive/2025-01.yml b/html/changelogs/archive/2025-01.yml
index bb22311204f..af3cfb91236 100644
--- a/html/changelogs/archive/2025-01.yml
+++ b/html/changelogs/archive/2025-01.yml
@@ -143,3 +143,19 @@
- rscadd: 911 responder budget increased; they now have PDAs, holoprojectors, an
inducer, and... the marshal and SWAT teams no longer go in literally bare-handed
(the government finally paid for their gloves).
+2025-01-13:
+ Cephalopod222:
+ - rscadd: Congratulations Homosexuals, Pride Scarves are now available to all crew!
+ LT3:
+ - rscdel: Pun Pun's suit sensors are off by default
+ - sound: Subtle now has a sound notification alongside subtler
+ - qol: Subtle/subtler now has a TG chat filter
+ - qol: Subtle and subtler messages are brighter when using dark mode
+ MosleyTheMalO:
+ - bugfix: Makes condoms work
+ - bugfix: fixes some lewd checks using the sex toy preference instead of the preference
+ they should
+ - bugfix: fixes all erp toggles resetting arousal.
+ - bugfix: makes toggling off sex toys actually remove the sex toys from your inventory.
+ StrangeWeirdKitten:
+ - bugfix: Subtler will now filter out clientless mobs
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/erp_preferences.dm b/modular_skyrat/master_files/code/modules/client/preferences/erp_preferences.dm
index 905e5a4f678..c77508b6594 100644
--- a/modular_skyrat/master_files/code/modules/client/preferences/erp_preferences.dm
+++ b/modular_skyrat/master_files/code/modules/client/preferences/erp_preferences.dm
@@ -56,7 +56,7 @@
/datum/preference/toggle/erp/apply_to_client_updated(client/client, value)
. = ..()
var/mob/living/carbon/human/target = client?.mob
- if(!value && istype(target))
+ if(!value && istype(target) && (src.type == /datum/preference/toggle/erp))
target.arousal = 0
target.pain = 0
target.pleasure = 0
@@ -74,13 +74,17 @@
if(ishuman(client.mob))
var/mob/living/carbon/human/target = client.mob
if(target.vagina != null)
- target.dropItemToGround(target.vagina, TRUE, target.loc, TRUE, FALSE, TRUE)
+ target.dropItemToGround(target.vagina, TRUE, TRUE, FALSE)
+ target.vagina = null
if(target.anus != null)
- target.dropItemToGround(target.anus, TRUE, target.loc, TRUE, FALSE, TRUE)
+ target.dropItemToGround(target.anus, TRUE, TRUE, FALSE)
+ target.anus = null
if(target.nipples != null)
- target.dropItemToGround(target.nipples, TRUE, target.loc, TRUE, FALSE, TRUE)
+ target.dropItemToGround(target.nipples, TRUE, TRUE, FALSE)
+ target.nipples = null
if(target.penis != null)
- target.dropItemToGround(target.penis, TRUE, target.loc, TRUE, FALSE, TRUE)
+ target.dropItemToGround(target.penis, TRUE, TRUE, FALSE)
+ target.penis = null
client.mob.hud_used.hidden_inventory_update(client.mob)
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/mutant_parts.dm b/modular_skyrat/master_files/code/modules/client/preferences/mutant_parts.dm
index 1806e0cc3a9..5727a6f51e2 100644
--- a/modular_skyrat/master_files/code/modules/client/preferences/mutant_parts.dm
+++ b/modular_skyrat/master_files/code/modules/client/preferences/mutant_parts.dm
@@ -239,7 +239,7 @@
savefile_key = "feature_ears"
relevant_mutant_bodypart = "ears"
type_to_check = /datum/preference/toggle/mutant_toggle/ears
- default_accessory_type = /datum/sprite_accessory/ears
+ default_accessory_type = /datum/sprite_accessory/ears/none
/datum/preference/tri_color/ears
category = PREFERENCE_CATEGORY_SECONDARY_FEATURES
diff --git a/modular_skyrat/master_files/code/modules/client/preferences_savefile.dm b/modular_skyrat/master_files/code/modules/client/preferences_savefile.dm
index ebb0a8b370c..4b5402ea9ab 100644
--- a/modular_skyrat/master_files/code/modules/client/preferences_savefile.dm
+++ b/modular_skyrat/master_files/code/modules/client/preferences_savefile.dm
@@ -288,7 +288,7 @@
save_data["modular_version"] = MODULAR_SAVEFILE_VERSION_MAX
-/datum/preferences/proc/update_mutant_bodyparts(datum/preference/preference)
+/datum/preferences/proc/update_body_parts(datum/preference/preference)
if (!preference.relevant_mutant_bodypart)
return
var/part = preference.relevant_mutant_bodypart
diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/ears.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/ears.dm
index 38a107bb2cc..37bbbb0b44e 100644
--- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/ears.dm
+++ b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/ears.dm
@@ -41,7 +41,7 @@
has_inner = TRUE
/datum/sprite_accessory/ears/mutant
- icon = 'modular_nova/master_files/icons/mob/sprite_accessory/ears.dmi'
+ icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/ears.dmi'
organ_type = /obj/item/organ/internal/ears/mutant
color_src = USE_MATRIXED_COLORS
recommended_species = list(SPECIES_MAMMAL, SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_FELINE, SPECIES_HUMANOID, SPECIES_GHOUL)
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/roundstartslime.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/roundstartslime.dm
index fa23e6a40b5..a59bc755648 100644
--- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/roundstartslime.dm
+++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/roundstartslime.dm
@@ -328,7 +328,7 @@
alter_parts(alterer)
alterer.mutant_renderkey = "" //Just in case
- alterer.update_mutant_bodyparts()
+ alterer.update_body_parts()
/**
* Alter parts lets you adjust mutant bodyparts
@@ -401,7 +401,7 @@
alterer.dna.species.mutant_bodyparts[chosen_key] = new_acc_list
alterer.dna.mutant_bodyparts[chosen_key] = new_acc_list.Copy()
alterer.dna.update_uf_block(SSaccessories.dna_mutant_bodypart_blocks[chosen_key])
- alterer.update_mutant_bodyparts()
+ alterer.update_body_parts()
alterer.update_clothing(ALL) // for any clothing that has alternate versions (e.g. muzzled masks)
/**
diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/organ.dm b/modular_skyrat/modules/customization/modules/surgery/organs/organ.dm
index f15b09e9a77..2f47b2edb7f 100644
--- a/modular_skyrat/modules/customization/modules/surgery/organs/organ.dm
+++ b/modular_skyrat/modules/customization/modules/surgery/organs/organ.dm
@@ -17,10 +17,10 @@
color = mutantpart_info[MUTANT_INDEX_COLOR_LIST][1]
/obj/item/organ/external/Remove(mob/living/carbon/organ_owner, special, movement_flags)
- // NOVA EDIT ADDITION START
+ // SKYRAT EDIT ADDITION START
if(mutantpart_key)
transfer_mutantpart_info(organ_owner, special)
- // NOVA EDIT ADDITION END
+ // SKYRAT EDIT ADDITION END
return ..()
/// Copies the organ's mutantpart_info to the owner's mutant_bodyparts
diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts/hypnosis.dm b/modular_skyrat/modules/modular_implants/code/nifsofts/hypnosis.dm
index be88ad77cd8..13d9c177b27 100644
--- a/modular_skyrat/modules/modular_implants/code/nifsofts/hypnosis.dm
+++ b/modular_skyrat/modules/modular_implants/code/nifsofts/hypnosis.dm
@@ -30,7 +30,7 @@
to_chat(user, span_warning("You need to aggressively grab someone to hypnotize them."))
return FALSE
- if(!target_human.client?.prefs?.read_preference(/datum/preference/toggle/erp/sex_toy))
+ if(!target_human.client?.prefs?.read_preference(/datum/preference/toggle/erp/hypnosis))
to_chat(user, span_warning("[target_human] doesn't want to be hypnotized."))
return FALSE
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/climax.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/climax.dm
index e980f1c9c0f..8b296ff2ebf 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/climax.dm
+++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/climax.dm
@@ -18,7 +18,7 @@
if(refractory_period > REALTIMEOFDAY)
return
refractory_period = REALTIMEOFDAY + 30 SECONDS
- if(has_status_effect(/datum/status_effect/climax_cooldown) || !client?.prefs?.read_preference(/datum/preference/toggle/erp/sex_toy))
+ if(has_status_effect(/datum/status_effect/climax_cooldown) || !client?.prefs?.read_preference(/datum/preference/toggle/erp))
return
if(HAS_TRAIT(src, TRAIT_NEVERBONER) || has_status_effect(/datum/status_effect/climax_cooldown) || (!has_vagina() && !has_penis()))
@@ -60,7 +60,7 @@
span_userlove("You orgasm, it feels great, but nothing comes out of your penis!"))
else if(is_wearing_condom())
- var/obj/item/clothing/sextoy/condom/condom = get_item_by_slot(LEWD_SLOT_PENIS)
+ var/obj/item/clothing/sextoy/condom/condom = src.penis // bruh 💀⚰️💀⚰️💀⚰️💀⚰️💀
condom.condom_use()
visible_message(span_userlove("[src] shoots [self_their] load into the [condom], filling it up!"), \
span_userlove("You shoot your thick load into the [condom] and it catches it all!"))
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/climax.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/climax.dm
index 0afaaecb580..c1a5cbd978d 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/climax.dm
+++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/climax.dm
@@ -11,7 +11,7 @@
alert_type = null
/datum/status_effect/climax/tick(seconds_between_ticks)
- if(!owner.client?.prefs?.read_preference(/datum/preference/toggle/erp/sex_toy))
+ if(!owner.client?.prefs?.read_preference(/datum/preference/toggle/erp))
return
var/mob/living/carbon/human/affected_mob = owner
@@ -30,7 +30,7 @@
// This one should not leave decals on the floor. Used in case if character cumming in beaker.
/datum/status_effect/masturbation_climax/tick(seconds_between_ticks)
- if(!owner.client?.prefs?.read_preference(/datum/preference/toggle/erp/sex_toy))
+ if(!owner.client?.prefs?.read_preference(/datum/preference/toggle/erp))
return
var/mob/living/carbon/human/affected_mob = owner
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/fluid_generation.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/fluid_generation.dm
index a75205bb528..c4a5bc5f83c 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/fluid_generation.dm
+++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/fluid_generation.dm
@@ -20,7 +20,7 @@
/datum/status_effect/body_fluid_regen/vagina/tick(seconds_between_ticks)
var/mob/living/carbon/human/affected_human = owner
- if(owner.stat >= DEAD || !owner.client?.prefs?.read_preference(/datum/preference/toggle/erp/sex_toy) || !istype(affected_human))
+ if(owner.stat >= DEAD || !owner.client?.prefs?.read_preference(/datum/preference/toggle/erp) || !istype(affected_human))
return FALSE
var/obj/item/organ/external/genital/vagina/vagina = owner.get_organ_slot(ORGAN_SLOT_VAGINA)
@@ -38,7 +38,7 @@
/datum/status_effect/body_fluid_regen/testes/tick(seconds_between_ticks)
var/mob/living/carbon/human/affected_human = owner
- if(owner.stat >= DEAD || !owner.client?.prefs?.read_preference(/datum/preference/toggle/erp/sex_toy) || !istype(affected_human))
+ if(owner.stat >= DEAD || !owner.client?.prefs?.read_preference(/datum/preference/toggle/erp) || !istype(affected_human))
return FALSE
var/obj/item/organ/external/genital/testicles/testes = owner.get_organ_slot(ORGAN_SLOT_TESTICLES)
@@ -53,7 +53,7 @@
/datum/status_effect/body_fluid_regen/breasts/tick(seconds_between_ticks)
var/mob/living/carbon/human/affected_human = owner
- if(owner.stat >= DEAD || !owner.client?.prefs?.read_preference(/datum/preference/toggle/erp/sex_toy) || !istype(affected_human))
+ if(owner.stat >= DEAD || !owner.client?.prefs?.read_preference(/datum/preference/toggle/erp) || !istype(affected_human))
return FALSE
var/obj/item/organ/external/genital/breasts/breasts = owner.get_organ_slot(ORGAN_SLOT_BREASTS)
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/hypnogoggles.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/hypnogoggles.dm
index efeef0229b0..d84dd0c3cb8 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/hypnogoggles.dm
+++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/hypnogoggles.dm
@@ -24,7 +24,7 @@
victim = user
if(!(slot & ITEM_SLOT_EYES))
return
- if(!(iscarbon(victim) && victim.client?.prefs?.read_preference(/datum/preference/toggle/erp/sex_toy)))
+ if(!(iscarbon(victim) && victim.client?.prefs?.read_preference(/datum/preference/toggle/erp/sex_toy) && victim.client?.prefs?.read_preference(/datum/preference/toggle/erp/hypnosis)))
return
if(codephrase != "")
victim.gain_trauma(new /datum/brain_trauma/very_special/induced_hypnosis(codephrase), TRAUMA_RESILIENCE_MAGIC)
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/human.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/human.dm
index 2bdeb8b5974..01ef376b03e 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/human.dm
+++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/human.dm
@@ -371,7 +371,7 @@
return FALSE
var/obj/item/clothing/sextoy/condom/condom = penis
- return condom.condom_state == TRAIT_CONDOM_BROKEN
+ return condom.condom_state != TRAIT_CONDOM_BROKEN
// For handling things that don't already have handcuff handlers.
/mob/living/carbon/human/set_handcuffed(new_value)
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/organs.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/organs.dm
index 1730e8f121a..bbc1610e6ef 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/organs.dm
+++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/organs.dm
@@ -1,6 +1,6 @@
/obj/item/organ/internal/brain/on_life(seconds_per_tick, times_fired) //All your horny is here *points to the head*
. = ..()
var/mob/living/carbon/human/brain_owner = owner
- if(istype(brain_owner, /mob/living/carbon/human) && brain_owner.client?.prefs?.read_preference(/datum/preference/toggle/erp/sex_toy))
+ if(istype(brain_owner, /mob/living/carbon/human) && brain_owner.client?.prefs?.read_preference(/datum/preference/toggle/erp))
if(!(organ_flags & ORGAN_FAILING))
brain_owner.dna.species.handle_arousal(brain_owner, seconds_per_tick, times_fired)
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/species.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/species.dm
index 69a63d89d15..a651b421bb2 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/species.dm
+++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/species.dm
@@ -28,7 +28,7 @@
/// Handles throwing the arousal alerts to screen.
/datum/species/proc/handle_arousal(mob/living/carbon/human/target_human, atom/movable/screen/alert/aroused)
- if(!target_human.client?.prefs?.read_preference(/datum/preference/toggle/erp/sex_toy))
+ if(!target_human.client?.prefs?.read_preference(/datum/preference/toggle/erp))
return
var/atom/movable/screen/alert/aroused/arousal_alert = target_human.alerts[AROUSED_ALERT]
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/condom.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/condom.dm
index 80499fad288..9186bdf76a4 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/condom.dm
+++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/condom.dm
@@ -89,7 +89,7 @@
//When condom equipped we doing stuff
/obj/item/clothing/sextoy/condom/lewd_equipped(mob/user, slot, initial)
. = ..()
- if((slot == LEWD_SLOT_PENIS) && condom_state == "unused")
+ if((slot == ORGAN_SLOT_PENIS) && condom_state == "unused")
condom_state = "used"
update_icon_state()
update_icon()
diff --git a/modular_skyrat/modules/modular_vending/code/clothesmate.dm b/modular_skyrat/modules/modular_vending/code/clothesmate.dm
index 9173369a527..96a3cd4aa92 100644
--- a/modular_skyrat/modules/modular_vending/code/clothesmate.dm
+++ b/modular_skyrat/modules/modular_vending/code/clothesmate.dm
@@ -45,6 +45,7 @@
/obj/item/clothing/glasses/thin = 5,
/obj/item/clothing/glasses/hud/ar/projector = 5,
/obj/item/clothing/neck/face_scarf = 5,
+ /obj/item/clothing/neck/scarf/pride = 5, //BUBBER EDIT: ADDS PRIDE SCARVES
/obj/item/clothing/gloves/bracer/wraps,
),
),
diff --git a/modular_skyrat/modules/synths/code/species/synthetic.dm b/modular_skyrat/modules/synths/code/species/synthetic.dm
index 6d526b07f36..766f14387de 100644
--- a/modular_skyrat/modules/synths/code/species/synthetic.dm
+++ b/modular_skyrat/modules/synths/code/species/synthetic.dm
@@ -23,7 +23,6 @@
reagent_flags = PROCESS_SYNTHETIC
payday_modifier = 1.0 // Matches the rest of the pay penalties the non-human crew have
species_language_holder = /datum/language_holder/machine
- mutant_organs = list(/obj/item/organ/internal/cyberimp/arm/power_cord/left_arm)
mutantbrain = /obj/item/organ/internal/brain/synth
mutantstomach = /obj/item/organ/internal/stomach/synth
mutantears = /obj/item/organ/internal/ears/synth
diff --git a/modular_skyrat/modules/verbs/code/subtle.dm b/modular_skyrat/modules/verbs/code/subtle.dm
index d542e279836..211eb005a0d 100644
--- a/modular_skyrat/modules/verbs/code/subtle.dm
+++ b/modular_skyrat/modules/verbs/code/subtle.dm
@@ -41,7 +41,7 @@
var/space = should_have_space_before_emote(html_decode(subtle_emote)[1]) ? " " : ""
- subtle_message = span_emote("[user][space][user.say_emphasis(subtle_message)]")
+ subtle_message = span_subtle("[user][space][user.say_emphasis(subtle_message)]")
var/list/viewers = get_hearers_in_view(SUBTLE_ONE_TILE, user)
@@ -55,10 +55,15 @@
for(var/mob/ghost as anything in GLOB.dead_mob_list)
if((ghost.client?.prefs.chat_toggles & CHAT_GHOSTSIGHT) && !(ghost in viewers))
- ghost.show_message(subtle_message)
+ to_chat(ghost, "[FOLLOW_LINK(ghost, user)] [subtle_message]")
for(var/mob/receiver in viewers)
receiver.show_message(subtle_message, alt_msg = subtle_message)
+ // Optional sound notification
+ if(!isobserver(receiver))
+ var/datum/preferences/prefs = receiver.client?.prefs
+ if(prefs && prefs.read_preference(/datum/preference/toggle/subtler_sound))
+ receiver.playsound_local(get_turf(receiver), 'sound/effects/achievement/glockenspiel_ping.ogg', 50)
return TRUE
@@ -132,7 +137,7 @@
var/space = should_have_space_before_emote(html_decode(subtler_emote)[1]) ? " " : ""
- subtler_message = span_emote("[user][space][user.say_emphasis(subtler_message)]")
+ subtler_message = span_subtler("[user][space][user.say_emphasis(subtler_message)]")
if(istype(target, /mob))
var/mob/target_mob = target
@@ -140,7 +145,7 @@
var/obj/effect/overlay/holo_pad_hologram/hologram = GLOB.hologram_impersonators[user]
if((get_dist(user.loc, target_mob.loc) <= subtler_range) || (hologram && get_dist(hologram.loc, target_mob.loc) <= subtler_range))
target_mob.show_message(subtler_message, alt_msg = subtler_message)
- // Subtler sounds
+ // Optional sound notification
var/datum/preferences/prefs = target_mob.client?.prefs
if(prefs && prefs.read_preference(/datum/preference/toggle/subtler_sound))
target_mob.playsound_local(get_turf(target_mob), 'sound/effects/achievement/glockenspiel_ping.ogg', 50)
@@ -150,7 +155,7 @@
var/obj/effect/overlay/holo_pad_hologram/hologram = target
if(hologram.Impersonation?.client)
hologram.Impersonation.show_message(subtler_message, alt_msg = subtler_message)
- // Subtler sounds
+ // Optional sound notification
var/datum/preferences/prefs = hologram.Impersonation.client?.prefs
if(prefs && prefs.read_preference(/datum/preference/toggle/subtler_sound))
hologram.Impersonation.playsound_local(get_turf(hologram.Impersonation), 'sound/effects/achievement/glockenspiel_ping.ogg', 50)
@@ -167,7 +172,7 @@
for(var/mob/receiver in ghostless)
receiver.show_message(subtler_message, alt_msg = subtler_message)
- // Subtler sounds
+ // Optional sound notification
var/datum/preferences/prefs = receiver.client?.prefs
if(prefs && prefs.read_preference(/datum/preference/toggle/subtler_sound))
receiver.playsound_local(get_turf(receiver), 'sound/effects/achievement/glockenspiel_ping.ogg', 50)
diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/veil.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/veil.dm
index 18f064b3f07..4312eb0cc05 100644
--- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/veil.dm
+++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/veil.dm
@@ -96,7 +96,7 @@
// Apply Appearance
user.regenerate_organs() // Actually regenerates the mutant_bodyparts.
user.update_body(TRUE) // Outfit and underware, also body.
- user.update_mutant_bodyparts(TRUE) // Lizard tails etc
+ user.update_body_parts(TRUE) // Lizard tails etc
RegisterSignal(user, COMSIG_HUMAN_GET_VISIBLE_NAME, PROC_REF(return_disguise_name))
diff --git a/modular_zubbers/code/modules/clothing/neck/neck.dm b/modular_zubbers/code/modules/clothing/neck/neck.dm
index 938e05ea7cc..2a8452fac85 100644
--- a/modular_zubbers/code/modules/clothing/neck/neck.dm
+++ b/modular_zubbers/code/modules/clothing/neck/neck.dm
@@ -559,3 +559,26 @@
greyscale_colors = null
is_tied = TRUE
clip_on = TRUE
+
+//PRIDE SCARVES, SPRITES BY Cephalopod222 OF BUBBERSTATION
+/obj/item/clothing/neck/scarf/pride
+ name = "pride scarf"
+ desc = "A Nanotrasen made nano-weave scarf to show off your favourite flavour of gay and keep you nice and warm! Congratulations!"
+ icon = 'modular_zubbers/icons/obj/clothing/neck/neck.dmi'
+ icon_preview = 'modular_zubbers/icons/obj/clothing/neck/neck.dmi'
+ worn_icon = 'modular_zubbers/icons/mob/clothing/neck/neck.dmi'
+ icon_state = "scarf_rainbow"
+ icon_state_preview = "scarf_rainbow"
+ greyscale_colors = null
+ greyscale_config = null
+ greyscale_config_worn = null
+ obj_flags = UNIQUE_RENAME | INFINITE_RESKIN
+ unique_reskin = list(
+ "Rainbow Scarf" = "scarf_rainbow",
+ "Bisexual Scarf" = "scarf_bi",
+ "Pansexual Scarf" = "scarf_pan",
+ "Asexual Scarf" = "scarf_ace",
+ "Gay Scarf" = "scarf_gay",
+ "Transgender Scarf" = "scarf_trans",
+ "Lesbian Scarf" = "scarf_lesbian",
+ )
diff --git a/modular_zubbers/code/modules/loadout/categories/neck.dm b/modular_zubbers/code/modules/loadout/categories/neck.dm
index b9641c098fc..958e5f4dd74 100644
--- a/modular_zubbers/code/modules/loadout/categories/neck.dm
+++ b/modular_zubbers/code/modules/loadout/categories/neck.dm
@@ -18,3 +18,8 @@
/datum/loadout_item/neck/bunnypendant
name = "Rabbit Pendant"
item_path = /obj/item/clothing/neck/bunny_pendant
+
+/datum/loadout_item/neck/scarf/pride
+ name = "Pride Scarf"
+ item_path = /obj/item/clothing/neck/scarf/pride
+ can_be_reskinned = TRUE
diff --git a/modular_zubbers/icons/mob/clothing/neck/neck.dmi b/modular_zubbers/icons/mob/clothing/neck/neck.dmi
index d6fa6c5c7e5..88fc9957569 100644
Binary files a/modular_zubbers/icons/mob/clothing/neck/neck.dmi and b/modular_zubbers/icons/mob/clothing/neck/neck.dmi differ
diff --git a/modular_zubbers/icons/obj/clothing/neck/neck.dmi b/modular_zubbers/icons/obj/clothing/neck/neck.dmi
index 901994807e0..07d78b95af7 100644
Binary files a/modular_zubbers/icons/obj/clothing/neck/neck.dmi and b/modular_zubbers/icons/obj/clothing/neck/neck.dmi differ
diff --git a/modular_zubbers/sound/ambiance/bangle-freezer.ogg b/modular_zubbers/sound/ambiance/bangle-freezer.ogg
new file mode 100644
index 00000000000..359ab342e9a
Binary files /dev/null and b/modular_zubbers/sound/ambiance/bangle-freezer.ogg differ
diff --git a/tgui/packages/tgui-panel/chat/constants.ts b/tgui/packages/tgui-panel/chat/constants.ts
index 83079a099db..2fda5336d95 100644
--- a/tgui/packages/tgui-panel/chat/constants.ts
+++ b/tgui/packages/tgui-panel/chat/constants.ts
@@ -42,6 +42,7 @@ export const MESSAGE_TYPE_DEBUG = 'debug';
export const MESSAGE_TYPE_MENTOR = 'mentor';
export const MESSAGE_TYPE_LOOC = 'looc';
export const MESSAGE_TYPE_REMOTE_LOOC = 'rlooc';
+export const MESSAGE_TYPE_SUBTLE = 'subtle';
// BUBBER EDIT ADDITION END
// Metadata for each message type
@@ -107,6 +108,12 @@ export const MESSAGE_TYPES = [
description: 'Local OOC messages.',
selector: '.looc',
},
+ {
+ type: MESSAGE_TYPE_SUBTLE,
+ name: 'Subtle',
+ description: 'Subtle and Subtler actions.',
+ selector: '.subtle, .subtler',
+ },
{
type: MESSAGE_TYPE_MENTOR,
name: 'Mentor Log',
diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss
index a24017df7a2..d341542a456 100644
--- a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss
+++ b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss
@@ -1315,7 +1315,7 @@ $border-width-px: $border-width * 1px;
background-color: darken(map.get($alert-stripe-colors, $color-name), 5);
}
}
-/* SKYRAT EDIT ADDITION START - DARK MODE CLASSES */
+/* BUBBER EDIT ADDITION START - DARK MODE CLASSES */
.mentor {
color: #8a2be2;
@@ -1413,9 +1413,13 @@ $border-width-px: $border-width * 1px;
font-style: italic;
}
-// SKYRAT EDIT ADDITION END
+.subtle {
+ color: #abc6ec;
+}
-/* BUBBER EDIT ADDITION BEGIN - DARK MODE CLASSES */
+.subtler {
+ color: #e2c1ff;
+}
.subtlepda {
color: #eb6bff;
diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss
index e84e7c33fc5..a67f1aed670 100644
--- a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss
+++ b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss
@@ -1332,6 +1332,14 @@ $border-width-px: $border-width * 1px;
}
}
+.subtle {
+ color: #000099;
+}
+
+.subtler {
+ color: #4a00b3;
+}
+
.subtlepda {
color: #9e008c;
}
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/bubber/subtle_sound.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/bubber/subtle_sound.tsx
index 0c90c6c688d..8b678aca860 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/bubber/subtle_sound.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/bubber/subtle_sound.tsx
@@ -1,8 +1,8 @@
import { CheckboxInput, FeatureToggle } from '../../base';
export const subtler_sound: FeatureToggle = {
- name: 'Toggle Subtler Sound',
+ name: 'Toggle Subtle/r Sound',
category: 'SOUND',
- description: 'Toggles whether you hear subtler emote sound effects',
+ description: 'Toggles whether you hear subtle/r emote sound effects',
component: CheckboxInput,
};