diff --git a/baystation12.dme b/baystation12.dme index 1f410e4320f..14398cafa53 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -241,6 +241,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 ca682b42611..e43ca1dc2a9 100644 --- a/code/__HELPERS/names.dm +++ b/code/__HELPERS/names.dm @@ -43,6 +43,9 @@ var/religion_name = null return capitalize(name) +/proc/system_name() + return "Nyx" + /proc/station_name() if (station_name) return station_name @@ -308,4 +311,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 16dcd1de009..43b6a65885c 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 9209ee09db1..0338c8f0676 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 ddcca165e82..ef9fcbffe3b 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 7ff288f4549..873d4aa002b 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 f8da35524ee..43c7238cd35 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 7cf112cdc1f..a5a66c834ee 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 610e994e533..7f3744dcc43 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.Add(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 7f7ebe80fc5..1f3d13c136f 100644 --- a/code/game/gamemodes/mutiny/mutiny.dm +++ b/code/game/gamemodes/mutiny/mutiny.dm @@ -86,18 +86,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) @@ -216,48 +227,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() @@ -284,12 +253,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.Add(head_loyalist) @@ -305,20 +269,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 : "
    1. None
    2. "] +
    +
    +
    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 185e2ef8721..c93a7d67194 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 036a84b8b1a..075c6913294 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1772,6 +1772,14 @@ holder.icon_state = "huddeathsquad" if("Ninja") holder.icon_state = "hudninja" + 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 hud_updateflag = 0 diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 60335b8df2c..73342ba9e36 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -610,7 +610,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 diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index db71474a91b..23b28e77f14 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -443,7 +443,7 @@ return client.prefs.gender /mob/new_player/is_ready() - return ready && !!client + return ready && ..() /mob/new_player/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/alt_name = "",var/italics = 0, var/mob/speaker = null) return