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.