diff --git a/baystation12.dme b/baystation12.dme
index 0f922bf5e64..f902bfd9608 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -281,6 +281,7 @@
#include "code\game\gamemodes\mutiny\emergency_authentication_device.dm"
#include "code\game\gamemodes\mutiny\key_pinpointer.dm"
#include "code\game\gamemodes\mutiny\mutiny.dm"
+#include "code\game\gamemodes\mutiny\mutiny_admin.dm"
#include "code\game\gamemodes\mutiny\mutiny_fluff.dm"
#include "code\game\gamemodes\mutiny\mutiny_hooks.dm"
#include "code\game\gamemodes\mutiny\directives\alien_fraud_directive.dm"
diff --git a/code/__HELPERS/names.dm b/code/__HELPERS/names.dm
index d2a82a034cf..06f45b6899c 100644
--- a/code/__HELPERS/names.dm
+++ b/code/__HELPERS/names.dm
@@ -43,6 +43,8 @@ var/religion_name = null
return capitalize(name)
+/proc/system_name()
+ return "Tau Ceti"
/proc/station_name()
if (station_name)
@@ -321,4 +323,4 @@ var/syndicate_code_response//Code response for traitors.
if(5)
return
-*/
\ No newline at end of file
+*/
diff --git a/code/game/gamemodes/mutiny/directive.dm b/code/game/gamemodes/mutiny/directive.dm
index 3cb9071dc73..857e0730eca 100644
--- a/code/game/gamemodes/mutiny/directive.dm
+++ b/code/game/gamemodes/mutiny/directive.dm
@@ -21,6 +21,9 @@ datum/directive
proc/initialize()
return 1
+ proc/get_remaining_orders()
+ return ""
+
/proc/get_directive(type)
var/datum/game_mode/mutiny/mode = get_mutiny_mode()
if(!mode || !mode.current_directive || !istype(mode.current_directive, text2path("/datum/directive/[type]")))
diff --git a/code/game/gamemodes/mutiny/directives/alien_fraud_directive.dm b/code/game/gamemodes/mutiny/directives/alien_fraud_directive.dm
index 107adb05613..bbe91a88cc2 100644
--- a/code/game/gamemodes/mutiny/directives/alien_fraud_directive.dm
+++ b/code/game/gamemodes/mutiny/directives/alien_fraud_directive.dm
@@ -19,7 +19,7 @@ datum/directive/terminations/alien_fraud/get_description()
return {"
An extensive conspiracy network aimed at defrauding NanoTrasen of large amounts of funds has been uncovered
- operating within Tau Ceti. Human personnel are not suspected to be involved. Further information is classified.
+ operating within [system_name()]. Human personnel are not suspected to be involved. Further information is classified.
"}
diff --git a/code/game/gamemodes/mutiny/directives/bluespace_contagion_directive.dm b/code/game/gamemodes/mutiny/directives/bluespace_contagion_directive.dm
index 6c2724803ea..764e9a21c08 100644
--- a/code/game/gamemodes/mutiny/directives/bluespace_contagion_directive.dm
+++ b/code/game/gamemodes/mutiny/directives/bluespace_contagion_directive.dm
@@ -43,6 +43,12 @@ datum/directive/bluespace_contagion/meets_prerequisites()
datum/directive/bluespace_contagion/directives_complete()
return infected.len == 0
+datum/directive/bluespace_contagion/get_remaining_orders()
+ var/text = ""
+ for(var/victim in infected)
+ text += "Kill [victim]"
+ return text
+
/hook/death/proc/infected_killed(mob/living/carbon/human/deceased, gibbed)
var/datum/directive/bluespace_contagion/D = get_directive("bluespace_contagion")
if(!D) return 1
diff --git a/code/game/gamemodes/mutiny/directives/financial_crisis_directive.dm b/code/game/gamemodes/mutiny/directives/financial_crisis_directive.dm
index 5de523eaae3..1041dcc6048 100644
--- a/code/game/gamemodes/mutiny/directives/financial_crisis_directive.dm
+++ b/code/game/gamemodes/mutiny/directives/financial_crisis_directive.dm
@@ -15,7 +15,7 @@ datum/directive/terminations/financial_crisis/get_crew_to_terminate()
datum/directive/terminations/financial_crisis/get_description()
return {"
- Tau Ceti system banks in financial crisis. Local emergency situation ongoing.
+ [system_name()] system banks in financial crisis. Local emergency situation ongoing.
NT Funds redistributed, impact upon civilian department expected.
Further information is classified.
diff --git a/code/game/gamemodes/mutiny/directives/ipc_virus_directive.dm b/code/game/gamemodes/mutiny/directives/ipc_virus_directive.dm
index 76f6f1bd3dc..b9f35170943 100644
--- a/code/game/gamemodes/mutiny/directives/ipc_virus_directive.dm
+++ b/code/game/gamemodes/mutiny/directives/ipc_virus_directive.dm
@@ -49,6 +49,19 @@ datum/directive/ipc_virus/meets_prerequisites()
datum/directive/ipc_virus/directives_complete()
return brains_to_enslave.len == 0 && cyborgs_to_make.len == 0 && ids_to_terminate.len == 0
+datum/directive/ipc_virus/get_remaining_orders()
+ var/text = ""
+ for(var/brain in brains_to_enslave)
+ text += "Debrain [brain]"
+
+ for(var/brain in cyborgs_to_make)
+ text += "Borgify [brain]"
+
+ for(var/id in ids_to_terminate)
+ text += "Terminate [id]"
+
+ return text
+
/hook/debrain/proc/debrain_directive(obj/item/brain/B)
var/datum/directive/ipc_virus/D = get_directive("ipc_virus")
if (!D) return 1
diff --git a/code/game/gamemodes/mutiny/directives/research_to_ripleys_directive.dm b/code/game/gamemodes/mutiny/directives/research_to_ripleys_directive.dm
index 63657def192..b3224394cbd 100644
--- a/code/game/gamemodes/mutiny/directives/research_to_ripleys_directive.dm
+++ b/code/game/gamemodes/mutiny/directives/research_to_ripleys_directive.dm
@@ -25,7 +25,7 @@ datum/directive/research_to_ripleys
datum/directive/research_to_ripleys/get_description()
return {"
- The NanoTrasen Tau Ceti Manufactory faces an ore deficit. Financial crisis imminent. [station_name()] has been reassigned as a mining platform.
+ The NanoTrasen [system_name()] Manufactory faces an ore deficit. Financial crisis imminent. [station_name()] has been reassigned as a mining platform.
The Research Director is to assist the Head of Personnel in coordinating assets.
Weapons department reports solid sales. Further information is classified.
@@ -47,6 +47,17 @@ datum/directive/research_to_ripleys/directives_complete()
if (materials_shipped < MATERIALS_REQUIRED) return 0
return count_researchers_reassigned() == ids_to_reassign.len
+datum/directive/research_to_ripleys/get_remaining_orders()
+ var/text = ""
+ if(MATERIALS_REQUIRED > materials_shipped)
+ text += "Ship [MATERIALS_REQUIRED - materials_shipped] sheets of metal or minerals."
+
+ for(var/id in ids_to_reassign)
+ if(!ids_to_reassign[id])
+ text += "Reassign [id] to Shaft Miner"
+
+ return text
+
/hook/reassign_employee/proc/research_reassignments(obj/item/weapon/card/id/id_card)
var/datum/directive/research_to_ripleys/D = get_directive("research_to_ripleys")
if(!D) return 1
diff --git a/code/game/gamemodes/mutiny/directives/tau_ceti_needs_women_directive.dm b/code/game/gamemodes/mutiny/directives/tau_ceti_needs_women_directive.dm
index f7037955cb2..3e1418cc8f9 100644
--- a/code/game/gamemodes/mutiny/directives/tau_ceti_needs_women_directive.dm
+++ b/code/game/gamemodes/mutiny/directives/tau_ceti_needs_women_directive.dm
@@ -43,7 +43,7 @@ datum/directive/tau_ceti_needs_women
datum/directive/tau_ceti_needs_women/get_description()
return {"
- Recent evidence suggests [get_target_gender()] aptitudes may be effected by radiation from Tau Ceti.
+ Recent evidence suggests [get_target_gender()] aptitudes may be effected by radiation from [system_name()].
Effects were measured under laboratory and station conditions. Humans remain more trusted than Xeno. Further information is classified.
"}
@@ -75,6 +75,17 @@ datum/directive/tau_ceti_needs_women/meets_prerequisites()
datum/directive/tau_ceti_needs_women/directives_complete()
return command_targets.len == count_heads_reassigned() && alien_targets.len == 0
+datum/directive/tau_ceti_needs_women/get_remaining_orders()
+ var/text = ""
+ for(var/head in command_targets)
+ if(!command_targets[head])
+ text += "Remove [head] from a Head Role"
+
+ for(var/id in alien_targets)
+ text += "Terminate [id]"
+
+ return text
+
/hook/reassign_employee/proc/command_reassignments(obj/item/weapon/card/id/id_card)
var/datum/directive/tau_ceti_needs_women/D = get_directive("tau_ceti_needs_women")
if(!D) return 1
diff --git a/code/game/gamemodes/mutiny/directives/terminations_directive.dm b/code/game/gamemodes/mutiny/directives/terminations_directive.dm
index 894db30ca40..f71b4b5e6b0 100644
--- a/code/game/gamemodes/mutiny/directives/terminations_directive.dm
+++ b/code/game/gamemodes/mutiny/directives/terminations_directive.dm
@@ -28,6 +28,21 @@ datum/directive/terminations/initialize()
accounts_to_suspend["[account.account_number]"] = account.suspended
ids_to_terminate+=(H.wear_id)
+datum/directive/terminations/get_remaining_orders()
+ var/text = ""
+ for(var/account_number in accounts_to_suspend)
+ if(!accounts_to_suspend[account_number])
+ text += "Suspend Account #[account_number]"
+
+ for(var/account_number in accounts_to_revoke)
+ if(!accounts_to_revoke[account_number])
+ text += "Revoke Account #[account_number]"
+
+ for(var/id in ids_to_terminate)
+ text += "Terminate [id]"
+
+ return text
+
/hook/revoke_payroll/proc/payroll_directive(datum/money_account/account)
var/datum/directive/terminations/D = get_directive("terminations")
if (!D) return 1
diff --git a/code/game/gamemodes/mutiny/mutiny.dm b/code/game/gamemodes/mutiny/mutiny.dm
index b0b90f6320d..a64525f4c64 100644
--- a/code/game/gamemodes/mutiny/mutiny.dm
+++ b/code/game/gamemodes/mutiny/mutiny.dm
@@ -87,18 +87,29 @@ datum/game_mode/mutiny
"right hand" = slot_r_hand)
proc/equip_head_loyalist()
- var/mob/living/carbon/human/H = head_loyalist.current
- captains_key = new(H)
- H.equip_in_one_of_slots(captains_key, get_equipment_slots())
- H.update_icons()
- H.verbs += /mob/living/carbon/human/proc/recruit_loyalist
+ equip_head(head_loyalist, "loyalist", /mob/living/carbon/human/proc/recruit_loyalist)
proc/equip_head_mutineer()
- var/mob/living/carbon/human/H = head_mutineer.current
- secondary_key = new(H)
- H.equip_in_one_of_slots(secondary_key, get_equipment_slots())
+ equip_head(head_mutineer, "mutineer", /mob/living/carbon/human/proc/recruit_mutineer)
+
+ proc/equip_head(datum/mind/head, faction, proc/recruitment_verb)
+ var/mob/living/carbon/human/H = head.current
+ H << "You are the Head [capitalize(faction)]!"
+ head.special_role = "head_[faction]"
+
+ var/slots = get_equipment_slots()
+ switch(faction)
+ if("loyalist")
+ if(captains_key) del(captains_key)
+ captains_key = new(H)
+ H.equip_in_one_of_slots(captains_key, slots)
+ if("mutineer")
+ if(secondary_key) del(secondary_key)
+ secondary_key = new(H)
+ H.equip_in_one_of_slots(secondary_key, slots)
+
H.update_icons()
- H.verbs += /mob/living/carbon/human/proc/recruit_mutineer
+ H.verbs += recruitment_verb
proc/add_loyalist(datum/mind/M)
add_faction(M, "loyalist", loyalists)
@@ -217,48 +228,6 @@ datum/game_mode/mutiny
return 1
- proc/check_antagonists_ui(admins)
- var/turf/captains_key_loc = captains_key ? captains_key.get_loc_turf() : "Lost or Destroyed"
- var/turf/secondary_key_loc = secondary_key ? secondary_key.get_loc_turf() : "Lost or Destroyed"
- var/txt = {"
- Context:
-
- [current_directive.get_description()]
-
- Orders:
-
- [fluff.get_orders()]
-
-
- Authentication:
- Captain's Key: [captains_key_loc]
- Activate
- Secondary Key: [secondary_key_loc]
- Activate
- EAD: [ead ? ead.get_status() : "Lost or Destroyed"]
- Activate
-
- "}
-
- if(head_loyalist)
- txt += check_role_table("Head Loyalist", list(head_loyalist), admins, 0)
-
- var/list/loyal_crew = loyalists - head_loyalist
- if(loyal_crew.len)
- txt += check_role_table("Loyalists", loyal_crew, admins, 0)
-
- if(head_mutineer)
- txt += check_role_table("Head Mutineer", list(head_mutineer), admins, 0)
-
- var/list/mutiny_crew = mutineers - head_mutineer
- if(mutiny_crew.len)
- txt += check_role_table("Mutineers", mutiny_crew, admins, 0)
-
- if(body_count.len)
- txt += check_role_table("Casualties", body_count, admins, 0)
-
- return txt
-
/datum/game_mode/mutiny/announce()
fluff.announce()
@@ -285,12 +254,7 @@ datum/game_mode/mutiny
return 1
/datum/game_mode/mutiny/post_setup()
- head_loyalist.current << "You are the Head Loyalist!"
- head_loyalist.special_role = "head_loyalist"
equip_head_loyalist()
-
- head_mutineer.current << "You are the Head Mutineer!"
- head_mutineer.special_role = "head_mutineer"
equip_head_mutineer()
loyalists+=head_loyalist
@@ -306,20 +270,6 @@ datum/game_mode/mutiny
reveal_directives()
..()
-/datum/game_mode/mutiny/check_antagonists_topic(href, href_list[])
- switch(href_list["choice"])
- if("activate_captains_key")
- ead.captains_key = 1
- return 1
- if("activate_secondary_key")
- ead.secondary_key = 1
- return 1
- if("activate_ead")
- ead.activated = 1
- return 1
- else
- return 0
-
/mob/living/carbon/human/proc/recruit_loyalist()
set name = "Recruit Loyalist"
set category = "Mutiny"
diff --git a/code/game/gamemodes/mutiny/mutiny_admin.dm b/code/game/gamemodes/mutiny/mutiny_admin.dm
new file mode 100644
index 00000000000..2ba08def2d9
--- /dev/null
+++ b/code/game/gamemodes/mutiny/mutiny_admin.dm
@@ -0,0 +1,83 @@
+/datum/game_mode/mutiny/proc/check_antagonists_ui(admins)
+ var/turf/captains_key_loc = captains_key ? captains_key.get_loc_turf() : "Lost or Destroyed"
+ var/turf/secondary_key_loc = secondary_key ? secondary_key.get_loc_turf() : "Lost or Destroyed"
+ var/remaining_objectives = current_directive.get_remaining_orders()
+ var/txt = {"
+ Context:
+
+ [current_directive.get_description()]
+
+ Orders:
+
+ [fluff.get_orders()]
+
+
+ Remaining Objectives
+
+ [remaining_objectives ? remaining_objectives : "- None
"]
+
+
+ Authentication:
+ Captain's Key: [captains_key_loc]
+ Activate
+ Secondary Key: [secondary_key_loc]
+ Activate
+ EAD: [ead ? ead.get_status() : "Lost or Destroyed"]
+ Activate
+
+ "}
+
+ txt += "Reassign Head Loyalist
"
+ if(head_loyalist)
+ txt += check_role_table("Head Loyalist", list(head_loyalist), admins, 0)
+
+ var/list/loyal_crew = loyalists - head_loyalist
+ if(loyal_crew.len)
+ txt += check_role_table("Loyalists", loyal_crew, admins, 0)
+
+ txt += "Reassign Head Mutineer
"
+ if(head_mutineer)
+ txt += check_role_table("Head Mutineer", list(head_mutineer), admins, 0)
+
+ var/list/mutiny_crew = mutineers - head_mutineer
+ if(mutiny_crew.len)
+ txt += check_role_table("Mutineers", mutiny_crew, admins, 0)
+
+ if(body_count.len)
+ txt += check_role_table("Casualties", body_count, admins, 0)
+
+ return txt
+
+/datum/game_mode/mutiny/check_antagonists_topic(href, href_list[])
+ switch(href_list["choice"])
+ if("activate_captains_key")
+ ead.captains_key = 1
+ return 1
+ if("activate_secondary_key")
+ ead.secondary_key = 1
+ return 1
+ if("activate_ead")
+ ead.activated = 1
+ return 1
+ if("reassign_head_loyalist")
+ var/mob/M = get_reassignment_candidate("Loyalist")
+ if(M)
+ head_loyalist = M.mind
+ equip_head_loyalist()
+ return 1
+ if("reassign_head_mutineer")
+ var/mob/M = get_reassignment_candidate("Mutineer")
+ if(M)
+ head_mutineer = M.mind
+ equip_head_mutineer()
+ return 1
+ else
+ return 0
+
+/datum/game_mode/mutiny/proc/get_reassignment_candidate(faction)
+ var/list/targets[0]
+ for(var/mob/living/carbon/human/H in player_list)
+ if(H.is_ready() && !H.is_dead())
+ targets.Add(H)
+
+ return input("Select a player to lead the [faction] faction.", "Head [faction] reassignment", null) as mob in targets
diff --git a/code/game/gamemodes/mutiny/mutiny_fluff.dm b/code/game/gamemodes/mutiny/mutiny_fluff.dm
index 2ac235c5f9f..dc97e23c9e5 100644
--- a/code/game/gamemodes/mutiny/mutiny_fluff.dm
+++ b/code/game/gamemodes/mutiny/mutiny_fluff.dm
@@ -154,7 +154,7 @@ Both keys are required to activate the Emergency Authentication Device (EAD)<
proc/loyalist_major_victory()
return {"
-NanoTrasen has praised the efforts of Captain [mode.head_loyalist] and loyal members of [their(mode.head_loyalist)] crew, who recently managed to put down a mutiny--amid a local interstellar crisis--aboard the [station_name()], a research station in Tau Ceti.
+NanoTrasen has praised the efforts of Captain [mode.head_loyalist] and loyal members of [their(mode.head_loyalist)] crew, who recently managed to put down a mutiny--amid a local interstellar crisis--aboard the [station_name()], a research station in [system_name()].
The mutiny was spurred by a top secret directive sent to the station, presumably in response to the crisis within the system.
Despite the mutiny, the crew was successful in implementing the directive and activating their on-board emergency authentication device.
[mode.mutineers.len] members of the station's personnel were charged with sedition against the company and if found guilty will be sentenced to life incarceration.
@@ -165,7 +165,7 @@ NanoTrasen will be awarding [mode.loyalists.len] members of the crew with the [l
proc/loyalist_minor_victory()
return {"
-NanoTrasen has praised the efforts of Captain [mode.head_loyalist] and loyal members of [their(mode.head_loyalist)] crew, who recently managed to put down a mutiny--amid a local interstellar crisis--aboard the [station_name()], a research station in Tau Ceti.
+NanoTrasen has praised the efforts of Captain [mode.head_loyalist] and loyal members of [their(mode.head_loyalist)] crew, who recently managed to put down a mutiny--amid a local interstellar crisis--aboard the [station_name()], a research station in [system_name()].
The mutiny was spurred by a top secret directive sent to the station, presumably in response to the crisis within the system.
Despite the mutiny, the crew was successful in implementing the directive. Unfortunately, they failed to notify Central Command of their successes due to a breach in the chain of command.
[mode.mutineers.len] members of the station's personnel were charged with sedition against the Company and if found guilty will be sentenced to life incarceration.
@@ -176,7 +176,7 @@ NanoTrasen will be awarding [mode.loyalists.len] members of the crew with the [l
proc/no_victory()
return {"
-NanoTrasen has been thrust into turmoil following an apparent mutiny by key personnel aboard the [station_name()], a research station in Tau Ceti.
+NanoTrasen has been thrust into turmoil following an apparent mutiny by key personnel aboard the [station_name()], a research station in [system_name()].
The mutiny was spurred by a top secret directive sent to the station, presumably in response to the crisis within the system.
No further information has yet emerged from the station or its crew, who are presumed to be in holding with NanoTrasen investigators.
NanoTrasen officials refuse to comment.
@@ -187,7 +187,7 @@ Sources indicate that [mode.mutineers.len] members of the station's personnel ar
proc/mutineer_minor_victory()
return {"
-Reports have emerged that an impromptu mutiny has taken place, amid a local interstellar crisis, aboard the [station_name()], a research station in Tau Ceti.
+Reports have emerged that an impromptu mutiny has taken place, amid a local interstellar crisis, aboard the [station_name()], a research station in [system_name()].
The mutiny was spurred by a top secret directive sent to the station, presumably in response to the crisis within the system.
Information at present indicates that the top-secret directive--which has since been retracted--was invalid due to a broken authentication code. Members of the crew, including an unidentified Head of Staff, prevented the directive from being accomplished.
[mode.mutineers.len] members of the station's personnel were released from interrogations today, following a mutiny investigation.
@@ -198,7 +198,7 @@ NanoTrasen has reprimanded [mode.loyalists.len] members of the crew for failing
proc/mutineer_major_victory()
return {"
-NanoTrasen has praised the efforts of [mode.head_mutineer.assigned_role] [mode.head_mutineer] and several other members of the crew, who recently seized control of a research station in Tau Ceti--[station_name()]--amid a local interstellar crisis.
+NanoTrasen has praised the efforts of [mode.head_mutineer.assigned_role] [mode.head_mutineer] and several other members of the crew, who recently seized control of a research station in [system_name()]--[station_name()]--amid a local interstellar crisis.
What appears to have been a "legitimate" mutiny was spurred by a top secret directive sent to the station, presumably in response to the crisis within the system.
It has been revealed that the directive was invalid and fraudulent. Company officials have not released a statement about the source of the directive.
Thanks to the efforts of the resistant members of the crew, the directive was not carried out.
@@ -225,7 +225,7 @@ D: Mr. Mitchell, first you send cryptic messages to my office and then you reque
\[Sound of the internal airlock door shutting\]
TM: Do you remember Mallory?
D: Who?
-TM: It's not who, it's what. The computer program we planted in the Tau Ceti communications satellite.
+TM: It's not who, it's what. The computer program we planted in the [system_name()] communications satellite.
D: What is so important about this computer program?
TM: We call her an eavesdropper. Captures network traffic, records it, and forwards the stream to the receiver autonomously.
D: Speak English goddamnit.
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 9eefe35663e..b41decdfde1 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -2004,9 +2004,12 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
holder.icon_state = "hudvampthrall"
if("head_loyalist")
holder.icon_state = "loyalist"
+ if("loyalist")
+ holder.icon_state = "loyalist"
if("head_mutineer")
holder.icon_state = "mutineer"
-
+ if("mutineer")
+ holder.icon_state = "mutineer"
hud_list[SPECIALROLE_HUD] = holder
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index efcd7d1f212..1962de46c82 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -808,7 +808,7 @@ var/list/slot_equipment_priority = list( \
return istype(src, /mob/living/silicon) || get_species() == "Machine"
/mob/proc/is_ready()
- return !!client
+ return client && !!mind
/mob/proc/get_gender()
return gender
@@ -1215,4 +1215,4 @@ mob/proc/yank_out_object()
if(host)
host.ckey = src.ckey
- host << "You are now a mouse. Try to avoid interaction with players, and do not give hints away that you are more than a simple rodent."
\ No newline at end of file
+ host << "You are now a mouse. Try to avoid interaction with players, and do not give hints away that you are more than a simple rodent."
diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index 27d50934019..cfa8d407a9a 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -510,4 +510,4 @@
return client.prefs.gender
/mob/new_player/is_ready()
- return ready && !!client
+ return ready && ..()