diff --git a/code/datums/riding.dm b/code/datums/riding.dm
index 4f9513397a7..ba96dbc4052 100644
--- a/code/datums/riding.dm
+++ b/code/datums/riding.dm
@@ -2,7 +2,7 @@
/datum/riding
var/next_vehicle_move = 0 // Used for move delays
- var/vehicle_move_delay = 2 // Tick delay between movements, lower = faster, higher = slower
+ var/vehicle_move_delay = 2 // Decisecond delay between movements, lower = faster, higher = slower
var/keytype = null // Can give this a type to require the rider to hold the item type inhand to move the ridden atom.
var/nonhuman_key_exemption = FALSE // If true, nonhumans who can't hold keys don't need them, like borgs and simplemobs.
var/key_name = "the keys" // What the 'keys' for the thing being rided on would be called.
@@ -97,11 +97,13 @@
if(world.time < next_vehicle_move)
return
+
next_vehicle_move = world.time + vehicle_move_delay
+
if(keycheck(user))
if(!Process_Spacemove(direction) || !isturf(ridden.loc))
return
- ridden.Move(get_step(ridden, direction))
+ ridden.Move(get_step(ridden, direction), direction, vehicle_move_delay)
handle_vehicle_layer()
handle_vehicle_offsets()
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index 4da0bc31b95..87a09d538a1 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -65,7 +65,7 @@
return ..()
////////////////////////////////////////
-/atom/movable/Move(atom/newloc, direct = 0)
+/atom/movable/Move(atom/newloc, direct = 0, movetime)
// Didn't pass enough info
if(!loc || !newloc)
return FALSE
@@ -104,6 +104,7 @@
var/dest_z = get_z(newloc)
// Do The Move
+ glide_for(movetime)
loc = newloc
. = TRUE
@@ -145,6 +146,7 @@
// place due to a Crossed, Bumped, etc. call will interrupt
// the second half of the diagonal movement, or the second attempt
// at a first half if step() fails because we hit something.
+ glide_for(movetime)
if (direct & NORTH)
if (direct & EAST)
if (step(src, NORTH) && moving_diagonally)
@@ -197,7 +199,7 @@
// If we moved, call Moved() on ourselves
if(.)
- Moved(oldloc, direct, FALSE)
+ Moved(oldloc, direct, FALSE, movetime)
// Update timers/cooldown stuff
move_speed = world.time - l_move_time
@@ -205,20 +207,26 @@
last_move = direct // The direction you last moved
// set_dir(direct) //Don't think this is necessary
+//Called after a successful Move(). By this point, we've already moved
+/atom/movable/proc/Moved(atom/old_loc, direction, forced = FALSE, movetime)
// Handle any buckled mobs on this movable
if(has_buckled_mobs())
- handle_buckled_mob_movement(oldloc,direct)
-
- //VOREStation Add
- else if(. && riding_datum)
+ handle_buckled_mob_movement(old_loc, direction, movetime)
+ if(riding_datum)
riding_datum.handle_vehicle_layer()
riding_datum.handle_vehicle_offsets()
- //VOREStation Add End
-
-//Called after a successful Move(). By this point, we've already moved
-/atom/movable/proc/Moved(atom/old_loc, direction, forced = FALSE)
return TRUE
+/atom/movable/set_dir(newdir)
+ . = ..(newdir)
+ if(riding_datum)
+ riding_datum.handle_vehicle_offsets()
+
+/atom/movable/relaymove(mob/user, direction)
+ . = ..()
+ if(riding_datum)
+ riding_datum.handle_ride(user, direction)
+
// Make sure you know what you're doing if you call this, this is intended to only be called by byond directly.
// You probably want CanPass()
/atom/movable/Cross(atom/movable/AM)
@@ -252,17 +260,17 @@
A.Bumped(src)
A.last_bumped = world.time
-/atom/movable/proc/forceMove(atom/destination)
+/atom/movable/proc/forceMove(atom/destination, direction, movetime)
. = FALSE
if(destination)
- . = doMove(destination)
+ . = doMove(destination, direction, movetime)
else
CRASH("No valid destination passed into forceMove")
/atom/movable/proc/moveToNullspace()
return doMove(null)
-/atom/movable/proc/doMove(atom/destination)
+/atom/movable/proc/doMove(atom/destination, direction, movetime)
var/atom/oldloc = loc
var/area/old_area = get_area(oldloc)
var/same_loc = oldloc == destination
@@ -271,7 +279,8 @@
var/area/destarea = get_area(destination)
// Do The Move
- last_move = 0
+ glide_for(movetime)
+ last_move = isnull(direction) ? 0 : direction
loc = destination
// Unset this in case it was set in some other proc. We're no longer moving diagonally for sure.
@@ -349,6 +358,15 @@
for(var/item in src) // Notify contents of Z-transition. This can be overridden IF we know the items contents do not care.
var/atom/movable/AM = item
AM.onTransitZ(old_z,new_z)
+
+/atom/movable/proc/glide_for(movetime)
+ if(movetime)
+ glide_size = WORLD_ICON_SIZE/max(DS2TICKS(movetime), 1)
+ spawn(movetime)
+ glide_size = initial(glide_size)
+ else
+ glide_size = initial(glide_size)
+
/////////////////////////////////////////////////////////////////
//called when src is thrown into hit_atom
diff --git a/code/game/atoms_movable_vr.dm b/code/game/atoms_movable_vr.dm
index 0cc6d144be9..d5291220290 100644
--- a/code/game/atoms_movable_vr.dm
+++ b/code/game/atoms_movable_vr.dm
@@ -1,12 +1,2 @@
/atom/movable/proc/Bump_vr(var/atom/A, yes)
return
-
-/atom/movable/set_dir(newdir)
- . = ..(newdir)
- if(riding_datum)
- riding_datum.handle_vehicle_offsets()
-
-/atom/movable/relaymove(mob/user, direction)
- . = ..()
- if(riding_datum)
- riding_datum.handle_ride(user, direction)
diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm
index 7d1319ab85c..c1e6b9adda2 100644
--- a/code/game/objects/buckling.dm
+++ b/code/game/objects/buckling.dm
@@ -176,12 +176,13 @@
add_fingerprint(user)
return M
-/atom/movable/proc/handle_buckled_mob_movement(atom/old_loc, direct)
+/atom/movable/proc/handle_buckled_mob_movement(atom/old_loc, direct, movetime)
for(var/A in buckled_mobs)
var/mob/living/L = A
- L.forceMove(loc, direct)
- L.last_move = last_move
- L.inertia_dir = last_move
+ if(!L.Move(loc, direct, movetime))
+ L.forceMove(loc, direct, movetime)
+ L.last_move = last_move
+ L.inertia_dir = last_move
if(!buckle_dir)
L.set_dir(dir)
diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm
index e856dd280ed..82e6ff76990 100644
--- a/code/game/objects/items/weapons/weaponry.dm
+++ b/code/game/objects/items/weapons/weaponry.dm
@@ -99,7 +99,6 @@
anchored = 0
can_buckle = 1
- buckle_movable = 1
buckle_lying = 0
buckle_dir = SOUTH
diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
index 59ea0014d30..dbd437fe33d 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
@@ -145,13 +145,13 @@
playsound(src, 'sound/effects/roll.ogg', 100, 1)
-/obj/structure/bed/chair/office/handle_buckled_mob_movement(atom/new_loc, direction)
+/obj/structure/bed/chair/office/handle_buckled_mob_movement(atom/new_loc, direction, movetime)
for(var/A in buckled_mobs)
var/mob/living/occupant = A
occupant.buckled = null
- occupant.Move(src.loc)
+ occupant.Move(loc, direction, movetime)
occupant.buckled = src
- if (occupant && (src.loc != occupant.loc))
+ if (occupant && (loc != occupant.loc))
if (propelled)
for (var/mob/O in src.loc)
if (O != occupant)
diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs_vr.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs_vr.dm
index 79b970e1cf0..fa28f71bad0 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/chairs_vr.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/chairs_vr.dm
@@ -120,6 +120,7 @@
desc = "Like a normal chair, but more stationary."
icon_state = "bay_chair_preview"
base_icon = "bay_chair"
+ buckle_movable = 1
/obj/structure/bed/chair/bay/chair/padded/red/New(var/newloc, var/new_material, var/new_padding_material)
..(newloc, new_material, "carpet")
@@ -192,7 +193,6 @@
desc = "It's a chair. Only for the highest ranked asses."
icon_state = "capchair_preview"
base_icon = "capchair"
- buckle_movable = 1
/obj/structure/bed/chair/bay/comfy/captain/update_icon()
..()
@@ -209,6 +209,7 @@
desc = "A comfortable, secure seat. It has a sturdy-looking buckling system for smoother flights."
base_icon = "shuttle_chair"
icon_state = "shuttle_chair_preview"
+ buckle_movable = 0
var/buckling_sound = 'sound/effects/metal_close.ogg'
var/padding = "blue"
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index c74628a4eac..8cd5c237cd5 100644
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -165,9 +165,6 @@ var/const/enterloopsanity = 100
else if(!is_space())
M.inertia_dir = 0
M.make_floating(0)
- if(isliving(M))
- var/mob/living/L = M
- L.handle_footstep(src)
var/objects = 0
if(A && (A.flags & PROXMOVE))
diff --git a/code/modules/ai/interfaces.dm b/code/modules/ai/interfaces.dm
index 2755875df0a..74ad2eb1a44 100644
--- a/code/modules/ai/interfaces.dm
+++ b/code/modules/ai/interfaces.dm
@@ -91,10 +91,12 @@
if(!old_T.Adjacent(newloc))
return MOVEMENT_FAILED
- . = SelfMove(newloc) ? MOVEMENT_SUCCESSFUL : MOVEMENT_FAILED
+ var/delay_will_be = movement_delay()
+
+ . = SelfMove(newloc, get_dir(loc,newloc), delay_will_be) ? MOVEMENT_SUCCESSFUL : MOVEMENT_FAILED
if(. == MOVEMENT_SUCCESSFUL)
set_dir(get_dir(old_T, newloc))
// Apply movement delay.
// Player movement has more factors but its all in the client and fixing that would be its own project.
- setMoveCooldown(movement_delay())
+ setMoveCooldown(delay_will_be)
return
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 00d28f1113c..f7ee2d9520c 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -1644,3 +1644,32 @@
msg += get_display_species()
return msg
+
+/mob/living/carbon/human/pull_damage()
+ if(((health - halloss) <= config.health_threshold_softcrit))
+ for(var/name in organs_by_name)
+ var/obj/item/organ/external/e = organs_by_name[name]
+ if(!e)
+ continue
+ if((e.status & ORGAN_BROKEN && (!e.splinted || (e.splinted && e.splinted in e.contents && prob(30))) || e.status & ORGAN_BLEEDING) && (getBruteLoss() + getFireLoss() >= 100))
+ return 1
+ else
+ return ..()
+
+// Drag damage is handled in a parent
+/mob/living/carbon/human/dragged(var/mob/living/dragger, var/oldloc)
+ if(prob(getBruteLoss() * 200 / maxHealth))
+ var/bloodtrail = 1
+ if(species?.flags & NO_BLOOD)
+ bloodtrail = 0
+ else
+ var/blood_volume = round((vessel.get_reagent_amount("blood")/species.blood_volume)*100)
+ if(blood_volume < BLOOD_VOLUME_SURVIVE)
+ bloodtrail = 0 //Most of it's gone already, just leave it be
+ else
+ vessel.remove_reagent("blood", 1)
+ if(bloodtrail)
+ if(istype(loc, /turf/simulated))
+ var/turf/T = loc
+ T.add_blood(src)
+ . = ..()
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm
index 4644f9853fc..a0892c9fc9b 100644
--- a/code/modules/mob/living/carbon/human/human_movement.dm
+++ b/code/modules/mob/living/carbon/human/human_movement.dm
@@ -224,6 +224,8 @@
// Handle footstep sounds
/mob/living/carbon/human/handle_footstep(var/turf/T)
+ if(!istype(T))
+ return
if(is_incorporeal())
return
if(!config.footstep_volume || !T.footstep_sounds || !T.footstep_sounds.len)
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 41b52d37ea5..8fc975073e7 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -777,116 +777,66 @@ default behaviour is:
to_chat(usr, "OOC Metadata is not supported by this server!")
//VOREStation Edit End - Making it so SSD people have prefs with fallback to original style.
-/mob/living/Move(a, b, flag)
- if (buckled && buckled.loc != a) //not updating position
- if(istype(buckled, /mob)) //If you're buckled to a mob, a la slime things, keep on rolling.
- return buckled.Move(a, b)
- else //Otherwise, no running around for you.
+// Almost all of this handles pulling movables behind us
+/mob/living/Move(atom/newloc, direct, movetime)
+ if(buckled && buckled.loc != newloc) //not updating position
+ if(!buckled.anchored && buckled.buckle_movable)
+ return buckled.Move(newloc, direct)
+ else
return 0
- if (restrained())
+ var/atom/movable/pullee = pulling
+ // Prior to our move it's already too far away
+ if(pullee && get_dist(src, pullee) > 1)
+ stop_pulling()
+ // Shenanigans!
+ if(pullee && !isturf(pullee.loc) && pullee.loc != loc)
+ log_debug("[src]'s pull on [pullee] was broken despite [pullee] being in [pullee.loc]. Pull stopped manually.")
+ stop_pulling()
+ // Can't pull with no hands
+ if(restrained())
stop_pulling()
+ // Will move our mob (probably)
+ . = ..() // Moved() called at this point if successful
- var/t7 = 1
- if (restrained())
- for(var/mob/living/M in range(src, 1))
- if ((M.pulling == src && M.stat == 0 && !( M.restrained() )))
- t7 = null
- if ((t7 && (pulling && ((get_dist(src, pulling) <= 1 || pulling.loc == loc) && (client && client.moving)))))
- var/turf/T = loc
- . = ..()
+ if(pulledby && moving_diagonally != FIRST_DIAG_STEP && get_dist(src, pulledby) > 1) //seperated from our puller and not in the middle of a diagonal move
+ pulledby.stop_pulling()
- if (pulling && pulling.loc)
- if(!( isturf(pulling.loc) ))
- stop_pulling()
- return
+ if(s_active && !(s_active in contents) && get_turf(s_active) != get_turf(src)) //check !( s_active in contents ) first so we hopefully don't have to call get_turf() so much.
+ s_active.close(src)
- /////
- if(pulling && pulling.anchored)
+/mob/living/proc/dragged(var/mob/living/dragger, var/oldloc)
+ var/area/A = get_area(src)
+ if(lying && !buckled && pull_damage() && A.has_gravity && (prob(getBruteLoss() * 200 / maxHealth)))
+ adjustBruteLoss(2)
+ visible_message("\The [src]'s [isSynthetic() ? "state" : "wounds"] worsen terribly from being dragged!")
+
+/mob/living/Moved(var/atom/oldloc, direct, forced, movetime)
+ . = ..()
+ handle_footstep(loc)
+
+ if(pulling) // we were pulling a thing and didn't lose it during our move.
+ if(pulling.anchored || !isturf(pulling.loc))
stop_pulling()
return
- if (!restrained())
- var/diag = get_dir(src, pulling)
- if ((diag - 1) & diag)
- else
- diag = null
- if ((get_dist(src, pulling) > 1 || diag))
- if (isliving(pulling))
- var/mob/living/M = pulling
- var/atom/movable/t = M.pulling
- M.stop_pulling()
+ var/pull_dir = get_dir(src, pulling)
+ if(get_dist(src, pulling) > 1 || (moving_diagonally != SECOND_DIAG_STEP && ((pull_dir - 1) & pull_dir))) // puller and pullee more than one tile away or in diagonal position
+ // If it is too far away or across z-levels from old location, stop pulling.
+ if(get_dist(pulling.loc, oldloc) > 1 || pulling.loc.z != oldloc?.z)
+ stop_pulling()
+ return
- if(!istype(M.loc, /turf/space))
- var/area/A = get_area(M)
- if(A.has_gravity)
- //this is the gay blood on floor shit -- Added back -- Skie
- if (M.lying && (prob(M.getBruteLoss() / 6)))
- var/bloodtrail = 1 //Checks if it's possible to even spill blood
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- if(H.species.flags & NO_BLOOD)
- bloodtrail = 0
- else
- var/blood_volume = round((H.vessel.get_reagent_amount("blood")/H.species.blood_volume)*100)
- if(blood_volume < BLOOD_VOLUME_SURVIVE)
- bloodtrail = 0 //Most of it's gone already, just leave it be
- else
- H.vessel.remove_reagent("blood", 1)
- if(bloodtrail)
- var/turf/location = M.loc
- if(istype(location, /turf/simulated))
- location.add_blood(M)
- //pull damage with injured people
- if(prob(25))
- M.adjustBruteLoss(1)
- visible_message("\The [M]'s [M.isSynthetic() ? "state worsens": "wounds open more"] from being dragged!")
- if(M.pull_damage())
- if(prob(25))
- M.adjustBruteLoss(2)
- visible_message("\The [M]'s [M.isSynthetic() ? "state" : "wounds"] worsen terribly from being dragged!")
- var/turf/location = M.loc
- if (istype(location, /turf/simulated))
- var/bloodtrail = 1 //Checks if it's possible to even spill blood
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- if(H.species.flags & NO_BLOOD)
- bloodtrail = 0
- else
- var/blood_volume = round((H.vessel.get_reagent_amount("blood")/H.species.blood_volume)*100)
- if(blood_volume < BLOOD_VOLUME_SURVIVE)
- bloodtrail = 0 //Most of it's gone already, just leave it be
- else
- H.vessel.remove_reagent("blood", 1)
- if(bloodtrail)
- if(istype(location, /turf/simulated))
- location.add_blood(M)
+ // living might take damage from drags
+ if(isliving(pulling))
+ var/mob/living/M = pulling
+ M.dragged(src, oldloc)
- if(get_dist(pulling.loc, T) > 1 || pulling.loc.z != T.z)
- M.stop_pulling()
- else
- step(pulling, get_dir(pulling.loc, T))
- if(t)
- M.start_pulling(t)
- else
- if (pulling)
- if (istype(pulling, /obj/structure/window))
- var/obj/structure/window/W = pulling
- if(W.is_fulltile())
- for(var/obj/structure/window/win in get_step(pulling,get_dir(pulling.loc, T)))
- stop_pulling()
+ pulling.Move(oldloc, 0, movetime) // the pullee tries to reach our previous position
+ if(pulling && get_dist(src, pulling) > 1) // the pullee couldn't keep up
+ stop_pulling()
- if(get_dist(pulling.loc, T) > 1 || pulling.loc.z != T.z) // This is needed or else pulled objects can't get pushed away.
- stop_pulling()
- else
- step(pulling, get_dir(pulling.loc, T))
- else
- stop_pulling()
- . = ..()
-
- if (s_active && !( s_active in contents ) && get_turf(s_active) != get_turf(src)) //check !( s_active in contents ) first so we hopefully don't have to call get_turf() so much.
- s_active.close(src)
/mob/living/proc/handle_footstep(turf/T)
return FALSE
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 95e48587a44..9a6c384e0c6 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -940,10 +940,6 @@
update_canmove()
/mob/living/silicon/robot/mode()
- set name = "Activate Held Object"
- set category = "IC"
- set src = usr
-
if(!checkClickCooldown())
return
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 095dd63e749..1c78078b98e 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -516,15 +516,6 @@
/mob/proc/pull_damage()
- if(ishuman(src))
- var/mob/living/carbon/human/H = src
- if(H.health - H.halloss <= config.health_threshold_softcrit)
- for(var/name in H.organs_by_name)
- var/obj/item/organ/external/e = H.organs_by_name[name]
- if(e && H.lying)
- if((e.status & ORGAN_BROKEN && (!e.splinted || (e.splinted && e.splinted in e.contents && prob(30))) || e.status & ORGAN_BLEEDING) && (H.getBruteLoss() + H.getFireLoss() >= 100))
- return 1
- break
return 0
/mob/MouseDrop(mob/M as mob)
diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm
index 415165dd616..c7a4a94ce85 100644
--- a/code/modules/mob/mob_movement.dm
+++ b/code/modules/mob/mob_movement.dm
@@ -279,9 +279,8 @@
n = get_step(my_mob, direct)
total_delay = TICKS2DS(-round(-(DS2TICKS(total_delay)))) //Rounded to the next tick in equivalent ds
- var/glide_size = WORLD_ICON_SIZE/max(DS2TICKS(total_delay), 1) //Down to whatever decimal
my_mob.setMoveCooldown(total_delay)
- . = my_mob.SelfMove(n, direct, glide_size)
+ . = my_mob.SelfMove(n, direct, total_delay)
// If we have a grab
var/list/grablist = my_mob.ret_grab()
@@ -292,23 +291,19 @@
if(grablist.len == 1)
var/mob/M = grablist[1]
if(!my_mob.Adjacent(M)) //Oh no, we moved away
- M.glide_size = glide_size
- step(M, get_dir(M, pre_move_loc)) //Have them step towards where we were
+ M.Move(pre_move_loc, get_dir(M, pre_move_loc), total_delay) //Have them step towards where we were
// It's a grab chain
else
for(var/mob/M in grablist)
my_mob.other_mobs = 1
M.other_mobs = 1 //Has something to do with people being able or unable to pass a chain of mobs
- M.animate_movement = 3
//Ugly!
spawn(0) //Step
- M.glide_size = glide_size
- step(M, direct)
+ M.Move(pre_move_loc, get_dir(M, pre_move_loc), total_delay)
spawn(1) //Unstep
M.other_mobs = null
- M.animate_movement = 2
spawn(1) //Unset
my_mob.other_mobs = null
@@ -323,9 +318,8 @@
// We're not in the middle of a move anymore
moving = 0
-/mob/proc/SelfMove(turf/n, direct, glide_size = 8)
- src.glide_size = glide_size
- return Move(n, direct)
+/mob/proc/SelfMove(turf/n, direct, movetime)
+ return Move(n, direct, movetime)
///Process_Incorpmove
///Called by client/Move()
diff --git a/code/modules/multiz/structures.dm b/code/modules/multiz/structures.dm
index 331588183eb..07084265115 100644
--- a/code/modules/multiz/structures.dm
+++ b/code/modules/multiz/structures.dm
@@ -159,7 +159,7 @@
A.forceMove(target)
if(isliving(A))
var/mob/living/L = A
- if(L.pulling)
+ if(L.pulling && !L.pulling.anchored)
L.pulling.forceMove(target)
/obj/structure/stairs/proc/upperStep(var/turf/T)
diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm
index 87a1b72466a..ed7bdc9a2a5 100644
--- a/code/modules/vehicles/vehicle.dm
+++ b/code/modules/vehicles/vehicle.dm
@@ -66,54 +66,29 @@
/obj/vehicle/unbuckle_mob(mob/living/buckled_mob, force = FALSE)
. = ..(buckled_mob, force)
- buckled_mob.update_water()
+ buckled_mob?.update_water()
if(riding_datum)
riding_datum.restore_position(buckled_mob)
riding_datum.handle_vehicle_offsets() // So the person in back goes to the front.
-/obj/vehicle/set_dir(newdir)
- ..(newdir)
- if(riding_datum)
- riding_datum.handle_vehicle_offsets()
+/obj/vehicle/Move(var/newloc, var/direction, var/movetime)
+ if(world.time < l_move_time + move_delay) //This AND the riding datum move speed limit?
+ return
-//MOVEMENT
-/obj/vehicle/relaymove(mob/user, direction)
- if(riding_datum)
- riding_datum.handle_ride(user, direction)
+ if(mechanical && on && powered && cell.charge < charge_use)
+ turn_off()
+ return
-/obj/vehicle/Moved()
. = ..()
- if(riding_datum)
- riding_datum.handle_vehicle_layer()
- riding_datum.handle_vehicle_offsets()
-/obj/vehicle/Move()
- if(world.time > l_move_time + move_delay)
- var/old_loc = get_turf(src)
- if(mechanical && on && powered && cell.charge < charge_use)
- turn_off()
+ if(mechanical && on && powered)
+ cell.use(charge_use)
- var/init_anc = anchored
- anchored = 0
- if(!..())
- anchored = init_anc
- return 0
-
- set_dir(get_dir(old_loc, loc))
- anchored = init_anc
-
- if(mechanical && on && powered)
- cell.use(charge_use)
-
- //Dummy loads do not have to be moved as they are just an overlay
- //See load_object() proc in cargo_trains.dm for an example
- if(load && !istype(load, /datum/vehicle_dummy_load))
- load.forceMove(loc)
- load.set_dir(dir)
-
- return 1
- else
- return 0
+ //Dummy loads do not have to be moved as they are just an overlay
+ //See load_object() proc in cargo_trains.dm for an example
+ //Also mobs are buckled to the vehicle and get moved in atom/movable/Move's call to take care of that
+ if(load && !(load in buckled_mobs) && !istype(load, /datum/vehicle_dummy_load))
+ load.forceMove(loc)
/obj/vehicle/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/hand_labeler))
diff --git a/code/modules/vore/appearance/sprite_accessories_taur_vr.dm b/code/modules/vore/appearance/sprite_accessories_taur_vr.dm
index 3efdcbd8a80..4e39dfcfcfd 100644
--- a/code/modules/vore/appearance/sprite_accessories_taur_vr.dm
+++ b/code/modules/vore/appearance/sprite_accessories_taur_vr.dm
@@ -20,7 +20,7 @@
return TRUE
/datum/riding/taur/force_dismount(mob/M)
- . =..()
+ . = ..()
ridden.visible_message("[M] stops riding [ridden]!")
//Hoooo boy.