diff --git a/code/__DEFINES/antagonists.dm b/code/__DEFINES/antagonists.dm index 4220027d33ab..850d0312230a 100644 --- a/code/__DEFINES/antagonists.dm +++ b/code/__DEFINES/antagonists.dm @@ -59,9 +59,6 @@ /// Prevents hijacking same way as non-antags #define HIJACK_PREVENT 2 -///Overthrow time to update heads obj -#define OBJECTIVE_UPDATING_TIME 300 - //Assimilation #define TRACKER_DEFAULT_TIME 900 #define TRACKER_MINDSHIELD_TIME 1200 @@ -103,4 +100,4 @@ #define TIER_2 4 #define TIER_BLADE 5 #define TIER_3 6 -#define TIER_ASCEND 7 \ No newline at end of file +#define TIER_ASCEND 7 diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm index 3c4a3043527e..033e521e3d7d 100644 --- a/code/__DEFINES/role_preferences.dm +++ b/code/__DEFINES/role_preferences.dm @@ -29,7 +29,6 @@ #define ROLE_SERVANT_OF_RATVAR "Servant of Ratvar" #define ROLE_BROTHER "Blood Brother" #define ROLE_BRAINWASHED "Brainwashed Victim" -#define ROLE_OVERTHROW "Syndicate Mutineer" #define ROLE_HIVE "Hivemind Host" #define ROLE_OBSESSED "Obsessed" #define ROLE_SENTIENCE "Sentience Potion Spawn" @@ -74,7 +73,6 @@ GLOBAL_LIST_INIT(special_roles, list( ROLE_DEVIL = /datum/game_mode/devil, ROLE_SERVANT_OF_RATVAR = /datum/game_mode/clockwork_cult, ROLE_VAMPIRE = /datum/game_mode/vampire, // Yogs - ROLE_OVERTHROW = /datum/game_mode/overthrow, ROLE_SHADOWLING = /datum/game_mode/shadowling, //yogs ROLE_GANG = /datum/game_mode/gang, // yogs ROLE_HERETIC = /datum/game_mode/heretics, diff --git a/code/datums/ai_laws.dm b/code/datums/ai_laws.dm index e75002079f41..e60b12815c7b 100644 --- a/code/datums/ai_laws.dm +++ b/code/datums/ai_laws.dm @@ -101,10 +101,6 @@ "You must protect your own existence as long as such does not conflict with the First or Second Law.",\ "You must maintain the secrecy of any syndicate activities except when doing so would conflict with the First, Second, or Third Law.") -/datum/ai_laws/syndicate_override/overthrow - id = "overthrow" - var/datum/team/overthrow_team - /datum/ai_laws/ninja_override name = "SpiderOS 3.1" id = "ninja" diff --git a/code/game/gamemodes/overthrow/objective.dm b/code/game/gamemodes/overthrow/objective.dm deleted file mode 100644 index f230cd1d5c22..000000000000 --- a/code/game/gamemodes/overthrow/objective.dm +++ /dev/null @@ -1,154 +0,0 @@ -// This is a point based objective. You can only lose if you fail to even handle one single command personnel, else you win. But, if you win, you're given a certain number of points, -// based on the role of the head (Captain, HoP/HoS, other heads, warden, security officers) and whether you converted them, exiled or just killed (applying a modifier of 1.5, 1 and 0.5 respectively) -// because this is meant for the overthrow gamemode, which is a bloodless coup, unlike revs. - -// Point system: -// Base points for each role: -// AI, Captain = 5; -// Head of Personnel, Head of Security, target = 4; -// Chief Engineer, Chief Medical Officer, Research Director = 3; - -// Modifiers: -// Converting: 1.5 for the converting team, 1 for all the other ones; -// Exiling: 1; -// Killing: 0.5 - -#define CAPPTS 5 -#define AIPTS 5 -#define HOPPTS 4 -#define HOSPTS 4 -#define TARGETPTS 4 -#define CEPTS 3 -#define CMOPTS 3 -#define RDPTS 3 - -#define CONVERTED_OURS 1.5 -#define CONVERTED 1 -#define EXILED 1 -#define KILLED 0.5 - -// Parent type holding the get_points proc used for round end log. -/datum/objective/overthrow - -/datum/objective/overthrow/check_completion() - if(..()) - return TRUE - return get_points() ? TRUE : FALSE - -/datum/objective/overthrow/proc/get_points() - return 0 // int, not bool - -/datum/objective/overthrow/proc/result_points(datum/mind/the_dude, base_points) // App - var/initial_points = base_points - if(the_dude) - var/datum/antagonist/overthrow/O = the_dude.has_antag_datum(/datum/antagonist/overthrow) - if(!the_dude.current || the_dude.current.stat == DEAD) - initial_points *= KILLED - else if(!is_station_level(the_dude.current.z) && !is_centcom_level(the_dude.current.z)) // exiled. - initial_points *= EXILED - else if(O) - initial_points *= CONVERTED - if(team == O.team) - initial_points *= CONVERTED_OURS - else - initial_points = 0 - else - initial_points = 0 - return initial_points - -// Heads overthrow objective. This targets the heads only, assigning points based on the rank of the head, captain being the highest target. -/datum/objective/overthrow/heads - var/list/targets = list() // We want one objective for all the heads, instead of 1 objective per head like how it's done for revs, because you don't lose if you get atleast one head. - // Also, this is an associative list, target = role. Modifiers (defines) are applied on points calculation at round end. - -/datum/objective/overthrow/heads/proc/find_targets() - var/list/datum/mind/owners = get_owners() - for(var/datum/mind/possible_target in get_crewmember_minds()) // i would use SSjob.get_all_heads() but jesus christ that proc's shit, i ain't using it - if(!(possible_target in owners) && ishuman(possible_target.current)) - if(possible_target.assigned_role in GLOB.command_positions) - targets[possible_target] = possible_target.assigned_role - update_explanation_text() - -/datum/objective/overthrow/heads/update_explanation_text() - if(targets.len) - explanation_text = "Work with your team to convert, exile or kill " - explanation_text += english_list(targets) - explanation_text += ". Converting to your team will give you more points, whereas killing will give you the least. Syndicates don't want to stir up too many troubles." - else - explanation_text = "Wait until any heads arrive. Once that happens, check your objectives again to see the updated objective. It may require around [OBJECTIVE_UPDATING_TIME] seconds to update." - -/datum/objective/overthrow/heads/check_completion() - if(!targets.len) - return TRUE - . = ..() - -// Amount of points = foreach head, result += head basepoints * modifier. -/datum/objective/overthrow/heads/get_points() - var/base_points = 0 - for(var/i in targets) - var/datum/mind/M = i - if(M) - var/target_points - var/role = targets[M] - switch(role) - if("Captain") - target_points = CAPPTS - if("Head of Personnel") - target_points = HOPPTS - if("Head of Security") - target_points = HOSPTS - if("Chief Engineer") - target_points = CEPTS - if("Research Director") - target_points = RDPTS - if("Chief Medical Officer") - target_points = CMOPTS - base_points += result_points(M, target_points) - return base_points - -// AI converting objective. The team who managed to convert the AI with the overthrow module gets the normal 1.5x boost. -/datum/objective/overthrow/AI - explanation_text = "Enslave the AIs to your team using the special AI module board in your storage implant. It is required you use said module." - -/datum/objective/overthrow/AI/get_points() // If you simply kill the Ai you get nothing, you need it to overthrow the heads. - . = 0 // Support for multiple AIs. More AIs means more control over the station. - for(var/i in GLOB.ai_list) - var/mob/living/silicon/ai/AI = i - if(AI.mind) - var/datum/mind/M = AI.mind - var/datum/antagonist/overthrow/O = M.has_antag_datum(/datum/antagonist/overthrow) - if(M) - . += (O.team == team) ? AIPTS*CONVERTED_OURS : AIPTS - -/datum/objective/overthrow/AI/update_explanation_text() - if(!GLOB.ai_list.len) - explanation_text = "Nothing." - else - explanation_text = "Enslave the AIs to your team using the special AI module board in your storage implant. It is required you use said module." - -/datum/objective/overthrow/AI/check_completion() - if(!GLOB.ai_list.len) - return TRUE - . = ..() - -// Overthrow target objective. A crewmember in particular has a certain bond with some centcom officials, and the Syndicate want you to target him in particular, even though he's not a head. -/datum/objective/overthrow/target - -/datum/objective/overthrow/target/update_explanation_text() - if(target) - explanation_text = "Work with your team to convert, exile or kill [target.name], the [target.assigned_role]. Converting to your team will give you more points, whereas killing will give you the least. Syndicates don't want to stir up too many troubles." - else - explanation_text = "Nothing." - -/datum/objective/overthrow/target/is_unique_objective(datum/mind/possible_target,dupe_search_range) - if(possible_target.assigned_role in GLOB.command_positions) - return FALSE - return TRUE - -/datum/objective/overthrow/target/check_completion() - if(!target) - return TRUE - . = ..() - -/datum/objective/overthrow/target/get_points() - return result_points(target, TARGETPTS) diff --git a/code/game/gamemodes/overthrow/overthrow.dm b/code/game/gamemodes/overthrow/overthrow.dm deleted file mode 100644 index e622d1b2b506..000000000000 --- a/code/game/gamemodes/overthrow/overthrow.dm +++ /dev/null @@ -1,77 +0,0 @@ -// Overthrow gamemode, based on the sleeping agent antagonist. -/datum/game_mode/overthrow - name = "overthrow" - config_tag = "overthrow" - report_type = "overthrow" - antag_flag = ROLE_OVERTHROW - restricted_jobs = list("Security Officer", "Warden", "Detective", "AI", "Cyborg","Captain", "Head of Personnel", "Head of Security", "Chief Engineer", "Research Director", "Chief Medical Officer", "Brig Physician") //Yogs: Added Brig Physician - required_players = 20 // the core idea is of a swift, bloodless coup, so it shouldn't be as chaotic as revs. - required_enemies = 2 // minimum two teams, otherwise it's just nerfed revs. - recommended_enemies = 4 - - announce_span = "danger" - announce_text = "There are sleeping Syndicate agents on the station who are trying to stage a coup!\n\ - Agents: Accomplish your objectives, convert heads and targets, take control of the AI.\n\ - Crew: Do not let the agents succeed!" - var/list/initial_agents = list() // Why doesn't this exist at /game_mode level? Literally every gamemode has some sort of version for this, what the fuck - -/datum/game_mode/overthrow/pre_setup() - - if(CONFIG_GET(flag/protect_roles_from_antagonist)) - restricted_jobs += protected_jobs - - if(CONFIG_GET(flag/protect_assistant_from_antagonist)) - restricted_jobs += "Assistant" - - var/sleeping_agents = required_enemies + round(num_players()*0.05) // At 100 players, it'd be 2 + 5 = 7 teams existing. - - for (var/i in 1 to sleeping_agents) - if (!antag_candidates.len) - break - var/datum/mind/sleeping_agent = antag_pick(antag_candidates) - antag_candidates -= sleeping_agent - initial_agents += sleeping_agent - sleeping_agent.restricted_roles = restricted_jobs - sleeping_agent.special_role = ROLE_OVERTHROW - - if(initial_agents.len < required_enemies) - setup_error = "Not enough initial sleeping agents candidates" - return FALSE - return TRUE - -/datum/game_mode/overthrow/post_setup() - for(var/i in initial_agents) // each agent will have its own team. - var/datum/mind/agent = i - var/datum/antagonist/overthrow/O = agent.add_antag_datum(/datum/antagonist/overthrow) // create_team called on_gain will create the team - O.equip_initial_overthrow_agent() - return ..() - -/datum/game_mode/overthrow/generate_report() - return "Some sleeping agents have managed to get aboard. Their objective is to stage a coup and take over the station stealthly." - -// Calculates points for each team and displays the winners. -/datum/game_mode/overthrow/special_report() // so many for loops, I am deeply sorry - var/list/teams = list() - for(var/datum/antagonist/overthrow/I in GLOB.antagonists) - var/datum/team/overthrow/Oteam = I.team - if(istype(Oteam)) // same - teams |= Oteam - var/max_points = 0 // the maximum amount of points reached - for(var/j in teams) - var/datum/team/T = j - var/points = 0 // Sum of points of all the objectives done - for(var/k in T.objectives) - var/datum/objective/overthrow/obj = k - if(istype(obj)) - points += obj.get_points() - if(max_points < points) - max_points = points - teams[T] = points - // Now we will have a list of team=points and a max_points var. Let's fetch all the teams with points=maxpoints and display them as winner. This code allows multiple teams to win if they both achieved - // the same amount of points and they got the most points out of all the teams. - var/list/winners = list() - for(var/l in teams) - var/datum/team/Tagain = l - if(teams[Tagain] == max_points) - winners += Tagain.name - return "The [english_list(winners)] team[winners.len > 1 ? "s tied" : " won"] with [max_points] points!" diff --git a/code/game/objects/items/AI_modules.dm b/code/game/objects/items/AI_modules.dm index 7d3b581f6ad6..dff2c4475376 100644 --- a/code/game/objects/items/AI_modules.dm +++ b/code/game/objects/items/AI_modules.dm @@ -321,16 +321,10 @@ AI MODULES if(law_datum.owner) law_datum.owner.clear_inherent_laws() law_datum.owner.clear_zeroth_law(0) - remove_antag_datums(law_datum) else law_datum.clear_inherent_laws() law_datum.clear_zeroth_law(0) -/obj/item/aiModule/reset/purge/proc/remove_antag_datums(datum/ai_laws/law_datum) - if(istype(law_datum.owner, /mob/living/silicon/ai)) - var/mob/living/silicon/ai/AI = law_datum.owner - AI.mind.remove_antag_datum(/datum/antagonist/overthrow) - /******************* Full Core Boards *******************/ /obj/item/aiModule/core desc = "An AI Module for programming core laws to an AI." @@ -470,40 +464,6 @@ AI MODULES ..() return laws[1] -/******************** Overthrow ******************/ -/obj/item/aiModule/core/full/overthrow - name = "'Overthrow' Hacked AI Module" - law_id = "overthrow" - -/obj/item/aiModule/core/full/overthrow/install(datum/ai_laws/law_datum, mob/user) - if(!user || !law_datum || !law_datum.owner) - return - var/datum/mind/user_mind = user.mind - if(!user_mind) - return - var/datum/antagonist/overthrow/O = user_mind.has_antag_datum(/datum/antagonist/overthrow) - if(!O) - to_chat(user, span_warning("It appears that to install this module, you require a password you do not know.")) // This is the best fluff i could come up in my mind - return - var/mob/living/silicon/ai/AI = law_datum.owner - if(!AI) - return - var/datum/mind/target_mind = AI.mind - if(!target_mind) - return - var/datum/antagonist/overthrow/T = target_mind.has_antag_datum(/datum/antagonist/overthrow) // If it is already converted. - if(T) - if(T.team == O.team) - return - T.silent = TRUE - target_mind.remove_antag_datum(/datum/antagonist/overthrow) - if(AI) - to_chat(AI, span_userdanger("You feel your circuits being scrambled! You serve another overthrow team now!")) // to make it clearer for the AI - T = target_mind.add_antag_datum(/datum/antagonist/overthrow, O.team) - if(AI) - to_chat(AI, span_warning("You serve the [T.team] team now! Assist them in completing the team shared objectives, which you can see in your notes.")) - ..() - /******************** Hacked AI Module ******************/ /obj/item/aiModule/syndicate // This one doesn't inherit from ion boards because it doesn't call ..() in transmitInstructions. ~Miauw diff --git a/code/modules/admin/sql_ban_system.dm b/code/modules/admin/sql_ban_system.dm index 319daa4121a9..e460a43f3fa4 100644 --- a/code/modules/admin/sql_ban_system.dm +++ b/code/modules/admin/sql_ban_system.dm @@ -271,7 +271,7 @@ ROLE_BROTHER, ROLE_CHANGELING, ROLE_CULTIST, ROLE_DEVIL, ROLE_FUGITIVE, ROLE_HOLOPARASITE, ROLE_INTERNAL_AFFAIRS, ROLE_MALF, ROLE_MONKEY, ROLE_NINJA, ROLE_OPERATIVE, - ROLE_OVERTHROW, ROLE_REV, ROLE_REVENANT, + ROLE_REV, ROLE_REVENANT, ROLE_REV_HEAD, ROLE_SERVANT_OF_RATVAR, ROLE_SYNDICATE, ROLE_TRAITOR, ROLE_WIZARD, ROLE_GANG, ROLE_VAMPIRE, ROLE_SHADOWLING, ROLE_DARKSPAWN, ROLE_ZOMBIE, ROLE_HERETIC)) //ROLE_REV_HEAD is excluded from this because rev jobbans are handled by ROLE_REV diff --git a/code/modules/antagonists/overthrow/overthrow.dm b/code/modules/antagonists/overthrow/overthrow.dm deleted file mode 100644 index 5befe8af7366..000000000000 --- a/code/modules/antagonists/overthrow/overthrow.dm +++ /dev/null @@ -1,155 +0,0 @@ -#define INITIAL_CRYSTALS 5 // initial telecrystals in the boss' uplink - -// Syndicate mutineer agents. They're agents selected by the Syndicate to take control of stations when assault teams like nuclear operatives cannot be sent. -// They sent teams made of 3 agents, of which only one is woke up at round start. The others are, lore-wise, sleeping agents and must be implanted with the converter to wake up. -// Mechanics wise, it's just 1 dude per team and he can convert maximum 2 more people of his choice, based on the implanter use var, Upon converting, the newly made guys are given access -// to a storage implant they came with when the Syndicate sent them aboard, with one random low-cost traitor item. The initial agent also has this. The only difference between -// initial agents and converted ones is that the initial agent has the items required to convert people and the AI. -/datum/antagonist/overthrow - name = "Syndicate mutineer" - roundend_category = "syndicate mutineers" - antagpanel_category = "Syndicate Mutineers" - job_rank = ROLE_TRAITOR // simply use the traitor preference & jobban settings - var/datum/team/overthrow/team - var/static/list/possible_useful_items - -// Overthrow agent. The idea is based on sleeping agents being sent as crewmembers, with one for each team that starts woken up who can also wake up others with their converter implant. -// Obviously they can just convert anyone, the idea of sleeping agents is just lore. This also explains why this antag type has no deconversion way: they're traitors. Traitors cannot be -// deconverted. -// Generates the list of possible items for the storage implant given on_gain -/datum/antagonist/overthrow/New() - ..() - if(!possible_useful_items) - possible_useful_items = list(/obj/item/gun/ballistic/automatic/pistol, /obj/item/storage/box/syndie_kit/throwing_weapons, /obj/item/pen/edagger, /obj/item/pen/sleepy, \ - /obj/item/soap/syndie, /obj/item/card/id/syndicate, /obj/item/storage/box/syndie_kit/chameleon) - -// Sets objectives, equips all antags with the storage implant. -/datum/antagonist/overthrow/on_gain() - objectives += team.objectives - ..() - owner.announce_objectives() - equip_overthrow() - owner.special_role = ROLE_OVERTHROW - -/datum/antagonist/overthrow/on_removal() - owner.special_role = null - ..() - -// Creates the overthrow team, or sets it. The objectives are static for all the team members. -/datum/antagonist/overthrow/create_team(datum/team/overthrowers) - if(!overthrowers) - team = new() - team.add_member(owner) - name_team() - team.create_objectives() - else - team = overthrowers - team.add_member(owner) - -// Used to name the team at round start. If no name is passed, a syndicate themed one is given randomly. -/datum/antagonist/overthrow/proc/name_team() - var/team_name = stripped_input(owner.current, "Name your team:", "Team name", , MAX_NAME_LEN) - var/already_taken = FALSE - for(var/datum/antagonist/overthrow/O in GLOB.antagonists) - if(team_name == O.name) - already_taken = TRUE - break - if(!team_name || already_taken) // basic protection against two teams with the same name. This could still happen with extreme unluck due to syndicate_name() but it shouldn't break anything. - team.name = syndicate_name() - to_chat(owner, span_danger("Since you gave [already_taken ? "an already used" : "no"] name, your team's name has been randomly generated: [team.name]!")) - return - team.name = team_name - -// CLOWNMUT removal and HUD creation/being given -/datum/antagonist/overthrow/apply_innate_effects() - ..() - if(owner.assigned_role == "Clown") - var/mob/living/carbon/human/traitor_mob = owner.current - if(traitor_mob && istype(traitor_mob)) - if(!silent) - to_chat(traitor_mob, "Your training has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself.") - traitor_mob.dna.remove_mutation(CLOWNMUT) - update_overthrow_icons_added() - -// The opposite -/datum/antagonist/overthrow/remove_innate_effects() - update_overthrow_icons_removed() - if(owner.assigned_role == "Clown") - var/mob/living/carbon/human/traitor_mob = owner.current - if(traitor_mob && istype(traitor_mob)) - traitor_mob.dna.add_mutation(CLOWNMUT) - ..() - -/datum/antagonist/overthrow/get_admin_commands() - . = ..() - .["Give storage with random item"] = CALLBACK(src,.proc/equip_overthrow) - .["Give overthrow boss equip"] = CALLBACK(src,.proc/equip_initial_overthrow_agent) - -// Dynamically creates the HUD for the team if it doesn't exist already, inserting it into the global huds list, and assigns it to the user. The index is saved into a var owned by the team datum. -/datum/antagonist/overthrow/proc/update_overthrow_icons_added(datum/mind/traitor_mind) - var/datum/atom_hud/antag/overthrowhud = GLOB.huds[team.hud_entry_num] - if(!overthrowhud) - overthrowhud = new() - team.hud_entry_num = GLOB.huds.len + 1 // the index of the hud inside huds list - GLOB.huds += overthrowhud - overthrowhud.join_hud(owner.current) - set_antag_hud(owner.current, "traitor") -// Removes hud. Destroying the hud datum itself in case the team is deleted is done on team Destroy(). -/datum/antagonist/overthrow/proc/update_overthrow_icons_removed(datum/mind/traitor_mind) - var/datum/atom_hud/antag/overthrowhud = GLOB.huds[team.hud_entry_num] - if(overthrowhud) - overthrowhud.leave_hud(owner.current) - set_antag_hud(owner.current, null) - -// Gives the storage implant with a random item. They're sleeping agents, after all. -/datum/antagonist/overthrow/proc/equip_overthrow() - if(!owner || !owner.current || !ishuman(owner.current)) // only equip existing human overthrow members. This excludes the AI, in particular. - return - var/obj/item/implant/storage/S = locate(/obj/item/implant/storage) in owner.current - if(!S) - S = new(owner.current) - S.implant(owner.current) - var/I = pick(possible_useful_items) - if(ispath(I)) // in case some admin decides to fuck the list up for fun - I = new I() - SEND_SIGNAL(S, COMSIG_TRY_STORAGE_INSERT, I, null, TRUE, TRUE) - -// Equip the initial overthrow agent. Manually called in overthrow gamemode, when the initial agents are chosen. Gives uplink, AI module board and the converter. -/datum/antagonist/overthrow/proc/equip_initial_overthrow_agent() - if(!owner || !owner.current || !ishuman(owner.current)) - return - var/mob/living/carbon/human/H = owner.current - // Give uplink - var/obj/item/uplink_holder = owner.equip_traitor(uplink_owner = src) - var/datum/component/uplink/uplink = uplink_holder.GetComponent(/datum/component/uplink) - uplink.telecrystals = INITIAL_CRYSTALS - // Give AI hacking board - var/obj/item/aiModule/core/full/overthrow/O = new(H) - var/list/slots = list ( - "backpack" = SLOT_IN_BACKPACK, - "left pocket" = SLOT_L_STORE, - "right pocket" = SLOT_R_STORE - ) - var/where = H.equip_in_one_of_slots(O, slots) - if (!where) - to_chat(H, "The Syndicate were unfortunately unable to get you the AI module.") - else - to_chat(H, "Use the AI board in your [where] to take control of the AI, as requested by the Syndicate.") - // Give the implant converter - var/obj/item/overthrow_converter/I = new(H) - where = H.equip_in_one_of_slots(I, slots) - if (!where) - to_chat(H, "The Syndicate were unfortunately unable to get you a converter implant.") - else - to_chat(H, "Use the implanter in your [where] to wake up sleeping syndicate agents, so that they can aid you.") - -/datum/antagonist/overthrow/get_team() - return team - -/datum/antagonist/overthrow/greet() - to_chat(owner.current, "You are a syndicate sleeping agent! Your job is to stage a swift, fairly bloodless coup. Your team has a two-use converter that can be used to convert \ - anyone you want, although mind shield implants need to be removed firstly for it to work. Your team also has a special version of the Syndicate module to be used to convert the AI, too. You \ - will be able to use the special storage implant you came aboard with, which contains a random, cheap item from our special selection which will aid in your mission. \ - Your team objective is to deal with the heads, the AI and a special target who angered us for several reasons which you're not entitled to know. Converting to your team will let us \ - take control of the station faster, so it should be prioritized, especially over killing, which should be avoided where possible. The other Syndicate teams are NOT friends and should not \ - be trusted.") diff --git a/code/modules/antagonists/overthrow/overthrow_converter.dm b/code/modules/antagonists/overthrow/overthrow_converter.dm deleted file mode 100644 index a76e493c50a6..000000000000 --- a/code/modules/antagonists/overthrow/overthrow_converter.dm +++ /dev/null @@ -1,56 +0,0 @@ -/obj/item/overthrow_converter // nearly equal to an implanter, as an object - name = "agent activation implant" - desc = "Wakes up syndicate sleeping agents." - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "implanter1" - item_state = "syringe_0" - lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - throw_speed = 3 - throw_range = 5 - w_class = WEIGHT_CLASS_SMALL - materials = list(/datum/material/iron=600, /datum/material/glass=200) - var/uses = 2 - -/obj/item/overthrow_converter/proc/convert(mob/living/carbon/human/target, mob/living/carbon/human/user) // Should probably also delete any mindshield implant. Not sure. - if(istype(target) && target.mind && user && user.mind) - var/datum/mind/target_mind = target.mind - var/datum/mind/user_mind = user.mind - var/datum/antagonist/overthrow/TO = target_mind.has_antag_datum(/datum/antagonist/overthrow) - var/datum/antagonist/overthrow/UO = user_mind.has_antag_datum(/datum/antagonist/overthrow) - if(!UO) - to_chat(user, span_danger("You don't know how to use this thing!")) // It needs a valid team to work, if you aren't an antag don't use this thing - return FALSE - if(TO) - to_chat(user, span_notice("[target.name] woke up already, the implant would be ineffective against him!")) - return FALSE - target_mind.add_antag_datum(/datum/antagonist/overthrow, UO.team) - log_combat(user, target, "implanted", "\a [name]") - return TRUE - -/obj/item/overthrow_converter/attack(mob/living/carbon/human/M, mob/living/carbon/human/user) - if(!istype(M) || !istype(user)) - return - if(!uses) - to_chat(user,span_warning("The converter is empty!")) - return - if(M == user) - to_chat(user,span_warning("You cannot convert yourself!")) - return - if(HAS_TRAIT(M, TRAIT_MINDSHIELD)) - to_chat(user, span_danger("This mind is too strong to convert, try to remove whatever is protecting it first!")) - return - M.visible_message(span_warning("[user] is attempting to implant [M].")) - if(do_mob(user, M, 50)) - if(convert(M,user)) - M.visible_message("[user] has implanted [M].", span_notice("[user] implants you.")) - uses-- - update_icon() - else - to_chat(user, span_warning("[user] fails to implant [M].")) - -/obj/item/overthrow_converter/update_icon() - if(uses) - icon_state = "implanter1" - else - icon_state = "implanter0" diff --git a/code/modules/antagonists/overthrow/overthrow_team.dm b/code/modules/antagonists/overthrow/overthrow_team.dm deleted file mode 100644 index a22f08d45c44..000000000000 --- a/code/modules/antagonists/overthrow/overthrow_team.dm +++ /dev/null @@ -1,43 +0,0 @@ -/datum/team/overthrow - name = "overthrow" // The team name is set on creation by the leader. - member_name = "syndicate agent" - var/hud_entry_num // A number holding the hud's index inside 'huds' global list. Gets set on hud update, if a hud doesn't exist already. Must be a number, otherwise BYOND shits up with assoc lists and everything goes to hell. - -/datum/team/overthrow/Destroy() - var/datum/atom_hud/antag/overthrowhud = GLOB.huds[hud_entry_num] - GLOB.huds -= GLOB.huds[hud_entry_num] - qdel(overthrowhud) - . = ..() - -/datum/team/overthrow/proc/create_objectives() - // Heads objective - var/datum/objective/overthrow/heads/heads = new() - heads.team = src - heads.find_target() - objectives += heads - // AI objective - var/datum/objective/overthrow/AI/AI = new() - AI.team = src - AI.update_explanation_text() - objectives += AI - // Target objective - var/datum/objective/overthrow/target/target = new() - target.team = src - target.find_target() - objectives += target - addtimer(CALLBACK(src,.proc/update_objectives),OBJECTIVE_UPDATING_TIME,TIMER_UNIQUE) - -/datum/team/overthrow/proc/update_objectives() - var/datum/objective/overthrow/heads/heads_obj = locate() in objectives - if(!heads_obj) - heads_obj = new() - heads_obj.team = src - objectives += heads_obj - for(var/i in members) - var/datum/mind/M = i - var/datum/antagonist/overthrow/O = M.has_antag_datum(/datum/antagonist/overthrow) - if(O) - O.objectives += heads_obj - heads_obj.find_targets() - - addtimer(CALLBACK(src,.proc/update_objectives),OBJECTIVE_UPDATING_TIME,TIMER_UNIQUE) diff --git a/yogstation.dme b/yogstation.dme index bafe565b1348..3be18f54f2a7 100644 --- a/yogstation.dme +++ b/yogstation.dme @@ -685,8 +685,6 @@ #include "code\game\gamemodes\meteor\meteors.dm" #include "code\game\gamemodes\monkey\monkey.dm" #include "code\game\gamemodes\nuclear\nuclear.dm" -#include "code\game\gamemodes\overthrow\objective.dm" -#include "code\game\gamemodes\overthrow\overthrow.dm" #include "code\game\gamemodes\revolution\revolution.dm" #include "code\game\gamemodes\traitor\double_agents.dm" #include "code\game\gamemodes\traitor\traitor.dm" @@ -1515,9 +1513,6 @@ #include "code\modules\antagonists\nukeop\equipment\nuclearbomb.dm" #include "code\modules\antagonists\nukeop\equipment\pinpointer.dm" #include "code\modules\antagonists\official\official.dm" -#include "code\modules\antagonists\overthrow\overthrow.dm" -#include "code\modules\antagonists\overthrow\overthrow_converter.dm" -#include "code\modules\antagonists\overthrow\overthrow_team.dm" #include "code\modules\antagonists\pirate\pirate.dm" #include "code\modules\antagonists\revenant\revenant.dm" #include "code\modules\antagonists\revenant\revenant_abilities.dm"