diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm
index 2ab48980639..2978e80f2b6 100644
--- a/code/game/area/Space Station 13 areas.dm
+++ b/code/game/area/Space Station 13 areas.dm
@@ -47,6 +47,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
var/static_environ
var/has_gravity = 0
+ var/safe = 0 //Is the area teleport-safe: no space / radiation / aggresive mobs / other dangers
var/no_air = null
var/area/master // master area used for power calcluations
@@ -502,6 +503,7 @@ proc/process_ghost_teleport_locs()
/area/crew_quarters
name = "\improper Dormitories"
icon_state = "Sleep"
+ safe = 1
/area/crew_quarters/toilet
name = "\improper Dormitory Toilets"
diff --git a/code/game/gamemodes/abduction/abduction.dm b/code/game/gamemodes/abduction/abduction.dm
index 16373621412..9276c1bb331 100644
--- a/code/game/gamemodes/abduction/abduction.dm
+++ b/code/game/gamemodes/abduction/abduction.dm
@@ -13,6 +13,7 @@
var/list/datum/mind/agents = list()
var/list/datum/objective/team_objectives = list()
var/list/team_names = list()
+ var/finished = 0
/datum/game_mode/abduction/announce()
world << "The current game mode is - Abduction!"
@@ -258,11 +259,14 @@
/datum/game_mode/abduction/check_finished()
- for(var/team_number=1,team_number<=teams,team_number++)
- var/obj/machinery/abductor/console/con = get_team_console(team_number)
- var/datum/objective/objective = team_objectives[team_number]
- if (con.experiment.points > objective.target_amount)
- return 1
+ if(!finished)
+ for(var/team_number=1,team_number<=teams,team_number++)
+ var/obj/machinery/abductor/console/con = get_team_console(team_number)
+ var/datum/objective/objective = team_objectives[team_number]
+ if (con.experiment.points > objective.target_amount)
+ SSshuttle.emergency.request(null, 0.5)
+ finished = 1
+ return ..()
return ..()
/datum/game_mode/abduction/declare_completion()
@@ -297,7 +301,7 @@
world << printobjectives(abductee.mind)
/datum/game_mode/proc/auto_declare_completion_abduction()
- if(abductors.len)
+ if(abductors.len && ticker.mode.config_tag != "abduction") // no repeating for the gamemode
world << "
The Abductors were:"
for(var/datum/mind/M in abductors)
world << "Abductor [M.current ? M.current.name : "Abductor"]([M.key])"
diff --git a/code/game/gamemodes/abduction/machinery/experiment.dm b/code/game/gamemodes/abduction/machinery/experiment.dm
index 371011323df..2de8bdd41ff 100644
--- a/code/game/gamemodes/abduction/machinery/experiment.dm
+++ b/code/game/gamemodes/abduction/machinery/experiment.dm
@@ -143,7 +143,7 @@
if(!GlandTest)
say("Experimental dissection not detected!")
return "No glands detected!"
- if(H.mind != null || H.ckey != null)
+ if(H.mind != null && H.ckey != null)
history += H
say("Processing Specimen...")
sleep(5)
@@ -190,9 +190,11 @@
var/area/A
if(console && console.pad && console.pad.teleport_target)
A = console.pad.teleport_target
- else
- A = teleportlocs[pick(teleportlocs)]
- TeleportToArea(H,A)
+ if(A.safe) // right now crew areas are safe - being locked behind closed doors is not fun
+ TeleportToArea(H,A)
+ //Area not chosen / It's not safe area - teleport to arrivals
+ H.forceMove(pick(latejoin))
+
/obj/machinery/abductor/experiment/update_icon()
if(state_open)
diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm
index 35ab45ea708..32b0121f7d2 100644
--- a/code/modules/admin/verbs/one_click_antag.dm
+++ b/code/modules/admin/verbs/one_click_antag.dm
@@ -564,7 +564,7 @@ client/proc/one_click_antag()
if(candidates.len >= 2)
//Oh god why we can't have static functions
var/teams_finished = 0
- if(ticker.mode.config_tag == "abductor")
+ if(ticker.mode.config_tag == "abduction")
var/datum/game_mode/abduction/A = ticker.mode
teams_finished = A.teams
else
@@ -572,7 +572,7 @@ client/proc/one_click_antag()
var/number = teams_finished + 1
var/datum/game_mode/abduction/temp
- if(ticker.mode.config_tag == "abductor")
+ if(ticker.mode.config_tag == "abduction")
temp = ticker.mode
else
temp = new
@@ -597,7 +597,7 @@ client/proc/one_click_antag()
temp.abductors |= list(agent_mind,scientist_mind)
temp.make_abductor_team(number,preset_scientist=scientist_mind,preset_agent=agent_mind)
temp.post_setup_team(number)
- if(ticker.mode.config_tag == "abductor")
+ if(ticker.mode.config_tag == "abduction")
var/datum/game_mode/abduction/A = ticker.mode
A.teams += 1
else