diff --git a/code/game/machinery/wishgranter.dm b/code/game/machinery/wishgranter.dm
index 6f0c281730..529b070062 100644
--- a/code/game/machinery/wishgranter.dm
+++ b/code/game/machinery/wishgranter.dm
@@ -34,19 +34,7 @@
charges--
insisting = 0
- user.dna.add_mutation(HULK)
- user.dna.add_mutation(XRAY)
- user.dna.add_mutation(COLDRES)
- user.dna.add_mutation(TK)
-
- user.mind.special_role = "Avatar of the Wish Granter"
-
- var/datum/objective/hijack/hijack = new
- hijack.owner = user.mind
- user.mind.objectives += hijack
- user.mind.add_antag_datum(/datum/antagonist/auto_custom)
-
- user.mind.announce_objectives()
+ user.mind.add_antag_datum(/datum/antagonist/wishgranter)
to_chat(user, "You have a very bad feeling about this.")
diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm
index c886a77e88..0246431e89 100644
--- a/code/modules/admin/verbs/one_click_antag.dm
+++ b/code/modules/admin/verbs/one_click_antag.dm
@@ -286,26 +286,22 @@
newmob.real_name = newmob.dna.species.random_name(newmob.gender,1)
newmob.dna.update_dna_identity()
newmob.key = chosen_candidate.key
- newmob.mind.assigned_role = "CentCom Official"
- newmob.equipOutfit(/datum/outfit/centcom_official)
+
- //Assign antag status and the mission
+ //Job
+ newmob.mind.assigned_role = "CentCom Official"
newmob.mind.special_role = "official"
+ //Mission
var/datum/objective/missionobj = new
missionobj.owner = newmob.mind
missionobj.explanation_text = mission
missionobj.completed = 1
- newmob.mind.objectives += missionobj
- newmob.mind.add_antag_datum(/datum/antagonist/auto_custom)
+ var/datum/antagonist/official/O = new
+ O.mission = missionobj
- if(CONFIG_GET(flag/enforce_human_authority))
- newmob.set_species(/datum/species/human)
-
- //Greet the official
- to_chat(newmob, "You are a CentCom Official.")
- to_chat(newmob, "
Central Command is sending you to [station_name()] with the task: [mission]")
+ newmob.mind.add_antag_datum(O)
//Logging and cleanup
message_admins("CentCom Official [key_name_admin(newmob)] has spawned with the task: [mission]")
diff --git a/code/modules/antagonists/ert/ert.dm b/code/modules/antagonists/ert/ert.dm
index c49b724633..b2fab75eb4 100644
--- a/code/modules/antagonists/ert/ert.dm
+++ b/code/modules/antagonists/ert/ert.dm
@@ -46,6 +46,7 @@
/datum/antagonist/ert/proc/forge_objectives()
if(ert_team)
objectives |= ert_team.objectives
+ owner.objectives |= objectives
/datum/antagonist/ert/proc/equipERT()
var/mob/living/carbon/human/H = owner.current
diff --git a/code/modules/antagonists/nightmare/nightmare.dm b/code/modules/antagonists/nightmare/nightmare.dm
new file mode 100644
index 0000000000..41a3f181d0
--- /dev/null
+++ b/code/modules/antagonists/nightmare/nightmare.dm
@@ -0,0 +1,4 @@
+/datum/antagonist/nightmare
+ name = "Nightmare"
+ show_in_antagpanel = FALSE
+ show_name_in_check_antagonists = TRUE
\ No newline at end of file
diff --git a/code/modules/antagonists/official/official.dm b/code/modules/antagonists/official/official.dm
new file mode 100644
index 0000000000..0182547d74
--- /dev/null
+++ b/code/modules/antagonists/official/official.dm
@@ -0,0 +1,33 @@
+/datum/antagonist/official
+ name = "CentCom Official"
+ show_name_in_check_antagonists = TRUE
+ show_in_antagpanel = FALSE
+ var/datum/objective/mission
+
+/datum/antagonist/official/greet()
+ to_chat(owner, "You are a CentCom Official.")
+ to_chat(owner, "Central Command is sending you to [station_name()] with the task: [mission.explanation_text]")
+
+/datum/antagonist/official/proc/equip_official()
+ var/mob/living/carbon/human/H = owner.current
+ if(!istype(H))
+ return
+ H.equipOutfit(/datum/outfit/centcom_official)
+
+ if(CONFIG_GET(flag/enforce_human_authority))
+ H.set_species(/datum/species/human)
+
+/datum/antagonist/official/proc/forge_objectives()
+ if(!mission)
+ var/datum/objective/missionobj = new
+ missionobj.owner = owner
+ missionobj.explanation_text = "Conduct a routine preformance review of [station_name()] and its Captain."
+ missionobj.completed = 1
+ mission = missionobj
+ objectives |= mission
+ owner.objectives |= objectives
+
+/datum/antagonist/official/on_gain()
+ forge_objectives()
+ . = ..()
+ equip_official()
\ No newline at end of file
diff --git a/code/modules/antagonists/revenant/revenant.dm b/code/modules/antagonists/revenant/revenant.dm
index 5be923ddcc..a578b06042 100644
--- a/code/modules/antagonists/revenant/revenant.dm
+++ b/code/modules/antagonists/revenant/revenant.dm
@@ -62,6 +62,15 @@
var/perfectsouls = 0 //How many perfect, regen-cap increasing souls the revenant has. //TODO, add objective for getting a perfect soul(s?)
var/generated_objectives_and_spells = FALSE
+/mob/living/simple_animal/revenant/Initialize(mapload)
+ . = ..()
+ AddSpell(new /obj/effect/proc_holder/spell/targeted/night_vision/revenant(null))
+ AddSpell(new /obj/effect/proc_holder/spell/targeted/revenant_transmit(null))
+ AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/revenant/defile(null))
+ AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/revenant/overload(null))
+ AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/revenant/blight(null))
+ AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/revenant/malfunction(null))
+
/mob/living/simple_animal/revenant/Login()
..()
to_chat(src, "You are a revenant.")
@@ -73,26 +82,10 @@
to_chat(src, "Be sure to read the wiki page at https://tgstation13.org/wiki/Revenant to learn more.")
if(!generated_objectives_and_spells)
generated_objectives_and_spells = TRUE
- mind.remove_all_antag()
- mind.wipe_memory()
- SEND_SOUND(src, sound('sound/effects/ghost.ogg'))
- var/datum/objective/revenant/objective = new
- objective.owner = mind
- mind.objectives += objective
- to_chat(src, "Objective #1: [objective.explanation_text]")
- var/datum/objective/revenantFluff/objective2 = new
- objective2.owner = mind
- mind.objectives += objective2
- to_chat(src, "Objective #2: [objective2.explanation_text]")
mind.assigned_role = ROLE_REVENANT
mind.special_role = ROLE_REVENANT
- mind.add_antag_datum(/datum/antagonist/auto_custom)
- AddSpell(new /obj/effect/proc_holder/spell/targeted/night_vision/revenant(null))
- AddSpell(new /obj/effect/proc_holder/spell/targeted/revenant_transmit(null))
- AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/revenant/defile(null))
- AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/revenant/overload(null))
- AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/revenant/blight(null))
- AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/revenant/malfunction(null))
+ SEND_SOUND(src, sound('sound/effects/ghost.ogg'))
+ mind.add_antag_datum(/datum/antagonist/revenant)
//Life, Stat, Hud Updates, and Say
/mob/living/simple_animal/revenant/Life()
@@ -219,7 +212,7 @@
var/reforming_essence = essence_regen_cap //retain the gained essence capacity
var/obj/item/ectoplasm/revenant/R = new(get_turf(src))
R.essence = max(reforming_essence - 15 * perfectsouls, 75) //minus any perfect souls
- R.client_to_revive = client //If the essence reforms, the old revenant is put back in the body
+ R.old_key = client.key //If the essence reforms, the old revenant is put back in the body
R.revenant = src
invisibility = INVISIBILITY_ABSTRACT
revealed = FALSE
@@ -328,7 +321,7 @@
var/essence = 75 //the maximum essence of the reforming revenant
var/reforming = TRUE
var/inert = FALSE
- var/client/client_to_revive
+ var/old_key //key of the previous revenant, will have first pick on reform.
var/mob/living/simple_animal/revenant/revenant
/obj/item/ectoplasm/revenant/New()
@@ -375,11 +368,11 @@
message_admins("Revenant ectoplasm was left undestroyed for 1 minute and is reforming into a new revenant.")
forceMove(drop_location()) //In case it's in a backpack or someone's hand
revenant.forceMove(loc)
- if(client_to_revive)
+ if(old_key)
for(var/mob/M in GLOB.dead_mob_list)
- if(M.client == client_to_revive) //Only recreates the mob if the mob the client is in is dead
- revenant.client = client_to_revive
- key_of_revenant = client_to_revive.key
+ if(M.client && M.client.key == old_key) //Only recreates the mob if the mob the client is in is dead
+ key_of_revenant = old_key
+ break
if(!key_of_revenant)
message_admins("The new revenant's old client either could not be found or is in a new, living mob - grabbing a random candidate instead...")
var/list/candidates = pollCandidatesForMob("Do you want to be [revenant.name] (reforming)?", ROLE_REVENANT, null, ROLE_REVENANT, 50, revenant)
@@ -390,7 +383,6 @@
visible_message("[src] settles down and seems lifeless.")
return
var/client/C = pick(candidates)
- revenant.client = C
key_of_revenant = C.key
if(!key_of_revenant)
qdel(revenant)
@@ -399,8 +391,8 @@
visible_message("[src] settles down and seems lifeless.")
return
- message_admins("[key_of_revenant] has been [client_to_revive ? "re":""]made into a revenant by reforming ectoplasm.")
- log_game("[key_of_revenant] was [client_to_revive ? "re":""]made as a revenant by reforming ectoplasm.")
+ message_admins("[key_of_revenant] has been [old_key == key_of_revenant ? "re":""]made into a revenant by reforming ectoplasm.")
+ log_game("[key_of_revenant] was [old_key == key_of_revenant ? "re":""]made as a revenant by reforming ectoplasm.")
visible_message("[src] suddenly rises into the air before fading away.")
revenant.essence = essence
diff --git a/code/modules/antagonists/revenant/revenant_antag.dm b/code/modules/antagonists/revenant/revenant_antag.dm
new file mode 100644
index 0000000000..d50aed24e3
--- /dev/null
+++ b/code/modules/antagonists/revenant/revenant_antag.dm
@@ -0,0 +1,21 @@
+/datum/antagonist/revenant
+ name = "Revenant"
+ show_in_antagpanel = FALSE
+ show_name_in_check_antagonists = TRUE
+
+/datum/antagonist/revenant/greet()
+ owner.announce_objectives()
+
+/datum/antagonist/revenant/proc/forge_objectives()
+ var/datum/objective/revenant/objective = new
+ objective.owner = owner
+ objectives += objective
+ var/datum/objective/revenantFluff/objective2 = new
+ objective2.owner = owner
+ objectives += objective2
+
+ owner.objectives |= objectives
+
+/datum/antagonist/revenant/on_gain()
+ forge_objectives()
+ . = ..()
\ No newline at end of file
diff --git a/code/modules/antagonists/separatist/separatist.dm b/code/modules/antagonists/separatist/separatist.dm
new file mode 100644
index 0000000000..cb7e0bf28e
--- /dev/null
+++ b/code/modules/antagonists/separatist/separatist.dm
@@ -0,0 +1,19 @@
+/datum/team/nation
+ name = "Nation"
+
+/datum/antagonist/separatist
+ name = "Separatists"
+ show_in_antagpanel = FALSE
+ show_name_in_check_antagonists = TRUE
+ var/datum/team/nation/nation
+
+/datum/antagonist/separatist/create_team(datum/team/nation/new_team)
+ if(!new_team)
+ return
+ nation = new_team
+
+/datum/antagonist/separatist/get_team()
+ return nation
+
+/datum/antagonist/separatist/greet()
+ to_chat(owner, "You are a separatist! [nation.name] forever! Protect the sovereignty of your newfound land with your comrades in arms!")
\ No newline at end of file
diff --git a/code/modules/antagonists/slaughter/slaughter_antag.dm b/code/modules/antagonists/slaughter/slaughter_antag.dm
index a018603cf1..54bfc19acf 100644
--- a/code/modules/antagonists/slaughter/slaughter_antag.dm
+++ b/code/modules/antagonists/slaughter/slaughter_antag.dm
@@ -26,6 +26,8 @@
new_objective2.explanation_text = "[objective_verb] everyone[summoner ? " else while you're at it":""]."
objectives += new_objective2
+ owner.objectives |= objectives
+
/datum/antagonist/slaughter/laughter
name = "Laughter demon"
objective_verb = "Hug and Tickle"
\ No newline at end of file
diff --git a/code/modules/antagonists/survivalist/survivalist.dm b/code/modules/antagonists/survivalist/survivalist.dm
new file mode 100644
index 0000000000..93a2170dab
--- /dev/null
+++ b/code/modules/antagonists/survivalist/survivalist.dm
@@ -0,0 +1,39 @@
+/datum/antagonist/survivalist
+ name = "Survivalist"
+ show_in_antagpanel = FALSE
+ show_name_in_check_antagonists = TRUE
+ var/greet_message = ""
+
+/datum/antagonist/survivalist/proc/forge_objectives()
+ var/datum/objective/survive/survive = new
+ survive.owner = owner
+ objectives += survive
+ owner.objectives |= objectives
+
+/datum/antagonist/survivalist/on_gain()
+ owner.special_role = "survivalist"
+ forge_objectives()
+ . = ..()
+
+/datum/antagonist/survivalist/greet()
+ to_chat(owner, "You are the survivalist![greet_message]")
+ owner.announce_objectives()
+
+/datum/antagonist/survivalist/guns
+ greet_message = "Your own safety matters above all else, and the only way to ensure your safety is to stockpile weapons! Grab as many guns as possible, by any means necessary. Kill anyone who gets in your way."
+
+/datum/antagonist/survivalist/guns/forge_objectives()
+ var/datum/objective/steal_five_of_type/summon_guns/guns = new
+ guns.owner = owner
+ objectives += guns
+ ..()
+
+/datum/antagonist/survivalist/magic
+ name = "Amateur Magician"
+ greet_message = "Grow your newfound talent! Grab as many magical artefacts as possible, by any means necessary. Kill anyone who gets in your way."
+
+/datum/antagonist/survivalist/magic/forge_objectives()
+ var/datum/objective/steal_five_of_type/summon_magic/magic = new
+ magic.owner = owner
+ objectives += magic
+ ..()
\ No newline at end of file
diff --git a/code/modules/antagonists/valentines/heartbreaker.dm b/code/modules/antagonists/valentines/heartbreaker.dm
new file mode 100644
index 0000000000..8661151c93
--- /dev/null
+++ b/code/modules/antagonists/valentines/heartbreaker.dm
@@ -0,0 +1,24 @@
+/datum/antagonist/heartbreaker
+ name = "heartbreaker"
+ roundend_category = "valentines"
+ show_in_antagpanel = FALSE
+ show_name_in_check_antagonists = TRUE
+
+
+/datum/antagonist/heartbreaker/proc/forge_objectives()
+ var/datum/objective/martyr/normiesgetout = new
+ normiesgetout.owner = owner
+ objectives += normiesgetout
+ owner.objectives += objectives
+
+/datum/antagonist/heartbreaker/on_gain()
+ forge_objectives()
+ . = ..()
+
+/datum/antagonist/heartbreaker/on_removal()
+ owner.objectives -= objectives
+ . = ..()
+
+/datum/antagonist/heartbreaker/greet()
+ to_chat(owner, "You didn't get a date! They're all having fun without you! you'll show them though...")
+ owner.announce_objectives()
\ No newline at end of file
diff --git a/code/modules/antagonists/valentines/valentine.dm b/code/modules/antagonists/valentines/valentine.dm
new file mode 100644
index 0000000000..1ca8e39318
--- /dev/null
+++ b/code/modules/antagonists/valentines/valentine.dm
@@ -0,0 +1,37 @@
+/datum/antagonist/valentine
+ name = "valentine"
+ roundend_category = "valentines" //there's going to be a ton of them so put them in separate category
+ show_in_antagpanel = FALSE
+ var/datum/mind/date
+
+/datum/antagonist/valentine/proc/forge_objectives()
+ var/datum/objective/protect/protect_objective = new /datum/objective/protect
+ protect_objective.owner = owner
+ protect_objective.target = date
+ protect_objective.explanation_text = "Protect [date.name], your date."
+ objectives += protect_objective
+ owner.objectives += objectives
+
+/datum/antagonist/valentine/on_gain()
+ forge_objectives()
+ . = ..()
+
+/datum/antagonist/valentine/on_removal()
+ owner.objectives -= objectives
+
+/datum/antagonist/valentine/greet()
+ to_chat(owner, "You're on a date with [date.name]! Protect them at all costs. This takes priority over all other loyalties.")
+
+//Squashed up a bit
+/datum/antagonist/valentine/roundend_report()
+ var/objectives_complete = TRUE
+ if(owner.objectives.len)
+ for(var/datum/objective/objective in owner.objectives)
+ if(!objective.check_completion())
+ objectives_complete = FALSE
+ break
+
+ if(objectives_complete)
+ return "[owner.name] protected their date"
+ else
+ return "[owner.name] date failed!"
\ No newline at end of file
diff --git a/code/modules/antagonists/wishgranter/wishgranter.dm b/code/modules/antagonists/wishgranter/wishgranter.dm
new file mode 100644
index 0000000000..3f7fac9d18
--- /dev/null
+++ b/code/modules/antagonists/wishgranter/wishgranter.dm
@@ -0,0 +1,29 @@
+/datum/antagonist/wishgranter
+ name = "Wishgranter Avatar"
+ show_in_antagpanel = FALSE
+ show_name_in_check_antagonists = TRUE
+
+/datum/antagonist/wishgranter/proc/forge_objectives()
+ var/datum/objective/hijack/hijack = new
+ hijack.owner = owner
+ objectives += hijack
+ owner.objectives |= objectives
+
+/datum/antagonist/wishgranter/on_gain()
+ owner.special_role = "Avatar of the Wish Granter"
+ forge_objectives()
+ . = ..()
+ give_powers()
+
+/datum/antagonist/wishgranter/greet()
+ to_chat(owner, "Your inhibitions are swept away, the bonds of loyalty broken, you are free to murder as you please!")
+ owner.announce_objectives()
+
+/datum/antagonist/wishgranter/proc/give_powers()
+ var/mob/living/carbon/human/H = owner.current
+ if(!istype(H))
+ return
+ H.dna.add_mutation(HULK)
+ H.dna.add_mutation(XRAY)
+ H.dna.add_mutation(COLDRES)
+ H.dna.add_mutation(TK)
\ No newline at end of file
diff --git a/code/modules/awaymissions/mission_code/wildwest.dm b/code/modules/awaymissions/mission_code/wildwest.dm
index 96ea588bfa..b8d6b87f84 100644
--- a/code/modules/awaymissions/mission_code/wildwest.dm
+++ b/code/modules/awaymissions/mission_code/wildwest.dm
@@ -113,14 +113,7 @@
if("To Kill")
to_chat(user, "Your wish is granted, but at a terrible cost...")
to_chat(user, "The Wish Granter punishes you for your wickedness, claiming your soul and warping your body to match the darkness in your heart.")
- user.mind.special_role = ROLE_TRAITOR
-
- var/datum/objective/hijack/hijack = new
- hijack.owner = user.mind
- user.mind.objectives += hijack
- user.mind.add_antag_datum(/datum/antagonist/auto_custom)
- to_chat(user, "Your inhibitions are swept away, the bonds of loyalty broken, you are free to murder as you please!")
- user.mind.announce_objectives()
+ user.mind.add_antag_datum(/datum/antagonist/wishgranter)
user.set_species(/datum/species/shadow)
if("Peace")
to_chat(user, "Whatever alien sentience that the Wish Granter possesses is satisfied with your wish. There is a distant wailing as the last of the Faithless begin to die, then silence.")
diff --git a/code/modules/events/holiday/vday.dm b/code/modules/events/holiday/vday.dm
index 4de5069859..fe9ef700c2 100644
--- a/code/modules/events/holiday/vday.dm
+++ b/code/modules/events/holiday/vday.dm
@@ -33,34 +33,19 @@
forge_valentines_objective(L, date)
-
forge_valentines_objective(date, L)
if(valentines.len && prob(4))
var/mob/living/notgoodenough = pick_n_take(valentines)
forge_valentines_objective(notgoodenough, date)
-
-
else
- to_chat(L, "You didn't get a date! They're all having fun without you! you'll show them though...")
- var/datum/objective/martyr/normiesgetout = new
- normiesgetout.owner = L.mind
- L.mind.special_role = "heartbreaker"
- L.mind.objectives += normiesgetout
- L.mind.add_antag_datum(/datum/antagonist/auto_custom)
+ L.mind.add_antag_datum(/datum/antagonist/heartbreaker)
/proc/forge_valentines_objective(mob/living/lover,mob/living/date)
lover.mind.special_role = "valentine"
- var/datum/objective/protect/protect_objective = new /datum/objective/protect
- protect_objective.owner = lover.mind
- protect_objective.target = date.mind
- protect_objective.explanation_text = "Protect [date.real_name], your date."
- lover.mind.objectives += protect_objective
-
- lover.mind.add_antag_datum(/datum/antagonist/auto_custom)
-
- to_chat(lover, "You're on a date with [date]! Protect them at all costs. This takes priority over all other loyalties.")
-
+ var/datum/antagonist/valentine/V = new
+ V.date = date.mind
+ lover.mind.add_antag_datum(V) //These really should be teams but i can't be assed to incorporate third wheels right now
/datum/round_event/valentines/announce(fake)
priority_announce("It's Valentine's Day! Give a valentine to that special someone!")
diff --git a/code/modules/events/nightmare.dm b/code/modules/events/nightmare.dm
index 1a6c99d6ed..b1cebb98c5 100644
--- a/code/modules/events/nightmare.dm
+++ b/code/modules/events/nightmare.dm
@@ -34,7 +34,7 @@
player_mind.transfer_to(S)
player_mind.assigned_role = "Nightmare"
player_mind.special_role = "Nightmare"
- player_mind.add_antag_datum(/datum/antagonist/auto_custom)
+ player_mind.add_antag_datum(/datum/antagonist/nightmare)
S.set_species(/datum/species/shadow/nightmare)
playsound(S, 'sound/magic/ethereal_exit.ogg', 50, 1, -1)
message_admins("[key_name_admin(S)] has been made into a Nightmare by an event.")
diff --git a/code/modules/events/wizard/departmentrevolt.dm b/code/modules/events/wizard/departmentrevolt.dm
index 22fe7d91d4..bf6de2bfe0 100644
--- a/code/modules/events/wizard/departmentrevolt.dm
+++ b/code/modules/events/wizard/departmentrevolt.dm
@@ -9,31 +9,34 @@
var/list/tidecolor
var/list/jobs_to_revolt = list()
- var/nation
+ var/nation_name
var/list/citizens = list()
tidecolor = pick("grey", "white", "yellow", "purple", "brown", "whatevercolorrepresentstheservicepeople")
switch(tidecolor)
if("grey") //God help you
jobs_to_revolt = list("Assistant")
- nation = pick("Assa", "Mainte", "Tunnel", "Gris", "Grey", "Liath", "Grigio", "Ass", "Assi")
+ nation_name = pick("Assa", "Mainte", "Tunnel", "Gris", "Grey", "Liath", "Grigio", "Ass", "Assi")
if("white")
jobs_to_revolt = list("Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Virologist")
- nation = pick("Mede", "Healtha", "Recova", "Chemi", "Geneti", "Viro", "Psych")
+ nation_name = pick("Mede", "Healtha", "Recova", "Chemi", "Geneti", "Viro", "Psych")
if("yellow")
jobs_to_revolt = list("Chief Engineer", "Station Engineer", "Atmospheric Technician")
- nation = pick("Atomo", "Engino", "Power", "Teleco")
+ nation_name = pick("Atomo", "Engino", "Power", "Teleco")
if("purple")
jobs_to_revolt = list("Research Director","Scientist", "Roboticist")
- nation = pick("Sci", "Griffa", "Explosi", "Mecha", "Xeno")
+ nation_name = pick("Sci", "Griffa", "Explosi", "Mecha", "Xeno")
if("brown")
jobs_to_revolt = list("Quartermaster", "Cargo Technician", "Shaft Miner")
- nation = pick("Cargo", "Guna", "Suppli", "Mule", "Crate", "Ore", "Mini", "Shaf")
+ nation_name = pick("Cargo", "Guna", "Suppli", "Mule", "Crate", "Ore", "Mini", "Shaf")
if("whatevercolorrepresentstheservicepeople") //the few, the proud, the technically aligned
jobs_to_revolt = list("Bartender", "Cook", "Botanist", "Clown", "Mime", "Janitor", "Chaplain")
- nation = pick("Honka", "Boozo", "Fatu", "Danka", "Mimi", "Libra", "Jani", "Religi")
+ nation_name = pick("Honka", "Boozo", "Fatu", "Danka", "Mimi", "Libra", "Jani", "Religi")
- nation += pick("stan", "topia", "land", "nia", "ca", "tova", "dor", "ador", "tia", "sia", "ano", "tica", "tide", "cis", "marea", "co", "taoide", "slavia", "stotzka")
+ nation_name += pick("stan", "topia", "land", "nia", "ca", "tova", "dor", "ador", "tia", "sia", "ano", "tica", "tide", "cis", "marea", "co", "taoide", "slavia", "stotzka")
+
+ var/datum/team/nation/nation = new
+ nation.name = nation_name
for(var/mob/living/carbon/human/H in GLOB.carbon_list)
if(H.mind)
@@ -42,12 +45,11 @@
for(var/job in jobs_to_revolt)
if(M.assigned_role == job)
citizens += H
- M.special_role = "separatist"
- M.add_antag_datum(/datum/antagonist/auto_custom)
- H.log_message("Was made into a separatist, long live [nation]!", INDIVIDUAL_ATTACK_LOG)
- to_chat(H, "You are a separatist! [nation] forever! Protect the sovereignty of your newfound land with your comrades in arms!")
+ M.add_antag_datum(/datum/antagonist/separatist,nation)
+ H.log_message("Was made into a separatist, long live [nation_name]!", INDIVIDUAL_ATTACK_LOG)
+
if(citizens.len)
var/message
for(var/job in jobs_to_revolt)
message += "[job],"
- message_admins("The nation of [nation] has been formed. Affected jobs are [message]")
+ message_admins("The nation of [nation_name] has been formed. Affected jobs are [message]")
diff --git a/code/modules/spells/spell_types/rightandwrong.dm b/code/modules/spells/spell_types/rightandwrong.dm
index 1c76ac4791..2d5ac40c8b 100644
--- a/code/modules/spells/spell_types/rightandwrong.dm
+++ b/code/modules/spells/spell_types/rightandwrong.dm
@@ -90,24 +90,14 @@ GLOBAL_VAR_INIT(summon_magic_triggered, FALSE)
if(H.stat == DEAD || !(H.client))
return
if(H.mind)
- if(iswizard(H) || H.mind.special_role == "survivalist")
+ if(iswizard(H) || H.mind.has_antag_datum(/datum/antagonist/survivalist/guns))
return
if(prob(GLOB.summon_guns_triggered) && !(H.mind.has_antag_datum(/datum/antagonist)))
SSticker.mode.traitors += H.mind
- var/datum/objective/steal_five_of_type/summon_guns/guns = new
- guns.owner = H.mind
- H.mind.objectives += guns
- H.mind.special_role = "survivalist"
- H.mind.add_antag_datum(/datum/antagonist/auto_custom)
- to_chat(H, "You are the survivalist! Your own safety matters above all else, and the only way to ensure your safety is to stockpile weapons! Grab as many guns as possible, by any means necessary. Kill anyone who gets in your way.")
-
- var/datum/objective/survive/survive = new
- survive.owner = H.mind
- H.mind.objectives += survive
+ H.mind.add_antag_datum(/datum/antagonist/survivalist/guns)
H.log_message("Was made into a survivalist, and trusts no one!", INDIVIDUAL_ATTACK_LOG)
- H.mind.announce_objectives()
var/gun_type = pick(GLOB.summoned_guns)
var/obj/item/gun/G = new gun_type(get_turf(H))
@@ -122,22 +112,12 @@ GLOBAL_VAR_INIT(summon_magic_triggered, FALSE)
if(H.stat == DEAD || !(H.client))
return
if(H.mind)
- if(iswizard(H) || H.mind.special_role == "survivalist")
+ if(iswizard(H) || H.mind.has_antag_datum(/datum/antagonist/survivalist/magic))
return
if(prob(GLOB.summon_magic_triggered) && !(H.mind.has_antag_datum(/datum/antagonist)))
- var/datum/objective/steal_five_of_type/summon_magic/magic = new
- magic.owner = H.mind
- H.mind.objectives += magic
- H.mind.special_role = "amateur magician"
- H.mind.add_antag_datum(/datum/antagonist/auto_custom)
- to_chat(H, "You are the amateur magician! Grow your newfound talent! Grab as many magical artefacts as possible, by any means necessary. Kill anyone who gets in your way.")
-
- var/datum/objective/survive/survive = new
- survive.owner = H.mind
- H.mind.objectives += survive
+ H.mind.add_antag_datum(/datum/antagonist/survivalist/magic)
H.log_message("Was made into a survivalist, and trusts no one!", INDIVIDUAL_ATTACK_LOG)
- H.mind.announce_objectives()
var/magic_type = pick(GLOB.summoned_magic)
var/lucky = FALSE
diff --git a/tgstation.dme b/tgstation.dme
index 82f8eb3913..5b055c4d2a 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -1213,25 +1213,33 @@
#include "code\modules\antagonists\monkey\monkey.dm"
#include "code\modules\antagonists\morph\morph.dm"
#include "code\modules\antagonists\morph\morph_antag.dm"
+#include "code\modules\antagonists\nightmare\nightmare.dm"
#include "code\modules\antagonists\ninja\ninja.dm"
#include "code\modules\antagonists\nukeop\nukeop.dm"
#include "code\modules\antagonists\nukeop\equipment\nuclear_challenge.dm"
#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\pirate\pirate.dm"
#include "code\modules\antagonists\revenant\revenant.dm"
#include "code\modules\antagonists\revenant\revenant_abilities.dm"
+#include "code\modules\antagonists\revenant\revenant_antag.dm"
#include "code\modules\antagonists\revenant\revenant_blight.dm"
#include "code\modules\antagonists\revenant\revenant_spawn_event.dm"
#include "code\modules\antagonists\revolution\revolution.dm"
+#include "code\modules\antagonists\separatist\separatist.dm"
#include "code\modules\antagonists\slaughter\slaughter.dm"
#include "code\modules\antagonists\slaughter\slaughter_antag.dm"
#include "code\modules\antagonists\slaughter\slaughterevent.dm"
+#include "code\modules\antagonists\survivalist\survivalist.dm"
#include "code\modules\antagonists\swarmer\swarmer.dm"
#include "code\modules\antagonists\swarmer\swarmer_event.dm"
#include "code\modules\antagonists\traitor\datum_traitor.dm"
#include "code\modules\antagonists\traitor\equipment\Malf_Modules.dm"
#include "code\modules\antagonists\traitor\IAA\internal_affairs.dm"
+#include "code\modules\antagonists\valentines\heartbreaker.dm"
+#include "code\modules\antagonists\valentines\valentine.dm"
+#include "code\modules\antagonists\wishgranter\wishgranter.dm"
#include "code\modules\antagonists\wizard\wizard.dm"
#include "code\modules\antagonists\wizard\equipment\artefact.dm"
#include "code\modules\antagonists\wizard\equipment\soulstone.dm"