diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm
index 22f4ae79d1b..7246ac3dbbd 100644
--- a/code/game/objects/structures/janicart.dm
+++ b/code/game/objects/structures/janicart.dm
@@ -238,14 +238,6 @@
step(src, direction)
update_mob()
handle_rotation()
- if(istype(src.loc, /turf/simulated))
- var/turf/simulated/T = src.loc
- if(T.wet == 2) //Lube! Fall off!
- playsound(src, 'sound/misc/slip.ogg', 50, 1, -3)
- buckled_mob.Stun(7)
- buckled_mob.Weaken(7)
- unbuckle_mob()
- step(src, dir)
move_delay = 1
spawn(2)
move_delay = 0
@@ -300,11 +292,6 @@
buckled_mob.pixel_x = -12
buckled_mob.pixel_y = 7
-
-/obj/structure/stool/bed/chair/janicart/bullet_act(obj/item/projectile/Proj)
- if(buckled_mob)
- buckled_mob.bullet_act(Proj)
-
/obj/item/key
name = "key"
desc = "A small grey key."
diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm
index 7f7b7c0ae05..160c798e99c 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm
@@ -24,14 +24,12 @@
/obj/structure/stool/bed/Move(atom/newloc, direct) //Some bed children move
. = ..()
if(buckled_mob)
- buckled_mob.buckled = null
if(!buckled_mob.Move(loc, direct))
loc = buckled_mob.loc //we gotta go back
last_move = buckled_mob.last_move
inertia_dir = last_move
buckled_mob.inertia_dir = last_move
. = 0
- buckled_mob.buckled = src
/obj/structure/stool/bed/Process_Spacemove(movement_dir = 0)
if(buckled_mob)
diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm
index 58e7ae67fd2..5267ccbae9e 100644
--- a/code/game/turfs/simulated.dm
+++ b/code/game/turfs/simulated.dm
@@ -44,14 +44,13 @@
..()
if (istype(A,/mob/living/carbon))
var/mob/living/carbon/M = A
- if(M.lying) return
- switch (src.wet)
+ switch(wet)
if(1) //wet floor
- if(!M.slip(4, 2, null, (NO_SLIP_WHEN_WALKING|STEP)))
+ if(!M.slip(4, 2, null, NO_SLIP_WHEN_WALKING))
M.inertia_dir = 0
return
if(2) //lube
- M.slip(0, 7, null, (STEP|SLIDE|GALOSHES_DONT_HELP))
+ M.slip(0, 7, null, (SLIDE|GALOSHES_DONT_HELP))
/turf/simulated/ChangeTurf(var/path)
. = ..()
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 2bcfe8d976f..69f8443f315 100644
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -224,38 +224,43 @@
if(has_gravity(src))
playsound(src, "bodyfall", 50, 1)
-/turf/handle_slip(mob/slipper, s_amount, w_amount, obj/O, lube)
+/turf/handle_slip(mob/living/carbon/C, s_amount, w_amount, obj/O, lube)
if(has_gravity(src))
- var/mob/living/carbon/M = slipper
- if (M.m_intent=="walk" && (lube&NO_SLIP_WHEN_WALKING))
- return 0
- if(!M.lying && (M.status_flags & CANWEAKEN)) // we slip those who are standing and can fall.
- if(O)
- M << "You slipped on the [O.name]!"
- else
- M << "You slipped!"
- M.attack_log += "\[[time_stamp()]\] Slipped[O ? " on the [O.name]" : ""][(lube&SLIDE)? " (LUBE)" : ""]!"
- playsound(M.loc, 'sound/misc/slip.ogg', 50, 1, -3)
+ var/obj/buckled_obj
+ var/oldlying = C.lying
+ if(C.buckled)
+ buckled_obj = C.buckled
+ if(!(lube&GALOSHES_DONT_HELP)) //can't slip while buckled unless it's lube.
+ return 0
+ else
+ if(C.lying || !(C.status_flags & CANWEAKEN)) // can't slip unbuckled mob if they're lying or can't fall.
+ return 0
+ if(C.m_intent=="walk" && (lube&NO_SLIP_WHEN_WALKING))
+ return 0
- M.accident(M.l_hand)
- M.accident(M.r_hand)
+ C << "You slipped[ O ? " on the [O.name]" : ""]!"
- var/olddir = M.dir
- M.Stun(s_amount)
- M.Weaken(w_amount)
- M.stop_pulling()
- if(lube&SLIDE)
- for(var/i=1, i<5, i++)
- spawn (i)
- step(M, olddir)
- M.spin(1,1)
- if(M.lying) //did I fall over?
- M.adjustBruteLoss(2)
+ C.attack_log += "\[[time_stamp()]\] Slipped[O ? " on the [O.name]" : ""][(lube&SLIDE)? " (LUBE)" : ""]!"
+ playsound(C.loc, 'sound/misc/slip.ogg', 50, 1, -3)
+ C.accident(C.l_hand)
+ C.accident(C.r_hand)
-
- return 1
- return 0 // no success. Used in clown pda and wet floors
+ var/olddir = C.dir
+ C.Stun(s_amount)
+ C.Weaken(w_amount)
+ C.stop_pulling()
+ if(buckled_obj)
+ buckled_obj.unbuckle_mob()
+ step(buckled_obj, olddir)
+ else if(lube&SLIDE)
+ for(var/i=1, i<5, i++)
+ spawn (i)
+ step(C, olddir)
+ C.spin(1,1)
+ if(C.lying != oldlying) //did we actually fall?
+ C.adjustBruteLoss(2)
+ return 1
/turf/singularity_act()
if(intact)
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index c54c9e9f592..5ff8b7b26aa 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -335,11 +335,10 @@
return "trails_2"
var/const/NO_SLIP_WHEN_WALKING = 1
-var/const/STEP = 2
-var/const/SLIDE = 4
-var/const/GALOSHES_DONT_HELP = 8
+var/const/SLIDE = 2
+var/const/GALOSHES_DONT_HELP = 4
/mob/living/carbon/slip(s_amount, w_amount, obj/O, lube)
- loc.handle_slip(src, s_amount, w_amount, O, lube)
+ return loc.handle_slip(src, s_amount, w_amount, O, lube)
/mob/living/carbon/fall(forced)
loc.handle_fall(src, forced)//it's loc so it doesn't call the mob's handle_fall which does nothing
@@ -505,7 +504,7 @@ var/const/GALOSHES_DONT_HELP = 8
return 1
/mob/living/carbon/proc/accident(obj/item/I)
- if(!I || (I.flags & NODROP))
+ if(!I || (I.flags & (NODROP|ABSTRACT)))
return
unEquip(I)
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index 265a428ba71..51fd9bece6f 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -83,7 +83,7 @@
var/a_intent = "help"//Living
var/m_intent = "run"//Living
var/lastKnownIP = null
- var/obj/structure/stool/bed/buckled = null//Living
+ var/obj/buckled = null//Living
var/obj/item/l_hand = null//Living
var/obj/item/r_hand = null//Living
var/obj/item/weapon/storage/s_active = null//Carbon
diff --git a/html/changelogs/phil235 - JanicartFixes.yml b/html/changelogs/phil235 - JanicartFixes.yml
new file mode 100644
index 00000000000..21617e26dce
--- /dev/null
+++ b/html/changelogs/phil235 - JanicartFixes.yml
@@ -0,0 +1,7 @@
+
+author: phil235
+
+delete-after: True
+
+changes:
+ - tweak: "Janicart rider no longer slip on wet floor or bananas. Moving on a floor tile with lube while buckled (chair, roller bed, etc) will make you fall off."