Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] Overthrow gamemode #39818

Closed
wants to merge 81 commits into from
Closed
Show file tree
Hide file tree
Changes from 7 commits
Commits
Show all changes
81 commits
Select commit Hold shift + click to select a range
db9ccb4
Initial draft of the overthrow gamemode
Carbonhell Aug 9, 2018
41a77ff
Adds more wiki books/manuals
81Denton Aug 11, 2018
ba352c4
renamed atmos manual, added toxins manual suicide
81Denton Aug 12, 2018
0def32c
[DNM] Adds more destination tagger locations
81Denton Aug 12, 2018
d6528b1
Merge remote-tracking branch 'tgstation/master' into disposal_destina…
81Denton Aug 12, 2018
726e9e8
Properly fixes Delta mail sorting
81Denton Aug 13, 2018
38a7120
adds sortType commentary
81Denton Aug 13, 2018
6b9dbac
Adds det office junctions
81Denton Aug 13, 2018
0b82b29
hhhh
81Denton Aug 17, 2018
1aafb67
Fix freezers which start on appearing on when off
SpaceManiac Aug 19, 2018
2fbfdd0
Handle shuttle registration from inside the template
ninjanomnom Aug 20, 2018
8a2adfe
Fixes syringe injection logging for non-mobs.
AnturK Aug 20, 2018
f7d3bd2
Fixes flash logging for emp/remote activation.
AnturK Aug 20, 2018
c007c50
Minor puzzle performance improvement
AnturK Aug 20, 2018
99e80e9
Fixes equipping procs and an objective runtime
Carbonhell Aug 20, 2018
60f0fbe
Initial draft of the overthrow gamemode
Carbonhell Aug 9, 2018
b427efe
Fixes equipping procs and an objective runtime
Carbonhell Aug 20, 2018
3340139
Merge branch 'tgcode/overthrow' of https://github.com/Carbonhell/Hipp…
Carbonhell Aug 20, 2018
7c2f4db
Fixes logging compile error
Carbonhell Aug 20, 2018
0618242
Clean up bar sign code (#39787)
SpaceManiac Aug 20, 2018
b10d2d6
hmm
81Denton Aug 20, 2018
8a2ec0d
Merge remote-tracking branch 'tgstation/master' into disposal_destina…
81Denton Aug 20, 2018
c98126a
Adds some basic admin commands
Carbonhell Aug 20, 2018
03ed4b7
I love me some map merge conflicts
81Denton Aug 20, 2018
23f652f
Fix multitools hitting SSUs (#39780)
Anonmare Aug 20, 2018
ac86f84
Merge pull request #39758 from 81Denton/disposal_destinations_v3
Cyberboss Aug 20, 2018
f9d5c29
Automatic changelog generation for PR #39758 [ci skip]
tgstation-server Aug 20, 2018
71f321c
Automatic changelog compile, [ci skip]
tgstation-server Aug 20, 2018
f2d47b8
Slash SSatmos init time by 93%
SpaceManiac Aug 21, 2018
ada9f45
Automatic changelog compile, [ci skip]
tgstation-server Aug 21, 2018
f3b6776
Fix the hunger alert appearing forever (#39807)
Aug 21, 2018
5c6d912
Automatic changelog generation for PR #39807 [ci skip]
tgstation-server Aug 21, 2018
4032132
Fix experimental cloners mixing up ckeys and names (#39804)
silicons Aug 21, 2018
aa93562
Fix tank temperature check checking pressure instead (#39805)
intrnlerr Aug 21, 2018
89a3e26
Automatic changelog generation for PR #39805 [ci skip]
tgstation-server Aug 21, 2018
7a52e44
Add ore silo examine message, add it to runtimestation (#39792)
81Denton Aug 21, 2018
b485deb
Fixes Meta disposals junction
81Denton Aug 21, 2018
7a0957e
Merge pull request #39826 from AutomaticFrenzy/patch/atmos-init
Cyberboss Aug 21, 2018
d8e939b
Automatic changelog generation for PR #39826 [ci skip]
tgstation-server Aug 21, 2018
bd5ce57
Merge pull request #39812 from AnturK/puzzleperf
Cyberboss Aug 21, 2018
dbee390
Merge pull request #39803 from AutomaticFrenzy/patch/freezers
Cyberboss Aug 21, 2018
56e419a
Automatic changelog generation for PR #39803 [ci skip]
tgstation-server Aug 21, 2018
7c36214
Removes security mode checks (#39790)
Cyberboss Aug 21, 2018
01823ce
Merge pull request #39806 from ninjanomnom/template-registration
Cyberboss Aug 21, 2018
263a723
Automatic changelog generation for PR #39806 [ci skip]
tgstation-server Aug 21, 2018
e470c96
Merge pull request #39809 from AnturK/syringeinjectlogfix
Cyberboss Aug 21, 2018
b2c534e
Merge pull request #39810 from AnturK/flashwithoutuser
Cyberboss Aug 21, 2018
c6feb1d
henk (#39841)
vuonojenmustaturska Aug 21, 2018
2ec9da6
Merge pull request #39837 from 81Denton/god-dangit-bobby
optimumtact Aug 21, 2018
ae7ab84
Make the inventory helper overlay less impactful (#39824)
optimumtact Aug 22, 2018
73a62c5
Automatic changelog generation for PR #39824 [ci skip]
tgstation-server Aug 22, 2018
f3130df
Copy spritesheet files to the cache rather than persisting them (#39802)
SpaceManiac Aug 22, 2018
85c1fb9
Removes now obsolete floorgrime path and icon (#39816)
WJohn Aug 22, 2018
b54895f
fix rankchange button in player panel (#39834)
Jordie0608 Aug 22, 2018
ea4a155
Automatic changelog compile, [ci skip]
tgstation-server Aug 22, 2018
1f48059
Allows video camera circuits to be seen through networks aside from t…
BlueNothing Aug 22, 2018
61dcd3c
Automatic changelog generation for PR #39657 [ci skip]
tgstation-server Aug 22, 2018
0df2bbc
IC GPS Update (#39630)
PKPenguin321 Aug 22, 2018
a49da6c
Automatic changelog generation for PR #39630 [ci skip]
tgstation-server Aug 22, 2018
76518c6
/mob/dead no longer has a throwforce
MrStonedOne Aug 22, 2018
47a4cf2
Merge pull request #39859 from tgstation/MrStonedOne-patch-2
Cyberboss Aug 22, 2018
39a07a7
Automatic changelog compile, [ci skip]
tgstation-server Aug 22, 2018
d60cb8f
Fix various things not returning an initialize hint (#39843)
SpaceManiac Aug 22, 2018
d2f7b33
isnum() checks for squeak component initialisation (#39847)
Aug 23, 2018
d5f7700
Fix getrev runtime for the billionth time (#39845)
Cyberboss Aug 23, 2018
f7cfb2b
Automatic changelog compile, [ci skip]
tgstation-server Aug 23, 2018
2f38918
Make radiation waves return QDEL_HINT_IWILLGC (#39851)
ninjanomnom Aug 23, 2018
c94cc03
special_role, hud deletion, typofix, owner set and blownup checks
Carbonhell Aug 23, 2018
cfa6563
Initial draft of the overthrow gamemode
Carbonhell Aug 9, 2018
782f5fc
Fixes equipping procs and an objective runtime
Carbonhell Aug 20, 2018
90e72f8
Initial draft of the overthrow gamemode
Carbonhell Aug 9, 2018
7a33344
Fixes equipping procs and an objective runtime
Carbonhell Aug 20, 2018
beffb80
Fixes logging compile error
Carbonhell Aug 20, 2018
fbca9c9
Adds some basic admin commands
Carbonhell Aug 20, 2018
f8aebc5
special_role, hud deletion, typofix, owner set and blownup checks
Carbonhell Aug 23, 2018
31a7b28
what the fuck even happened here
Carbonhell Aug 23, 2018
0884d09
Fixes implants, roundend log and objectives
Carbonhell Aug 23, 2018
d65e268
i beg you, unfuck yourself
Carbonhell Aug 23, 2018
5de239c
Maybe resolves the conflicts...?
Carbonhell Aug 23, 2018
5bbe1aa
will this work
Carbonhell Aug 23, 2018
0100765
go away useless changes
Carbonhell Aug 23, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 3 additions & 0 deletions code/datums/ai_laws.dm
Expand Up @@ -84,6 +84,9 @@
"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" // used in end round checks

/datum/ai_laws/ninja_override
name = "SpiderOS 3.1"
id = "ninja"
Expand Down
2 changes: 1 addition & 1 deletion code/datums/mind.dm
Expand Up @@ -247,7 +247,6 @@
var/mob/living/carbon/human/traitor_mob = current
if (!istype(traitor_mob))
return
. = TRUE

var/list/all_contents = traitor_mob.GetAllContents()
var/obj/item/pda/PDA = locate() in all_contents
Expand Down Expand Up @@ -295,6 +294,7 @@
to_chat(traitor_mob, "Unfortunately, [employer] wasn't able to get you an Uplink.")
. = 0
else
. = uplink_loc
uplink_loc.AddComponent(/datum/component/uplink, traitor_mob.key)
var/unlock_note

Expand Down
121 changes: 121 additions & 0 deletions code/game/gamemodes/overthrow/objective.dm
@@ -0,0 +1,121 @@
// 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;
// Warden = 2;
// Security Officer = 1

// 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 WARDENPTS 2
#define SECPTS 1

#define CONVERTED_OURS 1.5
#define CONVERTED 1
#define EXILED 1
#define KILLED 0.5

/datum/objective/ovethrow_heads
var/list/targets = list() // we want one objective for all the heads, instead of 1 objective per head, because you don't actually "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/ovethrow_heads/proc/find_targets()
var/list/datum/mind/owners = get_owners()
for(var/datum/mind/possible_target in get_crewmember_minds())
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/ovethrow_heads/update_explanation_text()
explanation_text = "Convert, exile or kill "
explanation_text += targets.Join(",")
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."

/datum/objective/ovethrow_heads/check_completion() // This won't return a boolean as usual, but the amount of points earned.
var/base_points = 0
for(var/i in targets)
var/datum/mind/M = i
if(M && M.current)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Blown up don't count ?

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
// modifiers
var/datum/antagonist/overthrow/O = M.has_antag_datum(/datum/antagonist/overthrow)
if(M.current.stat == DEAD) // yeah, you gotta defend him even if you converted him
target_points *= KILLED
else if(!is_station_level(M.current.z) && !is_centcom_level(M.current.z)) // exiled.
target_points *= EXILED
else if(O) //dude's alive, on station/centcom and converted, nice
target_points *= CONVERTED // doesn't matter to which team
if(team == O.team) // converted to our team, nice
target_points *= CONVERTED_OURS
else // you didn't do anything, no reward for you
target_points = 0
base_points += target_points
return base_points

/datum/objective/overthrow_AI // Basically a shared objective. All teams get the same amount of points, but obviously the one controlling the AI will have more power ingame.
explanation_text = "Enslave the AI using the special AI module board in your storage implant. It is required you use said module."

/datum/objective/overthrow_AI/check_completion() // Also returns points, just AIPTS. If you simply kill the Ai you get nothing, you need it to overthrow the heads.
for(var/i in GLOB.ai_list)
var/mob/living/silicon/ai/AI = i
if(AI.laws && AI.laws.id == "overthrow")
return AIPTS

/datum/objective/overthrow_target

/datum/objective/overthrow_target/update_explanation_text()
if(target)
explanation_text = "Convert, exile or kill [target.name], the [target.assigned_role]."

/datum/objective/overthrow_target/is_unique_objective(datum/mind/possible_target)
if(possible_target.assigned_role in GLOB.command_positions)
return FALSE
return TRUE

/datum/objective/overthrow_target/check_completion()
var/base_points
if(target && target.current)
base_points = TARGETPTS
var/datum/antagonist/overthrow/O = target.has_antag_datum(/datum/antagonist/overthrow)
if(target.current.stat == DEAD)
base_points *= KILLED
else if(!is_station_level(target.current.z) && !is_centcom_level(target.current.z)) // exiled.
base_points *= EXILED
else if(O)
base_points *= CONVERTED
if(team == O.team)
base_points *= CONVERTED_OURS
else
base_points = 0
return base_points
46 changes: 46 additions & 0 deletions code/game/gamemodes/overthrow/overthrow.dm
@@ -0,0 +1,46 @@
/datum/game_mode/overthrow
name = "overthrow"
config_tag = "overthrow"
antag_flag = ROLE_TRAITOR // they are traitors after all, with a twist
restricted_jobs = list("Security Officer", "Warden", "Detective", "AI", "Cyborg","Captain", "Head of Personnel", "Head of Security", "Chief Engineer", "Research Director", "Chief Medical Officer")
required_players = 1 //20 // the core idea is of a swift, bloodless coup, so it shouldn't be as chaotic as revs.
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

gotta reset those values once the PR is ready

required_enemies = 1 //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\
<span class='danger'>Agents</span>: Accomplish your objectives, convert heads and targets, take control of the AI.\n\
<span class='notice'>Crew</span>: 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.1)

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
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're not setting special role anywhere so it's possible for them to be kicked back to lobby and other unpleasantness.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

that's a thing?what the fuck, why does the special_role var still exist
anyway,fixing


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
agent.add_antag_datum(/datum/antagonist/overthrow/boss) // create_team called on_gain will create the team
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."
4 changes: 4 additions & 0 deletions code/game/objects/items/AI_modules.dm
Expand Up @@ -451,6 +451,10 @@ AI MODULES
..()
return laws[1]

/******************** Overthrow ******************/
/obj/item/aiModule/core/full/overthrow
name = "'Overthrow' Hacked AI Module"
law_id = "overthrow"

/******************** Hacked AI Module ******************/

Expand Down
30 changes: 30 additions & 0 deletions code/game/objects/items/implants/implant_overthrow.dm
@@ -0,0 +1,30 @@
/obj/item/implant/overthrow
name = "overthrow implant"
desc = "Wakes up syndicate sleeping agents."
uses = 2

/obj/item/implant/overthrow/implant(mob/living/target, mob/user) // Should probably also delete any mindshield implant. Not sure.
if(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 class='danger'>You don't know how to use this thing!</span>") // 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 class='notice'>[target.name] woke up already, the implant would be ineffective against him!</span>")
return FALSE
target_mind.add_antag_datum(/datum/antagonist/overthrow, UO.team)
log_combat(user, target, "implanted", "\a [name]")
qdel(src)
return TRUE

/obj/item/implanter/overthrow
name = "implanter (overthrow)"
imp_type = /obj/item/implant/overthrow

/obj/item/implantcase/overthrow
name = "implant case - 'overthrow'"
desc = "A glass case containing an overthrow implant."
imp_type = /obj/item/implant/overthrow
128 changes: 128 additions & 0 deletions code/modules/antagonists/overthrow/overthrow.dm
@@ -0,0 +1,128 @@
#define INITIAL_CRYSTALS 5 // initial telecrystals in the boss' uplink

/datum/antagonist/overthrow
name = "Syndicate mutineer"
roundend_category = "syndicate mutineers"
antagpanel_category = "Syndicate Mutineers"
job_rank = ROLE_TRAITOR
var/datum/team/overthrow/team
var/static/list/possible_useful_items

/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)

/datum/antagonist/overthrow/on_gain()
create_team()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You don't need to call it manually, create_team is called in add_antag_datum, you should be passing the already existing team there. Personally i feel like splitting naming and team creation is good idea here.

objectives += team.objectives
owner.objectives += objectives
..()
equip_overthrow()

/datum/antagonist/overthrow/create_team()
if(!team)
team = new()
team.add_member(owner)
team.create_objectives()
var/team_name = stripped_input(owner, "Name your team:", "Team name", , MAX_NAME_LEN)
if(!team_name)
to_chat(owner, "<span class='danger'>You must give a name to your team!</span>")
create_team()
return
team.name = team_name
else
team.add_member(owner)

/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()

/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)
..()
// there is no promote command because there's no difference between a boss and the normal dude other than roundstart getting the items
/datum/antagonist/overthrow/get_admin_commands()
. = ..()
.["Give random item"] = CALLBACK(src,.proc/equip_overthrow)
.["Give overthrow boss equip"] = CALLBACK(src,.proc/equip_overthrow_boss)

/datum/antagonist/overthrow/proc/update_overthrow_icons_added(datum/mind/traitor_mind)
var/datum/atom_hud/antag/overthrowhud = GLOB.huds[team.hud_entry_num]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You should probably remove these at some point if team gets deleted.

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")

/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)
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)

/datum/antagonist/overthrow/proc/equip_overthrow_boss()
if(!owner || !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/implanter/overthrow/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, "<B><font size=3 color=red>You are a syndicate sleeping agent. Your job is to stage a swift, fairly bloodless coup. </font></B>")

/datum/antagonist/overthrow/boss
name = "Syndicate initial eutineers"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

typo


/datum/antagonist/overthrow/boss/on_gain()
..()
equip_overthrow_boss()
19 changes: 19 additions & 0 deletions code/modules/antagonists/overthrow/overthrow_team.dm
@@ -0,0 +1,19 @@
/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/proc/create_objectives()
// Heads objective
var/datum/objective/ovethrow_heads/heads = new()
heads.team = src
heads.find_target()
objectives += heads
// AI objective
var/datum/objective/overthrow_AI/AI = new()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Didn't set owner here.

objectives += AI
// Target objective
var/datum/objective/overthrow_target/target = new()
target.team = src
target.find_target()
objectives += target