diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm
index 9ffb5d96275..cf11871d1af 100644
--- a/code/modules/vore/eating/living_vr.dm
+++ b/code/modules/vore/eating/living_vr.dm
@@ -18,6 +18,7 @@
var/revive_ready = REVIVING_READY // Only used for creatures that have the xenochimera regen ability, so far.
var/metabolism = 0.0015
var/vore_taste = null // What the character tastes like
+ var/vore_smell = null // What the character smells like
var/no_vore = FALSE // If the character/mob can vore.
var/noisy = FALSE // Toggle audible hunger.
var/absorbing_prey = 0 // Determines if the person is using the succubus drain or not. See station_special_abilities_vr.
@@ -38,6 +39,7 @@
/hook/living_new/proc/vore_setup(mob/living/M)
M.verbs += /mob/living/proc/escapeOOC
M.verbs += /mob/living/proc/lick
+ M.verbs += /mob/living/proc/smell
M.verbs += /mob/living/proc/switch_scaling
if(M.no_vore) //If the mob isn't supposed to have a stomach, let's not give it an insidepanel so it can make one for itself, or a stomach.
return TRUE
@@ -231,6 +233,7 @@
P.digest_leave_remains = src.digest_leave_remains
P.allowmobvore = src.allowmobvore
P.vore_taste = src.vore_taste
+ P.vore_smell = src.vore_smell
P.permit_healbelly = src.permit_healbelly
P.can_be_drop_prey = src.can_be_drop_prey
P.can_be_drop_pred = src.can_be_drop_pred
@@ -261,6 +264,7 @@
digest_leave_remains = P.digest_leave_remains
allowmobvore = P.allowmobvore
vore_taste = P.vore_taste
+ vore_smell = P.vore_smell
permit_healbelly = P.permit_healbelly
can_be_drop_prey = P.can_be_drop_prey
can_be_drop_pred = P.can_be_drop_pred
@@ -356,6 +360,43 @@
var/datum/reagent/R = H.touching.reagent_list[1]
taste_message += " You also get the flavor of [R.taste_description] from something on them"
return taste_message
+
+
+
+//This is just the above proc but switched about.
+/mob/living/proc/smell(mob/living/smelled in living_mobs(1))
+ set name = "Smell"
+ set category = "IC"
+ set desc = "Smell someone nearby!"
+ set popup_menu = FALSE
+
+ if(!istype(smelled))
+ return
+ if(!checkClickCooldown() || incapacitated(INCAPACITATION_ALL))
+ return
+
+ setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
+ visible_message("[src] smell [smelled]!","You smells [smelled]. They smell like [smelled.get_smell_message()].","Sniff!")
+
+/mob/living/proc/get_smell_message(allow_generic = 1)
+ if(!vore_smell && !allow_generic)
+ return FALSE
+
+ var/smell_message = ""
+ if(vore_smell && (vore_smell != ""))
+ smell_message += "[vore_smell]"
+ else
+ if(ishuman(src))
+ var/mob/living/carbon/human/H = src
+ smell_message += "a normal [H.custom_species ? H.custom_species : H.species.name]"
+ else
+ smell_message += "a plain old normal [src]"
+
+ return smell_message
+
+
+
+
//
// OOC Escape code for pref-breaking or AFK preds
//
diff --git a/code/modules/vore/eating/vore_vr.dm b/code/modules/vore/eating/vore_vr.dm
index 9aaa4b0cefe..416a125f492 100644
--- a/code/modules/vore/eating/vore_vr.dm
+++ b/code/modules/vore/eating/vore_vr.dm
@@ -51,6 +51,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
var/allowmobvore = TRUE
var/list/belly_prefs = list()
var/vore_taste = "nothing in particular"
+ var/vore_smell = "nothing in particular"
var/permit_healbelly = TRUE
var/can_be_drop_prey = FALSE
var/can_be_drop_pred = FALSE
@@ -123,6 +124,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
digest_leave_remains = json_from_file["digest_leave_remains"]
allowmobvore = json_from_file["allowmobvore"]
vore_taste = json_from_file["vore_taste"]
+ vore_smell = json_from_file["vore_smell"]
permit_healbelly = json_from_file["permit_healbelly"]
can_be_drop_prey = json_from_file["can_be_drop_prey"]
can_be_drop_pred = json_from_file["can_be_drop_pred"]
@@ -166,6 +168,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
"digest_leave_remains" = digest_leave_remains,
"allowmobvore" = allowmobvore,
"vore_taste" = vore_taste,
+ "vore_smell" = vore_smell,
"permit_healbelly" = permit_healbelly,
"can_be_drop_prey" = can_be_drop_prey,
"can_be_drop_pred" = can_be_drop_pred,
diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm
index 78d18a2edf8..709138c47ec 100644
--- a/code/modules/vore/eating/vorepanel_vr.dm
+++ b/code/modules/vore/eating/vorepanel_vr.dm
@@ -351,6 +351,7 @@
dat += jointext(nightmare_list, null) //AAAA
dat += "
Set Your Taste"
+ dat += "
Set Your Smell"
dat += "
Toggle Hunger Noises"
//Under the last HR, save and stuff.
@@ -905,6 +906,17 @@
return FALSE
user.vore_taste = new_flavor
+ if(href_list["setsmell"])
+ var/new_smell = html_encode(input(usr,"What your character smells like (40ch limit). This text will be printed to the pred after 'X smells of...' so just put something like 'strawberries and cream':","Character Smell",user.vore_smell) as text|null)
+ if(!new_smell)
+ return FALSE
+
+ new_smell = readd_quotes(new_smell)
+ if(length(new_smell) > FLAVOR_MAX)
+ alert("Entered perfume/smell text too long. [FLAVOR_MAX] character limit.","Error!")
+ return FALSE
+ user.vore_smell = new_smell
+
if(href_list["toggle_dropnom_pred"])
var/choice = alert(user, "This toggle is for spontaneous, environment related vore as a predator, including drop-noms, teleporters, etc. You are currently [user.can_be_drop_pred ? " able to eat prey that you encounter by environmental actions." : "avoiding eating prey encountered in the environment."]", "", "Be Pred", "Cancel", "Don't be Pred")
switch(choice)