diff --git a/_maps/RandomRuins/StationRuins/Lavaland/Mining_Station/Mining_Station_Public_01.dmm b/_maps/RandomRuins/StationRuins/Lavaland/Mining_Station/Mining_Station_Public_01.dmm index 99c924177a..7b15bfb584 100644 --- a/_maps/RandomRuins/StationRuins/Lavaland/Mining_Station/Mining_Station_Public_01.dmm +++ b/_maps/RandomRuins/StationRuins/Lavaland/Mining_Station/Mining_Station_Public_01.dmm @@ -997,14 +997,14 @@ /turf/open/floor/plasteel/freezer, /area/mine/living_quarters) "qh" = ( -/obj/structure/sink{ - dir = 8; - pixel_x = 11 - }, /obj/effect/turf_decal/tile/bar, /obj/effect/turf_decal/tile/bar{ dir = 1 }, +/obj/structure/sink{ + dir = 4; + pixel_x = 12 + }, /turf/open/floor/plasteel, /area/mine/living_quarters) "qm" = ( @@ -2504,13 +2504,13 @@ /turf/open/floor/plasteel/white, /area/mine/laborcamp) "Mj" = ( -/obj/structure/sink{ - dir = 4; - pixel_x = -12 - }, /obj/structure/mirror{ pixel_x = -28 }, +/obj/structure/sink{ + dir = 8; + pixel_x = -12 + }, /turf/open/floor/plasteel/freezer, /area/mine/living_quarters) "Mk" = ( diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index da1b941bae..53de44a385 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -91,13 +91,13 @@ }, /area/holodeck/rec_center/lounge) "ap" = ( -/turf/open/floor/holofloor/plating, +/turf/open/floor/holofloor/basalt, /area/holodeck/rec_center/wildlife) "aq" = ( /turf/open/floor/holofloor/plating, /area/holodeck/rec_center/offline) "ar" = ( -/turf/open/floor/holofloor/plating/burnmix, +/turf/open/indestructible/binary, /area/holodeck/rec_center/burn) "as" = ( /obj/effect/turf_decal/tile/red{ @@ -178,12 +178,12 @@ }, /area/holodeck/rec_center/lounge) "aB" = ( -/obj/effect/holodeck_effect/mobspawner, -/turf/open/floor/holofloor/plating, +/obj/effect/holodeck_effect/mobspawner/funclaw, +/turf/open/floor/holofloor/basalt, /area/holodeck/rec_center/wildlife) "aC" = ( /obj/effect/holodeck_effect/sparks, -/turf/open/floor/holofloor/plating/burnmix, +/turf/open/indestructible/binary, /area/holodeck/rec_center/burn) "aD" = ( /obj/effect/turf_decal/tile/red{ @@ -413,7 +413,7 @@ /turf/closed/indestructible/riveted, /area/space) "bk" = ( -/obj/effect/holodeck_effect/mobspawner/bee, +/obj/effect/holodeck_effect/mobspawner/bumbles, /turf/open/floor/holofloor/asteroid, /area/holodeck/rec_center/anthophila) "bl" = ( @@ -752,7 +752,7 @@ }, /area/holodeck/rec_center/medical) "ce" = ( -/obj/effect/holodeck_effect/mobspawner/bee, +/obj/effect/holodeck_effect/mobspawner/bumbles, /obj/item/clothing/head/beekeeper_head, /turf/open/floor/holofloor/asteroid, /area/holodeck/rec_center/anthophila) @@ -856,13 +856,13 @@ /turf/open/floor/holofloor, /area/holodeck/rec_center/dodgeball) "cq" = ( -/obj/effect/holodeck_effect/mobspawner/bee, +/obj/effect/holodeck_effect/mobspawner/bumbles, /obj/effect/decal/remains/human, /obj/item/clothing/suit/beekeeper_suit, /turf/open/floor/holofloor/asteroid, /area/holodeck/rec_center/anthophila) "cr" = ( -/obj/effect/holodeck_effect/mobspawner/bee, +/obj/effect/holodeck_effect/mobspawner/bumbles, /obj/item/melee/flyswatter, /turf/open/floor/holofloor/asteroid, /area/holodeck/rec_center/anthophila) @@ -20270,6 +20270,9 @@ }, /turf/open/space, /area/space) +"Vy" = ( +/turf/open/chasm/lavaland, +/area/holodeck/rec_center/wildlife) "Vz" = ( /obj/machinery/vending/wallmed{ name = "Emergency NanoMed"; @@ -80911,16 +80914,16 @@ aa "} (232,1,1) = {" ac +Vy +Vy +Vy ap ap ap ap -ap -ap -ap -ap -ap -ap +Vy +Vy +Vy bj bt bI @@ -81168,7 +81171,7 @@ aa "} (233,1,1) = {" ac -ap +Vy aB ap ap @@ -81177,7 +81180,7 @@ ap ap ap aB -ap +Vy bj Xg TF @@ -81425,7 +81428,7 @@ aa "} (234,1,1) = {" ac -ap +Vy ap ap ap @@ -81434,7 +81437,7 @@ aB ap ap ap -ap +Vy bj bu bJ @@ -81682,16 +81685,16 @@ aa "} (235,1,1) = {" ac -ap -aB +Vy ap ap ap ap ap ap -aB ap +ap +Vy bj bv bK @@ -81939,16 +81942,16 @@ aa "} (236,1,1) = {" ac -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +Vy +Vy +Vy +Vy +Vy +Vy +Vy +Vy +Vy +Vy bj RD Va diff --git a/code/__DEFINES/dcs/signals/signals_movable.dm b/code/__DEFINES/dcs/signals/signals_movable.dm new file mode 100644 index 0000000000..adb8a8029b --- /dev/null +++ b/code/__DEFINES/dcs/signals/signals_movable.dm @@ -0,0 +1,4 @@ +///from base of atom/experience_pressure_difference(): (pressure_difference, direction, pressure_resistance_prob_delta) +#define COMSIG_MOVABLE_PRE_PRESSURE_PUSH "atom_pre_pressure_push" + ///prevents pressure movement + #define COMSIG_MOVABLE_BLOCKS_PRESSURE (1<<0) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 19cb08de54..a8ea046657 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -279,9 +279,13 @@ GLOBAL_LIST_INIT(pda_styles, list(MONO, VT, ORBITRON, SHARE)) #define PDA_SKIN_MODERN "Modern" #define PDA_SKIN_MINIMAL "Minimal" -GLOBAL_LIST_INIT(pda_reskins, list(PDA_SKIN_CLASSIC = 'icons/obj/pda.dmi', PDA_SKIN_ALT = 'icons/obj/pda_alt.dmi', - PDA_SKIN_RUGGED = 'icons/obj/pda_rugged.dmi', PDA_SKIN_MODERN = 'icons/obj/pda_modern.dmi', - PDA_SKIN_MINIMAL = 'icons/obj/pda_minimal.dmi')) +GLOBAL_LIST_INIT(pda_reskins, list( + PDA_SKIN_CLASSIC = list("icon" = 'icons/obj/pda.dmi'), + PDA_SKIN_ALT = list("icon" = 'icons/obj/pda_alt.dmi'), + PDA_SKIN_RUGGED = list("icon" = 'icons/obj/pda_rugged.dmi'), + PDA_SKIN_MODERN = list("icon" = 'icons/obj/pda_modern.dmi'), + PDA_SKIN_MINIMAL = list("icon" = 'icons/obj/pda_minimal.dmi') + )) ///////////////////////////////////// // atom.appearence_flags shortcuts // diff --git a/code/__DEFINES/spans.dm b/code/__DEFINES/spans.dm index c54af39d56..b6b633d91a 100644 --- a/code/__DEFINES/spans.dm +++ b/code/__DEFINES/spans.dm @@ -114,6 +114,3 @@ #define span_warning(str) ("" + str + "") #define span_yell(str) ("" + str + "") #define span_yellowteamradio(str) ("" + str + "") - -//SANDSTORM DEFINES -#define span_love(str) ("" + str + "") diff --git a/code/__SANDCODE/DEFINES/spans.dm b/code/__SANDCODE/DEFINES/spans.dm new file mode 100644 index 0000000000..f8002c5e5a --- /dev/null +++ b/code/__SANDCODE/DEFINES/spans.dm @@ -0,0 +1,3 @@ +#define span_lewd(str) ("" + str + "") +#define span_love(str) ("" + str + "") +#define span_userlove(str) ("" + str + "") diff --git a/code/__SPLURTCODE/DEFINES/spans.dm b/code/__SPLURTCODE/DEFINES/spans.dm index 3a26809294..1a8c5a73ac 100644 --- a/code/__SPLURTCODE/DEFINES/spans.dm +++ b/code/__SPLURTCODE/DEFINES/spans.dm @@ -1,2 +1,5 @@ -#define span_userlove(str) ("" + str + "") -#define span_lewd(str) ("" + str + "") +// This file is maintained for exotic span types +#define span_reallybig_hypnophrase(str) ("" + str + "") +#define span_big_warning(str) ("" + str + "") +#define span_header(str) ("" + str + "") +#define span_umbra(str) ("" + str + "") diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index 2ca3a0a15b..e2996ecd7e 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -209,7 +209,8 @@ GLOBAL_LIST_INIT(backbaglist, list(DBACKPACK, DSATCHEL, DDUFFELBAG, //everything "Grey Satchel" = /obj/item/storage/backpack/satchel, "Grey Duffel Bag" = /obj/item/storage/backpack/duffelbag, "Leather Satchel" = /obj/item/storage/backpack/satchel/leather, - "Snail Shell" = /obj/item/storage/backpack/snail)) + "Snail Shell" = /obj/item/storage/backpack/snail, + "Sloog Shell" = /obj/item/storage/backpack/sloogshell)) //Suit/Skirt #define PREF_SUIT "Jumpsuit" @@ -339,46 +340,11 @@ GLOBAL_LIST_INIT(greyscale_limb_types, list("human","moth","lizard","pod","plant //body ids that have prosthetic sprites GLOBAL_LIST_INIT(prosthetic_limb_types, list("xion","bishop","cybersolutions","grayson","hephaestus","nanotrasen","talon")) -//FAMILY HEIRLOOM LIST -//this works by using the first number for the species as a probability to choose one of the items in the following list for their family heirloom -//if the probability fails, or the species simply isn't in the list, then it defaults to the next global list, which has its own list of items for each job -//the first item in the list is for if your job isn't in that list - -//species-heirloom list (we categorise them by the species id var) -GLOBAL_LIST_INIT(species_heirlooms, list( - "dwarf" = list(25, list(/obj/item/reagent_containers/food/drinks/dwarf_mug)), //example: 25% chance for dwarves to get a dwarf mug as their heirloom (normal container but has manly dorf icon) - "insect" = list(25, list(/obj/item/flashlight/lantern/heirloom_moth)), - "ipc" = list(25, list(/obj/item/stock_parts/cell/family)), //gives a broken powercell for flavor text! - "synthliz" = list(25, list(/obj/item/stock_parts/cell/family)), //they're also robots - "slimeperson" = list(25, list(/obj/item/toy/plush/slimeplushie)), - "lizard" = list(25, list(/obj/item/toy/plush/lizardplushie)), - )) - -//job-heirloom list -GLOBAL_LIST_INIT(job_heirlooms, list( - "NO_JOB" = list(/obj/item/toy/cards/deck, /obj/item/lighter, /obj/item/dice/d20), - "Clown" = list(/obj/item/paint/anycolor, /obj/item/bikehorn/golden), - "Mime" = list(/obj/item/paint/anycolor, /obj/item/toy/dummy), - "Cook" = list(/obj/item/kitchen/knife/scimitar), - "Botanist" = list(/obj/item/cultivator, /obj/item/reagent_containers/glass/bucket, /obj/item/storage/bag/plants, /obj/item/toy/plush/beeplushie), - "Medical Doctor" = list(/obj/item/healthanalyzer), - "Paramedic" = list(/obj/item/lighter), //..why? - "Station Engineer" = list(/obj/item/wirecutters/brass/family, /obj/item/crowbar/brass/family, /obj/item/screwdriver/brass/family, /obj/item/wrench/brass/family), //brass tools but without the tool speed modifier - "Atmospheric Technician" = list(/obj/item/extinguisher/mini/family), - "Lawyer" = list(/obj/item/storage/briefcase/lawyer/family), - "Janitor" = list(/obj/item/mop), - "Scientist" = list(/obj/item/toy/plush/slimeplushie), - "Assistant" = list(/obj/item/clothing/gloves/cut/family), - "Prisoner" = list (/obj/item/pen/blue), - "Chaplain" = list(/obj/item/camera/spooky/family), - "Head of Personnel" = list(/obj/item/pinpointer/ian) - )) - //body ids that have non-gendered bodyparts GLOBAL_LIST_INIT(nongendered_limb_types, list("fly", "zombie" ,"synth", "shadow", "cultgolem", "agent", "plasmaman", "clockgolem", "clothgolem")) //list of eye types, corresponding to a respective left and right icon state for the set of eyes -GLOBAL_LIST_INIT(eye_types, list("normal", "insect", "moth", "double", "double2", "double3", "spider", "cyclops", "third", "spectre", "shadekin")) +GLOBAL_LIST_INIT(eye_types, list("normal", "insect", "moth", "double", "double2", "double3", "spider", "cyclops", "third", "spectre", "shadekin", "none")) //list linking bodypart bitflags to their actual names GLOBAL_LIST_INIT(bodypart_names, list(num2text(HEAD) = "Head", num2text(CHEST) = "Chest", num2text(LEG_LEFT) = "Left Leg", num2text(LEG_RIGHT) = "Right Leg", num2text(ARM_LEFT) = "Left Arm", num2text(ARM_RIGHT) = "Right Arm")) diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index c9e20bc01a..6e8d1de955 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -405,7 +405,7 @@ return /atom/proc/CtrlShiftClick(mob/user) - SEND_SIGNAL(src, COMSIG_CLICK_CTRL_SHIFT) + SEND_SIGNAL(src, COMSIG_CLICK_CTRL_SHIFT, user) return /* diff --git a/code/datums/brain_damage/severe.dm b/code/datums/brain_damage/severe.dm index 3699331eda..19247c486a 100644 --- a/code/datums/brain_damage/severe.dm +++ b/code/datums/brain_damage/severe.dm @@ -171,9 +171,14 @@ stress = max(stress - 4, 0) /datum/brain_trauma/severe/monophobia/proc/check_alone() +//SANDSTORM EDIT + var/check_radius = 7 + if(istype(owner.loc, /obj/belly)) + return FALSE if(HAS_TRAIT(owner, TRAIT_BLIND)) - return TRUE - for(var/mob/M in oview(owner, 7)) + check_radius = 1 + for(var/mob/M in oview(owner, check_radius)) +//SANDSTORM EDIT END if(!isliving(M)) //ghosts ain't people continue if((istype(M, /mob/living/simple_animal/pet)) || M.ckey) diff --git a/code/datums/elements/object_reskinning.dm b/code/datums/elements/object_reskinning.dm new file mode 100644 index 0000000000..8b5d905e72 --- /dev/null +++ b/code/datums/elements/object_reskinning.dm @@ -0,0 +1,104 @@ +/* + * # Element: Object Reskinning + * + * Allows players to modify the appearance of their object (and other attributes if possible) + * PLEASE DO NOT HAVE INVALID VALUES IN unique_reskin I DON'T EVEN WANT TO KNOW WHAT HAPPENS. + * USAGE: + * unique_reskins = list( + * "skin 1" = list( + * "desc" = "very cool description", + * "icon" = 'very_cool_icon.dmi' + * ), + * "skin 2" = list( + * "desc" = "not as cool description", + * "icon" = 'the_boring_skin.dmi' + * ) + * ) +*/ +/datum/element/object_reskinning + element_flags = ELEMENT_DETACH + +/datum/element/object_reskinning/Attach(datum/target) + . = ..() + var/obj/the_obj = target + if(!istype(the_obj)) + return ELEMENT_INCOMPATIBLE + if(!islist(the_obj.unique_reskin) || !length(the_obj.unique_reskin)) + message_admins("[src] was given to an object without any unique reskins, if you really need to, give it a couple skins first.") + return ELEMENT_INCOMPATIBLE + + RegisterSignal(the_obj, COMSIG_PARENT_EXAMINE, .proc/on_examine) + RegisterSignal(the_obj, the_obj.reskin_binding, .proc/reskin) + +/datum/element/object_reskinning/Detach(datum/source, force) + var/obj/being_deleted = source + UnregisterSignal(source, list(COMSIG_PARENT_EXAMINE, being_deleted.reskin_binding)) + return ..() + +/datum/element/object_reskinning/proc/on_examine(obj/obj, mob/user, list/examine_list) + examine_list += span_notice("[capitalize(replacetext(obj.reskin_binding, "_", "-"))] to reskin it ([length(obj.unique_reskin)] possible styles).") + if(obj.always_reskinnable) + examine_list += span_notice("It has no limit to reskinning.") + +/* + * Reskins an object according to user's choice. + * Will detach itself if there's no skins or if done successfully but not always reskinnable. + * + * Arguments: + * * to_reskin The object we will be reskinning + * * user The user who wants to choose a skin for the object +*/ +/datum/element/object_reskinning/proc/reskin(obj/to_reskin, mob/user) + // Just stop early + if(!LAZYLEN(to_reskin.unique_reskin)) + message_admins("[ADMIN_LOOKUPFLW(user)] attempted to reskin an object that has no skins!") + Detach(to_reskin) + return FALSE + + // Can't use + if(!user.canUseTopic(to_reskin, BE_CLOSE, NO_DEXTERY, NO_TK)) + return FALSE + + // Get our choices + var/list/items = list() + for(var/reskin_option in to_reskin.unique_reskin) + var/image/item_image = image( + icon = to_reskin.unique_reskin[reskin_option]["icon"] ? to_reskin.unique_reskin[reskin_option]["icon"] : to_reskin.icon, + icon_state = to_reskin.unique_reskin[reskin_option]["icon_state"] ? to_reskin.unique_reskin[reskin_option]["icon_state"] : to_reskin.icon_state) + items += list("[reskin_option]" = item_image) + sortList(items) + + // Display to the user + var/pick = show_radial_menu(user, to_reskin, items, custom_check = CALLBACK(src, .proc/check_reskin_menu, user, to_reskin), radius = 38, require_near = TRUE) + if(!pick) + return FALSE + + // Finish the work + to_reskin.current_skin = pick + for(var/reskin_var in to_reskin.unique_reskin[pick]) + to_reskin.vars[reskin_var] = to_reskin.unique_reskin[pick][reskin_var] + to_chat(user, "[to_reskin] is now skinned as '[pick].'") + to_reskin.reskin_obj(user) + + // Only once or always? + if(!to_reskin.always_reskinnable) + Detach(to_reskin) + return TRUE + +/** + * Checks if we are allowed to interact with a radial menu for reskins + * + * Arguments: + * * user The mob interacting with the menu + * * obj The obj to be checking against + */ +/datum/element/object_reskinning/proc/check_reskin_menu(mob/user, obj/obj) + if(QDELETED(obj)) + return FALSE + if(!obj.always_reskinnable && obj.current_skin) + return FALSE + if(!istype(user)) + return FALSE + if(user.incapacitated()) + return FALSE + return TRUE diff --git a/code/datums/traits/good.dm b/code/datums/traits/good.dm index e2de71d006..5b00d2e71e 100644 --- a/code/datums/traits/good.dm +++ b/code/datums/traits/good.dm @@ -181,10 +181,10 @@ /datum/quirk/trandening name = "High Luminosity Eyes" - desc = "When the next big fancy implant came out you had to buy one on impluse!" + desc = "When the next big fancy implant came out you had to buy one on impulse! You start the shift with emissive cybernetic eyes that can emit colored beams of light." value = 1 - gain_text = "You have to keep up with the next big thing!." - lose_text = "High-tech gizmos are a scam..." + gain_text = "You've been keeping up with the latest cybernetic trends!" + lose_text = "High powered eye lasers? What were you thinking..." /datum/quirk/trandening/on_spawn() // Get targets @@ -195,6 +195,34 @@ qdel(old_eyes) new_eyes.Insert(quirk_holder) +/datum/quirk/trandening/remove() + // Get targets + var/obj/item/organ/eyes/old_eyes = quirk_holder.getorganslot(ORGAN_SLOT_EYES) + var/mob/living/carbon/human/qurk_mob = quirk_holder + + // Check for eyes existing + if(!old_eyes) + return + + // Check for quirk eyes + if(!istype(old_eyes, /obj/item/organ/eyes/robotic/glow)) + return + + // Define new eyes + var/species_eyes = /obj/item/organ/eyes + + // Check for mutant eyes + if(qurk_mob.dna.species && qurk_mob.dna.species.mutanteyes) + // Set eyes to mutant type + species_eyes = qurk_mob.dna.species.mutanteyes + + // Create new eyes item + var/obj/item/organ/eyes/new_eyes = new species_eyes() + + // Replace eyes + qdel(old_eyes) + new_eyes.Insert(quirk_holder) + /datum/quirk/bloodpressure name = "Polycythemia vera" desc = "You've a treated form of Polycythemia vera that increases the total blood volume inside of you as well as the rate of replenishment!" diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm index 8d3acf0f6d..a30e27c8f8 100644 --- a/code/datums/traits/negative.dm +++ b/code/datums/traits/negative.dm @@ -43,27 +43,38 @@ GLOBAL_LIST_EMPTY(family_heirlooms) -/datum/quirk/family_heirloom/on_spawn() - var/mob/living/carbon/human/H = quirk_holder +/datum/quirk/family_heirloom/on_spawn() + // Define holder and type + var/mob/living/carbon/human/human_holder = quirk_holder var/obj/item/heirloom_type - var/species_heirloom_entry = GLOB.species_heirlooms[H.dna.species.id] - if(species_heirloom_entry) - if(prob(species_heirloom_entry[1])) - heirloom_type = pick(species_heirloom_entry[2]) + + // The quirk holder's species - we have a 50% chance, if we have a species with a set heirloom, to choose a species heirloom. + var/datum/species/holder_species = human_holder.dna?.species + if(holder_species && LAZYLEN(holder_species.family_heirlooms) && prob(50)) + heirloom_type = pick(holder_species.family_heirlooms) + else + // Our quirk holder's job + var/datum/job/holder_job = SSjob.GetJob(human_holder.last_mind?.assigned_role) + if(holder_job && LAZYLEN(holder_job.family_heirlooms)) + heirloom_type = pick(holder_job.family_heirlooms) + + // If we didn't find an heirloom somehow, throw them a generic one if(!heirloom_type) - var/job_heirloom_entry = GLOB.job_heirlooms[quirk_holder.mind.assigned_role] - if(!job_heirloom_entry) - heirloom_type = pick(GLOB.job_heirlooms["NO_JOB"]) //consider: should this be a define? - else - heirloom_type = pick(job_heirloom_entry) + heirloom_type = pick(/obj/item/toy/cards/deck, /obj/item/lighter, /obj/item/dice/d20) + + // Create the heirloom item heirloom = new heirloom_type(get_turf(quirk_holder)) + + // Add to global list GLOB.family_heirlooms += heirloom + + // Determine and assign item location var/list/slots = list( "in your left pocket" = ITEM_SLOT_LPOCKET, "in your right pocket" = ITEM_SLOT_RPOCKET, "in your backpack" = ITEM_SLOT_BACKPACK ) - where = H.equip_in_one_of_slots(heirloom, slots, FALSE) || "at your feet" + where = human_holder.equip_in_one_of_slots(heirloom, slots, FALSE) || "at your feet" /datum/quirk/family_heirloom/post_add() if(where == "in your backpack") @@ -75,13 +86,25 @@ GLOBAL_LIST_EMPTY(family_heirlooms) heirloom.name = "\improper [family_name[family_name.len]] family [heirloom.name]" /datum/quirk/family_heirloom/on_process() - if(heirloom in quirk_holder.GetAllContents()) + // Ignore for dead holder + if(quirk_holder.stat == DEAD) + return + + // When held: Positive mood + if(heirloom && (heirloom in quirk_holder.GetAllContents())) SEND_SIGNAL(quirk_holder, COMSIG_CLEAR_MOOD_EVENT, "family_heirloom_missing") SEND_SIGNAL(quirk_holder, COMSIG_ADD_MOOD_EVENT, "family_heirloom", /datum/mood_event/family_heirloom) + + // When not held: Negative mood else SEND_SIGNAL(quirk_holder, COMSIG_CLEAR_MOOD_EVENT, "family_heirloom") SEND_SIGNAL(quirk_holder, COMSIG_ADD_MOOD_EVENT, "family_heirloom_missing", /datum/mood_event/family_heirloom_missing) +/datum/quirk/item_quirk/family_heirloom/remove() + // Clear mood events when removing this quirk + SEND_SIGNAL(quirk_holder, COMSIG_CLEAR_MOOD_EVENT, "family_heirloom") + SEND_SIGNAL(quirk_holder, COMSIG_CLEAR_MOOD_EVENT, "family_heirloom_missing") + /datum/quirk/family_heirloom/clone_data() return heirloom diff --git a/code/datums/traits/neutral.dm b/code/datums/traits/neutral.dm index e5dd6d3e33..4db3d688ce 100644 --- a/code/datums/traits/neutral.dm +++ b/code/datums/traits/neutral.dm @@ -165,22 +165,7 @@ lose_text = "You no longer feel like you should be eating trash." mob_trait = TRAIT_TRASHCAN -/datum/quirk/colorist - name = "Colorist" - desc = "You like carrying around a hair dye spray to quickly apply color patterns to your hair." - value = 0 - medical_record_text = "Patient enjoys dyeing their hair with pretty colors." - -/datum/quirk/colorist/on_spawn() - var/mob/living/carbon/human/H = quirk_holder - var/obj/item/dyespray/spraycan = new(get_turf(quirk_holder)) - H.equip_to_slot(spraycan, ITEM_SLOT_BACKPACK) - H.regenerate_icons() - -/datum/quirk/colorist/post_add() - var/mob/living/carbon/human/H = quirk_holder - SEND_SIGNAL(H.back, COMSIG_TRY_STORAGE_SHOW, H) - to_chat(quirk_holder, "You brought some extra dye with you! It's in your bag if you forgot.") +// Moved Colorist quirk to a loadout item /datum/quirk/salt_sensitive name = "Sodium Sensitivity" diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index ab1ef6f001..b7ac29562c 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -32,6 +32,9 @@ GLOBAL_LIST_EMPTY(PDAs) armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100) resistance_flags = FIRE_PROOF | ACID_PROOF + always_reskinnable = TRUE + reskin_binding = COMSIG_CLICK_CTRL_SHIFT + //Main variables var/owner = null // String name of owner var/default_cartridge = 0 // Access level defined by cartridge @@ -112,10 +115,10 @@ GLOBAL_LIST_EMPTY(PDAs) . += id ? "Alt-click to remove the id." : "" if(inserted_item && (!isturf(loc))) . += "Ctrl-click to remove [inserted_item]." - if(LAZYLEN(GLOB.pda_reskins)) - . += "Ctrl-shift-click it to reskin it." /obj/item/pda/Initialize(mapload) + if(GLOB.pda_reskins) + unique_reskin = GLOB.pda_reskins . = ..() if(fon) set_light(f_lum, f_pow, f_col) @@ -130,28 +133,10 @@ GLOBAL_LIST_EMPTY(PDAs) new_overlays = TRUE update_icon() -/obj/item/pda/CtrlShiftClick(mob/living/user) - . = ..() - if(GLOB.pda_reskins && user.canUseTopic(src, BE_CLOSE, NO_DEXTERY)) - reskin_obj(user) - /obj/item/pda/reskin_obj(mob/M) - if(!LAZYLEN(GLOB.pda_reskins)) - return - var/dat = "Reskin options for [name]:" - for(var/V in GLOB.pda_reskins) - var/output = icon2html(GLOB.pda_reskins[V], M, icon_state) - dat += "\n[V]: [output]" - to_chat(M, dat) - - var/choice = input(M, "Choose the a reskin for [src]","Reskin Object") as null|anything in GLOB.pda_reskins - var/new_icon = GLOB.pda_reskins[choice] - if(QDELETED(src) || isnull(new_icon) || new_icon == icon || !M.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) - return - icon = new_icon + . = ..() new_overlays = TRUE update_icon() - to_chat(M, "[src] is now skinned as '[choice]'.") /obj/item/pda/proc/set_new_overlays() if(!overlays_offsets || !(icon in overlays_offsets)) @@ -191,7 +176,7 @@ GLOBAL_LIST_EMPTY(PDAs) else font_index = MODE_MONO font_mode = FONT_MONO - var/pref_skin = GLOB.pda_reskins[C.prefs.pda_skin] + var/pref_skin = GLOB.pda_reskins[C.prefs.pda_skin]["icon"] if(icon != pref_skin) icon = pref_skin new_overlays = TRUE diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm index ca2fdbaeff..b389efe542 100644 --- a/code/game/objects/items/melee/energy.dm +++ b/code/game/objects/items/melee/energy.dm @@ -211,8 +211,6 @@ /obj/item/melee/transforming/energy/sword/saber/reskin_obj(mob/M) . = ..() - if(!.) - return switch(current_skin) if("Sword") icon_state = "sword[active ? sword_color : "0"]" diff --git a/code/game/objects/items/storage/firstaid.dm b/code/game/objects/items/storage/firstaid.dm index bcfcbe20f8..0381779531 100644 --- a/code/game/objects/items/storage/firstaid.dm +++ b/code/game/objects/items/storage/firstaid.dm @@ -55,8 +55,9 @@ generate_items_inside(items_inside,src) /obj/item/storage/firstaid/ancient - icon_state = "firstaid" - desc = "A first aid kit with the ability to heal common types of injuries." + name = "ancient first-aid kit" + icon_state = "oldfirstaid" + desc = "A first aid kit with the ability to heal common types of injuries. You start thinking of the good old days just by looking at it." /obj/item/storage/firstaid/ancient/PopulateContents() if(empty) @@ -69,6 +70,10 @@ new /obj/item/stack/medical/mesh(src) new /obj/item/stack/medical/mesh(src) +/obj/item/storage/firstaid/ancient/heirloom + // Long since been ransacked by hungry powergaming assistants breaking into med storage + empty = TRUE + /obj/item/storage/firstaid/brute name = "trauma treatment kit" desc = "A first aid kit for when you get toolboxed." diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 59fe688b69..cfe1afad5a 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -28,9 +28,17 @@ var/resistance_flags = NONE // INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ON_FIRE | UNACIDABLE | ACID_PROOF var/persistence_replacement //have something WAY too amazing to live to the next round? Set a new path here. Overuse of this var will make me upset. - var/current_skin //the item reskin - var/list/unique_reskin //List of options to reskin. + + //Reskin variables + /// The item reskin + var/current_skin + /// List of options to reskin. + var/list/unique_reskin + /// Can always be modified var/always_reskinnable = FALSE + /// How to bring up the reskinning menu + var/reskin_binding = COMSIG_CLICK_ALT + // // Access levels, used in modules\jobs\access.dm var/list/req_access @@ -76,6 +84,10 @@ var/turf/T = loc T.add_blueprints_preround(src) +/obj/ComponentInitialize() + . = ..() + if(islist(unique_reskin) && length(unique_reskin)) + AddElement(/datum/element/object_reskinning) /obj/Destroy(force=FALSE) if(!ismachinery(src)) @@ -340,57 +352,10 @@ . = ..() if(obj_flags & UNIQUE_RENAME) . += "Use a pen on it to rename it or change its description." - if(unique_reskin && (!current_skin || always_reskinnable)) - . += "Alt-click it to reskin it." -/obj/AltClick(mob/user) - . = ..() - if(unique_reskin && (!current_skin || always_reskinnable) && user.canUseTopic(src, BE_CLOSE, NO_DEXTERY)) - reskin_obj(user) - return TRUE - -/// Reskins an object according to M's choice, modified to be overridable and supports different icons -/obj/proc/reskin_obj(mob/M) - if(!LAZYLEN(unique_reskin)) - return FALSE - - var/list/items = list() - for(var/reskin_option in unique_reskin) - var/image/item_image = image( - icon = unique_reskin[reskin_option]["icon"] ? unique_reskin[reskin_option]["icon"] : icon, - icon_state = unique_reskin[reskin_option]["icon_state"]) - items += list("[reskin_option]" = item_image) - sortList(items) - - var/pick = show_radial_menu(M, src, items, custom_check = CALLBACK(src, .proc/check_reskin_menu, M), radius = 38, require_near = TRUE) - if(!pick) - return FALSE - if(!unique_reskin[pick]["icon_state"]) - return FALSE - current_skin = pick - var/has_icon = unique_reskin[pick]["icon"] - if(has_icon) - icon = has_icon - icon_state = unique_reskin[pick]["icon_state"] - to_chat(M, "[src] is now skinned as '[pick].'") - return TRUE - -/** - * Checks if we are allowed to interact with a radial menu for reskins - * - * Arguments: - * * user The mob interacting with the menu - */ -/obj/proc/check_reskin_menu(mob/user) - if(QDELETED(src)) - return FALSE - if(current_skin) - return FALSE - if(!istype(user)) - return FALSE - if(user.incapacitated()) - return FALSE - return TRUE +/// Do you want to make overrides, of course you do! Will be called if an object was reskinned successfully +/obj/proc/reskin_obj(mob/user) + return /obj/update_overlays() . = ..() diff --git a/code/game/objects/structures/electricchair.dm b/code/game/objects/structures/electricchair.dm index c5802b5086..d62528ebf8 100644 --- a/code/game/objects/structures/electricchair.dm +++ b/code/game/objects/structures/electricchair.dm @@ -15,9 +15,12 @@ var/obj/structure/chair/C = new /obj/structure/chair(loc) W.play_tool_sound(src) C.setDir(dir) - part.forceMove(loc) - part.master = null - part = null + + if (part) + part.forceMove(loc) + part.master = null + part = null + qdel(src) /obj/structure/chair/e_chair/proc/shock() @@ -44,3 +47,9 @@ to_chat(buckled_mob, "You feel a deep shock course through your body!") addtimer(CALLBACK(buckled_mob, /mob/living.proc/electrocute_act, 85, src, 1), 1) visible_message("The electric chair went off!", "You hear a deep sharp shock!") + +/obj/structure/chair/e_chair/Destroy() + if(part) + QDEL_NULL(part) + + return ..() diff --git a/code/modules/arousal/arousal.dm b/code/modules/arousal/arousal.dm index c4abf94043..b1d8815696 100644 --- a/code/modules/arousal/arousal.dm +++ b/code/modules/arousal/arousal.dm @@ -99,10 +99,10 @@ to_chat(src,"Your [G.name] cannot cum.") return if(mb_time) //as long as it's not instant, give a warning - to_chat(src,"You feel yourself about to orgasm.") + to_chat(src, span_userlove("You feel yourself about to orgasm.")) if(!do_after(src, mb_time, target = src) || !G.climaxable(src, TRUE)) return - to_chat(src,"You climax[isturf(loc) ? " onto [loc]" : ""] with your [G.name].") + to_chat(src, span_userlove("You climax[isturf(loc) ? " onto [loc]" : ""] with your [G.name].")) do_climax(fluid_source, loc, G) /mob/living/carbon/human/proc/mob_climax_partner(obj/item/organ/genital/G, mob/living/L, spillage = TRUE, mb_time = 30, obj/item/organ/genital/Lgen = null) //Used for climaxing with any living thing @@ -110,16 +110,16 @@ if(!fluid_source) return if(mb_time) //Skip warning if this is an instant climax. - to_chat(src,"You're about to climax [(Lgen) ? "in [L]'s [Lgen.name]" : "with [L]"]!") - to_chat(L,"[src] is about to climax [(Lgen) ? "in your [Lgen.name]" : "with you"]!") + to_chat(src, span_userlove("You're about to climax [(Lgen) ? "in [L]'s [Lgen.name]" : "with [L]"]!")) + to_chat(L, span_userlove("[src] is about to climax [(Lgen) ? "in your [Lgen.name]" : "with you"]!")) if(!do_after(src, mb_time, target = src) || !in_range(src, L) || !G.climaxable(src, TRUE)) return if(spillage) - to_chat(src,"You orgasm with [L], spilling out of [(Lgen) ? "[L.p_their()] [Lgen.name]" : "[L.p_them()]"], using your [G.name].") - to_chat(L,"[src] climaxes [(Lgen) ? "in your [Lgen.name]" : "with you"], overflowing and spilling, using [p_their()] [G.name]!") + to_chat(src, span_userlove("You orgasm with [L], spilling out of [(Lgen) ? "[L.p_their()] [Lgen.name]" : "[L.p_them()]"], using your [G.name].")) + to_chat(L, span_userlove("[src] climaxes [(Lgen) ? "in your [Lgen.name]" : "with you"], overflowing and spilling, using [p_their()] [G.name]!")) else //knots and other non-spilling orgasms - to_chat(src,"You climax [(Lgen) ? "in [L]'s [Lgen.name]" : "with [L]"], your [G.name] spilling nothing.") - to_chat(L,"[src] climaxes [(Lgen) ? "in your [Lgen.name]" : "with you"], [p_their()] [G.name] spilling nothing!") + to_chat(src, span_userlove("You climax [(Lgen) ? "in [L]'s [Lgen.name]" : "with [L]"], your [G.name] spilling nothing.")) + to_chat(L, span_userlove("[src] climaxes [(Lgen) ? "in your [Lgen.name]" : "with you"], [p_their()] [G.name] spilling nothing!")) //SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm) //Sandstorm edit do_climax(fluid_source, spillage ? loc : L, G, spillage,, Lgen) //L.receive_climax(src, Lgen, G, spillage) @@ -129,10 +129,10 @@ if(!fluid_source) return if(mb_time) - to_chat(src,"You start to [G.masturbation_verb] your [G.name] over [container].") + to_chat(src, span_userlove("You start to [G.masturbation_verb] your [G.name] over [container].")) if(!do_after(src, mb_time, target = src) || !in_range(src, container) || !G.climaxable(src, TRUE)) return - to_chat(src,"You used your [G.name] to fill [container].") + to_chat(src, span_userlove("You used your [G.name] to fill [container].")) message_admins("[ADMIN_LOOKUPFLW(src)] used [p_their()] [G.name] to fill [container] with [G.get_fluid_name()].") log_consent("[key_name(src)] used their [G.name] to fill [container].") do_climax(fluid_source, container, G, FALSE, cover = TRUE) diff --git a/code/modules/arousal/genitals.dm b/code/modules/arousal/genitals.dm index 142e036562..ffe2e1ce42 100644 --- a/code/modules/arousal/genitals.dm +++ b/code/modules/arousal/genitals.dm @@ -167,9 +167,9 @@ var/original_state = picked_organ.aroused_state picked_organ.set_aroused_state(!picked_organ.aroused_state) if(original_state != picked_organ.aroused_state) - to_chat(src,"[picked_organ.aroused_state ? picked_organ.arousal_verb : picked_organ.unarousal_verb].") + to_chat(src, span_userlove("[picked_organ.aroused_state ? picked_organ.arousal_verb : picked_organ.unarousal_verb].")) else - to_chat(src,"You can't make that genital [picked_organ.aroused_state ? "unaroused" : "aroused"]!") + to_chat(src, span_userlove("You can't make that genital [picked_organ.aroused_state ? "unaroused" : "aroused"]!")) picked_organ.update_appearance() if(ishuman(src)) var/mob/living/carbon/human/human = src diff --git a/code/modules/assembly/shock_kit.dm b/code/modules/assembly/shock_kit.dm index e18909c9a2..d9bc80761b 100644 --- a/code/modules/assembly/shock_kit.dm +++ b/code/modules/assembly/shock_kit.dm @@ -27,8 +27,10 @@ return TRUE /obj/item/assembly/shock_kit/attack_self(mob/user) - part1.attack_self(user) - part2.attack_self(user) + if (part1) + part1.attack_self(user) + if (part2) + part2.attack_self(user) add_fingerprint(user) return diff --git a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm index 2c1902d4cc..0be44958f2 100644 --- a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm +++ b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm @@ -237,34 +237,45 @@ SSair.high_pressure_delta[src] = TRUE /turf/open/proc/high_pressure_movements() - var/diff = pressure_difference + var/atom/movable/M + var/multiplier = 1 if(locate(/obj/structure/rack) in src) - diff *= 0.1 + multiplier *= 0.1 else if(locate(/obj/structure/table) in src) - diff *= 0.2 - for(var/obj/M in src) - if(!M.anchored && !M.pulledby && M.last_high_pressure_movement_air_cycle < SSair.times_fired) - M.experience_pressure_difference(diff, pressure_direction, 0, pressure_specific_target) - for(var/mob/M in src) - if(!M.anchored && !M.pulledby && M.last_high_pressure_movement_air_cycle < SSair.times_fired) - M.experience_pressure_difference(diff, pressure_direction, 0, pressure_specific_target) - /* + multiplier *= 0.2 + for(var/thing in src) + M = thing + if (!M.anchored && !M.pulledby && M.last_high_pressure_movement_air_cycle < SSair.times_fired) + M.experience_pressure_difference(pressure_difference * multiplier, pressure_direction, 0, pressure_specific_target) + if(pressure_difference > 100) new /obj/effect/temp_visual/dir_setting/space_wind(src, pressure_direction, clamp(round(sqrt(pressure_difference) * 2), 10, 255)) - */ + /atom/movable/var/pressure_resistance = 10 /atom/movable/var/last_high_pressure_movement_air_cycle = 0 /atom/movable/proc/experience_pressure_difference(pressure_difference, direction, pressure_resistance_prob_delta = 0, throw_target) - var/const/PROBABILITY_OFFSET = 25 - var/const/PROBABILITY_BASE_PRECENT = 75 + set waitfor = FALSE + if(SEND_SIGNAL(src, COMSIG_MOVABLE_PRE_PRESSURE_PUSH) & COMSIG_MOVABLE_BLOCKS_PRESSURE) + return + + var/const/PROBABILITY_OFFSET = 40 + var/const/PROBABILITY_BASE_PRECENT = 10 var/max_force = sqrt(pressure_difference)*(MOVE_FORCE_DEFAULT / 5) - set waitfor = 0 var/move_prob = 100 - if (pressure_resistance > 0) + if(pressure_resistance > 0) move_prob = (pressure_difference/pressure_resistance*PROBABILITY_BASE_PRECENT)-PROBABILITY_OFFSET move_prob += pressure_resistance_prob_delta - if (move_prob > PROBABILITY_OFFSET && prob(move_prob) && (move_resist != INFINITY) && (!anchored && (max_force >= (move_resist * MOVE_FORCE_PUSH_RATIO))) || (anchored && (max_force >= (move_resist * MOVE_FORCE_FORCEPUSH_RATIO)))) - step(src, direction) - + if(move_prob > PROBABILITY_OFFSET && prob(move_prob) && (move_resist != INFINITY) && (!anchored && (max_force >= (move_resist * MOVE_FORCE_PUSH_RATIO))) || (anchored && (max_force >= (move_resist * MOVE_FORCE_FORCEPUSH_RATIO)))) + var/move_force = max_force * clamp(move_prob, 0, 100) / 100 + if(move_force > 6000) + // WALLSLAM HELL TIME OH BOY + var/turf/throw_turf = get_ranged_target_turf(get_turf(src), direction, round(move_force / 2000)) + if(throw_target && (get_dir(src, throw_target) & direction)) + throw_turf = get_turf(throw_target) + var/throw_speed = clamp(round(move_force / 3000), 1, 10) + throw_at(throw_turf, move_force / 3000, throw_speed) + else + step(src, direction) + last_high_pressure_movement_air_cycle = SSair.times_fired diff --git a/code/modules/clothing/glasses/prescription_kit.dm b/code/modules/clothing/glasses/prescription_kit.dm index 0ad6419622..9e324d34f0 100644 --- a/code/modules/clothing/glasses/prescription_kit.dm +++ b/code/modules/clothing/glasses/prescription_kit.dm @@ -2,21 +2,31 @@ /obj/item/prescription_kit name = "prescription lens kit" - desc = "A disposable kit containing all the needed tools and parts to develop and apply a self-modifying prescription lens overlay device to any eyewear." + desc = "A disposable kit containing all the needed tools and parts to develop and apply a self-modifying prescription lens overlay device to any eyewear. \ + Insert eyewear, receive vision-correcting lenses." icon = 'icons/obj/device.dmi' icon_state = "modkit" -/obj/item/prescription_kit/attack_obj(obj/O, mob/living/user) - if(!istype(O, /obj/item/clothing/glasses)) +/obj/item/prescription_kit/attackby(obj/item/I, mob/living/user, params) + if(istype(I, /obj/item/clothing/glasses) && I.Adjacent(user)) + var/obj/item/clothing/glasses/target_glasses = I + prescribe(target_glasses, user) + else return ..() - if(istype(O, /obj/item/clothing/glasses)) - var/obj/item/clothing/glasses/target_glasses = O - if(target_glasses.vision_correction) - to_chat(user, span_notice("These are already fitted with prescription lenses or otherwise already correct vision!")) - return - playsound(src, 'sound/items/screwdriver.ogg', 50, 1) - user.visible_message(span_notice("[user] fits \the [target_glasses] with a prescription overlay device."), span_notice("You fit \the [target_glasses] with a prescription overlay device.")) - target_glasses.prescribe() - target_glasses.balloon_alert(user, "prescription fitted!") - qdel(src) +/obj/item/prescription_kit/afterattack(atom/target, mob/user, proximity_flag, click_parameters) + if(istype(target, /obj/item/clothing/glasses) && target.Adjacent(user)) + var/obj/item/clothing/glasses/target_glasses = target + prescribe(target_glasses, user) + else + . = ..() + +/obj/item/prescription_kit/proc/prescribe(obj/item/clothing/glasses/target_glasses, mob/user) + if(target_glasses.vision_correction) + to_chat(user, span_notice("These are already fitted with prescription lenses or otherwise already correct vision!")) + return + playsound(src, 'sound/items/screwdriver.ogg', 50, 1) + user.visible_message(span_notice("[user] fits \the [target_glasses] with a prescription overlay device."), span_notice("You fit \the [target_glasses] with a prescription overlay device.")) + target_glasses.prescribe() + target_glasses.balloon_alert(user, "prescription fitted!") + qdel(src) diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 66cc5484e4..efa00ef888 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -86,8 +86,6 @@ /obj/item/clothing/gloves/fingerless/pugilist/crafted/reskin_obj(mob/M) . = ..() - if(!.) - return switch(current_skin) if("Short") item_state = "armwraps" diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm index 238b2ec86e..1b8b4d9e00 100644 --- a/code/modules/clothing/under/accessories.dm +++ b/code/modules/clothing/under/accessories.dm @@ -622,6 +622,4 @@ /obj/item/clothing/accessory/pride/reskin_obj(mob/M) . = ..() - if(!.) - return name = "[current_skin] pin" diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index 3a40f217dc..7a5ffbbbae 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -69,6 +69,9 @@ ///Is this job affected by weird spawns like the ones from station traits var/random_spawns_possible = TRUE + /// List of family heirlooms this job can get with the family heirloom quirk. List of types. + var/list/family_heirlooms + var/display_order = JOB_DISPLAY_ORDER_DEFAULT var/bounty_types = CIV_JOB_BASIC diff --git a/code/modules/jobs/job_types/assistant.dm b/code/modules/jobs/job_types/assistant.dm index db5390f323..7ce29db178 100644 --- a/code/modules/jobs/job_types/assistant.dm +++ b/code/modules/jobs/job_types/assistant.dm @@ -20,6 +20,11 @@ Assistant dresscodecompliant = FALSE always_can_respawn_as = TRUE threat = 0.2 + + family_heirlooms = list( + /obj/item/storage/toolbox/mechanical/old/heirloom, + /obj/item/clothing/gloves/cut/family + ) /datum/job/assistant/get_access() if(CONFIG_GET(flag/assistants_have_maint_access) || !CONFIG_GET(flag/jobs_have_minimal_access)) //Config has assistant maint access set diff --git a/code/modules/jobs/job_types/atmospheric_technician.dm b/code/modules/jobs/job_types/atmospheric_technician.dm index 9aa8ea07c4..551ac63d00 100644 --- a/code/modules/jobs/job_types/atmospheric_technician.dm +++ b/code/modules/jobs/job_types/atmospheric_technician.dm @@ -26,6 +26,12 @@ display_order = JOB_DISPLAY_ORDER_ATMOSPHERIC_TECHNICIAN threat = 0.5 + + family_heirlooms = list( + /obj/item/lighter, + /obj/item/lighter/greyscale, + /obj/item/storage/box/matches + ) /datum/outfit/job/atmos name = "Atmospheric Technician" diff --git a/code/modules/jobs/job_types/bartender.dm b/code/modules/jobs/job_types/bartender.dm index 70ca762f39..40a1b20cb1 100644 --- a/code/modules/jobs/job_types/bartender.dm +++ b/code/modules/jobs/job_types/bartender.dm @@ -20,6 +20,12 @@ bounty_types = CIV_JOB_DRINK display_order = JOB_DISPLAY_ORDER_BARTENDER threat = 0.5 + + family_heirlooms = list( + /obj/item/reagent_containers/rag, + /obj/item/clothing/head/that, + /obj/item/reagent_containers/food/drinks/shaker + ) /datum/outfit/job/bartender name = "Bartender" diff --git a/code/modules/jobs/job_types/botanist.dm b/code/modules/jobs/job_types/botanist.dm index 53502ee30e..7a43837cf4 100644 --- a/code/modules/jobs/job_types/botanist.dm +++ b/code/modules/jobs/job_types/botanist.dm @@ -20,6 +20,12 @@ display_order = JOB_DISPLAY_ORDER_BOTANIST threat = 1.5 // lol powergame + family_heirlooms = list( + /obj/item/cultivator, + /obj/item/reagent_containers/glass/bucket, // Watering cans don't exist yet + /obj/item/toy/plush/beeplushie, + ) + /datum/outfit/job/botanist name = "Botanist" jobtype = /datum/job/hydro diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm index c3765260cc..65811d40a0 100644 --- a/code/modules/jobs/job_types/captain.dm +++ b/code/modules/jobs/job_types/captain.dm @@ -32,6 +32,11 @@ blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity) threat = 5 + + family_heirlooms = list( + /obj/item/reagent_containers/food/drinks/flask/gold, + /obj/item/toy/figure/captain + ) /datum/job/captain/get_access() return get_all_accesses() diff --git a/code/modules/jobs/job_types/cargo_technician.dm b/code/modules/jobs/job_types/cargo_technician.dm index f8e2f74d80..1188669db5 100644 --- a/code/modules/jobs/job_types/cargo_technician.dm +++ b/code/modules/jobs/job_types/cargo_technician.dm @@ -21,6 +21,10 @@ display_order = JOB_DISPLAY_ORDER_CARGO_TECHNICIAN bounty_types = CIV_JOB_RANDOM threat = 0.2 + + family_heirlooms = list( + /obj/item/clipboard + ) /datum/outfit/job/cargo_tech name = "Cargo Technician" diff --git a/code/modules/jobs/job_types/chaplain.dm b/code/modules/jobs/job_types/chaplain.dm index ef4f20765c..e7d602bd22 100644 --- a/code/modules/jobs/job_types/chaplain.dm +++ b/code/modules/jobs/job_types/chaplain.dm @@ -19,6 +19,11 @@ display_order = JOB_DISPLAY_ORDER_CHAPLAIN threat = 0.5 + + family_heirlooms = list( + /obj/item/toy/windupToolbox, + /obj/item/reagent_containers/food/drinks/bottle/holywater + ) /datum/job/chaplain/after_spawn(mob/living/H, client/C) diff --git a/code/modules/jobs/job_types/chemist.dm b/code/modules/jobs/job_types/chemist.dm index 209b3f82d0..9f830ba43c 100644 --- a/code/modules/jobs/job_types/chemist.dm +++ b/code/modules/jobs/job_types/chemist.dm @@ -24,6 +24,11 @@ threat = 1.5 starting_modifiers = list(/datum/skill_modifier/job/surgery, /datum/skill_modifier/job/affinity/surgery) + + family_heirlooms = list( + /obj/item/book/manual/wiki/chemistry, + /obj/item/fermichem/pHbooklet + ) /datum/outfit/job/chemist name = "Chemist" diff --git a/code/modules/jobs/job_types/chief_engineer.dm b/code/modules/jobs/job_types/chief_engineer.dm index 60b963d7ec..2949758d8a 100644 --- a/code/modules/jobs/job_types/chief_engineer.dm +++ b/code/modules/jobs/job_types/chief_engineer.dm @@ -37,6 +37,15 @@ display_order = JOB_DISPLAY_ORDER_CHIEF_ENGINEER blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/paraplegic, /datum/quirk/insanity) threat = 2 + + family_heirlooms = list( + /obj/item/clothing/head/hardhat, + /obj/item/screwdriver/brass/family, + /obj/item/wrench/brass/family, + /obj/item/weldingtool/mini, // No brass family variant + /obj/item/crowbar/brass/family, + /obj/item/wirecutters/brass/family + ) /datum/outfit/job/ce name = "Chief Engineer" diff --git a/code/modules/jobs/job_types/chief_medical_officer.dm b/code/modules/jobs/job_types/chief_medical_officer.dm index 401b503110..f5170fc745 100644 --- a/code/modules/jobs/job_types/chief_medical_officer.dm +++ b/code/modules/jobs/job_types/chief_medical_officer.dm @@ -35,6 +35,15 @@ threat = 2 starting_modifiers = list(/datum/skill_modifier/job/surgery, /datum/skill_modifier/job/affinity/surgery) + + family_heirlooms = list( + /obj/item/storage/firstaid/ancient/heirloom, + /obj/item/scalpel, + /obj/item/hemostat, + /obj/item/circular_saw, + /obj/item/retractor, + /obj/item/cautery + ) /datum/outfit/job/cmo name = "Chief Medical Officer" diff --git a/code/modules/jobs/job_types/clown.dm b/code/modules/jobs/job_types/clown.dm index 380215a93b..5631ce4624 100644 --- a/code/modules/jobs/job_types/clown.dm +++ b/code/modules/jobs/job_types/clown.dm @@ -21,6 +21,10 @@ display_order = JOB_DISPLAY_ORDER_CLOWN threat = 0 // honk + + family_heirlooms = list( + /obj/item/bikehorn/golden + ) /datum/outfit/job/clown name = "Clown" diff --git a/code/modules/jobs/job_types/cook.dm b/code/modules/jobs/job_types/cook.dm index 2a021e6575..9947c27ba9 100644 --- a/code/modules/jobs/job_types/cook.dm +++ b/code/modules/jobs/job_types/cook.dm @@ -22,6 +22,12 @@ display_order = JOB_DISPLAY_ORDER_COOK threat = 0.2 + family_heirlooms = list( + /obj/item/reagent_containers/food/condiment/saltshaker, + /obj/item/kitchen/rollingpin, + /obj/item/clothing/head/chefhat + ) + /datum/outfit/job/cook name = "Cook" jobtype = /datum/job/cook diff --git a/code/modules/jobs/job_types/curator.dm b/code/modules/jobs/job_types/curator.dm index 254fc15bd4..e6e9394109 100644 --- a/code/modules/jobs/job_types/curator.dm +++ b/code/modules/jobs/job_types/curator.dm @@ -19,6 +19,11 @@ display_order = JOB_DISPLAY_ORDER_CURATOR threat = 0.3 + + family_heirlooms = list( + /obj/item/pen/fountain, + /obj/item/storage/dice + ) /datum/outfit/job/curator name = "Curator" diff --git a/code/modules/jobs/job_types/detective.dm b/code/modules/jobs/job_types/detective.dm index b56ebed191..2330e93147 100644 --- a/code/modules/jobs/job_types/detective.dm +++ b/code/modules/jobs/job_types/detective.dm @@ -27,6 +27,10 @@ display_order = JOB_DISPLAY_ORDER_DETECTIVE blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/nonviolent, /datum/quirk/paraplegic, /datum/quirk/monophobia) threat = 1 + + family_heirlooms = list( + /obj/item/reagent_containers/food/drinks/flask/det + ) /datum/outfit/job/detective name = "Detective" diff --git a/code/modules/jobs/job_types/geneticist.dm b/code/modules/jobs/job_types/geneticist.dm index 611c3f99cd..2529eaa024 100644 --- a/code/modules/jobs/job_types/geneticist.dm +++ b/code/modules/jobs/job_types/geneticist.dm @@ -24,6 +24,10 @@ threat = 1.5 starting_modifiers = list(/datum/skill_modifier/job/surgery, /datum/skill_modifier/job/affinity/surgery) + + family_heirlooms = list( + /obj/item/clothing/under/shorts/purple + ) /datum/outfit/job/geneticist name = "Geneticist" diff --git a/code/modules/jobs/job_types/head_of_personnel.dm b/code/modules/jobs/job_types/head_of_personnel.dm index b4339ab774..033c3ebfa4 100644 --- a/code/modules/jobs/job_types/head_of_personnel.dm +++ b/code/modules/jobs/job_types/head_of_personnel.dm @@ -39,6 +39,10 @@ blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/prosopagnosia, /datum/quirk/insanity) threat = 2 + + family_heirlooms = list( + /obj/item/reagent_containers/food/drinks/trophy/silver_cup + ) /datum/outfit/job/hop diff --git a/code/modules/jobs/job_types/head_of_security.dm b/code/modules/jobs/job_types/head_of_security.dm index ab58f20569..7839d1ecb9 100644 --- a/code/modules/jobs/job_types/head_of_security.dm +++ b/code/modules/jobs/job_types/head_of_security.dm @@ -38,6 +38,10 @@ display_order = JOB_DISPLAY_ORDER_HEAD_OF_SECURITY blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/nonviolent, /datum/quirk/paraplegic, /datum/quirk/blindness, /datum/quirk/monophobia, /datum/quirk/insanity) threat = 3 + + family_heirlooms = list( + /obj/item/book/manual/wiki/security_space_law + ) /datum/outfit/job/hos name = "Head of Security" diff --git a/code/modules/jobs/job_types/janitor.dm b/code/modules/jobs/job_types/janitor.dm index c62c2e5b26..59c6997398 100644 --- a/code/modules/jobs/job_types/janitor.dm +++ b/code/modules/jobs/job_types/janitor.dm @@ -19,6 +19,13 @@ display_order = JOB_DISPLAY_ORDER_JANITOR threat = 0.2 + + family_heirlooms = list( + /obj/item/mop, + /obj/item/clothing/suit/caution, + /obj/item/reagent_containers/glass/bucket, + /obj/item/soap + ) /datum/outfit/job/janitor name = "Janitor" diff --git a/code/modules/jobs/job_types/lawyer.dm b/code/modules/jobs/job_types/lawyer.dm index 17c376a5de..4105bd4e6e 100644 --- a/code/modules/jobs/job_types/lawyer.dm +++ b/code/modules/jobs/job_types/lawyer.dm @@ -22,6 +22,11 @@ display_order = JOB_DISPLAY_ORDER_LAWYER threat = 0.3 + + family_heirlooms = list( + /obj/item/gavelhammer, + /obj/item/book/manual/wiki/security_space_law + ) /datum/outfit/job/lawyer name = "Lawyer" diff --git a/code/modules/jobs/job_types/medical_doctor.dm b/code/modules/jobs/job_types/medical_doctor.dm index 75a85c88d1..b0a0375517 100644 --- a/code/modules/jobs/job_types/medical_doctor.dm +++ b/code/modules/jobs/job_types/medical_doctor.dm @@ -22,6 +22,15 @@ threat = 0.5 starting_modifiers = list(/datum/skill_modifier/job/surgery, /datum/skill_modifier/job/affinity/surgery) + + family_heirlooms = list( + /obj/item/storage/firstaid/ancient/heirloom, + /obj/item/scalpel, + /obj/item/hemostat, + /obj/item/circular_saw, + /obj/item/retractor, + /obj/item/cautery + ) /datum/outfit/job/doctor name = "Medical Doctor" diff --git a/code/modules/jobs/job_types/mime.dm b/code/modules/jobs/job_types/mime.dm index 171e0cef8a..84d6bcb1a7 100644 --- a/code/modules/jobs/job_types/mime.dm +++ b/code/modules/jobs/job_types/mime.dm @@ -20,6 +20,10 @@ display_order = JOB_DISPLAY_ORDER_MIME threat = 0 + + family_heirlooms = list( + /obj/item/reagent_containers/food/snacks/baguette + ) /datum/job/mime/after_spawn(mob/living/carbon/human/H, client/C) . = ..() diff --git a/code/modules/jobs/job_types/paramedic.dm b/code/modules/jobs/job_types/paramedic.dm index fd802edc46..a0d7529aae 100644 --- a/code/modules/jobs/job_types/paramedic.dm +++ b/code/modules/jobs/job_types/paramedic.dm @@ -23,6 +23,10 @@ threat = 0.5 starting_modifiers = list(/datum/skill_modifier/job/surgery, /datum/skill_modifier/job/affinity/surgery) + + family_heirlooms = list( + /obj/item/storage/firstaid/ancient/heirloom + ) /datum/outfit/job/paramedic name = "Paramedic" diff --git a/code/modules/jobs/job_types/prisoner.dm b/code/modules/jobs/job_types/prisoner.dm index 06eafe649b..20a2f463f5 100644 --- a/code/modules/jobs/job_types/prisoner.dm +++ b/code/modules/jobs/job_types/prisoner.dm @@ -13,6 +13,10 @@ plasma_outfit = /datum/outfit/plasmaman/prisoner display_order = JOB_DISPLAY_ORDER_PRISONER + + family_heirlooms = list( + /obj/item/pen/blue + ) /datum/job/prisoner/get_latejoin_spawn_point() return get_roundstart_spawn_point() diff --git a/code/modules/jobs/job_types/quartermaster.dm b/code/modules/jobs/job_types/quartermaster.dm index 67d14365ed..8a211ae993 100644 --- a/code/modules/jobs/job_types/quartermaster.dm +++ b/code/modules/jobs/job_types/quartermaster.dm @@ -33,6 +33,11 @@ display_order = JOB_DISPLAY_ORDER_QUARTERMASTER blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity) threat = 0.5 + + family_heirlooms = list( + /obj/item/stamp, + /obj/item/stamp/denied + ) /datum/outfit/job/quartermaster name = "Quartermaster" diff --git a/code/modules/jobs/job_types/research_director.dm b/code/modules/jobs/job_types/research_director.dm index 178bcc3188..606c34af5e 100644 --- a/code/modules/jobs/job_types/research_director.dm +++ b/code/modules/jobs/job_types/research_director.dm @@ -38,6 +38,10 @@ starting_modifiers = list(/datum/skill_modifier/job/level/wiring) blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity) threat = 5 + + family_heirlooms = list( + /obj/item/toy/plush/slimeplushie + ) /datum/outfit/job/rd name = "Research Director" diff --git a/code/modules/jobs/job_types/roboticist.dm b/code/modules/jobs/job_types/roboticist.dm index 6f7b91571b..0e48467d91 100644 --- a/code/modules/jobs/job_types/roboticist.dm +++ b/code/modules/jobs/job_types/roboticist.dm @@ -24,6 +24,10 @@ display_order = JOB_DISPLAY_ORDER_ROBOTICIST threat = 1 + + family_heirlooms = list( + /obj/item/toy/figure/borg + ) /datum/outfit/job/roboticist name = "Roboticist" diff --git a/code/modules/jobs/job_types/scientist.dm b/code/modules/jobs/job_types/scientist.dm index 10e3f58594..4bdbe6833b 100644 --- a/code/modules/jobs/job_types/scientist.dm +++ b/code/modules/jobs/job_types/scientist.dm @@ -22,6 +22,10 @@ starting_modifiers = list(/datum/skill_modifier/job/level/wiring/basic) display_order = JOB_DISPLAY_ORDER_SCIENTIST threat = 1.2 + + family_heirlooms = list( + /obj/item/toy/plush/slimeplushie + ) /datum/outfit/job/scientist name = "Scientist" diff --git a/code/modules/jobs/job_types/security_officer.dm b/code/modules/jobs/job_types/security_officer.dm index b59a58db73..8dedc6c6dc 100644 --- a/code/modules/jobs/job_types/security_officer.dm +++ b/code/modules/jobs/job_types/security_officer.dm @@ -28,6 +28,11 @@ display_order = JOB_DISPLAY_ORDER_SECURITY_OFFICER blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/nonviolent, /datum/quirk/paraplegic, /datum/quirk/blindness, /datum/quirk/monophobia) threat = 2 + + family_heirlooms = list( + /obj/item/book/manual/wiki/security_space_law, + /obj/item/clothing/head/beret/sec + ) /datum/job/officer/get_access() var/list/L = list() diff --git a/code/modules/jobs/job_types/shaft_miner.dm b/code/modules/jobs/job_types/shaft_miner.dm index e693335779..c6192280c7 100644 --- a/code/modules/jobs/job_types/shaft_miner.dm +++ b/code/modules/jobs/job_types/shaft_miner.dm @@ -24,6 +24,11 @@ display_order = JOB_DISPLAY_ORDER_SHAFT_MINER threat = 1.5 + + family_heirlooms = list( + /obj/item/pickaxe/mini, + /obj/item/shovel + ) /datum/outfit/job/miner name = "Shaft Miner (Lavaland)" diff --git a/code/modules/jobs/job_types/station_engineer.dm b/code/modules/jobs/job_types/station_engineer.dm index e2248362d0..58822dc4c5 100644 --- a/code/modules/jobs/job_types/station_engineer.dm +++ b/code/modules/jobs/job_types/station_engineer.dm @@ -27,6 +27,15 @@ display_order = JOB_DISPLAY_ORDER_STATION_ENGINEER threat = 1 + + family_heirlooms = list( + /obj/item/clothing/head/hardhat, + /obj/item/screwdriver/brass/family, + /obj/item/wrench/brass/family, + /obj/item/weldingtool/mini, // No brass family variant + /obj/item/crowbar/brass/family, + /obj/item/wirecutters/brass/family + ) /datum/outfit/job/engineer name = "Station Engineer" diff --git a/code/modules/jobs/job_types/virologist.dm b/code/modules/jobs/job_types/virologist.dm index be844be529..423a65048f 100644 --- a/code/modules/jobs/job_types/virologist.dm +++ b/code/modules/jobs/job_types/virologist.dm @@ -25,6 +25,10 @@ threat = 1.5 starting_modifiers = list(/datum/skill_modifier/job/surgery, /datum/skill_modifier/job/affinity/surgery) + + family_heirlooms = list( + /obj/item/reagent_containers/syringe + ) /datum/outfit/job/virologist name = "Virologist" diff --git a/code/modules/jobs/job_types/warden.dm b/code/modules/jobs/job_types/warden.dm index 8e3ef5a253..714c599024 100644 --- a/code/modules/jobs/job_types/warden.dm +++ b/code/modules/jobs/job_types/warden.dm @@ -29,6 +29,10 @@ display_order = JOB_DISPLAY_ORDER_WARDEN blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/nonviolent, /datum/quirk/paraplegic, /datum/quirk/blindness, /datum/quirk/monophobia) threat = 2 + + family_heirlooms = list( + /obj/item/book/manual/wiki/security_space_law + ) /datum/job/warden/get_access() var/list/L = list() diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 7f40744eb0..2efdae38d6 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -599,7 +599,7 @@ if(job in GLOB.command_positions) command_bold = " command" //Sandstorm changes - var/jobline = "[job_datum.title] ([job_datum.current_positions])" + var/jobline = "[job_datum.title]" if(job_datum in SSjob.prioritized_jobs) jobline = "[jobline]" if(client && client.prefs && client.prefs.alt_titles_preferences[job_datum.title]) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 64b5dfcd9e..6052229e35 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -237,6 +237,9 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) ///For custom overrides for species ass images var/icon/ass_image + /// List of family heirlooms this species can get with the family heirloom quirk. List of types. + var/list/family_heirlooms + /////////// // PROCS // /////////// diff --git a/code/modules/mob/living/carbon/human/species_types/bugmen.dm b/code/modules/mob/living/carbon/human/species_types/bugmen.dm index 7f9d3f40de..8b4861d558 100644 --- a/code/modules/mob/living/carbon/human/species_types/bugmen.dm +++ b/code/modules/mob/living/carbon/human/species_types/bugmen.dm @@ -25,3 +25,7 @@ allowed_limb_ids = list("insect","apid","moth","moth_not_greyscale") eye_type = "insect" + + family_heirlooms = list( + /obj/item/flashlight/lantern/heirloom_moth + ) diff --git a/code/modules/mob/living/carbon/human/species_types/dwarves.dm b/code/modules/mob/living/carbon/human/species_types/dwarves.dm index e0a9bcaa36..2820726313 100644 --- a/code/modules/mob/living/carbon/human/species_types/dwarves.dm +++ b/code/modules/mob/living/carbon/human/species_types/dwarves.dm @@ -20,6 +20,11 @@ GLOBAL_LIST_INIT(dwarf_last, world.file2list("strings/names/dwarf_last.txt")) // species_language_holder = /datum/language_holder/dwarf species_category = SPECIES_CATEGORY_BASIC //a kind of human + family_heirlooms = list( + // Dwarves get a dwarf mug as their heirloom (normal container but has manly dorf icon) + /obj/item/reagent_containers/food/drinks/dwarf_mug + ) + /mob/living/carbon/human/species/dwarf //species admin spawn path race = /datum/species/dwarf //and the race the path is set to. diff --git a/code/modules/mob/living/carbon/human/species_types/felinid.dm b/code/modules/mob/living/carbon/human/species_types/felinid.dm index eee5757b46..beebbb1dfd 100644 --- a/code/modules/mob/living/carbon/human/species_types/felinid.dm +++ b/code/modules/mob/living/carbon/human/species_types/felinid.dm @@ -13,6 +13,7 @@ wagging_type = "mam_waggingtail" species_category = SPECIES_CATEGORY_FURRY ass_image = 'icons/ass/asscat.png' + family_heirlooms = list(/obj/item/toy/cattoy) /datum/species/human/felinid/on_species_gain(mob/living/carbon/C, datum/species/old_species, pref_load) if(ishuman(C)) diff --git a/code/modules/mob/living/carbon/human/species_types/ipc.dm b/code/modules/mob/living/carbon/human/species_types/ipc.dm index dae4baa4f4..bb532943f8 100644 --- a/code/modules/mob/living/carbon/human/species_types/ipc.dm +++ b/code/modules/mob/living/carbon/human/species_types/ipc.dm @@ -37,6 +37,11 @@ species_category = SPECIES_CATEGORY_ROBOT wings_icons = SPECIES_WINGS_ROBOT + family_heirlooms = list( + // Gives a broken powercell for flavor text! + /obj/item/stock_parts/cell/family + ) + var/datum/action/innate/monitor_change/screen languagewhitelist = list("Encoded Audio Language") //Skyrat change - species language whitelist diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 01f82cbac3..a82f77867f 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -35,6 +35,10 @@ ass_image = 'icons/ass/assslime.png' blacklisted_quirks = list(/datum/quirk/glass_bones) + family_heirlooms = list( + /obj/item/toy/plush/slimeplushie + ) + /datum/species/jelly/on_species_loss(mob/living/carbon/C) C.faction -= "slime" if(ishuman(C)) 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 81a46cbf66..589c9a1dd0 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -34,6 +34,10 @@ ass_image = 'icons/ass/asslizard.png' + family_heirlooms = list( + /obj/item/toy/plush/lizardplushie + ) + /datum/species/lizard/random_name(gender,unique,lastname) if(unique) return random_unique_lizard_name(gender) diff --git a/code/modules/mob/living/carbon/human/species_types/synthliz.dm b/code/modules/mob/living/carbon/human/species_types/synthliz.dm index ec1fd86780..05e075415d 100644 --- a/code/modules/mob/living/carbon/human/species_types/synthliz.dm +++ b/code/modules/mob/living/carbon/human/species_types/synthliz.dm @@ -37,3 +37,8 @@ wagging_type = "mam_waggingtail" species_category = SPECIES_CATEGORY_ROBOT wings_icons = SPECIES_WINGS_ROBOT + + family_heirlooms = list( + // They're also robots + /obj/item/stock_parts/cell/family + ) diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 19a6c9e832..0a7d6d05da 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -120,8 +120,6 @@ /obj/item/pen/fountain/captain/reskin_obj(mob/M) . = ..() - if(!.) - return desc = "It's an expensive [current_skin] fountain pen. The nib is quite sharp." /obj/item/pen/attack_self(mob/living/carbon/user) diff --git a/code/modules/reagents/chemistry/reagents/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drink_reagents.dm index 5fdf4574f4..348556c337 100644 --- a/code/modules/reagents/chemistry/reagents/drink_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drink_reagents.dm @@ -1088,7 +1088,7 @@ 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]!") + to_chat(M, span_userlove("You feel like playing with your [G.name]!")) ..() /datum/reagent/consumable/monkey_energy diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm index 4848347df2..c709fd09a7 100644 --- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm @@ -570,13 +570,13 @@ 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]") + to_chat(M, span_userlove("[aroused_message]")) if(ishuman(M)) var/mob/living/carbon/human/H = M var/list/genits = H.adjust_arousal(current_cycle, "crocin", 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]!") + to_chat(M, span_userlove("[G.arousal_verb]!")) ..() /datum/reagent/drug/aphrodisiacplus @@ -603,14 +603,14 @@ 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]") + to_chat(M, span_userlove("[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, "hexacrocin", 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]!") + to_chat(M, span_userlove("[G.arousal_verb]!")) ..() /datum/reagent/drug/aphrodisiacplus/addiction_act_stage2(mob/living/M) @@ -631,7 +631,7 @@ 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!") + to_chat(M, span_userlove("Your libido is going haywire!")) M.log_message("Made perma-horny by hexacrocin.",LOG_EMOTE) ADD_TRAIT(M,TRAIT_PERMABONER,APHRO_TRAIT) ..() @@ -677,6 +677,6 @@ /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...") + to_chat(M, span_userlove("You feel like you'll never feel aroused again...")) ADD_TRAIT(M,TRAIT_NEVERBONER,APHRO_TRAIT) ..() diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 8e369f89db..8bbaa55a66 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -2428,7 +2428,7 @@ var/list/adjusted = H.adjust_arousal(2,"catnip", 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]!") + to_chat(M, span_userlove("You feel like playing with your [G.name]!")) ..() /datum/reagent/preservahyde diff --git a/code/modules/surgery/organs/augments_chest.dm b/code/modules/surgery/organs/augments_chest.dm index e1b198ade2..420810d7d2 100644 --- a/code/modules/surgery/organs/augments_chest.dm +++ b/code/modules/surgery/organs/augments_chest.dm @@ -20,6 +20,10 @@ if(!. || synthesizing) return + // Check if this user can process nutriment + if(HAS_TRAIT(owner, TRAIT_NO_PROCESS_FOOD)) + return + if(owner.nutrition <= hunger_threshold) synthesizing = TRUE to_chat(owner, "You feel less hungry...") diff --git a/code/modules/vending/cartridge.dm b/code/modules/vending/cartridge.dm index c4b35496c2..d80d8e958e 100644 --- a/code/modules/vending/cartridge.dm +++ b/code/modules/vending/cartridge.dm @@ -5,15 +5,34 @@ product_slogans = "Carts to go!" icon_state = "cart" icon_deny = "cart-deny" - products = list(/obj/item/cartridge/medical = 10, + products = list(/obj/item/pda/heads = 10, // PDA + // Normal staff cards + /obj/item/cartridge/medical = 10, /obj/item/cartridge/engineering = 10, /obj/item/cartridge/security = 10, /obj/item/cartridge/janitor = 10, /obj/item/cartridge/signal/toxins = 10, /obj/item/cartridge/roboticist = 10, - /obj/item/pda/heads = 10, + /obj/item/cartridge/atmos = 10, + /obj/item/cartridge/chemistry = 10, + /obj/item/cartridge/detective = 10, + /obj/item/cartridge/lawyer = 10, + /obj/item/cartridge/curator = 10, + /obj/item/cartridge/bartender = 10, + + // Virus cards + /obj/item/cartridge/virus/clown = 3, + /obj/item/cartridge/virus/mime = 3, + + // Command staff cards /obj/item/cartridge/captain = 3, - /obj/item/cartridge/quartermaster = 10) + /obj/item/cartridge/quartermaster = 10, + /obj/item/cartridge/head = 10, + /obj/item/cartridge/hos = 10, + /obj/item/cartridge/ce = 10, + /obj/item/cartridge/cmo = 10, + /obj/item/cartridge/rd = 10) + armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50) refill_canister = /obj/item/vending_refill/cart resistance_flags = FIRE_PROOF diff --git a/html/changelogs/archive/2023-01.yml b/html/changelogs/archive/2023-01.yml index 91878e8afa..d8475b3fd7 100644 --- a/html/changelogs/archive/2023-01.yml +++ b/html/changelogs/archive/2023-01.yml @@ -30,3 +30,86 @@ SandPoot: - rscadd: Added a fancy reskin for the mining hardsuit, modify it using Alt-Click! - imageadd: Special sprites made by Dexxiol#3462! +2023-01-10: + BongaTheProto: + - rscadd: New sloog sprites for character creation and backpack + - rscadd: New type of eyes, none + - bugfix: Fixes misclassing of sec badge + LeDrascol: + - tweak: Liquid Panty Dropper now launches clothing + - tweak: Liquid Panty Dropper no longer interferes with held items + - code_imp: LPD's clothing burst is now a mob proc + - bugfix: Fixed the late-join panel showing job slots twice +2023-01-11: + BongaTheProto: + - bugfix: Fixes gun reskins broken by the new reskin system + Seris02: + - bugfix: fixed gargoyles having sprites that are odd, along with sanity checks + and making the transition between living and statue seamless +2023-01-12: + LeDrascol: + - refactor: Moved quirk action datums to a new file + - rscadd: Added a Plushmium Crate to cargo +2023-01-13: + Guatolipo: + - rscadd: Added CART_CHEMISTRY access to cart-cmo + LeDrascol: + - tweak: Replaced three dangerous holodeck modes with harmless alternatives +2023-01-14: + LeDrascol: + - bugfix: Fixed spelling mistakes in the interaction system + - rscadd: Added the Love to Life spray bottle + - tweak: Updated Plushmium Crate contents + - rscadd: 'Added implant: Rapid Disrobe' + - tweak: Nudists now start with a Rapid Disrobe implant + - rscadd: Added the Wallet of Holding +2023-01-15: + BongaTheProto: + - rscadd: Adds nobl donator plushie + - rscadd: Adds a *poyo emote + Casper: + - bugfix: fixes telekinetic users from teleporting to stripper poles + - bugfix: infinite metal exploit + SandPoot: + - spellcheck: fixed a few typos. + - refactor: refactored skirt peeking. + - tweak: examine someone twice to actually peek their panties. +2023-01-16: + SandPoot: + - rscadd: You can now allow interacting with your genitals through clothes. + - tweak: Modified sandstorm's spans (`"...`) with the defines (`span_x("...`) +2023-01-17: + BongaTheProto: + - code_imp: optimizes some genital related code + LeDrascol: + - code_imp: Added span defines for 'reallybig hypnophrase', 'big warning', 'header', + and 'umbra' + - refactor: All HTML spans are now defines-based + - tweak: Moved Autodoc techweb entry from Advanced Surgery to Advanced Surgery Tools + SishTis: + - rscadd: Addead keybinds to put/take items in/from suit storage and pockets slots. + zeroisthebiggay: + - spellcheck: You +2023-01-18: + LeDrascol: + - tweak: Moved Autodoc techweb entry from Advanced Surgery to Advanced Surgery Tools + - tweak: Bluespace mining research is now behind Anomaly Research + - balance: Bluespace miners now require a bluespace anomaly core + SandPoot: + - balance: Maybe very small amounts of air aren't as aggressive with pushing stuff + around. + - balance: Way too much air can send you FLYING, maybe think twice about opening + that airlock/firelock now. + - imageadd: Added space wind image for air pushing stuff. +2023-01-19: + LeDrascol: + - bugfix: Fixed spelling mistakes in server's clothing entries + - imageadd: Updated sprite for Chalice of Cum + - imagedel: Removed duplicate TG drink icons + - tweak: Liquid Panty Dropper now checks client prefs +2023-01-20: + LeDrascol: + - rscadd: Added a surplus condom box to Kinkmates + Winter Schock: + - bugfix: Doll with monophobia dont get stress in someone vore belly + - bugfix: Blind doll with monophobia dont get stress while someone in 1 tile range diff --git a/icons/effects/atmospherics.dmi b/icons/effects/atmospherics.dmi index 6c2412c04b..8fce46c9c3 100644 Binary files a/icons/effects/atmospherics.dmi and b/icons/effects/atmospherics.dmi differ diff --git a/icons/mob/eyes.dmi b/icons/mob/eyes.dmi index 4bc2136cd1..c8f0b8f634 100644 Binary files a/icons/mob/eyes.dmi and b/icons/mob/eyes.dmi differ diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi index 6501126e02..567fc8ace8 100644 Binary files a/icons/obj/drinks.dmi and b/icons/obj/drinks.dmi differ diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index 4cee011ecd..8085931b6e 100644 Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ diff --git a/modular_citadel/code/modules/client/loadout/backpack.dm b/modular_citadel/code/modules/client/loadout/backpack.dm index 5879426041..a0be000b31 100644 --- a/modular_citadel/code/modules/client/loadout/backpack.dm +++ b/modular_citadel/code/modules/client/loadout/backpack.dm @@ -190,3 +190,8 @@ loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION subcategory = LOADOUT_SUBCATEGORY_BACKPACK_ACCESSORIES cost = 0 + +// Moved here from quirks +/datum/gear/backpack/dyespray + name = "Hair dye spray" + path = /obj/item/dyespray diff --git a/modular_sand/code/controllers/subsystem/language.dm b/modular_sand/code/controllers/subsystem/language.dm index faa3fa3e1d..c0abd0b720 100644 --- a/modular_sand/code/controllers/subsystem/language.dm +++ b/modular_sand/code/controllers/subsystem/language.dm @@ -24,7 +24,7 @@ continue if(valid_languages.len) var/list/sorted_valid = sortList(valid_languages) - to_chat(user, "You are able to speak in [sorted_valid.Join(", ")]. If you're actually good at [valid_languages.len > 1 ? "them" : "it"] or not, it's up to you.") + to_chat(user, span_notice("You are able to speak in [sorted_valid.Join(", ")]. If you're actually good at [valid_languages.len > 1 ? "them" : "it"] or not, it's up to you.")) if(invalid_languages.len) var/list/sorted_invalid = sortList(invalid_languages) - to_chat(user, "[sorted_invalid.Join(", ")] [invalid_languages.len > 1 ? "are" : "is a"] restricted language[invalid_languages.len > 1 ? "s" : ""], and ha[invalid_languages.len > 1 ? "ve" : "s"] not been assigned.") + to_chat(user, span_warning("[sorted_invalid.Join(", ")] [invalid_languages.len > 1 ? "are" : "is a"] restricted language[invalid_languages.len > 1 ? "s" : ""], and ha[invalid_languages.len > 1 ? "ve" : "s"] not been assigned.")) diff --git a/modular_sand/code/datums/components/container_item/tank_holder.dm b/modular_sand/code/datums/components/container_item/tank_holder.dm index b68c413519..765335987c 100644 --- a/modular_sand/code/datums/components/container_item/tank_holder.dm +++ b/modular_sand/code/datums/components/container_item/tank_holder.dm @@ -17,12 +17,12 @@ var/obj/item/I = parent if(container.contents.len) if(user) - to_chat(user, "There's already something in [container].") + to_chat(user, span_warning("There's already something in [container].")) return TRUE if(user) if(!user.transferItemToLoc(I, container)) return TRUE - to_chat(user, "You put [I] into [container].") + to_chat(user, span_notice("You put [I] into [container].")) else I.forceMove(container) container.tank = I diff --git a/modular_sand/code/datums/elements/holder_micro.dm b/modular_sand/code/datums/elements/holder_micro.dm index d4d3b34d84..f264ded3b5 100644 --- a/modular_sand/code/datums/elements/holder_micro.dm +++ b/modular_sand/code/datums/elements/holder_micro.dm @@ -26,7 +26,7 @@ /datum/element/mob_holder/micro/on_examine(mob/living/source, mob/user, list/examine_list) if(ishuman(user) && !istype(source.loc, /obj/item/clothing/head/mob_holder) && (abs(get_size(source)/get_size(user)) <= CONFIG_GET(number/max_pick_ratio))) - examine_list += "Looks like [source.p_they(FALSE)] can be picked up using Alt+Click and grab intent!" + examine_list += span_notice("Looks like [source.p_they(FALSE)] can be picked up using Alt+Click and grab intent!") /datum/element/mob_holder/micro/proc/mob_pickup_micro(mob/living/source, mob/user) var/obj/item/clothing/head/mob_holder/micro/holder = new(get_turf(source), source, worn_state, alt_worn, right_hand, left_hand, inv_slots) @@ -50,41 +50,41 @@ if(!ishuman(user) || !user.Adjacent(source) || user.incapacitated()) return FALSE if(source == user) - to_chat(user, "You can't pick yourself up.") + to_chat(user, span_warning("You can't pick yourself up.")) source.balloon_alert(user, "cannot pick yourself!") return FALSE if(abs(get_size(source)/get_size(user)) > CONFIG_GET(number/max_pick_ratio)) - to_chat(user, "They're too big to pick up!") + to_chat(user, span_warning("They're too big to pick up!")) source.balloon_alert(user, "too big to pick up!") return FALSE if(user.get_active_held_item()) - to_chat(user, "Your hands are full!") + to_chat(user, span_warning("Your hands are full!")) source.balloon_alert(user, "hands are full!") return FALSE if(source.buckled) - to_chat(user, "[source] is buckled to something!") + to_chat(user, span_warning("[source] is buckled to something!")) source.balloon_alert(user, "buckled to something!") return FALSE - source.visible_message("[user] starts picking up [source].", \ - "[user] starts picking you up!") + source.visible_message(span_warning("[user] starts picking up [source]."), \ + span_userdanger("[user] starts picking you up!")) source.balloon_alert(user, "picking up") var/p = abs(get_size(source)/get_size(user) * 40) //Scale how fast the pickup will be depending on size difference if(!do_after(user, p, target = source)) return FALSE if(user.get_active_held_item()) - to_chat(user, "Your hands are full!") + to_chat(user, span_warning("Your hands are full!")) source.balloon_alert(user, "hands full!") return FALSE if(source.buckled) - to_chat(user, "[source] is buckled to something!") + to_chat(user, span_warning("[source] is buckled to something!")) source.balloon_alert(user, "buckled!") return FALSE - source.visible_message("[user] picks up [source]!", - "[user] picks you up!", + source.visible_message(span_warning("[user] picks up [source]!"), + span_userdanger("[user] picks you up!"), target = user, - target_message = "You pick [source] up.") + target_message = span_notice("You pick [source] up.")) source.drop_all_held_items() mob_pickup_micro(source, user) return TRUE @@ -100,14 +100,14 @@ //TODO: add a timer to escape someone's grip dependant on size diff /obj/item/clothing/head/mob_holder/micro/container_resist(mob/living/user) if(user.incapacitated()) - to_chat(user, "You can't escape while you're restrained like this!") + to_chat(user, span_warning("You can't escape while you're restrained like this!")) return var/mob/living/L = loc - visible_message("[src] begins to squirm in [L]'s grasp!") + visible_message(span_warning("[src] begins to squirm in [L]'s grasp!")) if(!do_after(user, 12 SECONDS, target = src, required_mobility_flags = MOBILITY_RESIST)) if(!user || user.stat != CONSCIOUS || user.loc != src) return - to_chat(loc, "[src] stops resisting.") + to_chat(loc, span_warning("[src] stops resisting.")) return visible_message("[src] escapes [L]!") release() @@ -133,17 +133,17 @@ var/mob/living/carbon/human/M = held_mob if(istype(M)) if(user.a_intent == "harm") //TO:DO, rework all of these interactions to be a lot more in depth - visible_message("[user] slams their fist down on [M]!", runechat_popup = TRUE, rune_msg = " slams their fist down on [M]!") + visible_message(span_danger("[user] slams their fist down on [M]!"), runechat_popup = TRUE, rune_msg = " slams their fist down on [M]!") playsound(loc, 'sound/weapons/punch1.ogg', 50, 1) M.adjustBruteLoss(5) return if(user.a_intent == "disarm") - visible_message("[user] pins [M] down with a finger!", runechat_popup = TRUE, rune_msg = " pins [M] down with a finger!") + visible_message(span_danger("[user] pins [M] down with a finger!"), runechat_popup = TRUE, rune_msg = " pins [M] down with a finger!") playsound(loc, 'sound/effects/bodyfall1.ogg', 50, 1) M.adjustStaminaLoss(10) return if(user.a_intent == "grab") - visible_message("[user] squeezes their fist around [M]!", runechat_popup = TRUE, rune_msg = " squeezes their fist around [M]!") + visible_message(span_danger("[user] squeezes their fist around [M]!"), runechat_popup = TRUE, rune_msg = " squeezes their fist around [M]!") playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1) M.adjustOxyLoss(5) return diff --git a/modular_sand/code/datums/interactions/_interaction.dm b/modular_sand/code/datums/interactions/_interaction.dm index c46ce23784..b7077ae80d 100644 --- a/modular_sand/code/datums/interactions/_interaction.dm +++ b/modular_sand/code/datums/interactions/_interaction.dm @@ -46,17 +46,17 @@ if(require_user_mouth) if(!user.has_mouth() && !issilicon(user)) //Again, silicons do not have the required parts normally. if(!silent) - to_chat(user, "You don't have a mouth.") + to_chat(user, span_warning("You don't have a mouth.")) return FALSE if(!user.mouth_is_free() && !issilicon(user)) //Borgs cannot wear mouthgear, bypassing the check. if(!silent) - to_chat(user, "Your mouth is covered.") + to_chat(user, span_warning("Your mouth is covered.")) return FALSE if(require_user_hands && !user.has_hands() && !issilicon(user)) //Edited to allow silicons to interact. if(!silent) - to_chat(user, "You don't have hands.") + to_chat(user, span_warning("You don't have hands.")) return FALSE if(COOLDOWN_FINISHED(user, last_interaction_time)) @@ -100,13 +100,13 @@ /datum/interaction/proc/do_action(mob/living/user, mob/living/target) if(!user_is_target) if(user == target) //tactical href fix - to_chat(user, "You cannot target yourself.") + to_chat(user, span_warning("You cannot target yourself.")) return if(get_dist(user, target) > max_distance) - to_chat(user, "They are too far away.") + to_chat(user, span_warning("They are too far away.")) return if(needs_physical_contact && !(user.Adjacent(target) && target.Adjacent(user))) - to_chat(user, "You cannot get to them.") + to_chat(user, span_warning("You cannot get to them.")) return if(!evaluate_user(user, silent = FALSE)) return diff --git a/modular_sand/code/datums/interactions/interaction_datums/lewd/breasts.dm b/modular_sand/code/datums/interactions/interaction_datums/lewd/breasts.dm index 6fdd1df0c8..fdd4e5bf82 100644 --- a/modular_sand/code/datums/interactions/interaction_datums/lewd/breasts.dm +++ b/modular_sand/code/datums/interactions/interaction_datums/lewd/breasts.dm @@ -30,7 +30,7 @@ "lets a large stream of [u_His] own abundant [lowertext(milktext)] coat the back of \the [target]'s throat" ) - message = "\The [user] [pick(lines)]" + message = span_lewd("\The [user] [pick(lines)]") user.visible_message(message, ignored_mobs = user.get_unconsenting()) playlewdinteractionsound(get_turf(user), pick('modular_sand/sound/interactions/oral1.ogg', 'modular_sand/sound/interactions/oral2.ogg'), 70, 1, -1) @@ -59,56 +59,56 @@ /datum/interaction/lewd/titgrope/display_interaction(mob/living/carbon/human/user, mob/living/carbon/human/target) if(user.a_intent == INTENT_HELP) user.visible_message( - pick("\The [user] gently gropes \the [target]'s breast.", - "\The [user] softly squeezes \the [target]'s breasts.", - "\The [user] grips \the [target]'s breasts.", - "\The [user] runs a few fingers over \the [target]'s breast.", - "\The [user] delicately teases \the [target]'s nipple.", - "\The [user] traces a touch across \the [target]'s breast.")) + pick(span_lewd("\The [user] gently gropes \the [target]'s breast."), + span_lewd("\The [user] softly squeezes \the [target]'s breasts."), + span_lewd("\The [user] grips \the [target]'s breasts."), + span_lewd("\The [user] runs a few fingers over \the [target]'s breast."), + span_lewd("\The [user] delicately teases \the [target]'s nipple."), + span_lewd("\The [user] traces a touch across \the [target]'s breast."))) if(user.a_intent == INTENT_HARM) user.visible_message( - pick("\The [user] aggressively gropes \the [target]'s breast.", - "\The [user] grabs \the [target]'s breasts.", - "\The [user] tightly squeezes \the [target]'s breasts.", - "\The [user] slaps at \the [target]'s breasts.", - "\The [user] gropes \the [target]'s breasts roughly.")) + pick(span_lewd("\The [user] aggressively gropes \the [target]'s breast."), + span_lewd("\The [user] grabs \the [target]'s breasts."), + span_lewd("\The [user] tightly squeezes \the [target]'s breasts."), + span_lewd("\The [user] slaps at \the [target]'s breasts."), + span_lewd("\The [user] gropes \the [target]'s breasts roughly."))) if(prob(5 + target.get_lust())) if(target.a_intent == INTENT_HELP) user.visible_message( - pick("\The [target] shivers in arousal.", - "\The [target] moans quietly.", - "\The [target] breathes out a soft moan.", - "\The [target] gasps.", - "\The [target] shudders softly.", - "\The [target] trembles as hands run across bare skin.")) + pick(span_lewd("\The [target] shivers in arousal."), + span_lewd("\The [target] moans quietly."), + span_lewd("\The [target] breathes out a soft moan."), + span_lewd("\The [target] gasps."), + span_lewd("\The [target] shudders softly."), + span_lewd("\The [target] trembles as hands run across bare skin."))) if(target.get_lust() < 5) target.set_lust(5) if(target.a_intent == INTENT_DISARM) if (target.restrained()) user.visible_message( - pick("\The [target] twists playfully against the restraints.", - "\The [target] squirms away from [user]'s hand.", - "\The [target] slides back from [user]'s roaming hand.", - "\The [target] thrusts bare breasts forward into [user]'s hands.")) + pick(span_lewd("\The [target] twists playfully against the restraints."), + span_lewd("\The [target] squirms away from [user]'s hand."), + span_lewd("\The [target] slides back from [user]'s roaming hand."), + span_lewd("\The [target] thrusts bare breasts forward into [user]'s hands."))) else user.visible_message( - pick("\The [target] playfully bats at [user]'s hand.", - "\The [target] squirms away from [user]'s hand.", - "\The [target] guides [user]'s hand across bare breasts.", - "\The [target] teasingly laces a few fingers over [user]'s knuckles.")) + pick(span_lewd("\The [target] playfully bats at [user]'s hand."), + span_lewd("\The [target] squirms away from [user]'s hand."), + span_lewd("\The [target] guides [user]'s hand across bare breasts."), + span_lewd("\The [target] teasingly laces a few fingers over [user]'s knuckles."))) if(target.get_lust() < 10) target.add_lust(1) if(target.a_intent == INTENT_GRAB) user.visible_message( - pick("\The [target] grips [user]'s wrist tight.", - "\The [target] digs nails into [user]'s arm.", - "\The [target] grabs [user]'s wrist for a second.")) + pick(span_lewd("\The [target] grips [user]'s wrist tight."), + span_lewd("\The [target] digs nails into [user]'s arm."), + span_lewd("\The [target] grabs [user]'s wrist for a second."))) if(target.a_intent == INTENT_HARM) user.adjustBruteLoss(1) user.visible_message( - pick("\The [target] pushes [user] roughly away.", - "\The [target] digs nails angrily into [user]'s arm.", - "\The [target] fiercely struggles against [user].", - "\The [target] claws [user]'s forearm, drawing blood.", - "\The [target] slaps [user]'s hand away.")) + pick(span_lewd("\The [target] pushes [user] roughly away."), + span_lewd("\The [target] digs nails angrily into [user]'s arm."), + span_lewd("\The [target] fiercely struggles against [user]."), + span_lewd("\The [target] claws [user]'s forearm, drawing blood."), + span_lewd("\The [target] slaps [user]'s hand away."))) return diff --git a/modular_sand/code/datums/interactions/interaction_datums/lewd/cursed/earfuck.dm b/modular_sand/code/datums/interactions/interaction_datums/lewd/cursed/earfuck.dm index 096acf97d0..50a259bc9c 100644 --- a/modular_sand/code/datums/interactions/interaction_datums/lewd/cursed/earfuck.dm +++ b/modular_sand/code/datums/interactions/interaction_datums/lewd/cursed/earfuck.dm @@ -41,7 +41,7 @@ playlewdinteractionsound(get_turf(user), pick('modular_sand/sound/interactions/champ1.ogg', 'modular_sand/sound/interactions/champ2.ogg'), 50, 1, -1) - user.visible_message(message = "\The [user] [message]", ignored_mobs = user.get_unconsenting(TRUE)) + user.visible_message(message = span_lewd("\The [user] [message]"), ignored_mobs = user.get_unconsenting(TRUE)) if(user.can_penetrating_genital_cum()) user.handle_post_sex(NORMAL_LUST, CUM_TARGET_EARS, partner) partner.handle_post_sex(LOW_LUST, null, user) diff --git a/modular_sand/code/datums/interactions/interaction_datums/lewd/cursed/eyefuck.dm b/modular_sand/code/datums/interactions/interaction_datums/lewd/cursed/eyefuck.dm index 862be9dec1..caa51bb1c8 100644 --- a/modular_sand/code/datums/interactions/interaction_datums/lewd/cursed/eyefuck.dm +++ b/modular_sand/code/datums/interactions/interaction_datums/lewd/cursed/eyefuck.dm @@ -41,7 +41,7 @@ playlewdinteractionsound(get_turf(user), pick('modular_sand/sound/interactions/champ1.ogg', 'modular_sand/sound/interactions/champ2.ogg'), 50, 1, -1) - user.visible_message("\The [user] [message]", ignored_mobs = user.get_unconsenting(TRUE)) + user.visible_message(span_lewd("\The [user] [message]"), ignored_mobs = user.get_unconsenting(TRUE)) if(user.can_penetrating_genital_cum()) user.handle_post_sex(NORMAL_LUST, CUM_TARGET_EYES, partner) partner.handle_post_sex(LOW_LUST, null, user) diff --git a/modular_sand/code/datums/interactions/interaction_datums/lewd/facefuck.dm b/modular_sand/code/datums/interactions/interaction_datums/lewd/facefuck.dm index d3f25b10ec..3c8dc2a72f 100644 --- a/modular_sand/code/datums/interactions/interaction_datums/lewd/facefuck.dm +++ b/modular_sand/code/datums/interactions/interaction_datums/lewd/facefuck.dm @@ -105,7 +105,7 @@ playlewdinteractionsound(get_turf(user), pick('modular_sand/sound/interactions/oral1.ogg', 'modular_sand/sound/interactions/oral2.ogg'), 70, 1, -1) - user.visible_message("\The [user] [message]", ignored_mobs = user.get_unconsenting()) + user.visible_message(span_lewd("\The [user] [message]"), ignored_mobs = user.get_unconsenting()) if(retaliation_message) user.visible_message("\The [partner] [retaliation_message]", ignored_mobs = user.get_unconsenting()) if(fucktarget != "penis" || user.can_penetrating_genital_cum()) @@ -158,7 +158,7 @@ playlewdinteractionsound(get_turf(user), pick('modular_sand/sound/interactions/oral1.ogg', 'modular_sand/sound/interactions/oral2.ogg'), 70, 1, -1) - user.visible_message(message = "\The [user] [message]", ignored_mobs = user.get_unconsenting()) + user.visible_message(message = span_lewd("\The [user] [message]"), ignored_mobs = user.get_unconsenting()) if(retaliation_message) user.visible_message(message = "\The [partner] [retaliation_message]", ignored_mobs = user.get_unconsenting()) if(user.can_penetrating_genital_cum()) diff --git a/modular_sand/code/datums/interactions/interaction_datums/lewd/feet.dm b/modular_sand/code/datums/interactions/interaction_datums/lewd/feet.dm index 990802a538..0bf1be224b 100644 --- a/modular_sand/code/datums/interactions/interaction_datums/lewd/feet.dm +++ b/modular_sand/code/datums/interactions/interaction_datums/lewd/feet.dm @@ -50,7 +50,7 @@ 'modular_sand/sound/interactions/foot_dry2.ogg', 'modular_sand/sound/interactions/foot_dry3.ogg', 'modular_sand/sound/interactions/foot_dry4.ogg'), 70, 1, -1) - user.visible_message(message = "\The [user] [message]", ignored_mobs = user.get_unconsenting()) + user.visible_message(message = span_lewd("\The [user] [message]"), ignored_mobs = user.get_unconsenting()) partner.handle_post_sex(LOW_LUST, null, user) /datum/interaction/lewd/grindmouth @@ -105,7 +105,7 @@ playlewdinteractionsound(get_turf(user), pick('modular_sand/sound/interactions/foot_wet1.ogg', 'modular_sand/sound/interactions/foot_wet2.ogg', 'modular_sand/sound/interactions/foot_wet3.ogg'), 70, 1, -1) - user.visible_message(message = "\The [user] [message]", ignored_mobs = user.get_unconsenting()) + user.visible_message(message = span_lewd("\The [user] [message]"), ignored_mobs = user.get_unconsenting()) partner.handle_post_sex(LOW_LUST, null, user) /datum/interaction/lewd/footjob @@ -135,7 +135,7 @@ 'modular_sand/sound/interactions/foot_dry3.ogg', 'modular_sand/sound/interactions/foot_wet1.ogg', 'modular_sand/sound/interactions/foot_wet2.ogg'), 70, 1, -1) - user.visible_message(message = "\The [user] [message]", ignored_mobs = user.get_unconsenting()) + user.visible_message(message = span_lewd("\The [user] [message]"), ignored_mobs = user.get_unconsenting()) if(partner.can_penetrating_genital_cum()) partner.handle_post_sex(NORMAL_LUST, CUM_TARGET_FEET, user) @@ -163,7 +163,7 @@ 'modular_sand/sound/interactions/foot_dry3.ogg', 'modular_sand/sound/interactions/foot_wet1.ogg', 'modular_sand/sound/interactions/foot_wet2.ogg'), 70, 1, -1) - user.visible_message(message = "\The [user] [message]", ignored_mobs = user.get_unconsenting()) + user.visible_message(message = span_lewd("\The [user] [message]"), ignored_mobs = user.get_unconsenting()) if(partner.can_penetrating_genital_cum()) partner.handle_post_sex(NORMAL_LUST, CUM_TARGET_FEET, user) @@ -193,5 +193,5 @@ 'modular_sand/sound/interactions/foot_dry3.ogg', 'modular_sand/sound/interactions/foot_wet1.ogg', 'modular_sand/sound/interactions/foot_wet2.ogg'), 70, 1, -1) - user.visible_message(message = "\The [user] [message]", ignored_mobs = user.get_unconsenting()) + user.visible_message(message = span_lewd("\The [user] [message]"), ignored_mobs = user.get_unconsenting()) partner.handle_post_sex(NORMAL_LUST, CUM_TARGET_FEET, user) diff --git a/modular_sand/code/datums/interactions/interaction_datums/lewd/frotting.dm b/modular_sand/code/datums/interactions/interaction_datums/lewd/frotting.dm index 252ed112ff..774b11f48a 100644 --- a/modular_sand/code/datums/interactions/interaction_datums/lewd/frotting.dm +++ b/modular_sand/code/datums/interactions/interaction_datums/lewd/frotting.dm @@ -14,7 +14,7 @@ message = "rubs [t_His] [genital_name] against [partner]'s." user.set_is_fucking(partner, CUM_TARGET_PENIS, user.getorganslot(ORGAN_SLOT_PENIS)) - user.visible_message("\The [user] [message]", ignored_mobs = user.get_unconsenting()) + user.visible_message(span_lewd("\The [user] [message]"), ignored_mobs = user.get_unconsenting()) if(user.can_penetrating_genital_cum()) user.handle_post_sex(NORMAL_LUST, CUM_TARGET_PENIS, partner) if(partner.can_penetrating_genital_cum()) @@ -43,6 +43,6 @@ playlewdinteractionsound(get_turf(user), pick('modular_sand/sound/interactions/squelch1.ogg', 'modular_sand/sound/interactions/squelch2.ogg', 'modular_sand/sound/interactions/squelch3.ogg'), 70, 1, -1) - user.visible_message("\The [user] [message]", ignored_mobs = user.get_unconsenting()) + user.visible_message(span_lewd("\The [user] [message]"), ignored_mobs = user.get_unconsenting()) partner.handle_post_sex(NORMAL_LUST, CUM_TARGET_VAGINA, user) user.handle_post_sex(NORMAL_LUST, CUM_TARGET_VAGINA, partner) diff --git a/modular_sand/code/datums/interactions/interaction_datums/lewd/fuck.dm b/modular_sand/code/datums/interactions/interaction_datums/lewd/fuck.dm index dc451559a5..d3d0b7751c 100644 --- a/modular_sand/code/datums/interactions/interaction_datums/lewd/fuck.dm +++ b/modular_sand/code/datums/interactions/interaction_datums/lewd/fuck.dm @@ -24,7 +24,7 @@ playlewdinteractionsound(get_turf(user), pick('modular_sand/sound/interactions/champ1.ogg', 'modular_sand/sound/interactions/champ2.ogg'), 50, 1, -1) - user.visible_message("\The [user] [message]", ignored_mobs = user.get_unconsenting()) + user.visible_message(span_lewd("\The [user] [message]"), ignored_mobs = user.get_unconsenting()) if(user.can_penetrating_genital_cum()) user.handle_post_sex(NORMAL_LUST, CUM_TARGET_VAGINA, partner) partner.handle_post_sex(NORMAL_LUST, CUM_TARGET_PENIS, user) @@ -56,7 +56,7 @@ playlewdinteractionsound(get_turf(user), pick('modular_sand/sound/interactions/bang1.ogg', 'modular_sand/sound/interactions/bang2.ogg', 'modular_sand/sound/interactions/bang3.ogg'), 70, 1, -1) - user.visible_message("\The [user] [message]", ignored_mobs = user.get_unconsenting()) + user.visible_message(span_lewd("\The [user] [message]"), ignored_mobs = user.get_unconsenting()) if(user.can_penetrating_genital_cum()) user.handle_post_sex(NORMAL_LUST, CUM_TARGET_ANUS, partner) partner.handle_post_sex(NORMAL_LUST, null, user) @@ -86,7 +86,7 @@ playlewdinteractionsound(get_turf(user), pick('modular_sand/sound/interactions/bang1.ogg', 'modular_sand/sound/interactions/bang2.ogg', 'modular_sand/sound/interactions/bang3.ogg'), 70, 1, -1) - user.visible_message("\The [user] [message]", ignored_mobs = user.get_unconsenting()) + user.visible_message(span_lewd("\The [user] [message]"), ignored_mobs = user.get_unconsenting()) if(user.can_penetrating_genital_cum()) user.handle_post_sex(NORMAL_LUST, CUM_TARGET_BREASTS, partner) @@ -119,7 +119,7 @@ 'modular_sand/sound/interactions/foot_dry3.ogg', 'modular_sand/sound/interactions/foot_wet1.ogg', 'modular_sand/sound/interactions/foot_wet2.ogg'), 70, 1, -1) - user.visible_message("\The [user] [message]", ignored_mobs = user.get_unconsenting()) + user.visible_message(span_lewd("\The [user] [message]"), ignored_mobs = user.get_unconsenting()) if(user.can_penetrating_genital_cum()) user.handle_post_sex(NORMAL_LUST, CUM_TARGET_FEET, partner) @@ -148,7 +148,7 @@ 'modular_sand/sound/interactions/foot_dry3.ogg', 'modular_sand/sound/interactions/foot_wet1.ogg', 'modular_sand/sound/interactions/foot_wet2.ogg'), 70, 1, -1) - user.visible_message("\The [user] [message]", ignored_mobs = user.get_unconsenting()) + user.visible_message(span_lewd("\The [user] [message]"), ignored_mobs = user.get_unconsenting()) if(user.can_penetrating_genital_cum()) user.handle_post_sex(NORMAL_LUST, CUM_TARGET_FEET, partner) @@ -182,5 +182,5 @@ 'modular_sand/sound/interactions/foot_dry3.ogg', 'modular_sand/sound/interactions/foot_wet1.ogg', 'modular_sand/sound/interactions/foot_wet2.ogg'), 70, 1, -1) - user.visible_message("\The [user] [message]", ignored_mobs = user.get_unconsenting()) + user.visible_message(span_lewd("\The [user] [message]"), ignored_mobs = user.get_unconsenting()) user.handle_post_sex(NORMAL_LUST, CUM_TARGET_FEET, partner) diff --git a/modular_sand/code/datums/interactions/interaction_datums/lewd/handjob.dm b/modular_sand/code/datums/interactions/interaction_datums/lewd/handjob.dm index 78e530c8ed..1c36e61823 100644 --- a/modular_sand/code/datums/interactions/interaction_datums/lewd/handjob.dm +++ b/modular_sand/code/datums/interactions/interaction_datums/lewd/handjob.dm @@ -22,6 +22,6 @@ playlewdinteractionsound(get_turf(user), pick('modular_sand/sound/interactions/bang1.ogg', 'modular_sand/sound/interactions/bang2.ogg', 'modular_sand/sound/interactions/bang3.ogg'), 70, 1, -1) - user.visible_message("\The [user] [message]", ignored_mobs = user.get_unconsenting()) + user.visible_message(span_lewd("\The [user] [message]"), ignored_mobs = user.get_unconsenting()) if(partner.can_penetrating_genital_cum()) partner.handle_post_sex(NORMAL_LUST, CUM_TARGET_HAND, user) diff --git a/modular_sand/code/datums/interactions/interaction_datums/lewd/kiss.dm b/modular_sand/code/datums/interactions/interaction_datums/lewd/kiss.dm index 7f49fd21dd..8e196c8a19 100644 --- a/modular_sand/code/datums/interactions/interaction_datums/lewd/kiss.dm +++ b/modular_sand/code/datums/interactions/interaction_datums/lewd/kiss.dm @@ -16,6 +16,6 @@ /datum/interaction/lewd/kiss/display_interaction(mob/living/user, mob/living/partner) if(user.get_lust() >= 3) - user.visible_message("\The [user] gives an intense, lingering kiss to \the [partner].") + user.visible_message(span_lewd("\The [user] gives an intense, lingering kiss to \the [partner].")) else - user.visible_message("\The [user] kisses \the [partner] deeply.") + user.visible_message(span_lewd("\The [user] kisses \the [partner] deeply.")) diff --git a/modular_sand/code/datums/interactions/interaction_datums/lewd/lick.dm b/modular_sand/code/datums/interactions/interaction_datums/lewd/lick.dm index 807d7f39af..6798d07d62 100644 --- a/modular_sand/code/datums/interactions/interaction_datums/lewd/lick.dm +++ b/modular_sand/code/datums/interactions/interaction_datums/lewd/lick.dm @@ -6,7 +6,7 @@ max_distance = 1 /datum/interaction/lewd/rimjob/display_interaction(mob/living/user, mob/living/partner) - user.visible_message("\The [user] licks \the [partner]'s asshole.", ignored_mobs = user.get_unconsenting()) + user.visible_message(span_lewd("\The [user] licks \the [partner]'s asshole."), ignored_mobs = user.get_unconsenting()) playlewdinteractionsound(get_turf(user), 'modular_sand/sound/interactions/champ_fingering.ogg', 50, 1, -1) partner.handle_post_sex(NORMAL_LUST, null, user) @@ -29,5 +29,5 @@ message = "licks \the [partner]'s [partner.has_feet() == 1 ? "foot" : "feet"]." playlewdinteractionsound(get_turf(user), 'modular_sand/sound/interactions/champ_fingering.ogg', 50, 1, -1) - user.visible_message("\The [user] [message]", ignored_mobs = user.get_unconsenting()) + user.visible_message(span_lewd("\The [user] [message]"), ignored_mobs = user.get_unconsenting()) user.handle_post_sex(LOW_LUST, null, user) diff --git a/modular_sand/code/datums/interactions/interaction_datums/lewd/mount.dm b/modular_sand/code/datums/interactions/interaction_datums/lewd/mount.dm index 92ee546967..2caa4f53c7 100644 --- a/modular_sand/code/datums/interactions/interaction_datums/lewd/mount.dm +++ b/modular_sand/code/datums/interactions/interaction_datums/lewd/mount.dm @@ -19,7 +19,7 @@ playlewdinteractionsound(get_turf(user), pick('modular_sand/sound/interactions/bang1.ogg', 'modular_sand/sound/interactions/bang2.ogg', 'modular_sand/sound/interactions/bang3.ogg'), 70, 1, -1) - user.visible_message("\The [user] [message]", ignored_mobs = user.get_unconsenting()) + user.visible_message(span_lewd("\The [user] [message]"), ignored_mobs = user.get_unconsenting()) if(partner.can_penetrating_genital_cum()) partner.handle_post_sex(NORMAL_LUST, CUM_TARGET_VAGINA, user) user.handle_post_sex(NORMAL_LUST, CUM_TARGET_PENIS, partner) @@ -45,7 +45,7 @@ playlewdinteractionsound(get_turf(user), pick('modular_sand/sound/interactions/bang1.ogg', 'modular_sand/sound/interactions/bang2.ogg', 'modular_sand/sound/interactions/bang3.ogg'), 70, 1, -1) - user.visible_message("\The [user] [message]", ignored_mobs = user.get_unconsenting()) + user.visible_message(span_lewd("\The [user] [message]"), ignored_mobs = user.get_unconsenting()) if(partner.can_penetrating_genital_cum()) partner.handle_post_sex(NORMAL_LUST, CUM_TARGET_ANUS, user) user.handle_post_sex(NORMAL_LUST, null, partner) @@ -74,7 +74,7 @@ playlewdinteractionsound(get_turf(user), pick('modular_sand/sound/interactions/squelch1.ogg', 'modular_sand/sound/interactions/squelch2.ogg', 'modular_sand/sound/interactions/squelch3.ogg'), 70, 1, -1) - user.visible_message("\The [user] [message]", ignored_mobs = user.get_unconsenting()) + user.visible_message(span_lewd("\The [user] [message]"), ignored_mobs = user.get_unconsenting()) user.handle_post_sex(LOW_LUST, null, partner) /datum/interaction/lewd/thighs @@ -157,7 +157,7 @@ 'modular_sand/sound/interactions/foot_wet1.ogg', 'modular_sand/sound/interactions/foot_dry3.ogg') playlewdinteractionsound(get_turf(user), file, 70, 1, -1) - user.visible_message("\The [user] [message]", ignored_mobs = user.get_unconsenting()) + user.visible_message(span_lewd("\The [user] [message]"), ignored_mobs = user.get_unconsenting()) user.handle_post_sex(lust_increase, THIGH_SMOTHERING, partner) playlewdinteractionsound(get_turf(user), pick('modular_sand/sound/interactions/oral1.ogg', 'modular_sand/sound/interactions/oral2.ogg'), 70, 1, -1) diff --git a/modular_sand/code/datums/interactions/interaction_datums/lewd/nipsuck.dm b/modular_sand/code/datums/interactions/interaction_datums/lewd/nipsuck.dm index 617821e111..e5a0b8911e 100644 --- a/modular_sand/code/datums/interactions/interaction_datums/lewd/nipsuck.dm +++ b/modular_sand/code/datums/interactions/interaction_datums/lewd/nipsuck.dm @@ -10,9 +10,9 @@ /datum/interaction/lewd/nipsuck/display_interaction(mob/living/carbon/human/user, mob/living/carbon/human/target) if((user.a_intent == INTENT_HELP) || (user.a_intent == INTENT_DISARM)) user.visible_message( - pick("\The [user] gently sucks on \the [target]'s [pick("nipple", "nipples")].", - "\The [user] gently nibs \the [target]'s [pick("nipple", "nipples")].", - "\The [user] licks \the [target]'s [pick("nipple", "nipples")].")) + pick(span_lewd("\The [user] gently sucks on \the [target]'s [pick("nipple", "nipples")]."), + span_lewd("\The [user] gently nibs \the [target]'s [pick("nipple", "nipples")]."), + span_lewd("\The [user] licks \the [target]'s [pick("nipple", "nipples")]."))) if(target.has_breasts(REQUIRE_EXPOSED)) var/modifier = 1 var/obj/item/organ/genital/breasts/B = target.getorganslot(ORGAN_SLOT_BREASTS) @@ -31,8 +31,8 @@ if(user.a_intent == INTENT_HARM) user.visible_message( - pick("\The [user] bites \the [target]'s [pick("nipple", "nipples")].", - "\The [user] aggressively sucks \the [target]'s [pick("nipple", "nipples")].")) + pick(span_lewd("\The [user] bites \the [target]'s [pick("nipple", "nipples")]."), + span_lewd("\The [user] aggressively sucks \the [target]'s [pick("nipple", "nipples")]."))) if(target.has_breasts(REQUIRE_EXPOSED)) var/modifier = 1 var/obj/item/organ/genital/breasts/B = target.getorganslot(ORGAN_SLOT_BREASTS) @@ -51,9 +51,9 @@ if(user.a_intent == INTENT_GRAB) user.visible_message( - pick("\The [user] sucks \the [target]'s [pick("nipple", "nipples")] intently.", - "\The [user] feasts \the [target]'s [pick("nipple", "nipples")].", - "\The [user] glomps \the [target]'s [pick("nipple", "nipples")].")) + pick(span_lewd("\The [user] sucks \the [target]'s [pick("nipple", "nipples")] intently."), + span_lewd("\The [user] feasts \the [target]'s [pick("nipple", "nipples")]."), + span_lewd("\The [user] glomps \the [target]'s [pick("nipple", "nipples")]."))) if(target.has_breasts(REQUIRE_EXPOSED)) var/modifier = 1 var/obj/item/organ/genital/breasts/B = target.getorganslot(ORGAN_SLOT_BREASTS) @@ -74,66 +74,66 @@ if(target.a_intent == INTENT_HELP) if(!target.has_breasts()) user.visible_message( - pick("\The [target] shivers in arousal.", - "\The [target] moans quietly.", - "\The [target] breathes out a soft moan.", - "\The [target] gasps.", - "\The [target] shudders softly.", - "\The [target] trembles as their chest gets molested.")) + pick(span_lewd("\The [target] shivers in arousal."), + span_lewd("\The [target] moans quietly."), + span_lewd("\The [target] breathes out a soft moan."), + span_lewd("\The [target] gasps."), + span_lewd("\The [target] shudders softly."), + span_lewd("\The [target] trembles as their chest gets molested."))) else user.visible_message( - pick("\The [target] shivers in arousal.", - "\The [target] moans quietly.", - "\The [target] breathes out a soft moan.", - "\The [target] gasps.", - "\The [target] shudders softly.", - "\The [target] trembles as their breasts get molested.", - "\The [target] quivers in arousal as \the [user] delights themselves on their milk.")) + pick(span_lewd("\The [target] shivers in arousal."), + span_lewd("\The [target] moans quietly."), + span_lewd("\The [target] breathes out a soft moan."), + span_lewd("\The [target] gasps."), + span_lewd("\The [target] shudders softly."), + span_lewd("\The [target] trembles as their breasts get molested."), + span_lewd("\The [target] quivers in arousal as \the [user] delights themselves on their milk."))) if(target.get_lust() < 5) target.set_lust(5) if(target.a_intent == INTENT_DISARM) if (target.restrained()) if(!target.has_breasts()) user.visible_message( - pick("\The [target] twists playfully against the restraints.", - "\The [target] squirms away from \the [user]'s mouth.", - "\The [target] slides back from \the [user]'s mouth.", - "\The [target] thrusts their bare chest forward into \the [user]'s mouth.")) + pick(span_lewd("\The [target] twists playfully against the restraints."), + span_lewd("\The [target] squirms away from \the [user]'s mouth."), + span_lewd("\The [target] slides back from \the [user]'s mouth."), + span_lewd("\The [target] thrusts their bare chest forward into \the [user]'s mouth."))) else user.visible_message( - pick("\The [target] twists playfully against the restraints.", - "\The [target] squirms away from \the [user]'s mouth.", - "\The [target] slides back from \the [user]'s mouth.", - "\The [target] thrust their bare breasts forward into \the [user]'s mouth.")) + pick(span_lewd("\The [target] twists playfully against the restraints."), + span_lewd("\The [target] squirms away from \the [user]'s mouth."), + span_lewd("\The [target] slides back from \the [user]'s mouth."), + span_lewd("\The [target] thrust their bare breasts forward into \the [user]'s mouth."))) else if(!target.has_breasts()) user.visible_message( - pick("\The [target] playfully shoos away \the [user]'s head.", - "\The [target] squirms away from \the [user]'s mouth.", - "\The [target] holds \the [user]'s head against their chest.", - "\The [target] teasingly caresses \the [user]'s neck.")) + pick(span_lewd("\The [target] playfully shoos away \the [user]'s head."), + span_lewd("\The [target] squirms away from \the [user]'s mouth."), + span_lewd("\The [target] holds \the [user]'s head against their chest."), + span_lewd("\The [target] teasingly caresses \the [user]'s neck."))) else user.visible_message( - pick("\The [target] playfully shoos away \the [user]'s head.", - "\The [target] squirms away from \the [user]'s mouth.", - "\The [target] holds \the [user]'s head against their breast.", - "\The [target] teasingly caresses \the [user]'s neck.", - "\The [target] rubs their breasts against \the [user]'s head.")) + pick(span_lewd("\The [target] playfully shoos away \the [user]'s head."), + span_lewd("\The [target] squirms away from \the [user]'s mouth."), + span_lewd("\The [target] holds \the [user]'s head against their breast."), + span_lewd("\The [target] teasingly caresses \the [user]'s neck."), + span_lewd("\The [target] rubs their breasts against \the [user]'s head."))) if(target.get_lust() < 10) target.add_lust(1) if(target.a_intent == INTENT_GRAB) user.visible_message( - pick("\The [target] grips \the [user]'s head tight.", - "\The [target] digs nails into \the [user]'s scalp.", - "\The [target] grabs and shoves \the [user]'s head away.")) + pick(span_lewd("\The [target] grips \the [user]'s head tight."), + span_lewd("\The [target] digs nails into \the [user]'s scalp."), + span_lewd("\The [target] grabs and shoves \the [user]'s head away."))) if(target.a_intent == INTENT_HARM) user.adjustBruteLoss(1) user.visible_message( - pick("\The [target] slaps \the [user] away.", - "\The [target] scratches [user]'s face.", - "\The [target] fiercely struggles against [user].", - "\The [target] claws [user]'s face, drawing blood.", - "\The [target] elbows [user]'s mouth away.")) + pick(span_lewd("\The [target] slaps \the [user] away."), + span_lewd("\The [target] scratches [user]'s face."), + span_lewd("\The [target] fiercely struggles against [user]."), + span_lewd("\The [target] claws [user]'s face, drawing blood."), + span_lewd("\The [target] elbows [user]'s mouth away."))) target.dir = get_dir(target, user) user.dir = get_dir(user, target) playlewdinteractionsound(get_turf(user), pick('modular_sand/sound/interactions/oral1.ogg', diff --git a/modular_sand/code/datums/interactions/interaction_datums/lewd/nuts.dm b/modular_sand/code/datums/interactions/interaction_datums/lewd/nuts.dm index 912b227915..3210d01ed3 100644 --- a/modular_sand/code/datums/interactions/interaction_datums/lewd/nuts.dm +++ b/modular_sand/code/datums/interactions/interaction_datums/lewd/nuts.dm @@ -29,7 +29,7 @@ 'modular_sand/sound/interactions/nuts2.ogg', 'modular_sand/sound/interactions/nuts3.ogg', 'modular_sand/sound/interactions/nuts4.ogg'), 70, 1, -1)*/ //These files don't even exist but nobody noticed because double-quotes were used instead of single. - user.visible_message("\The [user] [message]", ignored_mobs = user.get_unconsenting()) + user.visible_message(span_lewd("\The [user] [message]"), ignored_mobs = user.get_unconsenting()) user.handle_post_sex(lust_increase, CUM_TARGET_MOUTH, partner) /datum/interaction/lewd/nut_smack diff --git a/modular_sand/code/datums/interactions/interaction_datums/lewd/oral.dm b/modular_sand/code/datums/interactions/interaction_datums/lewd/oral.dm index ece5e1c49b..59ab08f85d 100644 --- a/modular_sand/code/datums/interactions/interaction_datums/lewd/oral.dm +++ b/modular_sand/code/datums/interactions/interaction_datums/lewd/oral.dm @@ -123,6 +123,6 @@ 'modular_sand/sound/interactions/bj9.ogg', 'modular_sand/sound/interactions/bj10.ogg', 'modular_sand/sound/interactions/bj11.ogg'), 50, 1, -1) - user.visible_message("\The [user] [message]", ignored_mobs = user.get_unconsenting()) + user.visible_message(span_lewd("\The [user] [message]"), ignored_mobs = user.get_unconsenting()) if(fucktarget != "penis" || partner.can_penetrating_genital_cum()) partner.handle_post_sex(lust_increase, CUM_TARGET_MOUTH, user) diff --git a/modular_sand/code/datums/interactions/interaction_datums/lewd/self/breasts.dm b/modular_sand/code/datums/interactions/interaction_datums/lewd/self/breasts.dm index f4d4599d3d..5c91e50a3c 100644 --- a/modular_sand/code/datums/interactions/interaction_datums/lewd/self/breasts.dm +++ b/modular_sand/code/datums/interactions/interaction_datums/lewd/self/breasts.dm @@ -32,7 +32,7 @@ "gasps.", "shudders softly.", "trembles as [t_His] hands run across bare skin.")]") - user.visible_message(message = "\The [user] [message]", ignored_mobs = user.get_unconsenting()) + user.visible_message(message = span_lewd("\The [user] [message]"), ignored_mobs = user.get_unconsenting()) playlewdinteractionsound(get_turf(user), 'modular_sand/sound/interactions/squelch1.ogg', 50, 1, -1) user.handle_post_sex(NORMAL_LUST, CUM_TARGET_HAND, user) @@ -68,7 +68,7 @@ "fills [u_His] own mouth with a big gulp of [u_His] warm [lowertext(milktext)]" ) - message = "\The [user] [pick(lines)]" + message = span_lewd("\The [user] [pick(lines)]") user.visible_message(message, ignored_mobs = user.get_unconsenting()) playlewdinteractionsound(get_turf(user), pick('modular_sand/sound/interactions/oral1.ogg', 'modular_sand/sound/interactions/oral2.ogg'), 70, 1, -1) diff --git a/modular_sand/code/datums/interactions/interaction_datums/lewd/self/jack.dm b/modular_sand/code/datums/interactions/interaction_datums/lewd/self/jack.dm index f07e3a7c72..5213c5fe4c 100644 --- a/modular_sand/code/datums/interactions/interaction_datums/lewd/self/jack.dm +++ b/modular_sand/code/datums/interactions/interaction_datums/lewd/self/jack.dm @@ -28,6 +28,6 @@ playlewdinteractionsound(get_turf(user), pick('modular_sand/sound/interactions/bang1.ogg', 'modular_sand/sound/interactions/bang2.ogg', 'modular_sand/sound/interactions/bang3.ogg'), 70, 1, -1) - user.visible_message(message = "\The [user] [message]", ignored_mobs = user.get_unconsenting()) + user.visible_message(message = span_lewd("\The [user] [message]"), ignored_mobs = user.get_unconsenting()) if(user.can_penetrating_genital_cum()) user.handle_post_sex(NORMAL_LUST, CUM_TARGET_HAND, user) diff --git a/modular_sand/code/datums/interactions/interaction_interface.dm b/modular_sand/code/datums/interactions/interaction_interface.dm index 9cf8fb2e1f..2d7f794132 100644 --- a/modular_sand/code/datums/interactions/interaction_interface.dm +++ b/modular_sand/code/datums/interactions/interaction_interface.dm @@ -12,6 +12,28 @@ usr.mind.interaction_holder.target = src usr.mind.interaction_holder.ui_interact(usr) +/* +/// Allows "cyborg" players to change gender at will +/mob/living/silicon/robot/verb/toggle_gender() + set name = "Set Gender" + set desc = "Allows you to set your gender." + + if(stat != CONSCIOUS) + to_chat(usr, span_warning("You cannot toggle your gender while unconcious!")) + return + + var/choice = tgui_alert(usr, "Select Gender.", "Gender", list("Both", "Male", "Female")) + switch(choice) + if("Both") + has_penis = TRUE + has_vagina = TRUE + if("Male") + has_penis = TRUE + has_vagina = FALSE + if("Female") + has_penis = FALSE + has_vagina = TRUE +*/ #define INTERACTION_NORMAL 0 #define INTERACTION_LEWD 1 @@ -112,6 +134,7 @@ && !(HAS_TRAIT(get_genitals, TRAIT_PERMABONER) \ || HAS_TRAIT(get_genitals, TRAIT_NEVERBONER))) genital_entry["arousal_state"] = genital.aroused_state + genital_entry["always_accessible"] = genital.always_accessible genitals += list(genital_entry) if(iscarbon(self) && !self.getorganslot(ORGAN_SLOT_ANUS)) var/simulated_ass = list() @@ -127,6 +150,7 @@ visibility = "Always hidden" simulated_ass["visibility"] = visibility simulated_ass["possible_choices"] = GLOB.genitals_visibility_toggles - GEN_VISIBLE_NO_CLOTHES + simulated_ass["always_accessible"] = self.anus_always_accessible genitals += list(simulated_ass) .["genitals"] = genitals @@ -233,16 +257,25 @@ var/original_state = genital.aroused_state genital.set_aroused_state(params["set_arousal"])// i'm not making it just `!aroused_state` because if(original_state != genital.aroused_state) // someone just might port skyrat's new genitals - to_chat(self, "[genital.aroused_state ? genital.arousal_verb : genital.unarousal_verb].") + to_chat(self, span_userlove("[genital.aroused_state ? genital.arousal_verb : genital.unarousal_verb].")) . = TRUE else - to_chat(self, "You can't make that genital [genital.aroused_state ? "unaroused" : "aroused"]!") + to_chat(self, span_userlove("You can't make that genital [genital.aroused_state ? "unaroused" : "aroused"]!")) . = FALSE genital.update_appearance() if(ishuman(self)) var/mob/living/carbon/human/human = self human.update_genitals() return + if("set_accessibility" in params) + if(!self.getorganslot(ORGAN_SLOT_ANUS) && params["genital"] == "anus") + self.toggle_anus_always_accessible() + return TRUE + var/obj/item/organ/genital/genital = locate(params["genital"], self.internal_organs) + if(!genital) + return FALSE + genital.toggle_accessibility() + return TRUE else return FALSE if("genital_interaction") diff --git a/modular_sand/code/datums/interactions/lewd_definitions.dm b/modular_sand/code/datums/interactions/lewd_definitions.dm index e674722e45..643dfeafb8 100644 --- a/modular_sand/code/datums/interactions/lewd_definitions.dm +++ b/modular_sand/code/datums/interactions/lewd_definitions.dm @@ -21,8 +21,9 @@ var/has_balls = FALSE var/has_vagina = FALSE var/has_anus = TRUE - var/has_breasts = FALSE var/has_butt = FALSE + var/anus_always_accessible = FALSE + var/has_breasts = FALSE var/anus_exposed = FALSE var/last_partner var/last_orifice @@ -85,6 +86,9 @@ lust = num lastlusttime = world.time +/mob/living/proc/toggle_anus_always_accessible() + anus_always_accessible = !anus_always_accessible + /mob/living/proc/has_genital(slot, visibility = REQUIRE_ANY) var/mob/living/carbon/C = src if(istype(C)) @@ -94,7 +98,7 @@ if(REQUIRE_ANY) return TRUE if(REQUIRE_EXPOSED) - return genital.is_exposed() + return genital.is_exposed() || genital.always_accessible if(REQUIRE_UNEXPOSED) return !genital.is_exposed() else @@ -127,9 +131,9 @@ for(var/obj/item/clothing/cloth in get_equipped_items()) if(istype(cloth, /obj/item/clothing/underwear/briefs/strapon)) return cloth - + return null - + /mob/living/proc/can_penetrating_genital_cum() return has_penis() @@ -161,6 +165,8 @@ if(REQUIRE_ANY) return TRUE if(REQUIRE_EXPOSED) + if (has_anus && anus_always_accessible) + return TRUE switch(anus_exposed) if(-1) return FALSE @@ -340,29 +346,11 @@ return TRUE return FALSE -/mob/living/proc/has_butt(var/nintendo = REQUIRE_ANY) +/mob/living/proc/has_butt(visibility = REQUIRE_ANY) var/mob/living/carbon/C = src if(has_butt && !istype(C)) return TRUE - if(istype(C)) - var/obj/item/organ/genital/peepee = C.getorganslot(ORGAN_SLOT_BUTT) - if(peepee) - switch(nintendo) - if(REQUIRE_ANY) - return TRUE - if(REQUIRE_EXPOSED) - if(peepee.is_exposed()) - return TRUE - else - return FALSE - if(REQUIRE_UNEXPOSED) - if(!peepee.is_exposed()) - return TRUE - else - return FALSE - else - return TRUE - return FALSE + return has_genital(ORGAN_SLOT_BUTT, visibility) ///Are we wearing something that covers our chest? /mob/living/proc/is_topless() @@ -413,9 +401,9 @@ if(moan == lastmoan) moan-- if(!is_muzzled()) - visible_message(message = "\The [src] [pick("moans", "moans in pleasure")].", ignored_mobs = get_unconsenting()) + visible_message(message = span_lewd("\The [src] [pick("moans", "moans in pleasure")]."), ignored_mobs = get_unconsenting()) if(is_muzzled())//immursion - audible_message("[src] [pick("mimes a pleasured moan","moans in silence")].") + audible_message(span_lewd("[src] [pick("mimes a pleasured moan","moans in silence")].")) lastmoan = moan /mob/living/proc/cum(mob/living/partner, target_orifice) @@ -776,7 +764,7 @@ playlewdinteractionsound(loc, pick('modular_sand/sound/interactions/final_f1.ogg', 'modular_sand/sound/interactions/final_f2.ogg', 'modular_sand/sound/interactions/final_f3.ogg'), 70, 1, 0) - visible_message(message = "\The [src] [message]", ignored_mobs = get_unconsenting()) + visible_message(message = span_userlove("\The [src] [message]"), ignored_mobs = get_unconsenting()) multiorgasms += 1 COOLDOWN_START(src, refractory_period, (rand(300, 900) - get_sexual_potency()))//sex cooldown diff --git a/modular_sand/code/datums/interactions/lewd_interactions.dm b/modular_sand/code/datums/interactions/lewd_interactions.dm index 43199355d2..2171ec0b7f 100644 --- a/modular_sand/code/datums/interactions/lewd_interactions.dm +++ b/modular_sand/code/datums/interactions/lewd_interactions.dm @@ -74,17 +74,17 @@ return FALSE if(user_not_tired && !COOLDOWN_FINISHED(user, refractory_period)) if(!silent) //bye spam - to_chat(user, "You're still exhausted from the last time. You need to wait [DisplayTimeText(COOLDOWN_TIMELEFT(user, refractory_period), 1)] until you can do that!") + to_chat(user, span_warning("You're still exhausted from the last time. You need to wait [DisplayTimeText(COOLDOWN_TIMELEFT(user, refractory_period), 1)] until you can do that!")) return FALSE if(require_user_bottomless && !user.is_bottomless()) if(!silent) - to_chat(user, "Your pants are in the way.") + to_chat(user, span_warning("Your pants are in the way.")) return FALSE if(require_user_topless && !user.is_topless()) if(!silent) - to_chat(user, "Your top is in the way.") + to_chat(user, span_warning("Your top is in the way.")) return FALSE if(require_user_penis) @@ -92,17 +92,17 @@ if(REQUIRE_EXPOSED) if(!user.has_penis(REQUIRE_EXPOSED) && !user.has_strapon(REQUIRE_EXPOSED)) if(!silent) - to_chat(user, "Your penis need to be exposed.") + to_chat(user, span_warning("Your penis need to be exposed.")) return FALSE if(REQUIRE_ANY) if(!user.has_penis(REQUIRE_ANY) && !user.has_strapon(REQUIRE_ANY)) if(!silent) - to_chat(user, "You don't have a penis.") + to_chat(user, span_warning("You don't have a penis.")) return FALSE if(REQUIRE_UNEXPOSED) if(!user.has_penis(REQUIRE_UNEXPOSED) && !user.has_strapon(REQUIRE_UNEXPOSED)) if(!silent) - to_chat(user, "Your penis need to be unexposed.") + to_chat(user, span_warning("Your penis need to be unexposed.")) return FALSE if(require_user_balls) @@ -110,17 +110,17 @@ if(REQUIRE_EXPOSED) if(!user.has_balls(REQUIRE_EXPOSED)) if(!silent) - to_chat(user, "Your balls need to be exposed.") + to_chat(user, span_warning("Your balls need to be exposed.")) return FALSE if(REQUIRE_ANY) if(!user.has_balls(REQUIRE_ANY)) if(!silent) - to_chat(user, "You don't have balls.") + to_chat(user, span_warning("You don't have balls.")) return FALSE if(REQUIRE_UNEXPOSED) if(!user.has_balls(REQUIRE_UNEXPOSED)) if(!silent) - to_chat(user, "Your balls need to be unexposed.") + to_chat(user, span_warning("Your balls need to be unexposed.")) return FALSE if(require_user_anus) @@ -128,17 +128,17 @@ if(REQUIRE_EXPOSED) if(!user.has_anus(REQUIRE_EXPOSED)) if(!silent) - to_chat(user, "Your anus need to be exposed.") + to_chat(user, span_warning("Your anus need to be exposed.")) return FALSE if(REQUIRE_ANY) if(!user.has_anus(REQUIRE_ANY)) if(!silent) - to_chat(user, "You don't have an anus.") + to_chat(user, span_warning("You don't have an anus.")) return FALSE if(REQUIRE_UNEXPOSED) if(!user.has_anus(REQUIRE_UNEXPOSED)) if(!silent) - to_chat(user, "Your anus need to be unexposed.") + to_chat(user, span_warning("Your anus need to be unexposed.")) return FALSE if(require_user_vagina) @@ -146,17 +146,17 @@ if(REQUIRE_EXPOSED) if(!user.has_vagina(REQUIRE_EXPOSED)) if(!silent) - to_chat(user, "Your vagina need to be exposed.") + to_chat(user, span_warning("Your vagina need to be exposed.")) return FALSE if(REQUIRE_ANY) if(!user.has_vagina(REQUIRE_ANY)) if(!silent) - to_chat(user, "You don't have a vagina.") + to_chat(user, span_warning("You don't have a vagina.")) return FALSE if(REQUIRE_UNEXPOSED) if(!user.has_vagina(REQUIRE_UNEXPOSED)) if(!silent) - to_chat(user, "Your vagina need to be unexposed.") + to_chat(user, span_warning("Your vagina need to be unexposed.")) return FALSE if(require_user_breasts) @@ -164,17 +164,17 @@ if(REQUIRE_EXPOSED) if(!user.has_breasts(REQUIRE_EXPOSED)) if(!silent) - to_chat(user, "Your breasts need to be exposed.") + to_chat(user, span_warning("Your breasts need to be exposed.")) return FALSE if(REQUIRE_ANY) if(!user.has_breasts(REQUIRE_ANY)) if(!silent) - to_chat(user, "You don't have breasts.") + to_chat(user, span_warning("You don't have breasts.")) return FALSE if(REQUIRE_UNEXPOSED) if(!user.has_breasts(REQUIRE_UNEXPOSED)) if(!silent) - to_chat(user, "Your breasts need to be unexposed.") + to_chat(user, span_warning("Your breasts need to be unexposed.")) return FALSE if(require_user_feet) @@ -182,22 +182,22 @@ if(REQUIRE_EXPOSED) if(!user.has_feet(REQUIRE_EXPOSED)) if(!silent) - to_chat(user, "Your feet need to be exposed.") + to_chat(user, span_warning("Your feet need to be exposed.")) return FALSE if(REQUIRE_ANY) if(!user.has_feet(REQUIRE_ANY)) if(!silent) - to_chat(user, "You don't have enough feet.") + to_chat(user, span_warning("You don't have enough feet.")) return FALSE if(REQUIRE_UNEXPOSED) if(!user.has_feet(REQUIRE_UNEXPOSED)) if(!silent) - to_chat(user, "Your feet need to be unexposed.") + to_chat(user, span_warning("Your feet need to be unexposed.")) return FALSE if(require_user_num_feet && (user.get_num_feet() < require_user_num_feet)) if(!silent) - to_chat(user, "You don't have enough feet.") + to_chat(user, span_warning("You don't have enough feet.")) return FALSE if(require_user_eyes) @@ -205,17 +205,17 @@ if(REQUIRE_EXPOSED) if(!user.has_eyes(REQUIRE_EXPOSED)) if(!silent) - to_chat(user, "Your eyes need to be exposed.") + to_chat(user, span_warning("Your eyes need to be exposed.")) return FALSE if(REQUIRE_ANY) if(!user.has_eyes(REQUIRE_ANY)) if(!silent) - to_chat(user, "You don't have eyes.") + to_chat(user, span_warning("You don't have eyes.")) return FALSE if(REQUIRE_UNEXPOSED) if(!user.has_eyes(REQUIRE_UNEXPOSED)) if(!silent) - to_chat(user, "Your eyes need to be unexposed.") + to_chat(user, span_warning("Your eyes need to be unexposed.")) return FALSE if(require_user_eyesockets) @@ -223,17 +223,17 @@ if(REQUIRE_EXPOSED) if(!user.has_eyesockets(REQUIRE_EXPOSED)) if(!silent) - to_chat(user, "Your eyesockets need to be exposed.") + to_chat(user, span_warning("Your eyesockets need to be exposed.")) return FALSE if(REQUIRE_ANY) if(!user.has_eyesockets(REQUIRE_ANY)) if(!silent) - to_chat(user, "You still have eyes.") + to_chat(user, span_warning("You still have eyes.")) return FALSE if(REQUIRE_UNEXPOSED) if(!user.has_eyesockets(REQUIRE_UNEXPOSED)) if(!silent) - to_chat(user, "Your eyesockets need to be unexposed.") + to_chat(user, span_warning("Your eyesockets need to be unexposed.")) return FALSE if(require_user_ears) @@ -241,17 +241,17 @@ if(REQUIRE_EXPOSED) if(!user.has_ears(REQUIRE_EXPOSED)) if(!silent) - to_chat(user, "Your ears need to be exposed.") + to_chat(user, span_warning("Your ears need to be exposed.")) return FALSE if(REQUIRE_ANY) if(!user.has_ears(REQUIRE_ANY)) if(!silent) - to_chat(user, "You don't have ears.") + to_chat(user, span_warning("You don't have ears.")) return FALSE if(REQUIRE_UNEXPOSED) if(!user.has_ears(REQUIRE_UNEXPOSED)) if(!silent) - to_chat(user, "Your ears need to be unexposed.") + to_chat(user, span_warning("Your ears need to be unexposed.")) return FALSE if(require_user_earsockets) @@ -259,17 +259,17 @@ if(REQUIRE_EXPOSED) if(!user.has_earsockets(REQUIRE_EXPOSED)) if(!silent) - to_chat(user, "Your earsockets need to be exposed.") + to_chat(user, span_warning("Your earsockets need to be exposed.")) return FALSE if(REQUIRE_ANY) if(!user.has_earsockets(REQUIRE_ANY)) if(!silent) - to_chat(user, "You still have eyes.") + to_chat(user, span_warning("You still have eyes.")) return FALSE if(REQUIRE_UNEXPOSED) if(!user.has_earsockets(REQUIRE_UNEXPOSED)) if(!silent) - to_chat(user, "Your earsockets need to be unexposed.") + to_chat(user, span_warning("Your earsockets need to be unexposed.")) return FALSE if(extreme) @@ -277,7 +277,7 @@ if(cli) if(cli.prefs.extremepref == "No") if(!silent) - to_chat(user, "That's way too much for you.") + to_chat(user, span_warning("That's way too much for you.")) return FALSE if(require_ooc_consent) @@ -293,17 +293,17 @@ return FALSE if(target_not_tired && !COOLDOWN_FINISHED(target, refractory_period)) if(!silent) //same with this - to_chat(user, "They're still exhausted from the last time. They need to wait [DisplayTimeText(COOLDOWN_TIMELEFT(target, refractory_period), 1)] until you can do that!") + to_chat(user, span_warning("They're still exhausted from the last time. They need to wait [DisplayTimeText(COOLDOWN_TIMELEFT(target, refractory_period), 1)] until you can do that!")) return FALSE if(require_target_bottomless && !target.is_bottomless()) if(!silent) - to_chat(user, "Their pants are in the way.") + to_chat(user, span_warning("Their pants are in the way.")) return FALSE if(require_target_topless && !target.is_topless()) if(!silent) - to_chat(user, "Their clothes are in the way.") + to_chat(user, span_warning("Their clothes are in the way.")) return FALSE if(require_target_penis) @@ -311,17 +311,17 @@ if(REQUIRE_EXPOSED) if(!target.has_penis(REQUIRE_EXPOSED) && !target.has_strapon(REQUIRE_EXPOSED)) if(!silent) - to_chat(user, "Their penis needs to be exposed.") + to_chat(user, span_warning("Their penis needs to be exposed.")) return FALSE if(REQUIRE_ANY) if(!target.has_penis(REQUIRE_ANY) && !target.has_strapon(REQUIRE_EXPOSED)) if(!silent) - to_chat(user, "They don't have a penis.") + to_chat(user, span_warning("They don't have a penis.")) return FALSE if(REQUIRE_UNEXPOSED) if(!target.has_penis(REQUIRE_UNEXPOSED) && !target.has_strapon(REQUIRE_EXPOSED)) if(!silent) - to_chat(user, "Their penis needs to be unexposed.") + to_chat(user, span_warning("Their penis needs to be unexposed.")) return FALSE if(require_target_balls) @@ -329,17 +329,17 @@ if(REQUIRE_EXPOSED) if(!target.has_balls(REQUIRE_EXPOSED)) if(!silent) - to_chat(user, "Their balls need to be exposed.") + to_chat(user, span_warning("Their balls need to be exposed.")) return FALSE if(REQUIRE_ANY) if(!target.has_balls(REQUIRE_ANY)) if(!silent) - to_chat(user, "They don't have balls.") + to_chat(user, span_warning("They don't have balls.")) return FALSE if(REQUIRE_UNEXPOSED) if(!target.has_balls(REQUIRE_UNEXPOSED)) if(!silent) - to_chat(user, "Their balls need to be unexposed.") + to_chat(user, span_warning("Their balls need to be unexposed.")) return FALSE if(require_target_anus) @@ -347,17 +347,17 @@ if(REQUIRE_EXPOSED) if(!target.has_anus(REQUIRE_EXPOSED)) if(!silent) - to_chat(user, "Their anus needs to be exposed.") + to_chat(user, span_warning("Their anus needs to be exposed.")) return FALSE if(REQUIRE_ANY) if(!target.has_anus(REQUIRE_ANY)) if(!silent) - to_chat(user, "They don't have an anus.") + to_chat(user, span_warning("They don't have an anus.")) return FALSE if(REQUIRE_UNEXPOSED) if(!target.has_anus(REQUIRE_UNEXPOSED)) if(!silent) - to_chat(user, "Their anus needs to be unexposed.") + to_chat(user, span_warning("Their anus needs to be unexposed.")) return FALSE if(require_target_vagina) @@ -365,17 +365,17 @@ if(REQUIRE_EXPOSED) if(!target.has_vagina(REQUIRE_EXPOSED)) if(!silent) - to_chat(user, "Their vagina needs to be exposed.") + to_chat(user, span_warning("Their vagina needs to be exposed.")) return FALSE if(REQUIRE_ANY) if(!target.has_vagina(REQUIRE_ANY)) if(!silent) - to_chat(user, "They don't have a vagina.") + to_chat(user, span_warning("They don't have a vagina.")) return FALSE if(REQUIRE_UNEXPOSED) if(!target.has_vagina(REQUIRE_UNEXPOSED)) if(!silent) - to_chat(user, "Their vagina needs to be unexposed.") + to_chat(user, span_warning("Their vagina needs to be unexposed.")) return FALSE if(require_target_breasts) @@ -383,17 +383,17 @@ if(REQUIRE_EXPOSED) if(!target.has_breasts(REQUIRE_EXPOSED)) if(!silent) - to_chat(user, "Their breasts need to be exposed.") + to_chat(user, span_warning("Their breasts need to be exposed.")) return FALSE if(REQUIRE_ANY) if(!target.has_breasts(REQUIRE_ANY)) if(!silent) - to_chat(user, "They don't have breasts.") + to_chat(user, span_warning("They don't have breasts.")) return FALSE if(REQUIRE_UNEXPOSED) if(!target.has_breasts(REQUIRE_UNEXPOSED)) if(!silent) - to_chat(user, "Their breasts need to be unexposed.") + to_chat(user, span_warning("Their breasts need to be unexposed.")) return FALSE if(require_target_feet) @@ -401,22 +401,22 @@ if(REQUIRE_EXPOSED) if(!target.has_feet(REQUIRE_EXPOSED)) if(!silent) - to_chat(user, "Their feet need to be exposed.") + to_chat(user, span_warning("Their feet need to be exposed.")) return FALSE if(REQUIRE_ANY) if(!target.has_feet(REQUIRE_ANY)) if(!silent) - to_chat(user, "They don't have enough feet.") + to_chat(user, span_warning("They don't have enough feet.")) return FALSE if(REQUIRE_UNEXPOSED) if(!target.has_feet(REQUIRE_UNEXPOSED)) if(!silent) - to_chat(user, "Their feet need to be unexposed.") + to_chat(user, span_warning("Their feet need to be unexposed.")) return FALSE if(require_target_num_feet && (target.get_num_feet() < require_target_num_feet)) if(!silent) - to_chat(user, "They don't have enough feet.") + to_chat(user, span_warning("They don't have enough feet.")) return FALSE if(require_target_eyes) @@ -424,17 +424,17 @@ if(REQUIRE_EXPOSED) if(!target.has_eyes(REQUIRE_EXPOSED)) if(!silent) - to_chat(user, "Their eyes need to be exposed.") + to_chat(user, span_warning("Their eyes need to be exposed.")) return FALSE if(REQUIRE_ANY) if(!target.has_eyes(REQUIRE_ANY)) if(!silent) - to_chat(user, "They don't have eyes.") + to_chat(user, span_warning("They don't have eyes.")) return FALSE if(REQUIRE_UNEXPOSED) if(!target.has_eyes(REQUIRE_UNEXPOSED)) if(!silent) - to_chat(user, "Their eyes need to be unexposed.") + to_chat(user, span_warning("Their eyes need to be unexposed.")) return FALSE if(require_target_eyesockets) @@ -442,17 +442,17 @@ if(REQUIRE_EXPOSED) if(!target.has_eyesockets(REQUIRE_EXPOSED)) if(!silent) - to_chat(user, "Their eyesockets need to be exposed.") + to_chat(user, span_warning("Their eyesockets need to be exposed.")) return FALSE if(REQUIRE_ANY) if(!target.has_eyesockets(REQUIRE_ANY)) if(!silent) - to_chat(user, "They still have eyes.") + to_chat(user, span_warning("They still have eyes.")) return FALSE if(REQUIRE_UNEXPOSED) if(!target.has_eyesockets(REQUIRE_UNEXPOSED)) if(!silent) - to_chat(user, "Their eyesockets need to be unexposed.") + to_chat(user, span_warning("Their eyesockets need to be unexposed.")) return FALSE if(require_target_ears) @@ -460,17 +460,17 @@ if(REQUIRE_EXPOSED) if(!target.has_ears(REQUIRE_EXPOSED)) if(!silent) - to_chat(user, "Their ears need to be exposed.") + to_chat(user, span_warning("Their ears need to be exposed.")) return FALSE if(REQUIRE_ANY) if(!target.has_ears(REQUIRE_ANY)) if(!silent) - to_chat(user, "They don't have ears.") + to_chat(user, span_warning("They don't have ears.")) return FALSE if(REQUIRE_UNEXPOSED) if(!target.has_ears(REQUIRE_UNEXPOSED)) if(!silent) - to_chat(user, "Their ears need to be unexposed.") + to_chat(user, span_warning("Their ears need to be unexposed.")) return FALSE if(require_target_earsockets) @@ -478,17 +478,17 @@ if(REQUIRE_EXPOSED) if(!target.has_earsockets(REQUIRE_EXPOSED)) if(!silent) - to_chat(user, "Their earsockets need to be exposed.") + to_chat(user, span_warning("Their earsockets need to be exposed.")) return FALSE if(REQUIRE_ANY) if(!target.has_earsockets(REQUIRE_ANY)) if(!silent) - to_chat(user, "They still have eyes.") + to_chat(user, span_warning("They still have eyes.")) return FALSE if(REQUIRE_UNEXPOSED) if(!target.has_earsockets(REQUIRE_UNEXPOSED)) if(!silent) - to_chat(user, "Their earsockets need to be unexposed.") + to_chat(user, span_warning("Their earsockets need to be unexposed.")) return FALSE if(extreme) @@ -496,7 +496,7 @@ if(cli) if(target.client.prefs.extremepref == "No") if(!silent) - to_chat(user, "For some reason, you don't want to do this to [target].") + to_chat(user, span_warning("For some reason, you don't want to do this to [target].")) return FALSE if(require_ooc_consent) diff --git a/modular_sand/code/datums/interactions/lewd_objects.dm b/modular_sand/code/datums/interactions/lewd_objects.dm index e90b76abc7..c2bb19045a 100644 --- a/modular_sand/code/datums/interactions/lewd_objects.dm +++ b/modular_sand/code/datums/interactions/lewd_objects.dm @@ -22,7 +22,7 @@ if(M.has_mouth() && !M.is_mouth_covered()) message = (user == M) ? pick("fucks [possessive_verb] own mouth with \the [src]", "shoves \the [src] into [possessive_verb] mouth", "jams \the [src] into [possessive_verb] mouth") : pick("fucks [M]'s mouth with \the [src]", "jams \the [src] into [M]'s mouth") if(message) - user.visible_message("[user] [message].") + user.visible_message(span_lewd("[user] [message].")) M.handle_post_sex(lust_amt, null, user) playsound(loc, pick('modular_sand/sound/interactions/bang4.ogg', 'modular_sand/sound/interactions/bang5.ogg', @@ -32,7 +32,7 @@ /obj/item/dildo/attack_self(mob/living/carbon/human/user as mob) hole = hole == CUM_TARGET_VAGINA ? CUM_TARGET_ANUS : CUM_TARGET_VAGINA - to_chat(user, "Now targetting \the [hole].") + to_chat(user, span_notice("Now targetting \the [hole].")) //begin redds code /obj/item/dildo/cyborg diff --git a/modular_sand/code/datums/traits/negative.dm b/modular_sand/code/datums/traits/negative.dm index 4b4f158ef8..3a50591875 100644 --- a/modular_sand/code/datums/traits/negative.dm +++ b/modular_sand/code/datums/traits/negative.dm @@ -3,8 +3,8 @@ desc = "For one reason or another, you either can't or haven't learned the common tongue." value = 0 mob_trait = TRAIT_SHELTERED - gain_text = "The words of others begin to blur together..." - lose_text = "You start putting together what people are saying!" + gain_text = span_danger("The words of others begin to blur together...") + lose_text = span_notice("You start putting together what people are saying!") medical_record_text = "Patient has shown an inability to use common speaking languages." /datum/quirk/sheltered/on_spawn() diff --git a/modular_sand/code/datums/traits/neutral.dm b/modular_sand/code/datums/traits/neutral.dm index 33cc31da0d..89486dc153 100644 --- a/modular_sand/code/datums/traits/neutral.dm +++ b/modular_sand/code/datums/traits/neutral.dm @@ -18,7 +18,7 @@ value = 0 human_only = TRUE mob_trait = TRAIT_INFERTILE - gain_text = "Your womb starts feeling dry and empty, all the life in it begins to fade away..." - lose_text = "You feel the warm blow of life flooding your womb, full of newfound, vibrant fertility!" + gain_text = span_notice("Your womb starts feeling dry and empty, all the life in it begins to fade away...") + lose_text = span_love("You feel the warm blow of life flooding your womb, full of newfound, vibrant fertility!") medical_record_text = "Patient doesn't seem able to ovulate properly..." */ diff --git a/modular_sand/code/game/machinery/autodoc.dm b/modular_sand/code/game/machinery/autodoc.dm index 5d8fa2429e..fcd00555c4 100644 --- a/modular_sand/code/game/machinery/autodoc.dm +++ b/modular_sand/code/game/machinery/autodoc.dm @@ -26,11 +26,11 @@ /obj/machinery/autodoc/examine(mob/user) . = ..() if((obj_flags & EMAGGED) && panel_open) - . += "[src]'s surgery protocols have been corrupted!" + . += span_warning("[src]'s surgery protocols have been corrupted!") if(processing) - . += "[src] is currently inserting [storedorgan] into [occupant]." + . += span_notice("[src] is currently inserting [storedorgan] into [occupant].") else if(storedorgan) - . += "[src] is prepared to insert [storedorgan]." + . += span_notice("[src] is prepared to insert [storedorgan].") /obj/machinery/autodoc/close_machine(mob/user) ..() @@ -40,16 +40,16 @@ occupant.forceMove(drop_location()) occupant = null return - to_chat(occupant, "You enter [src].") + to_chat(occupant, span_notice("You enter [src].")) dosurgery() /obj/machinery/autodoc/proc/dosurgery() if(!storedorgan && !(obj_flags & EMAGGED)) - to_chat(occupant, "[src] currently has no implant stored.") + to_chat(occupant, span_notice("[src] currently has no implant stored.")) return - occupant.visible_message("[occupant] presses a button on [src], and you hear a mechanical noise.", "You feel a sharp sting as [src] starts inserting the organ into your body.") + occupant.visible_message(span_notice("[occupant] presses a button on [src], and you hear a mechanical noise."), span_notice("You feel a sharp sting as [src] starts inserting the organ into your body.")) playsound(get_turf(occupant), 'sound/weapons/circsawhit.ogg', 50, 1) processing = TRUE update_icon() @@ -66,7 +66,7 @@ if(!processing) return - occupant.visible_message("[src] dismembers [occupant]!", "[src] saws up your body!") + occupant.visible_message(span_warning("[src] dismembers [occupant]!"), span_warning("[src] saws up your body!")) else sleep(surgerytime) @@ -78,14 +78,14 @@ currentorgan.forceMove(get_turf(src)) storedorgan.Insert(occupant)//insert stored organ into the user storedorgan = null - occupant.visible_message("[src] completes the surgery procedure.", "[src] inserts the organ into your body.") + occupant.visible_message(span_notice("[src] completes the surgery procedure."), span_notice("[src] inserts the organ into your body.")) playsound(src, 'sound/machines/microwave/microwave-end.ogg', 100, 0) processing = FALSE open_machine() /obj/machinery/autodoc/open_machine(mob/user) if(processing) - occupant.visible_message("[user] cancels [src]'s procedure.", "[src] stops inserting the organ into your body.") + occupant.visible_message(span_notice("[user] cancels [src]'s procedure."), span_notice("[src] stops inserting the organ into your body.")) processing = FALSE if(occupant) occupant.forceMove(drop_location()) @@ -94,7 +94,7 @@ /obj/machinery/autodoc/interact(mob/user) if(panel_open) - to_chat(user, "Close the maintenance panel first.") + to_chat(user, span_notice("Close the maintenance panel first.")) return if(state_open) @@ -106,13 +106,13 @@ /obj/machinery/autodoc/attackby(obj/item/I, mob/user, params) if(istype(I, organ_type)) if(storedorgan) - to_chat(user, "[src] already has an implant stored.") + to_chat(user, span_notice("[src] already has an implant stored.")) return if(!user.transferItemToLoc(I, src)) return storedorgan = I I.forceMove(src) - to_chat(user, "You insert the [I] into [src].") + to_chat(user, span_notice("You insert the [I] into [src].")) else return ..() @@ -121,10 +121,10 @@ if(..()) return if(occupant) - to_chat(user, "[src] is currently occupied!") + to_chat(user, span_warning("[src] is currently occupied!")) return if(state_open) - to_chat(user, "[src] must be closed to [panel_open ? "close" : "open"] its maintenance hatch!") + to_chat(user, span_warning("[src] must be closed to [panel_open ? "close" : "open"] its maintenance hatch!")) return if(default_deconstruction_screwdriver(user, icon_state, icon_state, I)) if(storedorgan) @@ -164,4 +164,4 @@ if(obj_flags & EMAGGED) return obj_flags |= EMAGGED - to_chat(user, "You reprogram [src]'s surgery procedures.") + to_chat(user, span_warning("You reprogram [src]'s surgery procedures.")) diff --git a/modular_sand/code/game/machinery/cryptominers.dm b/modular_sand/code/game/machinery/cryptominers.dm index a3c6eccac9..33f87a8e9f 100644 --- a/modular_sand/code/game/machinery/cryptominers.dm +++ b/modular_sand/code/game/machinery/cryptominers.dm @@ -52,19 +52,19 @@ if(id_card) var/obj/item/card/id/CARD = id_card if(CARD.bank_support != ID_FREE_BANK_ACCOUNT) - to_chat(user, "This ID has no banking support whatsover, must be an older model...") + to_chat(user, span_warning("This ID has no banking support whatsover, must be an older model...")) return if(!CARD.registered_account) - to_chat(user, "ERROR: No bank account found.") + to_chat(user, span_warning("ERROR: No bank account found.")) return - to_chat(user, "You link \the [CARD] to \the [src].") + to_chat(user, span_notice("You link \the [CARD] to \the [src].")) pay_me = CARD.registered_account - say("Now using [pay_me.account_holder ? "[pay_me.account_holder]'s" : "ERROR"] account.") + say("Now using [pay_me.account_holder ? "[pay_me.account_holder]'s" : span_boldwarning("ERROR")] account.") return /obj/machinery/cryptominer/AltClick(mob/user) - user.visible_message("[user] begins resetting \the [src].", - "You begin resetting \the [src].") + user.visible_message(span_warning("[user] begins resetting \the [src]."), + span_warning("You begin resetting \the [src].")) balloon_alert(user, "resetting") if(do_after(user, 5 SECONDS, target = src)) pay_me = SSeconomy.get_dep_account(ACCOUNT_CAR) @@ -73,7 +73,7 @@ /obj/machinery/cryptominer/examine(mob/user) . = ..() if(in_range(user, src) || isobserver(user)) - . += "A little screen on the machine reads: Currently the linked bank account is [pay_me.account_holder ? "[pay_me.account_holder]'s" : "ERROR"]." + . += span_notice("A little screen on the machine reads: Currently the linked bank account is [pay_me.account_holder ? "[pay_me.account_holder]'s" : span_boldwarning("ERROR")].") . += "Modify the destination of the credits using your id on it while it is inactive and has it's panel open." . += "Alt-Click to reset to the Cargo budget." @@ -101,17 +101,17 @@ var/datum/gas_mixture/env = T.return_air() if(!env) return - + // Get temp var/env_temp = env.return_temperature() - + // Check for temperature effects // Minimum (most likely) if(env_temp <= mintemp) produce_points(3) // Mid else if((env_temp <= midtemp) && (env_temp >= mintemp)) - produce_points(1) + produce_points(1) // Maximum else if((env_temp <= maxtemp) && (env_temp >= midtemp)) produce_points(0.20) @@ -120,7 +120,7 @@ say("Critical overheating detected! Shutting off!") playsound(loc, 'sound/machines/beep.ogg', 50, TRUE, -1) set_mining(FALSE) - + // Increase heat by heatingPower env.set_temperature(env_temp + heatingPower) @@ -135,13 +135,13 @@ /obj/machinery/cryptominer/attack_hand(mob/living/user) . = ..() if(!is_operational()) - to_chat(user, "[src] has to be on to do this!") + to_chat(user, span_warning("[src] has to be on to do this!")) balloon_alert(user, "no power!") return FALSE if(mining) set_mining(FALSE) - visible_message("[src] slowly comes to a halt.", - "You turn off [src].") + visible_message(span_warning("[src] slowly comes to a halt."), + span_warning("You turn off [src].")) balloon_alert(user, "turned off") return balloon_alert(user, "turned on") diff --git a/modular_sand/code/game/mecha/mecha_construction_paths.dm b/modular_sand/code/game/mecha/mecha_construction_paths.dm index 4459823bc0..5b55ec5221 100644 --- a/modular_sand/code/game/mecha/mecha_construction_paths.dm +++ b/modular_sand/code/game/mecha/mecha_construction_paths.dm @@ -102,45 +102,45 @@ switch(index) if(1) - user.visible_message("[user] wrenches [parent]'s parts.", "You wrench [parent]'s parts.") + user.visible_message("[user] wrenches [parent]'s parts.", span_notice("You wrench [parent]'s parts.")) if(2) if(diff==FORWARD) - user.visible_message("[user] welds [parent]'s parts.", "You weld [parent]'s parts") + user.visible_message("[user] welds [parent]'s parts.", span_notice("You weld [parent]'s parts")) else - user.visible_message("[user] unwrenches [parent]'s parts.", "You unwrench [parent]'s parts.") + user.visible_message("[user] unwrenches [parent]'s parts.", span_notice("You unwrench [parent]'s parts.")) if(3) if(diff==FORWARD) - user.visible_message("[user] slots bluespace crystals onto [parent].", "You slot the bluespace crystals onto [parent].") + user.visible_message("[user] slots bluespace crystals onto [parent].", span_notice("You slot the bluespace crystals onto [parent].")) else - user.visible_message("[user] unwelds [parent]'s parts.", "You unweld [parent]'s parts.") + user.visible_message("[user] unwelds [parent]'s parts.", span_notice("You unweld [parent]'s parts.")) if(4) if(diff==FORWARD) - user.visible_message("[user] secures the [parent]'s bluespace crystal slots.", "You secure the [parent]'s bluespace crystal slots") + user.visible_message("[user] secures the [parent]'s bluespace crystal slots.", span_notice("You secure the [parent]'s bluespace crystal slots")) else - user.visible_message("[user] removes the bluespace crystals from [parent].", "You remove [parent]'s bluespace crystals.") + user.visible_message("[user] removes the bluespace crystals from [parent].", span_notice("You remove [parent]'s bluespace crystals.")) if(5) if(diff==FORWARD) - user.visible_message("[user] slots the capacitor onto [parent].", "You slot the capacitor onto [parent].") + user.visible_message("[user] slots the capacitor onto [parent].", span_notice("You slot the capacitor onto [parent].")) else - user.visible_message("[user] unsecures the bluespace crystal slots from [parent].", "You unsecure [parent]'s bluespace crystal slots.") + user.visible_message("[user] unsecures the bluespace crystal slots from [parent].", span_notice("You unsecure [parent]'s bluespace crystal slots.")) if(6) if(diff==FORWARD) - user.visible_message("[user] secures [parent]'s capacitor.", "You secure [parent]'s capacitor.") + user.visible_message("[user] secures [parent]'s capacitor.", span_notice("You secure [parent]'s capacitor.")) else - user.visible_message("[user] removes the [parent]'s capacitor.", "You remove the [parent]'s capacitor.") + user.visible_message("[user] removes the [parent]'s capacitor.", span_notice("You remove the [parent]'s capacitor.")) if(7) if(diff==FORWARD) - user.visible_message("[user] wires the [parent].", "You wire the [parent].") + user.visible_message("[user] wires the [parent].", span_notice("You wire the [parent].")) else - user.visible_message("[user] unsecures [parent]'s capacitor.", "You unsecure [parent]'s capacitor.") + user.visible_message("[user] unsecures [parent]'s capacitor.", span_notice("You unsecure [parent]'s capacitor.")) if(8) if(diff==FORWARD) - user.visible_message("[user] links [parent]'s wires to the limbs.", "You link [parent]'s wires to the limbs.") + user.visible_message("[user] links [parent]'s wires to the limbs.", span_notice("You link [parent]'s wires to the limbs.")) else - user.visible_message("[user] snips off [parent]'s wires.", "You snip off [parent]'s wires.") + user.visible_message("[user] snips off [parent]'s wires.", span_notice("You snip off [parent]'s wires.")) if(9) if(diff==FORWARD) - user.visible_message("[user] welds [parent]'s external armor layer.", "You weld [parent]'s external armor layer.") + user.visible_message("[user] welds [parent]'s external armor layer.", span_notice("You weld [parent]'s external armor layer.")) else - user.visible_message("[user] unlinks [parent]'s wires from the limbs.", "You unlink [parent]'s wires from the limbs.") + user.visible_message("[user] unlinks [parent]'s wires from the limbs.", span_notice("You unlink [parent]'s wires from the limbs.")) return TRUE diff --git a/modular_sand/code/game/objects/items/borg_shapeshifter.dm b/modular_sand/code/game/objects/items/borg_shapeshifter.dm index 64878711b6..0216524d69 100644 --- a/modular_sand/code/game/objects/items/borg_shapeshifter.dm +++ b/modular_sand/code/game/objects/items/borg_shapeshifter.dm @@ -111,18 +111,18 @@ if(isturf(user.loc)) toggle(user) else - to_chat(user, "You can't use [src] while inside something!") + to_chat(user, span_warning("You can't use [src] while inside something!")) else - to_chat(user, "You need at least [activationCost] charge in your cell to use [src]!") + to_chat(user, span_warning("You need at least [activationCost] charge in your cell to use [src]!")) /obj/item/borg_shapeshifter/proc/toggle(mob/living/silicon/robot/user) if(active) playsound(src, 'sound/effects/pop.ogg', 100, TRUE, -6) - to_chat(user, "You deactivate \the [src].") + to_chat(user, span_notice("You deactivate \the [src].")) deactivate(user) else if(animation_playing) - to_chat(user, "\the [src] is recharging.") + to_chat(user, span_notice("\the [src] is recharging.")) return var/mob/living/silicon/robot/R = loc var/static/list/module_icons = sortList(list( @@ -574,7 +574,7 @@ return FALSE animation_playing = TRUE - to_chat(user, "You activate \the [src].") + to_chat(user, span_notice("You activate \the [src].")) playsound(src, 'sound/effects/seedling_chargeup.ogg', 100, TRUE, -6) var/start = user.filters.len var/X,Y,rsq,i,f @@ -591,10 +591,10 @@ animate(offset=f:offset-1, time=rand()*20+10) if (do_after(user, 50, target=user) && user.cell.use(activationCost)) playsound(src, 'sound/effects/bamf.ogg', 100, TRUE, -6) - to_chat(user, "You are now disguised as the Nanotrasen cyborg \"[friendlyName]\".") + to_chat(user, span_notice("You are now disguised as the Nanotrasen cyborg \"[friendlyName]\".")) activate(user, module_selection) else - to_chat(user, "The chameleon field fizzles.") + to_chat(user, span_warning("The chameleon field fizzles.")) do_sparks(3, FALSE, user) for(i=1, i<=min(7, user.filters.len), ++i) // removing filters that are animating does nothing, we gotta stop the animations first f = user.filters[start+i] @@ -656,7 +656,7 @@ /obj/item/borg_shapeshifter/proc/disrupt(mob/living/silicon/robot/user) if(active) - to_chat(user, "Your chameleon field deactivates.") + to_chat(user, span_danger("Your chameleon field deactivates.")) deactivate(user) /obj/item/borg_shapeshifter/stable diff --git a/modular_sand/code/game/objects/items/chrono_eraser.dm b/modular_sand/code/game/objects/items/chrono_eraser.dm index d3f803e38f..a168920e1d 100644 --- a/modular_sand/code/game/objects/items/chrono_eraser.dm +++ b/modular_sand/code/game/objects/items/chrono_eraser.dm @@ -86,7 +86,7 @@ var/mob/living/user = loc if(F.gun) if(isliving(user) && F.captured) - to_chat(user, "FAIL: [F.captured] already has an existing connection.") + to_chat(user, span_alert("FAIL: [F.captured] already has an existing connection.")) field_disconnect(F) else startpos = get_turf(src) @@ -94,7 +94,7 @@ F.gun = src if(isliving(user) && F.captured) playsound(user,'sound/effects/clock_tick.ogg' , 50, 1) - to_chat(user, "Connection established with target: [F.captured]") + to_chat(user, span_notice("Connection established with target: [F.captured]")) /obj/item/gun/energy/chrono_gun/proc/field_disconnect(obj/structure/chrono_field/F) @@ -104,7 +104,7 @@ F.gun = null if(isliving(user) && F.captured) F.captured.adjustOrganLoss(ORGAN_SLOT_BRAIN, 199, 199) //not so fast! - to_chat(user, "Disconnected from target: [F.captured]") + to_chat(user, span_alert("Disconnected from target: [F.captured]")) field = null startpos = null @@ -215,9 +215,9 @@ AM.forceMove(drop_location()) qdel(src) else if(tickstokill <= 0) - to_chat(captured, "As the last essence of your being is erased from time, you are taken back to your most enjoyable memory. You feel happy...") + to_chat(captured, span_boldnotice("As the last essence of your being is erased from time, you are taken back to your most enjoyable memory. You feel happy...")) playsound(captured,'sound/effects/lingreadapt.ogg' , 50, 1) - captured.visible_message("[captured] dematerialises out of the timestream!") + captured.visible_message(span_danger("[captured] dematerialises out of the timestream!")) var/mob/dead/observer/ghost = captured.ghostize(1) if(captured.mind) if(ghost) diff --git a/modular_sand/code/game/objects/items/circuitboards/machine_circuitboards.dm b/modular_sand/code/game/objects/items/circuitboards/machine_circuitboards.dm index ab97d07d54..aec2c6f1ab 100644 --- a/modular_sand/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/modular_sand/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -40,7 +40,7 @@ /obj/item/stock_parts/micro_laser = 5, /obj/item/stock_parts/manipulator = 5, /obj/item/stock_parts/scanning_module = 5, - /obj/item/stack/ore/bluespace_crystal = 5) + ANOMALY_CORE_BLUESPACE = 1) needs_anchored = FALSE /obj/item/circuitboard/machine/telecomms/message_server diff --git a/modular_sand/code/game/objects/items/computermath.dm b/modular_sand/code/game/objects/items/computermath.dm index 19a3e17512..2188f05ff9 100644 --- a/modular_sand/code/game/objects/items/computermath.dm +++ b/modular_sand/code/game/objects/items/computermath.dm @@ -240,7 +240,7 @@ // me fail arithmetic, me brian hurt playsound(src, 'sound/machines/buzz-sigh.ogg', 30, 1) if(difficulty == "Easy") // me fail arithmetic, me brian hurt //nice one, brain damage for it, very cool. - to_chat(user,"You feel sad after failing such an easy question...") + to_chat(user,span_warning("You feel sad after failing such an easy question...")) SEND_SIGNAL(LM, COMSIG_ADD_MOOD_EVENT, "failed_easy", /datum/mood_event/failed_easy) return diff --git a/modular_sand/code/game/objects/items/cosmetics.dm b/modular_sand/code/game/objects/items/cosmetics.dm index b43112c55c..10db30229e 100644 --- a/modular_sand/code/game/objects/items/cosmetics.dm +++ b/modular_sand/code/game/objects/items/cosmetics.dm @@ -4,7 +4,7 @@ /obj/item/razor/proc/new_hairstyle(mob/living/carbon/human/H, mob/user, mirror) var/location = user.zone_selected if (H == user && !mirror) - to_chat(user, "You need a mirror to properly style your own hair!") + to_chat(user, span_warning("You need a mirror to properly style your own hair!")) balloon_alert(user, "need mirror!") return if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) @@ -13,12 +13,12 @@ if(!new_style) return if(!get_location_accessible(H, location)) - to_chat(user, "The headgear is in the way!") + to_chat(user, span_warning("The headgear is in the way!")) balloon_alert(user, "headgear in the way!") return - user.visible_message("[user] tries to change [H]'s hairstyle using [src].", "You try to change [H]'s hairstyle using [src].") + user.visible_message(span_notice("[user] tries to change [H]'s hairstyle using [src]."), span_notice("You try to change [H]'s hairstyle using [src].")) if(new_style && do_after(user, 60, target = H)) - user.visible_message("[user] successfully changes [H]'s hairstyle using [src].", "You successfully change [H]'s hairstyle using [src].") + user.visible_message(span_notice("[user] successfully changes [H]'s hairstyle using [src]."), span_notice("You successfully change [H]'s hairstyle using [src].")) H.balloon_alert(user, "changed hairstyle") H.hair_style = new_style H.update_hair() @@ -26,7 +26,7 @@ /obj/item/razor/proc/new_facial_hairstyle(mob/living/carbon/human/H, mob/user, var/mirror) var/location = user.zone_selected if(H == user && !mirror) - to_chat(user, "You need a mirror to properly style your own facial hair!") + to_chat(user, span_warning("You need a mirror to properly style your own facial hair!")) balloon_alert(user, "need mirror!") return if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) @@ -35,12 +35,12 @@ if(!new_style) return if(!get_location_accessible(H, location)) - to_chat(user, "The mask is in the way!") + to_chat(user, span_warning("The mask is in the way!")) balloon_alert(user, "mask in the way!") return - user.visible_message("[user] tries to change [H]'s facial hair style using [src].", "You try to change [H]'s facial hair style using [src].") + user.visible_message(span_notice("[user] tries to change [H]'s facial hair style using [src]."), span_notice("You try to change [H]'s facial hair style using [src].")) if(new_style && do_after(user, 60, target = H)) - user.visible_message("[user] successfully changes [H]'s facial hair style using [src].", "You successfully change [H]'s facial hair style using [src].") + user.visible_message(span_notice("[user] successfully changes [H]'s facial hair style using [src]."), span_notice("You successfully change [H]'s facial hair style using [src].")) H.balloon_alert(user, "changed facial hair style") H.facial_hair_style = new_style H.update_hair() @@ -64,7 +64,7 @@ var/extended_icon_state = "straightrazor_open" /obj/item/razor/straightrazor/suicide_act(mob/user) - user.visible_message("[user] is slitting [user.p_their()] own throat with [src]! It looks like [user.p_theyre()] trying to commit suicide!") + user.visible_message(span_suicide("[user] is slitting [user.p_their()] own throat with [src]! It looks like [user.p_theyre()] trying to commit suicide!")) return (BRUTELOSS) /obj/item/razor/straightrazor/attack_self(mob/user) @@ -102,6 +102,6 @@ /obj/item/handmirror/attack_self(mob/user) ADD_TRAIT(user, TRAIT_SELF_AWARE, "mirror_trait") - to_chat(user, "You look into the mirror") + to_chat(user, span_notice("You look into the mirror")) sleep(15 SECONDS) REMOVE_TRAIT(user, TRAIT_SELF_AWARE, "mirror_trait") diff --git a/modular_sand/code/game/objects/items/devices/dogborg_sleeper.dm b/modular_sand/code/game/objects/items/devices/dogborg_sleeper.dm index 00f94fa31e..c0dbc0d4a4 100644 --- a/modular_sand/code/game/objects/items/devices/dogborg_sleeper.dm +++ b/modular_sand/code/game/objects/items/devices/dogborg_sleeper.dm @@ -25,20 +25,20 @@ if(!hound || !istype(target) || !proximity || target.anchored) return if(length(contents) > (max_item_count - 1)) - to_chat(user,"Your [src] is full. Eject or process contents to continue.") + to_chat(user,span_warning("Your [src] is full. Eject or process contents to continue.")) return if(isitem(target)) var/obj/item/I = target if(CheckAccepted(I)) - to_chat(user,"[I] registers an error code to your [src]") + to_chat(user,span_warning("[I] registers an error code to your [src]")) return if(I.w_class > WEIGHT_CLASS_NORMAL) - to_chat(user,"[I] is too large to fit into your [src]") + to_chat(user,span_warning("[I] is too large to fit into your [src]")) return - user.visible_message("[hound.name] is ingesting [I] into their [src.name].", "You start ingesting [target] into your [src.name]...") + user.visible_message(span_warning("[hound.name] is ingesting [I] into their [src.name]."), span_notice("You start ingesting [target] into your [src.name]...")) if(do_after(user, 15, target = target) && length(contents) < max_item_count) I.forceMove(src) - I.visible_message("[hound.name]'s garbage processor groans lightly as [I] slips inside.", "Your garbage compactor groans lightly as [I] slips inside.") + I.visible_message(span_warning("[hound.name]'s garbage processor groans lightly as [I] slips inside."), span_notice("Your garbage compactor groans lightly as [I] slips inside.")) playsound(hound, 'sound/machines/disposalflush.ogg', 50, 1) if(length(contents) > 11) //grow that tum after a certain junk amount hound.sleeper_r = 1 @@ -51,18 +51,18 @@ if(iscarbon(target) || issilicon(target)) var/mob/living/trashman = target if(!CHECK_BITFIELD(trashman.vore_flags,DEVOURABLE)) - to_chat(user, "[target] registers an error code to your [src]") + to_chat(user, span_warning("[target] registers an error code to your [src]")) return if(patient) - to_chat(user,"Your [src] is already occupied.") + to_chat(user,span_warning("Your [src] is already occupied.")) return if(trashman.buckled) - to_chat(user,"[trashman] is buckled and can not be put into your [src].") + to_chat(user,span_warning("[trashman] is buckled and can not be put into your [src].")) return - user.visible_message("[hound.name] is ingesting [trashman] into their [src].", "You start ingesting [trashman] into your [src.name]...") + user.visible_message(span_warning("[hound.name] is ingesting [trashman] into their [src]."), span_notice("You start ingesting [trashman] into your [src.name]...")) if(do_after(user, 30, target = trashman) && !patient && !trashman.buckled && length(contents) < max_item_count) trashman.forceMove(src) trashman.reset_perspective(src) update_gut(user) - user.visible_message("[hound.name]'s garbage processor groans lightly as [trashman] slips inside.", "Your garbage compactor groans lightly as [trashman] slips inside.") + user.visible_message(span_warning("[hound.name]'s garbage processor groans lightly as [trashman] slips inside."), span_notice("Your garbage compactor groans lightly as [trashman] slips inside.")) playsound(hound, 'sound/effects/bin_close.ogg', 80, 1) diff --git a/modular_sand/code/game/objects/items/devices/extra_arm.dm b/modular_sand/code/game/objects/items/devices/extra_arm.dm index 55a40eb163..35949fc463 100644 --- a/modular_sand/code/game/objects/items/devices/extra_arm.dm +++ b/modular_sand/code/game/objects/items/devices/extra_arm.dm @@ -11,8 +11,8 @@ M.change_number_of_hands(limbs+1) used = TRUE icon_state = "extra_arm_none" - M.visible_message("[M] presses a button on [src], and you hear a disgusting noise.", "You feel a sharp sting as [src] plunges into your body.") + M.visible_message(span_notice("[M] presses a button on [src], and you hear a disgusting noise."), span_notice("You feel a sharp sting as [src] plunges into your body.")) M.balloon_alert(M, "arm implanted") - to_chat(M, "You feel more dexterous.") + to_chat(M, span_notice("You feel more dexterous.")) playsound(get_turf(M), 'sound/misc/splort.ogg', 50, 1) desc += "Looks like it's been used up." diff --git a/modular_sand/code/game/objects/items/fleshlight.dm b/modular_sand/code/game/objects/items/fleshlight.dm index 5142ab1469..344d3eecd2 100644 --- a/modular_sand/code/game/objects/items/fleshlight.dm +++ b/modular_sand/code/game/objects/items/fleshlight.dm @@ -20,7 +20,7 @@ /obj/item/fleshlight/examine(mob/user) . = ..() - . += "Alt-Click \the [name] to customize it." + . += span_notice("Alt-Click \the [name] to customize it.") /obj/item/fleshlight/update_appearance(updates) . = ..() @@ -61,7 +61,7 @@ message = (user == M) ? "pumps [src] on [possessive_verb] [genital_name]" : "pumps \the [src] on [M]'s [genital_name]" lust_amt = NORMAL_LUST if(message) - user.visible_message("[user] [message].") + user.visible_message(span_lewd("[user] [message].")) M.handle_post_sex(lust_amt, null, user) playlewdinteractionsound(loc, pick('modular_sand/sound/interactions/bang4.ogg', 'modular_sand/sound/interactions/bang5.ogg', @@ -107,9 +107,9 @@ /obj/item/portallight/examine(mob/user) . = ..() if(!portalunderwear) - . += "The device is unpaired. To pair, swipe against a pair of portal panties." + . += span_notice("The device is unpaired. To pair, swipe against a pair of portal panties.") else - . += "The device is paired, and awaiting input. " + . += span_notice("The device is paired, and awaiting input. ") /obj/item/portallight/update_appearance(updates) . = ..() @@ -122,7 +122,7 @@ var/target_lust_amt = NONE var/target var/mob/living/carbon/human/portal_target = ishuman(portalunderwear.loc) && (portalunderwear.current_equipped_slot & (ITEM_SLOT_UNDERWEAR | ITEM_SLOT_MASK)) ? portalunderwear.loc : null - + // This list is structured as [M's longname, M's shortname, wearer's longname, wearer's shortname] var/penis_names = list() for(var/mob/living/carbon/human/person in list(M, portal_target)) @@ -137,7 +137,7 @@ else LAZYADD(penis_names, "none") LAZYADD(penis_names, "none") - + if(ishuman(M) && (M?.client?.prefs?.toggles & VERB_CONSENT) && useable) // I promise all those checks are worth it! switch(user.zone_selected) if(BODY_ZONE_PRECISE_GROIN) @@ -416,7 +416,7 @@ else to_chat(user, "There is no [user.zone_selected == BODY_ZONE_R_LEG ? "right" : "left"] feet!") if(!useable) - to_chat(user, "It seems the device has failed or your partner is not wearing their device.") + to_chat(user, span_notice("It seems the device has failed or your partner is not wearing their device.")) if(user_message) if(portal_target && (portal_target?.client?.prefs.toggles & VERB_CONSENT || !portal_target.ckey)) user.visible_message("[user] [user_message].") @@ -514,7 +514,7 @@ to_chat(M, "urethra fleshlight cumming on dick") portal_target.do_jitter_animation() //make your partner shake too! else - user.visible_message("\The [src] beeps and does not let [M] through.") + user.visible_message(span_warning("\The [src] beeps and does not let [M] through.")) else if(user.a_intent == INTENT_HARM) return ..() @@ -607,7 +607,7 @@ if(isliving(portalunderwear.loc)) portalunderwear.audible_message("[icon2html(portalunderwear, hearers(portalunderwear))] *beep* *beep* *beep*") playsound(portalunderwear, 'sound/machines/triple_beep.ogg', ASSEMBLY_BEEP_VOLUME, TRUE) - to_chat(portalunderwear.loc, "The panties beep as the link to the [src] is lost.") + to_chat(portalunderwear.loc, span_notice("The panties beep as the link to the [src] is lost.")) . = ..() /** @@ -652,9 +652,9 @@ /obj/item/clothing/underwear/briefs/panties/portalpanties/examine(mob/user) . = ..() if(!portallight) - . += "The device is unpaired, to pair, swipe the fleshlight against this pair of portal panties(TM). " + . += span_notice("The device is unpaired, to pair, swipe the fleshlight against this pair of portal panties(TM). ") else - . += "The device is paired, and awaiting attachment. " + . += span_notice("The device is paired, and awaiting attachment. ") /obj/item/clothing/underwear/briefs/panties/portalpanties/attackby(obj/item/I, mob/living/user) //pairing if(istype(I, /obj/item/portallight)) @@ -680,11 +680,11 @@ switch(targetting) if(CUM_TARGET_VAGINA) if(!human.has_vagina(REQUIRE_EXPOSED)) - to_chat(human, "The vagina is covered or there is none!") + to_chat(human, span_warning("The vagina is covered or there is none!")) return FALSE if(CUM_TARGET_ANUS) if(!human.has_anus(REQUIRE_EXPOSED)) - to_chat(human, "The anus is covered or there is none!") + to_chat(human, span_warning("The anus is covered or there is none!")) return FALSE if(CUM_TARGET_PENIS) if(!human.has_penis(REQUIRE_EXPOSED) && !human.has_strapon(REQUIRE_EXPOSED)) @@ -707,7 +707,7 @@ if(!portallight) audible_message("[icon2html(src, hearers(src))] *beep* *beep* *beep*") playsound(src, 'sound/machines/triple_beep.ogg', ASSEMBLY_BEEP_VOLUME, TRUE) - to_chat(user, "The panties are not linked to a portal fleshlight.") + to_chat(user, span_notice("The panties are not linked to a portal fleshlight.")) else update_portal() RegisterSignal(user, COMSIG_PARENT_QDELETING, .proc/drop_out) diff --git a/modular_sand/code/game/objects/items/plushes/goat_boss.dm b/modular_sand/code/game/objects/items/plushes/goat_boss.dm index 9209390bba..a754f936f8 100644 --- a/modular_sand/code/game/objects/items/plushes/goat_boss.dm +++ b/modular_sand/code/game/objects/items/plushes/goat_boss.dm @@ -26,27 +26,27 @@ if (!targets_to_pick_from.len) return target = pick(targets_to_pick_from) - visible_message("[src] stares at [target].") + visible_message(span_notice("[src] stares at [target].")) if (world.time > cooldown && target) ram() /obj/item/toy/plush/goatplushie/angry/proc/ram() if(prob((obj_flags & EMAGGED) ? 98:90) && isturf(loc) && considered_alive(target.mind) && !faction_check(list("goat"), target.faction, FALSE)) throw_at(target, 10, 10) - visible_message("[src] rams [target]!") + visible_message(span_danger("[src] rams [target]!")) cooldown = world.time + cooldown_modifier target = null - visible_message("[src] looks disinterested.") + visible_message(span_notice("[src] looks disinterested.")) /obj/item/toy/plush/goatplushie/angry/emag_act(mob/user) if (obj_flags&EMAGGED) - visible_message("[src] already looks angry enough, you shouldn't anger it more.") + visible_message(span_notice("[src] already looks angry enough, you shouldn't anger it more.")) return cooldown_modifier = cooldown_modifier/2 * 0.75 throwforce = 12.5 force = 10 obj_flags |= EMAGGED - visible_message("[src] stares at [user] angrily before going docile.") + visible_message(span_danger("[src] stares at [user] angrily before going docile.")) /obj/item/toy/plush/goatplushie/angry/Destroy() STOP_PROCESSING(SSprocessing, src) @@ -85,14 +85,14 @@ /obj/item/toy/plush/goatplushie/angry/kinggoat/ascendedkinggoat/attackby(obj/item/I,mob/living/user,params) if(I.get_sharpness()) - user.visible_message("[user] attempts to destroy [src]!", "[I] bounces off [src]'s back before breaking into millions of pieces... [src] glares at [user]!") // You fucked up now son + user.visible_message(span_notice("[user] attempts to destroy [src]!"), span_suicide("[I] bounces off [src]'s back before breaking into millions of pieces... [src] glares at [user]!")) // You fucked up now son I.play_tool_sound(src) qdel(I) user.gib() /obj/item/toy/plush/goatplushie/angry/kinggoat/attackby(obj/item/I,mob/living/user,params) if(I.get_sharpness()) - user.visible_message("[user] rips [src] to shreds!", "[src]'s death has attracted the attention of the king goat plushie guards!") + user.visible_message(span_notice("[user] rips [src] to shreds!"), span_notice("[src]'s death has attracted the attention of the king goat plushie guards!")) I.play_tool_sound(src) qdel(src) var/turf/location = get_turf(user) @@ -109,7 +109,7 @@ new/obj/item/toy/plush/goatplushie/angry/guardgoat(location) new/obj/item/toy/plush/goatplushie/angry/guardgoat(location) if(istype(I, /obj/item/reagent_containers/food/snacks/grown/cabbage)) - user.visible_message("[user] watches as [src] takes a bite out of the cabbage!", "[src]'s fur starts glowing. It seems they have ascended!") + user.visible_message(span_notice("[user] watches as [src] takes a bite out of the cabbage!"), span_notice("[src]'s fur starts glowing. It seems they have ascended!")) playsound(src, 'sound/items/eatfood.ogg', 50, 1) qdel(I) qdel(src) diff --git a/modular_sand/code/game/objects/items/robot/robot_upgrades.dm b/modular_sand/code/game/objects/items/robot/robot_upgrades.dm index 5306894298..1dcdf6deff 100644 --- a/modular_sand/code/game/objects/items/robot/robot_upgrades.dm +++ b/modular_sand/code/game/objects/items/robot/robot_upgrades.dm @@ -16,7 +16,7 @@ if(!XW) XW = locate() in R.module if(XW) - to_chat(user, "This unit is already equipped with an experimental welding tool module.") + to_chat(user, span_warning("This unit is already equipped with an experimental welding tool module.")) return FALSE XW = new(R.module) qdel(WT) @@ -83,7 +83,7 @@ if(!BD) BD = locate() in R.module //There's gotta be a smarter way to do this. if(BD) - to_chat(user, "This unit is already equipped with a BSRPD module.") + to_chat(user, span_warning("This unit is already equipped with a BSRPD module.")) return FALSE BD = new(R.module) @@ -138,11 +138,11 @@ if(.) if(R.hasExpanded) - to_chat(usr, "This unit already has an expand module installed!") + to_chat(usr, span_notice("This unit already has an expand module installed!")) return FALSE if(R.hasShrunk) - to_chat(usr, "This unit already has an shrink module installed!") + to_chat(usr, span_notice("This unit already has an shrink module installed!")) return FALSE if(ExpandSize <= 0) @@ -184,11 +184,11 @@ if(.) if(R.hasShrunk) - to_chat(usr, "This unit already has an shrink module installed!") + to_chat(usr, span_notice("This unit already has an shrink module installed!")) return FALSE if(R.hasExpanded) - to_chat(usr, "This unit already has an expand module installed!") + to_chat(usr, span_notice("This unit already has an expand module installed!")) return FALSE if(ShrinkSize == 0) @@ -246,7 +246,7 @@ if(!shuttle_maker) shuttle_maker = locate() in R.module if(shuttle_maker) - to_chat(user, "This unit is already equipped with a rapid shuttle designator module.") + to_chat(user, span_warning("This unit is already equipped with a rapid shuttle designator module.")) return FALSE shuttle_maker = new(R.module) R.module.basic_modules += shuttle_maker diff --git a/modular_sand/code/game/objects/items/stacks/tiles/tile_reskinning.dm b/modular_sand/code/game/objects/items/stacks/tiles/tile_reskinning.dm index 7f240548e6..2feb8f236a 100644 --- a/modular_sand/code/game/objects/items/stacks/tiles/tile_reskinning.dm +++ b/modular_sand/code/game/objects/items/stacks/tiles/tile_reskinning.dm @@ -39,4 +39,4 @@ GLOBAL_LIST_EMPTY(tile_reskin_lists) /obj/item/stack/tile/examine(mob/user) . = ..() if(tile_reskin_types) - . += "These kinds of tiles can be re-skinned! Use it on hand to reskin." + . += span_notice("These kinds of tiles can be re-skinned! Use it on hand to reskin.") diff --git a/modular_sand/code/game/objects/structures/ghost_role_spawners.dm b/modular_sand/code/game/objects/structures/ghost_role_spawners.dm index d1c2ab7ce0..89b7c20ef5 100644 --- a/modular_sand/code/game/objects/structures/ghost_role_spawners.dm +++ b/modular_sand/code/game/objects/structures/ghost_role_spawners.dm @@ -36,7 +36,7 @@ ADD_TRAIT(new_spawn, TRAIT_SIXTHSENSE, GHOSTROLE_TRAIT) ADD_TRAIT(new_spawn, TRAIT_EXEMPT_HEALTH_EVENTS, GHOSTROLE_TRAIT) ADD_TRAIT(new_spawn, TRAIT_NO_MIDROUND_ANTAG, GHOSTROLE_TRAIT) //The mob can't be made into a random antag, they are still eligible for ghost roles popups. - to_chat(new_spawn,"Ghosting is free!") + to_chat(new_spawn,span_boldwarning("Ghosting is free!")) var/datum/action/toggle_dead_chat_mob/D = new(new_spawn) D.Grant(new_spawn) var/datum/action/disguise/disguise_action = new(new_spawn) diff --git a/modular_sand/code/game/objects/structures/tank_holder.dm b/modular_sand/code/game/objects/structures/tank_holder.dm index 5f88eceed9..b0a720af7f 100644 --- a/modular_sand/code/game/objects/structures/tank_holder.dm +++ b/modular_sand/code/game/objects/structures/tank_holder.dm @@ -30,13 +30,13 @@ /obj/structure/tank_holder/examine(mob/user) . = ..() - . += "It is held together by some screws." + . += span_notice("It is held together by some screws.") /obj/structure/tank_holder/attackby(obj/item/W, mob/user, params) if(user.a_intent == INTENT_HARM) return ..() if(!SEND_SIGNAL(W, COMSIG_CONTAINER_TRY_ATTACH, src, user)) - to_chat(user, "[W] does not fit in [src].") + to_chat(user, span_warning("[W] does not fit in [src].")) /obj/structure/tank_holder/screwdriver_act(mob/living/user, obj/item/I) if(..()) @@ -63,7 +63,7 @@ return ..() if(!Adjacent(user) || issilicon(user)) return ..() - to_chat(user, "You take [tank] from [src].") + to_chat(user, span_notice("You take [tank] from [src].")) add_fingerprint(user) tank.add_fingerprint(user) user.put_in_hands(tank) diff --git a/modular_sand/code/game/turfs/open.dm b/modular_sand/code/game/turfs/open.dm index 13f7e25990..5e66692c37 100644 --- a/modular_sand/code/game/turfs/open.dm +++ b/modular_sand/code/game/turfs/open.dm @@ -7,7 +7,7 @@ /obj/item/wallframe/light_fixture/small/proc/attach_floor(turf/a_floor, mob/user) playsound(src.loc, 'sound/machines/click.ogg', 75, 1) user.visible_message("[user.name] attaches [src] to \the [a_floor].", - "You attach [src] to \the [a_floor].", + span_notice("You attach [src] to \the [a_floor]."), "You hear clicking.") a_floor.balloon_alert(user, "attached to floor") var/obj/O = new /obj/structure/light_construct/floor(a_floor, 1, TRUE) diff --git a/modular_sand/code/game/turfs/simulated/floor/plating.dm b/modular_sand/code/game/turfs/simulated/floor/plating.dm index 4393ff0180..75235f067a 100644 --- a/modular_sand/code/game/turfs/simulated/floor/plating.dm +++ b/modular_sand/code/game/turfs/simulated/floor/plating.dm @@ -4,25 +4,25 @@ /turf/open/floor/plating/examine(mob/user) . = ..() if(!(baseturfs == /turf/baseturf_bottom || istype(baseturfs, /turf/open/space))) - . += "\The [src] cannot be removed from the floor." + . += span_notice("\The [src] cannot be removed from the floor.") else if(unfastened) - . += "\The [src] could be welded off the floor." - . += "The screws on [src] appear loose." + . += span_notice("\The [src] could be welded off the floor.") + . += span_warning("The screws on [src] appear loose.") else - . += "The screws on [src] could be loosened with a screwdriver." + . += span_notice("The screws on [src] could be loosened with a screwdriver.") /turf/open/floor/plating/screwdriver_act(mob/living/user, obj/item/I) if(type == /turf/open/floor/plating) if(baseturfs == /turf/baseturf_bottom || istype(baseturfs, /turf/open/space)) - to_chat(user, "You start [unfastened ? "fastening" : "unfastening"] [src].") + to_chat(user, span_notice("You start [unfastened ? "fastening" : "unfastening"] [src].")) balloon_alert(user, "[unfastened ? "fastening" : "unfastening"]") if(!I.use_tool(src, user, 20, volume = 80)) return - to_chat(user, "You [unfastened ? "fasten" : "unfasten"] [src].") + to_chat(user, span_notice("You [unfastened ? "fasten" : "unfasten"] [src].")) balloon_alert(user, "[unfastened ? "fastened" : "unfastened"]") unfastened = !unfastened else - to_chat(user, "You cannot remove this plating.") + to_chat(user, span_warning("You cannot remove this plating.")) balloon_alert(user, "can't remove!") return @@ -30,13 +30,13 @@ . = ..() if(type == /turf/open/floor/plating && unfastened) if(baseturfs == /turf/baseturf_bottom || istype(baseturfs, /turf/open/space)) - to_chat(user, "You start removing [src], exposing space after you're done!") + to_chat(user, span_warning("You start removing [src], exposing space after you're done!")) balloon_alert(user, "removing") if(!I.use_tool(src, user, 50, volume = 160)) //extra loud to let people know something's going down return new /obj/item/stack/tile/plasteel(get_turf(src)) ReplaceWithLattice() - to_chat(user, "You remove [src].") + to_chat(user, span_notice("You remove [src].")) balloon_alert(user, "removed") return else diff --git a/modular_sand/code/modules/admin/verbs/randomverbs.dm b/modular_sand/code/modules/admin/verbs/randomverbs.dm index 5bb62c4415..ac491b22be 100644 --- a/modular_sand/code/modules/admin/verbs/randomverbs.dm +++ b/modular_sand/code/modules/admin/verbs/randomverbs.dm @@ -16,5 +16,5 @@ SSshuttle.autoEnd() SSblackbox.record_feedback("tally", "admin_verb", 1, "End Shift") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! log_admin("[key_name(usr)] ended the shift.") - message_admins("[key_name_admin(usr)] ended the shift.") + message_admins(span_adminnotice("[key_name_admin(usr)] ended the shift.")) return diff --git a/modular_sand/code/modules/arousal/arousal.dm b/modular_sand/code/modules/arousal/arousal.dm index 6b7df9b07c..f46707e884 100644 --- a/modular_sand/code/modules/arousal/arousal.dm +++ b/modular_sand/code/modules/arousal/arousal.dm @@ -32,7 +32,7 @@ if(prob(30 + clamp((70*(rand() + (h_self.sexual_potency + h_partner.sexual_potency)/200)), 0, 70)) && !W.impregnated && !Sp.equipment[GENITAL_EQUIPEMENT_CONDOM] && (Sp.linked_organ.fluid_id == /datum/reagent/consumable/semen)) W.impregnated = TRUE log_game("Debug: [h_self] has been impregnated by [h_partner]") - to_chat(src, "You feel your hormones change, and a motherly instinct take over.") + to_chat(src, span_userlove("You feel your hormones change, and a motherly instinct take over.")) var/obj/item/organ/genital/breasts/B = h_self.getorganslot(ORGAN_SLOT_BREASTS) if(B) B.fluid_rate *= 2 diff --git a/modular_sand/code/modules/arousal/genitals.dm b/modular_sand/code/modules/arousal/genitals.dm new file mode 100644 index 0000000000..78eb513a88 --- /dev/null +++ b/modular_sand/code/modules/arousal/genitals.dm @@ -0,0 +1,7 @@ +/obj/item/organ/genital + /// Controls whenever a genital is always accessible + var/always_accessible = FALSE + +/// Toggles whether such genital can always be accessed +/obj/item/organ/genital/proc/toggle_accessibility() + always_accessible = !always_accessible diff --git a/modular_sand/code/modules/client/preferences.dm b/modular_sand/code/modules/client/preferences.dm index 611f3b41d6..3efa0eefee 100644 --- a/modular_sand/code/modules/client/preferences.dm +++ b/modular_sand/code/modules/client/preferences.dm @@ -50,9 +50,9 @@ language -= lang else if(check_language_maxhit()) if(CONFIG_GET(number/max_languages) == 1) - to_chat(usr, "You can only have 1 additional language!") + to_chat(usr, span_danger("You can only have 1 additional language!")) else - to_chat(usr, "You can only have up to [CONFIG_GET(number/max_languages)] additional languages!") + to_chat(usr, span_danger("You can only have up to [CONFIG_GET(number/max_languages)] additional languages!")) else language += lang diff --git a/modular_sand/code/modules/clothing/gloves/_gloves.dm b/modular_sand/code/modules/clothing/gloves/_gloves.dm index 65f7de4825..092e25511d 100644 --- a/modular_sand/code/modules/clothing/gloves/_gloves.dm +++ b/modular_sand/code/modules/clothing/gloves/_gloves.dm @@ -50,11 +50,11 @@ var/obj/item/clothing/accessory/ring/A = I if(length(attached_accessories) >= max_accessories) if(user) - to_chat(user, "[src] already has [length(attached_accessories)] accessories.") + to_chat(user, span_warning("[src] already has [length(attached_accessories)] accessories.")) return if(dummy_thick) if(user) - to_chat(user, "[src] is too bulky and cannot have accessories attached to it!") + to_chat(user, span_warning("[src] is too bulky and cannot have accessories attached to it!")) return else if(user && !user.temporarilyRemoveItemFromInventory(I)) @@ -63,7 +63,7 @@ return if(user && notifyAttach) - to_chat(user, "You attach [I] to [src].") + to_chat(user, span_notice("You attach [I] to [src].")) if((flags_inv & HIDEACCESSORY) || (A.flags_inv & HIDEACCESSORY)) return TRUE @@ -95,9 +95,9 @@ var/obj/item/clothing/accessory/ring/A = attached_accessories[length(attached_accessories)] A.detach(src, user) if(user.put_in_hands(A)) - to_chat(user, "You detach [A] from [src].") + to_chat(user, span_notice("You detach [A] from [src].")) else - to_chat(user, "You detach [A] from [src] and it falls on the floor.") + to_chat(user, span_notice("You detach [A] from [src] and it falls on the floor.")) if(ishuman(loc)) var/mob/living/carbon/human/H = loc diff --git a/modular_sand/code/modules/clothing/gloves/accessories.dm b/modular_sand/code/modules/clothing/gloves/accessories.dm index 8356e9fd9e..1c3986de1f 100644 --- a/modular_sand/code/modules/clothing/gloves/accessories.dm +++ b/modular_sand/code/modules/clothing/gloves/accessories.dm @@ -15,11 +15,11 @@ var/strip_silence = FALSE /obj/item/clothing/accessory/ring/suicide_act(mob/living/carbon/user) - user.visible_message("\[user] is putting the [src] in [user.p_their()] mouth! It looks like [user] is trying to choke on the [src]!") + user.visible_message(span_suicide("\[user] is putting the [src] in [user.p_their()] mouth! It looks like [user] is trying to choke on the [src]!")) return OXYLOSS /obj/item/clothing/accessory/ring/attack_self(mob/user) - user.visible_message("\The [user] gets down on one knee, presenting \the [src].","You get down on one knee, presenting \the [src].") + user.visible_message(span_warning("\The [user] gets down on one knee, presenting \the [src]."),span_warning("You get down on one knee, presenting \the [src].")) /obj/item/clothing/accessory/ring/proc/Touch(atom/A, proximity) return FALSE // return TRUE to cancel attack_hand() diff --git a/modular_sand/code/modules/clothing/spacesuits/chronosuit.dm b/modular_sand/code/modules/clothing/spacesuits/chronosuit.dm index aa4cdcc530..fd6ce75120 100644 --- a/modular_sand/code/modules/clothing/spacesuits/chronosuit.dm +++ b/modular_sand/code/modules/clothing/spacesuits/chronosuit.dm @@ -70,8 +70,8 @@ switch(severity) if(1) if(activated && user && ishuman(user) && (user.wear_suit == src)) - to_chat(user, "E:FATAL:RAM_READ_FAIL\nE:FATAL:STACK_EMPTY\nE:FATAL:READ_NULL_POINT\nE:FATAL:PWR_BUS_OVERLOAD") - to_chat(user, "An electromagnetic pulse disrupts your [name] and violently tears you out of time-bluespace!") + to_chat(user, span_danger("E:FATAL:RAM_READ_FAIL\nE:FATAL:STACK_EMPTY\nE:FATAL:READ_NULL_POINT\nE:FATAL:PWR_BUS_OVERLOAD")) + to_chat(user, span_userdanger("An electromagnetic pulse disrupts your [name] and violently tears you out of time-bluespace!")) user.emote("scream") deactivate(1, 1) diff --git a/modular_sand/code/modules/clothing/spacesuits/hardsuit.dm b/modular_sand/code/modules/clothing/spacesuits/hardsuit.dm index 789826f5be..63777f7482 100644 --- a/modular_sand/code/modules/clothing/spacesuits/hardsuit.dm +++ b/modular_sand/code/modules/clothing/spacesuits/hardsuit.dm @@ -101,7 +101,7 @@ var/mob/living/carbon/human/user = src.loc playsound(src.loc, 'modular_sand/sound/misc/suitmalf.ogg', 60, 1, 10) if (ishuman(user) && (user.wear_suit == src)) - to_chat(user, "The motors on your armor cease to function, causing the full weight of the suit to weigh on you all at once!") + to_chat(user, span_danger("The motors on your armor cease to function, causing the full weight of the suit to weigh on you all at once!")) user.emote("scream") user.adjustStaminaLoss(stamdamageemp) user.adjustBruteLoss(brutedamageemp) @@ -126,12 +126,20 @@ /obj/item/clothing/suit/space/hardsuit/mining unique_reskin = list( "Default" = list( + "name" = "mining hardsuit", + "desc" = "A special suit that protects against hazardous, low pressure environments. Has reinforced plating for wildlife encounters.", "icon" = 'icons/obj/clothing/suits.dmi', - "icon_state" = "hardsuit-mining" + "icon_state" = "hardsuit-mining", + "mob_overlay_icon" = null, + "anthro_mob_worn_overlay" = null ), "Conscript" = list( + "name" = "Conscript suit", + "desc" = "..and so he left, with new orders and new questions.", "icon" = 'modular_sand/icons/mob/clothing/suit.dmi', - "icon_state" = "commando-armor" + "icon_state" = "commando-armor", + "mob_overlay_icon" = 'modular_sand/icons/mob/clothing/suit.dmi', + "anthro_mob_worn_overlay" = 'modular_sand/icons/mob/clothing/suit_digi.dmi' ) ) @@ -152,8 +160,6 @@ /obj/item/clothing/suit/space/hardsuit/mining/reskin_obj(mob/M) . = ..() - if(!.) - return var/datum/component/armor_plate/armor_comp = GetComponent(/datum/component/armor_plate) var/armor_level = 0 var/armor_max = 0 @@ -167,12 +173,9 @@ switch(current_skin) if("Default") - name = initial(name) - desc = initial(desc) if(armor_level != 0) upgrade_icon(amount = armor_level, maxamount = armor_max) - mob_overlay_icon = initial(mob_overlay_icon) - anthro_mob_worn_overlay = initial(mob_overlay_icon) + if(mining_helmet) mining_helmet.name = initial(mining_helmet.name) mining_helmet.desc = initial(mining_helmet.desc) @@ -185,12 +188,8 @@ /// Sprited by Dexxiol#3462 :) if("Conscript") - name = "Conscript suit" - desc = "..and so he left, with new orders and new questions." if(armor_level != 0) upgrade_icon(amount = armor_level, maxamount = armor_max) - mob_overlay_icon = 'modular_sand/icons/mob/clothing/suit.dmi' - anthro_mob_worn_overlay = 'modular_sand/icons/mob/clothing/suit_digi.dmi' if(mining_helmet) mining_helmet.name = "Conscript helmet" diff --git a/modular_sand/code/modules/clothing/under/_under.dm b/modular_sand/code/modules/clothing/under/_under.dm new file mode 100644 index 0000000000..fe6dcc8fba --- /dev/null +++ b/modular_sand/code/modules/clothing/under/_under.dm @@ -0,0 +1,8 @@ +GLOBAL_LIST_INIT(skirt_peekable, list( + /obj/item/clothing/under/rank/civilian/janitor/maid = TRUE /* This one hangs about because no skirt in path */ + )) + +/obj/item/clothing/under/Initialize(mapload) + . = ..() + if(!is_type_in_typecache(type, GLOB.skirt_peekable) && findlasttext("[type]", "skirt")) + LAZYSET(GLOB.skirt_peekable, type, TRUE) diff --git a/modular_sand/code/modules/clothing/under/jobs/cargo.dm b/modular_sand/code/modules/clothing/under/jobs/cargo.dm deleted file mode 100644 index e0ad328399..0000000000 --- a/modular_sand/code/modules/clothing/under/jobs/cargo.dm +++ /dev/null @@ -1,5 +0,0 @@ -/obj/item/clothing/under/rank/cargo/qm/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/cargo/tech/skirt - is_skirt = TRUE diff --git a/modular_sand/code/modules/clothing/under/jobs/civilian.dm b/modular_sand/code/modules/clothing/under/jobs/civilian.dm deleted file mode 100644 index 12917d8a2f..0000000000 --- a/modular_sand/code/modules/clothing/under/jobs/civilian.dm +++ /dev/null @@ -1,47 +0,0 @@ -/obj/item/clothing/under/rank/civilian/bartender/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/civilian/chaplain/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/civilian/chef/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/civilian/head_of_personnel/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/civilian/head_of_personnel/suit/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/civilian/hydroponics/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/civilian/janitor/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/civilian/janitor/maid //i believe this one is a dress, not gonna check - is_skirt = TRUE - -/obj/item/clothing/under/rank/civilian/lawyer/black/alt/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/civilian/lawyer/really_black/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/civilian/lawyer/black/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/civilian/lawyer/female/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/civilian/lawyer/red/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/civilian/lawyer/blue/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/civilian/lawyer/bluesuit/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/civilian/lawyer/purpsuit/skirt - is_skirt = TRUE diff --git a/modular_sand/code/modules/clothing/under/jobs/command.dm b/modular_sand/code/modules/clothing/under/jobs/command.dm deleted file mode 100644 index cff9bd3339..0000000000 --- a/modular_sand/code/modules/clothing/under/jobs/command.dm +++ /dev/null @@ -1,5 +0,0 @@ -/obj/item/clothing/under/rank/captain/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/captain/suit/skirt - is_skirt = TRUE diff --git a/modular_sand/code/modules/clothing/under/jobs/curator.dm b/modular_sand/code/modules/clothing/under/jobs/curator.dm deleted file mode 100644 index 85966ab452..0000000000 --- a/modular_sand/code/modules/clothing/under/jobs/curator.dm +++ /dev/null @@ -1,2 +0,0 @@ -/obj/item/clothing/under/rank/civilian/curator/skirt - is_skirt = TRUE diff --git a/modular_sand/code/modules/clothing/under/jobs/engineering.dm b/modular_sand/code/modules/clothing/under/jobs/engineering.dm deleted file mode 100644 index 56e4263ae7..0000000000 --- a/modular_sand/code/modules/clothing/under/jobs/engineering.dm +++ /dev/null @@ -1,8 +0,0 @@ -/obj/item/clothing/under/rank/engineering/chief_engineer/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/engineering/atmospheric_technician/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/engineering/engineer/skirt - is_skirt = TRUE diff --git a/modular_sand/code/modules/clothing/under/jobs/medical.dm b/modular_sand/code/modules/clothing/under/jobs/medical.dm deleted file mode 100644 index 03c124449c..0000000000 --- a/modular_sand/code/modules/clothing/under/jobs/medical.dm +++ /dev/null @@ -1,17 +0,0 @@ -/obj/item/clothing/under/rank/medical/chief_medical_officer/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/medical/geneticist/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/medical/virologist/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/medical/chemist/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/medical/paramedic/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/medical/doctor/skirt - is_skirt = TRUE diff --git a/modular_sand/code/modules/clothing/under/jobs/research.dm b/modular_sand/code/modules/clothing/under/jobs/research.dm deleted file mode 100644 index 1243dfb9ee..0000000000 --- a/modular_sand/code/modules/clothing/under/jobs/research.dm +++ /dev/null @@ -1,14 +0,0 @@ -/obj/item/clothing/under/rank/rnd/research_director/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/rnd/research_director/alt/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/rnd/research_director/turtleneck/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/rnd/scientist/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/rnd/roboticist/skirt - is_skirt = TRUE diff --git a/modular_sand/code/modules/clothing/under/jobs/security.dm b/modular_sand/code/modules/clothing/under/jobs/security.dm deleted file mode 100644 index ee8331c5b6..0000000000 --- a/modular_sand/code/modules/clothing/under/jobs/security.dm +++ /dev/null @@ -1,29 +0,0 @@ -/obj/item/clothing/under/rank/security/officer/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/security/warden/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/security/detective/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/security/detective/grey/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/security/head_of_security/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/security/head_of_security/alt/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/brigdoc/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/blueshield/formal/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/blueshield/skirt - is_skirt = TRUE - -/obj/item/clothing/under/rank/bridgeofficer/skirt - is_skirt = TRUE diff --git a/modular_sand/code/modules/clothing/under/jobs/theater.dm b/modular_sand/code/modules/clothing/under/jobs/theater.dm deleted file mode 100644 index 1de3d44407..0000000000 --- a/modular_sand/code/modules/clothing/under/jobs/theater.dm +++ /dev/null @@ -1,2 +0,0 @@ -/obj/item/clothing/under/rank/civilian/mime/skirt - is_skirt = TRUE diff --git a/modular_sand/code/modules/hydroponics/hydroponics.dm b/modular_sand/code/modules/hydroponics/hydroponics.dm index fbe22b96ea..e383980184 100644 --- a/modular_sand/code/modules/hydroponics/hydroponics.dm +++ b/modular_sand/code/modules/hydroponics/hydroponics.dm @@ -1,7 +1,7 @@ /obj/machinery/hydroponics/proc/harvest_dead(mob/user) dead = FALSE if(user) - to_chat(user, "You remove the dead plant from [src].") + to_chat(user, span_notice("You remove the dead plant from [src].")) qdel(myseed) myseed = null update_icon() diff --git a/modular_sand/code/modules/integrated_electronics/subtypes/output.dm b/modular_sand/code/modules/integrated_electronics/subtypes/output.dm index 45e991aad7..1c16cb3445 100644 --- a/modular_sand/code/modules/integrated_electronics/subtypes/output.dm +++ b/modular_sand/code/modules/integrated_electronics/subtypes/output.dm @@ -51,7 +51,7 @@ user.transferItemToLoc(O,src) encryption_keys += O recalculate_channels() - to_chat(user, "You slide \the [O] inside the circuit.") + to_chat(user, span_notice("You slide \the [O] inside the circuit.")) else ..() @@ -75,10 +75,10 @@ O.forceMove(drop_location()) encryption_keys.Cut() set_pin_data(IC_OUTPUT, 1, WEAKREF(null)) - to_chat(user, "You slide the encryption keys out of the circuit.") + to_chat(user, span_notice("You slide the encryption keys out of the circuit.")) recalculate_channels() else - to_chat(user, "There are no encryption keys to remove from the mechanism.") + to_chat(user, span_notice("There are no encryption keys to remove from the mechanism.")) /obj/item/radio/headset/integrated diff --git a/modular_sand/code/modules/mining/equipment/kinetic_crusher.dm b/modular_sand/code/modules/mining/equipment/kinetic_crusher.dm index a4e6e39a66..7cedccf6ff 100644 --- a/modular_sand/code/modules/mining/equipment/kinetic_crusher.dm +++ b/modular_sand/code/modules/mining/equipment/kinetic_crusher.dm @@ -30,7 +30,7 @@ L.loot = null L.crusher_loot = null L.faction = user.faction.Copy() - user.visible_message("[user] revives [target] with [src], as a friendly fauna") + user.visible_message(span_notice("[user] revives [target] with [src], as a friendly fauna")) playsound(src,'sound/effects/supermatter.ogg',50,1) /obj/item/crusher_trophy/golden_skull/on_melee_hit(mob/living/target, mob/living/user) @@ -53,10 +53,10 @@ L.attack_same = 0 L.loot = null L.crusher_loot = null - user.visible_message("[user] revives [target] with [src], as a friendly legion.") + user.visible_message(span_notice("[user] revives [target] with [src], as a friendly legion.")) playsound(src,'sound/effects/supermatter.ogg',50,1) else - (to_chat(user, "You cancel turning [target] into a legion.")) + (to_chat(user, span_notice("You cancel turning [target] into a legion."))) //rogue process /obj/item/crusher_trophy/brokentech @@ -344,22 +344,22 @@ /obj/item/melee/zweihander/examine(mob/living/user) . = ..() - . += "Mark a large creature with the destabilizing force, then hit them in melee to do [force + detonation_damage] damage." - . += "Does [force + detonation_damage + backstab_bonus] damage if the target is backstabbed, instead of [force + detonation_damage]." + . += span_notice("Mark a large creature with the destabilizing force, then hit them in melee to do [force + detonation_damage] damage.") + . += span_notice("Does [force + detonation_damage + backstab_bonus] damage if the target is backstabbed, instead of [force + detonation_damage].") for(var/t in trophies) var/obj/item/crusher_trophy/T = t - . += "It has \a [T] attached, which causes [T.effect_desc()]." + . += span_notice("It has \a [T] attached, which causes [T.effect_desc()].") /obj/item/melee/zweihander/attackby(obj/item/I, mob/living/user) if(istype(I, /obj/item/crowbar)) if(LAZYLEN(trophies)) - to_chat(user, "You remove [src]'s trophies.") + to_chat(user, span_notice("You remove [src]'s trophies.")) I.play_tool_sound(src) for(var/t in trophies) var/obj/item/crusher_trophy/T = t T.remove_from(src, user) else - to_chat(user, "There are no trophies on [src].") + to_chat(user, span_warning("There are no trophies on [src].")) else if(istype(I, /obj/item/crusher_trophy)) var/obj/item/crusher_trophy/T = I T.add_to(src, user) diff --git a/modular_sand/code/modules/mining/equipment/regenerative_core.dm b/modular_sand/code/modules/mining/equipment/regenerative_core.dm index 4d508dd6c1..b9fc7acfd3 100644 --- a/modular_sand/code/modules/mining/equipment/regenerative_core.dm +++ b/modular_sand/code/modules/mining/equipment/regenerative_core.dm @@ -12,16 +12,16 @@ return var/mob/living/carbon/human/H = target if(inert) - to_chat(user, "[src] has decayed and can no longer be used to heal.") + to_chat(user, span_notice("[src] has decayed and can no longer be used to heal.")) return if(H.stat == DEAD) - to_chat(user, "[src] are useless on the dead.") + to_chat(user, span_notice("[src] are useless on the dead.")) return if(H != user) H.visible_message("[user] forces [H] to apply [src]... Black tendrils entangle and reinforce [H.p_them()]!") SSblackbox.record_feedback("nested tally", "hivelord_core", 1, list("[type]", "used", "other")) else - to_chat(user, "You start to smear [src] on yourself. Disgusting tendrils hold you together and allow you to keep moving, but for how long?") + to_chat(user, span_notice("You start to smear [src] on yourself. Disgusting tendrils hold you together and allow you to keep moving, but for how long?")) SSblackbox.record_feedback("nested tally", "hivelord_core", 1, list("[type]", "used", "self")) if(is_station_level(H.z)) H.adjustBruteLoss(-25, 0) diff --git a/modular_sand/code/modules/mining/lavaland/necropolis_chests.dm b/modular_sand/code/modules/mining/lavaland/necropolis_chests.dm index aaca5e7faa..09d5b00d97 100644 --- a/modular_sand/code/modules/mining/lavaland/necropolis_chests.dm +++ b/modular_sand/code/modules/mining/lavaland/necropolis_chests.dm @@ -156,7 +156,7 @@ /obj/item/projectile/heckhook/on_hit(atom/target) . = ..() var/atom/A = target - A.visible_message("[A] is snagged by [firer]'s hook!") + A.visible_message(span_danger("[A] is snagged by [firer]'s hook!")) new /datum/forced_movement(firer, get_turf(A), 1, TRUE) /obj/item/projectile/heckhook/Destroy() @@ -184,7 +184,7 @@ to_chat(user, "You will now fire normal shotgun rounds.") /obj/item/gun/ballistic/revolver/doublebarrel/super/sawoff(mob/user) - to_chat(user, "Why would you mutilate this work of art?") + to_chat(user, span_warning("Why would you mutilate this work of art?")) return /obj/item/gun/ballistic/revolver/doublebarrel/super/upgraded @@ -235,7 +235,7 @@ /obj/item/crucible/suicide_act(mob/living/carbon/user) if(wielded) - user.visible_message("[user] DOOMs themselves with the [src]!") + user.visible_message(span_suicide("[user] DOOMs themselves with the [src]!")) var/obj/item/bodypart/head/myhead = user.get_bodypart(BODY_ZONE_HEAD)//stole from chainsaw code var/obj/item/organ/brain/B = user.getorganslot(ORGAN_SLOT_BRAIN) @@ -250,12 +250,12 @@ myhead.drop_limb() sleep(3) else - user.visible_message("[user] panics and starts choking to death!") + user.visible_message(span_suicide("[user] panics and starts choking to death!")) return OXYLOSS else - user.visible_message("[user] begins beating [user.p_them()]self to death with \the [src]'s handle! It probably would've been cooler if [user.p_they()] turned it on first!") + user.visible_message(span_suicide("[user] begins beating [user.p_them()]self to death with \the [src]'s handle! It probably would've been cooler if [user.p_they()] turned it on first!")) return BRUTELOSS /obj/item/crucible/update_icon_state() @@ -336,7 +336,7 @@ var/mob/living/carbon/C = user if(C.wear_mask) in_mouth = ", barely missing [user.p_their()] nose" - . = "[user] swings [user.p_their()] [name][in_mouth]. [user.p_they(TRUE)] light[user.p_s()] [user.p_their()] [A.name] in the process." + . = span_warning("[user] swings [user.p_their()] [name][in_mouth]. [user.p_they(TRUE)] light[user.p_s()] [user.p_their()] [A.name] in the process.") playsound(loc, hitsound, get_clamped_volume(), 1, -1) add_fingerprint(user) @@ -437,12 +437,12 @@ sharpness = SHARP_NONE if(ghost_counter >= 4) sharpness = SHARP_POINTY - user.visible_message("[user] strikes with the force of [ghost_counter] vengeful spirits!") + user.visible_message(span_danger("[user] strikes with the force of [ghost_counter] vengeful spirits!")) /obj/item/melee/ghost_sword/run_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) var/ghost_counter = ghost_check() final_block_chance = clamp((ghost_counter * 5), 10, 50) - owner.visible_message("[owner] is protected by a ring of [ghost_counter] ghosts!") + owner.visible_message(span_danger("[owner] is protected by a ring of [ghost_counter] ghosts!")) return ..() /obj/item/clothing/neck/necklace/memento_mori/king @@ -503,7 +503,7 @@ var/choosey = choices[choice] var/obj/machinery/anomalous_crystal/A = new choosey(user.loc) A.activation_method = method - to_chat(user, "[A] appears under your feet as the [src] breaks apart!") + to_chat(user, span_userdanger("[A] appears under your feet as the [src] breaks apart!")) qdel(src) //normal chests @@ -744,7 +744,7 @@ /obj/item/stock_parts/cell/high/plus/argent/attack_self(mob/user) ..() - user.visible_message("[user] crushes the [src] in his hands, absorbing it's energy!") + user.visible_message(span_danger("[user] crushes the [src] in his hands, absorbing it's energy!")) playsound(user.loc, 'sound/effects/hit_on_shattered_glass.ogg', 100, TRUE) var/mob/living/M = user M.apply_status_effect(onuse) @@ -822,13 +822,13 @@ /obj/item/clothing/mask/gas/dagoth/ui_action_click(mob/user, action) if(istype(action, /datum/action/item_action/ashstorm)) if(storm_cooldown > world.time) - to_chat(user, "The [src] is still recharging!") + to_chat(user, span_warning("The [src] is still recharging!")) return var/area/user_area = get_base_area(user) var/turf/user_turf = get_turf(user) if(!user_area || !user_turf || (user_area.type in excluded_areas)) - to_chat(user, "Something is preventing you from using the [src] here.") + to_chat(user, span_warning("Something is preventing you from using the [src] here.")) return var/datum/weather/A for(var/V in SSweather.processing) @@ -840,10 +840,10 @@ if(A) if(A.stage != END_STAGE) if(A.stage == WIND_DOWN_STAGE) - to_chat(user, "The storm is already ending! It would be a waste to use the [src] now.") + to_chat(user, span_warning("The storm is already ending! It would be a waste to use the [src] now.")) return - user.visible_message("[user] gazes into the sky with [src], seemingly repelling the current storm!", \ - "You gaze intently skyward, dispelling the storm!") + user.visible_message(span_warning("[user] gazes into the sky with [src], seemingly repelling the current storm!"), \ + span_notice("You gaze intently skyward, dispelling the storm!")) playsound(user, 'sound/magic/staff_change.ogg', 200, 0) A.wind_down() log_game("[user] ([key_name(user)]) has dispelled a storm at [AREACOORD(user_turf)]") @@ -858,8 +858,8 @@ A.telegraph_duration = 100 A.end_duration = 100 - user.visible_message("[user] gazes skyward with his [src], terrible red lightning strikes seem to accompany them!", \ - "You gaze skyward with [src], calling down a terrible storm!") + user.visible_message(span_warning("[user] gazes skyward with his [src], terrible red lightning strikes seem to accompany them!"), \ + span_notice("You gaze skyward with [src], calling down a terrible storm!")) playsound(user, 'sound/magic/staff_change.ogg', 200, 0) A.telegraph() storm_cooldown = world.time + 200 @@ -973,9 +973,9 @@ //Apply a temp buff until the necklace is used /obj/item/clothing/neck/necklace/necklace_of_the_forsaken/proc/temp_buff(mob/living/carbon/human/user) - to_chat(user, "You feel as if you have a second chance at something, but you're not sure what.") + to_chat(user, span_warning("You feel as if you have a second chance at something, but you're not sure what.")) if(do_after(user, 40, target = user)) - to_chat(user, "The ember warms you...") + to_chat(user, span_notice("The ember warms you...")) ADD_TRAIT(user, TRAIT_NOHARDCRIT, "necklace_of_the_forsaken")//less chance of being gibbed active_owner = user @@ -986,7 +986,7 @@ return var/mob/living/carbon/C = active_owner active_owner = null - to_chat(C, "You feel a scorching burn fill your body and limbs!") + to_chat(C, span_userdanger("You feel a scorching burn fill your body and limbs!")) C.revive(TRUE, FALSE) remove_necklace() //remove buffs @@ -1013,7 +1013,7 @@ if(iscarbon(owner)) MM.temp_buff(owner) src.desc = "Revive or fully heal yourself, but you can only do this once! Can be used when knocked out or dead." - to_chat(MM.active_owner, "You have binded the ember to yourself! The next time you use the necklace it will heal you!") + to_chat(MM.active_owner, span_userdanger("You have binded the ember to yourself! The next time you use the necklace it will heal you!")) else if(MM.numUses >= 1 && MM.active_owner)//revive / heal then remove usage MM.second_chance() MM.numUses = 0 diff --git a/modular_sand/code/modules/mining/machine_bluespaceminer.dm b/modular_sand/code/modules/mining/machine_bluespaceminer.dm index 513a22e4cc..9241f8745e 100644 --- a/modular_sand/code/modules/mining/machine_bluespaceminer.dm +++ b/modular_sand/code/modules/mining/machine_bluespaceminer.dm @@ -19,15 +19,15 @@ /obj/machinery/mineral/bluespace_miner/examine(mob/user) . = ..() if(in_range(user, src) || isobserver(user)) - . += "A small screen on the machine reads, \"Efficiency at [multiplier * 100]%\"" + . += span_notice("A small screen on the machine reads, \"Efficiency at [multiplier * 100]%\"") if(multiplier >= 5) - . += "Bluespace generation is active." + . += span_notice("Bluespace generation is active.") if(!anchored) - . += "The machine won't work while not firmly secured to the ground." + . += span_warning("The machine won't work while not firmly secured to the ground.") if(!materials?.silo) - . += "No ore silo connected. Use a multi-tool to link an ore silo to this machine." + . += span_notice("No ore silo connected. Use a multi-tool to link an ore silo to this machine.") else if(materials?.on_hold()) - . += "Ore silo access is on hold, please contact the quartermaster." + . += span_warning("Ore silo access is on hold, please contact the quartermaster.") /obj/machinery/mineral/bluespace_miner/RefreshParts() multiplier = 0 @@ -50,7 +50,7 @@ /obj/machinery/mineral/bluespace_miner/multitool_act(mob/living/user, obj/item/M) . = ..() if(!M.buffer || !istype(M.buffer, /obj/machinery/ore_silo)) - to_chat(user, "You need to multitool the ore silo first.") + to_chat(user, span_warning("You need to multitool the ore silo first.")) balloon_alert(user, "invalid buffer!") return TRUE diff --git a/modular_sand/code/modules/mob/living/carbon/human/examine.dm b/modular_sand/code/modules/mob/living/carbon/human/examine.dm index 421de3dd8f..5e0b39bce8 100644 --- a/modular_sand/code/modules/mob/living/carbon/human/examine.dm +++ b/modular_sand/code/modules/mob/living/carbon/human/examine.dm @@ -1,23 +1,30 @@ -#define PAIRLESS_PANTIES list(\ - /obj/item/clothing/underwear/briefs/jockstrap,\ - /obj/item/clothing/underwear/briefs/panties/thong,\ - /obj/item/clothing/underwear/briefs/panties/thong/babydoll,\ - /obj/item/clothing/underwear/briefs/mankini\ -) +GLOBAL_LIST_INIT(pairless_panties, list( + /obj/item/clothing/underwear/briefs/jockstrap = TRUE, + /obj/item/clothing/underwear/briefs/panties/thong = TRUE, + /obj/item/clothing/underwear/briefs/panties/thong/babydoll = TRUE, + /obj/item/clothing/underwear/briefs/mankini = TRUE +)) /mob/living/carbon/human/examine(mob/user) . = ..() - if(!isliving(user)) - return - var/mob/living/living = user - var/obj/item/clothing/under/worn_uniform = w_uniform - if((user != src) && !(living.mobility_flags & MOBILITY_STAND) && (mobility_flags & MOBILITY_STAND) && (src.loc == living.loc) && (istype(worn_uniform))) //SPLURT edit - var/string = "Peeking under [src]'s [w_uniform], you can see " - var/obj/item/clothing/underwear/worn_underwear = src.w_underwear + var/obj/item/clothing/under/worn_uniform = get_item_by_slot(ITEM_SLOT_ICLOTHING) + if(worn_uniform && is_type_in_typecache(worn_uniform.type, GLOB.skirt_peekable) && (isobserver(user) || (isliving(user) && (user != src) && !(living.mobility_flags & MOBILITY_STAND) && (mobility_flags & MOBILITY_STAND) && (loc == living.loc) && (istype(worn_uniform))))) + . += span_purple("[p_theyre(TRUE)] wearing a [worn_uniform.name]! You can probably give it a little peek by looking closer.") + +/mob/living/carbon/human/Initialize(mapload) + . = ..() + RegisterSignal(src, COMSIG_PARENT_EXAMINE_MORE, .proc/peek_skirt) + +/mob/living/carbon/human/proc/peek_skirt(mob/examined, mob/examiner, list/examine_content) + var/mob/living/living = examiner + var/obj/item/clothing/under/worn_uniform = get_item_by_slot(ITEM_SLOT_ICLOTHING) + if(worn_uniform && is_type_in_typecache(worn_uniform.type, GLOB.skirt_peekable) && (isobserver(examiner) || (isliving(examiner) && (examiner != src) && !(living.mobility_flags & MOBILITY_STAND) && (mobility_flags & MOBILITY_STAND) && (loc == living.loc) && (istype(worn_uniform))))) + var/string = "Peeking under [src]'s [worn_uniform.name], you can see " + var/obj/item/clothing/underwear/worn_underwear = get_item_by_slot(ITEM_SLOT_UNDERWEAR) if(worn_underwear) string += "a " - if(!(worn_underwear.type in PAIRLESS_PANTIES)) //a pair of thong + if(!is_type_in_typecache(worn_underwear.type, GLOB.pairless_panties)) //a pair of thong string += "pair of " if(worn_underwear.color) string += "[worn_underwear.name]." @@ -27,12 +34,12 @@ var/obj/item/organ/genital/penis/penis = getorganslot(ORGAN_SLOT_PENIS) var/obj/item/organ/genital/vagina/vagina = getorganslot(ORGAN_SLOT_VAGINA) if(penis?.aroused_state) - string += span_love(" There's a visible bulge on it's front.") + string += span_love(" There's a visible bulge on [p_their()] front.") else if(vagina?.aroused_state) - string += span_love(" They're wet with arousal.") + string += span_love(" [p_theyre(TRUE)] wet with arousal.") else - string += "[p_theyre()] not wearing anything! - [p_their()] " + string += "[p_theyre()] not wearing anything!\n[p_their(TRUE)]" var/list/genitals = list() for(var/obj/item/organ/genital/genital in internal_organs) if(genital.genital_flags & (GENITAL_INTERNAL|GENITAL_HIDDEN)) @@ -42,29 +49,29 @@ switch(genital.type) if(/obj/item/organ/genital/vagina) if(genital.aroused_state) - appended += "wet " + appended += " wet" if(lowertext(genital.shape) != "human") - appended += lowertext(genital.shape) - if(lowertext(genital.shape) != "cloaca") //their wet cloaca pussy - appended += " pussy" + appended += " [lowertext(genital.shape)]" + if(lowertext(genital.shape) != "cloaca") //their wet cloaca vagina + appended += " [lowertext(genital.name)]" // goodbye pussy if(/obj/item/organ/genital/testicles) - appended += "nuts" + var/obj/item/organ/genital/testicles/nuts = genital + appended += " [lowertext(nuts.size_name)] [lowertext(nuts.name)]" if(/obj/item/organ/genital/penis) if(genital.aroused_state) - appended += "fully erect" + appended += " fully erect" if(lowertext(genital.shape) != "human") - appended += ", [lowertext(genital.shape)]" - if(appended) - appended += " " //double spaces - appended += "penis" + appended += " [lowertext(genital.shape)]" + appended += " [lowertext(genital.name)]" // Name it something funny, i dare you. + if(/obj/item/organ/genital/butt) + var/obj/item/organ/genital/butt/booty = genital + appended += " [booty.size_name] [lowertext(booty.name)]" // Maybe " average butt pair" isn't the best for now else continue genitals += appended - string += english_list(genitals, "featureless groin") + string += english_list(genitals, " featureless groin", " and", ",") string += " on full display." - . += span_purple(string) - -#undef PAIRLESS_PANTIES + examine_content += span_purple(string) diff --git a/modular_sand/code/modules/mob/living/carbon/show.dm b/modular_sand/code/modules/mob/living/carbon/show.dm index edd752ed8a..7e96c07c77 100644 --- a/modular_sand/code/modules/mob/living/carbon/show.dm +++ b/modular_sand/code/modules/mob/living/carbon/show.dm @@ -15,6 +15,6 @@ if(!I && arm) usr.show_message("[usr] holds up [arm].", 1) else if(!arm && !I) - to_chat(usr, "You frown because now there's nothing you can show.") + to_chat(usr, span_notice("You frown because now there's nothing you can show.")) else if(!HAS_TRAIT(I, ABSTRACT_ITEM_TRAIT)) I.showoff(src) diff --git a/modular_sand/code/modules/mob/living/silicon/silicon.dm b/modular_sand/code/modules/mob/living/silicon/silicon.dm index 6109a0c8fc..af295e91c1 100644 --- a/modular_sand/code/modules/mob/living/silicon/silicon.dm +++ b/modular_sand/code/modules/mob/living/silicon/silicon.dm @@ -10,6 +10,6 @@ set desc = "Allows you to eat someone." if(!CHECK_BITFIELD(T.vore_flags, DEVOURABLE)) - to_chat(src, "System error: Unauthorized operation.") + to_chat(src, span_warning("System error: Unauthorized operation.")) return return feed_grabbed_to_self(src,T) diff --git a/modular_sand/code/modules/mob/living/simple_animal/bot/hugbot.dm b/modular_sand/code/modules/mob/living/simple_animal/bot/hugbot.dm index 0822ec540e..5250ceaffc 100644 --- a/modular_sand/code/modules/mob/living/simple_animal/bot/hugbot.dm +++ b/modular_sand/code/modules/mob/living/simple_animal/bot/hugbot.dm @@ -145,7 +145,7 @@ /mob/living/simple_animal/bot/hugbot/attack_hand(mob/living/carbon/human/H) if(H.a_intent == INTENT_DISARM && mode != BOT_TIPPED) - H.visible_message("[H] begins tipping over [src].", "You begin tipping over [src]...") + H.visible_message(span_danger("[H] begins tipping over [src]."), span_warning("You begin tipping over [src]...")) balloon_alert(H, "tipping over") if(world.time > last_tipping_action_voice + 15 SECONDS) @@ -159,7 +159,7 @@ tip_over(H) else if(H.a_intent == INTENT_HELP && mode == BOT_TIPPED) - H.visible_message("[H] begins righting [src].", "You begin righting [src]...") + H.visible_message(span_notice("[H] begins righting [src]."), span_notice("You begin righting [src]...")) balloon_alert(H, "righting") if(do_after(H, 3 SECONDS, target=src)) set_right(H) @@ -170,8 +170,8 @@ ..() if(emagged == 2) if(user) - to_chat(user, "You short out [src]'s manipulator pressure sensors.") - visible_message("[src]'s arm twitches violently!") + to_chat(user, span_notice("You short out [src]'s manipulator pressure sensors.")) + visible_message(span_danger("[src]'s arm twitches violently!")) flick("medibot_spark", src) playsound(src, "sparks", 75, 1) @@ -347,9 +347,9 @@ // Hey, didyah know that you Han't hug people as non-carbon? Well you can't hug people as non-carbon. Hence this mess if(zone_selected == BODY_ZONE_PRECISE_MOUTH) visible_message( \ - "[src] boops [H]'s nose.", \ - "You boop [H] on the nose.", target = H, - target_message = "[src] boops your nose.") + span_notice("[src] boops [H]'s nose."), \ + span_notice("You boop [H] on the nose."), target = H, + target_message = span_notice("[src] boops your nose.")) playsound(H, 'sound/items/Nose_boop.ogg', 50, 0) SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "headpat", /datum/mood_event/headpat) else if(check_zone(zone_selected) == BODY_ZONE_HEAD) @@ -357,9 +357,9 @@ if(ishuman(H)) S = H.dna.species - visible_message("[src] gives [H] a pat on the head to make [H.p_them()] feel better!", \ - "You give [src] a pat on the head to make [H.p_them()] feel better!", target = H, - target_message = "[src] gives you a pat on the head to make you feel better!") + visible_message(span_notice("[src] gives [H] a pat on the head to make [H.p_them()] feel better!"), \ + span_notice("You give [src] a pat on the head to make [H.p_them()] feel better!"), target = H, + target_message = span_notice("[src] gives you a pat on the head to make you feel better!")) SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "headpat", /datum/mood_event/headpat) if(S?.can_wag_tail(src) && !H.dna.species.is_wagging_tail()) var/static/list/many_tails = list("tail_human", "tail_lizard", "mam_tail") @@ -368,9 +368,9 @@ H.emote("wag") break else - visible_message("[src] hugs [H] to make [H.p_them()] feel better!", \ - "You hug [H] to make [H.p_them()] feel better!", target = H,\ - target_message = "[src] hugs you to make you feel better!") + visible_message(span_notice("[src] hugs [H] to make [H.p_them()] feel better!"), \ + span_notice("You hug [H] to make [H.p_them()] feel better!"), target = H,\ + target_message = span_notice("[src] hugs you to make you feel better!")) SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "hug", /datum/mood_event/hug) playsound(H.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) @@ -390,7 +390,7 @@ /mob/living/simple_animal/bot/hugbot/explode() on = FALSE - visible_message("[src] blows apart!") + visible_message(span_boldannounce("[src] blows apart!")) do_sparks(3, TRUE, src) var/atom/Tsec = drop_location() drop_part(/obj/item/storage/box/hug, Tsec) @@ -416,19 +416,19 @@ var/mob/living/simple_animal/bot/hugbot/A = new(drop_location()) A.name = created_name A.robot_arm = W.type - to_chat(user, "You add [W] to [src]. Beep boop!") + to_chat(user, span_notice("You add [W] to [src]. Beep boop!")) qdel(W) qdel(src) /obj/item/storage/box/hug/attackby(obj/item/I, mob/user, params) if((istype(I, /obj/item/bodypart/l_arm/robot)) || (istype(I, /obj/item/bodypart/r_arm/robot))) if(contents.len) //prevent accidently deleting contents - to_chat(user, "You need to empty [src] out first!") + to_chat(user, span_warning("You need to empty [src] out first!")) return if(!user.temporarilyRemoveItemFromInventory(I)) return qdel(I) - to_chat(user, "You add [I] to the [src]! You've got a hugbot assembly now!") + to_chat(user, span_notice("You add [I] to the [src]! You've got a hugbot assembly now!")) var/obj/item/bot_assembly/hugbot/A = new qdel(src) user.put_in_hands(A) @@ -438,7 +438,7 @@ // Skyrat exclusive: Tipping over hugbots. Because fuck medbots. /mob/living/simple_animal/bot/hugbot/proc/tip_over(mob/user) mobility_flags &= ~MOBILITY_MOVE - user.visible_message("[user] tips over [src]!", "You tip [src] over!") + user.visible_message(span_danger("[user] tips over [src]!"), span_danger("You tip [src] over!")) balloon_alert(user, "tipped over") mode = BOT_TIPPED tipper_name = user.name // Skyrat fix @@ -449,14 +449,14 @@ mobility_flags &= MOBILITY_MOVE var/list/messagevoice if(user) - user.visible_message("[user] sets [src] right-side up!", "You set [src] right-side up!") + user.visible_message(span_notice("[user] sets [src] right-side up!"), span_green("You set [src] right-side up!")) balloon_alert(user, "set right") if(user.name == tipper_name) messagevoice = list("I forgive you." = 'sound/voice/medbot/forgive.ogg') else messagevoice = list("Thank you!" = 'sound/voice/medbot/thank_you.ogg', "You are a good person." = 'sound/voice/medbot/youre_good.ogg') else - visible_message("[src] manages to writhe wiggle enough to right itself.") + visible_message(span_notice("[src] manages to writhe wiggle enough to right itself.")) messagevoice = list("Fuck you." = 'sound/voice/medbot/fuck_you.ogg', "Your behavior has been reported, have a nice day." = 'sound/voice/medbot/reported.ogg') tipper_name = null diff --git a/modular_sand/code/modules/mob/living/simple_animal/friendly/doges.dm b/modular_sand/code/modules/mob/living/simple_animal/friendly/doges.dm index ef6991e2d5..fa3b49613a 100644 --- a/modular_sand/code/modules/mob/living/simple_animal/friendly/doges.dm +++ b/modular_sand/code/modules/mob/living/simple_animal/friendly/doges.dm @@ -22,7 +22,7 @@ . = ..() if(.) for(var/obj/item/reagent_containers/food/snacks/burger/burbger in view(1, src)) - visible_message("\The [src] consumes the [burbger]!") + visible_message(span_danger("\The [src] consumes the [burbger]!")) qdel(burbger) revive(full_heal = 1) @@ -33,7 +33,7 @@ qdel(I) if(stat == DEAD) visible_message("\The [src] stands right back up after nibbling the [I]!") - else + else visible_message("\The [src] swallows the [I] whole!") revive(full_heal = 1) diff --git a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/gladiator.dm b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/gladiator.dm index 9fd110873a..db5c805d2a 100644 --- a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/gladiator.dm +++ b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/gladiator.dm @@ -187,11 +187,11 @@ They deal 35 brute (armor is considered). if(isliving(A)) var/mob/living/LM = A forceMove(LM.loc) - visible_message("[src] knocks [LM] down!") + visible_message(span_userdanger("[src] knocks [LM] down!")) LM.DefaultCombatKnockdown(60) discharge() else if(istype(A, /turf/closed)) - visible_message("[src] crashes headfirst into [A]!") + visible_message(span_userdanger("[src] crashes headfirst into [A]!")) discharge(1.33) /mob/living/simple_animal/hostile/megafauna/gladiator/proc/update_phase() @@ -223,7 +223,7 @@ They deal 35 brute (armor is considered). move_to_delay = move_to_charge /mob/living/simple_animal/hostile/megafauna/gladiator/proc/zweispin() - visible_message("[src] lifts his zweihander, and prepares to spin!") + visible_message(span_boldwarning("[src] lifts his zweihander, and prepares to spin!")) speen = TRUE animate(src, color = "#ff6666", 10) sleep(5) @@ -277,7 +277,7 @@ They deal 35 brute (armor is considered). /mob/living/simple_animal/hostile/megafauna/gladiator/proc/chargeattack(atom/target, var/range) face_atom(target) - visible_message("[src] lifts his shield, and prepares to charge!") + visible_message(span_boldwarning("[src] lifts his shield, and prepares to charge!")) animate(src, color = "#ff6666", 3) sleep(4) face_atom(target) diff --git a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/glaurung.dm b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/glaurung.dm index d9b730eb28..1e1efc4609 100644 --- a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/glaurung.dm +++ b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/glaurung.dm @@ -102,7 +102,7 @@ Difficulty: Medium /mob/living/simple_animal/hostile/megafauna/dragon/glaurung/AltClickOn(atom/movable/A) if(!istype(A)) - to_chat(src, "Your wings are too damaged for old swoop maneuvers.") + to_chat(src, span_warning("Your wings are too damaged for old swoop maneuvers.")) return /obj/item/gps/internal/glaurung diff --git a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/king_of_goats.dm b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/king_of_goats.dm index f3980bc9fd..4b78bb7dbf 100644 --- a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/king_of_goats.dm +++ b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/king_of_goats.dm @@ -164,7 +164,7 @@ Difficulty: Insanely Hard /mob/living/simple_animal/hostile/megafauna/king/Retaliate() ..() if(stat == CONSCIOUS && prob(5)) - visible_message("\The [src] bellows indignantly, with a judgemental gleam in his eye.") + visible_message(span_warning("\The [src] bellows indignantly, with a judgemental gleam in his eye.")) /mob/living/simple_animal/hostile/megafauna/king/phase2/Retaliate() set waitfor = FALSE @@ -172,16 +172,16 @@ Difficulty: Insanely Hard if(spellscast < 5) if(prob(5) && move_to_delay >= 3) //speed buff spellscast++ - visible_message("\The [src] shimmers and seems to phase in and out of reality itself!") + visible_message(span_cult("\The [src] shimmers and seems to phase in and out of reality itself!")) move_to_delay = 1 else if(prob(5) && melee_damage_lower != 50) //damage buff spellscast++ - visible_message("\The [src]' horns grow larger and more menacing!") + visible_message(span_cult("\The [src]' horns grow larger and more menacing!")) melee_damage_lower = 50 else if(prob(5)) //spawn adds spellscast++ - visible_message("\The [src] summons the imperial guard to his aid, and they appear in a flash!") + visible_message(span_cult("\The [src] summons the imperial guard to his aid, and they appear in a flash!")) var/mob/living/simple_animal/hostile/retaliate/goat/guard/master/M = new(get_step(src,pick(GLOB.cardinals))) M.enemies |= enemies var/mob/living/simple_animal/hostile/retaliate/goat/guard/G = new(get_step(src,pick(GLOB.cardinals))) @@ -191,12 +191,12 @@ Difficulty: Insanely Hard else if(prob(5)) //EMP blast spellscast++ - visible_message("\The [src] disrupts nearby electrical equipment!") + visible_message(span_cult("\The [src] disrupts nearby electrical equipment!")) empulse(get_turf(src), 5, 2, 0) else if(prob(5) && melee_damage_type == BRUTE && !special_attacks) //elemental attacks spellscast++ - visible_message("\The [src]' horns flicker with holy white flames!") + visible_message(span_cult("\The [src]' horns flicker with holy white flames!")) melee_damage_type = BURN else if(prob(5)) //earthquake spell @@ -213,7 +213,7 @@ Difficulty: Insanely Hard if(!(getBruteLoss() > health_holder)) adjustBruteLoss(health_holder - getBruteLoss()) //our own magicks cannot harm us else - visible_message("\The [src] loses concentration and huffs haughtily.") + visible_message(span_notice("\The [src] loses concentration and huffs haughtily.")) stop_automated_movement = FALSE else return @@ -225,7 +225,7 @@ Difficulty: Insanely Hard revive(TRUE) stun_chance = 10 update_icon() - visible_message("\The [src]' wounds close with a flash, and when he emerges, he's even larger than before!") + visible_message(span_cult("\The [src]' wounds close with a flash, and when he emerges, he's even larger than before!")) /mob/living/simple_animal/hostile/megafauna/king/phase2/update_icon() @@ -248,20 +248,20 @@ Difficulty: Insanely Hard if(!.) return FALSE if(special_attacks >= 5 && melee_damage_type != BRUTE) - visible_message("The energy surrounding \the [src]'s horns dissipates.") + visible_message(span_cult("The energy surrounding \the [src]'s horns dissipates.")) melee_damage_type = BRUTE if(special_attacks >= 5 && melee_damage_lower == 50) - visible_message("The [src]' horns shrink back down to normal size.") + visible_message(span_cult("The [src]' horns shrink back down to normal size.")) melee_damage_lower = 40 /mob/living/simple_animal/hostile/megafauna/king/proc/OnDeath() - visible_message("\The [src] lets loose a terrific wail as its wounds close shut with a flash of light, and its eyes glow even brighter than before!") + visible_message(span_cult("\The [src] lets loose a terrific wail as its wounds close shut with a flash of light, and its eyes glow even brighter than before!")) new /mob/living/simple_animal/hostile/megafauna/king/phase2(get_turf(src)) qdel(src) /mob/living/simple_animal/hostile/megafauna/king/phase2/OnDeath() if(phase3) - visible_message("\The [src] shrieks as the seal on his power breaks and he starts to break apart!") + visible_message(span_cult("\The [src] shrieks as the seal on his power breaks and he starts to break apart!")) new /obj/structure/ladder/unbreakable/goat(loc) new /obj/item/gun/energy/goatgun(loc) new /obj/item/toy/plush/goatplushie/angry/kinggoat(loc) //If someone dies from this after beating the king goat im going to laugh @@ -278,7 +278,7 @@ Difficulty: Insanely Hard L.gib() if(prob(stun_chance)) L.Stun(5) - visible_message("\The [L] is bowled over by the impact of [src]'s attack!") + visible_message(span_warning("\The [L] is bowled over by the impact of [src]'s attack!")) /mob/living/simple_animal/hostile/megafauna/king/phase2/AttackingTarget() . = ..() diff --git a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm index f671e2f9eb..ed66903f0f 100644 --- a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm +++ b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm @@ -33,7 +33,7 @@ L.GiveTarget(target) - visible_message("[src] splits in twain!") + visible_message(span_boldannounce("[src] splits in twain!")) else var/last_legion = TRUE for(var/mob/living/simple_animal/hostile/megafauna/legion/other in GLOB.mob_living_list) diff --git a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm index 0f062d21b1..b7476832fe 100644 --- a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm +++ b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm @@ -48,7 +48,7 @@ if((faction_check_mob(M) && attack_same) || (!faction_check_mob(M)) || (!ismegafauna(M))) enemies |= M if(!retaliated) - src.visible_message("[src] seems pretty pissed off at [M]!") + src.visible_message(span_userdanger("[src] seems pretty pissed off at [M]!")) retaliated = TRUE retaliatedcooldown = world.time + retaliatedcooldowntime else if(ismecha(A)) @@ -61,7 +61,7 @@ continue enemies |= living if(!retaliated) - visible_message("[src] seems pretty pissed off at [M]!") + visible_message(span_userdanger("[src] seems pretty pissed off at [M]!")) retaliated = TRUE retaliatedcooldown = world.time + retaliatedcooldowntime @@ -129,9 +129,9 @@ if(KA && KA.bayonet) message = pick(glorymessagespka | glorymessagespkabayonet) if(message) - visible_message("[slayer] [message]") + visible_message(span_danger("[slayer] [message]")) else - visible_message("[slayer] does something generally considered brutal to [src]... Whatever that may be!") + visible_message(span_danger("[slayer] does something generally considered brutal to [src]... Whatever that may be!")) adjustHealth(maxHealth, TRUE, TRUE) if(mob_biotypes & MOB_ORGANIC) new /obj/effect/gibspawner/generic(src.loc) @@ -139,14 +139,14 @@ new /obj/effect/gibspawner/robot(src.loc) slayer.heal_overall_damage(gloryhealth,gloryhealth) else - to_chat(slayer, "You fail to glory kill [src]!") + to_chat(slayer, span_danger("You fail to glory kill [src]!")) /mob/living/simple_animal/hostile/megafauna/devour(mob/living/L) if(!L) return visible_message( - "[src] devours [L]!", - "You feast on [L], restoring your health!") + span_danger("[src] devours [L]!"), + span_userdanger("You feast on [L], restoring your health!")) if(!is_station_level(z) || client) //NPC monsters won't heal while on station adjustBruteLoss(-L.maxHealth/2) L.gib() diff --git a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/rogueprocess.dm b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/rogueprocess.dm index f1df97f500..fb49b7fa98 100644 --- a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/rogueprocess.dm +++ b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/rogueprocess.dm @@ -170,7 +170,7 @@ if(path > 2) if(!target) return - visible_message("[src] raises it's plasma cutter!") + visible_message(span_boldwarning("[src] raises it's plasma cutter!")) sleep(3) var/turf/startloc = get_turf(src) var/obj/item/projectile/P = new /obj/item/projectile/plasma/rogue(startloc) @@ -186,7 +186,7 @@ if(theline > 2) if(!target) return - visible_message("[src] raises it's tri-shot plasma cutter!") + visible_message(span_boldwarning("[src] raises it's tri-shot plasma cutter!")) var/ogangle = Get_Angle(src, target) sleep(7) var/turf/startloc = get_turf(src) @@ -212,7 +212,7 @@ Y.fire(otherangle2) /mob/living/simple_animal/hostile/megafauna/rogueprocess/proc/knockdown(range = 2) - visible_message("[src] smashes into the ground!") + visible_message(span_boldwarning("[src] smashes into the ground!")) playsound(src,'sound/misc/crunch.ogg', 200, 1) var/list/hit_things = list() sleep(7) @@ -231,7 +231,7 @@ sleep(3) /mob/living/simple_animal/hostile/megafauna/rogueprocess/proc/shockwave(direction, range, wave_duration = 1.5) - visible_message("[src] smashes the ground in a general direction!!") + visible_message(span_boldwarning("[src] smashes the ground in a general direction!!")) playsound(src,'sound/misc/crunch.ogg', 200, 1) sleep(7) var/list/hit_things = list() @@ -272,7 +272,7 @@ sleep(wave_duration) /mob/living/simple_animal/hostile/megafauna/rogueprocess/proc/ultishockwave(range, iteration_duration = 5) - visible_message("[src] smashes the ground around them!!") + visible_message(span_boldwarning("[src] smashes the ground around them!!")) playsound(src,'sound/misc/crunch.ogg', 200, 1) sleep(10) var/list/hit_things = list() diff --git a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/sif.dm b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/sif.dm index 1411b2ad4b..56c05a748c 100644 --- a/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/sif.dm +++ b/modular_sand/code/modules/mob/living/simple_animal/hostile/megafauna/sif.dm @@ -122,7 +122,7 @@ Difficulty: Medium spawn(30) if(!QDELETED(src)) new /mob/living/simple_animal/hostile/megafauna/sif(get_turf(src.loc)) - visible_message("The ground shakes.") + visible_message(span_notice("The ground shakes.")) playsound(get_turf(src.loc), 'sound/effects/curse3.ogg', 100, 1) playsound(get_turf(src.loc), 'sound/effects/meteorimpact.ogg', 100, 1) qdel(src) @@ -223,7 +223,7 @@ Difficulty: Medium else if(passed == 1) - visible_message("[src] dodged the projectile!", "You dodge the projectile!") + visible_message(span_danger("[src] dodged the projectile!"), span_userdanger("You dodge the projectile!")) playsound(src, pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg'), 300, 1) return 0 @@ -233,7 +233,7 @@ Difficulty: Medium /mob/living/simple_animal/hostile/megafauna/sif/proc/angered() src.angered = TRUE src.stageTwo = TRUE - src.visible_message("[src] lets out a ear ripping howl!", "[src] lets out an ear ripping roar!") + src.visible_message(span_userdanger("[src] lets out a ear ripping howl!"), span_userdanger("[src] lets out an ear ripping roar!")) playsound(src, 'modular_sand/sound/sif/howl.ogg', 100, 1) var/mob/living/L = target shake_camera(L, 4, 3) @@ -247,7 +247,7 @@ Difficulty: Medium /mob/living/simple_animal/hostile/megafauna/sif/proc/enraged() src.stageThree = TRUE src.enraged = TRUE - src.visible_message("[src] lets out a ear ripping yelp!", "[src] lets out an ear ripping yelp!") + src.visible_message(span_userdanger("[src] lets out a ear ripping yelp!"), span_userdanger("[src] lets out an ear ripping yelp!")) playsound(src, 'modular_sand/sound/sif/howl.ogg', 100, 1) var/mob/living/L = target shake_camera(L, 8, 6) @@ -355,7 +355,7 @@ Difficulty: Medium DestroySurroundings() if(isliving(A)) var/mob/living/L = A - L.visible_message("[src] stomps on [L]!", "[src] stomps on you!") + L.visible_message(span_danger("[src] stomps on [L]!"), span_userdanger("[src] stomps on you!")) src.forceMove(get_turf(L)) L.apply_damage(20, BRUTE) playsound(get_turf(L), 'modular_sand/sound/sif/sif_stomp.ogg', 400, 1) diff --git a/modular_sand/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/candy.dm b/modular_sand/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/candy.dm index 82ccc551ee..63ad4d8cf0 100644 --- a/modular_sand/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/candy.dm +++ b/modular_sand/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/candy.dm @@ -51,28 +51,28 @@ name = "Blood Charge" icon_icon = 'modular_sand/icons/mob/actions/actions_elites.dmi' button_icon_state = "blood_charge" - chosen_message = "You will attempt to charge your target." + chosen_message = span_boldwarning("You will attempt to charge your target.") chosen_attack_num = BLOOD_CHARGE /datum/action/innate/elite_attack/bloody_trap name = "Bloody Trap" icon_icon = 'modular_sand/icons/mob/actions/actions_elites.dmi' button_icon_state = "bloody_trap" - chosen_message = "You will attempt to trap your target." + chosen_message = span_boldwarning("You will attempt to trap your target.") chosen_attack_num = BLOODY_TRAP /datum/action/innate/elite_attack/meat_shield name = "Meat Shield" icon_icon = 'modular_sand/icons/mob/actions/actions_elites.dmi' button_icon_state = "meat_shield" - chosen_message = "You will attempt to shield yourself." + chosen_message = span_boldwarning("You will attempt to shield yourself.") chosen_attack_num = MEAT_SHIELD /datum/action/innate/elite_attack/knockdown name = "Knockdown" icon_icon = 'modular_sand/icons/mob/actions/actions_elites.dmi' button_icon_state = "knockdown" - chosen_message = "You will knock down every mob around you." + chosen_message = span_boldwarning("You will knock down every mob around you.") chosen_attack_num = KNOCKDOWN @@ -105,7 +105,7 @@ var/dir_to_target = get_dir(get_turf(src), get_turf(target)) var/turf/T = get_turf(src) playsound(src,'sound/magic/demon_attack1.ogg', 200, 1) - visible_message("[src] prepares to charge!") + visible_message(span_boldwarning("[src] prepares to charge!")) for(var/i in 1 to 6) new /obj/effect/temp_visual/dir_setting/bloodsplatter/candy(T, get_dir(T, target)) T = get_step(T, dir_to_target) @@ -120,7 +120,7 @@ if(bline.len > 6) return FALSE ranged_cooldown = world.time + 100 - visible_message("[src] traps [target]!") + visible_message(span_boldwarning("[src] traps [target]!")) for(var/turf/J in view(1, target) - get_turf(target)) new /obj/effect/temp_visual/bloodwall(J, src) sleep(5) @@ -134,13 +134,13 @@ for(var/obj/effect/temp_visual/bloodwall/B in N.contents) bloodwalls += B var/obj/effect/temp_visual/bloodwall/chosen = pick(bloodwalls) - visible_message("One of the blood walls disappear!") + visible_message(span_boldwarning("One of the blood walls disappear!")) qdel(chosen) /mob/living/simple_animal/hostile/asteroid/elite/candy/proc/meatshield() ranged_cooldown = world.time + 25 playsound(src,'sound/magic/Blind.ogg', 200, 1) - visible_message("[src] raises a wall!") + visible_message(span_boldwarning("[src] raises a wall!")) var/turf/T = get_turf(get_step(src, src.dir)) var/list/hit_things = list() new /obj/effect/temp_visual/bloodwall(T, src) @@ -172,7 +172,7 @@ /mob/living/simple_animal/hostile/asteroid/elite/candy/proc/knockdown() ranged_cooldown = world.time + 100 playsound(src,'sound/misc/crunch.ogg', 200, 1) - visible_message("[src] clenches his fists and smashes the ground!") + visible_message(span_boldwarning("[src] clenches his fists and smashes the ground!")) var/list/hit_things = list() sleep(10) for(var/turf/T in view(1, src)) @@ -217,8 +217,8 @@ if(faction_check_mob(L)) return hit_things += L - visible_message("[src] attacks [L] with much force!") - to_chat(L, "[src] grabs you and throws you with much force!") + visible_message(span_boldwarning("[src] attacks [L] with much force!")) + to_chat(L, span_userdanger("[src] grabs you and throws you with much force!")) L.safe_throw_at(throwtarget, 10, 1, src) //L.Paralyze(20) L.Stun(20) //substituting this for the Paralyze from the line above, because we don't have tg paralysis stuff @@ -270,7 +270,7 @@ icon_state = "vial" /obj/item/bloodcrawlbottle/attack_self(mob/user) - to_chat(user, "You drink the bottle's contents.") + to_chat(user, span_notice("You drink the bottle's contents.")) var/obj/effect/proc_holder/spell/bloodcrawl/S = new /obj/effect/proc_holder/spell/bloodcrawl/ user.mind.AddSpell(S) user.log_message("learned the spell bloodcrawl ([S])", LOG_ATTACK, color="orange") diff --git a/modular_sand/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/drakeling.dm b/modular_sand/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/drakeling.dm index 66e5997888..a59927c59e 100644 --- a/modular_sand/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/drakeling.dm +++ b/modular_sand/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/drakeling.dm @@ -51,28 +51,28 @@ name = "Lava Moat" icon_icon = 'modular_sand/icons/mob/actions/actions_elites.dmi' button_icon_state = "lava_moat" - chosen_message = "You will attempt to create a lava moat around you." + chosen_message = span_boldwarning("You will attempt to create a lava moat around you.") chosen_attack_num = LAVA_MOAT /datum/action/innate/elite_attack/lavaaround name = "Lava Rivers" icon_icon = 'modular_sand/icons/mob/actions/actions_elites.dmi' button_icon_state = "lava_around" - chosen_message = "You will now create lava rivers at your cardinal directions." + chosen_message = span_boldwarning("You will now create lava rivers at your cardinal directions.") chosen_attack_num = LAVA_AROUND /datum/action/innate/elite_attack/firespew name = "Fire Spew" icon_icon = 'modular_sand/icons/mob/actions/actions_elites.dmi' button_icon_state = "fire_spew" - chosen_message = "You will now spew fire at your target." + chosen_message = span_boldwarning("You will now spew fire at your target.") chosen_attack_num = FIRE_SPEW /datum/action/innate/elite_attack/firemoat name = "Fire Moat" icon_icon = 'modular_sand/icons/mob/actions/actions_elites.dmi' button_icon_state = "fire_moat" - chosen_message = "You will now spew fire at all cardinal directions." + chosen_message = span_boldwarning("You will now spew fire at all cardinal directions.") chosen_attack_num = FIRE_MOAT /mob/living/simple_animal/hostile/asteroid/elite/drakeling/OpenFire() @@ -101,7 +101,7 @@ //Drakeling actions /mob/living/simple_animal/hostile/asteroid/elite/drakeling/proc/lava_moat() ranged_cooldown = world.time + 25 - visible_message("[src] spews lava around themselves! Get back!") + visible_message(span_boldwarning("[src] spews lava around themselves! Get back!")) for(var/turf/T in oview(1, src)) new /obj/effect/temp_visual/lava_warning/drakeling(T, 40) @@ -112,7 +112,7 @@ /mob/living/simple_animal/hostile/asteroid/elite/drakeling/proc/fire_spew() ranged_cooldown = world.time + 25 - visible_message("[src] spews fire!") + visible_message(span_boldwarning("[src] spews fire!")) playsound(src,'sound/magic/Fireball.ogg', 200, 1) sleep(5) fire_wall(src.dir, 10) @@ -120,7 +120,7 @@ /mob/living/simple_animal/hostile/asteroid/elite/drakeling/proc/fire_moat() ranged_cooldown = world.time + 100 playsound(src,'sound/magic/Fireball.ogg', 200, 1) - visible_message("[src] violently puffs smoke!They're going to make a fire moat!") + visible_message(span_boldwarning("[src] violently puffs smoke!They're going to make a fire moat!")) sleep(5) for(var/d in GLOB.alldirs) INVOKE_ASYNC(src, .proc/fire_wall, d, 10) @@ -139,7 +139,7 @@ else hitlist += L L.adjustFireLoss(20) - to_chat(L, "You're hit by [src]'s fire breath!") + to_chat(L, span_userdanger("You're hit by [src]'s fire breath!")) T = get_step(T, dir) sleep(1) diff --git a/modular_sand/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm b/modular_sand/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm index ccba5d65a6..f47f7d8a9d 100644 --- a/modular_sand/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm +++ b/modular_sand/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm @@ -25,14 +25,14 @@ obj/item/tumor_shard/afterattack(atom/target, mob/user, proximity_flag) if(istype(target, /mob/living/simple_animal/hostile/asteroid/elite) && proximity_flag) var/mob/living/simple_animal/hostile/asteroid/elite/E = target if(E.stat != DEAD || E.sentience_type != SENTIENCE_BOSS || !E.key) - user.visible_message("It appears [E] is unable to be revived right now. Perhaps try again later.") + user.visible_message(span_notice("It appears [E] is unable to be revived right now. Perhaps try again later.")) return E.faction = list("neutral") E.revive(full_heal = TRUE, admin_revive = TRUE) - user.visible_message("[user] stabs [E] with [src], reviving it.") + user.visible_message(span_notice("[user] stabs [E] with [src], reviving it.")) E.playsound_local(get_turf(E), 'sound/effects/magic.ogg', 40, 0) to_chat(E, "You have been revived by [user]. You owe [user] a great debt. Assist [user.p_them()] in achieving [user.p_their()] goals, regardless of risk.Note that you now share the loyalties of [user]. You are expected not to intentionally sabotage their faction unless commanded to!") + to_chat(E, span_big bold("Note that you now share the loyalties of [user]. You are expected not to intentionally sabotage their faction unless commanded to!")) E.maxHealth = E.maxHealth * 0.5 E.health = E.maxHealth E.desc = "[E.desc] However, this one appears appears less wild in nature, and calmer around people." @@ -40,4 +40,4 @@ obj/item/tumor_shard/afterattack(atom/target, mob/user, proximity_flag) E.owner = user qdel(src) else - to_chat(user, "[src] only works on the corpse of a sentient lavaland elite.") + to_chat(user, span_info("[src] only works on the corpse of a sentient lavaland elite.")) diff --git a/modular_sand/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/fanaticminer.dm b/modular_sand/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/fanaticminer.dm index cd81e17cc3..5a07d9aa66 100644 --- a/modular_sand/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/fanaticminer.dm +++ b/modular_sand/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/fanaticminer.dm @@ -52,28 +52,28 @@ name = "Axe Slam" icon_icon = 'modular_sand/icons/mob/actions/actions_elites.dmi' button_icon_state = "axe_slam" - chosen_message = "You will attempt to slam your axe." + chosen_message = span_boldwarning("You will attempt to slam your axe.") chosen_attack_num = AXE_SLAM /datum/action/innate/elite_attack/summon_shambler name = "Summon Shambler" icon_icon = 'modular_sand/icons/mob/actions/actions_elites.dmi' button_icon_state = "summon_shambler" - chosen_message = "You will attempt to summon a shambling miner." + chosen_message = span_boldwarning("You will attempt to summon a shambling miner.") chosen_attack_num = SUMMON_SHAMBLER /datum/action/innate/elite_attack/dash name = "Dash" icon_icon = 'modular_sand/icons/mob/actions/actions_elites.dmi' button_icon_state = "dash" - chosen_message = "You will attempt to dash near your target." + chosen_message = span_boldwarning("You will attempt to dash near your target.") chosen_attack_num = DASH /datum/action/innate/elite_attack/axe_throw name = "Axe Throw" icon_icon = 'modular_sand/icons/mob/actions/actions_elites.dmi' button_icon_state = "axe_throw" - chosen_message = "You will attempt to throw your axe." + chosen_message = span_boldwarning("You will attempt to throw your axe.") chosen_attack_num = AXE_THROW /mob/living/simple_animal/hostile/asteroid/elite/minerpriest/OpenFire() @@ -107,26 +107,26 @@ for(var/i in 1 to 3) new /obj/effect/temp_visual/dragon_swoop/priest(T) T = get_step(T, dir_to_target) - visible_message("[src] prepares to slam his axe!") + visible_message(span_boldwarning("[src] prepares to slam his axe!")) sleep(5) playsound(src,'sound/misc/crunch.ogg', 200, 1) T = get_step(get_turf(src), dir_to_target) var/list/hit_things = list() - visible_message("[src] slams his axe!") + visible_message(span_boldwarning("[src] slams his axe!")) for(var/i in 1 to 3) for(var/mob/living/L in T.contents) if(faction_check_mob(L)) return hit_things += L - visible_message("[src] slams his axe on [L]!") - to_chat(L, "[src] slams his axe on you!") + visible_message(span_boldwarning("[src] slams his axe on [L]!")) + to_chat(L, span_userdanger("[src] slams his axe on you!")) L.Stun(15) L.adjustBruteLoss(30) T = get_step(T, dir_to_target) /mob/living/simple_animal/hostile/asteroid/elite/minerpriest/proc/summon_shambler(target) ranged_cooldown = world.time + 150 - visible_message("[src] summons a minion!") + visible_message(span_boldwarning("[src] summons a minion!")) playsound(src,'sound/magic/CastSummon.ogg', 200, 1) var/list/turfs = list() for(var/turf/T in oview(2, src)) @@ -139,7 +139,7 @@ /mob/living/simple_animal/hostile/asteroid/elite/minerpriest/proc/dash(atom/dash_target) ranged_cooldown = world.time + 20 - visible_message("[src] dashes into the air!") + visible_message(span_boldwarning("[src] dashes into the air!")) playsound(src,'sound/magic/blink.ogg', 200, 1) var/list/accessable_turfs = list() var/self_dist_to_target = 0 @@ -179,7 +179,7 @@ /mob/living/simple_animal/hostile/asteroid/elite/minerpriest/proc/axe_throw(target) ranged_cooldown = world.time + 20 - visible_message("[src] prepares to throw his axe!") + visible_message(span_boldwarning("[src] prepares to throw his axe!")) var/turf/targetturf = get_turf(target) playsound(src,'sound/weapons/fwoosh.wav', 200, 1) Shoot(targetturf) @@ -189,8 +189,8 @@ var/mob/living/carbon/human/H = new /mob/living/carbon/human(src.loc) if(src.client) H.client = src.client - to_chat(H, "You have been finally enlightened. Serving the necropolis is not your duty anymore, thanks to whoever defeated you. You owe them a great debt.Note that you now share the loyalties of the one who defeated you. You are expected not to intentionally sabotage their faction unless commanded to!") + to_chat(H, span_userdanger("You have been finally enlightened. Serving the necropolis is not your duty anymore, thanks to whoever defeated you. You owe them a great debt.")) + to_chat(H, span_big(span_bold("Note that you now share the loyalties of the one who defeated you. You are expected not to intentionally sabotage their faction unless commanded to!"))) else H.adjustBruteLoss(200) H.equipOutfit(/datum/outfit/job/miner/equipped/priest) diff --git a/modular_sand/code/modules/mob/living/simple_animal/hostile/mining_mobs/miningmobs.dm b/modular_sand/code/modules/mob/living/simple_animal/hostile/mining_mobs/miningmobs.dm index fe050ab3ec..5fce2c9ed7 100644 --- a/modular_sand/code/modules/mob/living/simple_animal/hostile/mining_mobs/miningmobs.dm +++ b/modular_sand/code/modules/mob/living/simple_animal/hostile/mining_mobs/miningmobs.dm @@ -49,9 +49,9 @@ if(KA && KA.bayonet) message = pick(glorymessagespka | glorymessagespkabayonet) if(message) - visible_message("[slayer] [message]") + visible_message(span_danger("[slayer] [message]")) else - visible_message("[slayer] does something generally considered brutal to [src]... Whatever that may be!") + visible_message(span_danger("[slayer] does something generally considered brutal to [src]... Whatever that may be!")) slayer.heal_overall_damage(gloryhealth,gloryhealth) playsound(src.loc, death_sound, 150, TRUE, -1) crusher_drop_mod *= 2 @@ -61,4 +61,4 @@ else if(mob_biotypes & MOB_ROBOTIC) new /obj/effect/gibspawner/robot(src.loc) else - to_chat(slayer, "You fail to glory kill [src]!") + to_chat(slayer, span_danger("You fail to glory kill [src]!")) diff --git a/modular_sand/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/modular_sand/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index dccf94c0a9..ac51d7e5ec 100644 --- a/modular_sand/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/modular_sand/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -8,7 +8,7 @@ if(!suppressed) playsound(src.loc, 'sound/weapons/kenetic_reload.ogg', 60, 1) else - to_chat(loc, "[src] silently charges up.") + to_chat(loc, span_warning("[src] silently charges up.")) update_icon() overheat = FALSE else //this is a terrible solution, but it ensures that it wont be stuck on dischaged if it fails to reload in an obj @@ -32,16 +32,16 @@ var/obj/item/borg/upgrade/modkit/MK = I switch(MK.type) if(/obj/item/borg/upgrade/modkit/chassis_mod) - to_chat(user, "This modkit is unsuitable for [src]!") + to_chat(user, span_userdanger("This modkit is unsuitable for [src]!")) return FALSE if(/obj/item/borg/upgrade/modkit/chassis_mod/orange) - to_chat(user, "This modkit is unsuitable for [src]!") + to_chat(user, span_userdanger("This modkit is unsuitable for [src]!")) return FALSE if(/obj/item/borg/upgrade/modkit/tracer) - to_chat(user, "This modkit is unsuitable for [src]!") + to_chat(user, span_userdanger("This modkit is unsuitable for [src]!")) return FALSE if(/obj/item/borg/upgrade/modkit/tracer/adjustable) - to_chat(user, "This modkit is unsuitable for [src]!") + to_chat(user, span_userdanger("This modkit is unsuitable for [src]!")) return FALSE MK.install(src, user) else @@ -53,16 +53,16 @@ var/obj/item/borg/upgrade/modkit/MK = src switch(MK.type) if(/obj/item/borg/upgrade/modkit/chassis_mod) - to_chat(user, "This modkit is unsuitable for [A]!") + to_chat(user, span_userdanger("This modkit is unsuitable for [A]!")) return FALSE if(/obj/item/borg/upgrade/modkit/chassis_mod/orange) - to_chat(user, "This modkit is unsuitable for [A]!") + to_chat(user, span_userdanger("This modkit is unsuitable for [A]!")) return FALSE if(/obj/item/borg/upgrade/modkit/tracer) - to_chat(user, "This modkit is unsuitable for [A]!") + to_chat(user, span_userdanger("This modkit is unsuitable for [A]!")) return FALSE if(/obj/item/borg/upgrade/modkit/tracer/adjustable) - to_chat(user, "This modkit is unsuitable for [A]!") + to_chat(user, span_userdanger("This modkit is unsuitable for [A]!")) return FALSE install(A, user) else @@ -391,7 +391,7 @@ /mob/living/simple_animal/hostile/asteroid/hivelordbrood/explosivelegion/death() explosion(src.loc, 0, 0, 1, 2, 0, FALSE, 2) - src.visible_message("The [src] explodes!") + src.visible_message(span_danger("The [src] explodes!")) ..() /obj/item/borg/upgrade/modkit/skull @@ -435,7 +435,7 @@ else hitlist += L L.adjustFireLoss(src.modifier) - to_chat(L, "You're hit by [KA]'s fire breath!") + to_chat(L, span_userdanger("You're hit by [KA]'s fire breath!")) //king goat /obj/item/borg/upgrade/modkit/cooldown/cooler name = "cooler modification kit" diff --git a/modular_sand/code/modules/reagents/chemistry/reagents/other_reagents.dm b/modular_sand/code/modules/reagents/chemistry/reagents/other_reagents.dm index e5dcebcbdb..344087f408 100644 --- a/modular_sand/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/modular_sand/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -25,7 +25,7 @@ /datum/reagent/dragons_blood/admin/reaction_mob(mob/living/L, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0) if(method==PATCH || method==INGEST || method==INJECT || (method == VAPOR && prob(min(reac_volume,100)*(1 - touch_protection)))) - to_chat(user, "Power courses through you! You can now shift your form at will.") + to_chat(user, span_danger("Power courses through you! You can now shift your form at will.")) var/obj/effect/proc_holder/spell/targeted/shapeshift/dragon/D = new var/user.mind.AddSpell(D) */ //FIX THIS SHIT diff --git a/modular_sand/code/modules/research/techweb/nodes/all_nodes.dm b/modular_sand/code/modules/research/techweb/nodes/all_nodes.dm index 303af10462..74c534fd0d 100644 --- a/modular_sand/code/modules/research/techweb/nodes/all_nodes.dm +++ b/modular_sand/code/modules/research/techweb/nodes/all_nodes.dm @@ -31,7 +31,7 @@ design_ids = list("ci-toolset-adv","ci-surgery-adv") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) -/datum/techweb_node/adv_surgery/New() +/datum/techweb_node/advance_surgerytools/New() design_ids += "autodoc" . = ..() diff --git a/modular_sand/code/modules/research/techweb/nodes/bluespace_nodes.dm b/modular_sand/code/modules/research/techweb/nodes/bluespace_nodes.dm index c36d90391c..59abd0c034 100644 --- a/modular_sand/code/modules/research/techweb/nodes/bluespace_nodes.dm +++ b/modular_sand/code/modules/research/techweb/nodes/bluespace_nodes.dm @@ -33,8 +33,8 @@ /datum/techweb_node/bs_mining id = "bluespace_mining" display_name = "Bluespace Mining Technology" - description = "Harness the power of bluespace to make materials out of nothing. Slowly." - prereq_ids = list("practical_bluespace", "adv_mining") + description = "Harness the power of bluespace to make materials out of nothing, slowly. Requires a bluespace core to function." + prereq_ids = list("practical_bluespace", "adv_mining", "anomaly_research") design_ids = list("bluespace_miner") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 7500) diff --git a/modular_sand/code/modules/resize/resizing.dm b/modular_sand/code/modules/resize/resizing.dm index f00762bb04..9d0302561d 100644 --- a/modular_sand/code/modules/resize/resizing.dm +++ b/modular_sand/code/modules/resize/resizing.dm @@ -26,9 +26,9 @@ //Smaller person being stepped on if(get_size(user) > get_size(target) && iscarbon(src)) if(istype(user) && user.dna.features["taur"] == "Naga" || user.dna.features["taur"] == "Tentacle") - target.visible_message("[src] carefully slithers around [target].", "[src]'s huge tail slithers besides you.") + target.visible_message(span_notice("[src] carefully slithers around [target]."), span_notice("[src]'s huge tail slithers besides you.")) else - target.visible_message("[src] carefully steps over [target].", "[src] steps over you carefully.") + target.visible_message(span_notice("[src] carefully steps over [target]."), span_notice("[src] steps over you carefully.")) return TRUE //Smaller person stepping under a larger person @@ -69,9 +69,9 @@ addtimer(CALLBACK(user, /mob/.proc/remove_movespeed_modifier, MOVESPEED_ID_STOMP, TRUE), 3) //0.3 seconds if(get_size(user) > get_size(target) && iscarbon(user)) if(istype(user) && user.dna.features["taur"] == "Naga" || user.dna.features["taur"] == "Tentacle") - target.visible_message("[src] carefully rolls their tail over [target]!", "[src]'s huge tail rolls over you!") + target.visible_message(span_danger("[src] carefully rolls their tail over [target]!"), span_danger("[src]'s huge tail rolls over you!")) else - target.visible_message("[src] carefully steps on [target]!", "[src] steps onto you with force!") + target.visible_message(span_danger("[src] carefully steps on [target]!"), span_danger("[src] steps onto you with force!")) return TRUE if(user.a_intent == "harm" && CHECK_MOBILITY(user, MOBILITY_MOVE) && !user.buckled) @@ -85,9 +85,9 @@ //user.Stun(20) if(get_size(user) > get_size(target) && iscarbon(user)) if(istype(user) && (user.dna.features["taur"] == "Naga" || user.dna.features["taur"] == "Tentacle")) - target.visible_message("[src] mows down [target] under their tail!", "[src] plows their tail over you mercilessly!") + target.visible_message(span_danger("[src] mows down [target] under their tail!"), span_userdanger("[src] plows their tail over you mercilessly!")) else - target.visible_message("[src] slams their foot down on [target], crushing them!", "[src] crushes you under their foot!") + target.visible_message(span_danger("[src] slams their foot down on [target], crushing them!"), span_userdanger("[src] crushes you under their foot!")) return TRUE if(user.a_intent == "grab" && CHECK_MOBILITY(user, MOBILITY_MOVE) && !user.buckled) @@ -101,17 +101,17 @@ var/feetCover = (user.wear_suit && (user.wear_suit.body_parts_covered & FEET)) || (user.w_uniform && (user.w_uniform.body_parts_covered & FEET) || (user.shoes && (user.shoes.body_parts_covered & FEET))) if(feetCover) if(user?.dna?.features["taur"] == "Naga" || user?.dna?.features["taur"] == "Tentacle") - target.visible_message("[src] pins [target] under their tail!", "[src] pins you beneath their tail!") + target.visible_message(span_danger("[src] pins [target] under their tail!"), span_danger("[src] pins you beneath their tail!")) else - target.visible_message("[src] pins [target] helplessly underfoot!", "[src] pins you underfoot!") + target.visible_message(span_danger("[src] pins [target] helplessly underfoot!"), span_danger("[src] pins you underfoot!")) return TRUE else if(user?.dna?.features["taur"] == "Naga" || user?.dna?.features["taur"] == "Tentacle") - target.visible_message("[user] snatches up [target] underneath their tail!", "[src]'s tail winds around you and snatches you in its coils!") + target.visible_message(span_danger("[user] snatches up [target] underneath their tail!"), span_userdanger("[src]'s tail winds around you and snatches you in its coils!")) //target.mob_pickup_micro_feet(user) SEND_SIGNAL(target, COMSIG_MICRO_PICKUP_FEET, user) else - target.visible_message("[user] stomps down on [target], curling their toes and picking them up!", "[src]'s toes pin you down and curl around you, picking you up!") + target.visible_message(span_danger("[user] stomps down on [target], curling their toes and picking them up!"), span_userdanger("[src]'s toes pin you down and curl around you, picking you up!")) //target.mob_pickup_micro_feet(user) SEND_SIGNAL(target, COMSIG_MICRO_PICKUP_FEET, user) return TRUE @@ -126,18 +126,18 @@ if(ishuman(src)) var/mob/living/carbon/human/validmob = src if(validmob?.dna?.features["taur"] == "Naga" || validmob?.dna?.features["taur"] == "Tentacle") - visible_message("[validmob] carefully slithers around [target].", "You carefully slither around [target].") + visible_message(span_notice("[validmob] carefully slithers around [target]."), span_notice("You carefully slither around [target].")) else - visible_message("[validmob] carefully steps around [target].", "You carefully steps around [target].") + visible_message(span_notice("[validmob] carefully steps around [target]."), span_notice("You carefully steps around [target].")) //smaller person stepping under another person... TO DO, fix and allow special interactions with naga legs to be seen /mob/living/proc/micro_step_under(mob/living/target) if(ishuman(src)) var/mob/living/carbon/human/validmob = src if(validmob?.dna?.features["taur"] == "Naga" || validmob?.dna?.features["taur"] == "Tentacle") - visible_message("[validmob] bounds over [target]'s tail.", "You jump over [target]'s thick tail.") + visible_message(span_notice("[validmob] bounds over [target]'s tail."), span_notice("You jump over [target]'s thick tail.")) else - visible_message("[validmob] runs between [target]'s legs.", "You run between [target]'s legs.") + visible_message(span_notice("[validmob] runs between [target]'s legs."), span_notice("You run between [target]'s legs.")) //Proc for scaling stamina damage on size difference /mob/living/carbon/proc/sizediffStamLoss(mob/living/carbon/target) diff --git a/modular_sand/code/modules/resize/sizechems.dm b/modular_sand/code/modules/resize/sizechems.dm index c914a5e370..61d80f81ca 100644 --- a/modular_sand/code/modules/resize/sizechems.dm +++ b/modular_sand/code/modules/resize/sizechems.dm @@ -78,7 +78,7 @@ var/size = get_size(M) if(size < RESIZE_MACRO) M.update_size(size + 0.025) - M.visible_message("[pick("[M] grows!", "[M] expands in size!", "[M] pushes outwards in stature!")]", "[pick("You feel your body fighting for space and growing!", "The world contracts inwards in every direction!", "You feel your muscles expand, and your surroundings shrink!")]") + M.visible_message(span_danger("[pick("[M] grows!", "[M] expands in size!", "[M] pushes outwards in stature!")]"), span_danger("[pick("You feel your body fighting for space and growing!", "The world contracts inwards in every direction!", "You feel your muscles expand, and your surroundings shrink!")]")) ..() . = 1 @@ -125,6 +125,6 @@ var/size = get_size(M) if(size > RESIZE_MICRO) M.update_size(size - 0.025) - M.visible_message("[pick("[M] shrinks down!", "[M] dwindles in size!", "[M] compresses down!")]", "[pick("You feel your body compressing in size!", "The world pushes outwards in every direction!", "You feel your muscles contract, and your surroundings grow!")]") + M.visible_message(span_danger("[pick("[M] shrinks down!", "[M] dwindles in size!", "[M] compresses down!")]"), span_danger("[pick("You feel your body compressing in size!", "The world pushes outwards in every direction!", "You feel your muscles contract, and your surroundings grow!")]")) ..() . = 1 diff --git a/modular_sand/code/modules/ruins/lavalandruin_code/doom.dm b/modular_sand/code/modules/ruins/lavalandruin_code/doom.dm index 8d31ecefce..0384a10c14 100644 --- a/modular_sand/code/modules/ruins/lavalandruin_code/doom.dm +++ b/modular_sand/code/modules/ruins/lavalandruin_code/doom.dm @@ -35,14 +35,14 @@ /obj/effect/mine/pickup/bloodbath/berserk/mineEffect(mob/living/carbon/victim) if(!victim.client || !istype(victim)) return - to_chat(victim, "RIP AND TEAR") + to_chat(victim, span_reallybig(span_redtext("RIP AND TEAR"))) var/old_color = victim.client.color var/static/list/red_splash = list(1,0,0,0.8,0.2,0, 0.8,0,0.2,0.1,0,0) var/static/list/pure_red = list(0,0,0,0,0,0,0,0,0,1,0,0) victim.log_message("entered a berserk frenzy", LOG_ATTACK) victim.reagents.add_reagent(/datum/reagent/medicine/adminordrazine,50) - to_chat(victim, "KILL, KILL, KILL!") + to_chat(victim, span_warning("KILL, KILL, KILL!")) victim.client.color = pure_red animate(victim.client,color = red_splash, time = 10, easing = SINE_EASING|EASE_OUT) sleep(duration) diff --git a/modular_sand/code/modules/ruins/lavalandruin_code/misc.dm b/modular_sand/code/modules/ruins/lavalandruin_code/misc.dm index 7a4e6c40f4..ecf4bf0f91 100644 --- a/modular_sand/code/modules/ruins/lavalandruin_code/misc.dm +++ b/modular_sand/code/modules/ruins/lavalandruin_code/misc.dm @@ -33,7 +33,7 @@ if(M.stat != DEAD) ourmegafauna |= M if(!length(ourmegafauna)) - visible_message("[src] shines brightly, turning into [upgradedname]!") + visible_message(span_warning("[src] shines brightly, turning into [upgradedname]!")) name = upgradedname desc = upgradeddesc block_chance = 66 @@ -87,10 +87,10 @@ if(ishuman(mover)) var/mob/living/carbon/human/H = mover if(cmegalist.len <= megalist.len - 2) - H.visible_message("[H] pushes through [src]!", "You deserve your reward. Reap your hunt.") + H.visible_message(span_warning("[H] pushes through [src]!"), span_notice("You deserve your reward. Reap your hunt.")) return TRUE else - to_chat(H, "Just touching the door burns your hand... You're not ready.") + to_chat(H, span_warning("Just touching the door burns your hand... You're not ready.")) H.apply_damage(damage = 5,damagetype = BURN, def_zone = H.get_bodypart(BODY_ZONE_R_ARM), blocked = FALSE, forced = FALSE) /area/ruin/powered/wrath diff --git a/modular_sand/code/modules/shuttle/shuttle_creation/shuttle_upgrades.dm b/modular_sand/code/modules/shuttle/shuttle_creation/shuttle_upgrades.dm index 028f384600..ddb1a84fd8 100644 --- a/modular_sand/code/modules/shuttle/shuttle_creation/shuttle_upgrades.dm +++ b/modular_sand/code/modules/shuttle/shuttle_creation/shuttle_upgrades.dm @@ -11,14 +11,14 @@ if(!istype(O, /obj/machinery/computer)) return if(!istype(O, /obj/machinery/computer/custom_shuttle)) - to_chat(user, "This upgrade only works on a custom shuttle flight console.") + to_chat(user, span_warning("This upgrade only works on a custom shuttle flight console.")) return if(!user.transferItemToLoc(src, get_turf(O))) return var/obj/machinery/computer/custom_shuttle/link_comp = O if(link_comp.smooth_sailing) - to_chat(usr, "The shuttle is already sailing smoothly!") + to_chat(usr, span_notice("The shuttle is already sailing smoothly!")) return link_comp.smooth_sailing = TRUE playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0) - to_chat(usr, "You insert the disk into the flight computer, allowing you to not be thrown around like a ragdoll when launching.") + to_chat(usr, span_notice("You insert the disk into the flight computer, allowing you to not be thrown around like a ragdoll when launching.")) diff --git a/modular_sand/code/modules/surgery/organs/augments_arms.dm b/modular_sand/code/modules/surgery/organs/augments_arms.dm index 115755da4a..3fff77b3ed 100644 --- a/modular_sand/code/modules/surgery/organs/augments_arms.dm +++ b/modular_sand/code/modules/surgery/organs/augments_arms.dm @@ -18,7 +18,7 @@ if(obj_flags & EMAGGED) return obj_flags |= EMAGGED - to_chat(usr, "You unlock [src]'s integrated dagger!") + to_chat(usr, span_notice("You unlock [src]'s integrated dagger!")) items_list += new /obj/item/pen/edagger(src) return TRUE @@ -38,6 +38,6 @@ if(obj_flags & EMAGGED) return obj_flags |= EMAGGED - to_chat(usr, "You unlock [src]'s integrated dagger!") + to_chat(usr, span_notice("You unlock [src]'s integrated dagger!")) items_list += new /obj/item/pen/edagger(src) return TRUE diff --git a/modular_sand/code/modules/telescience/telesci_computer.dm b/modular_sand/code/modules/telescience/telesci_computer.dm index a6ea1c57ff..456ff83891 100644 --- a/modular_sand/code/modules/telescience/telesci_computer.dm +++ b/modular_sand/code/modules/telescience/telesci_computer.dm @@ -48,7 +48,7 @@ /obj/machinery/computer/telescience/examine(mob/user) . = ..() - . += "There are [crystals ? crystals : "no"] bluespace crystal\s in the crystal slots." + . += span_notice("There are [crystals ? crystals : "no"] bluespace crystal\s in the crystal slots.") /obj/machinery/computer/telescience/Initialize(mapload) . = ..() @@ -56,18 +56,18 @@ crystals = starting_crystals /obj/machinery/computer/telescience/attack_paw(mob/user) - to_chat(user, "You are too primitive to use this computer!") + to_chat(user, span_warning("You are too primitive to use this computer!")) return /obj/machinery/computer/telescience/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/stack/ore/bluespace_crystal)) var/obj/item/stack/ore/bluespace_crystal/CRYSTAL = W if(crystals >= max_crystals) - to_chat(user, "There are not enough crystal slots.") + to_chat(user, span_warning("There are not enough crystal slots.")) return if(!user.dropItemToGround(user.get_active_held_item())) return - user.visible_message("[user] inserts [CRYSTAL] into \the [src]'s crystal slot.", "You insert [CRYSTAL] into \the [src]'s crystal slot.") + user.visible_message("[user] inserts [CRYSTAL] into \the [src]'s crystal slot.", span_notice("You insert [CRYSTAL] into \the [src]'s crystal slot.")) balloon_alert(user, "inserted bluespace") CRYSTAL.use(1) crystals++ @@ -79,7 +79,7 @@ if(!user.transferItemToLoc(W, src)) return inserted_gps = W - user.visible_message("[user] inserts [W] into \the [src]'s GPS device slot.", "You insert [W] into \the [src]'s GPS device slot.") + user.visible_message("[user] inserts [W] into \the [src]'s GPS device slot.", span_notice("You insert [W] into \the [src]'s GPS device slot.")) balloon_alert(user, "inserted GPS") else if(W.tool_behaviour == TOOL_MULTITOOL) if(W.buffer && istype(W.buffer, /obj/machinery/telepad)) @@ -180,7 +180,7 @@ /obj/machinery/computer/telescience/proc/telefail() sparks() - visible_message("The telepad weakly fizzles.") + visible_message(span_warning("The telepad weakly fizzles.")) /obj/machinery/computer/telescience/proc/doteleport(mob/user) diff --git a/modular_sand/code/modules/tgs/chat_commands.dm b/modular_sand/code/modules/tgs/chat_commands.dm index e502eb3acc..c87de31a3d 100644 --- a/modular_sand/code/modules/tgs/chat_commands.dm +++ b/modular_sand/code/modules/tgs/chat_commands.dm @@ -20,6 +20,6 @@ /datum/tgs_chat_command/restart/Run(datum/tgs_chat_user/sender) . = "Restarting." - to_chat(world, "Server restart - Initialized by [sender.friendly_name] on Discord.") + to_chat(world, span_boldwarning("Server restart - Initialized by [sender.friendly_name] on Discord.")) send2adminchat("Server", "[sender.friendly_name] forced a restart.") addtimer(CALLBACK(src, world.TgsEndProcess()), 1 SECONDS) diff --git a/modular_splurt/code/_onclick/observer.dm b/modular_splurt/code/_onclick/observer.dm index 3a25bab19b..dee0e57799 100644 --- a/modular_splurt/code/_onclick/observer.dm +++ b/modular_splurt/code/_onclick/observer.dm @@ -14,8 +14,8 @@ return playsound(src.loc, 'sound/weapons/slap.ogg', 50, 1, -1) if(HAS_TRAIT(src, TRAIT_STEEL_ASS)) - to_chat(src, "You feel something bounce off your steely asscheeks, but nothing is there...") - to_chat(user, "You slap \The [src]'s ass, but your ethereal hand bounces right off!") + to_chat(src, span_danger("You feel something bounce off your steely asscheeks, but nothing is there...")) + to_chat(user, span_danger("You slap \The [src]'s ass, but your ethereal hand bounces right off!")) playsound(src.loc, 'sound/weapons/tap.ogg', 50, 1, -1) return if(istype(H)) @@ -26,7 +26,7 @@ H.dna.species.stop_wagging_tail(src) playsound(src.loc, 'sound/weapons/slap.ogg', 50, 1, -1) src.visible_message(\ - "You hear someone slap \The [src]'s ass, but nobody's there...",\ - "Somebody slaps your ass, but nobody is around...",\ - "You hear a slap.", target=user, target_message="You manage to will your ethereal hand to slap \The [src]'s ass.") + span_danger("You hear someone slap \The [src]'s ass, but nobody's there..."),\ + span_notice("Somebody slaps your ass, but nobody is around..."),\ + "You hear a slap.", target=user, target_message=span_notice("You manage to will your ethereal hand to slap \The [src]'s ass.")) return diff --git a/modular_splurt/code/datums/components/size_normalized.dm b/modular_splurt/code/datums/components/size_normalized.dm index cc2525c908..f3d675d187 100644 --- a/modular_splurt/code/datums/components/size_normalized.dm +++ b/modular_splurt/code/datums/components/size_normalized.dm @@ -20,7 +20,7 @@ if(recorded_size != normal_resize) playsound(wearer, 'sound/effects/magic.ogg', 50, 1) wearer.flash_lighting_fx(3, 3, LIGHT_COLOR_PURPLE) - wearer.visible_message("A flash of purple light engulfs \the [wearer], before [wearer.p_they()] jump[wearer.p_s()] to a more average size!","You feel warm for a moment, before everything scales to your size...") + wearer.visible_message(span_warning("A flash of purple light engulfs \the [wearer], before [wearer.p_they()] jump[wearer.p_s()] to a more average size!"),span_notice("You feel warm for a moment, before everything scales to your size...")) wearer.update_size(normal_resize) RegisterSignal(wearer, COMSIG_MOB_RESIZED, .proc/normalize_size) @@ -33,7 +33,7 @@ return playsound(wearer,'sound/weapons/emitter2.ogg', 50, 1) wearer.flash_lighting_fx(3, 3, LIGHT_COLOR_YELLOW) - wearer.visible_message("Golden light engulfs \the [wearer], and [wearer.p_they()] shoot[wearer.p_s()] back to [wearer.p_their()] default height!","Energy rushes through your body, and you return to normal.") + wearer.visible_message(span_warning("Golden light engulfs \the [wearer], and [wearer.p_they()] shoot[wearer.p_s()] back to [wearer.p_their()] default height!"),span_notice("Energy rushes through your body, and you return to normal.")) wearer.update_size(recorded_size) //Make sure the size stays normalized while worn and add the change to the recorded size diff --git a/modular_splurt/code/datums/interactions/lewd/_lewd.dm b/modular_splurt/code/datums/interactions/lewd/_lewd.dm index b63256db39..a5579511b5 100644 --- a/modular_splurt/code/datums/interactions/lewd/_lewd.dm +++ b/modular_splurt/code/datums/interactions/lewd/_lewd.dm @@ -74,7 +74,7 @@ if(CUM_TARGET_NIPPLE) cumin = TRUE if(partner.has_breasts()) - message = "cums iside \the [partner]'s nipple!." + message = "cums inside \the [partner]'s nipple!." target_gen = partner.getorganslot(ORGAN_SLOT_BREASTS) else message = "cums on \the [partner]'s chest and neck." @@ -136,7 +136,7 @@ if(CUM_TARGET_NIPPLE) cumin = TRUE if(partner.has_breasts()) - message = "cums iside \the [partner]'s nipple!." + message = "cums inside \the [partner]'s nipple!." target_gen = partner.getorganslot(ORGAN_SLOT_BREASTS) else message = "cums on \the [partner]'s chest and neck." @@ -209,7 +209,7 @@ playlewdinteractionsound(loc, pick('modular_sand/sound/interactions/final_f1.ogg', 'modular_sand/sound/interactions/final_f2.ogg', 'modular_sand/sound/interactions/final_f3.ogg'), 70, 1, 0) - visible_message(message = "\The [src] [message]", ignored_mobs = get_unconsenting()) + visible_message(message = span_userlove("\The [src] [message]"), ignored_mobs = get_unconsenting()) multiorgasms += 1 if(multiorgasms > (get_sexual_potency() * 0.34)) //AAAAA, WE DONT WANT NEGATIVES HERE, RE @@ -364,7 +364,7 @@ 'modular_sand/sound/interactions/bj9.ogg', 'modular_sand/sound/interactions/bj10.ogg', 'modular_sand/sound/interactions/bj11.ogg'), 50, 1, -1) - visible_message(message = "\The [src] [message]", ignored_mobs = get_unconsenting()) + visible_message(message = span_lewd("\The [src] [message]"), ignored_mobs = get_unconsenting()) if(fucktarget != "penis" || user.can_penetrating_genital_cum()) user.handle_post_sex(lust_increase, CUM_TARGET_MOUTH, src) lust_increase = NORMAL_LUST //RESET IT REE @@ -386,7 +386,7 @@ playlewdinteractionsound(loc, pick('modular_sand/sound/interactions/bang1.ogg', 'modular_sand/sound/interactions/bang2.ogg', 'modular_sand/sound/interactions/bang3.ogg'), 70, 1, -1) - visible_message(message = "\The [src] [message]", ignored_mobs = get_unconsenting()) + visible_message(message = span_lewd("\The [src] [message]"), ignored_mobs = get_unconsenting()) handle_post_sex(NORMAL_LUST, CUM_TARGET_BREASTS, user) /* @@ -397,7 +397,7 @@ to_chat(src, " You need exposed genitals!") return if(!LAZYLEN(holder.equipment)) - to_chat(src, "You'll have to put something in it first, since it seems to be clean") + to_chat(src, span_warning("You'll have to put something in it first, since it seems to be clean")) return var/obj/item/gimme = input(src, "What do you want to remove?", "Remove equipment", null) as null|anything in holder.equipment @@ -411,13 +411,13 @@ var/u_His = p_their() var/list/belly_names = list("stomach", "belly", "gut", "midsection", "rolls") var/list/nuzzles = list( - "rubs [u_His] face all accross [target]'s [pick(belly_names)]", + "rubs [u_His] face all across [target]'s [pick(belly_names)]", "nuzzles [target]'s [pick(belly_names)][pick(list(" lovingly", ""))]", "shoves [u_His] face into [target]'s [pick(belly_names)] and gives it kisses all over", "licks right into [target]'s [pick(list("belly button", "navel"))]" ) - message = "\The [src] [pick(nuzzles)]. " + message = span_lewd("\The [src] [pick(nuzzles)]. ") visible_message(message, ignored_mobs = get_unconsenting()) /mob/living/proc/do_bellyfuck(mob/living/partner) @@ -436,10 +436,10 @@ playlewdinteractionsound(loc, pick('modular_sand/sound/interactions/champ1.ogg', 'modular_sand/sound/interactions/champ2.ogg'), 50, 1, -1) - visible_message(message = "\The [src] [message]", ignored_mobs = get_unconsenting()) + visible_message(message = span_lewd("\The [src] [message]"), ignored_mobs = get_unconsenting()) if(can_penetrating_genital_cum()) handle_post_sex(NORMAL_LUST, CUM_TARGET_BELLY, partner) - //partner.handle_post_sex(NORMAL_LUST, null, src) //don't think we need it fo dis one + //partner.handle_post_sex(NORMAL_LUST, null, src) //don't think we need it for this one /mob/living/proc/do_breastsmother(mob/living/target) var/message @@ -450,7 +450,7 @@ "shoves \the [target]'s whole head into [u_His] cleavage" ) - message = "\The [src] [pick(lines)]" + message = span_lewd("\The [src] [pick(lines)]") visible_message(message, ignored_mobs = get_unconsenting()) playlewdinteractionsound(loc, pick('modular_sand/sound/interactions/bang1.ogg', 'modular_sand/sound/interactions/bang2.ogg', @@ -464,7 +464,7 @@ "has a nice taste of \the [target]'s drenched body", "takes a whiff of \the [target]'s musk and drinks [t_His] warm sweat") - message = "\The [src] [pick(lines)]" + message = span_lewd("\The [src] [pick(lines)]") visible_message(message, ignored_mobs = get_unconsenting()) playlewdinteractionsound(loc, 'modular_sand/sound/interactions/champ_fingering.ogg', 50, 1, -1) @@ -478,7 +478,7 @@ "makes sure to squeeze \the [target]'s face well under [u_His] [pick(musk)] armpit and let them take a whiff" ) - message = "\The [src] [pick(lines)]" + message = span_lewd("\The [src] [pick(lines)]") visible_message(message, ignored_mobs = get_unconsenting()) playlewdinteractionsound(loc, pick( 'modular_sand/sound/interactions/squelch1.ogg', @@ -495,7 +495,7 @@ "goes face deep into \the [target] [pick(musk)] armpit, worshipping it with [u_His] tongue and nose" ) - message = "\The [src] [pick(lines)]" + message = span_lewd("\The [src] [pick(lines)]") visible_message(message, ignored_mobs = get_unconsenting()) playlewdinteractionsound(loc, pick( 'modular_sand/sound/interactions/squelch1.ogg', @@ -527,7 +527,7 @@ ) set_is_fucking(target, CUM_TARGET_ARMPIT, getorganslot(ORGAN_SLOT_PENIS)) - message = "\The [src][pick(lines)]" + message = span_lewd("\The [src][pick(lines)]") visible_message(message, ignored_mobs = get_unconsenting()) playlewdinteractionsound(loc, pick('modular_sand/sound/interactions/bang1.ogg', 'modular_sand/sound/interactions/bang2.ogg', @@ -547,7 +547,7 @@ lines = list( "squeezes [u_His] armpit right into \the [target]'s throbbing [genital_name], massaging its length using [u_His] [pick(musk)]armpit!", "presses [u_His] arm down all over \the [target]'s leaking [genital_name], milking it with [u_His] [pick(musk)] pit!", - "rubs and grinds [u_His] [pick(musk)] arpit back and forth through \the [target]'s [genital_name], deeply squeezing it to the base!" + "rubs and grinds [u_His] [pick(musk)] armpit back and forth through \the [target]'s [genital_name], deeply squeezing it to the base!" ) else if(target.is_topless()) @@ -556,11 +556,11 @@ ) else // https://cdn.discordapp.com/attachments/802990353883070474/962478553117622322/NoName-480p.mp4 lines = list( - "softly tears a hole in the cloth on the back of [u_His] armpit, suffing \the [target]'s whole rod right into it with a [pick(musk)] embrace!" + "softly tears a hole in the cloth on the back of [u_His] armpit, stuffing \the [target]'s whole rod right into it with a [pick(musk)] embrace!" ) target.set_is_fucking(src, CUM_TARGET_ARMPIT, target.getorganslot(ORGAN_SLOT_PENIS)) - message = "\The [src] [pick(lines)]" + message = span_lewd("\The [src] [pick(lines)]") visible_message(message, ignored_mobs = get_unconsenting()) playlewdinteractionsound(loc, pick('modular_sand/sound/interactions/bang1.ogg', 'modular_sand/sound/interactions/bang2.ogg', @@ -577,7 +577,7 @@ if(target.is_fucking(src, CUM_TARGET_BREASTS)) lines = list( "slides [u_His] [pick(GLOB.breast_nouns)], up and down through \the [target]'s throbbing [genital_name]", - "squeezes [u_His] [pick(GLOB.breast_nouns)] through all of \the [target]'s lenght", + "squeezes [u_His] [pick(GLOB.breast_nouns)] through all of \the [target]'s length", "jerks \the [target] off lustfully with [u_His] supple [pick(GLOB.breast_nouns)]" ) else @@ -588,7 +588,7 @@ ) target.set_is_fucking(src, CUM_TARGET_BREASTS, getorganslot(ORGAN_SLOT_PENIS)) - message = "\The [src] [pick(lines)]" + message = span_lewd("\The [src] [pick(lines)]") visible_message(message, ignored_mobs = get_unconsenting()) playlewdinteractionsound(loc, pick('modular_sand/sound/interactions/bang1.ogg', 'modular_sand/sound/interactions/bang2.ogg', @@ -618,7 +618,7 @@ ) target.set_is_fucking(src, NUTS_TO_FACE, getorganslot(ORGAN_SLOT_PENIS)) - message = "\The [src] [pick(lines)]" + message = span_lewd("\The [src] [pick(lines)]") visible_message(message, ignored_mobs = get_unconsenting()) target.handle_post_sex(lust_increase, CUM_TARGET_MOUTH, src) @@ -640,7 +640,7 @@ if(is_fucking(target, CUM_TARGET_URETHRA)) lines = list( - "humps right into \the [target]'s [t_genital_name], stretiching it as their balls slam together", + "humps right into \the [target]'s [t_genital_name], stretching it as their balls slam together", "slides [u_His] [u_genital_name] all the way down \the [target]'s own throbbing [t_genital_name], [t_His] urethra is so tight!", "rams [u_His] [u_genital_name] back and forth through \the [target]'s urethra, giving it a very nice fucking" ) @@ -652,7 +652,7 @@ ) set_is_fucking(target, CUM_TARGET_URETHRA, getorganslot(ORGAN_SLOT_PENIS)) - message = "\The [src] [pick(lines)]" + message = span_lewd("\The [src] [pick(lines)]") visible_message(message, ignored_mobs = get_unconsenting()) playlewdinteractionsound(src, pick(noises), 70, 1, -1) if(can_penetrating_genital_cum()) @@ -674,7 +674,7 @@ ) else if(target.has_breasts(REQUIRE_EXPOSED)) lines = list( - "presses [u_His] throbbing tip against \the [target]'s puffy nipple, forcing the whole lenght all the way in with a wet smack", + "presses [u_His] throbbing tip against \the [target]'s puffy nipple, forcing the whole length all the way in with a wet smack", "stretches \the [target]'s nipple with his fingers, before forcing it open with the whole girth of [u_His] twitching [genital_name]" ) else @@ -687,7 +687,7 @@ if(!is_fucking(target, CUM_TARGET_NIPPLE)) set_is_fucking(target, CUM_TARGET_NIPPLE, getorganslot(ORGAN_SLOT_PENIS)) - message = "\The [src] [pick(lines)]!" + message = span_lewd("\The [src] [pick(lines)]!") visible_message(message, ignored_mobs = get_unconsenting()) playlewdinteractionsound(src, pick('modular_sand/sound/interactions/bang1.ogg', 'modular_sand/sound/interactions/bang2.ogg', @@ -711,13 +711,13 @@ ) else lines = list( - "presses [u_His] tip against \the [target]'s [pick("pudgy ", "soft ", "")] thighs, soon shoving [u_His] whole lenght right in between them", + "presses [u_His] tip against \the [target]'s [pick("pudgy ", "soft ", "")] thighs, soon shoving [u_His] whole length right in between them", "presents [u_His] [genital_name] to \the [target]'s legs, ramming its full size right into [t_His] thigh lock", "smooches \the [target]'s crotch with [u_His] throbbing tip, right before piercing between [t_His] thighs with [u_His] full [genital_name]" ) set_is_fucking(target, CUM_TARGET_THIGHS, getorganslot(ORGAN_SLOT_PENIS)) - message = "\The [src] [pick(lines)]!" + message = span_lewd("\The [src] [pick(lines)]!") visible_message(message, ignored_mobs = get_unconsenting()) playlewdinteractionsound(loc, pick('modular_sand/sound/interactions/bang1.ogg', 'modular_sand/sound/interactions/bang2.ogg', @@ -748,7 +748,7 @@ ) target.set_is_fucking(src, CUM_TARGET_THIGHS, target.getorganslot(ORGAN_SLOT_PENIS)) - message = "\The [src] [pick(lines)]!" + message = span_lewd("\The [src] [pick(lines)]!") visible_message(message, ignored_mobs = get_unconsenting()) playlewdinteractionsound(loc, pick('modular_sand/sound/interactions/bang1.ogg', 'modular_sand/sound/interactions/bang2.ogg', @@ -779,12 +779,12 @@ ) var/list/hell = list( "'s asshole squints as she shoves \the [target]'s face in between [u_His] sweaty [pick(asscheeks)], letting hell go loose!", - " pushes [u_His] [pick(ass)] into \the [target]'s face, [pick(list("[t_His] nose shoved deep in [src]'s musky butthole", "[u_His] asshole sqints"))] as [u_He] [pick(braps)][pick(list("", ", [jiggle]"))]", + " pushes [u_His] [pick(ass)] into \the [target]'s face, [pick(list("[t_His] nose shoved deep in [src]'s musky butthole", "[u_His] asshole squints"))] as [u_He] [pick(braps)][pick(list("", ", [jiggle]"))]", " smothers \the [target]'s whole head in between [u_His][pick(list(" sweaty", "", " musky"))] [pick(asscheeks)], pushing out gallons of pure braps. [pick(list("", "[jiggle]"))]", "'s [pick(ass)] claps against \the [target]'s nose, right before [u_He] [pick(braps)]" ) - message = "\The [src][pick(hell)]" + message = span_lewd("\The [src][pick(hell)]") visible_message(message, ignored_mobs = get_unconsenting(unholy = TRUE)) playlewdinteractionsound(loc, pick(GLOB.brap_noises), 50, 1, -1, ignored_mobs = get_unconsenting(unholy = TRUE)) if(!is_fucking(target, GRINDING_FACE_WITH_ANUS)) @@ -818,7 +818,7 @@ " [pick(braps)] into \the [target]'s [genital_name]" ) - message = "\The [src][pick(hell)]" + message = span_lewd("\The [src][pick(hell)]") visible_message(message, ignored_mobs = get_unconsenting(unholy = TRUE)) playlewdinteractionsound(loc, pick(GLOB.brap_noises), 50, 1, -1, ignored_mobs = get_unconsenting(unholy = TRUE)) if(!target.is_fucking(src, CUM_TARGET_ANUS)) @@ -862,7 +862,7 @@ "shoves their [genital_name] deep inside of \the [target]'s [pick(ass)], [t_He] [pick(braps)][pick("", ". [jiggle]")]") set_is_fucking(target, CUM_TARGET_ANUS, getorganslot(ORGAN_SLOT_PENIS)) - message = "\The [src] [pick(hell)]" + message = span_lewd("\The [src] [pick(hell)]") visible_message(message, ignored_mobs = get_unconsenting(unholy = TRUE)) playlewdinteractionsound(target.loc, pick(GLOB.brap_noises), 50, 1, -1, ignored_mobs = get_unconsenting(unholy = TRUE)) playlewdinteractionsound(target.loc, pick('modular_sand/sound/interactions/bang1.ogg', @@ -897,7 +897,7 @@ ) set_is_fucking(target, GRINDING_FACE_WITH_ANUS, null) - message = "\The [src] [pick(hell)]" + message = span_lewd("\The [src] [pick(hell)]") visible_message(message, ignored_mobs = get_unconsenting(unholy = TRUE)) playlewdinteractionsound(target.loc, pick(GLOB.brap_noises), 50, 1, -1, ignored_mobs = get_unconsenting(unholy = TRUE)) playlewdinteractionsound(target.loc, 'modular_sand/sound/interactions/champ_fingering.ogg', 50, 1, -1, ignored_mobs = get_unconsenting(unholy = TRUE)) @@ -920,7 +920,7 @@ "smothers \the [target]'s face in between [u_His] musky, dirty asscheeks, [pick(list("", "letting out a [pick(stank)] fart and"))] sliding a monster turd right into [t_His] mouth" ) - message = "\The [src] [pick(hell)]" + message = span_lewd("\The [src] [pick(hell)]") visible_message(message, ignored_mobs = get_unconsenting(unholy = TRUE)) playlewdinteractionsound(loc, pick(GLOB.brap_noises), 50, 1, -1, ignored_mobs = get_unconsenting(unholy = TRUE)) if(!is_fucking(target, GRINDING_FACE_WITH_ANUS)) @@ -951,7 +951,7 @@ "shits uncontrollably all over \the [target]'s [genital_name][prob(50) ? "" : ". [jiggle]"]" ) - message = "\The [src] [pick(hell)]" + message = span_lewd("\The [src] [pick(hell)]") visible_message(message, ignored_mobs = get_unconsenting(unholy = TRUE)) playlewdinteractionsound(loc, pick(GLOB.brap_noises), 50, 1, -1, ignored_mobs = get_unconsenting(unholy = TRUE)) if(!target.is_fucking(src, CUM_TARGET_ANUS)) @@ -985,11 +985,11 @@ else hell = list( "can already smell the stench as [u_He] works [u_His] [genital_name] into \the [target]'s dung hole, being received by warm, wet and nasty feeling all over it.", - "grabs the base of [u_His] twitching [genital_name] and presses the tip into \the [target]'s asshole, immediately shoving it right into a fat and moisty log", + "grabs the base of [u_His] twitching [genital_name] and presses the tip into \the [target]'s asshole, immediately shoving it right into a fat and moist log", "shoves [genital_name] deep inside of \the [target]'s [pick(ass)], [t_He] releases a massive amount of mush to greet the rod[pick("", ". [jiggle]")]") set_is_fucking(target, CUM_TARGET_ANUS, getorganslot(ORGAN_SLOT_PENIS)) - message = "\The [src] [pick(hell)]" + message = span_lewd("\The [src] [pick(hell)]") visible_message(message, ignored_mobs = get_unconsenting(unholy = TRUE), ignored_mobs = get_unconsenting(unholy = TRUE)) playlewdinteractionsound(target.loc, pick(GLOB.brap_noises), 70, 1, -1) playlewdinteractionsound(target.loc, pick('modular_sand/sound/interactions/bang1.ogg', @@ -1024,7 +1024,7 @@ ) set_is_fucking(target, GRINDING_FACE_WITH_ANUS, null) - message = "\The [src] [pick(hell)]" + message = span_lewd("\The [src] [pick(hell)]") visible_message(message, ignored_mobs = get_unconsenting(unholy = TRUE)) playlewdinteractionsound(target.loc, pick(GLOB.brap_noises), 50, 1, -1, ignored_mobs = get_unconsenting(unholy = TRUE)) playlewdinteractionsound(target.loc, 'modular_sand/sound/interactions/champ_fingering.ogg', 50, 1, -1, ignored_mobs = get_unconsenting(unholy = TRUE)) @@ -1039,7 +1039,7 @@ "lets out a moan of relief as yellow rain starts pouring over \the [target]" ) - message = "\The [src] [pick(hell)]" + message = span_lewd("\The [src] [pick(hell)]") visible_message(message, ignored_mobs = get_unconsenting(unholy = TRUE)) if(get_lust() < 10) add_lust(10) @@ -1055,7 +1055,7 @@ "lets out a moan of relief as yellow rain starts pouring in between \the [target]'s lips" ) - message = "\The [src] [pick(hell)]" + message = span_lewd("\The [src] [pick(hell)]") visible_message(message, ignored_mobs = get_unconsenting(unholy = TRUE)) if(!is_fucking(target, CUM_TARGET_MOUTH)) set_is_fucking(target, CUM_TARGET_MOUTH, pee_pee) diff --git a/modular_splurt/code/datums/interactions/lewd/lewd_datums.dm b/modular_splurt/code/datums/interactions/lewd/lewd_datums.dm index 88f41ce811..ca6fddf6e8 100644 --- a/modular_splurt/code/datums/interactions/lewd/lewd_datums.dm +++ b/modular_splurt/code/datums/interactions/lewd/lewd_datums.dm @@ -6,7 +6,7 @@ return if(prob(50)) - target.visible_message("\The [target]'s ass honks!") + target.visible_message(span_lewd("\The [target]'s ass honks!")) playlewdinteractionsound(target, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -20,7 +20,7 @@ "\The [user]'s grope squeezes a honk out of \the [target]'s [pick(GLOB.breast_nouns)]!" ) if(prob(50)) - target.visible_message("[pick(honks)]") + target.visible_message(span_lewd("[pick(honks)]")) playlewdinteractionsound(target, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -30,7 +30,7 @@ return if(prob(50)) - target.visible_message("\The [target]'s clussy honks[pick(" loudly", "")]!") + target.visible_message(span_lewd("\The [target]'s clussy honks[pick(" loudly", "")]!")) playlewdinteractionsound(target, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -41,7 +41,7 @@ if(prob(50)) var/genital_name = target.get_penetrating_genital_name(TRUE) - target.visible_message("\The [target]'s [genital_name] honks[pick(" loudly", "")]!") + target.visible_message(span_lewd("\The [target]'s [genital_name] honks[pick(" loudly", "")]!")) playlewdinteractionsound(target, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -51,7 +51,7 @@ return if(prob(50) && isclownjob(target)) - target.visible_message("\The [target]'s clussy honks[pick(" loudly", "")]!") + target.visible_message(span_lewd("\The [target]'s clussy honks[pick(" loudly", "")]!")) playlewdinteractionsound(target, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -61,7 +61,7 @@ return if(prob(50) && isclownjob(target)) - target.visible_message("\The [target]'s fun hole honks[pick(" loudly", "")]!") + target.visible_message(span_lewd("\The [target]'s fun hole honks[pick(" loudly", "")]!")) playlewdinteractionsound(target, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -71,7 +71,7 @@ return if(prob(50)) - target.visible_message("\The [target]'s clussy honks[pick(" loudly", "")]!") + target.visible_message(span_lewd("\The [target]'s clussy honks[pick(" loudly", "")]!")) playlewdinteractionsound(target, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -81,7 +81,7 @@ return if(prob(50)) - target.visible_message("\The [target]'s fun hole honks[pick(" loudly", "")]!") + target.visible_message(span_lewd("\The [target]'s fun hole honks[pick(" loudly", "")]!")) playlewdinteractionsound(target, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -92,7 +92,7 @@ if(prob(50)) var/genital_name = target.get_penetrating_genital_name(TRUE) - user.visible_message("\The [user]'s [genital_name] honks[pick(" loudly", "")]!") + user.visible_message(span_lewd("\The [user]'s [genital_name] honks[pick(" loudly", "")]!")) playlewdinteractionsound(user, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -108,7 +108,7 @@ if(prob(50)) var/genital_name = user.get_penetrating_genital_name(TRUE) - user.visible_message("\The [user]'s [genital_name] honks[pick(" loudly", "")]!") + user.visible_message(span_lewd("\The [user]'s [genital_name] honks[pick(" loudly", "")]!")) playlewdinteractionsound(user, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -119,7 +119,7 @@ if(prob(50)) var/genital_name = user.get_penetrating_genital_name(TRUE) - user.visible_message("\The [user]'s [genital_name] honks[pick(" loudly", "")]!") + user.visible_message(span_lewd("\The [user]'s [genital_name] honks[pick(" loudly", "")]!")) playlewdinteractionsound(user, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -129,7 +129,7 @@ return if(prob(50) && isclownjob(target)) - target.visible_message("\The [target]'s [pick(GLOB.breast_nouns)] honk[pick(" loudly", "")]!") + target.visible_message(span_lewd("\The [target]'s [pick(GLOB.breast_nouns)] honk[pick(" loudly", "")]!")) playlewdinteractionsound(target, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -139,7 +139,7 @@ return if(prob(50) && isclownjob(user)) - user.visible_message("\The [user]'s clussy honks[pick(" loudly", "")]!") + user.visible_message(span_lewd("\The [user]'s clussy honks[pick(" loudly", "")]!")) playlewdinteractionsound(user, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -149,7 +149,7 @@ return if(prob(50) && isclownjob(user)) - target.visible_message("\The [user]'s fun hole honks[pick(" loudly", "")]!") + target.visible_message(span_lewd("\The [user]'s fun hole honks[pick(" loudly", "")]!")) playlewdinteractionsound(user, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -159,7 +159,7 @@ return if(prob(50)) - user.visible_message("\The [user]'s fun hole honks[pick(" loudly", "")]!") + user.visible_message(span_lewd("\The [user]'s fun hole honks[pick(" loudly", "")]!")) playlewdinteractionsound(user, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -170,7 +170,7 @@ if(prob(50)) var/genital_name = user.get_penetrating_genital_name(TRUE) - user.visible_message("\The [user]'s [genital_name] honks[pick(" loudly", "")]!") + user.visible_message(span_lewd("\The [user]'s [genital_name] honks[pick(" loudly", "")]!")) playlewdinteractionsound(user, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -181,7 +181,7 @@ if(prob(50)) var/genital_name = user.get_penetrating_genital_name(TRUE) - user.visible_message("\The [user]'s [genital_name] honks[pick(" loudly", "")]!") + user.visible_message(span_lewd("\The [user]'s [genital_name] honks[pick(" loudly", "")]!")) playlewdinteractionsound(user, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -192,7 +192,7 @@ if(prob(50)) var/genital_name = target.get_penetrating_genital_name(TRUE) - target.visible_message("\The [target]'s [genital_name] honks[pick(" loudly", "")]!") + target.visible_message(span_lewd("\The [target]'s [genital_name] honks[pick(" loudly", "")]!")) playlewdinteractionsound(target, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -203,7 +203,7 @@ if(prob(50)) var/genital_name = target.get_penetrating_genital_name(TRUE) - target.visible_message("\The [target]'s [genital_name] honks[pick(" loudly", "")]!") + target.visible_message(span_lewd("\The [target]'s [genital_name] honks[pick(" loudly", "")]!")) playlewdinteractionsound(target, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -213,7 +213,7 @@ return if(prob(50)) - user.visible_message("\The [user]'s balls honk[pick(" loudly", "")]!") + user.visible_message(span_lewd("\The [user]'s balls honk[pick(" loudly", "")]!")) playlewdinteractionsound(user, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -223,7 +223,7 @@ return if(prob(50)) - target.visible_message("\The [target]'s balls honk[pick(" loudly", "")]!") + target.visible_message(span_lewd("\The [target]'s balls honk[pick(" loudly", "")]!")) playlewdinteractionsound(target, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -234,7 +234,7 @@ if(prob(50)) var/genital_name = user.get_penetrating_genital_name(TRUE) - user.visible_message("\The [user]'s [genital_name] honks[pick(" loudly", "")]!") + user.visible_message(span_lewd("\The [user]'s [genital_name] honks[pick(" loudly", "")]!")) playlewdinteractionsound(user, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -245,7 +245,7 @@ if(prob(50)) var/genital_name = user.get_penetrating_genital_name(TRUE) - user.visible_message("\The [user]'s [genital_name] honks[pick(" loudly", "")]!") + user.visible_message(span_lewd("\The [user]'s [genital_name] honks[pick(" loudly", "")]!")) playlewdinteractionsound(user, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -273,7 +273,7 @@ return if(prob(50)) - user.visible_message("\The [user]'s [pick(GLOB.breast_nouns)] honk[pick(" loudly", "")]!") + user.visible_message(span_lewd("\The [user]'s [pick(GLOB.breast_nouns)] honk[pick(" loudly", "")]!")) playlewdinteractionsound(user, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -284,7 +284,7 @@ if(prob(50)) var/genital_name = user.get_penetrating_genital_name(TRUE) - user.visible_message("\The [user]'s [genital_name] honks[pick(" loudly", "")]!") + user.visible_message(span_lewd("\The [user]'s [genital_name] honks[pick(" loudly", "")]!")) playlewdinteractionsound(user, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -294,7 +294,7 @@ return if(prob(50)) - user.visible_message("\The [user]'s fun hole honks[pick(" loudly", "")]!") + user.visible_message(span_lewd("\The [user]'s fun hole honks[pick(" loudly", "")]!")) playlewdinteractionsound(user, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -304,7 +304,7 @@ return if(prob(50)) - user.visible_message("\The [user]'s clussy honks[pick(" loudly", "")]!") + user.visible_message(span_lewd("\The [user]'s clussy honks[pick(" loudly", "")]!")) playlewdinteractionsound(user, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -319,7 +319,7 @@ "\The [user]'s grope squeezes a honk out of [u_His] own [pick(GLOB.breast_nouns)]!" ) if(prob(50)) - user.visible_message("[pick(honks)]") + user.visible_message(span_lewd("[pick(honks)]")) playlewdinteractionsound(user, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -345,7 +345,7 @@ "\The [user]'s suck squeezes a honk out of [u_His] own [pick(GLOB.breast_nouns)]!" ) if(prob(50)) - user.visible_message("[pick(honks)]") + user.visible_message(span_lewd("[pick(honks)]")) playlewdinteractionsound(user, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -370,7 +370,7 @@ "\The [user]'s suck squeezes a honk out of \the [target]'s [pick(GLOB.breast_nouns)]!" ) if(prob(50)) - user.visible_message("[pick(honks)]") + user.visible_message(span_lewd("[pick(honks)]")) playlewdinteractionsound(target, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -401,7 +401,7 @@ if(prob(50)) var/genital_name = user.get_penetrating_genital_name(TRUE) - user.visible_message("\The [user]'s [genital_name] honks[pick(" loudly", "")]!") + user.visible_message(span_lewd("\The [user]'s [genital_name] honks[pick(" loudly", "")]!")) playlewdinteractionsound(user, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -433,7 +433,7 @@ return if(prob(50)) - user.visible_message("\The [user]'s [pick(GLOB.breast_nouns)] honk[pick(" loudly", "")]!") + user.visible_message(span_lewd("\The [user]'s [pick(GLOB.breast_nouns)] honk[pick(" loudly", "")]!")) playlewdinteractionsound(user, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -451,7 +451,7 @@ return if(prob(50) && isclownjob(target)) - target.visible_message("\The [target]'s belly button honks[pick(" loudly", "")]!") + target.visible_message(span_lewd("\The [target]'s belly button honks[pick(" loudly", "")]!")) playlewdinteractionsound(target, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -495,7 +495,7 @@ return if(prob(50)) - user.visible_message("\The [user]'s [pick(GLOB.breast_nouns)] honk[pick(" loudly", "")]!") + user.visible_message(span_lewd("\The [user]'s [pick(GLOB.breast_nouns)] honk[pick(" loudly", "")]!")) playlewdinteractionsound(user, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -546,7 +546,7 @@ if(prob(50)) var/genital_name = user.get_penetrating_genital_name(TRUE) - user.visible_message("\The [user]'s [genital_name] honks[pick(" loudly", "")]!") + user.visible_message(span_lewd("\The [user]'s [genital_name] honks[pick(" loudly", "")]!")) playlewdinteractionsound(user, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -565,7 +565,7 @@ if(prob(50)) var/genital_name = user.get_penetrating_genital_name(TRUE) - user.visible_message("\The [user]'s [genital_name] honks[pick(" loudly", "")]!") + user.visible_message(span_lewd("\The [user]'s [genital_name] honks[pick(" loudly", "")]!")) playlewdinteractionsound(user, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -585,7 +585,7 @@ return if(prob(50)) - user.visible_message("\The [user]'s [pick(GLOB.breast_nouns)] honk[pick(" loudly", "")]!") + user.visible_message(span_lewd("\The [user]'s [pick(GLOB.breast_nouns)] honk[pick(" loudly", "")]!")) playlewdinteractionsound(user, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -643,7 +643,7 @@ return if(prob(50) && isclownjob(target)) - target.visible_message("\The [target]'s [pick(GLOB.breast_nouns)] honk[pick(" loudly", "")]!") + target.visible_message(span_lewd("\The [target]'s [pick(GLOB.breast_nouns)] honk[pick(" loudly", "")]!")) playlewdinteractionsound(target, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -665,7 +665,7 @@ if(prob(50)) var/genital_name = user.get_penetrating_genital_name(TRUE) - user.visible_message("\The [user]'s [genital_name] honks[pick(" loudly", "")]!") + user.visible_message(span_lewd("\The [user]'s [genital_name] honks[pick(" loudly", "")]!")) playlewdinteractionsound(user, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -687,7 +687,7 @@ if(prob(50)) var/genital_name = target.get_penetrating_genital_name(TRUE) - target.visible_message("\The [target]'s [genital_name] honks[pick(" loudly", "")]!") + target.visible_message(span_lewd("\The [target]'s [genital_name] honks[pick(" loudly", "")]!")) playlewdinteractionsound(target, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -736,7 +736,7 @@ return if(prob(50) && isclownjob(target)) - target.visible_message("\The [target]'s fun hole honks[pick(" loudly", "")]!") + target.visible_message(span_lewd("\The [target]'s fun hole honks[pick(" loudly", "")]!")) playlewdinteractionsound(target, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -790,7 +790,7 @@ return if(prob(50) && isclownjob(target)) - target.visible_message("\The [target]'s fun hole honks[pick(" loudly", "")]!") + target.visible_message(span_lewd("\The [target]'s fun hole honks[pick(" loudly", "")]!")) playlewdinteractionsound(target, 'sound/items/bikehorn.ogg', 40, 1, -1) @@ -828,6 +828,6 @@ /datum/interaction/lewd/unholy/piss_mouth/display_interaction(mob/living/carbon/user, mob/living/target) if(!istype(user)) - to_chat(user, "Erm, you may wanna be a carbon entity fo dat") + to_chat(user, span_warning("Erm, you may wanna be a carbon entity fo dat")) return user.piss_mouth(target) diff --git a/modular_splurt/code/datums/interactions/lewd/lewd_interactions.dm b/modular_splurt/code/datums/interactions/lewd/lewd_interactions.dm index 9be4344e52..bb1f66e7ea 100644 --- a/modular_splurt/code/datums/interactions/lewd/lewd_interactions.dm +++ b/modular_splurt/code/datums/interactions/lewd/lewd_interactions.dm @@ -18,17 +18,17 @@ if(REQUIRE_EXPOSED) if(!user.has_belly(REQUIRE_EXPOSED)) if(!silent) - to_chat(user, "Your belly needs to be exposed.") + to_chat(user, span_warning("Your belly needs to be exposed.")) return FALSE if(REQUIRE_ANY) if(!user.has_belly(REQUIRE_ANY)) if(!silent) - to_chat(user, "Your belly seems to be too flat for that.") + to_chat(user, span_warning("Your belly seems to be too flat for that.")) return FALSE if(REQUIRE_UNEXPOSED) if(!user.has_belly(REQUIRE_UNEXPOSED)) if(!silent) - to_chat(user, "Your belly needs to be unexposed.") + to_chat(user, span_warning("Your belly needs to be unexposed.")) return FALSE if(require_user_legs) @@ -36,22 +36,22 @@ if(REQUIRE_EXPOSED) if(!user.has_legs(REQUIRE_EXPOSED)) if(!silent) - to_chat(user, "Your legs need to be exposed.") + to_chat(user, span_warning("Your legs need to be exposed.")) return FALSE if(REQUIRE_UNEXPOSED) if(!user.has_legs(REQUIRE_UNEXPOSED)) if(!silent) - to_chat(user, "Your legs need to be unexposed.") + to_chat(user, span_warning("Your legs need to be unexposed.")) return FALSE if(REQUIRE_ANY) if(!user.has_legs(REQUIRE_ANY)) if(!silent) - to_chat(user, "You don't have enough legs.") + to_chat(user, span_warning("You don't have enough legs.")) return FALSE if(require_user_num_legs && (user.has_legs() < require_user_num_legs)) if(!silent) - to_chat(user, "Your don't have enough legs.") + to_chat(user, span_warning("Your don't have enough legs.")) return FALSE @@ -60,7 +60,7 @@ if(cli) if(cli.prefs.unholypref == "No") if(!silent) - to_chat(user, "That's way too much for you.") + to_chat(user, span_warning("That's way too much for you.")) return FALSE . = ..() @@ -70,17 +70,17 @@ if(REQUIRE_EXPOSED) if(!target.has_belly(REQUIRE_EXPOSED)) if(!silent) - to_chat(user, "Their belly needs to be exposed.") + to_chat(user, span_warning("Their belly needs to be exposed.")) return FALSE if(REQUIRE_ANY) if(!target.has_belly(REQUIRE_ANY)) if(!silent) - to_chat(user, "Their belly seems to be too flat for that.") + to_chat(user, span_warning("Their belly seems to be too flat for that.")) return FALSE if(REQUIRE_UNEXPOSED) if(!target.has_belly(REQUIRE_UNEXPOSED)) if(!silent) - to_chat(user, "Their belly needs to be unexposed.") + to_chat(user, span_warning("Their belly needs to be unexposed.")) return FALSE if(require_target_legs) @@ -88,22 +88,22 @@ if(REQUIRE_EXPOSED) if(!target.has_legs(REQUIRE_EXPOSED)) if(!silent) - to_chat(user, "[target.p_their()] legs need to be exposed.") + to_chat(user, span_warning("[target.p_their()] legs need to be exposed.")) return FALSE if(REQUIRE_UNEXPOSED) if(!target.has_legs(REQUIRE_UNEXPOSED)) if(!silent) - to_chat(user, "[target.p_their()] legs need to be unexposed.") + to_chat(user, span_warning("[target.p_their()] legs need to be unexposed.")) return FALSE if(REQUIRE_ANY) if(!target.has_legs(REQUIRE_ANY)) if(!silent) - to_chat(user, "[target.p_they()] [target.p_do()]n't have enough legs.") + to_chat(user, span_warning("[target.p_they()] [target.p_do()]n't have enough legs.")) return FALSE if(require_target_num_legs && (target.has_legs() < require_target_num_legs)) if(!silent) - to_chat(user, "[target.p_they()] [target.p_do()]n't have enough legs.") + to_chat(user, span_warning("[target.p_they()] [target.p_do()]n't have enough legs.")) return FALSE if(unholy) @@ -111,7 +111,7 @@ if(cli) if(target.client.prefs.unholypref == "No") if(!silent) - to_chat(user, "For some reason, you don't want to do this to [target].") + to_chat(user, span_warning("For some reason, you don't want to do this to [target].")) return FALSE . = ..() diff --git a/modular_splurt/code/datums/mood_events/drug_events.dm b/modular_splurt/code/datums/mood_events/drug_events.dm index 419d39f3d9..3cbe25cf67 100644 --- a/modular_splurt/code/datums/mood_events/drug_events.dm +++ b/modular_splurt/code/datums/mood_events/drug_events.dm @@ -1,8 +1,8 @@ /datum/mood_event/cope mood_change = 10 - description = "I feel like I\'m finally coping!" + description = span_nicegreen("I feel like I\'m finally coping!") /datum/mood_event/moth_in_chief - description = "The mantle rests well upon your shoulders?\n" + description = span_nicegreen("The mantle rests well upon your shoulders?") mood_change = 10 timeout = 5 MINUTES diff --git a/modular_splurt/code/datums/mood_events/generic_negative_events.dm b/modular_splurt/code/datums/mood_events/generic_negative_events.dm index 64b9598c67..204bc9c5cd 100644 --- a/modular_splurt/code/datums/mood_events/generic_negative_events.dm +++ b/modular_splurt/code/datums/mood_events/generic_negative_events.dm @@ -1,5 +1,5 @@ /datum/mood_event/masked_mook_incomplete - description = "I feel incomplete without a gas mask...\n" + description = span_warning("I feel incomplete without a gas mask...") mood_change = -4 /datum/mood_event/creampie/cheesed diff --git a/modular_splurt/code/datums/mood_events/generic_positive_events.dm b/modular_splurt/code/datums/mood_events/generic_positive_events.dm index f360580c39..0696042bd2 100644 --- a/modular_splurt/code/datums/mood_events/generic_positive_events.dm +++ b/modular_splurt/code/datums/mood_events/generic_positive_events.dm @@ -1,22 +1,22 @@ /datum/mood_event/lewd_headpat - description = "I love headpats so much!\n" + description = span_nicegreen("I love headpats so much!") mood_change = 3 timeout = 2 MINUTES /datum/mood_event/qareen_bliss - description = "So.. horny...\n" + description = span_umbra("So.. horny...") mood_change = 5 /datum/mood_event/qareen_bliss/add_effects() - description = "Must.. breed. , [pick("Nngggghh", "Can't.. think.", "It feels so good.", "Need.. fuck.")]...\n" + description = span_umbra("Must.. breed. , [pick("Nngggghh", "Can't.. think.", "It feels so good.", "Need.. fuck.")]...") /datum/mood_event/masked_mook - description = "I feel more complete with gas mask on.\n" + description = span_nicegreen("I feel more complete with gas mask on.") mood_change = 1 /datum/mood_event/nudist_positive - description = "I'm delighted to not be constricted by clothing.\n" + description = span_nicegreen("I'm delighted to not be constricted by clothing.") mood_change = 1 /datum/mood_event/dorsualiphobic_mood_positive - description = "Nobody will know if I'm wearing a backpack or not.\n" + description = span_nicegreen("Nobody will know if I'm wearing a backpack or not.") mood_change = 1 diff --git a/modular_splurt/code/datums/mood_events/needs_events.dm b/modular_splurt/code/datums/mood_events/needs_events.dm index 3cce41244d..6b92548f72 100644 --- a/modular_splurt/code/datums/mood_events/needs_events.dm +++ b/modular_splurt/code/datums/mood_events/needs_events.dm @@ -11,6 +11,6 @@ mood_change = -20 /datum/mood_event/cum_stuffed - description = "It feels so good inside me!\n" + description = span_nicegreen("It feels so good inside me!") mood_change = 8 timeout = 5 MINUTES diff --git a/modular_splurt/code/datums/mood_events/preg_events.dm b/modular_splurt/code/datums/mood_events/preg_events.dm index 35dcadfcd4..b5ccd1444f 100644 --- a/modular_splurt/code/datums/mood_events/preg_events.dm +++ b/modular_splurt/code/datums/mood_events/preg_events.dm @@ -1,8 +1,8 @@ /datum/mood_event/pregnant_negative - description = "THE BABY IS COMING OUT...\n" + description = span_boldwarning("THE BABY IS COMING OUT...") mood_change = -7 /datum/mood_event/pregnant_positive - description = "The baby came out...phew\n" + description = span_nicegreen("The baby came out...phew") mood_change = 3 timeout = 2 MINUTES diff --git a/modular_splurt/code/datums/traits/good.dm b/modular_splurt/code/datums/traits/good.dm index e23f92cfe3..b305c79997 100644 --- a/modular_splurt/code/datums/traits/good.dm +++ b/modular_splurt/code/datums/traits/good.dm @@ -3,8 +3,8 @@ desc = "Your body is abnormally enduring and can take 10% more damage." value = 4 medical_record_text = "Patient has an abnormally high capacity for injury." - gain_text = "You feel very sturdy." - lose_text = "You feel less sturdy." + gain_text = span_notice("You feel very sturdy.") + lose_text = span_notice("You feel less sturdy.") /datum/quirk/tough/add() quirk_holder.maxHealth *= 1.1 @@ -20,8 +20,8 @@ value = 2 //Is not actually THAT good. Does not grant breathing and does stamina damage to the point you are unable to attack. Crippling on lavaland, but you'll survive. Is not a replacement for SEVA suits for this reason. Can be adjusted. mob_trait = TRAIT_ASHRESISTANCE medical_record_text = "Patient has an abnormally thick epidermis." - gain_text = "You feel resistant to burning brimstone." - lose_text = "You feel less as if your flesh is more flamamble." + gain_text = span_notice("You feel resistant to burning brimstone.") + lose_text = span_notice("You feel less as if your flesh is more flamamble.") /* --FALLBACK SYSTEM INCASE THE TRAIT FAILS TO WORK. Do NOT enable this without editing ash_storm.dm to deal stamina damage with ash immunity. /datum/quirk/ashresistance/add() @@ -37,8 +37,8 @@ name = "Dominant Aura" desc = "Your mere presence is assertive enough to appear as powerful to other people, so much in fact that the weaker kind can't help but throw themselves at your feet at the snap of a finger." value = 1 - gain_text = "You feel like making someone your pet." - lose_text = "You feel less assertive." + gain_text = span_notice("You feel like making someone your pet.") + lose_text = span_notice("You feel less assertive.") /datum/quirk/dominant_aura/add() . = ..() @@ -113,15 +113,15 @@ value = 1 medical_record_text = "Patient has attempted to cover the room in webs, claiming to be \"making a nest\"." mob_trait = TRAIT_ARACHNID - gain_text = "You feel a strange sensation near your anus..." - lose_text = "You feel like you can't spin webs anymore..." + gain_text = span_notice("You feel a strange sensation near your anus...") + lose_text = span_notice("You feel like you can't spin webs anymore...") processing_quirk = TRUE /datum/quirk/arachnid/add() . = ..() var/mob/living/carbon/human/H = quirk_holder if(is_species(H,/datum/species/arachnid)) - to_chat(H, "As an arachnid, this quirk does nothing for you, as these abilities are innate to your species.") + to_chat(H, span_warning("As an arachnid, this quirk does nothing for you, as these abilities are innate to your species.")) return var/datum/action/innate/spin_web/SW = new var/datum/action/innate/spin_cocoon/SC = new diff --git a/modular_splurt/code/datums/traits/negative.dm b/modular_splurt/code/datums/traits/negative.dm index a7a72f4f7a..04a1c1825d 100644 --- a/modular_splurt/code/datums/traits/negative.dm +++ b/modular_splurt/code/datums/traits/negative.dm @@ -78,15 +78,15 @@ desc = "Due to the shape of your hands, width of your fingers or just not having fingers at all, you're unable to fire guns without accommodation." value = -2 mob_trait = TRAIT_CHUNKYFINGERS - gain_text = "Your fingers feel... thick." - lose_text = "Your fingers feel normal again." + gain_text = span_notice("Your fingers feel... thick.") + lose_text = span_notice("Your fingers feel normal again.") /datum/quirk/illiterate name = "Illiterate" desc = "You can't read nor write, plain and simple." value = -1 mob_trait = TRAIT_ILLITERATE - gain_text = "The knowledge of how to read seems to escape from you." + gain_text = span_notice("The knowledge of how to read seems to escape from you.") lose_text = "Written words suddenly make sense again." /datum/quirk/flimsy @@ -109,8 +109,8 @@ name = "Hypersensitive" desc = "For better or worse, everything seems to affect your mood more than it should." value = -1 - gain_text = "You seem to make a big deal out of everything." - lose_text = "You don't seem to make a big deal out of everything anymore." + gain_text = span_danger("You seem to make a big deal out of everything.") + lose_text = span_notice("You don't seem to make a big deal out of everything anymore.") mood_quirk = TRUE //yogs medical_record_text = "Patient demonstrates a high level of emotional volatility." @@ -135,7 +135,7 @@ desc = "For one reason or another, you're totally obsessed with cum. The heat of it, the smell... its taste... It's quite simply euphoric." value = 0 gain_text = "You suddenly start craving some seed inside of you!" - lose_text = "Cum didn't even taste that good, anyways." + lose_text = span_danger("Cum didn't even taste that good, anyways.") medical_record_text = "Patient seems to have an unhealthy psychological obsession with seminal fluids." var/craving_after = 15 MINUTES var/timer @@ -151,7 +151,7 @@ "Some jizz wouldn't be so bad right now!",\ "You're starting to long for some more cum..." ) - to_chat(quirk_holder, "[pick(hungry_phrases)]") + to_chat(quirk_holder, span_love("[pick(hungry_phrases)]")) if(quirk_holder.stat == CONSCIOUS) quirk_holder.emote("sigh") @@ -175,8 +175,8 @@ name = "Hungry And Thirsty" desc = "You find yourself unusually hungry and thirsty. Gotta eat and drink twice as much as normal." value = -1 - gain_text = "You're starting to feel hungrier and thirstier a lot faster." - lose_text = "Your craving for food and water begins dying down." + gain_text = span_danger("You're starting to feel hungrier and thirstier a lot faster.") + lose_text = span_notice("Your craving for food and water begins dying down.") medical_record_text = "Patient reports eating twice as many meals per day than usual for their species." /datum/quirk/hungry/add() diff --git a/modular_splurt/code/datums/traits/neutral.dm b/modular_splurt/code/datums/traits/neutral.dm index 4bc47c056d..ef6552c70c 100644 --- a/modular_splurt/code/datums/traits/neutral.dm +++ b/modular_splurt/code/datums/traits/neutral.dm @@ -5,15 +5,15 @@ desc = "You are aroused by suffocation." value = 0 mob_trait = TRAIT_CHOKE_SLUT - gain_text = "You feel like you want to feel fingers around your neck, choking you until you pass out or make a mess... Maybe both." - lose_text = "Seems you don't have a kink for suffocation anymore." + gain_text = span_notice("You feel like you want to feel fingers around your neck, choking you until you pass out or make a mess... Maybe both.") + lose_text = span_notice("Seems you don't have a kink for suffocation anymore.") /datum/quirk/pharmacokinesis //Supposed to prevent unwanted organ additions. But i don't think it's really working rn name = "Acute Hepatic Pharmacokinesis" //copypasting dumbo desc = "You have a genetic disorder that causes Incubus Draft and Succubus Milk to be absorbed by your liver instead." value = 0 mob_trait = TRAIT_PHARMA - lose_text = "Your liver feels... different, somehow." + lose_text = span_notice("Your liver feels... different, somehow.") var/active = FALSE var/power = 0 var/cachedmoveCalc = 1 @@ -23,16 +23,16 @@ desc = "You've never skipped ass day. You are completely immune to all forms of ass slapping and anyone who tries to slap your rock hard ass usually gets a broken hand." value = 0 mob_trait = TRAIT_STEEL_ASS - gain_text = "Your ass rivals those of golems." - lose_text = "Your butt feels more squishy and slappable." + gain_text = span_notice("Your ass rivals those of golems.") + lose_text = span_notice("Your butt feels more squishy and slappable.") /datum/quirk/cursed_blood name = "Cursed Blood" desc = "Your lineage is cursed with the paleblood curse. Best to stay away from holy water... Hell water, on the other hand..." value = 0 mob_trait = TRAIT_CURSED_BLOOD - gain_text = "A curse from a land where men return as beasts runs deep in your blood." - lose_text = "You feel the weight of the curse in your blood finally gone." + gain_text = span_notice("A curse from a land where men return as beasts runs deep in your blood.") + lose_text = span_notice("You feel the weight of the curse in your blood finally gone.") medical_record_text = "Patient suffers from an unknown type of aversion to holy reagents. Keep them away from a chaplain." /datum/quirk/headpat_hater @@ -40,8 +40,8 @@ desc = "You don't seem to show much care for being touched. Whether it's because you're reserved or due to self control, others touching your head won't make you wag your tail should you possess one, and the action may even attract your ire." mob_trait = TRAIT_DISTANT value = 0 - gain_text = "Others' touches begin to make your blood boil..." - lose_text = "Having your head pet doesn't sound so bad right about now..." + gain_text = span_notice("Others' touches begin to make your blood boil...") + lose_text = span_notice("Having your head pet doesn't sound so bad right about now...") medical_record_text = "Patient cares little with or dislikes being touched." /datum/quirk/headpat_slut @@ -49,8 +49,8 @@ desc = "You love the feeling of others touching your head! Maybe a little too much, actually... Others patting your head will provide a bigger mood boost and cause aroused reactions." mob_trait = TRAIT_HEADPAT_SLUT value = 0 - gain_text = "You crave headpats immensely!" - lose_text = "Your headpats addiction wanes." + gain_text = span_notice("You crave headpats immensely!") + lose_text = span_notice("Your headpats addiction wanes.") medical_record_text = "Patient seems overly affectionate." /datum/quirk/headpat_slut/add() @@ -66,16 +66,16 @@ desc = "Your system burns with the desire to be bred. Satisfying your lust will make you happy, but ignoring it may cause you to become sad and needy." value = 0 mob_trait = TRAIT_IN_HEAT - gain_text = "You body burns with the desire to be bred." - lose_text = "You feel more in control of your body and thoughts." + gain_text = span_notice("You body burns with the desire to be bred.") + lose_text = span_notice("You feel more in control of your body and thoughts.") /datum/quirk/Hypnotic_gaze name = "Hypnotic Gaze" desc = "Be it through mysterious patterns, flickering colors, or some genetic oddity, prolonged eye contact with you will place the viewer into a highly-suggestible hypnotic trance." value = 0 mob_trait = TRAIT_HYPNOTIC_GAZE - gain_text = "Your eyes glimmer hypnotically..." - lose_text = "Your eyes return to normal." + gain_text = span_notice("Your eyes glimmer hypnotically...") + lose_text = span_notice("Your eyes return to normal.") medical_record_text = "Prolonged exposure to Patient's eyes exhibits soporific effects." /datum/quirk/Hypnotic_gaze/on_spawn() @@ -84,89 +84,19 @@ spell.Grant(Hypno_eyes) spell.owner = Hypno_eyes -/datum/action/innate/Hypnotize - name = "Hypnotize" - desc = "Stare deeply into someone's eyes, drawing them into a hypnotic slumber." - button_icon_state = "Hypno_eye" - icon_icon = 'modular_splurt/icons/mob/actions/lewd_actions/lewd_icons.dmi' - background_icon_state = "bg_alien" - var/mob/living/carbon/T //hypnosis target - var/mob/living/carbon/human/H //Person with the quirk - -/datum/action/innate/Hypnotize/Activate() - var/mob/living/carbon/human/H = owner - - if(!H.pulling || !isliving(H.pulling) || H.grab_state < GRAB_AGGRESSIVE) - to_chat(H, "You need to aggressively grab someone to hypnotize them!") - return - - var/mob/living/carbon/T = H.pulling - - if(T.IsSleeping()) - to_chat(H, "You can't hypnotize [T] whilst they're asleep!") - return - - to_chat(H, "You stare deeply into [T]'s eyes...") - to_chat(T, "[H] stares intensely into your eyes...") - if(!do_mob(H, T, 12 SECONDS)) - return - - if(H.pulling !=T || H.grab_state < GRAB_AGGRESSIVE) - return - - if(!(H in view(1, H.loc))) - return - - if(!(T.client?.prefs.cit_toggles & HYPNO)) - return - - var/response = alert(T, "Do you wish to fall into a hypnotic sleep?(This will allow [H] to issue hypnotic suggestions)", "Hypnosis", "Yes", "No") - - if(response == "Yes") - T.visible_message("Your eyelids gently shut as you fall into a deep slumber. All you can hear is [H]'s voice as you commit to following all of their suggestions.") - - T.SetSleeping(1200) - T.drowsyness = max(T.drowsyness, 40) - T = H.pulling - var/response2 = alert(H, "Would you like to release your subject or give them a suggestion?", "Hypnosis", "Suggestion", "Release") - - if(response2 == "Suggestion") - if(get_dist(H, T) > 1) - to_chat(H, "You must stand in whisper range of [T].") - return - - var/text = input("What would you like to suggest?", "Hypnotic suggestion", null, null) - text = sanitize(text) - if(!text) - return - - to_chat(H, "You whisper your suggestion in a smooth calming voice to [T]") - to_chat(T, "...[text]...") - - T.visible_message("[T] wakes up from their deep slumber!", "Your eyelids gently open as you see [H]'s face staring back at you.") - T.SetSleeping(0) - T = null - return - - if(response2 == "Release") - T.SetSleeping(0) - return - else - T.visible_message("[T]'s attention breaks, despite the attempt to hypnotize them! They clearly don't want this!", "Your concentration breaks as you realise you have no interest in following [H]'s words!") - return /datum/quirk/heat name = "Estrus Detection" desc = "You have a animalistic sense of detecting if someone is in heat." value = 0 mob_trait = TRAIT_HEAT_DETECT - gain_text = "You feel your senses adjust, allowing a animalistic sense of others' fertility." - lose_text = "You feel your sense of others' fertility fade." + gain_text = span_notice("You feel your senses adjust, allowing a animalistic sense of others' fertility.") + lose_text = span_notice("You feel your sense of others' fertility fade.") /datum/quirk/overweight name = "Overweight" desc = "You're particularly fond of food, and join the shift being overweight." value = 0 - gain_text = "You feel a bit chubby!" + gain_text = span_notice("You feel a bit chubby!") //no lose_text cause why would there be? /datum/quirk/overweight/on_spawn() @@ -179,8 +109,8 @@ name = "Vegetarian" desc = "You find the idea of eating meat morally and physically repulsive." value = 0 - gain_text = "You feel repulsion at the idea of eating meat." - lose_text = "You feel like eating meat isn't that bad." + gain_text = span_notice("You feel repulsion at the idea of eating meat.") + lose_text = span_notice("You feel like eating meat isn't that bad.") medical_record_text = "Patient reports a vegetarian diet." /datum/quirk/vegetarian/add() @@ -202,8 +132,8 @@ name = "Extra-Productive Genitals" desc = "Your genitals produce and hold more than normal." value = 0 - gain_text = "You feel pressure in your groin." - lose_text = "You feel a weight lifted from your groin." + gain_text = span_notice("You feel pressure in your groin.") + lose_text = span_notice("You feel a weight lifted from your groin.") medical_record_text = "Patient exhibits increased production of sexual fluids." /datum/quirk/cum_plus/add() @@ -235,8 +165,8 @@ name = "Well-Trained" desc = "You absolutely love being dominated. The thought of someone stronger than you is enough to make you act up." value = 0 - gain_text = "You feel like being someone's pet..." - lose_text = "You no longer feel like being a pet..." + gain_text = span_notice("You feel like being someone's pet...") + lose_text = span_notice("You no longer feel like being a pet...") processing_quirk = TRUE var/mood_category = "dom_trained" var/notice_delay = 0 @@ -323,8 +253,8 @@ desc = "You are a tri-headed creature. To use, format your name like (Rucks-Sucks-Ducks)." value = 0 mob_trait = TRAIT_HYDRA_HEADS - gain_text = "You hear two other voices inside of your head(s)." - lose_text = "All of your minds become singular." + gain_text = span_notice("You hear two other voices inside of your head(s).") + lose_text = span_danger("All of your minds become singular.") medical_record_text = "Patient has multiple heads and personalities affixed to their body." /datum/quirk/hydra/on_spawn() @@ -337,41 +267,14 @@ resetspell.owner = hydra hydra.name_archive = hydra.real_name - -/datum/action/innate/hydra - name = "Switch head" - desc = "Switch between each of the heads on your body." - icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' - button_icon_state = "art_summon" - -/datum/action/innate/hydrareset - name = "Reset speech" - desc = "Go back to speaking as a whole." - icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' - button_icon_state = "art_summon" - -/datum/action/innate/hydrareset/Activate() - var/mob/living/carbon/human/hydra = owner - hydra.real_name = hydra.name_archive - hydra.visible_message("[hydra.name] pushes all three heads forwards; they seem to be talking as a collective.", \ - "You are now talking as [hydra.name_archive]!", ignored_mobs=owner) - -/datum/action/innate/hydra/Activate() //I hate this but its needed - var/mob/living/carbon/human/hydra = owner - var/list/names = splittext(hydra.name_archive,"-") - var/selhead = input("Who would you like to speak as?","Heads:") in names - hydra.real_name = selhead - hydra.visible_message("[hydra.name] pulls the rest of their heads back; and puts [selhead]'s forward.", \ - "You are now talking as [selhead]!", ignored_mobs=owner) - //Own traits /datum/quirk/cum_sniff name = "Genital Taster" desc = "You've built so much experience savoring other people's genitals through your life that you can easily tell what liquids they're full of, besides reagents in their blood that is." value = 0 mob_trait = TRAIT_GFLUID_DETECT - gain_text = "You begin sensing peculiar smells from people's bits..." - lose_text = "People's genitals start smelling all the same to you..." + gain_text = span_notice("You begin sensing peculiar smells from people's bits...") + lose_text = span_notice("People's genitals start smelling all the same to you...") medical_record_text = "Patient attempted to get their doctor to drag his balls accross their face." /datum/quirk/fluid_infuser @@ -468,8 +371,8 @@ value = 0 medical_record_text = "this person was partially infected by a bloodsucker" mob_trait = BLOODFLEDGE - gain_text = "You feel an otherworldly thirst." - lose_text = "you feel an otherworldy burden remove itself" + gain_text = span_notice("You feel an otherworldly thirst.") + lose_text = span_notice("you feel an otherworldy burden remove itself") processing_quirk = TRUE /datum/quirk/vampire/add() @@ -515,7 +418,7 @@ else H.adjustStaminaLoss(-1,FALSE, FALSE)//this also helps with if someone is stuck in the chapel for way too long, and i tested with a stun sword that stunning for sec is still possible if(prob(2)) //2 percent chance (if it was true randome D:<) - to_chat(H, "I need blood NOW!!!") + to_chat(H, span_warning("I need blood NOW!!!")) /datum/quirk/vampire/remove() . = ..() @@ -572,10 +475,13 @@ var/cooldown = 0 var/paused = 0 var/turf/position + var/obj/structure/statue/gargoyle/current = null /datum/quirk/gargoyle/add() .=..() var/mob/living/carbon/human/H = quirk_holder + if (!H) + return var/datum/action/gargoyle/transform/T = new var/datum/action/gargoyle/check/C = new var/datum/action/gargoyle/pause/P = new @@ -588,7 +494,9 @@ /datum/quirk/gargoyle/on_process() .=..() var/mob/living/carbon/human/H = quirk_holder - var/datum/action/gargoyle/transform/T = locate() in H.actions + + if (!H) + return if(paused && H.loc != position) paused = 0 @@ -597,29 +505,40 @@ if(cooldown > 0) cooldown-- - if(!transformed && energy > 0 && !paused) + if(!transformed && !paused && energy > 0) energy -= 0.05 if(transformed) - if(energy < 99.7) - energy += 0.3 - H.heal_overall_damage(0.5,0.5) - H.adjustCloneLoss(-0.5) - H.adjustBruteLoss(-0.5) - H.adjustFireLoss(-0.5) + energy = min(energy + 0.3, 100) + if (H.getBruteLoss() > 0 || H.getFireLoss() > 0) + H.adjustBruteLoss(-0.5, forced = TRUE) + H.adjustFireLoss(-0.5, forced = TRUE) + else if (H.getOxyLoss() > 0 || H.getToxLoss() > 0) + H.adjustToxLoss(-0.3, forced = TRUE) + H.adjustOxyLoss(-0.5, forced = TRUE) //oxyloss heals by itself, doesn't need a nerfed heal + else if (H.getCloneLoss() > 0) + H.adjustCloneLoss(-0.3, forced = TRUE) + else if (current && current.obj_integrity < current.max_integrity) //health == maxHealth is true since we checked all damages above + current.obj_integrity = min(current.obj_integrity + 0.1, current.max_integrity) - if(energy <= 0 && !transformed) + if(!transformed && energy <= 0) + var/datum/action/gargoyle/transform/T = locate() in H.actions + if (!T) + T = new + T.Grant(H) cooldown = 0 - T.Trigger() + T?.Trigger() /datum/quirk/gargoyle/remove() var/mob/living/carbon/human/H = quirk_holder + if (!H) + return ..() var/datum/action/gargoyle/transform/T = locate() in H.actions var/datum/action/gargoyle/check/C = locate() in H.actions var/datum/action/gargoyle/pause/P = locate() in H.actions - T.Remove(H) - C.Remove(H) - P.Remove(H) + T?.Remove(H) + C?.Remove(H) + P?.Remove(H) . = ..() /datum/quirk/nudist @@ -627,8 +546,8 @@ // Spawning with a gear harness is preferable, but failed during testing. name = "Nudist" desc = "Wearing most types of clothing unnerves you. Bring a gear harness!" - gain_text = "You feel spiritually connected to your natural form." - lose_text = "It feels like clothing could fit you comfortably." + gain_text = span_notice("You feel spiritually connected to your natural form.") + lose_text = span_notice("It feels like clothing could fit you comfortably.") medical_record_text = "Patient expresses a psychological need to remain unclothed." value = 0 mood_quirk = TRUE @@ -643,11 +562,19 @@ else SEND_SIGNAL(quirk_holder, COMSIG_ADD_MOOD_EVENT, mood_category, /datum/mood_event/nudist_negative) +/datum/quirk/nudist/on_spawn() + . = ..() + // Spawn a Rapid Disrobe Implant + var/obj/item/implant/disrobe/quirk_implant = new + + // Implant into quirk holder + quirk_implant.implant(quirk_holder, null, TRUE, TRUE) + /datum/quirk/masked_mook name = "Bane Syndrome" desc = "For some reason you don't feel... right without wearing some kind of gas mask." - gain_text = "You start feeling unwell without any gas mask on." - lose_text = "You no longer have a need to wear some gas mask." + gain_text = span_danger("You start feeling unwell without any gas mask on.") + lose_text = span_notice("You no longer have a need to wear some gas mask.") value = 0 mood_quirk = TRUE medical_record_text = "Patient feels more secure when wearing a gas mask." @@ -668,238 +595,3 @@ var/obj/item/clothing/mask/gas/cosmetic/gasmask = new(get_turf(quirk_holder)) // Uses a custom gas mask H.equip_to_slot(gasmask, ITEM_SLOT_MASK) H.regenerate_icons() - -/// quirk actions /// - -//vampire bite - -#define BLOOD_DRAIN_NUM 50 - -/datum/action/vbite - name = "Bite" - button_icon_state = "power_feed" - icon_icon = 'icons/mob/actions/bloodsucker.dmi' - desc = "Sink your vampiric fangs into the person you are grabbing." - var/drain_cooldown = 0 - -/datum/action/vbite/Trigger() - . = ..() - if(iscarbon(owner)) - var/mob/living/carbon/H = owner - if(H.nutrition >= 500) - to_chat(H, "You are too full to drain any more.") - return - if(drain_cooldown >= world.time) - to_chat(H, "You just drained blood, wait a few seconds.") - return - if(!H.pulling || !iscarbon(H.pulling)) - if(H.getStaminaLoss() >= 80 && H.nutrition > 20)//prevents being stunlocked in the chapel - to_chat(H,("you use some of your power to energize")) - H.adjustStaminaLoss(-20) - H.adjust_nutrition(-20) - H.resting = TRUE - if(H.pulling && (iscarbon(H.pulling) || (istype(H.pulling,/obj/structure/arachnid/cocoon) && locate(/mob/living/carbon) in H.pulling.contents))) - var/mob/living/carbon/victim - if(iscarbon(H.pulling)) - victim = H.pulling - else if(istype(H.pulling,/obj/structure/arachnid/cocoon)) - victim = locate(/mob/living/carbon) in H.pulling.contents - drain_cooldown = world.time + 25 - if(victim.anti_magic_check(FALSE, TRUE, FALSE, 0)) - to_chat(victim, "[H] tries to bite you, but stops before touching you!") - to_chat(H, "[victim] is blessed! You stop just in time to avoid catching fire.") - return - //Here we check now for both the garlic cloves on the neck and for blood in the victims bloodstream. - if(!blood_sucking_checks(victim, TRUE, TRUE)) - return - H.visible_message("[H] bites down on [victim]'s neck!") - victim.add_splatter_floor(get_turf(victim), TRUE) - to_chat(victim, "[H] is draining your blood!") - if(!do_after(H, 30, target = victim)) - return - var/blood_volume_difference = BLOOD_VOLUME_MAXIMUM - H.blood_volume //How much capacity we have left to absorb blood - var/drained_blood = min(victim.blood_volume, BLOOD_DRAIN_NUM, blood_volume_difference) - H.reagents.add_reagent(/datum/reagent/blood/, drained_blood) - to_chat(victim, "[H] has taken some of your blood!") - to_chat(H, "You drain some blood!") - playsound(H, 'sound/items/drink.ogg', 30, 1, -2) - victim.blood_volume = clamp(victim.blood_volume - drained_blood, 0, BLOOD_VOLUME_MAXIMUM) - log_combat(H,victim,"vampire bit")//logs the biting action for admins - if(!victim.blood_volume) - to_chat(H, "You finish off [victim]'s blood supply!") - - -/datum/action/vrevive - name = "Resurrect" - button_icon_state = "power_strength" - icon_icon = 'icons/mob/actions/bloodsucker.dmi' - desc = "Use all your energy to come back to life!" - -/datum/action/vrevive/Trigger() - . = ..() - var/mob/living/carbon/C = owner - var/mob/living/carbon/human/H = owner - if(H.stat == DEAD && istype(C.loc, /obj/structure/closet/crate/coffin)) - H.revive(TRUE, FALSE) - H.set_nutrition(0) - H.Daze(20) - H.drunkenness = 70 - else - to_chat(H,"You need to be dead and in a coffin to revive!") - -//splurt change end -//put next quirk action here - -//werewolf tf - -/datum/action/werewolf - name = "Transform" - desc = "Transform into your wolf form." - icon_icon = 'modular_splurt/icons/mob/actions/misc_actions.dmi' - button_icon_state = "Transform" - var/transformed = FALSE - var/list/old_features = list("species" = SPECIES_HUMAN, "legs" = "Plantigrade", "size" = 1, "bark") - -/datum/action/werewolf/Trigger() - . = ..() - var/mob/living/carbon/human/H = owner - var/obj/item/organ/genital/penis/P = H.getorganslot(ORGAN_SLOT_PENIS) - var/obj/item/organ/genital/breasts/B = H.getorganslot(ORGAN_SLOT_BREASTS) - var/obj/item/organ/genital/vagina/V = H.getorganslot(ORGAN_SLOT_VAGINA) - H.shake_animation(2) - if(!transformed) // transform them - H.visible_message(span_danger("[H] shivers, their flesh bursting with a sudden growth of thick fur and their features contorting to that of a beast's, fully transforming them into a werewolf!")) - H.set_species(/datum/species/mammal, 1) - H.dna.species.mutant_bodyparts["mam_tail"] = "Wolf" - H.dna.species.mutant_bodyparts["legs"] = "Digitigrade" - H.Digitigrade_Leg_Swap(FALSE) - H.dna.species.mutant_bodyparts["mam_snouts"] = "Mammal, Thick" - H.dna.features["mam_ears"] = "Wolf" - H.dna.features["mam_tail"] = "Wolf" - H.dna.features["mam_snouts"] = "Mammal, Thick" - H.dna.features["legs"] = "Digitigrade" - H.update_size(get_size(H) + 0.5) - H.set_bark("bark") - H.custom_species = "Werewolf" - if(!(H.dna.species.species_traits.Find(DIGITIGRADE))) - H.dna.species.species_traits += DIGITIGRADE - H.update_body() - H.update_body_parts() - if(B) - B.color = "#[H.dna.features["mcolor"]]" - B.update() - if(P) - P.shape = "Knotted" - P.color = "#ff7c80" - P.update() - P.modify_size(6) - if(V) - V.shape = "Furred" - V.color = "#[H.dna.features["mcolor"]]" - V.update() - else // untransform them - H.visible_message(span_danger("[H] shrinks, their wolfish features quickly receding.")) - H.set_species(old_features["species"], TRUE) - H.set_bark(old_features["bark"]) - H.dna.features["mam_ears"] = old_features["mam_ears"] - H.dna.features["mam_snouts"] = old_features["mam_snouts"] - H.dna.features["mam_tail"] = old_features["mam_tail"] - H.dna.features["legs"] = old_features["legs"] //i hate legs i hate legs i hate legs i hate legs i hate legs i hate legs i hate legs - if(old_features["legs"] == "Plantigrade") - H.dna.species.species_traits -= DIGITIGRADE - H.Digitigrade_Leg_Swap(TRUE) - H.dna.species.mutant_bodyparts["legs"] = old_features["legs"] - H.update_body() - H.update_body_parts() - H.update_size(get_size(H) - 0.5) - if(B) - B.color = "#[old_features["breasts_color"]]" - B.update() - if(H.has_penis()) - P.shape = old_features["cock_shape"] - P.color = "#[old_features["cock_color"]]" - P.update() - P.modify_size(-6) - if(H.has_vagina()) - V.shape = old_features["vag_shape"] - V.color = "#[old_features["vag_color"]]" - V.update() - V.update_size() - transformed = !transformed - -/datum/action/werewolf/Grant()// on grant sets some variables - . = ..() - var/mob/living/carbon/human/H = owner - old_features = H.dna.features.Copy() - old_features["species"] = H.dna.species.type - old_features["size"] = get_size(H) - old_features["bark"] = H.vocal_bark_id - -/datum/action/gargoyle/transform - name = "Transform" - desc = "Transform into a statue, regaining energy in the process. Additionally, you will slowly heal while in statue form." - icon_icon = 'icons/mob/actions/actions_changeling.dmi' - button_icon_state = "ling_camouflage" - var/obj/structure/statue/gargoyle/current = null - - -/datum/action/gargoyle/transform/Trigger() - .=..() - var/mob/living/carbon/human/H = owner - var/datum/quirk/gargoyle/T = locate() in H.roundstart_quirks - if(!T.cooldown) - if(!T.transformed) - if(!isturf(H.loc)) - return 0 - var/obj/structure/statue/gargoyle/S = new(H.loc, H) - S.name = "statue of [H.name]" - H.bleedsuppress = 1 - S.copy_overlays(H) - var/newcolor = list(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0)) - S.add_atom_colour(newcolor, FIXED_COLOUR_PRIORITY) - current = S - T.transformed = 1 - T.cooldown = 30 - T.paused = 0 - S.dir = H.dir - return 1 - else - qdel(current) - T.transformed = 0 - T.cooldown = 30 - T.paused = 0 - H.visible_message("[H]'s skin rapidly softens, returning them to normal!", "Your skin softens, freeing your movement once more!") - else - to_chat(H, "You have transformed too recently; you cannot yet transform again!") - return 0 - -/datum/action/gargoyle/check - name = "Check" - desc = "Check your current energy levels." - icon_icon = 'icons/mob/actions/actions_clockcult.dmi' - button_icon_state = "Linked Vanguard" - -/datum/action/gargoyle/check/Trigger() - .=..() - var/mob/living/carbon/human/H = owner - var/datum/quirk/gargoyle/T = locate() in H.roundstart_quirks - to_chat(H, "You have [T.energy]/100 energy remaining!") - -/datum/action/gargoyle/pause - name = "Preserve" - desc = "Become near-motionless, thusly conserving your energy until you move from your current tile. Note, you will lose a chunk of energy when you inevitably move from your current position, so you cannot abuse this!" - icon_icon = 'icons/mob/actions/actions_flightsuit.dmi' - button_icon_state = "flightsuit_lock" - -datum/action/gargoyle/pause/Trigger() - .=..() - var/mob/living/carbon/human/H = owner - var/datum/quirk/gargoyle/T = locate() in H.roundstart_quirks - - if(!T.paused) - T.paused = 1 - T.position = H.loc - to_chat(H, "You are now conserving your energy; this effect will end the moment you move from your current position!") - return - else - to_chat(H, "You are already conserving your energy!") diff --git a/modular_splurt/code/datums/traits/trait_actions.dm b/modular_splurt/code/datums/traits/trait_actions.dm new file mode 100644 index 0000000000..792f7b8e8f --- /dev/null +++ b/modular_splurt/code/datums/traits/trait_actions.dm @@ -0,0 +1,343 @@ +#define BLOOD_DRAIN_NUM 50 + +// +// Quirk: Hypnotic Gaze +// + +/datum/action/innate/Hypnotize + name = "Hypnotize" + desc = "Stare deeply into someone's eyes, drawing them into a hypnotic slumber." + button_icon_state = "Hypno_eye" + icon_icon = 'modular_splurt/icons/mob/actions/lewd_actions/lewd_icons.dmi' + background_icon_state = "bg_alien" + var/mob/living/carbon/T //hypnosis target + var/mob/living/carbon/human/H //Person with the quirk + +/datum/action/innate/Hypnotize/Activate() + var/mob/living/carbon/human/H = owner + + if(!H.pulling || !isliving(H.pulling) || H.grab_state < GRAB_AGGRESSIVE) + to_chat(H, span_warning("You need to aggressively grab someone to hypnotize them!")) + return + + var/mob/living/carbon/T = H.pulling + + if(T.IsSleeping()) + to_chat(H, "You can't hypnotize [T] whilst they're asleep!") + return + + to_chat(H, span_notice("You stare deeply into [T]'s eyes...")) + to_chat(T, span_warning("[H] stares intensely into your eyes...")) + if(!do_mob(H, T, 12 SECONDS)) + return + + if(H.pulling !=T || H.grab_state < GRAB_AGGRESSIVE) + return + + if(!(H in view(1, H.loc))) + return + + if(!(T.client?.prefs.cit_toggles & HYPNO)) + return + + var/response = alert(T, "Do you wish to fall into a hypnotic sleep?(This will allow [H] to issue hypnotic suggestions)", "Hypnosis", "Yes", "No") + + if(response == "Yes") + T.visible_message(span_warning("[T] falls into a deep slumber!"), "Your eyelids gently shut as you fall into a deep slumber. All you can hear is [H]'s voice as you commit to following all of their suggestions.") + + T.SetSleeping(1200) + T.drowsyness = max(T.drowsyness, 40) + T = H.pulling + var/response2 = alert(H, "Would you like to release your subject or give them a suggestion?", "Hypnosis", "Suggestion", "Release") + + if(response2 == "Suggestion") + if(get_dist(H, T) > 1) + to_chat(H, "You must stand in whisper range of [T].") + return + + var/text = input("What would you like to suggest?", "Hypnotic suggestion", null, null) + text = sanitize(text) + if(!text) + return + + to_chat(H, "You whisper your suggestion in a smooth calming voice to [T]") + to_chat(T, span_hypnophrase("...[text]...")) + + T.visible_message(span_warning("[T] wakes up from their deep slumber!"), "Your eyelids gently open as you see [H]'s face staring back at you.") + T.SetSleeping(0) + T = null + return + + if(response2 == "Release") + T.SetSleeping(0) + return + else + T.visible_message(span_warning("[T]'s attention breaks, despite the attempt to hypnotize them! They clearly don't want this!"), "Your concentration breaks as you realise you have no interest in following [H]'s words!") + return + +// +// Quirk: Hydra Heads +// + +/datum/action/innate/hydra + name = "Switch head" + desc = "Switch between each of the heads on your body." + icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' + button_icon_state = "art_summon" + +/datum/action/innate/hydrareset + name = "Reset speech" + desc = "Go back to speaking as a whole." + icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' + button_icon_state = "art_summon" + +/datum/action/innate/hydrareset/Activate() + var/mob/living/carbon/human/hydra = owner + hydra.real_name = hydra.name_archive + hydra.visible_message(span_notice("[hydra.name] pushes all three heads forwards; they seem to be talking as a collective."), \ + span_notice("You are now talking as [hydra.name_archive]!"), ignored_mobs=owner) + +/datum/action/innate/hydra/Activate() //I hate this but its needed + var/mob/living/carbon/human/hydra = owner + var/list/names = splittext(hydra.name_archive,"-") + var/selhead = input("Who would you like to speak as?","Heads:") in names + hydra.real_name = selhead + hydra.visible_message(span_notice("[hydra.name] pulls the rest of their heads back; and puts [selhead]'s forward."), \ + span_notice("You are now talking as [selhead]!"), ignored_mobs=owner) + +// +// Quirk: Bloodsucker Fledgling / Vampire +// + +/datum/action/vbite + name = "Bite" + button_icon_state = "power_feed" + icon_icon = 'icons/mob/actions/bloodsucker.dmi' + desc = "Sink your vampiric fangs into the person you are grabbing." + var/drain_cooldown = 0 + +/datum/action/vbite/Trigger() + . = ..() + if(iscarbon(owner)) + var/mob/living/carbon/H = owner + if(H.nutrition >= 500) + to_chat(H, span_notice("You are too full to drain any more.")) + return + if(drain_cooldown >= world.time) + to_chat(H, span_notice("You just drained blood, wait a few seconds.")) + return + if(!H.pulling || !iscarbon(H.pulling)) + if(H.getStaminaLoss() >= 80 && H.nutrition > 20)//prevents being stunlocked in the chapel + to_chat(H,(span_notice("you use some of your power to energize"))) + H.adjustStaminaLoss(-20) + H.adjust_nutrition(-20) + H.resting = TRUE + if(H.pulling && (iscarbon(H.pulling) || (istype(H.pulling,/obj/structure/arachnid/cocoon) && locate(/mob/living/carbon) in H.pulling.contents))) + var/mob/living/carbon/victim + if(iscarbon(H.pulling)) + victim = H.pulling + else if(istype(H.pulling,/obj/structure/arachnid/cocoon)) + victim = locate(/mob/living/carbon) in H.pulling.contents + drain_cooldown = world.time + 25 + if(victim.anti_magic_check(FALSE, TRUE, FALSE, 0)) + to_chat(victim, span_warning("[H] tries to bite you, but stops before touching you!")) + to_chat(H, span_warning("[victim] is blessed! You stop just in time to avoid catching fire.")) + return + //Here we check now for both the garlic cloves on the neck and for blood in the victims bloodstream. + if(!blood_sucking_checks(victim, TRUE, TRUE)) + return + H.visible_message(span_danger("[H] bites down on [victim]'s neck!")) + victim.add_splatter_floor(get_turf(victim), TRUE) + to_chat(victim, span_userdanger("[H] is draining your blood!")) + if(!do_after(H, 30, target = victim)) + return + var/blood_volume_difference = BLOOD_VOLUME_MAXIMUM - H.blood_volume //How much capacity we have left to absorb blood + var/drained_blood = min(victim.blood_volume, BLOOD_DRAIN_NUM, blood_volume_difference) + H.reagents.add_reagent(/datum/reagent/blood/, drained_blood) + to_chat(victim, span_danger("[H] has taken some of your blood!")) + to_chat(H, span_notice("You drain some blood!")) + playsound(H, 'sound/items/drink.ogg', 30, 1, -2) + victim.blood_volume = clamp(victim.blood_volume - drained_blood, 0, BLOOD_VOLUME_MAXIMUM) + log_combat(H,victim,"vampire bit")//logs the biting action for admins + if(!victim.blood_volume) + to_chat(H, span_warning("You finish off [victim]'s blood supply!")) + + +/datum/action/vrevive + name = "Resurrect" + button_icon_state = "power_strength" + icon_icon = 'icons/mob/actions/bloodsucker.dmi' + desc = "Use all your energy to come back to life!" + +/datum/action/vrevive/Trigger() + . = ..() + var/mob/living/carbon/C = owner + var/mob/living/carbon/human/H = owner + if(H.stat == DEAD && istype(C.loc, /obj/structure/closet/crate/coffin)) + H.revive(TRUE, FALSE) + H.set_nutrition(0) + H.Daze(20) + H.drunkenness = 70 + else + to_chat(H,span_warning("You need to be dead and in a coffin to revive!")) + +// +// Quirk: Werewolf +// + +/datum/action/werewolf + name = "Transform" + desc = "Transform into your wolf form." + icon_icon = 'modular_splurt/icons/mob/actions/misc_actions.dmi' + button_icon_state = "Transform" + var/transformed = FALSE + var/list/old_features = list("species" = SPECIES_HUMAN, "legs" = "Plantigrade", "size" = 1, "bark") + +/datum/action/werewolf/Trigger() + . = ..() + var/mob/living/carbon/human/H = owner + var/obj/item/organ/genital/penis/P = H.getorganslot(ORGAN_SLOT_PENIS) + var/obj/item/organ/genital/breasts/B = H.getorganslot(ORGAN_SLOT_BREASTS) + var/obj/item/organ/genital/vagina/V = H.getorganslot(ORGAN_SLOT_VAGINA) + H.shake_animation(2) + if(!transformed) // transform them + H.visible_message(span_danger("[H] shivers, their flesh bursting with a sudden growth of thick fur and their features contorting to that of a beast's, fully transforming them into a werewolf!")) + H.set_species(/datum/species/mammal, 1) + H.dna.species.mutant_bodyparts["mam_tail"] = "Wolf" + H.dna.species.mutant_bodyparts["legs"] = "Digitigrade" + H.Digitigrade_Leg_Swap(FALSE) + H.dna.species.mutant_bodyparts["mam_snouts"] = "Mammal, Thick" + H.dna.features["mam_ears"] = "Wolf" + H.dna.features["mam_tail"] = "Wolf" + H.dna.features["mam_snouts"] = "Mammal, Thick" + H.dna.features["legs"] = "Digitigrade" + H.update_size(get_size(H) + 0.5) + H.set_bark("bark") + H.custom_species = "Werewolf" + if(!(H.dna.species.species_traits.Find(DIGITIGRADE))) + H.dna.species.species_traits += DIGITIGRADE + H.update_body() + H.update_body_parts() + if(B) + B.color = "#[H.dna.features["mcolor"]]" + B.update() + if(P) + P.shape = "Knotted" + P.color = "#ff7c80" + P.update() + P.modify_size(6) + if(V) + V.shape = "Furred" + V.color = "#[H.dna.features["mcolor"]]" + V.update() + else // untransform them + H.visible_message(span_danger("[H] shrinks, their wolfish features quickly receding.")) + H.set_species(old_features["species"], TRUE) + H.set_bark(old_features["bark"]) + H.dna.features["mam_ears"] = old_features["mam_ears"] + H.dna.features["mam_snouts"] = old_features["mam_snouts"] + H.dna.features["mam_tail"] = old_features["mam_tail"] + H.dna.features["legs"] = old_features["legs"] //i hate legs i hate legs i hate legs i hate legs i hate legs i hate legs i hate legs + if(old_features["legs"] == "Plantigrade") + H.dna.species.species_traits -= DIGITIGRADE + H.Digitigrade_Leg_Swap(TRUE) + H.dna.species.mutant_bodyparts["legs"] = old_features["legs"] + H.update_body() + H.update_body_parts() + H.update_size(get_size(H) - 0.5) + if(B) + B.color = "#[old_features["breasts_color"]]" + B.update() + if(H.has_penis()) + P.shape = old_features["cock_shape"] + P.color = "#[old_features["cock_color"]]" + P.update() + P.modify_size(-6) + if(H.has_vagina()) + V.shape = old_features["vag_shape"] + V.color = "#[old_features["vag_color"]]" + V.update() + V.update_size() + transformed = !transformed + +/datum/action/werewolf/Grant()// on grant sets some variables + . = ..() + var/mob/living/carbon/human/H = owner + old_features = H.dna.features.Copy() + old_features["species"] = H.dna.species.type + old_features["size"] = get_size(H) + old_features["bark"] = H.vocal_bark_id + + +/datum/action/gargoyle/transform + name = "Transform" + desc = "Transform into a statue, regaining energy in the process. Additionally, you will slowly heal while in statue form." + icon_icon = 'icons/mob/actions/actions_changeling.dmi' + button_icon_state = "ling_camouflage" + var/obj/structure/statue/gargoyle/current = null + + +/datum/action/gargoyle/transform/Trigger() + .=..() + var/mob/living/carbon/human/H = owner + var/datum/quirk/gargoyle/T = locate() in H.roundstart_quirks + if(!T.cooldown) + if(!T.transformed) + if(!isturf(H.loc)) + return 0 + var/obj/structure/statue/gargoyle/S = new(H.loc, H) + S.name = "statue of [H.name]" + H.bleedsuppress = 1 + S.copy_overlays(H) + var/newcolor = list(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0)) + S.add_atom_colour(newcolor, FIXED_COLOUR_PRIORITY) + current = S + T.transformed = 1 + T.cooldown = 30 + T.paused = 0 + S.dir = H.dir + return 1 + else + qdel(current) + T.transformed = 0 + T.cooldown = 30 + T.paused = 0 + H.visible_message(span_warning("[H]'s skin rapidly softens, returning them to normal!"), span_userdanger("Your skin softens, freeing your movement once more!")) + else + to_chat(H, span_warning("You have transformed too recently; you cannot yet transform again!")) + return 0 + +// +// Quirk: Gargoyle +// + +/datum/action/gargoyle/check + name = "Check" + desc = "Check your current energy levels." + icon_icon = 'icons/mob/actions/actions_clockcult.dmi' + button_icon_state = "Linked Vanguard" + +/datum/action/gargoyle/check/Trigger() + .=..() + var/mob/living/carbon/human/H = owner + var/datum/quirk/gargoyle/T = locate() in H.roundstart_quirks + to_chat(H, span_warning("You have [T.energy]/100 energy remaining!")) + +/datum/action/gargoyle/pause + name = "Preserve" + desc = "Become near-motionless, thusly conserving your energy until you move from your current tile. Note, you will lose a chunk of energy when you inevitably move from your current position, so you cannot abuse this!" + icon_icon = 'icons/mob/actions/actions_flightsuit.dmi' + button_icon_state = "flightsuit_lock" + +/datum/action/gargoyle/pause/Trigger() + .=..() + var/mob/living/carbon/human/H = owner + var/datum/quirk/gargoyle/T = locate() in H.roundstart_quirks + + if(!T.paused) + T.paused = 1 + T.position = H.loc + to_chat(H, span_warning("You are now conserving your energy; this effect will end the moment you move from your current position!")) + return + else + to_chat(H, span_warning("You are already conserving your energy!")) diff --git a/modular_splurt/code/game/area/areas/holodeck.dm b/modular_splurt/code/game/area/areas/holodeck.dm new file mode 100644 index 0000000000..2e60a0e247 --- /dev/null +++ b/modular_splurt/code/game/area/areas/holodeck.dm @@ -0,0 +1,7 @@ +// Replacement for holodeck plasma module +/area/holodeck/rec_center/burn + name = "Holodeck - CRITICAL ERROR" + +// Replacement for holodeck carp module +/area/holodeck/rec_center/wildlife + name = "Holodeck - Wasteland Simulation" diff --git a/modular_splurt/code/game/machinery/computer/slavery.dm b/modular_splurt/code/game/machinery/computer/slavery.dm index 2466ef3b67..303078cbc7 100644 --- a/modular_splurt/code/game/machinery/computer/slavery.dm +++ b/modular_splurt/code/game/machinery/computer/slavery.dm @@ -165,7 +165,7 @@ if(!input || !user.canUseTopic(src, !issilicon(usr))) return if(!(user.can_speak())) //No more cheating, mime/random mute guy! - to_chat(user, "You find yourself unable to speak.") + to_chat(user, span_warning("You find yourself unable to speak.")) return input = user.treat_message(input) //Adds slurs and so on. Someone should make this use languages too. @@ -232,8 +232,8 @@ new /obj/effect/temp_visual/dir_setting/ninja(get_turf(collar.loc), collar.loc.dir) playsound(get_turf(src.loc), 'sound/effects/bamf.ogg', 50, 1) - visible_message("[collar.loc] vanishes into the droppod.", \ - "You are taken by the droppod.") + visible_message(span_notice("[collar.loc] vanishes into the droppod."), \ + span_notice("You are taken by the droppod.")) var/area/pod_storage_area = locate(/area/centcom/supplypod/podStorage) in GLOB.sortedAreas var/mob/living/M = collar.loc diff --git a/modular_splurt/code/game/machinery/research_table.dm b/modular_splurt/code/game/machinery/research_table.dm index 19b1e9f3a0..c984bec303 100644 --- a/modular_splurt/code/game/machinery/research_table.dm +++ b/modular_splurt/code/game/machinery/research_table.dm @@ -25,21 +25,21 @@ /obj/machinery/research_table/examine(mob/user) . = ..() if(configured) - . += "The same person can be used up to [max_repeat_usage * tier] time\s." + . += span_notice("The same person can be used up to [max_repeat_usage * tier] time\s.") switch(point_type) if(POINT_TYPE_SCIENCE) - . += "The table is set to generate science points." + . += span_notice("The table is set to generate science points.") else - . += "The table is set to generate money for cargo." + . += span_notice("The table is set to generate money for cargo.") if(!configured && !panel_open) - . += "It's not configured yet, you could use a multitool to configure it." + . += span_notice("It's not configured yet, you could use a multitool to configure it.") if(panel_open) - . += "The panel is screwed open and you could change generation type with a multitool." + . += span_notice("The panel is screwed open and you could change generation type with a multitool.") /obj/machinery/research_table/multitool_act(mob/living/user, obj/item/I) if(user.a_intent == INTENT_HELP) if(panel_open && !slaver_mode) // Do not let slaver version switch to science mode, they should only generate credits. - user.visible_message("[user] begins changing the generation type on \the [src].", "You begin changing the generation type on \the [src].") + user.visible_message(span_notice("[user] begins changing the generation type on \the [src]."), span_notice("You begin changing the generation type on \the [src].")) if(do_after(user, 5 SECONDS, TRUE, src)) point_type = point_type == POINT_TYPE_SCIENCE ? POINT_TYPE_CARGO : POINT_TYPE_SCIENCE var/generation_message = null @@ -48,17 +48,17 @@ generation_message = "generate research points for science" else generation_message = "generate money for cargo" - user.visible_message("[user] finished changing the generation type on \the [src].", "You change the generation type on \the [src] to [generation_message].") + user.visible_message(span_notice("[user] finished changing the generation type on \the [src]."), span_notice("You change the generation type on \the [src] to [generation_message].")) else - to_chat(user, "You need to stand still and uninterrupted for 5 seconds!") + to_chat(user, span_warning("You need to stand still and uninterrupted for 5 seconds!")) return STOP_ATTACK_PROC_CHAIN else - user.visible_message("[user] begins reconfiguring \the [src].", "You begin reconfiguring \the [src].") + user.visible_message(span_notice("[user] begins reconfiguring \the [src]."), span_notice("You begin reconfiguring \the [src].")) if(do_after(user, 5 SECONDS, TRUE, src)) configured = !configured - user.visible_message("[user] finished reconfiguring \the [src].", "The research table is now [configured ? "configured" : "not configured"].") + user.visible_message(span_notice("[user] finished reconfiguring \the [src]."), span_notice("The research table is now [configured ? "configured" : "not configured"].")) else - to_chat(user, "You need to stand still and uninterrupted for 5 seconds!") + to_chat(user, span_warning("You need to stand still and uninterrupted for 5 seconds!")) return STOP_ATTACK_PROC_CHAIN . = ..() @@ -92,9 +92,9 @@ return if(!handle_unbuckling(buckled_mob, user)) if(buckled_mob == user) - to_chat(user, "You fail to unbuckle yourself.") + to_chat(user, span_warning("You fail to unbuckle yourself.")) else - to_chat(user, "You fail to unbuckle [buckled_mob].") + to_chat(user, span_warning("You fail to unbuckle [buckled_mob].")) return UnregisterSignal(buckled_mob, COMSIG_MOB_CAME) say("User left, resetting scanners.") diff --git a/modular_splurt/code/game/objects/items.dm b/modular_splurt/code/game/objects/items.dm index b45807289f..c320da9586 100644 --- a/modular_splurt/code/game/objects/items.dm +++ b/modular_splurt/code/game/objects/items.dm @@ -77,7 +77,7 @@ return if(style == "long" && !(istype(target_organ, /obj/item/organ/genital/vagina))) //long vibrators dont fit on anything but vaginas, but small ones fit everywhere - to_chat(user, "[src] is too big to fit there, use a smaller version.") + to_chat(user, span_warning("[src] is too big to fit there, use a smaller version.")) return if(locate(src.type) in target_organ.contents) diff --git a/modular_splurt/code/game/objects/items/RCD.dm b/modular_splurt/code/game/objects/items/RCD.dm index bf27d44f12..e8bc24ae5b 100644 --- a/modular_splurt/code/game/objects/items/RCD.dm +++ b/modular_splurt/code/game/objects/items/RCD.dm @@ -54,7 +54,7 @@ structure_data["cost"][blueprint] = 20 playsound(src, 'sound/effects/pop.ogg', 50, FALSE) - to_chat(user, "You change [name]s blueprint to '[choice]'.") + to_chat(user, span_notice("You change [name]s blueprint to '[choice]'.")) // Also pretty much rcd_create but named differently. I'm shameless, fuck you. /obj/item/construction/tables/proc/create_table(atom/A, mob/user) @@ -91,5 +91,5 @@ create_table(A, user) /obj/item/construction/tables/suicide_act(mob/user) - user.visible_message("[user] sets the RTC to 'Glass Table' and points it down [user.p_their()] throat! It looks like [user.p_theyre()] trying to commit suicide.") + user.visible_message(span_suicide("[user] sets the RTC to 'Glass Table' and points it down [user.p_their()] throat! It looks like [user.p_theyre()] trying to commit suicide.")) return (BRUTELOSS) diff --git a/modular_splurt/code/game/objects/items/RTL.dm b/modular_splurt/code/game/objects/items/RTL.dm index d3637ab2f0..6db6eb7306 100644 --- a/modular_splurt/code/game/objects/items/RTL.dm +++ b/modular_splurt/code/game/objects/items/RTL.dm @@ -58,7 +58,7 @@ /obj/item/rtl/examine(mob/user) . = ..() - . += "Alt-click to set what tile to lay." + . += span_notice("Alt-click to set what tile to lay.") if(loaded) . += span_info("It contains [loaded.amount]/[max_amount] metal.") diff --git a/modular_splurt/code/game/objects/items/cosmetics.dm b/modular_splurt/code/game/objects/items/cosmetics.dm index 972c7d0d7a..0a4b28c3c6 100644 --- a/modular_splurt/code/game/objects/items/cosmetics.dm +++ b/modular_splurt/code/game/objects/items/cosmetics.dm @@ -85,22 +85,22 @@ if(ishuman(M)) var/mob/living/carbon/human/H = M if(H.nail_style) //to stop stacking bugs - to_chat(user, "Remove the old nail polish first!") + to_chat(user, span_warning("Remove the old nail polish first!")) if(H == user) - user.visible_message("[user] does [user.p_their()] nails with \the [src].", \ - "You take a moment to apply \the [src]. Perfect!") + user.visible_message(span_notice("[user] does [user.p_their()] nails with \the [src]."), \ + span_notice("You take a moment to apply \the [src]. Perfect!")) H.nail_style = "nails" H.nail_color = paint H.update_body() else - user.visible_message("[user] begins to do [H]'s nails with \the [src].", \ - "You begin to apply \the [src] on [H]'s nails...") + user.visible_message(span_warning("[user] begins to do [H]'s nails with \the [src]."), \ + span_notice("You begin to apply \the [src] on [H]'s nails...")) if(do_after(user, 20, target = H)) user.visible_message("[user] does [H]'s nails with \the [src].", \ - "You apply \the [src] on [H]'s nails.") + span_notice("You apply \the [src] on [H]'s nails.")) H.nail_style = "nails" H.nail_color = paint H.update_body() else - to_chat(user, "Where are the nail on that?") + to_chat(user, span_warning("Where are the nail on that?")) diff --git a/modular_splurt/code/game/objects/items/devices/PDA/radio.dm b/modular_splurt/code/game/objects/items/devices/PDA/radio.dm new file mode 100644 index 0000000000..016d1f10ef --- /dev/null +++ b/modular_splurt/code/game/objects/items/devices/PDA/radio.dm @@ -0,0 +1,4 @@ +/obj/item/cartridge/cmo/Initialize(mapload) + //adds chemistry access + access |= CART_CHEMISTRY + . = ..() diff --git a/modular_splurt/code/game/objects/items/devices/radio/electropack.dm b/modular_splurt/code/game/objects/items/devices/radio/electropack.dm index 6ac56d7020..283605b9bc 100644 --- a/modular_splurt/code/game/objects/items/devices/radio/electropack.dm +++ b/modular_splurt/code/game/objects/items/devices/radio/electropack.dm @@ -65,8 +65,8 @@ /obj/item/electropack/shockcollar/slave/Destroy() - visible_message("The [src] detaches from [src.loc]'s neck.", \ - "The [src] detaches from your neck.") + visible_message(span_notice("The [src] detaches from [src.loc]'s neck."), \ + span_notice("The [src] detaches from your neck.")) playsound(get_turf(src.loc), 'sound/machines/terminal_eject_disc.ogg', 50, 1) GLOB.tracked_slaves -= src diff --git a/modular_splurt/code/game/objects/items/implants/implant_aphropumps.dm b/modular_splurt/code/game/objects/items/implants/implant_aphropumps.dm index ecaec5bfbe..f900dcba28 100644 --- a/modular_splurt/code/game/objects/items/implants/implant_aphropumps.dm +++ b/modular_splurt/code/game/objects/items/implants/implant_aphropumps.dm @@ -93,7 +93,7 @@ /obj/item/storage/box/aphrodisiac_pump/examine(mob/user) . = ..() - . += "Click the implant case while with the implant inside to change the desired dosage amounts." + . += span_notice("Click the implant case while with the implant inside to change the desired dosage amounts.") /obj/item/storage/box/aphrodisiac_pump/ComponentInitialize() . = ..() diff --git a/modular_splurt/code/game/objects/items/implants/implant_disrobe.dm b/modular_splurt/code/game/objects/items/implants/implant_disrobe.dm new file mode 100644 index 0000000000..e8656ab155 --- /dev/null +++ b/modular_splurt/code/game/objects/items/implants/implant_disrobe.dm @@ -0,0 +1,67 @@ +/obj/item/implant/disrobe + name = "rapid disrobe implant" + icon = 'icons/obj/clothing/uniforms.dmi' + icon_state = "grey" + + // Custom action for extra customization + actions_types = list(/datum/action/item_action/disrobe) + +// Implant flavor text +/obj/item/implant/disrobe_ultra/get_data() + // Define text variable + var/dat = {" + Implant Specifications:
+ Name: Rapid Disrobe Implant
+ Important Notes: Nanotransen requires employees to follow workplace safety standards, including protective clothing.
+
+ Implant Details:
+ Function: Lines the subject's epidermis with high power static charge nodes, allowing the rapid removal of worn clothing.
+ Special Features: Will not cause drunkenness in most subjects.
+ Integrity: Implant will last so long as it is inside the host. + "} + + // Return text + return dat + +// Only allow use on "human" targets +/obj/item/implant/disrobe/can_be_implanted_in(mob/living/target) + if(!ishuman(target)) + return FALSE + . = ..() + +// Runs on toggling the implant +/obj/item/implant/disrobe/activate() + . = ..() + + // Define target + var/mob/living/carbon/target_user = imp_in + + // Perform LPD effect + target_user.clothing_burst(target_user) + +/* + * Action datums +*/ + +// Action for rapid wardrobe removal +/datum/action/item_action/disrobe + name = "Rapid Disrobe" + desc = "Instantly eject all covering clothing from your body." + icon_icon = 'modular_splurt/icons/mob/actions/misc_actions.dmi' + button_icon_state = "no_uniform" + background_icon_state = "bg_tech" + +/* + * Implant items +*/ + +// Implanter item +/obj/item/implanter/disrobe + name = "implanter (rapid disrobe)" + imp_type = /obj/item/implant/disrobe + +// Implant case item +/obj/item/implantcase/disrobe + name = "implant case - 'rapid disrobe'" + desc = "A glass case containing a rapid disrobe implant." + imp_type = /obj/item/implant/disrobe diff --git a/modular_splurt/code/game/objects/items/implants/implant_hide_backpack.dm b/modular_splurt/code/game/objects/items/implants/implant_hide_backpack.dm index a4c02279a2..5a0d4ada8f 100644 --- a/modular_splurt/code/game/objects/items/implants/implant_hide_backpack.dm +++ b/modular_splurt/code/game/objects/items/implants/implant_hide_backpack.dm @@ -99,7 +99,7 @@ var/implant_toggle_text_2 = (!ability_active ? "dis" : "") // Engage or Disengage // Display a chat message - action_owner.visible_message("The equipment worn on [action_owner]'s back-region flickers momentarily, before becoming [implant_toggle_text].", "You [implant_toggle_text_2]engage the Storage Concealment Implant, causing your backpack to be [implant_toggle_text].") + action_owner.visible_message(span_notice("The equipment worn on [action_owner]'s back-region flickers momentarily, before becoming [implant_toggle_text]."), span_notice("You [implant_toggle_text_2]engage the Storage Concealment Implant, causing your backpack to be [implant_toggle_text].")) /* * Implant items diff --git a/modular_splurt/code/game/objects/items/implants/implant_slave.dm b/modular_splurt/code/game/objects/items/implants/implant_slave.dm index eb3cf71a93..bfddecea22 100644 --- a/modular_splurt/code/game/objects/items/implants/implant_slave.dm +++ b/modular_splurt/code/game/objects/items/implants/implant_slave.dm @@ -28,9 +28,9 @@ if(target.mind.has_antag_datum(/datum/antagonist/rev/head) || target.mind.unconvertable || target.mind.assigned_role == "Security Officer" || target.mind.assigned_role == "Detective" || target.mind.assigned_role == "Warden" || target.mind.assigned_role == "Head of Security" || HAS_TRAIT(target, TRAIT_MINDSHIELD)) if(!silent) if(target.mind.assigned_role == "Security Officer" || target.mind.assigned_role == "Detective" || target.mind.assigned_role == "Warden" || target.mind.assigned_role == "Head of Security") - target.visible_message("[target] seems to resist the implant! You can't enslave a member of security!", "You feel something interfering with your mental conditioning, but you resist it!") + target.visible_message(span_warning("[target] seems to resist the implant! You can't enslave a member of security!"), span_warning("You feel something interfering with your mental conditioning, but you resist it!")) else - target.visible_message("[target] seems to resist the implant!", "You feel something interfering with your mental conditioning, but you resist it!") + target.visible_message(span_warning("[target] seems to resist the implant!"), span_warning("You feel something interfering with your mental conditioning, but you resist it!")) var/obj/item/implanter/I = loc removed(target, 1) qdel(src) @@ -47,9 +47,9 @@ target.mind.remove_antag_datum(/datum/antagonist/gang) if(!silent) if(target.mind in SSticker.mode.cult) - to_chat(target, "You feel something interfering with your mental conditioning, but you resist it!") + to_chat(target, span_warning("You feel something interfering with your mental conditioning, but you resist it!")) else - to_chat(target, "You feel a sense of peace and security. You are now enslaved!") + to_chat(target, span_notice("You feel a sense of peace and security. You are now enslaved!")) var/slave_objective = "[((target.client?.prefs.cit_toggles & HYPNO)?"Security has enslaved you into being their pet! Obey their commands, but remember: a good pet is not violent.":"You've been neutralized by security! Follow their orders, but remember: neutralization also means nonviolence.")]" brainwash(target, slave_objective) target.sec_hud_set_implants() @@ -63,7 +63,7 @@ target.mind.remove_antag_datum(/datum/antagonist/brainwashed) L.sec_hud_set_implants() if(target.stat != DEAD && !silent) - to_chat(target, "Your mind suddenly feels free from burden. You are no longer enslaved!") + to_chat(target, span_boldnotice("Your mind suddenly feels free from burden. You are no longer enslaved!")) return 1 return 0 diff --git a/modular_splurt/code/game/objects/items/implants/implant_slaver.dm b/modular_splurt/code/game/objects/items/implants/implant_slaver.dm index afa70e3e21..54ec564bd6 100644 --- a/modular_splurt/code/game/objects/items/implants/implant_slaver.dm +++ b/modular_splurt/code/game/objects/items/implants/implant_slaver.dm @@ -7,11 +7,11 @@ /obj/item/implant/slaver/activate() . = ..() - imp_in.visible_message("[imp_in] begins fiddling with a subtle bump on their arm.", "You prepare to teleport.") + imp_in.visible_message(span_notice("[imp_in] begins fiddling with a subtle bump on their arm."), span_notice("You prepare to teleport.")) if(do_mob(imp_in, imp_in, 5 SECONDS, ignorehelditem = TRUE)) playsound(get_turf(imp_in.loc), 'sound/magic/blink.ogg', 50, 1) - imp_in.visible_message("[imp_in] vanishes from sight!", \ - "You activate [src], sending you to the slaver mothership!") + imp_in.visible_message(span_notice("[imp_in] vanishes from sight!"), \ + span_notice("You activate [src], sending you to the slaver mothership!")) new /obj/effect/temp_visual/dir_setting/ninja(get_turf(imp_in), imp_in.dir) var/list/L = list() @@ -26,7 +26,7 @@ qdel(src) else - to_chat(imp_in, "You need to stand still and uninterrupted for 5 seconds!") + to_chat(imp_in, span_warning("You need to stand still and uninterrupted for 5 seconds!")) /obj/item/implant/slaver/get_data() var/dat = {"Implant Specifications:
diff --git a/modular_splurt/code/game/objects/items/implants/implantcase.dm b/modular_splurt/code/game/objects/items/implants/implantcase.dm index e4b8f51284..0cb8594b7b 100644 --- a/modular_splurt/code/game/objects/items/implants/implantcase.dm +++ b/modular_splurt/code/game/objects/items/implants/implantcase.dm @@ -3,8 +3,8 @@ if(istype(imp, /obj/item/implant/genital_fluid)) var/obj/item/implant/genital_fluid/I = imp if(I.obj_flags & EMAGGED) - to_chat(user, "[src] has no functional safeties to emag.") + to_chat(user, span_warning("[src] has no functional safeties to emag.")) return - to_chat(user, "You short out [src]'s safeties.") + to_chat(user, span_notice("You short out [src]'s safeties.")) name = "implant case - 'Genital Fluid (Hacked)'" I.emag_act() diff --git a/modular_splurt/code/game/objects/items/lewd_items/genital_equipment/condom.dm b/modular_splurt/code/game/objects/items/lewd_items/genital_equipment/condom.dm index 8f35fdd9d8..072ba15541 100644 --- a/modular_splurt/code/game/objects/items/lewd_items/genital_equipment/condom.dm +++ b/modular_splurt/code/game/objects/items/lewd_items/genital_equipment/condom.dm @@ -36,7 +36,7 @@ if(unwrapped == 0) icon_state = "b_condom" unwrapped = 1 - to_chat(user, "You unwrap the condom.") + to_chat(user, span_notice("You unwrap the condom.")) playsound(user, 'sound/items/poster_ripped.ogg', 50, 1, -1) return @@ -55,23 +55,23 @@ // if(unwrapped == 1) // new /obj/item/clothing/head/condom(usr.loc) // qdel(src) -// to_chat(user, "You roll the condom out.") +// to_chat(user, span_notice("You roll the condom out.")) // playsound(user, 'sound/lewd/latex.ogg', 50, 1, -1) // return /* /obj/item/genital_equipment/condom/attack(mob/living/carbon/C, mob/living/user) //apply the johnny on another person or yourself if(unwrapped == 0 ) - to_chat(user, "You must remove the condom from the package first!") + to_chat(user, span_notice("You must remove the condom from the package first!")) return var/obj/item/organ/genital/penis/P = C.getorganslot(ORGAN_SLOT_PENIS) if((C.has_penis(REQUIRE_EXPOSED) && (P?.genital_flags & HAS_EQUIPMENT)) || (C.has_strapon(REQUIRE_EXPOSED))) if(P.equipment[GENITAL_EQUIPEMENT_CONDOM]) - to_chat(user, "\The [C] already has condom on!") + to_chat(user, span_notice("\The [C] already has condom on!")) return if(isliving(C) && isliving(user) && unwrapped == 1) - C.visible_message("\The [user] is trying to put a condom on \the [C]!",\ - "\The [user] is trying to put a condom on you!") + C.visible_message(span_warning("\The [user] is trying to put a condom on \the [C]!"),\ + span_warning("\The [user] is trying to put a condom on you!")) if(!do_mob(user, C, 4 SECONDS)) //if Failed to put the condom on return if(!user.transferItemToLoc(src, P)) //check if you can put it in @@ -85,12 +85,12 @@ L.update_genitals() // apply the colour! */ if(C.has_penis()) - to_chat(C, "Your penis feels more safe!") + to_chat(C, span_userlove("Your penis feels more safe!")) else - to_chat(C, "Your strapon feels more safe... Not sure why would that matter though.") + to_chat(C, span_userlove("Your strapon feels more safe... Not sure why would that matter though.")) return - to_chat(user, "You can't find anywhere to put the condom on.") //Trying to put it on something without/or with a hidden + to_chat(user, span_notice("You can't find anywhere to put the condom on.")) //Trying to put it on something without/or with a hidden */ /obj/item/clothing/head/condom //p @@ -156,7 +156,7 @@ //P.colourtint = "" update_genitals() C.update_icon() - to_chat(src, "The condom bubbles outwards and fills with your cum.") + to_chat(src, span_love("The condom bubbles outwards and fills with your cum.")) SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm) setArousalLoss(0) */ diff --git a/modular_splurt/code/game/objects/items/lewd_items/genital_equipment/sounding.dm b/modular_splurt/code/game/objects/items/lewd_items/genital_equipment/sounding.dm index d3aa33c6a9..b150dd378c 100644 --- a/modular_splurt/code/game/objects/items/lewd_items/genital_equipment/sounding.dm +++ b/modular_splurt/code/game/objects/items/lewd_items/genital_equipment/sounding.dm @@ -15,23 +15,23 @@ if(unwrapped == 0) icon_state = "sounding_rod" unwrapped = 1 - to_chat(user, "You unwrap the rod.") + to_chat(user, span_notice("You unwrap the rod.")) playsound(user, 'sound/items/poster_ripped.ogg', 50, 1, -1) return /* /obj/item/genital_equipment/sounding/attack(mob/living/carbon/C, mob/living/user) if(unwrapped == 0 ) - to_chat(user, "You must remove the rod from the package first!") + to_chat(user, span_notice("You must remove the rod from the package first!")) return var/obj/item/organ/genital/penis/P = C.getorganslot(ORGAN_SLOT_PENIS) if(C.has_penis(REQUIRE_EXPOSED) && (P?.genital_flags & HAS_EQUIPMENT)) if(P.equipment[GENITAL_EQUIPMENT_SOUNDING]) - to_chat(user, "\The [C] already has a rod inside!") + to_chat(user, span_notice("\The [C] already has a rod inside!")) return if(isliving(C) && isliving(user) && unwrapped == 1) - C.visible_message("\The [user] is trying to insert a rod inside \The [C]!",\ - "\The [user] is trying to insert a rod inside you!") + C.visible_message(span_warning("\The [user] is trying to insert a rod inside \The [C]!"),\ + span_warning("\The [user] is trying to insert a rod inside you!")) if(!do_mob(user, C, 4 SECONDS)) return if(!user.transferItemToLoc(src, P)) //check if you can put it in @@ -39,11 +39,11 @@ playsound(C, 'modular_sand/sound/lewd/champ_fingering.ogg', 50, 1, -1) P.equipment[GENITAL_EQUIPMENT_SOUNDING] = src - to_chat(C, "Your penis feels stuffed and stretched!") + to_chat(C, span_userlove("Your penis feels stuffed and stretched!")) owner = C return - to_chat(user, "You can't find anywhere to put the rod inside.") + to_chat(user, span_notice("You can't find anywhere to put the rod inside.")) /obj/item/genital_equipment/sounding/genital_remove_proccess(var/obj/item/organ/genital/G) if(!G.equipment[GENITAL_EQUIPMENT_SOUNDING]) @@ -59,7 +59,7 @@ if(P.equipment[GENITAL_EQUIPMENT_SOUNDING]) P.equipment.Remove(GENITAL_EQUIPMENT_SOUNDING) new /obj/item/genital_equipment/sounding/used_sounding(loc) - to_chat(src, "The rod falls off from your penis.") + to_chat(src, span_lewd("The rod falls off from your penis.")) /obj/item/genital_equipment/sounding/used_sounding name = "sounding rod" diff --git a/modular_splurt/code/game/objects/items/lewd_items/leash.dm b/modular_splurt/code/game/objects/items/lewd_items/leash.dm index 64bbd65ebb..88ed837f87 100644 --- a/modular_splurt/code/game/objects/items/lewd_items/leash.dm +++ b/modular_splurt/code/game/objects/items/lewd_items/leash.dm @@ -49,7 +49,7 @@ Icons, maybe? RegisterSignal(owner, COMSIG_LIVING_RESIST, .proc/owner_resist) redirect_component = owner if(!owner.stat) - to_chat(owner, "You have been leashed!") + to_chat(owner, span_userdanger("You have been leashed!")) return ..() //This lets the pet resist their leash @@ -61,7 +61,7 @@ Icons, maybe? //deleash = 100 if(do_mob(owner, owner, deleash))//do_mob creates a progress bar and then enacts the code after. Owner, owner, because it's an act on themself if(!QDELETED(src)) - to_chat(owner, "[owner] has removed their leash!") + to_chat(owner, span_warning("[owner] has removed their leash!")) owner.remove_status_effect(/datum/status_effect/leash_pet) ///// OBJECT ///// @@ -90,7 +90,7 @@ Icons, maybe? //Called when someone is clicked with the leash /obj/item/leash/attack(mob/living/carbon/C, mob/living/user, attackchain_flags, damage_multiplier) //C is the target, user is the one with the leash if(C.has_status_effect(/datum/status_effect/leash_pet)) //If the pet is already leashed, do not leash them. For the love of god. - to_chat(user, "[C] has already been leashed.") + to_chat(user, span_notice("[C] has already been leashed.")) return if(istype(C.get_item_by_slot(ITEM_SLOT_NECK), /obj/item/clothing/neck/petcollar) || istype(C.get_item_by_slot(ITEM_SLOT_NECK), /obj/item/electropack/shockcollar) || istype(C.get_item_by_slot(ITEM_SLOT_NECK), /obj/item/clothing/neck/necklace/cowbell) || istype(C.get_item_by_slot(ITEM_SLOT_NECK), /obj/item/clothing/neck/maid)) var/leashtime = 50 @@ -114,9 +114,9 @@ Icons, maybe? leash_pet.add_movespeed_modifier(MOVESPEED_ID_LEASH) for(var/mob/viewing in viewers(user, null)) if(viewing == leash_master) - to_chat(leash_master, "You have hooked a leash onto [leash_pet]!") + to_chat(leash_master, span_warning("You have hooked a leash onto [leash_pet]!")) else - viewing.show_message("[leash_pet] has been leashed by [leash_master]!", 1) + viewing.show_message(span_warning("[leash_pet] has been leashed by [leash_master]!"), 1) if(leash_pet.has_status_effect(/datum/status_effect/leash_dom)) //Pet leashed themself. They are not the dom leash_pet.apply_status_effect(/datum/status_effect/leash_freepet) leash_pet.remove_status_effect(/datum/status_effect/leash_dom) @@ -126,9 +126,9 @@ Icons, maybe? return if(!(leash_pet.get_item_by_slot(ITEM_SLOT_NECK))) //The pet has slipped their collar and is not the pet anymore. for(var/mob/viewing in viewers(user, null)) - viewing.show_message("[leash_pet] has slipped out of their collar!!", 1) - to_chat(leash_pet, "You have slipped out of your collar!") - to_chat(loc, "[leash_pet] has slipped out of their collar!") + viewing.show_message(span_notice("[leash_pet] has slipped out of their collar!!"), 1) + to_chat(leash_pet, span_notice("You have slipped out of your collar!")) + to_chat(loc, span_notice("[leash_pet] has slipped out of their collar!")) leash_pet.remove_status_effect(/datum/status_effect/leash_pet) if(!leash_pet.has_status_effect(/datum/status_effect/leash_pet)) //If there is no pet, there is no dom. Loop breaks. @@ -150,7 +150,7 @@ Icons, maybe? else //No collar, no fun var/leash_message = pick("Your pet needs a collar") - to_chat(user, "[leash_message]") + to_chat(user, span_notice("[leash_message]")) //Called when the leash is used in hand //Tugs the pet closer @@ -192,8 +192,8 @@ Icons, maybe? return if(leash_pet.x > leash_master.x + 3 || leash_pet.x < leash_master.x - 3 || leash_pet.y > leash_master.y + 3 || leash_pet.y < leash_master.y - 3) //var/leash_knockdown_message = "[leash_pet] got pulled to the ground by their leash!" - //to_chat(leash_master, "[leash_knockdown_message]") - //to_chat(leash_pet, "[leash_knockdown_message]") + //to_chat(leash_master, span_notice("[leash_knockdown_message]")) + //to_chat(leash_pet, span_notice("[leash_knockdown_message]")) leash_pet.apply_effect(20, EFFECT_KNOCKDOWN, 0) //This code is to check if the pet has gotten too far away, and then break the leash. @@ -206,11 +206,11 @@ Icons, maybe? var/leash_break_message = "The leash snapped free from [leash_pet]!" for(var/mob/viewing in viewers(leash_pet, null)) if(viewing == leash_master) - to_chat(leash_master, "The leash snapped free from your pet!") + to_chat(leash_master, span_warning("The leash snapped free from your pet!")) if(viewing == leash_pet) - to_chat(leash_pet, "Your leash has popped from your collar!") + to_chat(leash_pet, span_warning("Your leash has popped from your collar!")) else - viewing.show_message("[leash_break_message]", 1) + viewing.show_message(span_warning("[leash_break_message]"), 1) leash_pet.apply_effect(20, EFFECT_KNOCKDOWN, 0) leash_pet.adjustOxyLoss(5) leash_pet.remove_status_effect(/datum/status_effect/leash_pet) @@ -315,9 +315,9 @@ Icons, maybe? var/leash_break_message = "The leash snapped free from [leash_pet]!" for(var/mob/viewing in viewers(leash_pet, null)) if(viewing == leash_pet) - to_chat(leash_pet, "Your leash has popped from your collar!") + to_chat(leash_pet, span_warning("Your leash has popped from your collar!")) else - viewing.show_message("[leash_break_message]", 1) + viewing.show_message(span_warning("[leash_break_message]"), 1) leash_pet.apply_effect(20, EFFECT_KNOCKDOWN, 0) leash_pet.adjustOxyLoss(5) leash_pet.remove_status_effect(/datum/status_effect/leash_pet) @@ -345,7 +345,7 @@ Icons, maybe? if(leash_master.is_holding_item_of_type(/obj/item/leash) || istype(leash_master.get_item_by_slot(ITEM_SLOT_BELT), /obj/item/leash)) return //Dom still has the leash as it turns out. Cancel the proc. for(var/mob/viewing in viewers(leash_master, null)) - viewing.show_message("[leash_master] has dropped the leash.", 1) + viewing.show_message(span_notice("[leash_master] has dropped the leash."), 1) //DOM HAS DROPPED LEASH. PET IS FREE. SCP HAS BREACHED CONTAINMENT. leash_pet.remove_movespeed_modifier(MOVESPEED_ID_LEASH) //mobhook_leash_freepet = leash_pet.AddComponent(/datum/component/redirect, list(COMSIG_MOVABLE_MOVED = CALLBACK(src, .proc/on_freepet_move))) diff --git a/modular_splurt/code/game/objects/items/lewd_items/rope.dm b/modular_splurt/code/game/objects/items/lewd_items/rope.dm index 7811d209b2..7400b68552 100644 --- a/modular_splurt/code/game/objects/items/lewd_items/rope.dm +++ b/modular_splurt/code/game/objects/items/lewd_items/rope.dm @@ -69,45 +69,45 @@ GLOBAL_LIST_INIT(bondage_rope_slowdowns, list( switch(rope_target) if(ROPE_TARGET_HANDS_IN_FRONT, ROPE_TARGET_HANDS_BEHIND, ROPE_TARGET_HANDS_OBJECT) if(C.handcuffed != null && !istype(C.handcuffed, /obj/item/restraints/bondage_rope)) - to_chat(user, "[C] is already handcuffed...") + to_chat(user, span_warning("[C] is already handcuffed...")) return if(C.get_num_arms(FALSE) < 2 && !C.get_arm_ignore()) - to_chat(user, "[C] doesn't have two hands...") + to_chat(user, span_warning("[C] doesn't have two hands...")) return if(C.handcuffed == null) - C.visible_message("[user] is trying to tie [C]'s hands [rope_target_text()]!", \ - "[user] is trying to tie [C]'s hands [rope_target_text()]!") + C.visible_message(span_danger("[user] is trying to tie [C]'s hands [rope_target_text()]!"), \ + span_userdanger("[user] is trying to tie [C]'s hands [rope_target_text()]!")) else var/obj/item/restraints/bondage_rope/rope = C.handcuffed if(LAZYLEN(rope.rope_stack) >= ROPE_MAX_STACK) - to_chat(user, "You cannot strengthen this rope anymore...") + to_chat(user, span_warning("You cannot strengthen this rope anymore...")) return - C.visible_message("[user] is trying to strengthen the rope on [C]!", \ - "[user] is trying to strengthen the rope on [C]!") + C.visible_message(span_danger("[user] is trying to strengthen the rope on [C]!"), \ + span_userdanger("[user] is trying to strengthen the rope on [C]!")) process_knot(C, user) if(ROPE_TARGET_LEGS, ROPE_TARGET_LEGS_OBJECT) if(C.legcuffed != null && !istype(C.legcuffed, /obj/item/restraints/bondage_rope)) - to_chat(user, "[C] is already legcuffed...") + to_chat(user, span_warning("[C] is already legcuffed...")) return if(C.get_num_legs(FALSE) < 2 && !C.get_leg_ignore()) - to_chat(user, "[C] doesn't have two legs...") + to_chat(user, span_warning("[C] doesn't have two legs...")) return if(C.legcuffed == null) - C.visible_message("[user] is trying to tie [C]'s legs!", \ - "[user] is trying to tie [C]'s legs!") + C.visible_message(span_danger("[user] is trying to tie [C]'s legs!"), \ + span_userdanger("[user] is trying to tie [C]'s legs!")) else var/obj/item/restraints/bondage_rope/rope = C.legcuffed if(LAZYLEN(rope.rope_stack) >= ROPE_MAX_STACK) - to_chat(user, "You cannot strengthen this rope anymore...") + to_chat(user, span_warning("You cannot strengthen this rope anymore...")) return - C.visible_message("[user] is trying to strengthen the rope on [C]!", \ - "[user] is trying to strengthen the rope on [C]!") + C.visible_message(span_danger("[user] is trying to strengthen the rope on [C]!"), \ + span_userdanger("[user] is trying to strengthen the rope on [C]!")) process_knot(C, user) /obj/item/restraints/bondage_rope/attack_obj(obj/O, mob/user) if(rope_state != ROPE_STATE_DECIDING_OBJECT) - to_chat(user, "You need to attach the rope to somebody first.") + to_chat(user, span_notice("You need to attach the rope to somebody first.")) return process_object(O, user) @@ -119,7 +119,7 @@ GLOBAL_LIST_INIT(bondage_rope_slowdowns, list( // Might be reduntant, since the roped mob gets pulled, but meh var/distance = get_dist(user, roped_mob) if(distance > ROPE_MAX_DISTANCE_MASTER) - to_chat(user, "The rope isn't long enough to tie a knot.") + to_chat(user, span_warning("The rope isn't long enough to tie a knot.")) return for(var/type in GLOB.bondage_rope_objects) @@ -137,26 +137,26 @@ GLOBAL_LIST_INIT(bondage_rope_slowdowns, list( SSblackbox.record_feedback("tally", "handcuffs", 1, type) log_combat(user, C, "handcuffed") if(C.handcuffed == null) - to_chat(user, "You tie [C]'s hands [rope_target_text()].") + to_chat(user, span_notice("You tie [C]'s hands [rope_target_text()].")) after_process_knot(C, user) else - to_chat(user, "You strengthen the rope on [C].") + to_chat(user, span_notice("You strengthen the rope on [C].")) strengthen_rope(C, user) else - to_chat(user, "You fail to tie [C]'s hands!") + to_chat(user, span_warning("You fail to tie [C]'s hands!")) if(ROPE_TARGET_LEGS, ROPE_TARGET_LEGS_OBJECT) if(do_mob(user, C, 30) && (C.get_num_legs(FALSE) >= 2 || C.get_leg_ignore())) playsound(loc, cuffsound, 30, 1, -2) SSblackbox.record_feedback("tally", "handcuffs", 1, type) log_combat(user, C, "handcuffed") if(C.legcuffed == null) - to_chat(user, "You tie [C]'s legs.") + to_chat(user, span_notice("You tie [C]'s legs.")) after_process_knot(C, user) else - to_chat(user, "You strengthen the rope on [C].") + to_chat(user, span_notice("You strengthen the rope on [C].")) strengthen_rope(C, user) else - to_chat(user, "You fail to tie [C]'s legs!") + to_chat(user, span_warning("You fail to tie [C]'s legs!")) // > Using normal rope, calls finish_knot_normal // > Using object rope, handles the handcuffed effect (unless instant self apply is disabled) and sets state to ROPE_STATE_DECIDING_OBJECT @@ -176,7 +176,7 @@ GLOBAL_LIST_INIT(bondage_rope_slowdowns, list( set_roped_mob(C) set_roped_master(user) set_rope_slowdown(C) - to_chat(roped_master, "Attach the rope to an object to finish the knot.") + to_chat(roped_master, span_notice("Attach the rope to an object to finish the knot.")) while(1) sleep(2) if(rope_state == ROPE_STATE_UNTIED) @@ -229,8 +229,8 @@ GLOBAL_LIST_INIT(bondage_rope_slowdowns, list( set_roped_master(null) set_roped_object(O, O_type) - to_chat(roped_mob, "You are tied to [O].") - to_chat(roped_master, "You tie the rope to [O].") + to_chat(roped_mob, span_warning("You are tied to [O].")) + to_chat(roped_master, span_notice("You tie the rope to [O].")) tugged_flag = TRUE apply_tug_mob_to_object(roped_mob, roped_object, ROPE_MAX_DISTANCE_OBJECT) @@ -241,22 +241,22 @@ GLOBAL_LIST_INIT(bondage_rope_slowdowns, list( if(roped_mob == null) if(roped_master != null) - to_chat(roped_master, "Seems like whoever you were roping... Is gone?") + to_chat(roped_master, span_warning("Seems like whoever you were roping... Is gone?")) reset_rope_state() return FALSE if(rope_state == ROPE_STATE_TIED || (roped_master != roped_mob || ROPE_SELF_APPLY_INSTANT)) if(rope_target == ROPE_TARGET_HANDS_OBJECT && roped_mob.handcuffed != src) if(roped_master != null) - to_chat(roped_master, "[roped_mob] got out of your rope.") + to_chat(roped_master, span_warning("[roped_mob] got out of your rope.")) reset_rope_state() return FALSE if(rope_target == ROPE_TARGET_LEGS_OBJECT && roped_mob.legcuffed != src) if(roped_master != null) - to_chat(roped_master, "[roped_mob] got out of your rope.") + to_chat(roped_master, span_warning("[roped_mob] got out of your rope.")) reset_rope_state() return FALSE if(rope_state == ROPE_STATE_TIED && roped_object == null) - to_chat(roped_mob, "The thing you were tied to... Is gone?") + to_chat(roped_mob, span_warning("The thing you were tied to... Is gone?")) reset_rope_state() return FALSE @@ -308,11 +308,11 @@ GLOBAL_LIST_INIT(bondage_rope_slowdowns, list( var/distance = get_dist(roped_mob.loc, roped_master.loc) if(distance > ROPE_MAX_DISTANCE_MASTER) if (prob(10)) - to_chat(roped_mob, "You tug the rope away from [roped_master].") - to_chat(roped_master, "[roped_mob] tugs the rope away from you.") + to_chat(roped_mob, span_warning("You tug the rope away from [roped_master].")) + to_chat(roped_master, span_warning("[roped_mob] tugs the rope away from you.")) forceMove(roped_mob.loc) else - to_chat(roped_mob, "The rope doesn't let you go further.") + to_chat(roped_mob, span_warning("The rope doesn't let you go further.")) tugged_flag = TRUE apply_tug_mob_to_mob(roped_mob, roped_master, ROPE_MAX_DISTANCE_MASTER) // Not reduntant, since the above line can tug the rope and make roped_master null @@ -336,7 +336,7 @@ GLOBAL_LIST_INIT(bondage_rope_slowdowns, list( if(can_move) apply_tug_object_to_mob(roped_object, roped_mob, ROPE_MAX_DISTANCE_OBJECT) else - to_chat(roped_mob, "The rope doesn't let you go further.") + to_chat(roped_mob, span_warning("The rope doesn't let you go further.")) tugged_flag = TRUE apply_tug_mob_to_object(roped_mob, roped_object, ROPE_MAX_DISTANCE_OBJECT) distance = get_dist(roped_mob.loc, roped_object.loc) @@ -346,10 +346,10 @@ GLOBAL_LIST_INIT(bondage_rope_slowdowns, list( /obj/item/restraints/bondage_rope/proc/snap_rope() var/loc = null if(roped_master != null) - to_chat(roped_master, "The rope snaps.") + to_chat(roped_master, span_warning("The rope snaps.")) loc = roped_master.loc if(roped_mob != null) - to_chat(roped_mob, "The rope snaps.") + to_chat(roped_mob, span_warning("The rope snaps.")) loc = roped_mob.loc reset_rope_state() forceMove(loc) @@ -416,7 +416,7 @@ GLOBAL_LIST_INIT(bondage_rope_slowdowns, list( /obj/item/restraints/bondage_rope/proc/customize_rope(mob/living/user) if(rope_state != ROPE_STATE_UNTIED) - to_chat(user, "You can only customize an untied rope.") + to_chat(user, span_warning("You can only customize an untied rope.")) return if(src && !user.incapacitated() && in_range(user, src)) diff --git a/modular_splurt/code/game/objects/items/lewd_items/strapon.dm b/modular_splurt/code/game/objects/items/lewd_items/strapon.dm index f21d3e3e5d..3385468c2d 100644 --- a/modular_splurt/code/game/objects/items/lewd_items/strapon.dm +++ b/modular_splurt/code/game/objects/items/lewd_items/strapon.dm @@ -7,7 +7,7 @@ /obj/item/strapon_strap/attackby(obj/item/I, mob/living/user, params) if(istype(I, /obj/item/dildo)) - to_chat(user, "You attach the dildo to the strap.") + to_chat(user, span_userlove("You attach the dildo to the strap.")) var/obj/item/dildo/dildo = I var/obj/item/clothing/underwear/briefs/strapon/new_strapon = new /obj/item/clothing/underwear/briefs/strapon(user.loc) new_strapon.dildo_color = dildo.color @@ -48,10 +48,10 @@ /obj/item/clothing/underwear/briefs/strapon/examine(mob/user) . = ..() . += "There is a [GLOB.dildo_size_names[dildo_size]] [dildo_shape][dildo_can_customize ? " custom" : ""] dildo attached to it." - . += "Alt-Click \the [src.name] to separate the strap and dildo." + . += span_notice("Alt-Click \the [src.name] to separate the strap and dildo.") /obj/item/clothing/underwear/briefs/strapon/AltClick(mob/living/user, obj/item/I) - to_chat(user, "You separate the dildo from the strap.") + to_chat(user, span_userlove("You separate the dildo from the strap.")) var/obj/item/strapon_strap/new_strapon_strap = new /obj/item/strapon_strap(user.loc) var/obj/item/dildo/new_dildo if(dildo_can_customize) @@ -105,7 +105,7 @@ if(istype(user, /mob/living/carbon)) var/mob/living/carbon/C = user - to_chat(C, "You're now ready to bone someone!") + to_chat(C, span_userlove("You're now ready to bone someone!")) /obj/item/clothing/underwear/briefs/strapon/mob_can_equip(M, equipper, slot, disable_warning, bypass_equip_delay_self) if(!..()) @@ -114,7 +114,7 @@ if(istype(M, /mob/living)) var/mob/living/living = M if(living.has_penis(REQUIRE_ANY)) - to_chat(living, "\The [living] doesn't seem to need a strapon!") + to_chat(living, span_notice("\The [living] doesn't seem to need a strapon!")) return FALSE return TRUE diff --git a/modular_splurt/code/game/objects/items/lewd_items/vibrator.dm b/modular_splurt/code/game/objects/items/lewd_items/vibrator.dm index 6d8a813c00..95339ce1a4 100644 --- a/modular_splurt/code/game/objects/items/lewd_items/vibrator.dm +++ b/modular_splurt/code/game/objects/items/lewd_items/vibrator.dm @@ -48,15 +48,15 @@ Code: switch(mode) if(1) mode = 2 - to_chat(user, "You twist the bottom of [src], setting it to the medium setting.") + to_chat(user, span_notice("You twist the bottom of [src], setting it to the medium setting.")) return if(2) mode = 3 - to_chat(user, "You twist the bottom of [src], setting it to the high setting.") + to_chat(user, span_warning("You twist the bottom of [src], setting it to the high setting.")) return if(3) mode = 1 - to_chat(user, "You twist the bottom of [src], setting it to the low setting.") + to_chat(user, span_notice("You twist the bottom of [src], setting it to the low setting.")) return /* /obj/item/electropack/vibrator/attack(mob/living/carbon/C, mob/living/user) @@ -66,22 +66,22 @@ Code: var/mob/living/carbon/human/T = C picked_organ = S.pick_receiving_organ(T, HAS_EQUIPMENT, "Vibrator", "Where are you putting it in?") if(picked_organ) - C.visible_message("\The [user] is trying to attach [src] to \The [T]!",\ - "\The [user] is trying to put [src] on you!") + C.visible_message(span_warning("\The [user] is trying to attach [src] to \The [T]!"),\ + span_warning("\The [user] is trying to put [src] on you!")) if(!do_mob(user, C, 5 SECONDS))//warn them and have a delay of 5 seconds to apply. return if(style == "long" && !(picked_organ.type == /obj/item/organ/genital/vagina)) //long vibrators dont fit on anything but vaginas, but small ones fit everywhere - to_chat(user, "[src] is too big to fit there, use a smaller version.") + to_chat(user, span_warning("[src] is too big to fit there, use a smaller version.")) return if(!picked_organ.equipment[GENITAL_EQUIPMENT_VIBRATOR]) if(!(style == "long")) - to_chat(user, "You attach [src] to \The [T]'s [picked_organ.name].") + to_chat(user, span_love("You attach [src] to \The [T]'s [picked_organ.name].")) else - to_chat(user, "You insert [src] into \The [T]'s [picked_organ.name].") + to_chat(user, span_love("You insert [src] into \The [T]'s [picked_organ.name].")) else - to_chat(user, "They already have a [picked_organ.equipment[GENITAL_EQUIPMENT_VIBRATOR].name] there.") + to_chat(user, span_notice("They already have a [picked_organ.equipment[GENITAL_EQUIPMENT_VIBRATOR].name] there.")) return if(!user.transferItemToLoc(src, picked_organ)) //check if you can put it in @@ -89,10 +89,10 @@ Code: playsound(C, 'modular_sand/sound/lewd/champ_fingering.ogg', 50, 1, -1) inside = TRUE picked_organ.equipment[GENITAL_EQUIPMENT_VIBRATOR] = src - to_chat(user, "Done Done") //Will delete after testing + to_chat(user, span_warning("Done Done")) //Will delete after testing else - to_chat(user, "You don't see anywhere to attach this.") + to_chat(user, span_notice("You don't see anywhere to attach this.")) */ @@ -114,9 +114,9 @@ Code: if(G) switch(G.type) //just being fancy if(/obj/item/organ/genital/breasts) - to_chat(U, "[src] vibrates against your nipples!") + to_chat(U, span_love("[src] vibrates against your nipples!")) else - to_chat(U, "[src] vibrates against your [G.name]!") + to_chat(U, span_love("[src] vibrates against your [G.name]!")) var/intencity = 6*mode U.handle_post_sex(intencity, null, src) //give pleasure @@ -125,13 +125,13 @@ Code: switch(mode) if(1) //low, setting for RP, it wont force your character to do anything. - to_chat(U, "You feel pleasure surge through your [G.name]") + to_chat(U, span_love("You feel pleasure surge through your [G.name]")) U.do_jitter_animation() //do animation without heartbeat if(2) //med, can make you cum - to_chat(U, "You feel intense pleasure surge through your [G.name]") + to_chat(U, span_love("You feel intense pleasure surge through your [G.name]")) U.do_jitter_animation() if(3) //high, makes you stun - to_chat(U, "You feel overpowering pleasure surge through your [G.name]") + to_chat(U, span_userdanger("You feel overpowering pleasure surge through your [G.name]")) U.Jitter(3) U.Stun(30) if(prob(50)) diff --git a/modular_splurt/code/game/objects/items/manuals.dm b/modular_splurt/code/game/objects/items/manuals.dm index d0daae4424..b3e648bf97 100644 --- a/modular_splurt/code/game/objects/items/manuals.dm +++ b/modular_splurt/code/game/objects/items/manuals.dm @@ -95,5 +95,5 @@ "} /obj/item/book/manual/splurt_space_law/suicide_act(mob/living/user) - user.visible_message("[user] pretends to read \the [src] intently... then promptly dies of laughter!") + user.visible_message(span_suicide("[user] pretends to read \the [src] intently... then promptly dies of laughter!")) return OXYLOSS diff --git a/modular_splurt/code/game/objects/items/mesmetron.dm b/modular_splurt/code/game/objects/items/mesmetron.dm index d42913aa17..b156ee7c9e 100644 --- a/modular_splurt/code/game/objects/items/mesmetron.dm +++ b/modular_splurt/code/game/objects/items/mesmetron.dm @@ -21,7 +21,7 @@ to_chat(user, "You can't hypnotize [H] whilst they're asleep!") return - user.visible_message("[user] begins to mesmerizingly wave [src] like a pendulum before [H]'s very eyes!") + user.visible_message(span_warning("[user] begins to mesmerizingly wave [src] like a pendulum before [H]'s very eyes!")) if(!do_mob(user, H, 12 SECONDS)) return @@ -34,7 +34,7 @@ var/response = alert(H, "Do you wish to fall into a hypnotic sleep? (This will allow [user] to issue hypnotic suggestions)", "Hypnosis", "Yes", "No") if(response == "Yes") - H.visible_message("[H] falls into a deep slumber!", "Your eyelids gently shut as you fall into a deep slumber. All you can hear is [user]'s voice as you commit to following all of their suggestions") + H.visible_message(span_warning("[H] falls into a deep slumber!"), "Your eyelids gently shut as you fall into a deep slumber. All you can hear is [user]'s voice as you commit to following all of their suggestions") H.SetSleeping(1200) H.drowsyness = max(H.drowsyness, 40) @@ -42,7 +42,7 @@ return //No - H.visible_message("[H]'s attention breaks, despite your attempts to hypnotize them! They clearly don't want this", "Your concentration breaks as you realise you have no interest in following [user]'s words!") + H.visible_message(span_warning("[H]'s attention breaks, despite your attempts to hypnotize them! They clearly don't want this"), "Your concentration breaks as you realise you have no interest in following [user]'s words!") @@ -76,11 +76,11 @@ return to_chat(user, "You whisper your suggestion in a smooth calming voice to [subject]") - to_chat(subject, "...[text]...") + to_chat(subject, span_hypnophrase("...[text]...")) return //Release - subject.visible_message("[subject] wakes up from their deep slumber!", "Your eyelids gently open as you see [user]'s face staring back at you") + subject.visible_message(span_warning("[subject] wakes up from their deep slumber!"), "Your eyelids gently open as you see [user]'s face staring back at you") subject.SetSleeping(0) subject = null diff --git a/modular_splurt/code/game/objects/items/miscellaneous.dm b/modular_splurt/code/game/objects/items/miscellaneous.dm index d2eb377e0f..72cd6781e5 100644 --- a/modular_splurt/code/game/objects/items/miscellaneous.dm +++ b/modular_splurt/code/game/objects/items/miscellaneous.dm @@ -64,15 +64,15 @@ if(isnull(insults)) playsound(get_turf(src), 'modular_splurt/sound/voice/halt.ogg', 100, 1, vary = 0) - user.audible_message("[user]'s [name] rasps, \"[use_message]\"", "\The [user] holds up \the [name].") + user.audible_message(span_warning("[user]'s [name] rasps, \"[use_message]\""), span_warning("\The [user] holds up \the [name].")) else if(insults > 0) playsound(get_turf(src), 'sound/voice/beepsky/insult.ogg', 100, 1, vary = 0) // Yes, it used to show the transcription of the sound clip. That was a) inaccurate b) immature as shit. - user.audible_message("[user]'s [name] gurgles something indecipherable and deeply offensive.", "\The [user] holds up \the [name].") + user.audible_message(span_warning("[user]'s [name] gurgles something indecipherable and deeply offensive."), span_warning("\The [user] holds up \the [name].")) insults-- else - user << "*BZZZZZZZZT*" + user << span_danger("*BZZZZZZZZT*") spamcheck = 1 spawn(20) @@ -80,7 +80,7 @@ /obj/item/device/hailer/emag_act(remaining_charges, mob/user) if(isnull(insults)) - user << "You overload \the [src]'s voice synthesizer." + user << span_danger("You overload \the [src]'s voice synthesizer.") insults = rand(1, 3)//to prevent dickflooding return 1 else @@ -170,20 +170,20 @@ if(istype(C, /obj/item/card/id)) var/obj/item/card/id/idcard = C if(!idcard.registered_name) - to_chat(user, "\The [src] rejects the ID!") + to_chat(user, span_warning("\The [src] rejects the ID!")) return if(!owner) owner = idcard.registered_name ownjob = idcard.assignment update_label() - to_chat(user, "Badge updated.") + to_chat(user, span_notice("Badge updated.")) /obj/item/clothing/accessory/badge/attack_self(mob/user) if(Adjacent(user)) - user.visible_message("[user] shows you: [icon2html(src, viewers(user))] [src.name].", \ - "You show \the [src.name].") + user.visible_message(span_notice("[user] shows you: [icon2html(src, viewers(user))] [src.name]."), \ + span_notice("You show \the [src.name].")) add_fingerprint(user) /obj/item/clothing/accessory/badge/holo diff --git a/modular_splurt/code/game/objects/items/plushes.dm b/modular_splurt/code/game/objects/items/plushes.dm index 33a6a2f1f1..588e204edb 100644 --- a/modular_splurt/code/game/objects/items/plushes.dm +++ b/modular_splurt/code/game/objects/items/plushes.dm @@ -20,3 +20,11 @@ icon = 'modular_splurt/icons/obj/plushes.dmi' icon_state = "plushie_mal0" item_state = "plushie_mal0" + +/obj/item/toy/plush/nobl + name = "Nobl plushie" + desc = "It seems to be a small canine, not necessarily latex like you would suspect for some reason, but extremely squishy." + icon = 'modular_splurt/icons/obj/plushes.dmi' + icon_state = "nobl_plush" + item_state = "nobl_plush" + squeak_override = list('modular_splurt/sound/misc/dog_toy.ogg' = 1) diff --git a/modular_splurt/code/game/objects/items/robot/robot_upgrades.dm b/modular_splurt/code/game/objects/items/robot/robot_upgrades.dm index cdee195096..4d1662b642 100644 --- a/modular_splurt/code/game/objects/items/robot/robot_upgrades.dm +++ b/modular_splurt/code/game/objects/items/robot/robot_upgrades.dm @@ -10,7 +10,7 @@ ExpandSize = 200 if(ExpandSize <= 0) ExpandSize = 200 - to_chat(user, "Expand set to [ExpandSize] %.") + to_chat(user, span_notice("Expand set to [ExpandSize] %.")) return ExpandSize /obj/item/borg/upgrade/shrink @@ -25,5 +25,5 @@ ShrinkSize = 50 if(ShrinkSize <= 0) ShrinkSize = 50 - to_chat(user, "Shrink set to [ShrinkSize] %.") + to_chat(user, span_notice("Shrink set to [ShrinkSize] %.")) return ShrinkSize diff --git a/modular_splurt/code/game/objects/items/storage/backpack.dm b/modular_splurt/code/game/objects/items/storage/backpack.dm index b612c32248..2592d3bc70 100644 --- a/modular_splurt/code/game/objects/items/storage/backpack.dm +++ b/modular_splurt/code/game/objects/items/storage/backpack.dm @@ -9,3 +9,11 @@ new /obj/item/grenade/chem_grenade/teargas(src) new /obj/item/grenade/chem_grenade/teargas(src) new /obj/item/grenade/chem_grenade/teargas(src) + +/obj/item/storage/backpack/sloogshell + name = "Sloog shell" + desc = "A large shell, belonging to probably a very large snail or slug... Wait... It can store things?" + icon = 'modular_splurt/icons/obj/storage.dmi' + icon_state = "sloog_backpack" + mob_overlay_icon = 'modular_splurt/icons/mob/clothing/64_back.dmi' + worn_x_dimension = 64 diff --git a/modular_splurt/code/game/objects/items/storage/boxes.dm b/modular_splurt/code/game/objects/items/storage/boxes.dm index 08e2b03e48..34d085605d 100644 --- a/modular_splurt/code/game/objects/items/storage/boxes.dm +++ b/modular_splurt/code/game/objects/items/storage/boxes.dm @@ -14,3 +14,65 @@ new /obj/item/reagent_containers/hypospray/medipen/bellygrowth(src) new /obj/item/reagent_containers/hypospray/medipen/prospacillin(src) new /obj/item/reagent_containers/hypospray/medipen/lewdbomb(src) + +// Kinkmate listing for the rapid disrobe implant +/obj/item/storage/box/implant_disrobe + name = "rapid disrobe implant box" + desc = "Comes with an implanter and an implant case for quick application!" + icon = 'modular_sand/icons/obj/fleshlight.dmi' + icon_state = "box" + +/obj/item/storage/box/implant_disrobe/ComponentInitialize() + . = ..() + var/datum/component/storage/str = GetComponent(/datum/component/storage) + str.max_items = 2 + +/obj/item/storage/box/implant_disrobe/PopulateContents() + new /obj/item/implanter(src) + new /obj/item/implantcase/disrobe(src) + +// Shipment box for Plushmium +/obj/item/storage/box/shipment_plushmium + name = "plushmium backer rewards box" + desc = "Comes with a spray bottle quick application!" + icon = 'modular_sand/icons/obj/fleshlight.dmi' + icon_state = "box" + +/obj/item/storage/box/shipment_plushmium/ComponentInitialize() + . = ..() + var/datum/component/storage/str = GetComponent(/datum/component/storage) + str.max_items = 2 + +/obj/item/storage/box/shipment_plushmium/PopulateContents() + new /obj/item/reagent_containers/spray/plushmium(src) + new /obj/item/paper/fluff/shipment_plushmium(src) + +// Plushmium box's note +/obj/item/paper/fluff/shipment_plushmium + name = "plushmium backer note" + info = "

Plushmium Instructions

Dear esteemed customer,

Thank for backing the Stuffing For Spessmen© crowd funding initiative. We at Donk Co. pride ourselves on making a wide variety of engaging toys for our loyal customers to enjoy. Now, we're bringing the toy making process directly to your home or workplace! Included in this box is:
  • A spray bottle of Love to Life™ solution
  • A carefully packaged plushie
To begin enjoying your new friend, start by unpacking the included plushie. Our selection process goes through rigorous quality testing to ensure you'll always get the best toy for the job. With so many choices, you'll want to get the whole family in on the action.

Once you have everything ready, it's time to make the patented Donk Co. magic happen! Spray your new best friend with Love to Life™ solution, included in the complimentary spray bottle, and watch the stunning transformation!

But don't leave your new best friend hanging! Give them a big warm hug to celebrate the long and intimate friendship you'll be sharing.


Donk Co. is not responsible for any injury or loss of life that may occur while using the Love to Life™ solution. Do not allow access to children or adults without supervision by a chemist.

Do not drink, splash, inject, or otherwise handle the solution. Do not come into direct physical contact with the solution, or any object the solution has been applied to, under any circumstances." + +// Kinkmate listing for condom box +/obj/item/storage/box/bulk_condoms + name = "surplus condom box" + desc = "A large collection of condoms, suitable for the safest of sluts!" + icon = 'modular_sand/icons/obj/fleshlight.dmi' + icon_state = "box" + custom_price = PRICE_ALMOST_EXPENSIVE // Half the price of buying individually + +/obj/item/storage/box/bulk_condoms/ComponentInitialize() + . = ..() + + // Define storage component + var/datum/component/storage/str = GetComponent(/datum/component/storage) + + // Set max items to 10 + str.max_items = 10 + + // Restrict contents to only condoms + str.can_hold = typecacheof(list(/obj/item/genital_equipment/condom)) + +/obj/item/storage/box/bulk_condoms/PopulateContents() + // Add maximum amount + for(var/i in 1 to 10) + new /obj/item/genital_equipment/condom(src) diff --git a/modular_splurt/code/game/objects/items/storage/wallets.dm b/modular_splurt/code/game/objects/items/storage/wallets.dm new file mode 100644 index 0000000000..8e08e7b456 --- /dev/null +++ b/modular_splurt/code/game/objects/items/storage/wallets.dm @@ -0,0 +1,20 @@ +// Bluespace wallet +/obj/item/storage/wallet/bluespace + name = "\improper wallet of holding" + desc = "A testament to science's hubris. It holds thrice as many stolen ID cards." + icon = 'modular_splurt/icons/obj/storage.dmi' + icon_state = "wallet_bluespace" + + // Copied from bag of holding + resistance_flags = FIRE_PROOF + item_flags = NO_MAT_REDEMPTION + rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE + +/obj/item/storage/wallet/bluespace/ComponentInitialize() + . = ..() + var/datum/component/storage/STR = GetComponent(/datum/component/storage) + STR.max_items = 12 + +/obj/item/storage/wallet/bluespace/update_icon_state() + // Don't update icons + return diff --git a/modular_splurt/code/game/objects/items/weaponry.dm b/modular_splurt/code/game/objects/items/weaponry.dm index 6490b81444..522326cad1 100644 --- a/modular_splurt/code/game/objects/items/weaponry.dm +++ b/modular_splurt/code/game/objects/items/weaponry.dm @@ -22,13 +22,13 @@ force = 10 /obj/item/bdsm_whip/suicide_act(mob/user) - user.visible_message("[user] is getting just a little too kinky!") + user.visible_message(span_suicide("[user] is getting just a little too kinky!")) return (OXYLOSS) /obj/item/bdsm_whip/attack(mob/M, mob/user) if(user.zone_selected == BODY_ZONE_PRECISE_GROIN) playsound(loc, 'sound/weapons/whip.ogg', 30) - M.visible_message("[user] has [pick(attack_verb)] [M] on the ass!") + M.visible_message(span_userdanger("[user] has [pick(attack_verb)] [M] on the ass!")) else return ..(M, user) @@ -54,5 +54,5 @@ total_mass = TOTAL_MASS_MEDIEVAL_WEAPON /obj/item/khopesh/suicide_act(mob/user) - user.visible_message("[user] is falling on [src]! It looks like [user.p_theyre()] trying to commit suicide!") + user.visible_message(span_suicide("[user] is falling on [src]! It looks like [user.p_theyre()] trying to commit suicide!")) return(BRUTELOSS) diff --git a/modular_splurt/code/game/objects/items/weaponry/armyknife.dm b/modular_splurt/code/game/objects/items/weaponry/armyknife.dm index 268ad386aa..a7274198d9 100644 --- a/modular_splurt/code/game/objects/items/weaponry/armyknife.dm +++ b/modular_splurt/code/game/objects/items/weaponry/armyknife.dm @@ -16,7 +16,7 @@ /obj/item/armyknife/attack_self(mob/user) playsound(get_turf(user),'sound/weapons/batonextend.ogg',50,1) var/obj/item/armyknife/ak_screw = new /obj/item/armyknife/screw(drop_location()) - to_chat(user, "You unfold the screwdriver.") + to_chat(user, span_notice("You unfold the screwdriver.")) qdel(src) user.put_in_active_hand(ak_screw) @@ -42,7 +42,7 @@ /obj/item/armyknife/screw/attack_self(mob/user) playsound(get_turf(user),'sound/weapons/batonextend.ogg',50,1) var/obj/item/armyknife/ak_cut = new /obj/item/armyknife/cutter(drop_location()) - to_chat(user, "You fold the screwdriver and unfold the wirecutters.") + to_chat(user, span_notice("You fold the screwdriver and unfold the wirecutters.")) qdel(src) user.put_in_active_hand(ak_cut) @@ -70,7 +70,7 @@ /obj/item/armyknife/cutter/attack_self(mob/user) playsound(get_turf(user), 'sound/weapons/batonextend.ogg', 50, 1) var/obj/item/armyknife/ak_knife = new /obj/item/armyknife/blade(drop_location()) - to_chat(user, "You fold the wirecutters and unfold the knife.") + to_chat(user, span_notice("You fold the wirecutters and unfold the knife.")) qdel(src) user.put_in_active_hand(ak_knife) @@ -94,7 +94,7 @@ /obj/item/armyknife/blade/attack_self(mob/user) playsound(get_turf(user), 'sound/weapons/batonextend.ogg', 50, 1) var/obj/item/armyknife/ak_fold = new /obj/item/armyknife(drop_location()) - to_chat(user, "You fold the knife.") + to_chat(user, span_notice("You fold the knife.")) qdel(src) user.put_in_active_hand(ak_fold) diff --git a/modular_splurt/code/game/objects/items/weaponry/melee.dm b/modular_splurt/code/game/objects/items/weaponry/melee.dm index 2ad3ab7506..6750b10e31 100644 --- a/modular_splurt/code/game/objects/items/weaponry/melee.dm +++ b/modular_splurt/code/game/objects/items/weaponry/melee.dm @@ -3,7 +3,7 @@ /obj/item/melee/baseball_bat/AltClick(mob/living/carbon/human/user as mob) hole = hole == CUM_TARGET_VAGINA ? CUM_TARGET_ANUS : CUM_TARGET_VAGINA - to_chat(user, "Now targetting \the [hole].") + to_chat(user, span_notice("Now targetting \the [hole].")) /obj/item/melee/baseball_bat/attack(mob/living/target, mob/living/user) if (BODY_ZONE_PRECISE_GROIN && user.a_intent != INTENT_HARM) //ROUGH PRISON HUMILATION YAY @@ -22,7 +22,7 @@ message = (user == target) ? pick("fucks [possessive_verb] own ass with \the [src]","shoves \the [src] into [possessive_verb] ass", "jams \the [src] into [possessive_verb] ass") : pick("fucks [target]'s asshole with \the [src]", "jams \the [src] into [target]'s ass") lust_amt = NORMAL_LUST if(message) - user.visible_message("[user] [message].") + user.visible_message(span_lewd("[user] [message].")) target.handle_post_sex(lust_amt, null, user) playsound(loc, pick('modular_sand/sound/interactions/bang4.ogg', 'modular_sand/sound/interactions/bang5.ogg', @@ -33,7 +33,7 @@ return var/atom/throw_target = get_edge_target_turf(target, user.dir) if(homerun_ready) - user.visible_message("It's a home run!") + user.visible_message(span_userdanger("It's a home run!")) target.throw_at(throw_target, rand(8,10), 14, user) target.ex_act(EXPLODE_HEAVY) playsound(get_turf(src), 'sound/weapons/homerun.ogg', 100, TRUE) diff --git a/modular_splurt/code/game/objects/structures/bathroom.dm b/modular_splurt/code/game/objects/structures/bathroom.dm index 8ba710f406..d43c5597a3 100644 --- a/modular_splurt/code/game/objects/structures/bathroom.dm +++ b/modular_splurt/code/game/objects/structures/bathroom.dm @@ -21,17 +21,17 @@ var/mob/living/carbon/human/H = user if(istype(I, /obj/item/soap)) if(!istype(H.gloves, /obj/item/clothing/gloves/color/latex)) - to_chat(H, "No! No fucking way I'm touching this shit without at LEAST latex gloves!") + to_chat(H, span_warning("No! No fucking way I'm touching this shit without at LEAST latex gloves!")) return if(!istype(H.get_inactive_held_item(), /obj/item/storage/bag/trash)) - to_chat(H, "I'd.. need a trashbag or similar to stash all this shit.") + to_chat(H, span_warning("I'd.. need a trashbag or similar to stash all this shit.")) return - H.visible_message("[H] starts cleaning \the [src]![prob(0.1) ? " All for free.." : ""]", "You start.. scooping all the shit into the trash bag.. Eugh.") + H.visible_message(span_notice("[H] starts cleaning \the [src]![prob(0.1) ? " All for free.." : ""]"), span_notice("You start.. scooping all the shit into the trash bag.. Eugh.")) if(!do_after(H, 130, target = src)) - H.visible_message("[H] gives up!", "Fuck this shit.") + H.visible_message(span_notice("[H] gives up!"), span_warning("Fuck this shit.")) return - H.visible_message("[H] finishes cleaning \the [src]!", "You're finally done. Thank fuck.'") + H.visible_message(span_notice("[H] finishes cleaning \the [src]!"), span_notice("You're finally done. Thank fuck.'")) new /obj/structure/urinal(loc, dir, TRUE) return return ..() diff --git a/modular_splurt/code/game/objects/structures/cannons/cannon.dm b/modular_splurt/code/game/objects/structures/cannons/cannon.dm index ff31f69626..a4e01395da 100644 --- a/modular_splurt/code/game/objects/structures/cannons/cannon.dm +++ b/modular_splurt/code/game/objects/structures/cannons/cannon.dm @@ -25,8 +25,8 @@ /obj/structure/cannon/examine(mob/user) . = ..() - . += "[src] accepts gunpowder or welding fuel." - . += "Using welding fuel will weaken the force of the projectile fired." + . += span_notice("[src] accepts gunpowder or welding fuel.") + . += span_warning("Using welding fuel will weaken the force of the projectile fired.") /obj/structure/cannon/proc/fire() for(var/mob/shaken_mob in urange(10, src)) @@ -48,24 +48,24 @@ /obj/structure/cannon/attackby(obj/item/used_item, mob/user, params) if(charge_ignited) - to_chat(user, "It's gonna fire!") + to_chat(user, span_warning("It's gonna fire!")) return var/ignition_message = used_item.ignition_effect(src, user) if(istype(used_item, /obj/item/stack/cannonball)) if(loaded_cannonball) - to_chat(user, "[src] is already loaded!") + to_chat(user, span_warning("[src] is already loaded!")) else var/obj/item/stack/cannonball/cannoneers_balls = used_item loaded_cannonball = new cannoneers_balls.type(src, 1) loaded_cannonball.copy_evidences(cannoneers_balls) - to_chat(user, "You load a [cannoneers_balls.singular_name] into \the [src].") + to_chat(user, span_notice("You load a [cannoneers_balls.singular_name] into \the [src].")) cannoneers_balls.use(1, transfer = TRUE) return else if(ignition_message) if(!reagents.has_reagent(/datum/reagent/blackpowder,charge_size) && !reagents.has_reagent(/datum/reagent/fuel,charge_size)) - to_chat(user, "[src] needs [reagents.maximum_volume]u of charge!") + to_chat(user, span_warning("[src] needs [reagents.maximum_volume]u of charge!")) return visible_message(ignition_message) log_game("Cannon fired by [key_name(user)] in [AREACOORD(src)]") @@ -81,7 +81,7 @@ return ..() if(!powder_keg.reagents.total_volume) - to_chat(user, "[powder_keg] is empty!") + to_chat(user, span_warning("[powder_keg] is empty!")) return if(reagents.total_volume >= reagents.maximum_volume) to_chat(user, "") @@ -89,15 +89,15 @@ var/has_enough_gunpowder = powder_keg.reagents.has_reagent(/datum/reagent/blackpowder, charge_size) var/has_enough_alt_fuel = powder_keg.reagents.has_reagent(/datum/reagent/fuel, charge_size) if(!has_enough_gunpowder && !has_enough_alt_fuel) - to_chat(user, "[powder_keg] doesn't have at least 15u of fuel to fill [src]!") + to_chat(user, span_warning("[powder_keg] doesn't have at least 15u of fuel to fill [src]!")) return if(has_enough_gunpowder) powder_keg.reagents.trans_id_to(src, /datum/reagent/blackpowder, amount = charge_size) - to_chat(user, "You load [src] with gunpowder.") + to_chat(user, span_notice("You load [src] with gunpowder.")) return if(has_enough_alt_fuel) powder_keg.reagents.trans_id_to(src, /datum/reagent/fuel, amount = charge_size) - to_chat(user, "You load [src] with welding fuel.") + to_chat(user, span_notice("You load [src] with welding fuel.")) return if(anchorable_cannon && used_item.tool_behaviour == TOOL_WRENCH) if(default_unfasten_wrench(user, used_item, time = 2 SECONDS)) @@ -122,11 +122,11 @@ if(used_alt_fuel) fires_before_deconstruction-- if(prob(explode_chance)) - visible_message("[src] explodes!") + visible_message(span_warning("[src] explodes!")) explosion(src, heavy_impact_range = 1, light_impact_range = 5, flame_range = 5) return if(fires_before_deconstruction <= 0) - visible_message("[src] falls apart from operation!") + visible_message(span_warning("[src] falls apart from operation!")) qdel(src) /obj/structure/cannon/trash/Destroy() diff --git a/modular_splurt/code/game/objects/structures/fence.dm b/modular_splurt/code/game/objects/structures/fence.dm index 0ad3ea5f90..b0b679c7a9 100644 --- a/modular_splurt/code/game/objects/structures/fence.dm +++ b/modular_splurt/code/game/objects/structures/fence.dm @@ -32,16 +32,16 @@ if(health < maxhealth) switch(health / maxhealth) if(0.0 to 0.5) - . += "It looks severely damaged!" + . += span_warning("It looks severely damaged!") if(0.25 to 0.5) - . += "It looks damaged!" + . += span_warning("It looks damaged!") if(0.5 to 1.0) - . += "It has a few scrapes and dents." + . += span_notice("It has a few scrapes and dents.") /obj/structure/fence/handrail/take_damage(amount) health -= amount if(health <= 0) - visible_message("\The [src] breaks down!") + visible_message(span_warning("\The [src] breaks down!")) playsound(src, 'sound/effects/grillehit.ogg', 50, 1) new /obj/item/stack/rods(get_turf(src)) qdel(src) diff --git a/modular_splurt/code/game/objects/structures/micro_bricks.dm b/modular_splurt/code/game/objects/structures/micro_bricks.dm index 0c167c87bd..bbd5ad77f6 100644 --- a/modular_splurt/code/game/objects/structures/micro_bricks.dm +++ b/modular_splurt/code/game/objects/structures/micro_bricks.dm @@ -17,12 +17,12 @@ return TRUE if(istype(item, /obj/item/carpentry/glue)) - to_chat(user,"You glue the bricks to the floor.") + to_chat(user,span_notice("You glue the bricks to the floor.")) anchored = TRUE return TRUE if(istype(item, /obj/item/crowbar)) - to_chat(user,"You pry the bricks from the floor.") + to_chat(user,span_notice("You pry the bricks from the floor.")) anchored = FALSE return TRUE diff --git a/modular_splurt/code/game/objects/structures/pole.dm b/modular_splurt/code/game/objects/structures/pole.dm index 9d8a96456f..21442124bd 100644 --- a/modular_splurt/code/game/objects/structures/pole.dm +++ b/modular_splurt/code/game/objects/structures/pole.dm @@ -16,6 +16,11 @@ . = ..() if(.) return + + // Don't teleport telekinetic users to the pole. + if (get_dist(src,user) > 1) + return + if(obj_flags & IN_USE) to_chat(user, "It's already in use - wait a bit.") return @@ -73,9 +78,9 @@ add_fingerprint(user) if(istype(P, /obj/item/wrench)) if (!(item_flags & IN_INVENTORY)) - to_chat(user, "You start to fasten the frame to the floor and celing...") + to_chat(user, span_notice("You start to fasten the frame to the floor and celing...")) if(P.use_tool(src, user, 8 SECONDS, volume=50)) - to_chat(user, "You construct the stripper pole!") + to_chat(user, span_notice("You construct the stripper pole!")) var/obj/structure/pole/C = new C.loc = loc del(src) @@ -84,9 +89,9 @@ /obj/structure/pole/attackby(obj/item/P, mob/user, params) //un-erecting a pole. :( add_fingerprint(user) if(istype(P, /obj/item/wrench)) - to_chat(user, "You start to unfastening the frame...") + to_chat(user, span_notice("You start to unfastening the frame...")) if(P.use_tool(src, user, 8 SECONDS, volume=50)) - to_chat(user, "You take down the stripper pole!") + to_chat(user, span_notice("You take down the stripper pole!")) var/obj/item/polepack/C = new C.loc = loc del(src) diff --git a/modular_splurt/code/game/objects/structures/statues.dm b/modular_splurt/code/game/objects/structures/statues.dm index 7eb3fbbb2b..865929ed5a 100644 --- a/modular_splurt/code/game/objects/structures/statues.dm +++ b/modular_splurt/code/game/objects/structures/statues.dm @@ -16,12 +16,19 @@ /obj/structure/statue/gargoyle name = "statue" desc = "An incredibly intricate statue, which... almost seems alive!" - icon_state = "human_male" + icon = 'modular_splurt/icons/obj/structures/statue.dmi' + icon_state = "gargoyle" //empty sprite because it's supposed to copy over the overlays anyway, and otherwise, you end up with a white human male underlay beneath the statue. density = TRUE anchored = TRUE flags_1 = PREVENT_CONTENTS_EXPLOSION_1 max_integrity = 200 var/mob/living/petrified_mob + var/old_max_health + var/old_size + var/was_tilted + var/was_lying + var/was_lying_prev + var/deconstructed = FALSE /obj/structure/statue/gargoyle/Initialize(mapload, mob/living/L) . = ..() @@ -29,17 +36,48 @@ petrified_mob = L if(L.buckled) L.buckled.unbuckle_mob(L,force=1) - L.visible_message("[L]'s skin rapidly turns to stone!", "Your skin abruptly hardens as you turn to stone once more!") + L.visible_message(span_warning("[L]'s skin rapidly turns to stone!"), span_warning("Your skin abruptly hardens as you turn to stone once more!")) + dir = L.dir + transform = L.transform + pixel_x = L.pixel_x + pixel_y = L.pixel_y + layer = L.layer + was_tilted = L.is_tilted + was_lying = L.lying + was_lying_prev = L.lying_prev L.forceMove(src) ADD_TRAIT(L, TRAIT_MUTE, STATUE_TRAIT) ADD_TRAIT(L, TRAIT_MOBILITY_NOMOVE, STATUE_TRAIT) ADD_TRAIT(L, TRAIT_MOBILITY_NOPICKUP, STATUE_TRAIT) ADD_TRAIT(L, TRAIT_MOBILITY_NOUSE, STATUE_TRAIT) + ADD_TRAIT(L, TRAIT_NOBREATH, STATUE_TRAIT) + ADD_TRAIT(L, TRAIT_NOHUNGER, STATUE_TRAIT) + ADD_TRAIT(L, TRAIT_NOTHIRST, STATUE_TRAIT) + ADD_TRAIT(L, TRAIT_NOFIRE, STATUE_TRAIT) //OH GOD HELP I'M ON FIRE INSIDE THE STATUE I CAN'T MOVE AND I CAN'T STOP IT HAAAAALP - person who experienced this + L.click_intercept = src L.faction += "mimic" //Stops mimics from instaqdeling people in statues L.status_flags |= GODMODE + old_max_health = L.maxHealth + old_size = get_size(L) obj_integrity = L.health + 100 //stoning damaged mobs will result in easier to shatter statues max_integrity = obj_integrity +/obj/structure/statue/gargoyle/proc/InterceptClickOn(mob/living/caller, params, atom/A) //technically could be bypassed by doing something that also uses click intercept but shrug + var/atom/movable/screen/movable/action_button/ab = A + if (istype(ab)) + if (istype(ab.linked_action, /datum/action/gargoyle)) + return FALSE + var/list/modifiers = params2list(params) + if (modifiers["shift"] && !modifiers["ctrl"] && !modifiers["middle"]) + return FALSE + return TRUE + +/obj/structure/statue/gargoyle/examine_more(mob/user) //something about the funny signals doesn't work here no matter how much I fucked around with it (ie registering to COMSIG_PARENT_EXAMINE_MORE doesn't do anything), so we have to overwrite the proc + . = ..() + if (petrified_mob) + SEND_SIGNAL(petrified_mob, COMSIG_PARENT_EXAMINE, user, .) + . -= span_notice("You examine [src] closer, but find nothing of interest...") + /obj/structure/statue/gargoyle/handle_atom_del(atom/A) if(A == petrified_mob) petrified_mob = null @@ -52,14 +90,57 @@ REMOVE_TRAIT(petrified_mob, TRAIT_MOBILITY_NOMOVE, STATUE_TRAIT) REMOVE_TRAIT(petrified_mob, TRAIT_MOBILITY_NOPICKUP, STATUE_TRAIT) REMOVE_TRAIT(petrified_mob, TRAIT_MOBILITY_NOUSE, STATUE_TRAIT) - petrified_mob.take_overall_damage((petrified_mob.health - obj_integrity + 100)) //any new damage the statue incurred is transfered to the mob + REMOVE_TRAIT(petrified_mob, TRAIT_NOBREATH, STATUE_TRAIT) + REMOVE_TRAIT(petrified_mob, TRAIT_NOHUNGER, STATUE_TRAIT) + REMOVE_TRAIT(petrified_mob, TRAIT_NOTHIRST, STATUE_TRAIT) + REMOVE_TRAIT(petrified_mob, TRAIT_NOFIRE, STATUE_TRAIT) petrified_mob.faction -= "mimic" + petrified_mob.click_intercept = null + petrified_mob.dir = dir + petrified_mob.update_size(old_size) + var/damage = deconstructed ? petrified_mob.health : petrified_mob.health*(old_max_health/petrified_mob.maxHealth) - obj_integrity + 100 + petrified_mob.take_overall_damage(damage) //any new damage the statue incurred is transfered to the mob + petrified_mob.transform = transform + petrified_mob.lying = was_lying + petrified_mob.lying_prev = was_lying_prev + petrified_mob.update_mobility() + petrified_mob.pixel_x = pixel_x + petrified_mob.pixel_y = pixel_y + petrified_mob.layer = layer + petrified_mob.is_shifted = TRUE //just prevents bad things tbh + petrified_mob.is_tilted = was_tilted + if (pulledby && pulledby.pulling == src) //gotta checked just in case + pulledby.start_pulling(petrified_mob, supress_message = TRUE) + var/datum/quirk/gargoyle/T = locate() in petrified_mob.roundstart_quirks + if (T) + T.transformed = 0 petrified_mob = null return ..() /obj/structure/statue/gargoyle/deconstruct(disassembled = TRUE) - if(!disassembled) - if(petrified_mob) - petrified_mob.dust() - visible_message("[src] shatters!.") + deconstructed = TRUE + visible_message(span_danger("[src] shatters!")) qdel(src) + +/obj/structure/statue/gargoyle/attackby(obj/item/W, mob/living/user, params) + add_fingerprint(user) + if(!(flags_1 & NODECONSTRUCT_1)) + if(default_unfasten_wrench(user, W)) + return + if(W.tool_behaviour == TOOL_WELDER) + if(!W.tool_start_check(user, amount=0)) + return FALSE + + if (petrified_mob && alert(user, "You are slicing apart a gargoyle! Are you sure you want to continue? This will severely harm them, if not outright kill them.",, "Continue", "Cancel") == "Cancel") + return + + user.visible_message(span_notice("[user] is slicing apart the [name]."), \ + span_notice("You are slicing apart the [name]...")) + if (petrified_mob) + to_chat(petrified_mob, span_userdanger("You are being sliced apart by [user]!")) + if(W.use_tool(src, user, 40, volume=50)) + user.visible_message(span_notice("[user] slices apart the [name]."), \ + span_notice("You slice apart the [name]!")) + deconstruct(TRUE) + return + return ..() diff --git a/modular_splurt/code/game/objects/structures/table_frames.dm b/modular_splurt/code/game/objects/structures/table_frames.dm index 2cae0e49c1..6150d8c221 100644 --- a/modular_splurt/code/game/objects/structures/table_frames.dm +++ b/modular_splurt/code/game/objects/structures/table_frames.dm @@ -22,9 +22,9 @@ if (toConstruct) if(material.get_amount() < 1) - to_chat(user, "You need one [material.name] sheet to do this!") + to_chat(user, span_warning("You need one [material.name] sheet to do this!")) return - to_chat(user, "You start adding [material] to [src]...") + to_chat(user, span_notice("You start adding [material] to [src]...")) if(do_after(user, 20, target = src) && material.use(1)) make_new_table(toConstruct) else @@ -54,9 +54,9 @@ if (toConstruct) if(material.get_amount() < 1) - to_chat(user, "You need one [material.name] sheet to do this!") + to_chat(user, span_warning("You need one [material.name] sheet to do this!")) return - to_chat(user, "You start adding [material] to [src]...") + to_chat(user, span_notice("You start adding [material] to [src]...")) if(do_after(user, 20, target = src) && material.use(1)) make_new_table(toConstruct) else diff --git a/modular_splurt/code/modules/admin/JobBan.dm b/modular_splurt/code/modules/admin/JobBan.dm index 98b2fe27d2..ba4e107cff 100644 --- a/modular_splurt/code/modules/admin/JobBan.dm +++ b/modular_splurt/code/modules/admin/JobBan.dm @@ -100,7 +100,7 @@ GLOBAL_LIST_INIT(jobban_panel_data, list( if("Temporary") var/mins = input(usr,"How long (in minutes)?","Ban time",1440) as num|null if(mins <= 0) - to_chat(usr, "[mins] is not a valid duration.") + to_chat(usr, span_danger("[mins] is not a valid duration.")) return reason = input(usr,"Please State Reason For Banning [M.key].","Reason") as message|null if(!reason) @@ -111,7 +111,7 @@ GLOBAL_LIST_INIT(jobban_panel_data, list( var/msg for(var/job in notbannedlist) if(!DB_ban_record(BANTYPE_JOB_TEMP, M, mins, reason, job)) - to_chat(usr, "Failed to apply ban.") + to_chat(usr, span_danger("Failed to apply ban.")) return if(M.client) jobban_buildcache(M.client) @@ -122,10 +122,10 @@ GLOBAL_LIST_INIT(jobban_panel_data, list( else msg += ", [job]" create_message("note", M.key, null, "Banned from [msg] - [reason]", null, null, 0, 0, null, 0, severity) - message_admins("[key_name_admin(usr)] banned [key_name_admin(M)] from [msg] for [mins] minutes.") - to_chat(M, "You have been [((msg == "ooc") || (msg == "appearance") || (msg == "pacifist")) ? "banned" : "jobbanned"] by [usr.client.key] from: [msg == "pacifist" ? "using violence" : msg].") - to_chat(M, "The reason is: [reason]") - to_chat(M, "This jobban will be lifted in [mins] minutes.") + message_admins(span_adminnotice("[key_name_admin(usr)] banned [key_name_admin(M)] from [msg] for [mins] minutes.")) + to_chat(M, span_boldannounce("You have been [((msg == "ooc") || (msg == "appearance") || (msg == "pacifist")) ? "banned" : "jobbanned"] by [usr.client.key] from: [msg == "pacifist" ? "using violence" : msg].")) + to_chat(M, span_boldannounce("The reason is: [reason]")) + to_chat(M, span_danger("This jobban will be lifted in [mins] minutes.")) if("Permanent") reason = input(usr,"Please State Reason For Banning [M.key].","Reason") as message|null @@ -138,7 +138,7 @@ GLOBAL_LIST_INIT(jobban_panel_data, list( var/msg for(var/job in notbannedlist) if(!DB_ban_record(BANTYPE_JOB_PERMA, M, -1, reason, job)) - to_chat(usr, "Failed to apply ban.") + to_chat(usr, span_danger("Failed to apply ban.")) return if(M.client) jobban_buildcache(M.client) @@ -149,10 +149,10 @@ GLOBAL_LIST_INIT(jobban_panel_data, list( else msg += ", [job]" create_message("note", M.key, null, "Banned from [msg] - [reason]", null, null, 0, 0, null, 0, severity) - message_admins("[key_name_admin(usr)] banned [key_name_admin(M)] from [msg].") - to_chat(M, "You have been [((msg == "ooc") || (msg == "appearance") || (msg == "pacifist")) ? "banned" : "jobbanned"] by [usr.client.key] from: [msg == "pacifist" ? "using violence" : msg].") - to_chat(M, "The reason is: [reason]") - to_chat(M, "This jobban can be lifted only upon request.") + message_admins(span_adminnotice("[key_name_admin(usr)] banned [key_name_admin(M)] from [msg].")) + to_chat(M, span_boldannounce("You have been [((msg == "ooc") || (msg == "appearance") || (msg == "pacifist")) ? "banned" : "jobbanned"] by [usr.client.key] from: [msg == "pacifist" ? "using violence" : msg].")) + to_chat(M, span_boldannounce("The reason is: [reason]")) + to_chat(M, span_danger("This jobban can be lifted only upon request.")) // notbannedlist is just a list of strings of the job titles you want to unban. /datum/admins/proc/UnJobban(mob/M, list/bannedlist) @@ -175,5 +175,5 @@ GLOBAL_LIST_INIT(jobban_panel_data, list( else msg += ", [job]" if(msg) - message_admins("[key_name_admin(usr)] unbanned [key_name_admin(M)] from [msg].") - to_chat(M, "You have been un-jobbanned by [usr.client.key] from [msg].") + message_admins(span_adminnotice("[key_name_admin(usr)] unbanned [key_name_admin(M)] from [msg].")) + to_chat(M, span_boldannounce("You have been un-jobbanned by [usr.client.key] from [msg].")) diff --git a/modular_splurt/code/modules/admin/Kick.dm b/modular_splurt/code/modules/admin/Kick.dm index 19c0f77de2..12bda65b2c 100644 --- a/modular_splurt/code/modules/admin/Kick.dm +++ b/modular_splurt/code/modules/admin/Kick.dm @@ -1,13 +1,13 @@ /datum/admins/proc/kick(mob/M) if (!ismob(M) || !M.client) - to_chat(usr, "Error: [M] has no client!") + to_chat(usr, span_danger("Error: [M] has no client!")) return if(!check_if_greater_rights_than(M.client)) - to_chat(usr, "Error: They have more rights than you do.") + to_chat(usr, span_danger("Error: They have more rights than you do.")) return - to_chat(M, "You have been kicked from the server by [usr.client.holder.fakekey ? "an Administrator" : "[usr.client.key]"].") + to_chat(M, span_danger("You have been kicked from the server by [usr.client.holder.fakekey ? "an Administrator" : "[usr.client.key]"].")) log_admin("[key_name(usr)] kicked [key_name(M)].") - message_admins("[key_name_admin(usr)] kicked [key_name_admin(M)].") + message_admins(span_adminnotice("[key_name_admin(usr)] kicked [key_name_admin(M)].")) qdel(M.client) diff --git a/modular_splurt/code/modules/admin/NewBan.dm b/modular_splurt/code/modules/admin/NewBan.dm index 9a42461c34..709d6cc095 100644 --- a/modular_splurt/code/modules/admin/NewBan.dm +++ b/modular_splurt/code/modules/admin/NewBan.dm @@ -4,36 +4,36 @@ // var/mob/M = mob_to_ban if(!ismob(M) || !M.client) - to_chat(usr, "Error: [M] has no client!") + to_chat(usr, span_danger("Error: [M] has no client!")) return if(M.client && M.client.holder) - to_chat(usr, "Error: You cannot ban admins!") + to_chat(usr, span_danger("Error: You cannot ban admins!")) return //admins cannot be banned. Even if they could, the ban doesn't affect them anyway switch(tgui_alert(usr, "Ban type", buttons = list("Temporary", "Permanent", "Cancel"))) if("Temporary") var/mins = input(usr,"How long (in minutes)?","Ban time",1440) as num|null if(mins <= 0) - to_chat(usr, "[mins] is not a valid duration.") + to_chat(usr, span_danger("[mins] is not a valid duration.")) return var/reason = input(usr,"Please State Reason For Banning [M.key].","Reason") as message|null if(!reason) return if(!DB_ban_record(BANTYPE_TEMP, M, mins, reason)) - to_chat(usr, "Failed to apply ban.") + to_chat(usr, span_danger("Failed to apply ban.")) return AddBan(M.ckey, M.computer_id, reason, usr.ckey, 1, mins) ban_unban_log_save("[key_name(usr)] has banned [key_name(M)]. - Reason: [reason] - This will be removed in [mins] minutes.") - to_chat(M, "You have been banned by [usr.client.key].\nReason: [reason]") - to_chat(M, "This is a temporary ban, it will be removed in [mins] minutes. The round ID is [GLOB.round_id].") + to_chat(M, span_boldannounce("You have been banned by [usr.client.key].\nReason: [reason]")) + to_chat(M, span_danger("This is a temporary ban, it will be removed in [mins] minutes. The round ID is [GLOB.round_id].")) var/bran = CONFIG_GET(string/banappeals) if(bran) - to_chat(M, "To try to resolve this matter head to [bran]") + to_chat(M, span_danger("To try to resolve this matter head to [bran]")) else - to_chat(M, "No ban appeals URL has been set.") + to_chat(M, span_danger("No ban appeals URL has been set.")) log_admin_private("[key_name(usr)] has banned [key_name(M)].\nReason: [key_name(M)]\nThis will be removed in [mins] minutes.") - var/msg = "[key_name_admin(usr)] has banned [key_name_admin(M)].\nReason: [reason]\nThis will be removed in [mins] minutes." + var/msg = span_adminnotice("[key_name_admin(usr)] has banned [key_name_admin(M)].\nReason: [reason]\nThis will be removed in [mins] minutes.") message_admins(msg) var/datum/admin_help/AH = M.client ? M.client.current_ticket : null if(AH) @@ -50,19 +50,19 @@ AddBan(M.ckey, M.computer_id, reason, usr.ckey, 0, 0, M.lastKnownIP) if("No") AddBan(M.ckey, M.computer_id, reason, usr.ckey, 0, 0) - to_chat(M, "You have been banned by [usr.client.key].\nReason: [reason]") - to_chat(M, "This is a permanent ban. The round ID is [GLOB.round_id].") + to_chat(M, span_boldannounce("You have been banned by [usr.client.key].\nReason: [reason]")) + to_chat(M, span_danger("This is a permanent ban. The round ID is [GLOB.round_id].")) var/bran = CONFIG_GET(string/banappeals) if(bran) - to_chat(M, "To try to resolve this matter head to [bran]") + to_chat(M, span_danger("To try to resolve this matter head to [bran]")) else - to_chat(M, "No ban appeals URL has been set.") + to_chat(M, span_danger("No ban appeals URL has been set.")) if(!DB_ban_record(BANTYPE_PERMA, M, -1, reason)) - to_chat(usr, "Failed to apply ban.") + to_chat(usr, span_danger("Failed to apply ban.")) return ban_unban_log_save("[key_name(usr)] has permabanned [key_name(M)]. - Reason: [reason] - This is a permanent ban.") log_admin_private("[key_name(usr)] has banned [key_name(M)].\nReason: [reason]\nThis is a permanent ban.") - var/msg = "[key_name_admin(usr)] has banned [key_name_admin(M)].\nReason: [reason]\nThis is a permanent ban." + var/msg = span_adminnotice("[key_name_admin(usr)] has banned [key_name_admin(M)].\nReason: [reason]\nThis is a permanent ban.") message_admins(msg) var/datum/admin_help/AH = M.client ? M.client.current_ticket : null if(AH) diff --git a/modular_splurt/code/modules/admin/Transform.dm b/modular_splurt/code/modules/admin/Transform.dm index 5fbc48be22..239d17f774 100644 --- a/modular_splurt/code/modules/admin/Transform.dm +++ b/modular_splurt/code/modules/admin/Transform.dm @@ -118,7 +118,7 @@ GLOBAL_LIST_INIT(pp_transformables, list( newTypeName = newType log_admin("[key_name(usr)] transformed [key_name(M)] into a [newTypeName].") - message_admins("[key_name_admin(usr)] transformed [key_name_admin(M)] into a [newTypeName].") + message_admins(span_adminnotice("[key_name_admin(usr)] transformed [key_name_admin(M)] into a [newTypeName].")) var/mob/newMob = M.change_mob_type(newType, delete_old_mob = TRUE) diff --git a/modular_splurt/code/modules/admin/centcom_communications.dm b/modular_splurt/code/modules/admin/centcom_communications.dm index 3a172a4725..2c99fe9b0e 100644 --- a/modular_splurt/code/modules/admin/centcom_communications.dm +++ b/modular_splurt/code/modules/admin/centcom_communications.dm @@ -35,7 +35,7 @@ GLOBAL_VAR_INIT(next_command_message_id, 1) if ("orbit_sender") var/atom/movable/sender = get_mob_by_key(params["sender_ckey"]) if(!sender) - to_chat(usr, "This player cannot be observed.") + to_chat(usr, span_notice("This player cannot be observed.")) return if(!isobserver(admin.mob)) diff --git a/modular_splurt/code/modules/admin/playtimes.dm b/modular_splurt/code/modules/admin/playtimes.dm index 8dbdf7b22e..bcf3e0fee6 100644 --- a/modular_splurt/code/modules/admin/playtimes.dm +++ b/modular_splurt/code/modules/admin/playtimes.dm @@ -22,7 +22,7 @@ return if(!CONFIG_GET(flag/use_exp_tracking)) - to_chat(usr, "Tracking is disabled in the server configuration file.") + to_chat(usr, span_warning("Tracking is disabled in the server configuration file.")) return if(!playtime_menu) @@ -120,7 +120,7 @@ var/atom/movable/target = get_mob_by_key(params["ckey"]) if(!target) - to_chat(usr, "This player cannot be observed.") + to_chat(usr, span_notice("This player cannot be observed.")) return var/client/C = usr.client diff --git a/modular_splurt/code/modules/admin/verbs/discordbunker.dm b/modular_splurt/code/modules/admin/verbs/discordbunker.dm index 149479289a..446520aeec 100644 --- a/modular_splurt/code/modules/admin/verbs/discordbunker.dm +++ b/modular_splurt/code/modules/admin/verbs/discordbunker.dm @@ -2,7 +2,7 @@ set category = "Server" set name = "Toggle Discord Bunker" if(!SSdbcore.IsConnected()) - to_chat(usr, "The Database is not connected/enabled!") + to_chat(usr, span_adminnotice("The Database is not connected/enabled!")) return var/new_dbun = !CONFIG_GET(flag/need_discord_to_join) @@ -18,13 +18,13 @@ set name = "Add Discord Bypass" set desc = "Allows a given ckey to connect through the discord bunker for the round even if they haven't verified yet." if(!SSdbcore.IsConnected()) - to_chat(usr, "The Database is not connected!") + to_chat(usr, span_adminnotice("The Database is not connected!")) return if(!SSdiscord) - to_chat(usr, "The discord subsystem hasn't initialized yet!") + to_chat(usr, span_adminnotice("The discord subsystem hasn't initialized yet!")) return if(!CONFIG_GET(flag/need_discord_to_join)) - to_chat(usr, "The Discord Bunker is deactivated!") + to_chat(usr, span_adminnotice("The Discord Bunker is deactivated!")) return GLOB.discord_passthrough |= ckey(ckeytobypass) @@ -38,13 +38,13 @@ set name = "Revoke Discord Bypass" set desc = "Revoke's a ckey's permission to bypass the discord bunker for a given round." if(!SSdbcore.IsConnected()) - to_chat(usr, "The Database is not connected!") + to_chat(usr, span_adminnotice("The Database is not connected!")) return if(!SSdiscord) - to_chat(usr, "The discord subsystem hasn't initialized yet!") + to_chat(usr, span_adminnotice("The discord subsystem hasn't initialized yet!")) return if(!CONFIG_GET(flag/need_discord_to_join)) - to_chat(usr, "The Discord Bunker is deactivated!") + to_chat(usr, span_adminnotice("The Discord Bunker is deactivated!")) return GLOB.discord_passthrough -= ckey(ckeytobypass) diff --git a/modular_splurt/code/modules/admin/verbs/randomverbs.dm b/modular_splurt/code/modules/admin/verbs/randomverbs.dm index 00c97dddcf..a0c81e3f19 100644 --- a/modular_splurt/code/modules/admin/verbs/randomverbs.dm +++ b/modular_splurt/code/modules/admin/verbs/randomverbs.dm @@ -42,7 +42,7 @@ log_admin("SubtlePM ([sender]): [key_name(usr)] -> [key_name(M)] : [msg]") - msg = " SubtleMessage ([sender]): [key_name_admin(usr)] -> [key_name_admin(M)] : [msg]" + msg = span_adminnotice(" SubtleMessage ([sender]): [key_name_admin(usr)] -> [key_name_admin(M)] : [msg]") message_admins(msg) admin_ticket_log(M, msg) SSblackbox.record_feedback("tally", "admin_verb", 1, "Subtle Message") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/modular_splurt/code/modules/antagonists/_common/antag_spawner.dm b/modular_splurt/code/modules/antagonists/_common/antag_spawner.dm index ebb077ff11..b7d76290db 100644 --- a/modular_splurt/code/modules/antagonists/_common/antag_spawner.dm +++ b/modular_splurt/code/modules/antagonists/_common/antag_spawner.dm @@ -13,14 +13,14 @@ /obj/item/antag_spawner/slaver_borg/proc/check_usability(mob/user) if(used) - to_chat(user, "[src] is out of power!") + to_chat(user, span_warning("[src] is out of power!")) return FALSE if(!user.mind.has_antag_datum(/datum/antagonist/slaver,TRUE)) - to_chat(user, "AUTHENTICATION FAILURE. ACCESS DENIED.") + to_chat(user, span_danger("AUTHENTICATION FAILURE. ACCESS DENIED.")) return FALSE var/area/A = get_area(get_turf(user)) if (!istype(A, /area/slavers)) - to_chat(user, "[src] is out of range! It can only be used at your hideout!") + to_chat(user, span_warning("[src] is out of range! It can only be used at your hideout!")) return FALSE return TRUE @@ -30,11 +30,11 @@ return if(!(next_attempt_allowed < world.time)) - to_chat(user, "A request has already been sent! Wait 1 minute.") + to_chat(user, span_warning("A request has already been sent! Wait 1 minute.")) return next_attempt_allowed = world.time + 1 MINUTES - to_chat(user, "You activate [src] and wait for confirmation.") + to_chat(user, span_notice("You activate [src] and wait for confirmation.")) var/list/borg_candidates = pollGhostCandidates("Do you want to play as a slaver [lowertext(borg_to_spawn)] cyborg?", ROLE_SLAVER, null, ROLE_SLAVER, 150, POLL_IGNORE_SLAVER) if(LAZYLEN(borg_candidates)) if(QDELETED(src) || !check_usability(user)) @@ -45,7 +45,7 @@ do_sparks(4, TRUE, src) qdel(src) else - to_chat(user, "Unable to connect to Slaver command. Please wait and try again later.") + to_chat(user, span_warning("Unable to connect to Slaver command. Please wait and try again later.")) /obj/item/antag_spawner/slaver_borg/spawn_antag(client/C, turf/T, kind, datum/mind/user) var/mob/living/silicon/robot/R diff --git a/modular_splurt/code/modules/antagonists/qareen/qareen.dm b/modular_splurt/code/modules/antagonists/qareen/qareen.dm index 24110b2f44..77189708d9 100644 --- a/modular_splurt/code/modules/antagonists/qareen/qareen.dm +++ b/modular_splurt/code/modules/antagonists/qareen/qareen.dm @@ -100,7 +100,7 @@ /mob/living/simple_animal/qareen/Login() ..() var/qareen_greet - qareen_greet += "You are a qareen." + qareen_greet += span_deadsay("You are a qareen.") qareen_greet += "Your formerly mundane spirit has been infused with alien energies and empowered into a qareen." qareen_greet += "You are not dead, not alive, but somewhere in between. You are capable of limited interaction with both worlds." qareen_greet += "You are invincible and invisible to everyone but other ghosts. Most abilities will reveal you, rendering you vulnerable." @@ -128,11 +128,11 @@ revealed = FALSE incorporeal_move = INCORPOREAL_MOVE_JAUNT invisibility = INVISIBILITY_QAREEN - to_chat(src, "You are once more concealed.") + to_chat(src, span_revenboldnotice("You are once more concealed.")) if(unstun_time && world.time >= unstun_time) unstun_time = 0 mob_transforming = FALSE - to_chat(src, "You can move again!") + to_chat(src, span_revenboldnotice("You can move again!")) if(essence_regenerating && !inhibited && essence < essence_regen_cap) //While inhibited, essence will not regenerate essence = min(essence_regen_cap, essence+essence_regen_amount) update_action_buttons_icon() //because we update something required by our spells in life, we need to update our buttons @@ -165,7 +165,7 @@ if(!message) return src.log_talk(message, LOG_SAY) - var/rendered = "[src] says, \"[message]\"" + var/rendered = span_revennotice("[src] says, \"[message]\"") for(var/mob/M in GLOB.mob_list) if(isqareen(M)) to_chat(M, rendered) @@ -199,8 +199,8 @@ /mob/living/simple_animal/qareen/attackby(obj/item/W, mob/living/user, params) . = ..() if(istype(W, /obj/item/nullrod)) - visible_message("[src] violently flinches!", \ - "As \the [W] passes through you, you feel your essence draining away!") + visible_message(span_warning("[src] violently flinches!"), \ + span_revendanger("As \the [W] passes through you, you feel your essence draining away!")) adjustBruteLoss(25) //hella effective inhibited = TRUE update_action_buttons_icon() @@ -230,17 +230,17 @@ if(!revealed || stasis) //qareens cannot die if they aren't revealed //or are already dead return 0 stasis = TRUE - to_chat(src, "NO! No... it's too late, you can feel your essence [pick("spewing out", "bursting out")]...") + to_chat(src, span_revendanger("NO! No... it's too late, you can feel your essence [pick("spewing out", "bursting out")]...")) mob_transforming = TRUE revealed = TRUE invisibility = 0 playsound(src, 'sound/effects/screech.ogg', 100, 1) - visible_message("[src] lets out a waning screech as violet mist swirls around its dissolving body!") + visible_message(span_warning("[src] lets out a waning screech as violet mist swirls around its dissolving body!")) icon_state = icon_drain for(var/i = alpha, i > 0, i -= 10) stoplag() alpha = i - visible_message("[src]'s body breaks apart into a fine pile of blue dust.") + visible_message(span_danger("[src]'s body breaks apart into a fine pile of blue dust.")) var/reforming_essence = essence_regen_cap //retain the gained essence capacity var/obj/item/ectoplasm/qareen/R = new(get_turf(src)) R.essence = max(reforming_essence - 15 * perfectsouls, 75) //minus any perfect souls @@ -261,10 +261,10 @@ invisibility = 0 incorporeal_move = FALSE if(!unreveal_time) - to_chat(src, "You have been revealed!") + to_chat(src, span_revendanger("You have been revealed!")) unreveal_time = world.time + time else - to_chat(src, "You have been revealed!") + to_chat(src, span_revenwarning("You have been revealed!")) unreveal_time = unreveal_time + time update_spooky_icon() @@ -275,10 +275,10 @@ return mob_transforming = TRUE if(!unstun_time) - to_chat(src, "You cannot move!") + to_chat(src, span_revendanger("You cannot move!")) unstun_time = world.time + time else - to_chat(src, "You cannot move!") + to_chat(src, span_revenwarning("You cannot move!")) unstun_time = unstun_time + time update_spooky_icon() @@ -299,17 +299,17 @@ return var/turf/T = get_turf(src) if(isclosedturf(T)) - to_chat(src, "You cannot use abilities from inside of a wall.") + to_chat(src, span_revenwarning("You cannot use abilities from inside of a wall.")) return FALSE for(var/obj/O in T) if(O.density && !O.CanPass(src, T)) - to_chat(src, "You cannot use abilities inside of a dense object.") + to_chat(src, span_revenwarning("You cannot use abilities inside of a dense object.")) return FALSE if(inhibited) - to_chat(src, "Your powers have been suppressed by nulling energy!") + to_chat(src, span_revenwarning("Your powers have been suppressed by nulling energy!")) return FALSE if(!change_essence_amount(essence_cost, TRUE)) - to_chat(src, "You lack the essence to use that ability.") + to_chat(src, span_revenwarning("You lack the essence to use that ability.")) return FALSE return TRUE @@ -333,9 +333,9 @@ update_action_buttons_icon() if(!silent) if(essence_amt > 0) - to_chat(src, "Gained [essence_amt]E[source ? " from [source]":""].") + to_chat(src, span_revennotice("Gained [essence_amt]E[source ? " from [source]":""].")) else - to_chat(src, "Lost [essence_amt]E[source ? " from [source]":""].") + to_chat(src, span_revenminor("Lost [essence_amt]E[source ? " from [source]":""].")) return 1 /mob/living/simple_animal/qareen/proc/telekinesis_cooldown_end() @@ -383,13 +383,13 @@ reform() else inert = TRUE - visible_message("[src] settles down and seems lifeless.") + visible_message(span_warning("[src] settles down and seems lifeless.")) /obj/item/ectoplasm/qareen/attack_self(mob/user) if(!reforming || inert) return ..() - user.visible_message("[user] scatters [src] in all directions.", \ - "You scatter [src] across the area. The particles slowly fade away.") + user.visible_message(span_notice("[user] scatters [src] in all directions."), \ + span_notice("You scatter [src] across the area. The particles slowly fade away.")) user.dropItemToGround(src) scatter() @@ -397,15 +397,15 @@ ..() if(inert) return - visible_message("[src] breaks into particles upon impact, which fade away to nothingness.") + visible_message(span_notice("[src] breaks into particles upon impact, which fade away to nothingness.")) scatter() /obj/item/ectoplasm/qareen/examine(mob/user) . = ..() if(inert) - . += "It seems inert." + . += span_revennotice("It seems inert.") else if(reforming) - . += "It is shifting and distorted. It would be wise to destroy this." + . += span_revenwarning("It is shifting and distorted. It would be wise to destroy this.") /obj/item/ectoplasm/qareen/proc/reform() if(QDELETED(src) || QDELETED(qareen) || inert) @@ -427,7 +427,7 @@ qdel(qareen) message_admins("No candidates were found for the new qareen. Oh well!") inert = TRUE - visible_message("[src] settles down and seems lifeless.") + visible_message(span_revenwarning("[src] settles down and seems lifeless.")) return var/mob/C = pick(candidates) C.transfer_ckey(qareen, FALSE) @@ -435,12 +435,12 @@ qdel(qareen) message_admins("No ckey was found for the new qareen. Oh well!") inert = TRUE - visible_message("[src] settles down and seems lifeless.") + visible_message(span_revenwarning("[src] settles down and seems lifeless.")) return message_admins("[qareen.key] has been [old_key == qareen.key ? "re":""]made into a qareen by reforming ectoplasm.") log_game("[qareen.key] was [old_key == qareen.key ? "re":""]made as a qareen by reforming ectoplasm.") - visible_message("[src] suddenly rises into the air before fading away.") + visible_message(span_revenboldnotice("[src] suddenly rises into the air before fading away.")) qareen.essence = essence qareen.essence_regen_cap = essence @@ -449,7 +449,7 @@ qdel(src) /obj/item/ectoplasm/qareen/suicide_act(mob/user) - user.visible_message("[user] is inhaling [src]! It looks like [user.p_theyre()] trying to visit the shadow realm!") + user.visible_message(span_suicide("[user] is inhaling [src]! It looks like [user.p_theyre()] trying to visit the shadow realm!")) scatter() return (OXYLOSS) diff --git a/modular_splurt/code/modules/antagonists/qareen/qareen_abilities.dm b/modular_splurt/code/modules/antagonists/qareen/qareen_abilities.dm index d3080936a7..8963ea6379 100644 --- a/modular_splurt/code/modules/antagonists/qareen/qareen_abilities.dm +++ b/modular_splurt/code/modules/antagonists/qareen/qareen_abilities.dm @@ -9,7 +9,7 @@ if(ishuman(A)) if(A in drained_mobs) - to_chat(src, "[A]'s fluids are almost devoid of any essence, also very bland.. almost tasteless... but beggars can't be choosers." ) + to_chat(src, span_revenwarning("[A]'s fluids are almost devoid of any essence, also very bland.. almost tasteless... but beggars can't be choosers.") ) if(in_range(src, A)) Harvest(A) @@ -20,19 +20,19 @@ if(!castcheck(0)) return if(draining) - to_chat(src, "You are already sucking up the essence!") + to_chat(src, span_revenwarning("You are already sucking up the essence!")) return if(target.stat) - to_chat(src, "[target.p_their(TRUE)] essence is too faded to harvest.") + to_chat(src, span_revennotice("[target.p_their(TRUE)] essence is too faded to harvest.")) return if(!target.ckey) - to_chat(src, "[target.p_their(TRUE)] essence is lacking .. worthless.") + to_chat(src, span_revennotice("[target.p_their(TRUE)] essence is lacking .. worthless.")) // return if(prob(10)) to_chat(target, "You feel as if you are being watched.") face_atom(target) draining = TRUE - to_chat(src, "You search for the lifespring of [target].") + to_chat(src, span_revennotice("You search for the lifespring of [target].")) if(do_after(src, rand(10, 20), 0, target)) //did they get deleted in that second? for(var/obj/item/organ/genital/G in target.internal_organs) if(!(G.genital_flags & GENITAL_FUID_PRODUCTION)) @@ -43,9 +43,9 @@ var/main_fluid = G.get_fluid_name() var/fluid_ammount = clamp((G.fluid_rate * ((world.time - G.last_orgasmed) / (10 SECONDS)) * G.fluid_mult),0,G.fluid_max_volume) if (fluid_ammount <= 2) - to_chat(src, "[target.p_their(TRUE)] [G.name] spasms pitifully, almost nothing will come out.") + to_chat(src, span_revennotice("[target.p_their(TRUE)] [G.name] spasms pitifully, almost nothing will come out.")) else - to_chat(src, "[target.p_their(TRUE)] [G.name] are brimming with [main_fluid].") + to_chat(src, span_revennotice("[target.p_their(TRUE)] [G.name] are brimming with [main_fluid].")) if (fluid_ammount > 5) fluid_ammount = 5 // For balancing reasons if ((target in drained_mobs) || !target.ckey) @@ -60,33 +60,33 @@ if(do_after(src, rand(15, 20), 0, target)) //did they get deleted NOW? switch(essence_drained) if(0 to 4) - to_chat(src, "[target] is almost barren of essence. Still, every bit counts.") + to_chat(src, span_revennotice("[target] is almost barren of essence. Still, every bit counts.")) if(5 to 10) - to_chat(src, "[target] will yield an average amount of essence.") + to_chat(src, span_revennotice("[target] will yield an average amount of essence.")) if(11 to 20) - to_chat(src, "Such a feast! [target] will yield much essence to you.") + to_chat(src, span_revenboldnotice("Such a feast! [target] will yield much essence to you.")) if(30 to INFINITY) - to_chat(src, "Ah, a sexually furstrated person. [target] will yield massive amounts of essence to you.") + to_chat(src, span_revenbignotice("Ah, a sexually furstrated person. [target] will yield massive amounts of essence to you.")) if(do_after(src, rand(15, 25), 0, target)) //how about now if(target.stat) - to_chat(src, "[target.p_theyre(TRUE)] now too weak to provide anything of worth.") - to_chat(target, "You feel something tugging across your body before subsiding.") + to_chat(src, span_revenwarning("[target.p_theyre(TRUE)] now too weak to provide anything of worth.")) + to_chat(target, span_boldannounce("You feel something tugging across your body before subsiding.")) draining = 0 essence_drained = 0 return //hey, wait a minute... - to_chat(src, "You begin sucking up essence from [target]'s genitals and body.") + to_chat(src, span_revenminor("You begin sucking up essence from [target]'s genitals and body.")) if(target.stat != DEAD) - to_chat(target, "You feel an unholy euphoria as as something sucks at every part your body, your fluids flowing out...") + to_chat(target, span_warning("You feel an unholy euphoria as as something sucks at every part your body, your fluids flowing out...")) if(target.stat == SOFT_CRIT) target.Stun(150) reveal(46) stun(100) - target.visible_message("[target] suddenly rises slightly into the air, [target.p_their()] skin turning an ashy gray.") + target.visible_message(span_warning("[target] suddenly rises slightly into the air, [target.p_their()] skin turning an ashy gray.")) if(target.anti_magic_check(FALSE, TRUE)) - to_chat(src, "Something's wrong! [target] seems to be resisting the sucking, leaving you vulnerable!") + to_chat(src, span_revenminor("Something's wrong! [target] seems to be resisting the sucking, leaving you vulnerable!")) target.set_resting(TRUE,TRUE) - target.visible_message("[target] slumps onto the ground.", \ - "Violet lights, dancing in your vision, receding--") + target.visible_message(span_warning("[target] slumps onto the ground."), \ + span_revenwarning("Violet lights, dancing in your vision, receding--")) draining = FALSE return var/datum/beam/B = Beam(target,icon_state="drain_life",time=INFINITY) @@ -100,25 +100,25 @@ if(essence_drained > 30) essence_regen_cap += 15 perfectsouls++ - to_chat(src, "The ammount of [target]'s fluids has increased your maximum essence level. Your new maximum essence is [essence_regen_cap].") + to_chat(src, span_revenboldnotice("The ammount of [target]'s fluids has increased your maximum essence level. Your new maximum essence is [essence_regen_cap].")) else if(essence_drained >= 5) essence_regen_cap += 5 - to_chat(src, "The absorption of [target]'s fluids has increased your maximum essence level. Your new maximum essence is [essence_regen_cap].") + to_chat(src, span_revenboldnotice("The absorption of [target]'s fluids has increased your maximum essence level. Your new maximum essence is [essence_regen_cap].")) target.set_resting(TRUE,TRUE) - target.visible_message("[target] slumps onto the ground.", \ - "Violets lights, dancing in your vision, getting clo--") + target.visible_message(span_warning("[target] slumps onto the ground."), \ + span_revenwarning("Violets lights, dancing in your vision, getting clo--")) drained_mobs.Add(target) target.setStaminaLoss(150) // target.death(0) else - to_chat(src, "[target ? "[target] has":"[target.p_theyve(TRUE)]"] been drawn out of your grasp. The link has been broken.") + to_chat(src, span_revenwarning("[target ? "[target] has":"[target.p_theyve(TRUE)]"] been drawn out of your grasp. The link has been broken.")) if(target) //Wait, target is WHERE NOW? target.set_resting(TRUE,TRUE) - target.visible_message("[target] slumps onto the ground.", \ - "Violets lights, dancing in your vision, receding--") + target.visible_message(span_warning("[target] slumps onto the ground."), \ + span_revenwarning("Violets lights, dancing in your vision, receding--")) qdel(B) else - to_chat(src, "You are not close enough to suck on [target ? "[target]'s":"[target.p_their()]"] fluids. The link has been broken.") + to_chat(src, span_revenwarning("You are not close enough to suck on [target ? "[target]'s":"[target.p_their()]"] fluids. The link has been broken.")) draining = FALSE essence_drained = 0 @@ -126,7 +126,7 @@ /obj/effect/proc_holder/spell/targeted/night_vision/qareen charge_max = 0 panel = "Qareen Abilities" - message = "You toggle your night vision." + message = span_revennotice("You toggle your night vision.") action_icon = 'icons/mob/actions/actions_revenant.dmi' action_icon_state = "r_nightvision" action_background_icon_state = "bg_qareen" @@ -188,7 +188,7 @@ charge_counter = charge_max return FALSE name = "[initial(name)] ([cast_amount]E)" - to_chat(user, "You have unlocked [initial(name)]!") + to_chat(user, span_revennotice("You have unlocked [initial(name)]!")) panel = "Qareen Abilities" locked = FALSE charge_counter = charge_max @@ -227,7 +227,7 @@ L.flicker(20) //spooky continue L.flicker(20) //spooky - L.visible_message("\The [L] suddenly flares brightly and begins to spark!") + L.visible_message(span_warning("\The [L] suddenly flares brightly and begins to spark!")) var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread s.set_up(4, 0, L) s.start() @@ -335,7 +335,7 @@ continue if(human.anti_magic_check(FALSE, TRUE)) continue - to_chat(human, "You feel [pick("your sense of direction flicker out", "a stabbing pain in your head", "your mind fill with thought of servitude for a brief moment")].") + to_chat(human, span_revenwarning("You feel [pick("your sense of direction flicker out", "a stabbing pain in your head", "your mind fill with thought of servitude for a brief moment")].")) new /obj/effect/temp_visual/revenant(human.loc) // human.emp_act(80) // for(var/obj/thing in T) @@ -394,7 +394,7 @@ if(!blissfound) H.ForceContractDisease(new /datum/disease/qarbliss(), FALSE, TRUE) mob.adjust_bodytemperature(5) - to_chat(H, "You feel [pick("suddenly hot", "a surge of warmth", "like your crotch is tingling")].") + to_chat(H, span_revenminor("You feel [pick("suddenly hot", "a surge of warmth", "like your crotch is tingling")].")) mob.reagents.add_reagent(/datum/reagent/drug/aphrodisiac, 5) else mob.adjust_bodytemperature(5) diff --git a/modular_splurt/code/modules/antagonists/qareen/qareen_bliss.dm b/modular_splurt/code/modules/antagonists/qareen/qareen_bliss.dm index 5a0a657ea5..4b9fd83cd6 100644 --- a/modular_splurt/code/modules/antagonists/qareen/qareen_bliss.dm +++ b/modular_splurt/code/modules/antagonists/qareen/qareen_bliss.dm @@ -27,7 +27,7 @@ /datum/disease/qarbliss/stage_act() if(prob(stage*2)) if(prob(5)) - to_chat(affected_mob, "You feel [pick("hot and bothered", "horny", "lusty", "like you're in a rut", "the need to breed", "breedable", "slimy")]...") + to_chat(affected_mob, span_revennotice("You feel [pick("hot and bothered", "horny", "lusty", "like you're in a rut", "the need to breed", "breedable", "slimy")]...")) if(stage > 1 && prob(20)) affected_mob.confused += 5 if(stage > 2 && prob(20)) @@ -56,14 +56,14 @@ if(5) if (bliss_stage_2 == FALSE) bliss_stage_2 = TRUE - to_chat(affected_mob, "It's too much! Brain.. fried..") + to_chat(affected_mob, span_revenbignotice("It's too much! Brain.. fried..")) if (ishuman(affected_mob)) var/mob/living/carbon/human/H = affected_mob H.mob_climax(TRUE,"Bliss",src,TRUE) if(affected_mob.dna?.species) affected_mob.dna.species.handle_mutant_bodyparts(affected_mob,"#fff0ff") affected_mob.dna.species.handle_hair(affected_mob,"#da6eda") - affected_mob.visible_message("[affected_mob] looks utterly depraved.", "You suddenly feel like your skin is tingling...") + affected_mob.visible_message(span_warning("[affected_mob] looks utterly depraved."), span_revennotice("You suddenly feel like your skin is tingling...")) affected_mob.add_atom_colour("#ffdaf3", TEMPORARY_COLOUR_PRIORITY) new /obj/effect/temp_visual/revenant(affected_mob.loc) // addtimer(CALLBACK(src, .proc/blessings), 150) @@ -79,4 +79,4 @@ if(QDELETED(affected_mob)) return affected_mob.playsound_local(affected_mob, 'sound/effects/gib_step.ogg', 40, 1, -1) - to_chat(affected_mob, "You sense the curse of a lustful ghost befall you...") + to_chat(affected_mob, span_revendanger("You sense the curse of a lustful ghost befall you...")) diff --git a/modular_splurt/code/modules/antagonists/slaver/equipment/slaver_items.dm b/modular_splurt/code/modules/antagonists/slaver/equipment/slaver_items.dm index 76c1810a9e..d3880bda09 100644 --- a/modular_splurt/code/modules/antagonists/slaver/equipment/slaver_items.dm +++ b/modular_splurt/code/modules/antagonists/slaver/equipment/slaver_items.dm @@ -13,11 +13,11 @@ /obj/item/slaver/gizmo/attack(mob/living/M, mob/user) var/datum/antagonist/slaver/S = locate() in user.mind.antag_datums if(!S) // Is not a slaver antag. - to_chat(user, "You aren't sure how to use this tech!") + to_chat(user, span_warning("You aren't sure how to use this tech!")) return if(user == M) - to_chat(user, "You can't teleport yourself!") + to_chat(user, span_warning("You can't teleport yourself!")) return // Find a location to teleport to @@ -32,19 +32,19 @@ // Check we are in range of the destination if(!mobLocation || mobLocation.z != teleportDestination.z) - to_chat(user, "The mothership is out of range, you need to be on the same z-level!") + to_chat(user, span_warning("The mothership is out of range, you need to be on the same z-level!")) return - user.visible_message("[user] begins scanning [M] with [src].", "You begin scanning [M] with [src].") + user.visible_message(span_notice("[user] begins scanning [M] with [src]."), span_notice("You begin scanning [M] with [src].")) if(do_mob(user, M, 15 SECONDS)) // Teleport! playsound(get_turf(M.loc), 'sound/magic/blink.ogg', 50, 1) - M.visible_message("[M] vanishes from sight!", \ - "You feel a rush of energy as you are beamed to the slaver mothership!") + M.visible_message(span_notice("[M] vanishes from sight!"), \ + span_notice("You feel a rush of energy as you are beamed to the slaver mothership!")) new /obj/effect/temp_visual/dir_setting/ninja(get_turf(M), M.dir) M.forceMove(teleportDestination) else - to_chat(user, "You need to stand still and uninterrupted for 15 seconds!") + to_chat(user, span_warning("You need to stand still and uninterrupted for 15 seconds!")) // Buyable gear kits at the slaver console /obj/item/storage/box/slaver_teleport diff --git a/modular_splurt/code/modules/antagonists/slaver/slaver.dm b/modular_splurt/code/modules/antagonists/slaver/slaver.dm index 5b680707e0..610e12b74d 100644 --- a/modular_splurt/code/modules/antagonists/slaver/slaver.dm +++ b/modular_splurt/code/modules/antagonists/slaver/slaver.dm @@ -199,7 +199,7 @@ GLOBAL_LIST_INIT(slavers_ransom_values, list( /datum/team/slavers/roundend_report() var/list/parts = list() - parts += "Slave Traders:" + parts += span_header("Slave Traders:") var/text = "
The crew were:" var/slavesSold = GLOB.slavers_slaves_sold @@ -224,9 +224,9 @@ GLOBAL_LIST_INIT(slavers_ransom_values, list( // var/datum/objective/slaver/O = locate() in objectives if(GLOB.slavers_credits_total >= 200000 && !all_dead) - parts += "The slaver crew were successful!" + parts += span_greentext("The slaver crew were successful!") else - parts += "The slaver crew have failed." + parts += span_redtext("The slaver crew have failed.") parts += text diff --git a/modular_splurt/code/modules/antagonists/wendigo/mob/_on_click.dm b/modular_splurt/code/modules/antagonists/wendigo/mob/_on_click.dm index 13257de9e9..f5cccf49d8 100644 --- a/modular_splurt/code/modules/antagonists/wendigo/mob/_on_click.dm +++ b/modular_splurt/code/modules/antagonists/wendigo/mob/_on_click.dm @@ -3,9 +3,9 @@ /mob/living/carbon/wendigo/canUseTopic(atom/movable/M, be_close=FALSE, no_dextery=FALSE, no_tk=FALSE) if(incapacitated() || lying) - to_chat(src, "You can't do that right now!") + to_chat(src, span_warning("You can't do that right now!")) return FALSE if(be_close && !in_range(M, src)) - to_chat(src, "You are too far away!") + to_chat(src, span_warning("You are too far away!")) return FALSE return TRUE diff --git a/modular_splurt/code/modules/antagonists/wendigo/mob/examine.dm b/modular_splurt/code/modules/antagonists/wendigo/mob/examine.dm index c3d1fe26e9..9427a91018 100644 --- a/modular_splurt/code/modules/antagonists/wendigo/mob/examine.dm +++ b/modular_splurt/code/modules/antagonists/wendigo/mob/examine.dm @@ -7,9 +7,9 @@ . = list("*---------*\nThis is [icon2html(src, user)] \a [src]!") if(handcuffed) - . += "[t_He] is [icon2html(handcuffed, user)] handcuffed!" + . += span_warning("[t_He] is [icon2html(handcuffed, user)] handcuffed!") if(legcuffed) - . += "[t_He] has [icon2html(legcuffed, user)] leg cuffs!" + . += span_warning("[t_He] has [icon2html(legcuffed, user)] leg cuffs!") if(head) . += "[t_He] is wearing [head.get_examine_string(user)] on [t_his] head." if(wear_neck) @@ -23,7 +23,7 @@ . += "[t_He] has [back.get_examine_string(user)] on [t_his] back." if(stat == DEAD) - . += "[t_He] is limp and unresponsive, with no signs of life." + . += span_deadsay("[t_He] is limp and unresponsive, with no signs of life.") var/list/msg = ("") var/temp_hp = getBruteLoss() @@ -66,7 +66,7 @@ if(connected_link) if(connected_link.souls.len > 5) - . += "[t_His] eyes are glowing a deadly red." + . += span_warning("[t_His] eyes are glowing a deadly red.") else var/A = "" switch(connected_link.souls.len) @@ -80,7 +80,7 @@ A += "[t_His] eyes are glowing red." . += "[A]" else - . += "[t_He] looks lost." + . += span_deadsay("[t_He] looks lost.") SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, .) . += "*---------*" diff --git a/modular_splurt/code/modules/antagonists/wendigo/mob/metabolization.dm b/modular_splurt/code/modules/antagonists/wendigo/mob/metabolization.dm index 33a2869bdc..7293047456 100644 --- a/modular_splurt/code/modules/antagonists/wendigo/mob/metabolization.dm +++ b/modular_splurt/code/modules/antagonists/wendigo/mob/metabolization.dm @@ -42,15 +42,15 @@ if(round(fake_penis_size, 1) == fake_penis_size && fake_penis_size) switch(had_changed) if("penis_enlarger") - to_chat(src, "Your [pick(GLOB.dick_nouns)] [pick("swells up to", "flourishes into", "expands into", "bursts forth into", "grows eagerly into", "amplifys into")] a [fake_penis_size] inch penis.
") + to_chat(src, span_warning("Your [pick(GLOB.dick_nouns)] [pick("swells up to", "flourishes into", "expands into", "bursts forth into", "grows eagerly into", "amplifys into")] a [fake_penis_size] inch penis.")) if("PEsmaller") if(fake_penis_size > 0) - to_chat(src, "Your [pick(GLOB.dick_nouns)] [pick("shrinks down to", "decreases into", "diminishes into", "deflates into", "shrivels regretfully into", "contracts into")] a [fake_penis_size] inch penis.") + to_chat(src, span_warning("Your [pick(GLOB.dick_nouns)] [pick("shrinks down to", "decreases into", "diminishes into", "deflates into", "shrivels regretfully into", "contracts into")] a [fake_penis_size] inch penis.
")) else if(round(fake_breast_size, 1) == fake_breast_size && fake_breast_size) switch(had_changed) if("breast_enlarger") - to_chat(src, "Your breasts [pick("swell up to", "flourish into", "expand into", "burst forth into", "grow eagerly into", "amplify into")] a [ascii2text(round(fake_breast_size)+63)]-cup.") + to_chat(src, span_warning("Your breasts [pick("swell up to", "flourish into", "expand into", "burst forth into", "grow eagerly into", "amplify into")] a [ascii2text(round(fake_breast_size)+63)]-cup.
")) if("BEsmaller)") if(fake_breast_size > 0) - to_chat(src, "Your breasts [pick("shrink down to", "decrease into", "diminish into", "deflate into", "shrivel regretfully into", "contracts into")] a [ascii2text(round(fake_breast_size)+63)]-cup.") + to_chat(src, span_warning("Your breasts [pick("shrink down to", "decrease into", "diminish into", "deflate into", "shrivel regretfully into", "contracts into")] a [ascii2text(round(fake_breast_size)+63)]-cup.")) return TRUE diff --git a/modular_splurt/code/modules/arousal/arousal.dm b/modular_splurt/code/modules/arousal/arousal.dm index aaee27e37b..b60b8e95e1 100644 --- a/modular_splurt/code/modules/arousal/arousal.dm +++ b/modular_splurt/code/modules/arousal/arousal.dm @@ -60,7 +60,7 @@ var/obj/item/organ/genital/penis/bepis = sender if(locate(/obj/item/genital_equipment/sounding) in bepis.contents) spill = TRUE - to_chat(src, "You feel your sounding rod being pushed out of your cockhole with the burst of jizz!") + to_chat(src, span_userlove("You feel your sounding rod being pushed out of your cockhole with the burst of jizz!")) var/obj/item/genital_equipment/sounding/rod = locate(/obj/item/genital_equipment/sounding) in bepis.contents rod.forceMove(get_turf(src)) @@ -81,14 +81,14 @@ return var/main_fluid = lowertext(fluid_source.get_master_reagent_name()) if(mb_time) - visible_message("You hear a strong suction sound coming from the [M.name] on [src]'s [G.name].", \ - "The [M.name] pumps faster, trying to get you over the edge.", \ - "Something vacuums your [G.name] with a quiet but powerfull vrrrr.") + visible_message(span_love("You hear a strong suction sound coming from the [M.name] on [src]'s [G.name]."), \ + span_userlove("The [M.name] pumps faster, trying to get you over the edge."), \ + span_userlove("Something vacuums your [G.name] with a quiet but powerfull vrrrr.")) if(!do_after(src, mb_time, target = src) || !in_range(src, container) || !G.climaxable(src, TRUE)) return - visible_message("[src] twitches as [p_their()] [main_fluid] trickles into [container].", \ - "[M] sucks out all the [main_fluid] you had been saving up into [container].", \ - "You feel a vacuum sucking on your [G.name] as you climax!") + visible_message(span_love("[src] twitches as [p_their()] [main_fluid] trickles into [container]."), \ + span_userlove("[M] sucks out all the [main_fluid] you had been saving up into [container]."), \ + span_userlove("You feel a vacuum sucking on your [G.name] as you climax!")) do_climax(fluid_source, container, G, FALSE, cover = TRUE) emote("moan") @@ -97,12 +97,12 @@ if(!fluid_source) return if(mb_time) //Skip warning if this is an instant climax. - to_chat(src,"You're about to climax over [L]!") - to_chat(L,"[src] is about to climax over you!") + to_chat(src,span_userlove("You're about to climax over [L]!")) + to_chat(L,span_userlove("[src] is about to climax over you!")) if(!do_after(src, mb_time, target = src) || !in_range(src, L) || !G.climaxable(src, TRUE)) return - to_chat(src,"You climax all over [L] using your [G.name]!") - to_chat(L, "[src] climaxes all over you using [p_their()] [G.name]!") + to_chat(src,span_userlove("You climax all over [L] using your [G.name]!")) + to_chat(L, span_userlove("[src] climaxes all over you using [p_their()] [G.name]!")) do_climax(fluid_source, L, G, spillage, cover = TRUE) /atom/proc/add_cum_overlay() //This can go in a better spot, for now its here. diff --git a/modular_splurt/code/modules/arousal/genitals.dm b/modular_splurt/code/modules/arousal/genitals.dm index 0b639672c0..2305968913 100644 --- a/modular_splurt/code/modules/arousal/genitals.dm +++ b/modular_splurt/code/modules/arousal/genitals.dm @@ -49,23 +49,23 @@ /obj/item/organ/genital/proc/remove_equipment(mob/living/carbon/remover, selection) var/obj/item/selected = equipment[selection] if(!selected) - to_chat(remover, "[remover != owner ? owner.p_their() : "Your"] [name] doesn't have that equipped") + to_chat(remover, span_warning("[remover != owner ? owner.p_their() : "Your"] [name] doesn't have that equipped")) return if(remover == owner) - owner.visible_message(message = "\The [owner] slides the [selected] out of [owner.p_their()] [name]", - self_message = "You feel the [selected] slide out of your [name]", + owner.visible_message(message = span_lewd("\The [owner] slides the [selected] out of [owner.p_their()] [name]"), + self_message = span_lewd("You feel the [selected] slide out of your [name]"), ignored_mobs = owner.get_unconsenting() ) else owner.visible_message(message = "\The [remover] tries to remove the [selected] out of [owner]'s [name]", - self_message = "\The [remover] gently takes your [name] and starts sliding the [selected] out of it", + self_message = span_lewd("\The [remover] gently takes your [name] and starts sliding the [selected] out of it"), ignored_mobs = owner.get_unconsenting() ) if(!do_mob(remover, owner, 4 SECONDS)) return - owner.visible_message(message = "\The [remover] slides the [selected] out of [owner]'s [name]!", - self_message = "You feel [remover]'s warm hand slide the [selected] out of your [name]", + owner.visible_message(message = span_lewd("\The [remover] slides the [selected] out of [owner]'s [name]!"), + self_message = span_lewd("You feel [remover]'s warm hand slide the [selected] out of your [name]
"), ignored_mobs = owner.get_unconsenting() ) switch(selected.type) diff --git a/modular_splurt/code/modules/arousal/organs/belly.dm b/modular_splurt/code/modules/arousal/organs/belly.dm index ffcd3e3661..44ae1ffafa 100644 --- a/modular_splurt/code/modules/arousal/organs/belly.dm +++ b/modular_splurt/code/modules/arousal/organs/belly.dm @@ -40,7 +40,7 @@ var/list/belly_names = list("stomach", "belly", "gut", "midsection", "rolls") if(size < 0)//I don't actually know what round() does to negative numbers, so to be safe!!fixed if(owner) - to_chat(owner, "You feel your [pick(belly_names)] go completely flat.") + to_chat(owner, span_warning("You feel your [pick(belly_names)] go completely flat.")) QDEL_IN(src, 1) return @@ -48,9 +48,9 @@ var/mob/living/carbon/human/H = owner var/r_prev_size = round(prev_size) if (rounded_size > r_prev_size) - to_chat(H, "Your guts [pick("swell up to", "gurgle into", "expand into", "plump up into", "grow eagerly into", "fatten up into", "distend into")] a larger midsection.") + to_chat(H, span_warning("Your guts [pick("swell up to", "gurgle into", "expand into", "plump up into", "grow eagerly into", "fatten up into", "distend into")] a larger midsection.")) else if (rounded_size < r_prev_size) - to_chat(H, "Your guts [pick("shrink down to", "decrease into", "wobble down into", "diminish into", "deflate into", "contracts into")] a smaller midsection.") + to_chat(H, span_warning("Your guts [pick("shrink down to", "decrease into", "wobble down into", "diminish into", "deflate into", "contracts into")] a smaller midsection.")) /obj/item/organ/genital/belly/update_appearance() var/lowershape = lowertext(shape) @@ -130,7 +130,7 @@ var/growth_amount = climax_fluids.total_volume / (fluid_max_volume * GENITAL_INFLATION_THRESHOLD) modify_size(growth_amount) if(size > round(previous)) - owner.visible_message("\The [owner]'s belly bloats outwards as it gets pumped full of[pick(" sweet", "")] [lowertext(source_gen.get_fluid_name())]!", ignored_mobs = owner.get_unconsenting()) + owner.visible_message(span_lewd("\The [owner]'s belly bloats outwards as it gets pumped full of[pick(" sweet", "")] [lowertext(source_gen.get_fluid_name())]!"), ignored_mobs = owner.get_unconsenting()) fluid_id = source_gen.get_fluid_id() if((growth_amount >= 3 || size >= 3) && (owner.client?.prefs.cit_toggles & BUTT_ENLARGEMENT)) var/obj/item/organ/genital/butt/ass = owner.getorganslot(ORGAN_SLOT_BUTT) diff --git a/modular_splurt/code/modules/arousal/organs/butt.dm b/modular_splurt/code/modules/arousal/organs/butt.dm index bc37f4aef2..45622e77e1 100644 --- a/modular_splurt/code/modules/arousal/organs/butt.dm +++ b/modular_splurt/code/modules/arousal/organs/butt.dm @@ -45,6 +45,6 @@ var/list/asscheeks = list("asscheeks", "buttcheeks", "ass buns", "booty pillows", "dumptruck spheres", "[pick(list("jiggly", "bouncy", "wobbly"))] buttocks") modify_size(growth_amount) if(size != previous) - owner.visible_message("\The [owner]'s [pick(GLOB.butt_nouns + asscheeks)] bounce\s outwards lewdly as [owner.p_they()] get[owner.p_s()] pumped full of [lowertext(source_gen.get_fluid_name())] from behind!", ignored_mobs = owner.get_unconsenting()) + owner.visible_message(span_lewd("\The [owner]'s [pick(GLOB.butt_nouns + asscheeks)] bounce\s outwards lewdly as [owner.p_they()] get[owner.p_s()] pumped full of [lowertext(source_gen.get_fluid_name())] from behind!"), ignored_mobs = owner.get_unconsenting()) fluid_id = source_gen.get_fluid_id() climax_fluids.clear_reagents() diff --git a/modular_splurt/code/modules/arousal/organs/penis.dm b/modular_splurt/code/modules/arousal/organs/penis.dm index d09680b312..78e015ea0b 100644 --- a/modular_splurt/code/modules/arousal/organs/penis.dm +++ b/modular_splurt/code/modules/arousal/organs/penis.dm @@ -31,7 +31,7 @@ var/previous = size modify_size(target.total_volume / (fluid_max_volume * GENITAL_INFLATION_THRESHOLD)) if(size != previous) - owner.visible_message("\The [owner]'s [pick(GLOB.dick_nouns)][linked_organ ? " and [pick(list("nuts", "balls", "testicles", "ballsack", "sack"))]" : ""] swell and grow bigger as they get pumped full of \the [partner]'s [lowertext(source_gen.get_fluid_name())]!", ignored_mobs = owner.get_unconsenting()) + owner.visible_message(span_lewd("\The [owner]'s [pick(GLOB.dick_nouns)][linked_organ ? " and [pick(list("nuts", "balls", "testicles", "ballsack", "sack"))]" : ""] swell and grow bigger as they get pumped full of \the [partner]'s [lowertext(source_gen.get_fluid_name())]!"), ignored_mobs = owner.get_unconsenting()) if(linked_organ) linked_organ.fluid_id = source_gen.get_fluid_id() target.clear_reagents() diff --git a/modular_splurt/code/modules/arousal/toys/dildos.dm b/modular_splurt/code/modules/arousal/toys/dildos.dm index 7c12e5ab64..0dd77f4583 100644 --- a/modular_splurt/code/modules/arousal/toys/dildos.dm +++ b/modular_splurt/code/modules/arousal/toys/dildos.dm @@ -6,7 +6,7 @@ /obj/item/dildo/flared/gigantic/suicide_act(mob/living/user) if(do_after(user,45,target=src)) - user.visible_message("[user] tears-up and gags as they try to deepthroat the [src]! WHY WOULD THEY DO THAT? It looks like [user.p_theyre()] trying to commit suicide!!") + user.visible_message(span_suicide("[user] tears-up and gags as they try to deepthroat the [src]! WHY WOULD THEY DO THAT? It looks like [user.p_theyre()] trying to commit suicide!!")) playsound(loc, 'sound/weapons/gagging.ogg', 50, 2, -1) user.Stun(400) user.adjust_blurriness(24) diff --git a/modular_splurt/code/modules/awaymissions/mission_code/academy.dm b/modular_splurt/code/modules/awaymissions/mission_code/academy.dm index b9fadc051e..b29a64d948 100644 --- a/modular_splurt/code/modules/awaymissions/mission_code/academy.dm +++ b/modular_splurt/code/modules/awaymissions/mission_code/academy.dm @@ -11,7 +11,7 @@ // If true; Reject them and abort if (user in used_fingerprints) // Send a message implying someone else should roll - visible_message("[user] rolls the dice, but it doesn't respond to [user.p_them()] again.") + visible_message(span_notice("[user] rolls the dice, but it doesn't respond to [user.p_them()] again.")) return // If false; Add them to the user list and continue else diff --git a/modular_splurt/code/modules/cargo/packs/misc.dm b/modular_splurt/code/modules/cargo/packs/misc.dm index 3211d7e085..bf5eec556d 100644 --- a/modular_splurt/code/modules/cargo/packs/misc.dm +++ b/modular_splurt/code/modules/cargo/packs/misc.dm @@ -215,6 +215,15 @@ cost = 100000 contains = list(/obj/item/reagent_containers/food/drinks/diminicillin) +/datum/supply_pack/misc/plushmium + name = "Plushmium Crate" + desc = "Surplus shipment of Stuffing For Spessmen backer rewards. Contains a pre-packaged spray bottle of Plushmium, and toy to use it on." + cost = 5000 // Cost of an expensive animal + contains = list( + /obj/item/storage/box/shipment_plushmium, + /obj/item/choice_beacon/box/plushie + ) + /datum/supply_pack/misc/microbricks name = "Microbricks Crate" desc = "Extremely bored? Recreate a downscale city and get upset when it all comes crumbling down!" diff --git a/modular_splurt/code/modules/cargo/sweatshop/sweatshop.dm b/modular_splurt/code/modules/cargo/sweatshop/sweatshop.dm index b3d6189391..09c40bfcfc 100644 --- a/modular_splurt/code/modules/cargo/sweatshop/sweatshop.dm +++ b/modular_splurt/code/modules/cargo/sweatshop/sweatshop.dm @@ -87,54 +87,54 @@ //saw a plank into two platforms /obj/item/processed/wood/plank/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/carpentry/handsaw)) - to_chat(user," You begin to saw [src] in half...") + to_chat(user,span_notice(" You begin to saw [src] in half...")) if(do_after(user, 40, target = src) && isturf(loc)) new src.sawobj(loc) new src.sawobj(loc) //send help i dont know how to make two in the same line lmfao - to_chat(user, " You saw [src] in half.") + to_chat(user, span_notice(" You saw [src] in half.")) qdel(src) else - to_chat(user, "You need to hold still to saw [src]!") + to_chat(user, span_warning("You need to hold still to saw [src]!")) else ..() //saw a platform into four blocks /obj/item/processed/wood/platform/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/carpentry/handsaw)) - to_chat(user," You begin cut [src] into smaller pieces...") + to_chat(user,span_notice(" You begin cut [src] into smaller pieces...")) if(do_after(user, 20, target = src) && isturf(loc)) new src.sawobj(loc) new src.sawobj(loc) new src.sawobj(loc) new src.sawobj(loc) - to_chat(user, " You cut [src] into four pieces.") + to_chat(user, span_notice(" You cut [src] into four pieces.")) qdel(src) else - to_chat(user, "You need to hold still to saw [src]!") + to_chat(user, span_warning("You need to hold still to saw [src]!")) else ..() //sand a block into a peg /obj/item/processed/wood/block/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/carpentry/sandpaper)) - to_chat(user," You carefully begin to sand down [src]...") + to_chat(user,span_notice(" You carefully begin to sand down [src]...")) if(do_after(user, 50, target = src) && isturf(loc)) new src.sandobj(loc) - to_chat(user, " You smooth [src] into a peg.") + to_chat(user, span_notice(" You smooth [src] into a peg.")) qdel(src) else - to_chat(user, "You need to hold still to sand [src]!") + to_chat(user, span_warning("You need to hold still to sand [src]!")) else ..() //cut heated metal into nails /obj/item/processed/metal/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/wirecutters)) - to_chat(user," You tediously begin to cut [src] into several nails...") + to_chat(user,span_notice(" You tediously begin to cut [src] into several nails...")) if(do_after(user, 80, target = src) && isturf(loc)) new /obj/item/nails(loc) new /obj/item/nails(loc) - to_chat(user, " You make some crude metal nails.") + to_chat(user, span_notice(" You make some crude metal nails.")) qdel(src) else - to_chat(user, "You need to hold still to process [src]!") + to_chat(user, span_warning("You need to hold still to process [src]!")) else ..() @@ -142,25 +142,25 @@ //cover a wooden block in glue /obj/item/processed/wood/block/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/carpentry/glue)) - to_chat(user," You begin to glue down one end of [src]...") + to_chat(user,span_notice(" You begin to glue down one end of [src]...")) if(do_after(user, 10, target = src) && isturf(loc)) new src.glueobj(loc) - to_chat(user, " You slap some glue onto [src].") + to_chat(user, span_notice(" You slap some glue onto [src].")) qdel(src) else - to_chat(user, "You need to hold still to glue [src]!") + to_chat(user, span_warning("You need to hold still to glue [src]!")) else ..() //cover a wooden peg in glue /obj/item/processed/wood/peg/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/carpentry/glue)) - to_chat(user," You begin to glue down one end of the [src]...") + to_chat(user,span_notice(" You begin to glue down one end of the [src]...")) if(do_after(user, 10, target = src) && isturf(loc)) new src.glueobj(loc) - to_chat(user, " You slap some glue onto [src].") + to_chat(user, span_notice(" You slap some glue onto [src].")) qdel(src) else - to_chat(user, "You need to hold still to glue [src]!") + to_chat(user, span_warning("You need to hold still to glue [src]!")) else ..() @@ -168,89 +168,89 @@ //bore a platform into a seat /obj/item/processed/wood/platform/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/carpentry/borer)) - to_chat(user," You begin to cut four holes into [src]...") + to_chat(user,span_notice(" You begin to cut four holes into [src]...")) if(do_after(user, 40, target = src) && isturf(loc)) new src.boreobj(loc) - to_chat(user, " You drill four holes into [src].") + to_chat(user, span_notice(" You drill four holes into [src].")) qdel(src) else - to_chat(user, "You need to hold still to refine [src]!") + to_chat(user, span_warning("You need to hold still to refine [src]!")) else ..() //Stools - Further crafting /obj/item/processed/wood/stool1/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/nails)) - to_chat(user," You place nails into [src]...") + to_chat(user,span_notice(" You place nails into [src]...")) if(do_after(user, 20, target = src) && isturf(loc)) new /obj/item/processed/wood/stool2(loc) - to_chat(user, " The nails are ready to be hammered.") + to_chat(user, span_notice(" The nails are ready to be hammered.")) qdel(src) qdel(I) else - to_chat(user, "You need to hold still to refine [src]!") + to_chat(user, span_warning("You need to hold still to refine [src]!")) else ..() /obj/item/processed/wood/stool2/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/carpentry/hammer)) - to_chat(user," You begin to hammer the [src]...") + to_chat(user,span_notice(" You begin to hammer the [src]...")) if(do_after(user, 30, target = src) && isturf(loc)) new /obj/item/processed/wood/stool3(loc) - to_chat(user, " The nails are hammered into place.") + to_chat(user, span_notice(" The nails are hammered into place.")) qdel(src) else - to_chat(user, "You need to hold still to refine [src]!") + to_chat(user, span_warning("You need to hold still to refine [src]!")) else ..() /obj/item/processed/wood/stool3/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/carpentry/sandpaper)) - to_chat(user," You begin to sand the [src]...") + to_chat(user,span_notice(" You begin to sand the [src]...")) if(do_after(user, 30, target = src) && isturf(loc)) new /obj/item/processed/wood/stool4(loc) - to_chat(user, " You sand down the [src].") + to_chat(user, span_notice(" You sand down the [src].")) qdel(src) else - to_chat(user, "You need to hold still to refine [src]!") + to_chat(user, span_warning("You need to hold still to refine [src]!")) else ..() /obj/item/processed/wood/stool4/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/processed/wood/glueblock)) - to_chat(user," You add some finishing touches to the [src]...") + to_chat(user,span_notice(" You add some finishing touches to the [src]...")) if(do_after(user, 30, target = src) && isturf(loc)) new /obj/item/processed/wood/stool(loc) - to_chat(user, " You complete the [src].") + to_chat(user, span_notice(" You complete the [src].")) qdel(src) qdel(I) else - to_chat(user, "You need to hold still to refine [src]!") + to_chat(user, span_warning("You need to hold still to refine [src]!")) else ..() /obj/item/processed/wood/stool/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/cushion)) - to_chat(user," You secure a cloth cushion to [src]...") + to_chat(user,span_notice(" You secure a cloth cushion to [src]...")) if(do_after(user, 30, target = src) && isturf(loc)) new /obj/item/processed/wood/stoolcloth(loc) - to_chat(user, " You add a cushion to [src].") + to_chat(user, span_notice(" You add a cushion to [src].")) qdel(src) qdel(I) else - to_chat(user, "You need to hold still to detail [src]!") + to_chat(user, span_warning("You need to hold still to detail [src]!")) else ..() /obj/item/processed/wood/stool/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/cushion/silk)) - to_chat(user," You secure a silk cushion to [src]...") + to_chat(user,span_notice(" You secure a silk cushion to [src]...")) if(do_after(user, 30, target = src) && isturf(loc)) new /obj/item/processed/wood/stoolsilk(loc) - to_chat(user, " You add a cushion to [src].") + to_chat(user, span_notice(" You add a cushion to [src].")) qdel(src) qdel(I) else - to_chat(user, "You need to hold still to detail [src]!") + to_chat(user, span_warning("You need to hold still to detail [src]!")) else ..() diff --git a/modular_splurt/code/modules/client/client_procs.dm b/modular_splurt/code/modules/client/client_procs.dm index 7f82c94449..d2e67c65bf 100644 --- a/modular_splurt/code/modules/client/client_procs.dm +++ b/modular_splurt/code/modules/client/client_procs.dm @@ -77,7 +77,7 @@ M.mind.AddSpell(new T) else M.AddSpell(new T) - message_admins("Spells given to mindless mobs will not be transferred in mindswap or cloning!") + message_admins(span_danger("Spells given to mindless mobs will not be transferred in mindswap or cloning!")) /client/proc/teach_martial_art(mob/living/carbon/C) if (!istype(C)) @@ -99,7 +99,7 @@ var/datum/martial_art/MA = new chosenart MA.teach(C) log_admin("[key_name(usr)] has taught [MA] to [key_name(C)].") - message_admins("[key_name_admin(usr)] has taught [MA] to [key_name_admin(C)].") + message_admins(span_notice("[key_name_admin(usr)] has taught [MA] to [key_name_admin(C)].")) /client/proc/set_species(mob/living/carbon/human/H) if (istype(H)) diff --git a/modular_splurt/code/modules/client/loadout/backpack.dm b/modular_splurt/code/modules/client/loadout/backpack.dm index 448bd8a68a..6ed7050e30 100644 --- a/modular_splurt/code/modules/client/loadout/backpack.dm +++ b/modular_splurt/code/modules/client/loadout/backpack.dm @@ -5,6 +5,11 @@ path = /obj/item/genital_equipment/condom cost = 1 +/datum/gear/backpack/condom_box + name = "Box of Condoms" + path = /obj/item/storage/box/bulk_condoms + cost = 2 + /datum/gear/backpack/sounding name = "Sounding rod" path = /obj/item/genital_equipment/sounding @@ -88,7 +93,7 @@ name = "Purple Nail Polish" path = /obj/item/nailpolish/purple -/datum/gear/backback/secbadge +/datum/gear/backpack/secbadge name = "Security Badge" path = /obj/item/clothing/accessory/badge restricted_roles = list("Security Officer", "Warden", "Detective", "Head of Security") diff --git a/modular_splurt/code/modules/clothing/glasses/_glasses.dm b/modular_splurt/code/modules/clothing/glasses/_glasses.dm index 6e356a528a..f4c6811218 100644 --- a/modular_splurt/code/modules/clothing/glasses/_glasses.dm +++ b/modular_splurt/code/modules/clothing/glasses/_glasses.dm @@ -1,6 +1,6 @@ /obj/item/clothing/glasses/aviators name = "aviators" - desc = "Strangely fasionable ancient technology used to help provide rudimentary eye cover. Enhanced shielding blocks flashes." + desc = "Strangely fashionable ancient technology used to help provide rudimentary eye cover. Enhanced shielding blocks flashes." icon = 'modular_splurt/icons/obj/clothing/glasses.dmi' icon_state = "aviator" mob_overlay_icon = 'modular_splurt/icons/mobs/eyes.dmi' diff --git a/modular_splurt/code/modules/clothing/glasses/hud.dm b/modular_splurt/code/modules/clothing/glasses/hud.dm index 15cbf475b7..e6df06cf4a 100644 --- a/modular_splurt/code/modules/clothing/glasses/hud.dm +++ b/modular_splurt/code/modules/clothing/glasses/hud.dm @@ -2,7 +2,7 @@ /obj/item/clothing/glasses/hud/blueshield name = "blueshield HUD glasses" - desc = "A hud with multiple functions." + desc = "A HUD with multiple functions." actions_types = list(/datum/action/item_action/switch_hud) icon_state = "sunhudmed" icon = 'icons/obj/clothing/glasses.dmi' @@ -36,7 +36,7 @@ /obj/item/clothing/glasses/hud/blueshield/aviators name = "blueshield HUD Aviators" - desc = "A hud with multiple functions. More stylish." + desc = "A HUD with multiple functions. More stylish." actions_types = list(/datum/action/item_action/switch_hud) icon = 'modular_splurt/icons/obj/clothing/glasses.dmi' icon_state = "aviator_med" @@ -72,12 +72,12 @@ /obj/item/clothing/glasses/hud/blueshield/aviators/prescription name = "prescription blueshield HUD Aviators" - desc = "A hud with multiple functions. More stylish. Equipped with prescription lenses." + desc = "A HUD with multiple functions. More stylish. Equipped with prescription lenses." vision_correction = 1 /obj/item/clothing/glasses/hud/blueshield/prescription name = "prescription blueshield HUD" - desc = "A hud with multiple functions. Equipped with prescription lenses." + desc = "A HUD with multiple functions. Equipped with prescription lenses." vision_correction = 1 // Med HUDs @@ -97,14 +97,14 @@ // Sec HUDs /obj/item/clothing/glasses/hud/security/sunglasses/aviators - name = "secuirity HUD aviators" + name = "security HUD aviators" desc = "aviators with a security HUD." icon = 'modular_splurt/icons/obj/clothing/glasses.dmi' icon_state = "aviator_sec" mob_overlay_icon = 'modular_splurt/icons/mobs/eyes.dmi' /obj/item/clothing/glasses/hud/security/sunglasses/aviators/prescription - name = "prescription secuirity HUD aviators" + name = "prescription security HUD aviators" desc = "aviators with a security HUD with prescription lenses." vision_correction = 1 diff --git a/modular_splurt/code/modules/clothing/gloves.dm b/modular_splurt/code/modules/clothing/gloves.dm index cd62afea1b..5f2731516c 100644 --- a/modular_splurt/code/modules/clothing/gloves.dm +++ b/modular_splurt/code/modules/clothing/gloves.dm @@ -1,6 +1,6 @@ /obj/item/clothing/gloves/cbrn name = "CBRN gloves" - desc = "Chemical, Biological, Radiological and Nuclear. Thick black gloves design for working in hazardus evniroments. Warning not shock proof." + desc = "Chemical, Biological, Radiological and Nuclear. Thick black gloves design for working in hazardous environments. Warning not shock proof." icon_state = "black" item_state = "blackgloves" siemens_coefficient = 1 @@ -18,17 +18,17 @@ /obj/item/clothing/gloves/cbrn/engineer name = "engineer CBRN gloves" siemens_coefficient = 0 - desc = "Chemical, Biological, Radiological and Nuclear. Thick black gloves design for working in hazardus evniroments. Improved for engineering hazards" + desc = "Chemical, Biological, Radiological and Nuclear. Thick black gloves design for working in hazardous environments. Improved for engineering hazards" /obj/item/clothing/gloves/cbrn/mopp name = "MOPP gloves" - desc = "Mission Oriented Protective Posture. Thick black gloves design for working in hazardus combat evniroments. Still not shock proof" + desc = "Mission Oriented Protective Posture. Thick black gloves design for working in hazardous combat environments. Still not shock proof" icon_state = "combat" armor = list("melee" = 10, "bullet" = 0, "laser" = 10,"energy" = 10, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 40, "acid" = 100) /obj/item/clothing/gloves/cbrn/mopp/advance name = "advance MOPP gloves" - desc = "Mission Oriented Protective Posture. Thick black gloves design for working in hazardus combat evniroments. Advance varaints for Central Command staff and ERT team. Insulated." + desc = "Mission Oriented Protective Posture. Thick black gloves design for working in hazardous combat environments. Advance variants for Central Command staff and ERT team. Insulated." icon_state = "combat" siemens_coefficient = 0 armor = list("melee" = 15, "bullet" = 0, "laser" = 15,"energy" = 15, "bomb" = 20, "bio" = 110, "rad" = 110, "fire" = 60, "acid" = 110) diff --git a/modular_splurt/code/modules/clothing/head/helmet.dm b/modular_splurt/code/modules/clothing/head/helmet.dm index f15a9368df..defe0f0fcc 100644 --- a/modular_splurt/code/modules/clothing/head/helmet.dm +++ b/modular_splurt/code/modules/clothing/head/helmet.dm @@ -15,7 +15,7 @@ /obj/item/clothing/head/helmet/goner/fake/poly name = "polychromic trencher helmet" - desc = "A plastic helmet with polychromatic spot." + desc = "A plastic helmet with polychromic spot." var/list/poly_colors = list("#D9D9D9") /obj/item/clothing/head/helmet/goner/fake/poly/ComponentInitialize() @@ -56,7 +56,7 @@ /obj/item/clothing/head/helmet/goner/officer/fake/poly name = "polychromic trencher officer cap" - desc = "A cheap officer cap with polychromatic pin." + desc = "A cheap officer cap with polychromic pin." var/list/poly_colors = list("#F2F2F2") /obj/item/clothing/head/helmet/goner/officer/fake/poly/ComponentInitialize() diff --git a/modular_splurt/code/modules/clothing/head/jobs.dm b/modular_splurt/code/modules/clothing/head/jobs.dm index cf5bc553b4..e989e5bc2d 100644 --- a/modular_splurt/code/modules/clothing/head/jobs.dm +++ b/modular_splurt/code/modules/clothing/head/jobs.dm @@ -15,7 +15,7 @@ /obj/item/clothing/head/blueshield/formal name = "blueshield formal beret" - desc = "The robust beret for the Blueshield. A formal varaint of the standard beret." + desc = "The robust beret for the Blueshield. A formal variant of the standard beret." icon_state = "blueshield" item_state = "blueshield" icon = 'modular_splurt/icons/obj/clothing/head.dmi' @@ -31,7 +31,7 @@ /obj/item/clothing/head/beret/sec/peacekeeper name = "peacekeeper beret" - desc = "A robust beret with a grey varaint of the security insignia emblazoned on it. This one is modeled is design to make people less scared of an officer." + desc = "A robust beret with a grey variant of the security insignia emblazoned on it. This one is modeled is design to make people less scared of an officer." icon_state = "policeberet" item_state = "policeberet" icon = 'modular_splurt/icons/obj/clothing/head.dmi' @@ -39,7 +39,7 @@ /obj/item/clothing/head/helmet/metrocop name = "civil protection helmet" - desc = "Saldy lacks a working voice encoder." + desc = "Sadly lacks a working voice encoder." icon_state = "metrocop_helmet" item_state = "metrocop_helmet" icon = 'modular_splurt/icons/obj/clothing/head.dmi' @@ -49,13 +49,13 @@ /obj/item/clothing/head/beret/sec/peacekeeper/warden name = "warden's peacekeeper beret" - desc = "A robust beret with a red varaint of the security insignia emblazoned on it. This one is issiued to wardens." + desc = "A robust beret with a red variant of the security insignia emblazoned on it. This one is issued to wardens." icon_state = "policeberetred" item_state = "policeberetred" /obj/item/clothing/head/beret/sec/peacekeeper/hos name = "head of security's peacekeeper beret" - desc = "A robust beret with a gold varaint of the security insignia emblazoned on it. This one is issiued to the Head of Security." + desc = "A robust beret with a gold variant of the security insignia emblazoned on it. This one is issued to the Head of Security." icon_state = "policeberetgold" item_state = "policeberetgold" diff --git a/modular_splurt/code/modules/clothing/head/misc.dm b/modular_splurt/code/modules/clothing/head/misc.dm index 6c5164be1e..dddc2f6b05 100644 --- a/modular_splurt/code/modules/clothing/head/misc.dm +++ b/modular_splurt/code/modules/clothing/head/misc.dm @@ -26,7 +26,7 @@ name = "press helmet" icon_state = "press_helmet" item_state = "press_helmet" - desc = "A lightweight helmet for reporting on security. You swear up and down it is made of kevlar and not old cloth and plastic." + desc = "A lightweight helmet for reporting on security. You swear up and down it is made of Kevlar and not old cloth and plastic." icon = 'modular_splurt/icons/obj/clothing/head.dmi' mob_overlay_icon = 'modular_splurt/icons/mob/clothing/head.dmi' flags_inv = HIDEHAIR @@ -81,7 +81,7 @@ /datum/design/cbrn/mopphood name = "MOPP Hood" - desc = "A MOPP hood with an intergreted helmet" + desc = "A MOPP hood with an integrated helmet" id = "mopp_hood" build_type = PROTOLATHE materials = list(/datum/material/plastic = 200, /datum/material/uranium = 50, /datum/material/iron = 200) diff --git a/modular_splurt/code/modules/clothing/kinkyclothes.dm b/modular_splurt/code/modules/clothing/kinkyclothes.dm index 98bbb21e4a..a2bcaee4f6 100644 --- a/modular_splurt/code/modules/clothing/kinkyclothes.dm +++ b/modular_splurt/code/modules/clothing/kinkyclothes.dm @@ -67,8 +67,8 @@ mutantrace_variation = NONE /obj/item/clothing/under/centcomdress - name = "Centcom Dress Uniform" - desc = "A stylish yet revealing dress uniform worn in extravagent black and gold, worthy of those who sit around and watch cameras all day in an office." + name = "CentCom Dress Uniform" + desc = "A stylish yet revealing dress uniform worn in extravagant black and gold, worthy of those who sit around and watch cameras all day in an office." icon = 'modular_splurt/icons/obj/clothing/suits.dmi' icon_state = "ccdress" mob_overlay_icon = 'modular_splurt/icons/mobs/suits.dmi' @@ -83,7 +83,7 @@ armor = list("melee" = 60, "bullet" = 80, "laser" = 80, "energy" = 90, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 50) /obj/item/clothing/under/centcomdress/vk - name = "Virginkiller Centcom Dress Uniform" + name = "Virginkiller CentCom Dress Uniform" desc = "This black and gold beauty does not help paperwork get done, it seems." icon_state = "ccdressvk" diff --git a/modular_splurt/code/modules/clothing/lewd_clothing/collar/kink_collars.dm b/modular_splurt/code/modules/clothing/lewd_clothing/collar/kink_collars.dm index d170e12dba..10e4c4ea6a 100644 --- a/modular_splurt/code/modules/clothing/lewd_clothing/collar/kink_collars.dm +++ b/modular_splurt/code/modules/clothing/lewd_clothing/collar/kink_collars.dm @@ -19,7 +19,7 @@ /obj/item/mind_controller/Initialize(mapload, collar) //Store the collar on creation. src.collar = collar - . = ..() //very important to call parent in Intialize + . = ..() //very important to call parent in Initialize /obj/item/mind_controller/attack_self(mob/user) if (collar) diff --git a/modular_splurt/code/modules/clothing/lewd_clothing/eyes/hypnogoggles.dm b/modular_splurt/code/modules/clothing/lewd_clothing/eyes/hypnogoggles.dm index 35f2b71b0b..9bc3ef1d7d 100644 --- a/modular_splurt/code/modules/clothing/lewd_clothing/eyes/hypnogoggles.dm +++ b/modular_splurt/code/modules/clothing/lewd_clothing/eyes/hypnogoggles.dm @@ -38,7 +38,7 @@ if(victim.glasses == src) victim.cure_trauma_type(/datum/brain_trauma/induced_hypnosis, TRAUMA_RESILIENCE_BASIC) -/obj/item/clothing/glasses/hypno/attack_self(mob/user) //Setting up hypnotising phrase +/obj/item/clothing/glasses/hypno/attack_self(mob/user) //Setting up hypnotizing phrase . = ..() codephrase = stripped_input(user, "Change the hypnotic phrase") // Notice to the user that this shouldn't be used outside of kink related purpose. @@ -114,7 +114,7 @@ /datum/brain_trauma/induced_hypnosis/on_gain() log_game("[key_name(owner)] was hypnogoggled'.") - to_chat(owner, "[hypnotic_phrase]") + to_chat(owner, span_reallybig_hypnophrase("[hypnotic_phrase]")) to_chat(owner, span_notice(pick("You feel your thoughts focusing on this phrase... you can't seem to get it out of your head.", "Your head hurts, but this is all you can think of. It must be vitally important.", "You feel a part of your mind repeating this over and over. You need to follow these words.", diff --git a/modular_splurt/code/modules/clothing/lewd_clothing/foot/lewd_shoes.dm b/modular_splurt/code/modules/clothing/lewd_clothing/foot/lewd_shoes.dm index 061a1c85b6..718c3d2974 100644 --- a/modular_splurt/code/modules/clothing/lewd_clothing/foot/lewd_shoes.dm +++ b/modular_splurt/code/modules/clothing/lewd_clothing/foot/lewd_shoes.dm @@ -19,7 +19,7 @@ var/mob/living/carbon/C = user if(iscarbon(user) && (user.get_item_by_slot(ITEM_SLOT_FEET) == src)) if(seamless) - to_chat(C, span_purple(pick("You slide your heels against eachother in a failed attempt at kicking them off.", + to_chat(C, span_purple(pick("You slide your heels against each other in a failed attempt at kicking them off.", "The heels refuse to budge no matter how much you tug.", "The heels are tight around your ankles and the laces refuse to loosen."))) return diff --git a/modular_splurt/code/modules/clothing/lewd_clothing/head/deprivation_helmet.dm b/modular_splurt/code/modules/clothing/lewd_clothing/head/deprivation_helmet.dm index 8dd3ca8717..4376d2c773 100644 --- a/modular_splurt/code/modules/clothing/lewd_clothing/head/deprivation_helmet.dm +++ b/modular_splurt/code/modules/clothing/lewd_clothing/head/deprivation_helmet.dm @@ -6,7 +6,7 @@ /obj/item/clothing/head/helmet/space/deprivation_helmet name = "deprivation helmet" - desc = "Сompletely cuts off the wearer from the outside world." + desc = "Completely cuts off the wearer from the outside world." icon_state = "dephelmet" item_state = "dephelmet" armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 25, "rad" = 0, "fire" = 20, "acid" = 15, "wound" = 0) diff --git a/modular_splurt/code/modules/clothing/lewd_clothing/head/hats.dm b/modular_splurt/code/modules/clothing/lewd_clothing/head/hats.dm index 5adac22edd..c44d4781f4 100644 --- a/modular_splurt/code/modules/clothing/lewd_clothing/head/hats.dm +++ b/modular_splurt/code/modules/clothing/lewd_clothing/head/hats.dm @@ -23,7 +23,7 @@ /obj/item/clothing/head/blueshield/officercap name = "blueshield officer cap" - desc = "A officer cap of the Blueshield. It makes you feel more important then you acutally are." + desc = "A officer cap of the Blueshield. It makes you feel more important then you actually are." icon_state = "blueshieldcap" item_state = "blueshieldcap" @@ -56,7 +56,7 @@ /obj/item/clothing/head/helmet/sec/blueshield name = "blueshield helmet" - desc = "Reenforced Blueshield Security gear. Protects the head from impacts. You where this because you are boring." + desc = "Reinforced Blueshield Security gear. Protects the head from impacts. You where this because you are boring." icon_state = "bluehelmet" item_state = "bluehelmet" icon = 'modular_splurt/icons/obj/clothing/head.dmi' diff --git a/modular_splurt/code/modules/clothing/masks/gasmask.dm b/modular_splurt/code/modules/clothing/masks/gasmask.dm index 460d695571..9405e3f315 100644 --- a/modular_splurt/code/modules/clothing/masks/gasmask.dm +++ b/modular_splurt/code/modules/clothing/masks/gasmask.dm @@ -1,6 +1,6 @@ /obj/item/clothing/mask/gas/radmask name = "radiation mask" - desc = "An mask that somewhat protects the user from ratiation. Not as effective like a radiation hood, but is better than nothing." + desc = "An mask that somewhat protects the user from radiation. Not as effective like a radiation hood, but is better than nothing." icon = 'modular_splurt/icons/obj/clothing/masks.dmi' mob_overlay_icon = 'modular_splurt/icons/mob/clothing/mask.dmi' anthro_mob_worn_overlay = 'modular_splurt/icons/mob/clothing/mask_muzzle.dmi' diff --git a/modular_splurt/code/modules/clothing/masks/hailer.dm b/modular_splurt/code/modules/clothing/masks/hailer.dm index d1edb5c00b..2f32917196 100644 --- a/modular_splurt/code/modules/clothing/masks/hailer.dm +++ b/modular_splurt/code/modules/clothing/masks/hailer.dm @@ -15,6 +15,6 @@ if(iscarbon(user)) var/mob/living/carbon/C = user if(src == C.wear_mask) - to_chat(user, "The mask is fastened tight! You'll need help taking this off!") + to_chat(user, span_warning("The mask is fastened tight! You'll need help taking this off!")) return ..() diff --git a/modular_splurt/code/modules/clothing/masks/miscellaneous.dm b/modular_splurt/code/modules/clothing/masks/miscellaneous.dm index b253001735..4d8c1bad27 100644 --- a/modular_splurt/code/modules/clothing/masks/miscellaneous.dm +++ b/modular_splurt/code/modules/clothing/masks/miscellaneous.dm @@ -3,7 +3,7 @@ if(iscarbon(user)) var/mob/living/carbon/C = user if(src == C.wear_mask) - to_chat(user, "You need help taking this off!") + to_chat(user, span_warning("You need help taking this off!")) return ..() @@ -20,7 +20,7 @@ /obj/item/clothing/mask/gas/cbrn name = "CBRN gas mask" - desc = "Chemical, Biological, Radiological and Nuclear. A heavy duty gas mask design to be worn in hazardus enviorments. Acutally works like a gas mask as well as can be connected to intenral air supply." + desc = "Chemical, Biological, Radiological and Nuclear. A heavy duty gas mask design to be worn in hazardous environments. Actually works like a gas mask as well as can be connected to internal air supply." item_state = "gas_cbrn" icon_state = "gas_cbrn" icon = 'modular_splurt/icons/obj/clothing/masks.dmi' @@ -38,14 +38,14 @@ /obj/item/clothing/mask/gas/cbrn/mopp name = "MOPP gas mask" - desc = "Mission Oriented Protective Posture. A heavy duty gas mask design to be worn in hazardus combat enviorments. Acutally works like a gas mask as well as can be connected to intenral air supply." + desc = "Mission Oriented Protective Posture. A heavy duty gas mask design to be worn in hazardous combat environments. Actually works like a gas mask as well as can be connected to internal air supply." item_state = "gas_mopp" icon_state = "gas_mopp" armor = list("melee" = 10, "bullet" = 5, "laser" = 10,"energy" = 10, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 40, "acid" = 100) /obj/item/clothing/mask/gas/cbrn/mopp/advance name = "advance MOPP gas mask" - desc = "Mission Oriented Protective Posture. A heavy duty gas mask design to be worn in hazardus combat enviorments. Acutally works like a gas mask as well as can be connected to intenral air supply. Used by Centcom Staff and ERT teams." + desc = "Mission Oriented Protective Posture. A heavy duty gas mask design to be worn in hazardous combat environments. Actually works like a gas mask as well as can be connected to internal air supply. Used by CentCom Staff and ERT teams." armor = list("melee" = 20, "bullet" = 10, "laser" = 20,"energy" = 20, "bomb" = 20, "bio" = 110, "rad" = 110, "fire" = 50, "acid" = 110) //broken huds for loot @@ -77,7 +77,7 @@ /obj/item/clothing/glasses/brokenhud/health/night name = "broken night vision health scanner HUD" - desc = "An advanced medical heads-up display that allows doctors to find patients in complete darkness. However the eletronics seem to no longer work" + desc = "An advanced medical heads-up display that allows doctors to find patients in complete darkness. However the electronics seem to no longer work" icon_state = "healthhudnight" item_state = "glasses" glass_colour_type = /datum/client_colour/glass_colour/green diff --git a/modular_splurt/code/modules/clothing/shoes/miscellaneous.dm b/modular_splurt/code/modules/clothing/shoes/miscellaneous.dm index 80e04717e6..5d50562d5a 100644 --- a/modular_splurt/code/modules/clothing/shoes/miscellaneous.dm +++ b/modular_splurt/code/modules/clothing/shoes/miscellaneous.dm @@ -35,7 +35,7 @@ /obj/item/clothing/shoes/workboots/toeless name = "toe-less workboots" - desc = "A pair of toeless work boots designed for use in industrial settings. Modified for species whose toes have claws." + desc = "A pair of toe-less work boots designed for use in industrial settings. Modified for species whose toes have claws." icon = 'modular_splurt/icons/obj/clothing/shoes.dmi' icon_state = "workboots-toeless" mob_overlay_icon = 'modular_splurt/icons/mob/clothing/shoes.dmi' @@ -43,7 +43,7 @@ /obj/item/clothing/shoes/jackboots/cbrn name = "CBRN boots" - desc = "Chemical, Biological, Radiological and Nuclear. Thick black boots design for working in hazardus evniroments." + desc = "Chemical, Biological, Radiological and Nuclear. Thick black boots design for working in hazardous environments." icon = 'modular_splurt/icons/obj/clothing/shoes.dmi' icon_state = "cbrnboots" mob_overlay_icon = 'modular_splurt/icons/mob/clothing/shoes.dmi' @@ -54,12 +54,12 @@ /obj/item/clothing/shoes/jackboots/cbrn/mopp name = "MOPP boots" - desc = "Mission Oriented Protective Posture. Thick black boots design for working in hazardus combat evniroments." + desc = "Mission Oriented Protective Posture. Thick black boots design for working in hazardous combat environments." armor = list("melee" = 10, "bullet" = 0, "laser" = 10,"energy" = 10, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 40, "acid" = 100) /obj/item/clothing/shoes/jackboots/cbrn/mopp/advance name = "advance MOPP boots" - desc = "Mission Oriented Protective Posture. Thick black boots design for working in hazardus combat evniroments. Used by Centcom Officer and ERT staff." + desc = "Mission Oriented Protective Posture. Thick black boots design for working in hazardous combat environments. Used by CentCom Officer and ERT staff." armor = list("melee" = 10, "bullet" = 0, "laser" = 10,"energy" = 10, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 40, "acid" = 100) clothing_flags = NOSLIP diff --git a/modular_splurt/code/modules/clothing/sizeaccessories.dm b/modular_splurt/code/modules/clothing/sizeaccessories.dm index 2161ee92ba..4fefb9e277 100644 --- a/modular_splurt/code/modules/clothing/sizeaccessories.dm +++ b/modular_splurt/code/modules/clothing/sizeaccessories.dm @@ -18,7 +18,7 @@ return ..() if(user.GetComponent(/datum/component/size_normalized)) - to_chat(user, "\The [src] buzzes, being overwritten by another accessory.") + to_chat(user, span_warning("\The [src] buzzes, being overwritten by another accessory.")) playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 1) else user.AddComponent(/datum/component/size_normalized, wear=src) @@ -44,7 +44,7 @@ return ..() if(user.GetComponent(/datum/component/size_normalized)) - to_chat(user, "\The [src] buzzes, being overwritten by another accessory.") + to_chat(user, span_warning("\The [src] buzzes, being overwritten by another accessory.")) playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 1) else user.AddComponent(/datum/component/size_normalized, wear=src) @@ -72,7 +72,7 @@ return ..() if(user.GetComponent(/datum/component/size_normalized)) - to_chat(user, "\The [src] buzzes, being overwritten by another accessory.") + to_chat(user, span_warning("\The [src] buzzes, being overwritten by another accessory.")) playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 1) else user.AddComponent(/datum/component/size_normalized, wear=src) diff --git a/modular_splurt/code/modules/clothing/spacesuits/hardsuit.dm b/modular_splurt/code/modules/clothing/spacesuits/hardsuit.dm index daebd17455..d56d5a7e45 100644 --- a/modular_splurt/code/modules/clothing/spacesuits/hardsuit.dm +++ b/modular_splurt/code/modules/clothing/spacesuits/hardsuit.dm @@ -22,7 +22,7 @@ //Own stuff /obj/item/clothing/head/helmet/space/hardsuit/rd/hev name = "HEV Suit helmet" - desc = "A Hazardous Environment Helmet. It fits snug over the suit and has a heads-up display for researchers. The flashlight seems broken, fitting considering this was made before the start of the milennium." + desc = "A Hazardous Environment Helmet. It fits snug over the suit and has a heads-up display for researchers. The flashlight seems broken, fitting considering this was made before the start of the millennium." icon = 'modular_splurt/icons/obj/clothing/hats.dmi' mob_overlay_icon = 'modular_splurt/icons/mob/clothing/head.dmi' anthro_mob_worn_overlay = 'modular_splurt/icons/mob/clothing/head_muzzled.dmi' @@ -38,7 +38,7 @@ /obj/item/clothing/suit/space/hardsuit/rd/hev name = "HEV Suit" - desc = "The hazard suit. It was designed to protect scientists from the blunt trauma, radiation, energy discharge that hazardous materials might produce or entail. Fits you like a glove. The automatic medical system seems broken... They're waiting for you, Gordon. In the test chamberrrrrr." + desc = "The hazard suit. It was designed to protect scientists from the blunt trauma, radiation, energy discharge that hazardous materials might produce or entail. Fits you like a glove. The automatic medical system seems broken... They're waiting for you, Gordon. In the test chamber." icon = 'modular_splurt/icons/obj/clothing/suits.dmi' mob_overlay_icon = 'modular_splurt/icons/mob/clothing/suit.dmi' anthro_mob_worn_overlay = 'modular_splurt/icons/mob/clothing/suit_digi.dmi' @@ -157,9 +157,9 @@ var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread sparks.set_up(1, 1, src) sparks.start() - owner.visible_message("The tesla capacitors on [owner]'s Tesla Power Armor are still recharging! The armor merely emits some sparks.") + owner.visible_message(span_danger("The tesla capacitors on [owner]'s Tesla Power Armor are still recharging! The armor merely emits some sparks.")) return - owner.visible_message("[src] blocks [attack_text], sending out arcs of lightning!") + owner.visible_message(span_danger("[src] blocks [attack_text], sending out arcs of lightning!")) if(!legacy) tesla_zap(owner, tesla_range, tesla_power, tesla_flags) else diff --git a/modular_splurt/code/modules/clothing/suits/armor.dm b/modular_splurt/code/modules/clothing/suits/armor.dm index 78e49153e2..c4e52bc605 100644 --- a/modular_splurt/code/modules/clothing/suits/armor.dm +++ b/modular_splurt/code/modules/clothing/suits/armor.dm @@ -2,7 +2,7 @@ name = "stripper armor" desc = "Talk about lightweight." icon = 'modular_splurt/icons/obj/clothing/suits.dmi' - mob_overlay_icon = 'modular_splurt/icons/mob/clothing/suit.dmi' //null I know you're reading this, you couldn't even edit the right file you absolute buffon + mob_overlay_icon = 'modular_splurt/icons/mob/clothing/suit.dmi' //null I know you're reading this, you couldn't even edit the right file you absolute buffoon mutantrace_variation = NONE icon_state = "armorstripper" item_state = "armorstripper" diff --git a/modular_splurt/code/modules/clothing/suits/heavy.dm b/modular_splurt/code/modules/clothing/suits/heavy.dm index 435d890f44..4c6199b1ec 100644 --- a/modular_splurt/code/modules/clothing/suits/heavy.dm +++ b/modular_splurt/code/modules/clothing/suits/heavy.dm @@ -2,7 +2,7 @@ /obj/item/clothing/suit/cbrn name = "civilian CBRN suit" - desc = "Chemical, Biological, Radiological and Nuclear. A suit design for harsh environmental conditions short of no atmosphere. This one has civilian colors" + desc = "Chemical, Biological, Radiological and Nuclear. A suit design for harsh environmental conditions short of no atmosphere. This one has civilian colors." icon_state = "cbrnsuitciv" item_state = "cbrnsuitciv" icon = 'modular_splurt/icons/obj/clothing/suits.dmi' @@ -25,37 +25,37 @@ /obj/item/clothing/suit/cbrn/engineering name = "engineering CBRN suit" - desc = "Chemical, Biological, Radiological and Nuclear. A suit design for harsh environmental conditions short of no atmosphere. This one has engineering colors" + desc = "Chemical, Biological, Radiological and Nuclear. A suit design for harsh environmental conditions short of no atmosphere. This one has engineering colors." icon_state = "cbrnsuiteng" item_state = "cbrnsuiteng" /obj/item/clothing/suit/cbrn/security name = "engineering CBRN suit" - desc = "Chemical, Biological, Radiological and Nuclear. A suit design for harsh environmental conditions short of no atmosphere. This one has security colors" + desc = "Chemical, Biological, Radiological and Nuclear. A suit design for harsh environmental conditions short of no atmosphere. This one has security colors." icon_state = "cbrnsuitsec" item_state = "cbrnsuitsec" /obj/item/clothing/suit/cbrn/medical name = "medical CBRN suit" - desc = "Chemical, Biological, Radiological and Nuclear. A suit design for harsh environmental conditions short of no atmosphere. This one has medical colors" + desc = "Chemical, Biological, Radiological and Nuclear. A suit design for harsh environmental conditions short of no atmosphere. This one has medical colors." icon_state = "cbrnsuitmed" item_state = "cbrnsuitmed" /obj/item/clothing/suit/cbrn/cargo name = "cargo CBRN suit" - desc = "Chemical, Biological, Radiological and Nuclear. A suit design for harsh environmental conditions short of no atmosphere. This one has cargo colors" + desc = "Chemical, Biological, Radiological and Nuclear. A suit design for harsh environmental conditions short of no atmosphere. This one has cargo colors." icon_state = "cbrnsuitcargo" item_state = "cbrnsuitcargo" /obj/item/clothing/suit/cbrn/science name = "science CBRN suit" - desc = "Chemical, Biological, Radiological and Nuclear. A suit design for harsh environmental conditions short of no atmosphere. This one has science colors" + desc = "Chemical, Biological, Radiological and Nuclear. A suit design for harsh environmental conditions short of no atmosphere. This one has science colors." icon_state = "cbrnsuitsci" item_state = "cbrnsuitsci" /obj/item/clothing/suit/cbrn/service name = "service CBRN suit" - desc = "Chemical, Biological, Radiological and Nuclear. A suit design for harsh environmental conditions short of no atmosphere. This one has service colors" + desc = "Chemical, Biological, Radiological and Nuclear. A suit design for harsh environmental conditions short of no atmosphere. This one has service colors." icon_state = "cbrnsuitserv" item_state = "cbrnsuitserv" @@ -72,32 +72,32 @@ /obj/item/clothing/suit/cbrn/mopp/advance name = "advance MOPP suit" - desc = "Mission Oriented Protective Posture. A suit design for harsh combat conditions short of no atmosphere. This is an advance versoin for Non-ERT Central Command Staff." - slowdown = 0 // This is suppose to be advance, hopfully not too OP + desc = "Mission Oriented Protective Posture. A suit design for harsh combat conditions short of no atmosphere. This is an advance version for Non-ERT Central Command Staff." + slowdown = 0 // This is suppose to be advance, hopefully not too OP armor = list("melee" = 40, "bullet" = 60, "laser" = 40,"energy" = 30, "bomb" = 20, "bio" = 110, "rad" = 110, "fire" = 50, "acid" = 110) //Scale with standard MOPP suits as this effects all ERT suits clothing_flags = NONE /obj/item/clothing/suit/cbrn/mopp/advance/commander name = "advance MOPP suit 'Commander'" - desc = "Mission Oriented Protective Posture. A suit design for harsh combat conditions short of no atmosphere. This is an advance versoin for ERT Commanders." + desc = "Mission Oriented Protective Posture. A suit design for harsh combat conditions short of no atmosphere. This is an advance version for ERT Commanders." icon_state = "moppsuitertcom" item_state = "moppsuitertcom" /obj/item/clothing/suit/cbrn/mopp/advance/security name = "advance MOPP suit 'Security'" - desc = "Mission Oriented Protective Posture. A suit design for harsh combat conditions short of no atmosphere. This is an advance versoin for ERT Security members." + desc = "Mission Oriented Protective Posture. A suit design for harsh combat conditions short of no atmosphere. This is an advance version for ERT Security members." icon_state = "moppsuitertsec" item_state = "moppsuitertsec" /obj/item/clothing/suit/cbrn/mopp/advance/medical name = "advance MOPP suit 'Medical'" - desc = "Mission Oriented Protective Posture. A suit design for harsh combat conditions short of no atmosphere. This is an advance versoin for ERT Medical members." + desc = "Mission Oriented Protective Posture. A suit design for harsh combat conditions short of no atmosphere. This is an advance version for ERT Medical members." icon_state = "moppsuitertmed" item_state = "moppsuitertmed" /obj/item/clothing/suit/cbrn/mopp/advance/engi name = "advance MOPP suit 'Engineer'" - desc = "Mission Oriented Protective Posture. A suit design for harsh combat conditions short of no atmosphere. This is an advance versoin for ERT Engineering members." + desc = "Mission Oriented Protective Posture. A suit design for harsh combat conditions short of no atmosphere. This is an advance version for ERT Engineering members." icon_state = "moppsuiterteng" item_state = "moppsuiterteng" @@ -140,8 +140,8 @@ //research nods /datum/design/cbrn/cbrncivi - name = "Civlian CBRN Suit" - desc = "A civlian CBRN suit." + name = "Civilian CBRN Suit" + desc = "A civilian CBRN suit." id = "cbrn_civi" build_type = PROTOLATHE materials = list(/datum/material/plastic = 600, /datum/material/uranium = 500, /datum/material/iron = 600) diff --git a/modular_splurt/code/modules/clothing/suits/jobs.dm b/modular_splurt/code/modules/clothing/suits/jobs.dm index b62195363b..831c54ec87 100644 --- a/modular_splurt/code/modules/clothing/suits/jobs.dm +++ b/modular_splurt/code/modules/clothing/suits/jobs.dm @@ -1,6 +1,6 @@ /obj/item/clothing/suit/det_suit/lanyard - name = "trenchcoat" - desc = "An 18th-century multi-purpose trenchcoat. This one has a lanyard around the neck." + name = "trench coat" + desc = "An 18th-century multi-purpose trench coat. This one has a lanyard around the neck." icon = 'modular_splurt/icons/obj/clothing/suits.dmi' mob_overlay_icon = 'modular_splurt/icons/mob/clothing/suit.dmi' icon_state = "detective_lanyard" diff --git a/modular_splurt/code/modules/clothing/suits/miscellaneous.dm b/modular_splurt/code/modules/clothing/suits/miscellaneous.dm index 2d01bd9325..7a14c9ff14 100644 --- a/modular_splurt/code/modules/clothing/suits/miscellaneous.dm +++ b/modular_splurt/code/modules/clothing/suits/miscellaneous.dm @@ -115,7 +115,7 @@ item_state = "armor" body_parts_covered = CHEST|GROIN|LEGS|ARMS|FEET|HANDS hoodtype = /obj/item/clothing/head/hooded/corpus - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT //"Hide shoes" but digi shoes dont get hidden, too bad! + flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT //"Hide shoes" but digi shoes don't get hidden, too bad! min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT mutantrace_variation = NONE //There is no need for a digi variant, it's a costume @@ -187,7 +187,7 @@ // GWTB-inspired stuff wooo /obj/item/clothing/suit/goner name = "trencher coat" - desc = "A generic trenchcoat of the boring wars. This one have purple, corporate insignias." + desc = "A generic trench coat of the boring wars. This one have purple, corporate insignias." icon = 'modular_splurt/icons/obj/clothing/suits.dmi' mob_overlay_icon = 'modular_splurt/icons/mob/clothing/suit.dmi' anthro_mob_worn_overlay = 'modular_splurt/icons/mob/clothing/suit_digi.dmi' @@ -208,7 +208,7 @@ /obj/item/clothing/suit/goner/fake/poly name = "polychromic trencher coat" - desc = "A generic, drab olive trenchcoat with polychromatic spots." + desc = "A generic, drab olive trench coat with polychromic spots." var/list/poly_colors = list("#E6E6E6", "#D6D6D6", "#D6D6D6") /obj/item/clothing/suit/goner/fake/poly/ComponentInitialize() @@ -218,26 +218,26 @@ /obj/item/clothing/suit/goner/fake/poly/classic name = "classic trencher coat" icon_state = "goner_suit_classic" - desc = "A generic, grey coat with polychromatic spots." + desc = "A generic, grey coat with polychromic spots." /obj/item/clothing/suit/goner/red name = "red trencher coat" - desc = "A trenchcoat of the boring wars. This one have red insignias." + desc = "A trench coat of the boring wars. This one have red insignias." icon_state = "goner_suit_r" /obj/item/clothing/suit/goner/green name = "green trencher coat" - desc = "A trenchcoat of the boring wars. This one have green insignias." + desc = "A trench coat of the boring wars. This one have green insignias." icon_state = "goner_suit_g" /obj/item/clothing/suit/goner/blue name = "blue trencher coat" - desc = "A trenchcoat of the boring wars. This one have blue insignias." + desc = "A trench coat of the boring wars. This one have blue insignias." icon_state = "goner_suit_b" /obj/item/clothing/suit/goner/yellow name = "yellow trencher coat" - desc = "A trenchcoat of the boring wars. This one have yellow insignias." + desc = "A trench coat of the boring wars. This one have yellow insignias." icon_state = "goner_suit_y" /obj/item/clothing/suit/hooded/corpus/jp //It's him! John Prodman! diff --git a/modular_splurt/code/modules/clothing/suits/vest.dm b/modular_splurt/code/modules/clothing/suits/vest.dm index 1f406d49d0..20117298cf 100644 --- a/modular_splurt/code/modules/clothing/suits/vest.dm +++ b/modular_splurt/code/modules/clothing/suits/vest.dm @@ -11,14 +11,14 @@ /obj/item/clothing/suit/brigdoc/labcoat name = "brig physician lab coat" - desc = "A dark red labcoat for brig physicians." + desc = "A dark red lab coat for brig physicians." icon_state = "secmed_labcoat" item_state = "secmed_labcoat" - mob_overlay_icon = 'modular_splurt/icons/mob/clothing/suit.dmi' //its in a seperate file + mob_overlay_icon = 'modular_splurt/icons/mob/clothing/suit.dmi' //its in a separate file /obj/item/clothing/suit/brigdoc/armor name = "brig physician armored coat" - desc = "A dark red labcoat with armored vest for brig physicians. Used for hostile work enviroments." + desc = "A dark red lab coat with armored vest for brig physicians. Used for hostile work environments." icon_state = "secmed_armor" item_state = "secmed_armor" mob_overlay_icon = 'modular_splurt/icons/mob/clothing/suit.dmi' @@ -36,7 +36,7 @@ /obj/item/clothing/suit/armor/vest/bluesheid/coat name = "blueshield armored coat" - desc = "A fastional piece of armored style." + desc = "A fashionable piece of armored style." icon_state = "blueshieldcoat" item_state = "blueshieldcoat" @@ -62,7 +62,7 @@ /obj/item/clothing/suit/armor/vest/metrocop name = "civil protection armored vest" - desc = "You feel like this may not stop a scienctist armed with nothing but a crowbar." + desc = "You feel like this may not stop a scientist armed with nothing but a crowbar." icon_state = "metrocop_armor" item_state = "metrocop_armor" icon = 'modular_splurt/icons/obj/clothing/suits.dmi' @@ -70,7 +70,7 @@ dog_fashion = null /obj/item/clothing/suit/armor/vest/warden/peacekeeper - name = "warden's peacekeeper armored trenchcoat" + name = "warden's peacekeeper armored trench coat" desc = "A heavy trench coat with a armored vest sown into it. Used by the peace minded warden" icon_state = "peacekeeper_trench_warden" item_state = "peacekeeper_trench_warden" @@ -78,8 +78,8 @@ mob_overlay_icon = 'modular_splurt/icons/mob/clothing/suit.dmi' /obj/item/clothing/suit/armor/hos/peacekeeper - name = "head of secuirty's peacekeeper armored trenchcoat" - desc = "A heavy trench coat with a armored vest sown into it. Used by the peace minded head of secuirty" + name = "head of security's peacekeeper armored trench coat" + desc = "A heavy trench coat with a armored vest sown into it. Used by the peace minded head of security" icon_state = "peacekeeper_trench_hos" item_state = "peacekeeper_trench_hos" icon = 'modular_splurt/icons/obj/clothing/suits.dmi' diff --git a/modular_splurt/code/modules/clothing/under/_under.dm b/modular_splurt/code/modules/clothing/under/_under.dm index 5dedecd802..847ba40c3c 100644 --- a/modular_splurt/code/modules/clothing/under/_under.dm +++ b/modular_splurt/code/modules/clothing/under/_under.dm @@ -1,3 +1,8 @@ +/obj/item/clothing/under/Initialize(mapload) + . = ..() + if(!is_type_in_typecache(type, GLOB.skirt_peekable)) + LAZYSET(GLOB.skirt_peekable, type, TRUE) + /obj/item/clothing/under/Destroy() QDEL_LIST(attached_accessories) return ..() diff --git a/modular_splurt/code/modules/clothing/under/jobs/civilian/civilian.dm b/modular_splurt/code/modules/clothing/under/jobs/civilian/civilian.dm index 9b577874e6..2ab2219847 100644 --- a/modular_splurt/code/modules/clothing/under/jobs/civilian/civilian.dm +++ b/modular_splurt/code/modules/clothing/under/jobs/civilian/civilian.dm @@ -17,7 +17,7 @@ /obj/item/clothing/under/rank/civilian/lawyer/galaxy_blue name = "\improper De Void of Soul" - desc = "A suit of stars and high-V gas. One that screams the cosmos and unfathomnable vastness. Earned by only the best of the best." + desc = "A suit of stars and high-V gas. One that screams the cosmos and unfathomable vastness. Earned by only the best of the best." icon_state = "galaxy_blue" icon = 'modular_splurt/icons/obj/clothing/uniforms.dmi' mob_overlay_icon = 'modular_splurt/icons/mob/clothing/uniform.dmi' diff --git a/modular_splurt/code/modules/clothing/under/miscellaneous.dm b/modular_splurt/code/modules/clothing/under/miscellaneous.dm index dc4696af4e..3f6b806260 100644 --- a/modular_splurt/code/modules/clothing/under/miscellaneous.dm +++ b/modular_splurt/code/modules/clothing/under/miscellaneous.dm @@ -37,7 +37,7 @@ /obj/item/clothing/under/lumberjack name = "lumberjack outfit" - desc = "I am a lumberjack and I am ok, I sleep all night and I work all day." + desc = "I am a lumberjack and I am okay, I sleep all night and I work all day." icon = 'modular_splurt/icons/obj/clothing/uniforms.dmi' icon_state = "lumberjack" mob_overlay_icon = 'modular_splurt/icons/mob/clothing/uniform.dmi' @@ -46,7 +46,7 @@ /obj/item/clothing/under/bunnysuit name = "bunny outfit" - desc = "A simple black bunnt outfit." + desc = "A simple black bunny outfit." icon = 'modular_splurt/icons/obj/clothing/uniforms.dmi' mob_overlay_icon = 'modular_splurt/icons/mob/clothing/uniform.dmi' icon_state = "bunnysuit" @@ -89,7 +89,7 @@ /obj/item/clothing/under/bunnysuit/white name = "white bunny outfit" - desc = "A simple white bunnt outfit." + desc = "A simple white bunny outfit." icon = 'modular_splurt/icons/obj/clothing/uniforms.dmi' mob_overlay_icon = 'modular_splurt/icons/mob/clothing/uniform.dmi' icon_state = "whitebunnysuit" @@ -194,7 +194,7 @@ /obj/item/clothing/head/helmet/space/plasmaman/security/blueshield name = "head of security's plasma envirosuit helmet" - desc = "A plasmaman containment helmet designed for the Bluesheidl, manacing black with blue stripes." + desc = "A plasmaman containment helmet designed for the Blueshield, menacing black with blue stripes." icon_state = "bs_envirohelm" item_state = "bs_envirohelm" icon = 'modular_splurt/icons/obj/clothing/head.dmi' @@ -203,7 +203,7 @@ /obj/item/clothing/under/rank/bridgeofficer name = "bridge officer outfit" - desc = "The uniform of a bridge officer. It makes you feel extremly importnant, even if you are not." + desc = "The uniform of a bridge officer. It makes you feel extremely important, even if you are not." icon = 'modular_splurt/icons/obj/clothing/uniforms.dmi' mob_overlay_icon = 'modular_splurt/icons/mob/clothing/uniform.dmi' icon_state = "bridgesec" @@ -225,7 +225,7 @@ /obj/item/clothing/under/rank/bridgeofficer/formal name = "bridge officer formal outfit" - desc = "The uniform of a bridge officer. Its a formal varaint." + desc = "The uniform of a bridge officer. Its a formal variant." icon = 'modular_splurt/icons/obj/clothing/uniforms.dmi' mob_overlay_icon = 'modular_splurt/icons/mob/clothing/uniform.dmi' icon_state = "bridgesecformal" @@ -281,7 +281,7 @@ /obj/item/clothing/under/goner/fake/poly name = "polychromic trencher uniform" - desc = "An utilitarian uniform with polychromatic spots." + desc = "An utilitarian uniform with polychromic spots." var/list/poly_colors = list("#E6E6E6") /obj/item/clothing/under/goner/fake/poly/ComponentInitialize() diff --git a/modular_splurt/code/modules/events/crystalline_reentry.dm b/modular_splurt/code/modules/events/crystalline_reentry.dm index 97378c781a..02f8ff68ae 100644 --- a/modular_splurt/code/modules/events/crystalline_reentry.dm +++ b/modular_splurt/code/modules/events/crystalline_reentry.dm @@ -149,7 +149,7 @@ if(prob(10)) playsound(src, 'sound/effects/bang.ogg', 50, 1) - audible_message("You hear a BONK!") + audible_message(span_danger("You hear a BONK!")) if(clong && prob(25)) x = clong.x @@ -179,7 +179,7 @@ atmos_spawn_air("water_vapor=75;TEMP=0") //brr /obj/effect/crystalline_reentry/proc/penetrate(mob/living/L) - L.visible_message("[L] is smashed by a crystalline asteroid!" , "The crystalline asteroid smashes you!" , "You hear a BONK!") + L.visible_message(span_danger("[L] is smashed by a crystalline asteroid!") , span_userdanger("The crystalline asteroid smashes you!") , "You hear a BONK!") if(ishuman(L)) var/mob/living/carbon/human/H = L H.adjustBruteLoss(160) @@ -209,14 +209,14 @@ switch(rand(1,100)) if(1 to 30) var/obj/structure/spawner/crystalline/M = new(src.loc) - visible_message("A [M] emerges from the asteroid's rubble!") + visible_message(span_danger("A [M] emerges from the asteroid's rubble!")) if(prob(50) && tendrilnotify) priority_announce("Unknown organic entities have been detected in the vincinity of [station_name()]. General caution is advised.", "General Alert") if(31 to 99) visible_message("The asteroid collapses into nothing...") if(100) var/mob/living/simple_animal/bot/hugbot/M = new(src.loc) - visible_message("A [M] emerges from the asteroid's rubble! Wait... What?") + visible_message(span_danger("A [M] emerges from the asteroid's rubble! Wait... What?")) qdel(src) /obj/effect/crystalline_reentry/notendrilalert @@ -289,8 +289,8 @@ /obj/effect/cloud_collapse/Initialize() . = ..() emitted_light = new(loc) - visible_message("The tendril writhes in fury as the earth around it begins to crack and break apart! Get back!") - visible_message("Something falls free of the tendril!") + visible_message(span_boldannounce("The tendril writhes in fury as the earth around it begins to crack and break apart! Get back!")) + visible_message(span_warning("Something falls free of the tendril!")) playsound(loc,'sound/effects/tendril_destroyed.ogg', 200, 0, 50, 1, 1) addtimer(CALLBACK(src, .proc/collapse), 50) @@ -302,7 +302,7 @@ for(var/mob/M in range(7,src)) shake_camera(M, 15, 1) playsound(get_turf(src),'sound/effects/explosionfar.ogg', 200, 1) - visible_message("The tendril falls into the clouds below!") + visible_message(span_boldannounce("The tendril falls into the clouds below!")) for(var/turf/T in range(1,src)) if(!T.density) T.TerraformTurf(/turf/open/chasm/cloud, /turf/open/chasm/cloud) diff --git a/modular_splurt/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/modular_splurt/code/modules/food_and_drinks/drinks/drinks/bottle.dm index 253eb2d300..436ab349f3 100644 --- a/modular_splurt/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ b/modular_splurt/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -2,14 +2,12 @@ /obj/item/reagent_containers/food/drinks/bottle/bitters name = "Andromeda Bitters" desc = "An aromatic addition to any drink. Made in New Trinidad, now and forever." - icon = 'modular_splurt/icons/obj/drinks.dmi' icon_state = "bitters_bottle" list_reagents = list(/datum/reagent/consumable/ethanol/bitters = 30) /obj/item/reagent_containers/food/drinks/bottle/curacao name = "Beekhof Blauw Curaçao" desc = "Still produced on the island of Curaçao, after all these years." - icon = 'modular_splurt/icons/obj/drinks.dmi' icon_state = "curacao_bottle" volume = 100 list_reagents = list(/datum/reagent/consumable/ethanol/curacao = 100) @@ -17,7 +15,6 @@ /obj/item/reagent_containers/food/drinks/bottle/navy_rum name = "Pride of the Union Navy-Strength Rum" desc = "Ironically named, given it's made in Bermuda." - icon = 'modular_splurt/icons/obj/drinks.dmi' icon_state = "navy_rum_bottle" volume = 100 list_reagents = list(/datum/reagent/consumable/ethanol/navy_rum = 100) diff --git a/modular_splurt/code/modules/food_and_drinks/food/snacks_other.dm b/modular_splurt/code/modules/food_and_drinks/food/snacks_other.dm index d04a6eca55..7e15394479 100644 --- a/modular_splurt/code/modules/food_and_drinks/food/snacks_other.dm +++ b/modular_splurt/code/modules/food_and_drinks/food/snacks_other.dm @@ -15,7 +15,7 @@ cheeseoverlay.icon_state = "cheesed_snout" else cheeseoverlay.icon_state = "cheesed_human" - H.visible_message("[H] is cheesed by [src]!", "You've been cheesed by [src]!") + H.visible_message(span_warning("[H] is cheesed by [src]!"), span_userdanger("You've been cheesed by [src]!")) playsound(H, 'modular_splurt/sound/effects/slap.ogg') if(!H.is_mouth_covered()) reagents.trans_to(H, 15, log = "cheesed hit") //Cream pie combat diff --git a/modular_splurt/code/modules/holodeck/holo_effect.dm b/modular_splurt/code/modules/holodeck/holo_effect.dm new file mode 100644 index 0000000000..349ca781f1 --- /dev/null +++ b/modular_splurt/code/modules/holodeck/holo_effect.dm @@ -0,0 +1,7 @@ +// Holodeck mob: Funclaw +/obj/effect/holodeck_effect/mobspawner/funclaw + mobtype = /mob/living/simple_animal/hostile/deathclaw/funclaw/gentle + +// Holodeck mob: Friendly Bee +/obj/effect/holodeck_effect/mobspawner/bumbles + mobtype = /mob/living/simple_animal/pet/bumbles diff --git a/modular_splurt/code/modules/jobs/job_types/peacekeeper.dm b/modular_splurt/code/modules/jobs/job_types/peacekeeper.dm index d2b1c4b206..0936c46c12 100644 --- a/modular_splurt/code/modules/jobs/job_types/peacekeeper.dm +++ b/modular_splurt/code/modules/jobs/job_types/peacekeeper.dm @@ -151,7 +151,7 @@ Peacekeeper Hypospray /obj/item/reagent_containers/peacehypo/attack(mob/living/carbon/M, mob/user) var/datum/reagents/R = reagent_list[mode] if(!R.total_volume) - to_chat(user, "The injector is empty.") + to_chat(user, span_notice("The injector is empty.")) return if(!istype(M)) return @@ -160,15 +160,15 @@ Peacekeeper Hypospray for(var/datum/reagent/RG in R.reagent_list) if(M.reagents.has_reagent(RG.type) && !RG.overdose_threshold == 0) if(((M.reagents.get_reagent_amount(RG.type)) + amount_per_transfer_from_this > RG.overdose_threshold)) - to_chat(user, "Injecting [M] with more [RG] would overdose them.") + to_chat(user, span_warning("Injecting [M] with more [RG] would overdose them.")) return - to_chat(M, "You feel a tiny prick!") - to_chat(user, "You inject [M] with the injector.") + to_chat(M, span_warning("You feel a tiny prick!")) + to_chat(user, span_notice("You inject [M] with the injector.")) var/fraction = min(amount_per_transfer_from_this/R.total_volume, 1) R.reaction(M, INJECT, fraction) if(M.reagents) var/trans = R.trans_to(M, amount_per_transfer_from_this) - to_chat(user, "[trans] unit\s injected. [R.total_volume] unit\s remaining.") + to_chat(user, span_notice("[trans] unit\s injected. [R.total_volume] unit\s remaining.")) var/list/injected = list() for(var/datum/reagent/RG in R.reagent_list) @@ -182,7 +182,7 @@ Peacekeeper Hypospray mode = chosen_reagent playsound(loc, 'sound/effects/pop.ogg', 50, 0) var/datum/reagent/R = GLOB.chemical_reagents_list[reagent_ids[mode]] - to_chat(user, "[src] is now dispensing '[R.name]'.") + to_chat(user, span_notice("[src] is now dispensing '[R.name]'.")) return /obj/item/reagent_containers/peacehypo/examine(mob/user) @@ -195,11 +195,11 @@ Peacekeeper Hypospray for(var/datum/reagents/RS in reagent_list) var/datum/reagent/R = locate() in RS.reagent_list if(R) - . += "It currently has [R.volume] unit\s of [R.name] stored." + . += span_notice("It currently has [R.volume] unit\s of [R.name] stored.") empty = 0 if(empty) - . += "It is currently empty! Allow some time for the internal syntheszier to produce more." + . += span_warning("It is currently empty! Allow some time for the internal syntheszier to produce more.") /* End Peacekeeper Hypo */ diff --git a/modular_splurt/code/modules/keybindings/keybind/human.dm b/modular_splurt/code/modules/keybindings/keybind/human.dm new file mode 100644 index 0000000000..951ce686e2 --- /dev/null +++ b/modular_splurt/code/modules/keybindings/keybind/human.dm @@ -0,0 +1,32 @@ +/datum/keybinding/human/quick_equip_suitstorage + hotkey_keys = list("ShiftQ") + name = "quick_equipsuitstorage" + full_name = "Quick suit storage" + description = "Put held thing in suit storage or take the item from it" + +/datum/keybinding/human/quick_equip_suitstorage/down(client/user) + var/mob/living/carbon/human/H = user.mob + H.smart_equip_suitstorage() + return TRUE + +/datum/keybinding/human/quick_equip_lpocket + hotkey_keys = list("Unbound") + name = "quick_equip_lpocket" + full_name = "Quick left pocket" + description = "Put held thing in left pocket or take the item from it" + +/datum/keybinding/human/quick_equip_lpocket/down(client/user) + var/mob/living/carbon/human/H = user.mob + H.smart_equip_lpocket() + return TRUE + +/datum/keybinding/human/quick_equip_rpocket + hotkey_keys = list("Unbound") + name = "quick_equip_rpocket" + full_name = "Quick right pocket" + description = "Put held thing in right pocket or take the item from it" + +/datum/keybinding/human/quick_equip_rpocket/down(client/user) + var/mob/living/carbon/human/H = user.mob + H.smart_equip_rpocket() + return TRUE diff --git a/modular_splurt/code/modules/mob/dead/dead.dm b/modular_splurt/code/modules/mob/dead/dead.dm index f314076f72..f3fcd1d528 100644 --- a/modular_splurt/code/modules/mob/dead/dead.dm +++ b/modular_splurt/code/modules/mob/dead/dead.dm @@ -1,5 +1,5 @@ /mob/dead/check_out(atom/A) if (!CONFIG_GET(flag/ghost_interaction)) - to_chat(usr, "You cannot check out people when dead!") + to_chat(usr, span_notice("You cannot check out people when dead!")) return . = ..() diff --git a/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/body_markings.dm b/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/body_markings.dm index 33c377eabb..ac3b448ca1 100644 --- a/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/body_markings.dm +++ b/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/body_markings.dm @@ -107,6 +107,12 @@ icon_state = "deoxys" covered_limbs = list("Head" = MATRIX_ALL, "Chest" = MATRIX_ALL, "Left Leg" = MATRIX_RED_GREEN, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN) +/datum/sprite_accessory/mam_body_markings/sloog + name = "Sloog" + icon = 'modular_splurt/icons/mob/mam_markings.dmi' + icon_state = "sloog" + covered_limbs = list("Chest" = MATRIX_RED_GREEN) + /****************************************** ************* Insect Markings ************* *******************************************/ diff --git a/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/horns.dm b/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/horns.dm index 56ba9fdbba..4454dd0283 100644 --- a/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/horns.dm +++ b/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/horns.dm @@ -41,3 +41,12 @@ name = "Alien Bobbers" icon = 'modular_splurt/icons/mob/mutant_bodyparts.dmi' icon_state = "alienbobbers" + +/datum/sprite_accessory/horns/sloogbobbers + name = "Sloog Bobbers" + icon = 'modular_splurt/icons/mob/64_mutant_bodyparts.dmi' + icon_state = "sloogbobbers" + dimension_x = 64 + center = TRUE + color_src = MATRIXED + matrixed_sections = MATRIX_RED_GREEN diff --git a/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/legs_and_taurs.dm b/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/legs_and_taurs.dm index d43c091c6a..d2df178b71 100644 --- a/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/legs_and_taurs.dm +++ b/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/legs_and_taurs.dm @@ -51,3 +51,11 @@ taur_mode = STYLE_PAW_TAURIC //it is what it is hide_legs = USE_QUADRUPED_CLIP_MASK matrixed_sections = MATRIX_RED_GREEN + +/datum/sprite_accessory/taur/sloog + name = "Sloog" + icon_state = "sloog" + icon = 'modular_splurt/icons/mob/mam_taur.dmi' + taur_mode = STYLE_PAW_TAURIC + hide_legs = USE_QUADRUPED_CLIP_MASK + matrixed_sections = MATRIX_RED_GREEN diff --git a/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/snouts.dm b/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/snouts.dm index 927240b7ea..6b87b38f09 100644 --- a/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/snouts.dm +++ b/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/snouts.dm @@ -226,3 +226,14 @@ icon_state = "deoxys" icon = 'modular_splurt/icons/mob/mam_snouts.dmi' matrixed_sections = MATRIX_ALL + +/datum/sprite_accessory/snouts/mam_snouts/sloog + name = "Sloog" + icon_state = "sloog" + icon = 'modular_splurt/icons/mob/mam_snouts.dmi' + matrixed_sections = MATRIX_RED + +/datum/sprite_accessory/snouts/mam_snouts/sloog/lips + name = "Sloog (lips)" + icon_state = "slooglips" + matrixed_sections = MATRIX_RED_GREEN diff --git a/modular_splurt/code/modules/mob/living/carbon/carbon.dm b/modular_splurt/code/modules/mob/living/carbon/carbon.dm index d2a7d7a875..aae89ee26f 100644 --- a/modular_splurt/code/modules/mob/living/carbon/carbon.dm +++ b/modular_splurt/code/modules/mob/living/carbon/carbon.dm @@ -6,7 +6,7 @@ var/obj/item/restraints/bondage_rope/rope = I cuff_break = rope.prepare_resist(src) if(cuff_break == -1) - to_chat(src, "You are not able to reach the rope.") + to_chat(src, span_danger("You are not able to reach the rope.")) return . = ..() @@ -14,11 +14,48 @@ if(istype(I, /obj/item/restraints/bondage_rope)) var/obj/item/restraints/bondage_rope/rope = I if(LAZYLEN(rope.rope_stack) > 1) - visible_message("[src] manages to loosen up their rope!") - to_chat(src, "You successfully loosen up your rope.") + visible_message(span_danger("[src] manages to loosen up their rope!")) + to_chat(src, span_notice("You successfully loosen up your rope.")) var/obj/item/restraints/bondage_rope/new_rope = new rope.type() new_rope.color = pop(rope.rope_stack) new_rope.forceMove(src.loc) return . = ..() + +// Liquid Panty Dropper effect +/mob/living/carbon/proc/clothing_burst(mob/living/carbon/target_user) + // Variable for if the action succeeded + var/user_disrobed = FALSE + + // Get worn items + var/items = target_user.get_contents() + + // Iterate over worn items + for(var/obj/item/item_worn in items) + // Ignore non-mob (storage) + if(!ismob(item_worn.loc)) + continue + + // Ignore held items + if(target_user.is_holding(item_worn)) + continue + + // Check for anything covering a body part + if(item_worn.body_parts_covered) + // Set the success variable + user_disrobed = TRUE + + // Drop the target item + target_user.dropItemToGround(item_worn, TRUE) + + // Throw item to a random spot + item_worn.throw_at(pick(oview(7,get_turf(src))),10,1) + + // When successfully disrobing a target + if(user_disrobed) + // Display a chat message + target_user.visible_message(span_userlove("[target_user] suddenly bursts out of [target_user.p_their()] clothes!"), span_userlove("You suddenly burst out of your clothes!")) + + // Play the ripped poster sound + playsound(target_user.loc, 'sound/items/poster_ripped.ogg', 50, 1) diff --git a/modular_splurt/code/modules/mob/living/carbon/human/inventory.dm b/modular_splurt/code/modules/mob/living/carbon/human/inventory.dm new file mode 100644 index 0000000000..ffc8a50b73 --- /dev/null +++ b/modular_splurt/code/modules/mob/living/carbon/human/inventory.dm @@ -0,0 +1,92 @@ +/mob/living/carbon/human/proc/smart_equip_suitstorage() // put held thing in suit storage or take the item from it + if(incapacitated()) + return + var/obj/item/thing = get_active_held_item() + var/obj/item/equipped_suitstorage = get_item_by_slot(ITEM_SLOT_SUITSTORE) + if(!equipped_suitstorage) // We also let you equip another storage like this + if(!thing) + to_chat(src, "You haven't anything on your suit!") + return + if(equip_to_slot_if_possible(thing, ITEM_SLOT_SUITSTORE)) + update_inv_hands() + return + if(!SEND_SIGNAL(equipped_suitstorage, COMSIG_CONTAINS_STORAGE)) // not a storage item + if(!thing) + equipped_suitstorage.attack_hand(src) + else + to_chat(src, "You can't fit anything in!") + return + if(thing) // put thing in suit storage + if(!SEND_SIGNAL(equipped_suitstorage, COMSIG_TRY_STORAGE_INSERT, thing, src)) + to_chat(src, "You can't fit anything in!") + return + if(!equipped_suitstorage.contents.len) // nothing to take out + to_chat(src, "There's nothing in your belt to take out!") + return + var/obj/item/stored = equipped_suitstorage.contents[equipped_suitstorage.contents.len] + if(!stored || stored.on_found(src)) + return + stored.attack_hand(src) // take out thing from suit storage + return + +/mob/living/carbon/human/proc/smart_equip_rpocket() // put held thing in right pocket or take the item from it + if(incapacitated()) + return + var/obj/item/thing = get_active_held_item() + var/obj/item/equipped_rpocket = get_item_by_slot(ITEM_SLOT_RPOCKET) + if(!equipped_rpocket) // We also let you equip another storage like this + if(!thing) + to_chat(src, "You haven't anything on your suit!") + return + if(equip_to_slot_if_possible(thing, ITEM_SLOT_RPOCKET)) + update_inv_hands() + return + if(!SEND_SIGNAL(equipped_rpocket, COMSIG_CONTAINS_STORAGE)) // not a storage item + if(!thing) + equipped_rpocket.attack_hand(src) + else + to_chat(src, "You can't fit anything in!") + return + if(thing) // put thing in suit storage + if(!SEND_SIGNAL(equipped_rpocket, COMSIG_TRY_STORAGE_INSERT, thing, src)) + to_chat(src, "You can't fit anything in!") + return + if(!equipped_rpocket.contents.len) // nothing to take out + to_chat(src, "There's nothing in your belt to take out!") + return + var/obj/item/stored = equipped_rpocket.contents[equipped_rpocket.contents.len] + if(!stored || stored.on_found(src)) + return + stored.attack_hand(src) // take out thing from right pocket + return + +/mob/living/carbon/human/proc/smart_equip_lpocket() // put held thing in left pocket or take the item from it + if(incapacitated()) + return + var/obj/item/thing = get_active_held_item() + var/obj/item/equipped_lpocket = get_item_by_slot(ITEM_SLOT_LPOCKET) + if(!equipped_lpocket) // We also let you equip another storage like this + if(!thing) + to_chat(src, "You haven't anything on your suit!") + return + if(equip_to_slot_if_possible(thing, ITEM_SLOT_LPOCKET)) + update_inv_hands() + return + if(!SEND_SIGNAL(equipped_lpocket, COMSIG_CONTAINS_STORAGE)) // not a storage item + if(!thing) + equipped_lpocket.attack_hand(src) + else + to_chat(src, "You can't fit anything in!") + return + if(thing) // put thing in + if(!SEND_SIGNAL(equipped_lpocket, COMSIG_TRY_STORAGE_INSERT, thing, src)) + to_chat(src, "You can't fit anything in!") + return + if(!equipped_lpocket.contents.len) // nothing to take out + to_chat(src, "There's nothing in your belt to take out!") + return + var/obj/item/stored = equipped_lpocket.contents[equipped_lpocket.contents.len] + if(!stored || stored.on_found(src)) + return + stored.attack_hand(src) // take out thing from left pocket + return diff --git a/modular_splurt/code/modules/mob/living/carbon/human/simple_animal/hostile/deathclaw/deathclaw.dm b/modular_splurt/code/modules/mob/living/carbon/human/simple_animal/hostile/deathclaw/deathclaw.dm index a4f1ff53d4..d2afb4f5af 100644 --- a/modular_splurt/code/modules/mob/living/carbon/human/simple_animal/hostile/deathclaw/deathclaw.dm +++ b/modular_splurt/code/modules/mob/living/carbon/human/simple_animal/hostile/deathclaw/deathclaw.dm @@ -53,13 +53,13 @@ if(!Proj) return if(prob(10)) - visible_message("\The [src] growls, enraged!") + visible_message(span_danger("\The [src] growls, enraged!")) sleep(3) Charge() if(prob(85) || Proj.damage > 26) //prob(x) = chance for proj to actually do something, adjust depending on how OP you want deathclaws to be return ..() else - visible_message("\The [Proj] bounces off \the [src]'s thick hide!") + visible_message(span_danger("\The [Proj] bounces off \the [src]'s thick hide!")) return 0 /mob/living/simple_animal/hostile/deathclaw/do_attack_animation(atom/A, visual_effect_icon, obj/item/used_item, no_effect) @@ -90,7 +90,7 @@ if(!T || T == loc) return charging = TRUE - visible_message("[src] charges!") + visible_message(span_danger("[src] charges!")) DestroySurroundings() walk(src, 0) setDir(get_dir(src, T)) @@ -117,7 +117,7 @@ else if(isliving(A)) var/mob/living/L = A - L.visible_message("[src] slams into [L]!", "[src] slams into you!") + L.visible_message(span_danger("[src] slams into [L]!"), span_userdanger("[src] slams into you!")) L.apply_damage(melee_damage_lower/2, BRUTE) playsound(get_turf(L), 'sound/effects/meteorimpact.ogg', 100, 1) shake_camera(L, 4, 3) diff --git a/modular_splurt/code/modules/mob/living/carbon/human/simple_animal/hostile/deathclaw/funclaw.dm b/modular_splurt/code/modules/mob/living/carbon/human/simple_animal/hostile/deathclaw/funclaw.dm index 2ec84e7cd7..7c1738ae95 100644 --- a/modular_splurt/code/modules/mob/living/carbon/human/simple_animal/hostile/deathclaw/funclaw.dm +++ b/modular_splurt/code/modules/mob/living/carbon/human/simple_animal/hostile/deathclaw/funclaw.dm @@ -46,8 +46,8 @@ start_pulling(M, supress_message = TRUE) log_combat(src, M, "grabbed") - M.visible_message("[src] violently grabs [M]!", \ - "[src] violently grabs you!") + M.visible_message(span_warning("[src] violently grabs [M]!"), \ + span_userdanger("[src] violently grabs you!")) setGrabState(GRAB_NECK) //Instant neck grab return @@ -191,15 +191,15 @@ /mob/living/simple_animal/hostile/deathclaw/funclaw/proc/slap(mob/living/M) playsound(loc, "modular_sand/sound/interactions/slap.ogg", 30, 1, -1) - visible_message("\The [src] slaps \the [M] right on the ass!", \ - "\The [src] slaps \the [M] right on the ass!", null, COMBAT_MESSAGE_RANGE) + visible_message(span_danger("\The [src] slaps \the [M] right on the ass!"), \ + span_userdanger("\The [src] slaps \the [M] right on the ass!"), null, COMBAT_MESSAGE_RANGE) /mob/living/simple_animal/hostile/deathclaw/funclaw/proc/tearSlot(mob/living/M, slot) var/obj/item/W = M.get_item_by_slot(slot) if(W) M.dropItemToGround(W) playsound(loc, "sound/items/poster_ripped.ogg", 30, 1, -1) - visible_message("\The [src] tears off \the [M]'s clothes!", \ - "\The [src] tears off \the [M]'s clothes!", null, COMBAT_MESSAGE_RANGE) + visible_message(span_danger("\The [src] tears off \the [M]'s clothes!"), \ + span_userdanger("\The [src] tears off \the [M]'s clothes!"), null, COMBAT_MESSAGE_RANGE) return TRUE return FALSE diff --git a/modular_splurt/code/modules/mob/living/carbon/human/species.dm b/modular_splurt/code/modules/mob/living/carbon/human/species.dm index 3ffad4c2b4..5fec507149 100644 --- a/modular_splurt/code/modules/mob/living/carbon/human/species.dm +++ b/modular_splurt/code/modules/mob/living/carbon/human/species.dm @@ -1,7 +1,7 @@ /datum/species/althelp(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style) if(user == target && istype(user)) if(HAS_TRAIT(user, TRAIT_FLOORED)) - to_chat(user, "You can't seem to force yourself up right now!") + to_chat(user, span_warning("You can't seem to force yourself up right now!")) return . = ..() diff --git a/modular_splurt/code/modules/mob/living/carbon/human/species_types/arachnid.dm b/modular_splurt/code/modules/mob/living/carbon/human/species_types/arachnid.dm index 3cc48b3236..e3553f13c8 100644 --- a/modular_splurt/code/modules/mob/living/carbon/human/species_types/arachnid.dm +++ b/modular_splurt/code/modules/mob/living/carbon/human/species_types/arachnid.dm @@ -13,23 +13,23 @@ if(H.stat == "DEAD") return if(web_ready == FALSE) - to_chat(H, "You need to wait a while to regenerate web fluid.") + to_chat(H, span_warning("You need to wait a while to regenerate web fluid.")) return var/turf/T = get_turf(H) if(!T) - to_chat(H, "There's no room to spin your web here!") + to_chat(H, span_warning("There's no room to spin your web here!")) return var/obj/structure/spider/stickyweb/W = locate() in T var/obj/structure/arachnid/W2 = locate() in T if(W || W2) - to_chat(H, "There's already a web here!") + to_chat(H, span_warning("There's already a web here!")) return // Should have some minimum amount of food before trying to activate var/nutrition_threshold = NUTRITION_LEVEL_FED if (H.nutrition >= nutrition_threshold) to_chat(H, "You begin spinning some web...") if(!do_after(H, 10 SECONDS, 1, T)) - to_chat(H, "Your web spinning was interrupted!") + to_chat(H, span_warning("Your web spinning was interrupted!")) return H.adjust_nutrition(-spinner_rate) addtimer(VARSET_CALLBACK(src, web_ready, TRUE), web_cooldown) @@ -37,7 +37,7 @@ new /obj/structure/arachnid(T, owner) else - to_chat(H, "You're too hungry to spin web right now, eat something first!") + to_chat(H, span_warning("You're too hungry to spin web right now, eat something first!")) return /datum/action/innate/spin_cocoon/Activate() @@ -45,17 +45,17 @@ if(H.stat == "DEAD") return if(web_ready == FALSE) - to_chat(H, "You need to wait awhile to regenerate web fluid.") + to_chat(H, span_warning("You need to wait awhile to regenerate web fluid.")) return var/nutrition_threshold = NUTRITION_LEVEL_FED if (H.nutrition >= nutrition_threshold) - to_chat(H, "You pull out a strand from your spinneret, ready to wrap a target. (Press ALT+CLICK on the target to start wrapping.)") + to_chat(H, span_warning("You pull out a strand from your spinneret, ready to wrap a target. (Press ALT+CLICK on the target to start wrapping.)")) H.adjust_nutrition(spinner_rate * -0.5) addtimer(VARSET_CALLBACK(src, web_ready, TRUE), web_cooldown) RegisterSignal(H, list(COMSIG_MOB_ALTCLICKON), .proc/cocoonAtom) return else - to_chat(H, "You're too hungry to spin web right now, eat something first!") + to_chat(H, span_warning("You're too hungry to spin web right now, eat something first!")) return /datum/action/innate/spin_cocoon/cocoonAtom(mob/living/carbon/human/H, atom/movable/A) @@ -64,39 +64,39 @@ return COMSIG_MOB_CANCEL_CLICKON else if(web_ready == FALSE) - to_chat(H, "You need to wait awhile to regenerate web fluid.") + to_chat(H, span_warning("You need to wait awhile to regenerate web fluid.")) return if(!H.Adjacent(A)) //No. return if(!isliving(A) && A.anchored) - to_chat(H, "[A] is bolted to the floor!") + to_chat(H, span_warning("[A] is bolted to the floor!")) return if(istype(A, /obj/structure/arachnid)) - to_chat(H, "No double wrapping.") + to_chat(H, span_warning("No double wrapping.")) return if(istype(A, /obj/effect)) - to_chat(H, "You cannot wrap this.") + to_chat(H, span_warning("You cannot wrap this.")) return if(isliving(A)) var/mob/living/L = A if(L.key) - to_chat(H, "You prepare to wrap [L] in a cocoon...") + to_chat(H, span_warning("You prepare to wrap [L] in a cocoon...")) var/response = alert(L, "Do you wish to be wrapped in a cocoon?", "Cocooning", "No", "Yes") if(response == "No") - to_chat(H, "[L] resists your attempts to wrap [L.p_them()]!") + to_chat(H, span_warning("[L] resists your attempts to wrap [L.p_them()]!")) return - H.visible_message("[H] starts to wrap [A] into a cocoon!","You start to wrap [A] into a cocoon.") + H.visible_message(span_danger("[H] starts to wrap [A] into a cocoon!"),span_warning("You start to wrap [A] into a cocoon.")) if(!do_after(H, 10 SECONDS, 1, A)) - to_chat(H, "Your web spinning was interrupted!") + to_chat(H, span_warning("Your web spinning was interrupted!")) return H.adjust_nutrition(spinner_rate * -3) var/obj/structure/arachnid/cocoon/C = new(A.loc) if(isliving(A)) C.icon_state = pick("cocoon_large1","cocoon_large2","cocoon_large3") A.forceMove(C) - H.visible_message("[H] wraps [A] into a large cocoon!") + H.visible_message(span_danger("[H] wraps [A] into a large cocoon!")) return else A.forceMove(C) - H.visible_message("[H] wraps [A] into a cocoon!") + H.visible_message(span_danger("[H] wraps [A] into a cocoon!")) return diff --git a/modular_splurt/code/modules/mob/living/carbon/human/species_types/zombies2.dm b/modular_splurt/code/modules/mob/living/carbon/human/species_types/zombies2.dm index 9d1f04d453..53e887e98c 100644 --- a/modular_splurt/code/modules/mob/living/carbon/human/species_types/zombies2.dm +++ b/modular_splurt/code/modules/mob/living/carbon/human/species_types/zombies2.dm @@ -177,10 +177,10 @@ desc = "A rotting mass of twisted viscera." organ_flags = ORGAN_EXTERNAL - low_threshold_passed = "Something forgotten weakens within your chest." - high_threshold_passed = "A chill of death stalks you." - now_fixed = "It comforts you once more." - high_threshold_cleared = "The ghastly cold crawls back." + low_threshold_passed = span_info("Something forgotten weakens within your chest.") + high_threshold_passed = span_warning("A chill of death stalks you.") + now_fixed = span_cult("It comforts you once more.") + high_threshold_cleared = span_info("The ghastly cold crawls back.") beating = FALSE var/reviving = FALSE @@ -224,7 +224,7 @@ if(owner.health >= HEALTH_THRESHOLD_FULLCRIT) owner.revive() if(owner.stat == !DEAD) // incase any weird shit where they can't revive - owner.visible_message("[owner] suddenly convulses back to life!") + owner.visible_message(span_danger("[owner] suddenly convulses back to life!")) owner.update_stat() owner.update_health_hud() if(owner.blood_volume <= BLOOD_VOLUME_SURVIVE) @@ -232,7 +232,7 @@ return if(owner?.health <= HEALTH_THRESHOLD_DEAD && owner?.blood_volume >= BLOOD_VOLUME_SURVIVE) reviving = TRUE - to_chat(owner, "Your broken shell is stitching itself back together...") + to_chat(owner, span_alertwarning("Your broken shell is stitching itself back together...")) /obj/item/organ/undead_infection name = "festering ooze" @@ -289,7 +289,7 @@ if (causes_damage && !iszombie(owner) && owner.stat != DEAD) owner.adjustToxLoss(1) if (prob(10)) - to_chat(owner, "You feel sick...") + to_chat(owner, span_danger("You feel sick...")) if(timer_id) return if(owner.suiciding) @@ -335,12 +335,12 @@ return owner.grab_ghost() - owner.visible_message("[owner] suddenly convulses, as [owner.p_they()][stand_up ? " stagger to [owner.p_their()] feet and" : ""] gain a ravenous hunger in [owner.p_their()] eyes!", "* But it refused") + owner.visible_message(span_danger("[owner] suddenly convulses, as [owner.p_they()][stand_up ? " stagger to [owner.p_their()] feet and" : ""] gain a ravenous hunger in [owner.p_their()] eyes!"), span_cultlarge("* But it refused")) playsound(owner.loc, 'sound/hallucinations/far_noise.ogg', 50, 1) owner.do_jitter_animation(living_transformation_time) owner.Stun(living_transformation_time) -// to_chat(owner, "You are now a zombie! You claw and bite, turning your fellow crewmembers into friends that help spread the plague.") -// to_chat(owner, "You are a zombie. Please act like one. Letting the crew remove the tumor inside your brain is a dick move to whoever infected you. Please do not do it.") +// to_chat(owner, span_alertalien("You are now a zombie! You claw and bite, turning your fellow crewmembers into friends that help spread the plague.")) +// to_chat(owner, span_alertwarning("You are a zombie. Please act like one. Letting the crew remove the tumor inside your brain is a dick move to whoever infected you. Please do not do it.")) /obj/item/organ/undead_infection/mammal old_species = /datum/species/mammal @@ -381,7 +381,7 @@ infection = new() infection.Insert(H) - to_chat(H, "mors tua, vita mea.") + to_chat(H, span_cult("mors tua, vita mea.")) H.playsound_local(H, 'sound/effects/singlebeat.ogg', 100, 0) return diff --git a/modular_splurt/code/modules/mob/living/living.dm b/modular_splurt/code/modules/mob/living/living.dm index be2bb9949e..c2b04a0d84 100644 --- a/modular_splurt/code/modules/mob/living/living.dm +++ b/modular_splurt/code/modules/mob/living/living.dm @@ -6,7 +6,7 @@ // There's probably better way to do this but I am terrible at it --Nopeman /mob/living/proc/change_gender() if(stat != CONSCIOUS) - to_chat(usr, "You cannot toggle your gender while unconcious!") + to_chat(usr, span_warning("You cannot toggle your gender while unconcious!")) return var/choice = tgui_alert(usr, "Select Gender.", "Gender", list("Both", "Male", "Female", "None", "Toggle Breasts")) @@ -40,7 +40,7 @@ SetStun(0, ignore_canstun = TRUE) if(client && admin) - to_chat(src, "An admin has [!admin_frozen ? "un" : ""]frozen you.") + to_chat(src, span_userdanger("An admin has [!admin_frozen ? "un" : ""]frozen you.")) log_admin("[key_name(admin)] toggled admin-freeze on [key_name(src)].") message_admins("[key_name_admin(admin)] toggled admin-freeze on [key_name_admin(src)].") @@ -54,7 +54,7 @@ SetSleeping(0, ignore_canstun = TRUE) if(client && admin) - to_chat(src, "An admin has [!admin_sleeping ? "un": ""]slept you.") + to_chat(src, span_userdanger("An admin has [!admin_sleeping ? "un": ""]slept you.")) log_admin("[key_name(admin)] toggled admin-sleep on [key_name(src)].") message_admins("[key_name_admin(admin)] toggled admin-sleep on [key_name_admin(src)].") diff --git a/modular_splurt/code/modules/mob/living/silicon/robot/dogborg_equipment.dm b/modular_splurt/code/modules/mob/living/silicon/robot/dogborg_equipment.dm index 1e361c362a..ca571dbae6 100644 --- a/modular_splurt/code/modules/mob/living/silicon/robot/dogborg_equipment.dm +++ b/modular_splurt/code/modules/mob/living/silicon/robot/dogborg_equipment.dm @@ -43,7 +43,7 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm ! force = 12 attack_verb = list("chomped", "bit", "ripped", "mauled", "enforced") status = 1 - to_chat(user, "Your jaws are now [status ? "Combat" : "Pup'd"].") + to_chat(user, span_notice("Your jaws are now [status ? "Combat" : "Pup'd"].")) else name = "puppy jaws" icon_state = "smalljaws" @@ -52,7 +52,7 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm ! attack_verb = list("nibbled", "bit", "gnawed", "chomped", "nommed") status = 0 if(R.emagged) - to_chat(user, "Your jaws are now [status ? "Combat" : "Pup'd"].") + to_chat(user, span_notice("Your jaws are now [status ? "Combat" : "Pup'd"].")) update_icon() //Boop @@ -69,7 +69,7 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm ! w_class = 1 /obj/item/analyzer/nose/attack_self(mob/user) - user.visible_message("[user] sniffs around the air.", "You sniff the air for gas traces.") + user.visible_message("[user] sniffs around the air.", span_warning("You sniff the air for gas traces.")) var/turf/location = user.loc if(!istype(location)) @@ -80,11 +80,11 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm ! var/pressure = environment.return_pressure() var/total_moles = environment.total_moles() - to_chat(user, "Results:") + to_chat(user, span_info("Results:")) if(abs(pressure - ONE_ATMOSPHERE) < 10) - to_chat(user, "Pressure: [round(pressure,0.1)] kPa") + to_chat(user, span_info("Pressure: [round(pressure,0.1)] kPa")) else - to_chat(user, "Pressure: [round(pressure,0.1)] kPa") + to_chat(user, span_alert("Pressure: [round(pressure,0.1)] kPa")) if(total_moles) var/list/env_gases = environment.get_gases() @@ -95,39 +95,39 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm ! GAS_GARBAGE_COLLECT(environment.get_gases()) if(abs(n2_concentration - N2STANDARD) < 20) - to_chat(user, "Nitrogen: [round(n2_concentration*100, 0.01)] %") + to_chat(user, span_info("Nitrogen: [round(n2_concentration*100, 0.01)] %")) else - to_chat(user, "Nitrogen: [round(n2_concentration*100, 0.01)] %") + to_chat(user, span_alert("Nitrogen: [round(n2_concentration*100, 0.01)] %")) if(abs(o2_concentration - O2STANDARD) < 2) - to_chat(user, "Oxygen: [round(o2_concentration*100, 0.01)] %") + to_chat(user, span_info("Oxygen: [round(o2_concentration*100, 0.01)] %")) else - to_chat(user, "Oxygen: [round(o2_concentration*100, 0.01)] %") + to_chat(user, span_alert("Oxygen: [round(o2_concentration*100, 0.01)] %")) if(co2_concentration > 0.01) - to_chat(user, "CO2: [round(co2_concentration*100, 0.01)] %") + to_chat(user, span_alert("CO2: [round(co2_concentration*100, 0.01)] %")) else - to_chat(user, "CO2: [round(co2_concentration*100, 0.01)] %") + to_chat(user, span_info("CO2: [round(co2_concentration*100, 0.01)] %")) if(plasma_concentration > 0.005) - to_chat(user, "Plasma: [round(plasma_concentration*100, 0.01)] %") + to_chat(user, span_alert("Plasma: [round(plasma_concentration*100, 0.01)] %")) else - to_chat(user, "Plasma: [round(plasma_concentration*100, 0.01)] %") + to_chat(user, span_info("Plasma: [round(plasma_concentration*100, 0.01)] %")) for(var/id in env_gases) if(id in GLOB.hardcoded_gases) continue var/gas_concentration = env_gases[id]/total_moles - to_chat(user, "[GLOB.gas_data.names[id]]: [round(gas_concentration*100, 0.01)] %") - to_chat(user, "Temperature: [round(environment.return_temperature()-T0C)] °C") + to_chat(user, span_alert("[GLOB.gas_data.names[id]]: [round(gas_concentration*100, 0.01)] %")) + to_chat(user, span_info("Temperature: [round(environment.return_temperature()-T0C)] °C")) /obj/item/analyzer/nose/afterattack(atom/target, mob/user, proximity) . = ..() if(!proximity) return do_attack_animation(target, null, src) - user.visible_message("[user] [pick(attack_verb)] \the [target.name] with their nose!") + user.visible_message(span_notice("[user] [pick(attack_verb)] \the [target.name] with their nose!")) //Delivery /obj/item/storage/bag/borgdelivery @@ -170,7 +170,7 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm ! name = "energized tongue" desc = "Your tongue is energized for dangerously maximum efficency." icon_state = "syndietongue" - to_chat(user, "Your tongue is now [status ? "Energized" : "Normal"].") + to_chat(user, span_notice("Your tongue is now [status ? "Energized" : "Normal"].")) cleanspeed = 10 //(nerf'd)tator soap stat else status = 0 @@ -179,7 +179,7 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm ! icon_state = "synthtongue" cleanspeed = initial(cleanspeed) if(R.emagged) - to_chat(user, "Your tongue is now [status ? "Energized" : "Normal"].") + to_chat(user, span_notice("Your tongue is now [status ? "Energized" : "Normal"].")) update_icon() /obj/item/soap/tongue/afterattack(atom/target, mob/user, proximity) @@ -187,54 +187,54 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm ! if(!proximity || !check_allowed_items(target)) return if(R.client && (target in R.client.screen)) - to_chat(R, "You need to take that [target.name] off before cleaning it!") + to_chat(R, span_warning("You need to take that [target.name] off before cleaning it!")) else if(is_cleanable(target)) - R.visible_message("[R] begins to lick off \the [target.name].", "You begin to lick off \the [target.name]...") + R.visible_message("[R] begins to lick off \the [target.name].", span_warning("You begin to lick off \the [target.name]...")) if(do_after(R, src.cleanspeed, target = target)) if(!in_range(src, target)) //Proximity is probably old news by now, do a new check. return //If they moved away, you can't eat them. - to_chat(R, "You finish licking off \the [target.name].") + to_chat(R, span_notice("You finish licking off \the [target.name].")) qdel(target) R.cell.give(50) else if(isobj(target)) //hoo boy. danger zone man if(istype(target,/obj/item/trash)) - R.visible_message("[R] nibbles away at \the [target.name].", "You begin to nibble away at \the [target.name]...") + R.visible_message("[R] nibbles away at \the [target.name].", span_warning("You begin to nibble away at \the [target.name]...")) if(!do_after(R, src.cleanspeed, target = target)) return //If they moved away, you can't eat them. - to_chat(R, "You finish off \the [target.name].") + to_chat(R, span_notice("You finish off \the [target.name].")) qdel(target) R.cell.give(250) return if(istype(target,/obj/item/stock_parts/cell)) - R.visible_message("[R] begins cramming \the [target.name] down its throat.", "You begin cramming \the [target.name] down your throat...") + R.visible_message("[R] begins cramming \the [target.name] down its throat.", span_warning("You begin cramming \the [target.name] down your throat...")) if(!do_after(R, 50, target = target)) return //If they moved away, you can't eat them. - to_chat(R, "You finish off \the [target.name].") + to_chat(R, span_notice("You finish off \the [target.name].")) var/obj/item/stock_parts/cell/C = target R.cell.charge = R.cell.charge + (C.charge / 3) //Instant full cell upgrades op idgaf qdel(target) return var/obj/item/I = target //HAHA FUCK IT, NOT LIKE WE ALREADY HAVE A SHITTON OF WAYS TO REMOVE SHIT if(!I.anchored && R.emagged) - R.visible_message("[R] begins chewing up \the [target.name]. Looks like it's trying to loophole around its diet restriction!", "You begin chewing up \the [target.name]...") + R.visible_message("[R] begins chewing up \the [target.name]. Looks like it's trying to loophole around its diet restriction!", span_warning("You begin chewing up \the [target.name]...")) if(!do_after(R, 100, target = I)) //Nerf dat time yo return //If they moved away, you can't eat them. - visible_message("[R] chews up \the [target.name] and cleans off the debris!") - to_chat(R, "You finish off \the [target.name].") + visible_message(span_warning("[R] chews up \the [target.name] and cleans off the debris!")) + to_chat(R, span_notice("You finish off \the [target.name].")) qdel(I) R.cell.give(500) return - R.visible_message("[R] begins to lick \the [target.name] clean...", "You begin to lick \the [target.name] clean...") + R.visible_message("[R] begins to lick \the [target.name] clean...", span_notice("You begin to lick \the [target.name] clean...")) else if(ishuman(target)) var/mob/living/L = target if(status == 0 && check_zone(R.zone_selected) == "head") - R.visible_message("\the [R] affectionally licks \the [L]'s face!", "You affectionally lick \the [L]'s face!") + R.visible_message(span_warning("\the [R] affectionally licks \the [L]'s face!"), span_notice("You affectionally lick \the [L]'s face!")) playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1) if(istype(L) && L.fire_stacks > 0) L.adjust_fire_stacks(-10) return else if(status == 0) - R.visible_message("\the [R] affectionally licks \the [L]!", "You affectionally lick \the [L]!") + R.visible_message(span_warning("\the [R] affectionally licks \the [L]!"), span_notice("You affectionally lick \the [L]!")) playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1) if(istype(L) && L.fire_stacks > 0) L.adjust_fire_stacks(-10) @@ -246,22 +246,22 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm ! L.Stun(4) // normal stunbaton is force 7 gimme a break good sir! L.Knockdown(80) L.apply_effect(EFFECT_STUTTER, 4) - L.visible_message("[R] has shocked [L] with its tongue!", \ - "[R] has shocked you with its tongue!") + L.visible_message(span_danger("[R] has shocked [L] with its tongue!"), \ + span_userdanger("[R] has shocked you with its tongue!")) playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1) R.cell.use(666) log_combat(R, L, "tongue stunned") else if(istype(target, /obj/structure/window)) - R.visible_message("[R] begins to lick \the [target.name] clean...", "You begin to lick \the [target.name] clean...") + R.visible_message("[R] begins to lick \the [target.name] clean...", span_notice("You begin to lick \the [target.name] clean...")) if(do_after(user, src.cleanspeed, target = target)) - to_chat(user, "You clean \the [target.name].") + to_chat(user, span_notice("You clean \the [target.name].")) target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) target.set_opacity(initial(target.opacity)) else - R.visible_message("[R] begins to lick \the [target.name] clean...", "You begin to lick \the [target.name] clean...") + R.visible_message("[R] begins to lick \the [target.name] clean...", span_notice("You begin to lick \the [target.name] clean...")) if(do_after(user, src.cleanspeed, target = target)) - to_chat(user, "You clean \the [target.name].") + to_chat(user, span_notice("You clean \the [target.name].")) var/obj/effect/decal/cleanable/C = locate() in target qdel(C) target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) @@ -323,19 +323,19 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm ! spawn(R.pounce_cooldown_time) R.pounce_cooldown = !R.pounce_cooldown else if(R && R.pounce_cooldown) - to_chat(R, "Your leg actuators are still recharging!") + to_chat(R, span_danger("Your leg actuators are still recharging!")) /mob/living/silicon/robot/proc/leap_at(atom/A) if(leaping || stat || buckled || lying) return if(!has_gravity(src) || !has_gravity(A)) - to_chat(src,"It is unsafe to leap without gravity!") + to_chat(src,span_danger("It is unsafe to leap without gravity!")) //It's also extremely buggy visually, so it's balance+bugfix return if(cell.charge <= 750) - to_chat(src,"Insufficent reserves for jump actuators!") + to_chat(src,span_danger("Insufficent reserves for jump actuators!")) return else @@ -408,12 +408,12 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm ! //start processing the regents in the container - and slowly use em up to create power toggle_process_regents = !toggle_process_regents if (toggle_process_regents) - to_chat(user, "You start churning the sexual fluids from your [inserted_item.name] into energy.") + to_chat(user, span_notice("You start churning the sexual fluids from your [inserted_item.name] into energy.")) borg_self = user START_PROCESSING(SSobj, src) else STOP_PROCESSING(SSobj, src) - to_chat(user, "You stop processing the fluids from the [inserted_item.name].") + to_chat(user, span_notice("You stop processing the fluids from the [inserted_item.name].")) return /obj/item/milking_machine/pleasuremaw/process() diff --git a/modular_splurt/code/modules/mob/living/simple_animal/friendly/mouse.dm b/modular_splurt/code/modules/mob/living/simple_animal/friendly/mouse.dm index 509129a1ad..27129ba0db 100644 --- a/modular_splurt/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/modular_splurt/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -21,7 +21,7 @@ /mob/living/simple_animal/mouse/boommouse/death(gibbed, toast) var/turf/T = get_turf(src) message_admins("A boommouse explosion was triggered at [ADMIN_VERBOSEJMP(T)].") - visible_message("The boommouse violently explodes!") + visible_message(span_danger("The boommouse violently explodes!")) atmos_spawn_air("plasma=15;TEMP=750") explosion(src.loc, 0, 0, 2, 0, 1, 0, 2, 0, 0) qdel(src) @@ -32,7 +32,7 @@ if(istype(I, /obj/item/weldingtool)) var/obj/item/weldingtool/W = I if(W.welding) - user.visible_message("[user] burns the boommouse with [user.p_their()] [W.name]!", "That was stupid of you.") + user.visible_message(span_warning("[user] burns the boommouse with [user.p_their()] [W.name]!"), span_userdanger("That was stupid of you.")) var/message_admins = "[ADMIN_LOOKUPFLW(user)] triggered a boommouse explosion at [ADMIN_VERBOSEJMP(T)]." GLOB.bombers += message_admins message_admins(message_admins) diff --git a/modular_splurt/code/modules/mob/mob.dm b/modular_splurt/code/modules/mob/mob.dm index c9a70933d3..2621165e97 100644 --- a/modular_splurt/code/modules/mob/mob.dm +++ b/modular_splurt/code/modules/mob/mob.dm @@ -40,4 +40,4 @@ . = examinate(A) if (.) return - to_chat(A, "[src] seems to be checking you out.") + to_chat(A, span_notice("[src] seems to be checking you out.")) diff --git a/modular_splurt/code/modules/mob/mob_helpers.dm b/modular_splurt/code/modules/mob/mob_helpers.dm index 111f9c35b7..f486b3a24c 100644 --- a/modular_splurt/code/modules/mob/mob_helpers.dm +++ b/modular_splurt/code/modules/mob/mob_helpers.dm @@ -16,7 +16,7 @@ // Check for Distant (no touch head!) if(HAS_TRAIT(src, TRAIT_DISTANT)) - . += "You sense [t_He] might be disturbed by physical affection.\n" + . += span_warning("You sense [t_He] might be disturbed by physical affection.") // Check for Heatpat Slut (pls touch head!) if(HAS_TRAIT(src, TRAIT_HEADPAT_SLUT)) - . += "You sense [t_He] appreciates receiving physical affection more than normal.\n" + . += span_info("You sense [t_He] appreciates receiving physical affection more than normal.") diff --git a/modular_splurt/code/modules/mob/say_vr.dm b/modular_splurt/code/modules/mob/say_vr.dm index cd49dd200c..56be623e0f 100644 --- a/modular_splurt/code/modules/mob/say_vr.dm +++ b/modular_splurt/code/modules/mob/say_vr.dm @@ -7,7 +7,7 @@ /datum/emote/living/narrate/proc/check_invalid(mob/user, input) if(stop_bad_mime.Find(input, 1, 1)) - to_chat(user, "Invalid emote.") + to_chat(user, span_danger("Invalid emote.")) return TRUE return FALSE @@ -28,7 +28,7 @@ return FALSE user.log_message(message, LOG_EMOTE) - message = "([user]) [message]" + message = span_name("([user])
[message]") for(var/mob/M in GLOB.dead_mob_list) if(!M.client || isnewplayer(M)) @@ -44,7 +44,7 @@ set name = "Narrate (Player)" set desc = "Narrate an action or event! An alternative to emoting, for when your emote shouldn't start with your name!" if(GLOB.say_disabled) - to_chat(usr, "Speech is currently admin-disabled.") + to_chat(usr, span_danger("Speech is currently admin-disabled.")) return message = trim(html_encode(message), MAX_MESSAGE_LEN) emote("narrate", message=message) diff --git a/modular_splurt/code/modules/mob/splurt_emotes.dm b/modular_splurt/code/modules/mob/splurt_emotes.dm index e7984093f1..e6af828c5f 100644 --- a/modular_splurt/code/modules/mob/splurt_emotes.dm +++ b/modular_splurt/code/modules/mob/splurt_emotes.dm @@ -30,7 +30,7 @@ /datum/emote/living/fart/run_emote(mob/living/user, params, type_override, intentional) if(TIMER_COOLDOWN_CHECK(user, COOLDOWN_EMOTE_FART)) - to_chat(user, "You try your hardest, but no shart comes out.") + to_chat(user, span_warning("You try your hardest, but no shart comes out.")) return var/list/fart_emotes = list( //cope goonies "lets out a girly little 'toot' from [user.p_their()] butt.", @@ -911,3 +911,21 @@ key = "facehoof" // For horse enthusiasts key_third_person = "facehoofs" metacarpus_type = "hoof" + +/datum/emote/living/poyo + key = "poyo" + key_third_person = "poyos" + message = "%SAYS, \"Poyo!\"" + emote_type = EMOTE_AUDIBLE + +/datum/emote/living/poyo/run_emote(mob/user, params, type_override, intentional) + var/datum/dna/D = user.has_dna() + var/say_mod = (D ? D.species.say_mod : "says") + message = replacetextEx(message, "%SAYS", say_mod) + . = ..() + if(!.) + return + if(user.nextsoundemote >= world.time) + return + user.nextsoundemote = world.time + 1 SECONDS + playsound(user, 'modular_splurt/sound/voice/barks/poyo.ogg', 50, 1, -1) diff --git a/modular_splurt/code/modules/paperwork/pen.dm b/modular_splurt/code/modules/paperwork/pen.dm index e9e4d7c435..9176c4503c 100644 --- a/modular_splurt/code/modules/paperwork/pen.dm +++ b/modular_splurt/code/modules/paperwork/pen.dm @@ -12,7 +12,7 @@ if(!iscarbon(T)) //not carbon. return if(!T.is_chest_exposed()) - to_chat(user, "You cannot write on someone with their clothes on.") + to_chat(user, span_warning("You cannot write on someone with their clothes on.")) return var/obj/item/G = user:pick_receiving_organ(T, NONE, "Pick a genital to write on", "Cancel to write on the targeted body part") @@ -27,20 +27,20 @@ return if(!(user==T)) - src.visible_message("[user] begins to write on [T]'s [BP:name].") + src.visible_message(span_notice("[user] begins to write on [T]'s [BP:name].")) else - to_chat(user, "You begin to write on your [BP:name].") + to_chat(user, span_notice("You begin to write on your [BP:name].")) if(do_mob(user, T, 4 SECONDS)) if((length(BP:writtentext))+(length(writting)) < 100) //100 character limmit to stop spamming. BP:writtentext += html_encode(writting) //you can add to text, not remove it. else - to_chat(user, "There isnt enough space to write that on [T]'s [BP:name].") + to_chat(user, span_notice("There isnt enough space to write that on [T]'s [BP:name].")) return if(!(user==T)) - to_chat(user, "You write on [T]'s [BP:name].") + to_chat(user, span_notice("You write on [T]'s [BP:name].")) else - to_chat(user, "You write on your [BP:name].") + to_chat(user, span_notice("You write on your [BP:name].")) else . = ..() diff --git a/modular_splurt/code/modules/projectiles/guns/ballistic/automatic.dm b/modular_splurt/code/modules/projectiles/guns/ballistic/automatic.dm index 661f589d78..4ddd1b861e 100644 --- a/modular_splurt/code/modules/projectiles/guns/ballistic/automatic.dm +++ b/modular_splurt/code/modules/projectiles/guns/ballistic/automatic.dm @@ -35,11 +35,11 @@ /obj/item/gun/ballistic/automatic/m2a1/examine(mob/user) . = ..() if(cover_open && magazine) - . += "It seems like you could use an empty hand to remove the magazine." + . += span_notice("It seems like you could use an empty hand to remove the magazine.") /obj/item/gun/ballistic/automatic/m2a1/attack_self(mob/user) cover_open = !cover_open - to_chat(user, "You [cover_open ? "open" : "close"] [src]'s cover.") + to_chat(user, span_notice("You [cover_open ? "open" : "close"] [src]'s cover.")) if(cover_open) playsound(user, 'sound/weapons/sawopen.ogg', 60, 1) else @@ -52,7 +52,7 @@ /obj/item/gun/ballistic/automatic/m2a1/afterattack(atom/target as mob|obj|turf, mob/living/user as mob|obj, flag, params) if(cover_open) - to_chat(user, "[src]'s cover is open! Close it before firing!") + to_chat(user, span_warning("[src]'s cover is open! Close it before firing!")) else . = ..() update_icon() @@ -70,12 +70,12 @@ user.put_in_hands(magazine) magazine = null update_icon() - to_chat(user, "You remove the magazine from [src].") + to_chat(user, span_notice("You remove the magazine from [src].")) playsound(user, 'sound/weapons/magout.ogg', 60, 1) /obj/item/gun/ballistic/automatic/m2a1/attackby(obj/item/A, mob/user, params) if(!cover_open && istype(A, mag_type)) - to_chat(user, "[src]'s cover is closed! You can't insert a new mag.") + to_chat(user, span_warning("[src]'s cover is closed! You can't insert a new mag.")) return ..() @@ -108,7 +108,7 @@ if(auto_eject && magazine && magazine.stored_ammo && !magazine.stored_ammo.len && !chambered) magazine.dropped() user.visible_message( - "[magazine] flies out and clatters on the floor!", + span_warning("[magazine] flies out and clatters on the floor!"), to_chat("[magazine] flies out and clatters on the floor!") ) if(auto_eject_sound) diff --git a/modular_splurt/code/modules/projectiles/guns/ballistic/pistol.dm b/modular_splurt/code/modules/projectiles/guns/ballistic/pistol.dm index 7f1b75d548..dbfdae1d65 100644 --- a/modular_splurt/code/modules/projectiles/guns/ballistic/pistol.dm +++ b/modular_splurt/code/modules/projectiles/guns/ballistic/pistol.dm @@ -21,16 +21,17 @@ flight_y_offset = 14 obj_flags = UNIQUE_RENAME - unique_reskin = list("Default" = "enforcer_black", - "M2611 Enforcer" = "cde", - "M1911 Enforcer" = "m1911", - "VP78 Enforcer" = "vp78", - "USP Enforcer" = "usp-m" - ) + unique_reskin = list( + "Default" = list("icon_state" = "enforcer_black"), + "M2611 Enforcer" = list("icon_state" = "cde"), + "M1911 Enforcer" = list("icon_state" = "m1911"), + "VP78 Enforcer" = list("icon_state" = "vp78"), + "USP Enforcer" = list("icon_state" = "usp-m") + ) /obj/item/gun/ballistic/automatic/pistol/enforcer/update_icon_state() if(current_skin) - icon_state = "[unique_reskin[current_skin]][chambered ? "" : "-e"]" + icon_state = "[unique_reskin[current_skin]["icon_state"]][chambered ? "" : "-e"]" else icon_state = "[initial(icon_state)][chambered ? "" : "-e"]" @@ -77,13 +78,14 @@ mag_type = /obj/item/ammo_box/magazine/m9 can_suppress = FALSE obj_flags = UNIQUE_RENAME - unique_reskin = list("Default" = "ninemil", - "Maria" = "maria" - ) + unique_reskin = list( + "Default" = list("icon_state" = "ninemil"), + "Maria" = list("icon_state" = "maria") + ) /obj/item/gun/ballistic/automatic/pistol/m9mmpistol/update_icon_state() if(current_skin) - icon_state = "[unique_reskin[current_skin]][chambered ? "" : "-e"]" + icon_state = "[unique_reskin[current_skin]["icon_state"]][chambered ? "" : "-e"]" else icon_state = "[initial(icon_state)][chambered ? "" : "-e"]" @@ -117,10 +119,11 @@ automatic_burst_overlay = FALSE obj_flags = UNIQUE_RENAME - unique_reskin = list("Default" = "deagle", - "Desert Eagle Gold" = "deagleg", - "Desert Eagle Camo" = "deaglecamo" - ) + unique_reskin = list( + "Default" = list("icon_state" = "deagle"), + "Desert Eagle Gold" = list("icon_state" = "deagleg"), + "Desert Eagle Camo" = list("icon_state" = "deaglecamo") + ) /obj/item/gun/ballistic/automatic/pistol/deagle2/update_overlays() . = ..() @@ -129,7 +132,7 @@ /obj/item/gun/ballistic/automatic/pistol/deagle2/update_icon_state() if(current_skin) - icon_state = "[unique_reskin[current_skin]][chambered ? "" : "-e"]" + icon_state = "[unique_reskin[current_skin]["icon_state"]][chambered ? "" : "-e"]" else icon_state = "[initial(icon_state)][chambered ? "" : "-e"]" diff --git a/modular_splurt/code/modules/projectiles/guns/ballistic/revolver.dm b/modular_splurt/code/modules/projectiles/guns/ballistic/revolver.dm index 26f5fa16fa..72e43741f7 100644 --- a/modular_splurt/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/modular_splurt/code/modules/projectiles/guns/ballistic/revolver.dm @@ -6,12 +6,12 @@ /obj/item/gun/ballistic/revolver/detective/Initialize() var/list/extra_reskin = list( - "Fitz Special" = "detective_fitz", - "Police Positive Special" = "detective_police", - "Blued Steel" = "detective_blued", - "Stainless Steel" = "detective_stainless", - "Deckard Revolver" = "detective_bladerunner" - ) + "Fitz Special" = list("icon_state" = "detective_fitz"), + "Police Positive Special" = list("icon_state" = "detective_police"), + "Blued Steel" = list("icon_state" = "detective_blued"), + "Stainless Steel" = list("icon_state" = "detective_stainless"), + "Deckard Revolver" = list("icon_state" = "detective_bladerunner") + ) LAZYADD(unique_reskin, extra_reskin) . = ..() @@ -30,10 +30,11 @@ mag_type = /obj/item/ammo_box/magazine/internal/cylinder/rev45l obj_flags = UNIQUE_RENAME - unique_reskin = list("Default" = "45revolver", - "Cowboy" = "357colt", - "Lucky" = "lucky" //Well do ya? - ) + unique_reskin = list( + "Default" = list("icon_state" = "45revolver"), + "Cowboy" = list("icon_state" = "357colt"), + "Lucky" = list("icon_state" = "lucky") //Well do ya? + ) /obj/item/gunpart/revolver22frame name = ".22 revolver frame" diff --git a/modular_splurt/code/modules/projectiles/guns/ballistic/shotgun.dm b/modular_splurt/code/modules/projectiles/guns/ballistic/shotgun.dm index 7a80a74759..480051c15a 100644 --- a/modular_splurt/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/modular_splurt/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -24,13 +24,14 @@ slot_flags = ITEM_SLOT_BELT mag_type = /obj/item/ammo_box/magazine/internal/shot/dual obj_flags = UNIQUE_RENAME - unique_reskin = list("Default" = "sawnshotgun", - "Dark Red Finish" = "sawnshotgun-d", - "Ash" = "sawnshotgun-f", - "Faded Grey" = "sawnshotgun-g", - "Maple" = "sawnshotgun-l", - "Rosewood" = "sawnshotgun-p" - ) + unique_reskin = list( + "Default" = list("icon_state" = "sawnshotgun"), + "Dark Red Finish" = list("icon_state" = "sawnshotgun-d"), + "Ash" = list("icon_state" = "sawnshotgun-f"), + "Faded Grey" = list("icon_state" = "sawnshotgun-g"), + "Maple" = list("icon_state" = "sawnshotgun-l"), + "Rosewood" = list("icon_state" = "sawnshotgun-p") + ) // Rifles @@ -103,7 +104,7 @@ if(recentpump > world.time) return if(IS_STAMCRIT(user))//CIT CHANGE - makes pumping shotguns impossible in stamina softcrit - to_chat(user, "You're too exhausted for that.")//CIT CHANGE - ditto + to_chat(user, span_warning("You're too exhausted for that."))//CIT CHANGE - ditto return//CIT CHANGE - ditto pump(user, TRUE) if(HAS_TRAIT(user, TRAIT_FAST_PUMP)) diff --git a/modular_splurt/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/modular_splurt/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index 024b95a7d1..0b7fc6f662 100644 --- a/modular_splurt/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/modular_splurt/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -11,18 +11,25 @@ glass_desc = "You feel it's not named like that for no reason." value = 6 +// Liquid Panty Dropper drink effect /datum/reagent/consumable/ethanol/panty_dropper/on_mob_life(mob/living/carbon/C) - var/mob/living/carbon/human/M = C - var/anyclothes = FALSE - var/items = M.get_contents() - for(var/obj/item/W in items) - if(W.body_parts_covered && ismob(W.loc)) - anyclothes = TRUE - M.dropItemToGround(W, TRUE) - playsound(M.loc, 'sound/items/poster_ripped.ogg', 50, 1) - if(anyclothes) - M.visible_message("[M] suddenly bursts out of [M.p_their()] clothes!") - return ..() + // Praise the funny BYOND dots + . = ..() + + // Check for client + if(C.client) + // Check target pref for ERP + if(C.client?.prefs.erppref == "No") + // Return without triggering + return + + // Check target pref for aphrodisiacs + if(C.client?.prefs.cit_toggles & NO_APHRO) + // Return without triggering + return + + // Perform drink effect + C.clothing_burst(C) /datum/reagent/consumable/ethanol/lean name = "Lean" @@ -54,7 +61,7 @@ if(!M.undergoing_cardiac_arrest() && M.can_heartattack() && prob(1)) M.set_heartattack(TRUE) if(M.stat == CONSCIOUS) - M.visible_message("[M] clutches at [M.p_their()] chest as if [M.p_their()] heart stopped!") // too much lean :( + M.visible_message(span_userdanger("[M] clutches at [M.p_their()] chest as if [M.p_their()] heart stopped!")) // too much lean :( ..() /datum/reagent/consumable/ethanol/cum_in_a_hot_tub @@ -199,7 +206,6 @@ color = "#1a5fa1" quality = DRINK_NICE taste_description = "blue orange" - glass_icon = 'modular_splurt/icons/obj/drinks.dmi' glass_icon_state = "curacao" glass_name = "glass of curaçao" glass_desc = "It's blue, da ba dee." @@ -222,7 +228,6 @@ color = "#1c0000" quality = DRINK_NICE taste_description = "spiced alcohol" - glass_icon = 'modular_splurt/icons/obj/drinks.dmi' glass_icon_state = "bitters" glass_name = "glass of bitters" glass_desc = "Typically you'd want to mix this with something- but you do you." @@ -234,7 +239,6 @@ color = "#1F0001" quality = DRINK_VERYGOOD taste_description = "haughty arrogance" - glass_icon = 'modular_splurt/icons/obj/drinks.dmi' glass_icon_state = "admiralty" glass_name = "Admiralty" glass_desc = "Hail to the Admiral, for he brings fair tidings, and rum too." @@ -246,7 +250,6 @@ color = "#8c5046" quality = DRINK_GOOD taste_description = "ginger and rum" - glass_icon = 'modular_splurt/icons/obj/drinks.dmi' glass_icon_state = "dark_and_stormy" glass_name = "Dark and Stormy" glass_desc = "Thunder and lightning, very very frightening." @@ -258,7 +261,6 @@ color = "#c4b35c" quality = DRINK_VERYGOOD taste_description = "rum and spices" - glass_icon = 'modular_splurt/icons/obj/drinks.dmi' glass_icon_state = "long_john_silver" glass_name = "Long John Silver" glass_desc = "Named for a famous pirate, who may or may not have been fictional. But hey, why let the truth get in the way of a good yarn?" @@ -270,7 +272,6 @@ color = "#003153" quality = DRINK_VERYGOOD taste_description = "companionship" - glass_icon = 'modular_splurt/icons/obj/drinks.dmi' glass_icon_state = "long_haul" glass_name = "Long Haul" glass_desc = "A perfect companion for a lonely long haul flight." @@ -282,7 +283,6 @@ color = "#b4abd0" quality = DRINK_FANTASTIC taste_description = "salt and spice" - glass_icon = 'modular_splurt/icons/obj/drinks.dmi' glass_icon_state = "salt_and_swell" glass_name = "Salt and Swell" glass_desc = "Ah, I do like to be beside the seaside." @@ -294,7 +294,6 @@ color = "#b4abd0" quality = DRINK_VERYGOOD taste_description = "spicy sour cheesy yoghurt" - glass_icon = 'modular_splurt/icons/obj/drinks.dmi' glass_icon_state = "tich_toch" glass_name = "Tich Toch" glass_desc = "Oh god." @@ -306,7 +305,6 @@ color = "#F4EFE2" quality = DRINK_NICE taste_description = "sour cheesy yoghurt" - glass_icon = 'modular_splurt/icons/obj/drinks.dmi' glass_icon_state = "tiltaellen" glass_name = "glass of tiltällen" glass_desc = "Eww... it's curdled." @@ -318,7 +316,6 @@ color = "#00bfa3" quality = DRINK_VERYGOOD taste_description = "the tropics" - glass_icon = 'modular_splurt/icons/obj/drinks.dmi' glass_icon_state = "tropical_storm" glass_name = "Tropical Storm" glass_desc = "Less destructive than the real thing." @@ -360,4 +357,4 @@ T.Remove() nT.Insert(M) T.moveToNullspace()//To valhalla - to_chat(M, "Your tongue feels... weally fwuffy!!") + to_chat(M, span_big_warning("Your tongue feels... weally fwuffy!!")) diff --git a/modular_splurt/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/modular_splurt/code/modules/reagents/chemistry/reagents/drug_reagents.dm index 2eae220ba9..f483f1ec83 100644 --- a/modular_splurt/code/modules/reagents/chemistry/reagents/drug_reagents.dm +++ b/modular_splurt/code/modules/reagents/chemistry/reagents/drug_reagents.dm @@ -2,7 +2,7 @@ /datum/reagent/drug/aphrodisiacplus/overdose_process(mob/living/M) if(M && M.client?.prefs.arousable && !(M.client?.prefs.cit_toggles & NO_APHRO)) if(!HAS_TRAIT(M, TRAIT_IN_HEAT)) - to_chat(M, "Your need for sex is overpowering!") + to_chat(M, span_userlove("Your need for sex is overpowering!")) M.log_message("Made In Heat by hexacrocin.", LOG_EMOTE) ADD_TRAIT(M, TRAIT_IN_HEAT, APHRO_TRAIT) . = ..() @@ -47,20 +47,20 @@ return var/mob/living/carbon/human/H = M if (prob(10)) - to_chat(H, "You feel like you can cope!") + to_chat(H, span_notice("You feel like you can cope!")) H.adjust_disgust(-10) SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "copium", /datum/mood_event/cope, name) . = 1 /datum/reagent/drug/copium/overdose_start(mob/living/M) - to_chat(M, "What the fuck.") + to_chat(M, span_userdanger("What the fuck.")) SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "[type]_overdose", /datum/mood_event/overdose, name) /datum/reagent/drug/copium/overdose_process(mob/living/M) var/mob/living/carbon/human/H = M if (prob(5)) H.adjust_disgust(20) - to_chat(H, "I can't stand it anymore!") + to_chat(H, span_warning("I can't stand it anymore!")) ..() /datum/reagent/drug/copium/reaction_obj(obj/O, volume) diff --git a/modular_splurt/code/modules/reagents/chemistry/reagents/enlargement.dm b/modular_splurt/code/modules/reagents/chemistry/reagents/enlargement.dm index e0bca79db0..863f93f7a8 100644 --- a/modular_splurt/code/modules/reagents/chemistry/reagents/enlargement.dm +++ b/modular_splurt/code/modules/reagents/chemistry/reagents/enlargement.dm @@ -68,7 +68,7 @@ B.color = SKINTONE2HEX(H.skin_tone) B.size = 1 B.size_cached = B.size - to_chat(M, "You feel your midsection get warmer... bubbling softly as it seems to start distending") + to_chat(M, span_warning("You feel your midsection get warmer... bubbling softly as it seems to start distending")) M.reagents.remove_reagent(type, 5) //If they have, increase size. if(B.size_cached < BELLY_SIZE_MAX) //just in case diff --git a/modular_splurt/code/modules/reagents/chemistry/reagents/other_reagents.dm b/modular_splurt/code/modules/reagents/chemistry/reagents/other_reagents.dm index f8d456ef05..74d6eb5142 100644 --- a/modular_splurt/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/modular_splurt/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -57,7 +57,7 @@ return // Character has a seisure - M.visible_message("[M] starts having a seizure!", "You have a seizure!") + M.visible_message(span_danger("[M] starts having a seizure!"), span_userdanger("You have a seizure!")) M.Unconscious(120) to_chat(M, "[pick("The moon is close. It will be a long hunt tonight.", "Ludwig, why have you forsaken me?", \ "The night is near its end...", "Fear the blood...")]") diff --git a/modular_splurt/code/modules/reagents/reagent_containers/bottle.dm b/modular_splurt/code/modules/reagents/reagent_containers/bottle.dm index 957cdb52e0..0aab11e5ec 100644 --- a/modular_splurt/code/modules/reagents/reagent_containers/bottle.dm +++ b/modular_splurt/code/modules/reagents/reagent_containers/bottle.dm @@ -3,3 +3,11 @@ desc = "A small bottle of Mute Toxin. It stops the user from speaking." icon_state = "bottle20" list_reagents = list(/datum/reagent/toxin/mutetoxin = 30) + +/obj/item/reagent_containers/glass/bottle/plushmium + name = "\improper Plushmium Bottle" + desc = "A small bottle of Plushmium. Seems almost fluffy, if not for it being a liquid." + icon_state = "bottle20" + list_reagents = list(/datum/reagent/fermi/plushmium = 5) + possible_transfer_amounts = list(5) + volume = 5 diff --git a/modular_splurt/code/modules/reagents/reagent_containers/spray.dm b/modular_splurt/code/modules/reagents/reagent_containers/spray.dm index df8895c430..01d0dbf5fc 100644 --- a/modular_splurt/code/modules/reagents/reagent_containers/spray.dm +++ b/modular_splurt/code/modules/reagents/reagent_containers/spray.dm @@ -1,2 +1,25 @@ /obj/item/reagent_containers/spray/chemsprayer/sleeper list_reagents = list(/datum/reagent/toxin/sodium_thiopental = 100, /datum/reagent/consumable/condensedcapsaicin = 100, /datum/reagent/toxin/chloralhydrate = 100) + +/obj/item/reagent_containers/spray/plushmium + name = "\improper Love to Life spray bottle" + desc = "A toy spray bottle marked with the Donk Co. Stuffing For Spessmen branding. Must be applied directly to a plush, and only contains enough for one." + icon_state = "cleaner_drying" + // Single use item! + volume = 5 + spray_range = 1 + can_fill_from_container = FALSE + amount_per_transfer_from_this = 5 + possible_transfer_amounts = list(5) + list_reagents = list(/datum/reagent/fermi/plushmium = 5) + +// Custom interaction to prevent wasting the item +/obj/item/reagent_containers/spray/plushmium/afterattack(atom/target, mob/user) + // Check for plush toy + if(!istype(target, /obj/item/toy/plush)) + // Alert user and return + to_chat(user, span_warning("You don't want to waste the solution on a non-plushie.")) + return + + // Return normally + . = ..() diff --git a/modular_splurt/code/modules/research/designs/bluespace_designs.dm b/modular_splurt/code/modules/research/designs/bluespace_designs.dm new file mode 100644 index 0000000000..e44e566a18 --- /dev/null +++ b/modular_splurt/code/modules/research/designs/bluespace_designs.dm @@ -0,0 +1,9 @@ +/datum/design/wallet_holding + name = "Wallet of Holding" + desc = "A wallet that opens into a tiny bluespace pocket." + id = "wallet_holding" + build_type = PROTOLATHE + materials = list(/datum/material/gold = 300, /datum/material/diamond = 100, /datum/material/bluespace = 200) + build_path = /obj/item/storage/wallet/bluespace + category = list("Bluespace Designs") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE diff --git a/modular_splurt/code/modules/research/techweb/nodes/bluespace_nodes.dm b/modular_splurt/code/modules/research/techweb/nodes/bluespace_nodes.dm index f623c07465..e31c788453 100644 --- a/modular_splurt/code/modules/research/techweb/nodes/bluespace_nodes.dm +++ b/modular_splurt/code/modules/research/techweb/nodes/bluespace_nodes.dm @@ -6,3 +6,16 @@ prereq_ids = list("adv_power", "adv_bluespace","bluespace_power") design_ids = list("bluespace_cell_reactor") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) + +// Bags of holding node +/datum/techweb_node/bluespace_holding/New() + // Define extra designs + var/list/added_designs = list( + "wallet_holding" + ) + + // Add designs to the list + LAZYADD(design_ids, added_designs) + + // Return + . = ..() diff --git a/modular_splurt/code/modules/ruins/objects_and_mobs/ash_walker_den.dm b/modular_splurt/code/modules/ruins/objects_and_mobs/ash_walker_den.dm index 8db7b84798..4222037096 100644 --- a/modular_splurt/code/modules/ruins/objects_and_mobs/ash_walker_den.dm +++ b/modular_splurt/code/modules/ruins/objects_and_mobs/ash_walker_den.dm @@ -8,7 +8,7 @@ if(meat_counter < ASH_WALKER_SPAWN_THRESHOLD) return new spawned_obj(get_step(loc, pick(GLOB.alldirs)), ashies) - visible_message("One of the eggs swells to an unnatural size and tumbles free. It's ready to hatch!") + visible_message(span_danger("One of the eggs swells to an unnatural size and tumbles free. It's ready to hatch!")) meat_counter -= ASH_WALKER_SPAWN_THRESHOLD /obj/structure/lavaland/ash_walker/western diff --git a/modular_splurt/code/modules/smithing/anvil.dm b/modular_splurt/code/modules/smithing/anvil.dm index 60d323f7b8..497fb9db51 100644 --- a/modular_splurt/code/modules/smithing/anvil.dm +++ b/modular_splurt/code/modules/smithing/anvil.dm @@ -11,4 +11,4 @@ if(isdwarf(user)) return ..() else - to_chat(user, "Ugh! This anvil smells of mushroom beer, and the design is weird. It is inconvenient to use it!") + to_chat(user, span_warning("Ugh! This anvil smells of mushroom beer, and the design is weird. It is inconvenient to use it!")) diff --git a/modular_splurt/code/modules/toys/cards.dm b/modular_splurt/code/modules/toys/cards.dm index 83796639e5..2a0d13b780 100644 --- a/modular_splurt/code/modules/toys/cards.dm +++ b/modular_splurt/code/modules/toys/cards.dm @@ -4,7 +4,7 @@ /obj/item/toy/cards/deck/examine() . = ..() - . += "Alt-click [src] to remove joker cards." + . += span_notice("Alt-click [src] to remove joker cards.") /obj/item/toy/cards/deck/populate_deck() . = ..() @@ -16,9 +16,9 @@ return var/jokermono = cards.Remove("Monochrome Joker") var/jokercolor = cards.Remove("Colorful Joker") - user.visible_message("[user] searches through the deck to remove joker cards.", "You search through the deck to remove joker cards.") + user.visible_message("[user] searches through the deck to remove joker cards.", span_notice("You search through the deck to remove joker cards.")) if(!(jokermono || jokercolor)) - to_chat(user, "There are no joker cards to remove!") + to_chat(user, span_warning("There are no joker cards to remove!")) return if(jokermono && jokercolor) var/obj/item/toy/cards/singlecard/H1 = new/obj/item/toy/cards/singlecard(user.loc) diff --git a/modular_splurt/code/modules/vehicles/mecha/mecha_construction_paths.dm b/modular_splurt/code/modules/vehicles/mecha/mecha_construction_paths.dm index 62fda40862..4892cc940a 100644 --- a/modular_splurt/code/modules/vehicles/mecha/mecha_construction_paths.dm +++ b/modular_splurt/code/modules/vehicles/mecha/mecha_construction_paths.dm @@ -33,100 +33,100 @@ //TODO: better messages. switch(index) if(1) - user.visible_message("[user] connects [parent] hydraulic systems.", "You connect [parent] hydraulic systems.") + user.visible_message(span_notice("[user] connects [parent] hydraulic systems."), span_notice("You connect [parent] hydraulic systems.")) if(2) if(diff==FORWARD) - user.visible_message("[user] activates [parent] hydraulic systems.", "You activate [parent] hydraulic systems.") + user.visible_message(span_notice("[user] activates [parent] hydraulic systems."), span_notice("You activate [parent] hydraulic systems.")) else - user.visible_message("[user] disconnects [parent] hydraulic systems.", "You disconnect [parent] hydraulic systems.") + user.visible_message(span_notice("[user] disconnects [parent] hydraulic systems."), span_notice("You disconnect [parent] hydraulic systems.")) if(3) if(diff==FORWARD) - user.visible_message("[user] adds the wiring to [parent].", "You add the wiring to [parent].") + user.visible_message(span_notice("[user] adds the wiring to [parent]."), span_notice("You add the wiring to [parent].")) else - user.visible_message("[user] deactivates [parent] hydraulic systems.", "You deactivate [parent] hydraulic systems.") + user.visible_message(span_notice("[user] deactivates [parent] hydraulic systems."), span_notice("You deactivate [parent] hydraulic systems.")) if(4) if(diff==FORWARD) - user.visible_message("[user] adjusts the wiring of [parent].", "You adjust the wiring of [parent].") + user.visible_message(span_notice("[user] adjusts the wiring of [parent]."), span_notice("You adjust the wiring of [parent].")) else - user.visible_message("[user] removes the wiring from [parent].", "You remove the wiring from [parent].") + user.visible_message(span_notice("[user] removes the wiring from [parent]."), span_notice("You remove the wiring from [parent].")) if(5) if(diff==FORWARD) - user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].") + user.visible_message(span_notice("[user] installs [I] into [parent]."), span_notice("You install [I] into [parent].")) else - user.visible_message("[user] disconnects the wiring of [parent].", "You disconnect the wiring of [parent].") + user.visible_message(span_notice("[user] disconnects the wiring of [parent]."), span_notice("You disconnect the wiring of [parent].")) if(6) if(diff==FORWARD) - user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") + user.visible_message(span_notice("[user] secures the mainboard."), span_notice("You secure the mainboard.")) else - user.visible_message("[user] removes the central control module from [parent].", "You remove the central computer mainboard from [parent].") + user.visible_message(span_notice("[user] removes the central control module from [parent]."), span_notice("You remove the central computer mainboard from [parent].")) if(7) if(diff==FORWARD) - user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].") + user.visible_message(span_notice("[user] installs [I] into [parent]."), span_notice("You install [I] into [parent].")) else - user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") + user.visible_message(span_notice("[user] unfastens the mainboard."), span_notice("You unfasten the mainboard.")) if(8) if(diff==FORWARD) - user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") + user.visible_message(span_notice("[user] secures the peripherals control module."), span_notice("You secure the peripherals control module.")) else - user.visible_message("[user] removes the peripherals control module from [parent].", "You remove the peripherals control module from [parent].") + user.visible_message(span_notice("[user] removes the peripherals control module from [parent]."), span_notice("You remove the peripherals control module from [parent].")) if(9) if(diff==FORWARD) - user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].") + user.visible_message(span_notice("[user] installs [I] into [parent]."), span_notice("You install [I] into [parent].")) else - user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") + user.visible_message(span_notice("[user] unfastens the peripherals control module."), span_notice("You unfasten the peripherals control module.")) if(10) if(diff==FORWARD) - user.visible_message("[user] secures the scanner module.", "You secure the scanner module.") + user.visible_message(span_notice("[user] secures the scanner module."), span_notice("You secure the scanner module.")) else - user.visible_message("[user] removes the scanner module from [parent].", "You remove the scanner module from [parent].") + user.visible_message(span_notice("[user] removes the scanner module from [parent]."), span_notice("You remove the scanner module from [parent].")) if(11) if(diff==FORWARD) - user.visible_message("[user] installs [I] to [parent].", "You install [I] to [parent].") + user.visible_message(span_notice("[user] installs [I] to [parent]."), span_notice("You install [I] to [parent].")) else - user.visible_message("[user] unfastens the scanner module.", "You unfasten the scanner module.") + user.visible_message(span_notice("[user] unfastens the scanner module."), span_notice("You unfasten the scanner module.")) if(12) if(diff==FORWARD) - user.visible_message("[user] secures the capacitor.", "You secure the capacitor.") + user.visible_message(span_notice("[user] secures the capacitor."), span_notice("You secure the capacitor.")) else - user.visible_message("[user] removes the capacitor from [parent].", "You remove the capacitor from [parent].") + user.visible_message(span_notice("[user] removes the capacitor from [parent]."), span_notice("You remove the capacitor from [parent].")) if(13) if(diff==FORWARD) - user.visible_message("[user] installs [I] into [parent].", "You install [I] into [parent].") + user.visible_message(span_notice("[user] installs [I] into [parent]."), span_notice("You install [I] into [parent].")) else - user.visible_message("[user] unfastens the capacitor.", "You unfasten the capacitor.") + user.visible_message(span_notice("[user] unfastens the capacitor."), span_notice("You unfasten the capacitor.")) if(14) if(diff==FORWARD) - user.visible_message("[user] secures the power cell.", "You secure the power cell.") + user.visible_message(span_notice("[user] secures the power cell."), span_notice("You secure the power cell.")) else - user.visible_message("[user] pries the power cell from [parent].", "You pry the power cell from [parent].") + user.visible_message(span_notice("[user] pries the power cell from [parent]."), span_notice("You pry the power cell from [parent].")) if(15) if(diff==FORWARD) - user.visible_message("[user] installs the internal armor layer to [parent].", "You install the internal armor layer to [parent].") + user.visible_message(span_notice("[user] installs the internal armor layer to [parent]."), span_notice("You install the internal armor layer to [parent].")) else - user.visible_message("[user] unfastens the power cell.", "You unfasten the power cell.") + user.visible_message(span_notice("[user] unfastens the power cell."), span_notice("You unfasten the power cell.")) if(16) if(diff==FORWARD) - user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.") + user.visible_message(span_notice("[user] secures the internal armor layer."), span_notice("You secure the internal armor layer.")) else - user.visible_message("[user] pries internal armor layer from [parent].", "You pry internal armor layer from [parent].") + user.visible_message(span_notice("[user] pries internal armor layer from [parent]."), span_notice("You pry internal armor layer from [parent].")) if(17) if(diff==FORWARD) - user.visible_message("[user] welds the internal armor layer to [parent].", "You weld the internal armor layer to [parent].") + user.visible_message(span_notice("[user] welds the internal armor layer to [parent]."), span_notice("You weld the internal armor layer to [parent].")) else - user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") + user.visible_message(span_notice("[user] unfastens the internal armor layer."), span_notice("You unfasten the internal armor layer.")) if(18) if(diff==FORWARD) - user.visible_message("[user] installs the external armor layer to [parent].", "You install the external reinforced armor layer to [parent].") + user.visible_message(span_notice("[user] installs the external armor layer to [parent]."), span_notice("You install the external reinforced armor layer to [parent].")) else - user.visible_message("[user] cuts the internal armor layer from [parent].", "You cut the internal armor layer from [parent].") + user.visible_message(span_notice("[user] cuts the internal armor layer from [parent]."), span_notice("You cut the internal armor layer from [parent].")) if(19) if(diff==FORWARD) - user.visible_message("[user] secures the external armor layer.", "You secure the external reinforced armor layer.") + user.visible_message(span_notice("[user] secures the external armor layer."), span_notice("You secure the external reinforced armor layer.")) else - user.visible_message("[user] pries the external armor layer from [parent].", "You pry the external armor layer from [parent].") + user.visible_message(span_notice("[user] pries the external armor layer from [parent]."), span_notice("You pry the external armor layer from [parent].")) if(20) if(diff==FORWARD) - user.visible_message("[user] welds the external armor layer to [parent].", "You weld the external armor layer to [parent].") + user.visible_message(span_notice("[user] welds the external armor layer to [parent]."), span_notice("You weld the external armor layer to [parent].")) else - user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.") + user.visible_message(span_notice("[user] unfastens the external armor layer."), span_notice("You unfasten the external armor layer.")) return TRUE diff --git a/modular_splurt/code/modules/vending/kinkmate.dm b/modular_splurt/code/modules/vending/kinkmate.dm index 69c67b15cc..1d2f3c5a94 100644 --- a/modular_splurt/code/modules/vending/kinkmate.dm +++ b/modular_splurt/code/modules/vending/kinkmate.dm @@ -24,6 +24,7 @@ /obj/item/clothing/neck/syntech/collar = 4, /obj/item/storage/fancy/jellybean_pack = 5, /obj/item/storage/box/aphrodisiac_pump = 5, + /obj/item/storage/box/bulk_condoms = 10, /obj/item/strapon_strap = 5, /obj/item/restraints/bondage_rope = 5, /obj/item/clothing/under/domina = 5, @@ -40,7 +41,8 @@ /obj/item/mesmetron = 3, /obj/item/dildo/flared/huge = 3, /obj/item/clothing/neck/petcollar/locked/holo = 2, - /obj/item/storage/box/aphrodisiac_pump/plus = 3 + /obj/item/storage/box/aphrodisiac_pump/plus = 3, + /obj/item/storage/box/implant_disrobe = 3 ) var/list/extra_premium = list( /obj/item/clothing/mask/muzzle/ballgag = 3 diff --git a/modular_splurt/icons/mob/64_mutant_bodyparts.dmi b/modular_splurt/icons/mob/64_mutant_bodyparts.dmi new file mode 100644 index 0000000000..d90167d4ef Binary files /dev/null and b/modular_splurt/icons/mob/64_mutant_bodyparts.dmi differ diff --git a/modular_splurt/icons/mob/actions/misc_actions.dmi b/modular_splurt/icons/mob/actions/misc_actions.dmi index 17b53a319a..dc254301e7 100644 Binary files a/modular_splurt/icons/mob/actions/misc_actions.dmi and b/modular_splurt/icons/mob/actions/misc_actions.dmi differ diff --git a/modular_splurt/icons/mob/clothing/64_back.dmi b/modular_splurt/icons/mob/clothing/64_back.dmi new file mode 100644 index 0000000000..89f7890040 Binary files /dev/null and b/modular_splurt/icons/mob/clothing/64_back.dmi differ diff --git a/modular_splurt/icons/mob/mam_markings.dmi b/modular_splurt/icons/mob/mam_markings.dmi index 0ce5f4c425..d2b389c66e 100644 Binary files a/modular_splurt/icons/mob/mam_markings.dmi and b/modular_splurt/icons/mob/mam_markings.dmi differ diff --git a/modular_splurt/icons/mob/mam_snouts.dmi b/modular_splurt/icons/mob/mam_snouts.dmi index 3b4850f4ca..27bab79b2d 100644 Binary files a/modular_splurt/icons/mob/mam_snouts.dmi and b/modular_splurt/icons/mob/mam_snouts.dmi differ diff --git a/modular_splurt/icons/mob/mam_taur.dmi b/modular_splurt/icons/mob/mam_taur.dmi index ba18519f8d..009148695d 100644 Binary files a/modular_splurt/icons/mob/mam_taur.dmi and b/modular_splurt/icons/mob/mam_taur.dmi differ diff --git a/modular_splurt/icons/obj/drinks.dmi b/modular_splurt/icons/obj/drinks.dmi index 4339e5560a..a1541fddb1 100644 Binary files a/modular_splurt/icons/obj/drinks.dmi and b/modular_splurt/icons/obj/drinks.dmi differ diff --git a/modular_splurt/icons/obj/plushes.dmi b/modular_splurt/icons/obj/plushes.dmi index fce9b88804..a8ce5f21fd 100644 Binary files a/modular_splurt/icons/obj/plushes.dmi and b/modular_splurt/icons/obj/plushes.dmi differ diff --git a/modular_splurt/icons/obj/storage.dmi b/modular_splurt/icons/obj/storage.dmi index 35d61848a9..6ff028b18c 100644 Binary files a/modular_splurt/icons/obj/storage.dmi and b/modular_splurt/icons/obj/storage.dmi differ diff --git a/modular_splurt/icons/obj/structures/statue.dmi b/modular_splurt/icons/obj/structures/statue.dmi index d933259adc..358c6c21ed 100644 Binary files a/modular_splurt/icons/obj/structures/statue.dmi and b/modular_splurt/icons/obj/structures/statue.dmi differ diff --git a/modular_splurt/sound/misc/dog_toy.ogg b/modular_splurt/sound/misc/dog_toy.ogg new file mode 100644 index 0000000000..de295dc148 Binary files /dev/null and b/modular_splurt/sound/misc/dog_toy.ogg differ diff --git a/tgstation.dme b/tgstation.dme index 013e1e0f3c..fc289f2440 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -159,6 +159,7 @@ #include "code\__DEFINES\dcs\signals.dm" #include "code\__DEFINES\dcs\signals\signals_medical.dm" #include "code\__DEFINES\dcs\signals\signals_mod.dm" +#include "code\__DEFINES\dcs\signals\signals_movable.dm" #include "code\__DEFINES\dcs\signals\signals_reagent.dm" #include "code\__DEFINES\dcs\signals\signals_subsystem.dm" #include "code\__DEFINES\dcs\signals\signals_atom\signals_atom_movement.dm" @@ -244,6 +245,7 @@ #include "code\__SANDCODE\DEFINES\runechat_defines.dm" #include "code\__SANDCODE\DEFINES\signals.dm" #include "code\__SANDCODE\DEFINES\sizecode.dm" +#include "code\__SANDCODE\DEFINES\spans.dm" #include "code\__SANDCODE\DEFINES\status_effects.dm" #include "code\__SANDCODE\DEFINES\strippable.dm" #include "code\__SANDCODE\DEFINES\subsystems.dm" @@ -745,6 +747,7 @@ #include "code\datums\elements\forced_gravity.dm" #include "code\datums\elements\ghost_role_eligibility.dm" #include "code\datums\elements\mob_holder.dm" +#include "code\datums\elements\object_reskinning.dm" #include "code\datums\elements\photosynthesis.dm" #include "code\datums\elements\polychromic.dm" #include "code\datums\elements\scavenging.dm" @@ -4084,6 +4087,7 @@ #include "modular_sand\code\modules\arousal\arousal.dm" #include "modular_sand\code\modules\arousal\creampie.dm" #include "modular_sand\code\modules\arousal\genital_sprite_accessories.dm" +#include "modular_sand\code\modules\arousal\genitals.dm" #include "modular_sand\code\modules\arousal\organs\breasts.dm" #include "modular_sand\code\modules\arousal\organs\womb.dm" #include "modular_sand\code\modules\atmospherics\machinery\pipes\bluespace.dm" @@ -4122,6 +4126,7 @@ #include "modular_sand\code\modules\clothing\spacesuits\chronosuit.dm" #include "modular_sand\code\modules\clothing\spacesuits\hardsuit.dm" #include "modular_sand\code\modules\clothing\suits\miscellaneous.dm" +#include "modular_sand\code\modules\clothing\under\_under.dm" #include "modular_sand\code\modules\clothing\under\color.dm" #include "modular_sand\code\modules\clothing\under\costumes.dm" #include "modular_sand\code\modules\clothing\under\misc.dm" @@ -4129,15 +4134,6 @@ #include "modular_sand\code\modules\clothing\under\suits.dm" #include "modular_sand\code\modules\clothing\under\syndicate.dm" #include "modular_sand\code\modules\clothing\under\uniform.dm" -#include "modular_sand\code\modules\clothing\under\jobs\cargo.dm" -#include "modular_sand\code\modules\clothing\under\jobs\civilian.dm" -#include "modular_sand\code\modules\clothing\under\jobs\command.dm" -#include "modular_sand\code\modules\clothing\under\jobs\curator.dm" -#include "modular_sand\code\modules\clothing\under\jobs\engineering.dm" -#include "modular_sand\code\modules\clothing\under\jobs\medical.dm" -#include "modular_sand\code\modules\clothing\under\jobs\research.dm" -#include "modular_sand\code\modules\clothing\under\jobs\security.dm" -#include "modular_sand\code\modules\clothing\under\jobs\theater.dm" #include "modular_sand\code\modules\clothing\underwear\_underwear.dm" #include "modular_sand\code\modules\clothing\underwear\boxers.dm" #include "modular_sand\code\modules\clothing\underwear\shirts.dm" @@ -4362,12 +4358,14 @@ #include "modular_splurt\code\datums\traits\good.dm" #include "modular_splurt\code\datums\traits\negative.dm" #include "modular_splurt\code\datums\traits\neutral.dm" +#include "modular_splurt\code\datums\traits\trait_actions.dm" #include "modular_splurt\code\game\atoms.dm" #include "modular_splurt\code\game\atoms_movable.dm" #include "modular_splurt\code\game\data_huds.dm" #include "modular_splurt\code\game\say.dm" #include "modular_splurt\code\game\area\areas\centcom.dm" #include "modular_splurt\code\game\area\areas\commons.dm" +#include "modular_splurt\code\game\area\areas\holodeck.dm" #include "modular_splurt\code\game\area\areas\layenia.dm" #include "modular_splurt\code\game\area\areas\maintenance.dm" #include "modular_splurt\code\game\area\areas\shuttles.dm" @@ -4410,9 +4408,11 @@ #include "modular_splurt\code\game\objects\items\circuitboards\computer_circuitboards.dm" #include "modular_splurt\code\game\objects\items\circuitboards\machine_circuitboards.dm" #include "modular_splurt\code\game\objects\items\circuitboards\miner_circuitboards.dm" +#include "modular_splurt\code\game\objects\items\devices\PDA\radio.dm" #include "modular_splurt\code\game\objects\items\devices\radio\electropack.dm" #include "modular_splurt\code\game\objects\items\devices\radio\headset.dm" #include "modular_splurt\code\game\objects\items\implants\implant_aphropumps.dm" +#include "modular_splurt\code\game\objects\items\implants\implant_disrobe.dm" #include "modular_splurt\code\game\objects\items\implants\implant_gfluid.dm" #include "modular_splurt\code\game\objects\items\implants\implant_hide_backpack.dm" #include "modular_splurt\code\game\objects\items\implants\implant_slave.dm" @@ -4439,6 +4439,7 @@ #include "modular_splurt\code\game\objects\items\storage\boxes.dm" #include "modular_splurt\code\game\objects\items\storage\firstaid.dm" #include "modular_splurt\code\game\objects\items\storage\secure.dm" +#include "modular_splurt\code\game\objects\items\storage\wallets.dm" #include "modular_splurt\code\game\objects\items\weaponry\armyknife.dm" #include "modular_splurt\code\game\objects\items\weaponry\melee.dm" #include "modular_splurt\code\game\objects\structures\barricades.dm" @@ -4627,6 +4628,7 @@ #include "modular_splurt\code\modules\food_and_drinks\recipes\tablecraft\recipes_burger.dm" #include "modular_splurt\code\modules\food_and_drinks\recipes\tablecraft\recipes_donut.dm" #include "modular_splurt\code\modules\holiday\holidays.dm" +#include "modular_splurt\code\modules\holodeck\holo_effect.dm" #include "modular_splurt\code\modules\hydroponics\grown\towercap.dm" #include "modular_splurt\code\modules\jobs\job_types\_job_alt_titles.dm" #include "modular_splurt\code\modules\jobs\job_types\atmospheric_technician.dm" @@ -4648,6 +4650,7 @@ #include "modular_splurt\code\modules\jobs\job_types\security_officer.dm" #include "modular_splurt\code\modules\jobs\job_types\service.dm" #include "modular_splurt\code\modules\jobs\job_types\station_engineer.dm" +#include "modular_splurt\code\modules\keybindings\keybind\human.dm" #include "modular_splurt\code\modules\keybindings\keybind\movement.dm" #include "modular_splurt\code\modules\language\xenocommon.dm" #include "modular_splurt\code\modules\mapping\mapping_helpers\baseturf.dm" @@ -4687,6 +4690,7 @@ #include "modular_splurt\code\modules\mob\living\carbon\carbon.dm" #include "modular_splurt\code\modules\mob\living\carbon\human\human.dm" #include "modular_splurt\code\modules\mob\living\carbon\human\human_defines.dm" +#include "modular_splurt\code\modules\mob\living\carbon\human\inventory.dm" #include "modular_splurt\code\modules\mob\living\carbon\human\physiology.dm" #include "modular_splurt\code\modules\mob\living\carbon\human\species.dm" #include "modular_splurt\code\modules\mob\living\carbon\human\update_icons.dm" @@ -4756,6 +4760,7 @@ #include "modular_splurt\code\modules\research\designs\AI_module_designs.dm" #include "modular_splurt\code\modules\research\designs\autoylathe_designs.dm" #include "modular_splurt\code\modules\research\designs\biogenerator_designs.dm" +#include "modular_splurt\code\modules\research\designs\bluespace_designs.dm" #include "modular_splurt\code\modules\research\designs\limbgrower_designs.dm" #include "modular_splurt\code\modules\research\designs\mecha_designs.dm" #include "modular_splurt\code\modules\research\designs\mechfabricator_designs.dm" diff --git a/tgui/packages/tgui/interfaces/MobInteraction.tsx b/tgui/packages/tgui/interfaces/MobInteraction.tsx index a1db0d6efd..3aba47c5fc 100644 --- a/tgui/packages/tgui/interfaces/MobInteraction.tsx +++ b/tgui/packages/tgui/interfaces/MobInteraction.tsx @@ -36,6 +36,7 @@ type GenitalData = { possible_choices: string[], can_arouse: boolean, arousal_state: boolean, + always_accessible: boolean, } type GenitalManagerInfo = { @@ -283,12 +284,12 @@ const GenitalTab = (props, context) => { Actions