diff --git a/code/datums/riding.dm b/code/datums/riding.dm index 20bbc1552ad..3524e663479 100644 --- a/code/datums/riding.dm +++ b/code/datums/riding.dm @@ -9,6 +9,13 @@ var/slowed = FALSE var/slowvalue = 1 +/datum/riding/New(atom/movable/_ridden) + ridden = _ridden + +/datum/riding/Destroy() + ridden = null + return ..() + /datum/riding/proc/handle_vehicle_layer() if(ridden.dir != NORTH) ridden.layer = ABOVE_MOB_LAYER diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 308b80a9610..e43b088b5dc 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -911,8 +911,7 @@ M.visible_message("[M] really can't seem to mount [src]...") return if(!riding_datum) - riding_datum = new /datum/riding/human - riding_datum.ridden = src + riding_datum = new /datum/riding/human(src) if(buckled_mobs && ((M in buckled_mobs) || (buckled_mobs.len >= max_buckled_mobs))) return if(buckled) //NO INFINITE STACKING!! diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 7abcefe143e..648d38c63b8 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -55,6 +55,9 @@ //End bloody footprints S.step_action() + +/mob/living/carbon/human/Moved() + . = ..() if(buckled_mobs && buckled_mobs.len && riding_datum) riding_datum.on_vehicle_move() diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 6142f2ccd71..a6a267ba40f 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -31,6 +31,7 @@ ranged_ability.remove_ranged_ability(src) if(buckled) buckled.unbuckle_mob(src,force=1) + QDEL_NULL(riding_datum) for(var/mob/living/simple_animal/drone/D in player_list) for(var/image/I in staticOverlays) @@ -915,3 +916,8 @@ "[C] topples over [src]!", \ "[C] leaps out of [src]'s way!")]") C.Weaken(2) + +/mob/living/post_buckle_mob(mob/living/M) + if(riding_datum) + riding_datum.handle_vehicle_offsets() + riding_datum.handle_vehicle_layer() diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index b09fb96b09f..3d95b2bb756 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -75,3 +75,5 @@ var/list/implants = null var/tesla_ignore = FALSE + + var/datum/riding/riding_datum \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index d9d9b23457e..adf03be3273 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1010,8 +1010,7 @@ M.visible_message("[M] really can't seem to mount the [src]...") return if(!riding_datum) - riding_datum = new /datum/riding/cyborg - riding_datum.ridden = src + riding_datum = new /datum/riding/cyborg(src) if(buckled_mobs) if(buckled_mobs.len >= max_buckled_mobs) return diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index b7a4161c6b3..b729b964e14 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -540,11 +540,10 @@ if(tame && riding_datum) riding_datum.handle_ride(user, direction) -/mob/living/simple_animal/Move(NewLoc,Dir=0,step_x=0,step_y=0) +/mob/living/simple_animal/Moved() . = ..() if(riding_datum) - riding_datum.handle_vehicle_layer() - riding_datum.handle_vehicle_offsets() + riding_datum.on_vehicle_move() /mob/living/simple_animal/buckle_mob(mob/living/buckled_mob, force = 0, check_loc = 1) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index be7b382a87f..0b1f565e194 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -962,9 +962,4 @@ var/next_mob_id = 0 switch(var_name) if ("attack_log") return debug_variable(var_name, attack_log, 0, src, FALSE) - . = ..() - -/mob/post_buckle_mob(mob/living/M) - if(riding_datum) - riding_datum.handle_vehicle_offsets() - riding_datum.handle_vehicle_layer() + . = ..() \ No newline at end of file diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index db64420414e..b00302473dd 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -146,5 +146,4 @@ var/list/observers = null //The list of people observing this mob. var/list/progressbars = null //for stacking do_after bars - var/datum/riding/riding_datum var/list/can_ride_typecache = list() diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm index 74c8e1647e4..343a103fc3a 100644 --- a/code/modules/vehicles/vehicle.dm +++ b/code/modules/vehicles/vehicle.dm @@ -15,6 +15,10 @@ var/view_range = 7 var/datum/riding/riding_datum = null +/obj/vehicle/Destroy() + QDEL_NULL(riding_datum) + return ..() + /obj/vehicle/update_icon() return @@ -53,7 +57,7 @@ riding_datum.handle_ride(user, direction) -/obj/vehicle/Move(NewLoc,Dir=0,step_x=0,step_y=0) +/obj/vehicle/Moved() . = ..() if(riding_datum) riding_datum.handle_vehicle_layer()