diff --git a/code/game/gamemodes/miniantags/abduction/machinery/camera.dm b/code/game/gamemodes/miniantags/abduction/machinery/camera.dm
index 0806aad2787..2a69da0950a 100644
--- a/code/game/gamemodes/miniantags/abduction/machinery/camera.dm
+++ b/code/game/gamemodes/miniantags/abduction/machinery/camera.dm
@@ -8,6 +8,7 @@
var/datum/action/innate/teleport_self/tele_self_action = new
var/datum/action/innate/vest_mode_swap/vest_mode_action = new
var/datum/action/innate/vest_disguise_swap/vest_disguise_action = new
+ var/datum/action/innate/set_droppoint/set_droppoint_action = new
var/obj/machinery/abductor/console/console
icon = 'icons/obj/abductor.dmi'
@@ -41,6 +42,9 @@
vest_disguise_action.target = console
vest_disguise_action.Grant(user)
+ set_droppoint_action.target = console
+ set_droppoint_action.Grant(user)
+
/obj/machinery/computer/camera_advanced/abductor/proc/IsAbductor(mob/living/carbon/human/H)
return H.dna.species.id == "abductor"
@@ -66,6 +70,7 @@
origin.tele_self_action.Remove(C)
origin.vest_mode_action.Remove(C)
origin.vest_disguise_action.Remove(C)
+ origin.set_droppoint_action.Remove(C)
remote_eye.eye_user = null
C.reset_perspective(null)
if(C.client)
@@ -136,3 +141,17 @@
return
var/obj/machinery/abductor/console/console = target
console.SelectDisguise(remote=1)
+
+/datum/action/innate/set_droppoint
+ name = "Set Experiment Release Point"
+ button_icon_state = "set_drop"
+
+/datum/action/innate/set_droppoint/Activate()
+ if(!target || !iscarbon(owner))
+ return
+
+ var/mob/living/carbon/human/C = owner
+ var/mob/camera/aiEye/remote/remote_eye = C.remote_control
+
+ var/obj/machinery/abductor/console/console = target
+ console.SetDroppoint(remote_eye.loc,owner)
\ No newline at end of file
diff --git a/code/game/gamemodes/miniantags/abduction/machinery/console.dm b/code/game/gamemodes/miniantags/abduction/machinery/console.dm
index 24f17a5ce92..20abe316f89 100644
--- a/code/game/gamemodes/miniantags/abduction/machinery/console.dm
+++ b/code/game/gamemodes/miniantags/abduction/machinery/console.dm
@@ -61,7 +61,6 @@
dat += "Emergency Teleporter System."
dat += "Consider using primary observation console first."
dat += "Activate Teleporter
"
- dat += "Set Teleporter
"
if(gizmo!=null && gizmo.marked!=null)
dat += "Retrieve Mark
"
else
@@ -94,9 +93,7 @@
return
usr.set_machine(src)
- if(href_list["teleporter_set"])
- TeleporterSet()
- else if(href_list["teleporter_send"])
+ if(href_list["teleporter_send"])
TeleporterSend()
else if(href_list["teleporter_retrieve"])
TeleporterRetrieve()
@@ -116,12 +113,6 @@
Dispense(/obj/item/device/abductor/gizmo)
src.updateUsrDialog()
-/obj/machinery/abductor/console/proc/TeleporterSet()
- var/A = null
- A = input("Select area to teleport to", "Teleport", A) in teleportlocs
- if(pad!=null && in_range(usr,src))
- pad.teleport_target = teleportlocs[A]
- return
/obj/machinery/abductor/console/proc/TeleporterRetrieve()
if(gizmo!=null && pad!=null && gizmo.marked)
@@ -152,6 +143,16 @@
vest.SetDisguise(chosen)
return
+/obj/machinery/abductor/console/proc/SetDroppoint(turf/simulated/location,user)
+ if(!istype(location))
+ user << "That place is not safe for the specimen."
+ return
+
+ if(pad)
+ pad.teleport_target = location
+ user << "Location marked as test subject release point."
+
+
/obj/machinery/abductor/console/proc/Initialize()
for(var/obj/machinery/abductor/pad/p in machines)
diff --git a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm
index 5dde76b4c00..d1909eed3c0 100644
--- a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm
+++ b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm
@@ -188,13 +188,10 @@
/obj/machinery/abductor/experiment/proc/SendBack(mob/living/carbon/human/H)
H.Sleeping(8)
- var/area/A
if(console && console.pad && console.pad.teleport_target)
- A = console.pad.teleport_target
- if(A.safe) // right now crew areas are safe - being locked behind closed doors is not fun
- TeleportToArea(H,A)
- H.uncuff()
- return
+ H.forceMove(console.pad.teleport_target)
+ H.uncuff()
+ return
//Area not chosen / It's not safe area - teleport to arrivals
H.forceMove(pick(latejoin))
H.uncuff()
diff --git a/code/game/gamemodes/miniantags/abduction/machinery/pad.dm b/code/game/gamemodes/miniantags/abduction/machinery/pad.dm
index 83abba6a24e..89dd39b3737 100644
--- a/code/game/gamemodes/miniantags/abduction/machinery/pad.dm
+++ b/code/game/gamemodes/miniantags/abduction/machinery/pad.dm
@@ -4,38 +4,7 @@
icon = 'icons/obj/abductor.dmi'
icon_state = "alien-pad-idle"
anchored = 1
- var/area/teleport_target
-
-/obj/machinery/abductor/proc/TeleportToArea(mob/living/target,area/thearea)
- var/list/L = list()
- for(var/turf/T in get_area_turfs(thearea.type))
- if(!T.density)
- var/clear = 1
- for(var/obj/O in T)
- if(O.density)
- clear = 0
- break
- if(clear)
- L+=T
- if(!L.len)
- return
-
- if(target && target.buckled)
- target.buckled.unbuckle_mob(target) //Antur says this teleport -shouldn't- force unbuckle, and it's his codebabby soo~
-
- var/list/tempL = L
- var/attempt = null
- var/success = 0
- while(tempL.len)
- attempt = pick(tempL)
- target.Move(attempt)
- if(get_turf(target) == attempt)
- success = 1
- break
- else
- tempL.Remove(attempt)
- if(!success)
- target.loc = pick(L)
+ var/turf/teleport_target
/obj/machinery/abductor/pad/proc/Warp(mob/living/target)
target.Move(src.loc)
@@ -44,8 +13,8 @@
if(teleport_target == null)
teleport_target = teleportlocs[pick(teleportlocs)]
flick("alien-pad", src)
- for(var/mob/living/target in src.loc)
- TeleportToArea(target,teleport_target)
+ for(var/mob/living/target in loc)
+ target.forceMove(teleport_target)
spawn(0)
anim(target.loc,target,'icons/mob/mob.dmi',,"uncloak",,target.dir)
@@ -56,23 +25,15 @@
Warp(target)
/obj/machinery/abductor/pad/proc/MobToLoc(place,mob/living/target)
- var/obj/effect/teleport_abductor/F = new(place)
- var/datum/effect_system/spark_spread/S = new
- S.set_up(10,0,place)
- S.start()
+ new/obj/effect/overlay/temp/teleport_abductor(place)
sleep(80)
- qdel(F)
flick("alien-pad", src)
target.forceMove(place)
anim(target.loc,target,'icons/mob/mob.dmi',,"uncloak",,target.dir)
/obj/machinery/abductor/pad/proc/PadToLoc(place)
- var/obj/effect/teleport_abductor/F = new(place)
- var/datum/effect_system/spark_spread/S = new
- S.set_up(10,0,place)
- S.start()
+ new/obj/effect/overlay/temp/teleport_abductor(place)
sleep(80)
- qdel(F)
flick("alien-pad", src)
for(var/mob/living/target in src.loc)
target.forceMove(place)
@@ -80,7 +41,14 @@
anim(target.loc,target,'icons/mob/mob.dmi',,"uncloak",,target.dir)
-/obj/effect/teleport_abductor
+/obj/effect/overlay/temp/teleport_abductor
name = "Huh"
icon = 'icons/obj/abductor.dmi'
icon_state = "teleport"
+ duration = 80
+
+/obj/effect/overlay/temp/teleport_abductor/New()
+ var/datum/effect_system/spark_spread/S = new
+ S.set_up(10,0,loc)
+ S.start()
+ ..()
\ No newline at end of file
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index bb3b7a2612f..efdd816c2ac 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -91,6 +91,7 @@
return 1
/obj/structure/table/attack_hand(mob/living/user)
+ . = ..()
user.changeNext_move(CLICK_CD_MELEE)
if(tableclimber && tableclimber != user)
tableclimber.Weaken(2)
diff --git a/code/modules/crafting/table.dm b/code/modules/crafting/table.dm
index 39be92fd7d3..3ac5ac16407 100644
--- a/code/modules/crafting/table.dm
+++ b/code/modules/crafting/table.dm
@@ -11,7 +11,7 @@
return
if(!user.IsAdvancedToolUser())
return
- interact(user)
+ tablecraft(user)
/obj/structure/table/proc/check_contents(datum/table_recipe/R)
check_table()
@@ -179,7 +179,7 @@
return Deletion
-/obj/structure/table/interact(mob/user)
+/obj/structure/table/proc/tablecraft(mob/user)
if(user.incapacitated() || user.lying || !Adjacent(user))
return
check_table()
@@ -227,22 +227,22 @@
if(href_list["make"])
var/datum/table_recipe/TR = locate(href_list["make"])
busy = 1
- interact(usr)
+ tablecraft(usr)
var/fail_msg = construct_item(usr, TR)
if(!fail_msg)
usr << "[TR.name] constructed."
else
usr << "Construction failed[fail_msg]"
busy = 0
- interact(usr)
+ tablecraft(usr)
if(href_list["forwardCat"])
viewing_category = next_cat()
usr << "Category is now [categories[viewing_category]]."
- interact(usr)
+ tablecraft(usr)
if(href_list["backwardCat"])
viewing_category = prev_cat()
usr << "Category is now [categories[viewing_category]]."
- interact(usr)
+ tablecraft(usr)
//Next works nicely with modular arithmetic
/obj/structure/table/proc/next_cat()
diff --git a/icons/mob/actions.dmi b/icons/mob/actions.dmi
index 09f7609ff2a..9423b340d31 100644
Binary files a/icons/mob/actions.dmi and b/icons/mob/actions.dmi differ