diff --git a/code/game/machinery/harvester.dm b/code/game/machinery/harvester.dm
index b5fd04a98f2..63a48dcd976 100644
--- a/code/game/machinery/harvester.dm
+++ b/code/game/machinery/harvester.dm
@@ -13,6 +13,7 @@
var/harvesting = FALSE
var/warming_up = FALSE
var/list/operation_order = list() //Order of wich we harvest limbs.
+ var/output_dir = SOUTH //Direction to drop the limbs in
var/allow_clothing = FALSE
var/allow_living = FALSE
@@ -58,6 +59,12 @@
/obj/machinery/harvester/AltClick(mob/user)
. = ..()
+ if(!user.can_perform_action(src))
+ return
+ if(panel_open)
+ output_dir = turn(output_dir, -90)
+ to_chat(user, span_notice("You change [src]'s output settings, setting the output to [dir2text(output_dir)]."))
+ return
if(!can_interact(user))
return
if(harvesting || !user || !isliving(user) || state_open)
@@ -121,17 +128,7 @@
if(!LAZYLEN(operation_order)) //The list is empty, so we're done here
end_harvesting(success = TRUE)
return
- var/turf/target
- for(var/adir in list(EAST,NORTH,SOUTH,WEST))
- var/turf/T = get_step(src,adir)
- if(!T)
- continue
- if(isclosedturf(T))
- continue
- target = T
- break
- if(!target)
- target = get_turf(src)
+ var/turf/target = get_step(src, output_dir)
for(var/obj/item/bodypart/BP in operation_order) //first we do non-essential limbs
BP.drop_limb()
C.emote("scream")
@@ -219,4 +216,4 @@
else if(!harvesting)
. += span_notice("Alt-click [src] to start harvesting.")
if(in_range(user, src) || isobserver(user))
- . += span_notice("The status display reads: Harvest speed at [interval*0.1] seconds per organ.")
+ . += span_notice("The status display reads: Harvest speed at [interval*0.1] seconds per organ. Outputting to the [dir2text(output_dir)].")