diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm
index ebf6facf682..210de2cf85e 100644
--- a/code/modules/mob/living/carbon/human/human_movement.dm
+++ b/code/modules/mob/living/carbon/human/human_movement.dm
@@ -36,6 +36,16 @@
if(shock_stage >= 10) tally -= 1.5 //this gets a +3 later, feral critters take reduced penalty
if(reagents.has_reagent("numbenzyme"))
tally += 1.5 //A tad bit of slowdown.
+ if(riding_datum) //Bit of slowdown for taur rides if rider is bigger or fatter than mount.
+ var/datum/riding/R = riding_datum
+ var/mob/living/L = R.ridden
+ for(var/mob/living/M in L.buckled_mobs)
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if(H.size_multiplier > L.size_multiplier)
+ tally += 1
+ if(H.weight > L.weight)
+ tally += 1
//VOREstation end
if(istype(buckled, /obj/structure/bed/chair/wheelchair))
diff --git a/code/modules/vore/appearance/sprite_accessories_taur_vr.dm b/code/modules/vore/appearance/sprite_accessories_taur_vr.dm
index eec5c192b7a..9c7b4fdcd84 100644
--- a/code/modules/vore/appearance/sprite_accessories_taur_vr.dm
+++ b/code/modules/vore/appearance/sprite_accessories_taur_vr.dm
@@ -32,8 +32,8 @@
var/list/values = list(
"[NORTH]" = list(0, 8*scale, ABOVE_MOB_LAYER),
"[SOUTH]" = list(0, 8*scale, BELOW_MOB_LAYER),
- "[EAST]" = list(-10*scale, 8*scale, BELOW_MOB_LAYER),
- "[WEST]" = list(10*scale, 8*scale, BELOW_MOB_LAYER))
+ "[EAST]" = list(-10*scale, 8*scale, ABOVE_MOB_LAYER),
+ "[WEST]" = list(10*scale, 8*scale, ABOVE_MOB_LAYER))
return values
@@ -44,10 +44,6 @@
buckle_movable = TRUE
buckle_lying = FALSE
-/mob/living/carbon/human/New()
- ..()
- riding_datum = new /datum/riding/taur(src)
-
/mob/living/carbon/human/buckle_mob(mob/living/M, forced = FALSE, check_loc = TRUE)
if(forced)
return ..() // Skip our checks
@@ -61,25 +57,44 @@
return FALSE
if(!ishuman(M))
return FALSE
- if(M.size_multiplier > size_multiplier)
- to_chat(M,"This isn't a pony show! They need to be bigger to ride.")
+ if(M in buckled_mobs)
return FALSE
+ if(M.size_multiplier > size_multiplier * 1.2)
+ to_chat(M,"This isn't a pony show! You need to be bigger for them to ride.")
+ return FALSE
+ if(M.loc != src.loc)
+ if(M.Adjacent(src))
+ M.forceMove(get_turf(src))
var/mob/living/carbon/human/H = M
if(isTaurTail(H.tail_style))
- to_chat(H,"Too many legs. TOO MANY LEGS!!")
+ to_chat(src,"Too many legs. TOO MANY LEGS!!")
return FALSE
. = ..()
if(.)
buckled_mobs[M] = "riding"
-/mob/living/carbon/human/MouseDrop_T(mob/living/M, mob/living/user)
- if(can_buckle && istype(M))
- if(user_buckle_mob(M, user, silent = TRUE))
- visible_message("[M] starts riding [name]!")
- return TRUE
+/mob/living/carbon/human/MouseDrop_T(mob/living/M, mob/living/user) //Prevention for forced relocation caused by can_buckle. Base proc has no other use.
+ return
+
+/mob/living/carbon/human/proc/taur_mount(var/mob/living/M in living_mobs(1))
+ set name = "Taur Mount/Dismount"
+ set category = "Abilities"
+ set desc = "Let people ride on you."
+
+ if(LAZYLEN(buckled_mobs))
+ var/datum/riding/R = riding_datum
+ for(var/rider in buckled_mobs)
+ R.force_dismount(rider)
+ return
+ if (stat != CONSCIOUS)
+ return
+ if(!can_buckle || !istype(M) || !M.Adjacent(src) || M.buckled)
+ return
+ if(buckle_mob(M))
+ visible_message("[M] starts riding [name]!")
/mob/living/carbon/human/attack_hand(mob/user as mob)
if(LAZYLEN(buckled_mobs))
diff --git a/code/modules/vore/appearance/update_icons_vr.dm b/code/modules/vore/appearance/update_icons_vr.dm
index 531422bf632..643a6ba1ce9 100644
--- a/code/modules/vore/appearance/update_icons_vr.dm
+++ b/code/modules/vore/appearance/update_icons_vr.dm
@@ -40,6 +40,10 @@ var/global/list/wing_icon_cache = list()
qdel(overlay)
if(isTaurTail(tail_style))
+ var/datum/sprite_accessory/tail/taur/taurtype = tail_style
+ if(taurtype.can_ride && !riding_datum)
+ riding_datum = new /datum/riding/taur(src)
+ verbs |= /mob/living/carbon/human/proc/taur_mount
return image(tail_s, "pixel_x" = -16)
else
return image(tail_s)