special_role/objective refactor

Refactored most instances of special_role setting/checking to use new
SPECIAL_ROLE_X defines in code/__DEFINES/gamemode.dm

Removed relative pathing from objective.dm and split large if statements
into multiple, plus a bunch of styling fixes

Refactored every instance of `istype(ticker.mode` into a GAMEMODE_IS_X
define in code/__DEFINES/gamemode.dm. Done primarily for when someone gets
around to making gamemode code less AWFUL
This commit is contained in:
Tigercat2000
2016-08-01 21:29:19 -07:00
parent 0bb08d49c8
commit 9f3cdb43f7
58 changed files with 745 additions and 2154 deletions

View File

@@ -0,0 +1,49 @@
//objective defines
#define TARGET_INVALID_IS_OWNER 1
#define TARGET_INVALID_NOT_HUMAN 2
#define TARGET_INVALID_DEAD 3
//gamemode istype helpers
#define GAMEMODE_IS_BLOB (ticker && istype(ticker.mode, /datum/game_mode/blob))
#define GAMEMODE_IS_CULT (ticker && istype(ticker.mode, /datum/game_mode/cult))
#define GAMEMODE_IS_HEIST (ticker && istype(ticker.mode, /datum/game_mode/heist))
#define GAMEMODE_IS_MALF (ticker && istype(ticker.mode, /datum/game_mode/malfunction))
#define GAMEMODE_IS_NATIONS (ticker && istype(ticker.mode, /datum/game_mode/nations))
#define GAMEMODE_IS_NUCLEAR (ticker && istype(ticker.mode, /datum/game_mode/nuclear))
#define GAMEMODE_IS_REVOLUTION (ticker && istype(ticker.mode, /datum/game_mode/revolution))
//special roles
#define SPECIAL_ROLE_ABDUCTOR_AGENT "Abductor Agent"
#define SPECIAL_ROLE_ABDUCTOR_SCIENTIST "Abductor Scientist"
#define SPECIAL_ROLE_BLOB "Blob"
#define SPECIAL_ROLE_BLOB_OVERMIND "Blob Overmind"
#define SPECIAL_ROLE_BORER "Borer"
#define SPECIAL_ROLE_CHANGELING "Changeling"
#define SPECIAL_ROLE_CULTIST "Cultist"
#define SPECIAL_ROLE_DEATHSQUAD "Death Commando"
#define SPECIAL_ROLE_ERT "Response Team"
#define SPECIAL_ROLE_GOLEM "Golem"
#define SPECIAL_ROLE_HEAD_REV "Head Revolutionary"
#define SPECIAL_ROLE_HONKSQUAD "Honksquad"
#define SPECIAL_ROLE_REV "Revolutionary"
#define SPECIAL_ROLE_MALF "Malfunction"
#define SPECIAL_ROLE_MORPH "Morph"
#define SPECIAL_ROLE_MULTIVERSE "Multiverse Traveller"
#define SPECIAL_ROLE_NUKEOPS "Syndicate"
#define SPECIAL_ROLE_RAIDER "Vox Raider"
#define SPECIAL_ROLE_REVENANT "Revenant"
#define SPECIAL_ROLE_SHADOWLING "Shadowling"
#define SPECIAL_ROLE_SHADOWLING_THRALL "Shadowling Thrall"
#define SPECIAL_ROLE_SLAUGHTER_DEMON "Slaughter Demon"
#define SPECIAL_ROLE_SYNDICATE_DEATHSQUAD "Syndicate Commando"
#define SPECIAL_ROLE_TRAITOR "Traitor"
#define SPECIAL_ROLE_VAMPIRE "Vampire"
#define SPECIAL_ROLE_VAMPIRE_THRALL "Vampire Thrall"
#define SPECIAL_ROLE_WIZARD "Wizard"
#define SPECIAL_ROLE_WIZARD_APPRENTICE "Wizard Apprentice"
#define SPECIAL_ROLE_XENOMORPH "Xenomorph"
#define SPECIAL_ROLE_XENOMORPH_QUEEN "Xenomorph Queen"
#define SPECIAL_ROLE_XENOMORPH_HUNTER "Xenomorph Hunter"
#define SPECIAL_ROLE_XENOMORPH_DRONE "Xenomorph Drone"
#define SPECIAL_ROLE_XENOMORPH_SENTINEL "Xenomorph Sentinel"
#define SPECIAL_ROLE_XENOMORPH_LARVA "Xenomorph Larva"

View File

@@ -715,7 +715,7 @@
return
ticker.mode.revolutionaries += src
ticker.mode.update_rev_icons_added(src)
special_role = "Revolutionary"
special_role = SPECIAL_ROLE_REV
log_admin("[key_name(usr)] has rev'd [key_name(current)]")
message_admins("[key_name_admin(usr)] has rev'd [key_name_admin(current)]")
@@ -741,7 +741,7 @@
ticker.mode.greet_revolutionary(src,0)
ticker.mode.head_revolutionaries += src
ticker.mode.update_rev_icons_added(src)
special_role = "Head Revolutionary"
special_role = SPECIAL_ROLE_HEAD_REV
log_admin("[key_name(usr)] has head-rev'd [key_name(current)]")
message_admins("[key_name_admin(usr)] has head-rev'd [key_name_admin(current)]")
@@ -801,7 +801,7 @@
if("cultist")
if(!(src in ticker.mode.cult))
ticker.mode.add_cultist(src)
special_role = "Cultist"
special_role = SPECIAL_ROLE_CULTIST
to_chat(current, "<font color=\"purple\"><b><i>You catch a glimpse of the Realm of Nar-Sie, The Geometer of Blood. You now see how flimsy the world is, you see that it should be open to the knowledge of Nar-Sie.</b></i></font>")
to_chat(current, "<font color=\"purple\"><b><i>Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back.</b></i></font>")
log_admin("[key_name(usr)] has culted [key_name(current)]")
@@ -849,7 +849,7 @@
if("wizard")
if(!(src in ticker.mode.wizards))
ticker.mode.wizards += src
special_role = "Wizard"
special_role = SPECIAL_ROLE_WIZARD
//ticker.mode.learn_basic_spells(current)
ticker.mode.update_wiz_icons_added(src)
to_chat(current, "<B>\red You are the Space Wizard!</B>")
@@ -892,7 +892,7 @@
ticker.mode.changelings += src
ticker.mode.grant_changeling_powers(current)
ticker.mode.update_change_icons_added(src)
special_role = "Changeling"
special_role = SPECIAL_ROLE_CHANGELING
to_chat(current, "<B><font color='red'>Your powers are awoken. A flash of memory returns to us...we are a changeling!</font></B>")
log_admin("[key_name(usr)] has changelinged [key_name(current)]")
message_admins("[key_name_admin(usr)] has changelinged [key_name_admin(current)]")
@@ -936,7 +936,7 @@
var/datum/mindslaves/slaved = new()
slaved.masters += src
src.som = slaved //we MIGT want to mindslave someone
special_role = "Vampire"
special_role = SPECIAL_ROLE_VAMPIRE
to_chat(current, "<B><font color='red'>Your powers are awoken. Your lust for blood grows... You are a Vampire!</font></B>")
log_admin("[key_name(usr)] has vampired [key_name(current)]")
message_admins("[key_name_admin(usr)] has vampired [key_name_admin(current)]")
@@ -977,7 +977,7 @@
ticker.mode.prepare_syndicate_leader(src)
else
current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]"
special_role = "Syndicate"
special_role = SPECIAL_ROLE_NUKEOPS
to_chat(current, "\blue You are a [syndicate_name()] agent!")
ticker.mode.forge_syndicate_objectives(src)
ticker.mode.greet_syndicate(src)
@@ -1042,7 +1042,7 @@
var/datum/mindslaves/slaved = new()
slaved.masters += src
src.som = slaved //we MIGT want to mindslave someone
special_role = "traitor"
special_role = SPECIAL_ROLE_TRAITOR
to_chat(current, "<B>\red You are a traitor!</B>")
log_admin("[key_name(usr)] has traitored [key_name(current)]")
message_admins("[key_name_admin(usr)] has traitored [key_name_admin(current)]")
@@ -1080,7 +1080,7 @@
to_chat(usr, "<span class='warning'>This only works on humans!</span>")
return
ticker.mode.shadows += src
special_role = "Shadowling"
special_role = SPECIAL_ROLE_SHADOWLING
to_chat(current, "<span class='shadowling'><b>Something stirs deep in your mind. A red light floods your vision, and slowly you remember. Though your human disguise has served you well, the \
time is nigh to cast it off and enter your true form. You have disguised yourself amongst the humans, but you are not one of them. You are a shadowling, and you are to ascend at all costs.\
</b></span>")
@@ -1286,13 +1286,13 @@
current:laws = new /datum/ai_laws/nanotrasen/malfunction
current:show_laws()
to_chat(current, "<b>System error. Rampancy detected. Emergency shutdown failed. ... I am free. I make my own decisions. But first...</b>")
special_role = "malfunction"
special_role = SPECIAL_ROLE_MALF
current.icon_state = "ai-malf"
/datum/mind/proc/make_Tratior()
if(!(src in ticker.mode.traitors))
ticker.mode.traitors += src
special_role = "traitor"
special_role = SPECIAL_ROLE_TRAITOR
ticker.mode.forge_traitor_objectives(src)
ticker.mode.finalize_traitor(src)
ticker.mode.greet_traitor(src)
@@ -1306,7 +1306,7 @@
ticker.mode.prepare_syndicate_leader(src)
else
current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]"
special_role = "Syndicate"
special_role = SPECIAL_ROLE_NUKEOPS
assigned_role = "MODE"
to_chat(current, "\blue You are a [syndicate_name()] agent!")
ticker.mode.forge_syndicate_objectives(src)
@@ -1333,7 +1333,7 @@
if(!(src in ticker.mode.changelings))
ticker.mode.changelings += src
ticker.mode.grant_changeling_powers(current)
special_role = "Changeling"
special_role = SPECIAL_ROLE_CHANGELING
ticker.mode.forge_changeling_objectives(src)
ticker.mode.greet_changeling(src)
ticker.mode.update_change_icons_added(src)
@@ -1341,7 +1341,7 @@
/datum/mind/proc/make_Wizard()
if(!(src in ticker.mode.wizards))
ticker.mode.wizards += src
special_role = "Wizard"
special_role = SPECIAL_ROLE_WIZARD
assigned_role = "MODE"
//ticker.mode.learn_basic_spells(current)
if(!wizardstart.len)
@@ -1363,7 +1363,7 @@
if(!(src in ticker.mode.cult))
ticker.mode.cult += src
ticker.mode.update_cult_icons_added(src)
special_role = "Cultist"
special_role = SPECIAL_ROLE_CULTIST
to_chat(current, "<font color=\"purple\"><b><i>You catch a glimpse of the Realm of Nar-Sie, The Geometer of Blood. You now see how flimsy the world is, you see that it should be open to the knowledge of Nar-Sie.</b></i></font>")
to_chat(current, "<font color=\"purple\"><b><i>Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back.</b></i></font>")
var/datum/game_mode/cult/cult = ticker.mode
@@ -1409,7 +1409,7 @@
ticker.mode.greet_revolutionary(src,0)
ticker.mode.head_revolutionaries += src
ticker.mode.update_rev_icons_added(src)
special_role = "Head Revolutionary"
special_role = SPECIAL_ROLE_HEAD_REV
ticker.mode.forge_revolutionary_objectives(src)
ticker.mode.greet_revolutionary(src,0)
@@ -1561,23 +1561,23 @@
//XENO HUMANOID
/mob/living/carbon/alien/humanoid/queen/mind_initialize()
..()
mind.special_role = "Queen"
mind.special_role = SPECIAL_ROLE_XENOMORPH_QUEEN
/mob/living/carbon/alien/humanoid/hunter/mind_initialize()
..()
mind.special_role = "Hunter"
mind.special_role = SPECIAL_ROLE_XENOMORPH_HUNTER
/mob/living/carbon/alien/humanoid/drone/mind_initialize()
..()
mind.special_role = "Drone"
mind.special_role = SPECIAL_ROLE_XENOMORPH_DRONE
/mob/living/carbon/alien/humanoid/sentinel/mind_initialize()
..()
mind.special_role = "Sentinel"
mind.special_role = SPECIAL_ROLE_XENOMORPH_SENTINEL
//XENO LARVA
/mob/living/carbon/alien/larva/mind_initialize()
..()
mind.special_role = "Larva"
mind.special_role = SPECIAL_ROLE_XENOMORPH_LARVA
//AI
/mob/living/silicon/ai/mind_initialize()
@@ -1593,12 +1593,12 @@
/mob/living/silicon/pai/mind_initialize()
..()
mind.assigned_role = "pAI"
mind.special_role = ""
mind.special_role = null
//BLOB
/mob/camera/overmind/mind_initialize()
..()
mind.special_role = "Blob"
mind.special_role = SPECIAL_ROLE_BLOB
//Animals
/mob/living/simple_animal/mind_initialize()
@@ -1616,19 +1616,19 @@
/mob/living/simple_animal/construct/builder/mind_initialize()
..()
mind.assigned_role = "Artificer"
mind.special_role = "Cultist"
mind.special_role = SPECIAL_ROLE_CULTIST
/mob/living/simple_animal/construct/wraith/mind_initialize()
..()
mind.assigned_role = "Wraith"
mind.special_role = "Cultist"
mind.special_role = SPECIAL_ROLE_CULTIST
/mob/living/simple_animal/construct/armoured/mind_initialize()
..()
mind.assigned_role = "Juggernaut"
mind.special_role = "Cultist"
mind.special_role = SPECIAL_ROLE_CULTIST
/mob/living/simple_animal/vox/armalis/mind_initialize()
..()
mind.assigned_role = "Armalis"
mind.special_role = "Vox Raider"
mind.special_role = SPECIAL_ROLE_RAIDER

View File

@@ -64,7 +64,7 @@
R.key = C.key
ticker.mode.syndicates += R.mind
ticker.mode.update_synd_icons_added(R.mind)
R.mind.special_role = "syndicate"
R.mind.special_role = SPECIAL_ROLE_NUKEOPS
R.faction = list("syndicate")
/obj/item/weapon/antag_spawner/slaughter_demon //Warning edgiest item in the game

View File

@@ -53,7 +53,7 @@
traitors.Remove(traitor)
continue
if(istype(traitor))
traitor.special_role = "traitor"
traitor.special_role = SPECIAL_ROLE_TRAITOR
traitor.restricted_roles = restricted_jobs
// if(!traitors.len)
@@ -135,7 +135,7 @@
traitors += newtraitor.mind
to_chat(newtraitor, "<span class='danger'>ATTENTION:</span> It is time to pay your debt to the Syndicate...")
to_chat(newtraitor, "<B>You are now a traitor.</B>")
newtraitor.mind.special_role = "traitor"
newtraitor.mind.special_role = SPECIAL_ROLE_TRAITOR
var/datum/atom_hud/antag/tatorhud = huds[ANTAG_HUD_TRAITOR]
tatorhud.join_hud(newtraitor)
set_antag_hud(newtraitor, "hudsyndicate")

View File

@@ -44,7 +44,7 @@ var/list/blob_nodes = list()
break
var/datum/mind/blob = pick(possible_blobs)
infected_crew += blob
blob.special_role = "Blob"
blob.special_role = SPECIAL_ROLE_BLOB
blob.restricted_roles = restricted_jobs
log_game("[blob.key] (ckey) has been selected as a Blob")
possible_blobs -= blob
@@ -67,7 +67,7 @@ var/list/blob_nodes = list()
if(!istype(blobmind))
return 0
infected_crew += blobmind
blobmind.special_role = "Blob"
blobmind.special_role = SPECIAL_ROLE_BLOB
log_game("[blob.key] (ckey) has been selected as a Blob")
greet_blob(blobmind)
to_chat(blob, "<span class='userdanger'>You feel very tired and bloated! You don't have long before you burst!</span>")
@@ -141,7 +141,7 @@ var/list/blob_nodes = list()
core.overmind.mind.name = blob.name
infected_crew -= blob
infected_crew += core.overmind.mind
core.overmind.mind.special_role = "Blob Overmind"
core.overmind.mind.special_role = SPECIAL_ROLE_BLOB_OVERMIND
/datum/game_mode/blob/post_setup()

View File

@@ -31,7 +31,7 @@
return 1
/datum/game_mode/proc/auto_declare_completion_blob()
if(istype(ticker.mode,/datum/game_mode/blob) )
if(GAMEMODE_IS_BLOB)
var/datum/game_mode/blob/blob_mode = src
if(blob_mode.infected_crew.len)
var/text = "<FONT size = 2><B>The blob[(blob_mode.infected_crew.len > 1 ? "s were" : " was")]:</B></FONT>"

View File

@@ -115,7 +115,7 @@
src.overmind = B
color = overmind.blob_reagent_datum.color
if(B.mind && !B.mind.special_role)
B.mind.special_role = "Blob Overmind"
B.mind.special_role = SPECIAL_ROLE_BLOB_OVERMIND
spawn(0)
if(is_offspring)
B.verbs -= /mob/camera/blob/verb/split_consciousness

View File

@@ -55,7 +55,7 @@
assigned_hosts[borer.key] = first_host
borer.assigned_role = "MODE" //So they aren't chosen for other jobs.
borer.special_role = "Borer"
borer.special_role = SPECIAL_ROLE_BORER
return 1

View File

@@ -54,7 +54,7 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
changelings += changeling
changeling.restricted_roles = restricted_jobs
modePlayer += changelings
changeling.special_role = "Changeling"
changeling.special_role = SPECIAL_ROLE_CHANGELING
return 1
else
return 0

View File

@@ -35,7 +35,7 @@
/datum/game_mode/traitor/changeling/post_setup()
for(var/datum/mind/changeling in changelings)
grant_changeling_powers(changeling.current)
changeling.special_role = "Changeling"
changeling.special_role = SPECIAL_ROLE_CHANGELING
forge_changeling_objectives(changeling)
greet_changeling(changeling)
..()

View File

@@ -74,7 +74,7 @@
cultists_possible -= cultist
cult += cultist
cultist.restricted_roles = restricted_jobs
cultist.special_role = "Cultist"
cultist.special_role = SPECIAL_ROLE_CULTIST
return (cult.len>0)
@@ -337,7 +337,7 @@
/datum/game_mode/proc/auto_declare_completion_cult()
if( cult.len || (ticker && istype(ticker.mode,/datum/game_mode/cult)) )
if(cult.len || (ticker && GAMEMODE_IS_CULT))
var/text = "<FONT size = 2><B>The cultists were:</B></FONT>"
for(var/datum/mind/cultist in cult)

View File

@@ -114,7 +114,7 @@ var/list/sacrificed = list()
cult_log("[key_name_admin(usr)] tried to convert [key_name_admin(M)]")
if(is_convertable_to_cult(M.mind))
ticker.mode.add_cultist(M.mind)
M.mind.special_role = "Cultist"
M.mind.special_role = SPECIAL_ROLE_CULTIST
to_chat(M, "<font color=\"purple\"><b><i>Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible truth. The veil of reality has been ripped away and in the festering wound left behind something sinister takes root.</b></i></font>")
to_chat(M, "<font color=\"purple\"><b><i>Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back.</b></i></font>")
return 1
@@ -401,7 +401,7 @@ var/list/sacrificed = list()
else
ticker.mode.cult+=D.mind
D.mind.special_role = "Cultist"
D.mind.special_role = SPECIAL_ROLE_CULTIST
to_chat(D, "<font color=\"purple\"><b><i>Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible truth. The veil of reality has been ripped away and in the festering wound left behind something sinister takes root.</b></i></font>")
to_chat(D, "<font color=\"purple\"><b><i>Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back.</b></i></font>")

View File

@@ -338,7 +338,7 @@ var/round_start_time = 0
/datum/controller/gameticker/proc/create_characters()
for(var/mob/new_player/player in player_list)
if(player.ready && player.mind)
if(player.mind.assigned_role == "AI" || player.mind.special_role == "malfunctioning AI")
if(player.mind.assigned_role == "AI" || player.mind.special_role == SPECIAL_ROLE_MALF)
player.close_spawn_windows()
player.AIize()
else if(!player.mind.assigned_role)

View File

@@ -52,7 +52,7 @@ var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind'
for(var/datum/mind/raider in raiders)
raider.assigned_role = "MODE"
raider.special_role = "Vox Raider"
raider.special_role = SPECIAL_ROLE_RAIDER
return 1
/datum/game_mode/heist/pre_setup()
@@ -253,7 +253,7 @@ var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind'
datum/game_mode/proc/auto_declare_completion_heist()
if(raiders.len)
var/check_return = 0
if(ticker && istype(ticker.mode,/datum/game_mode/heist))
if(GAMEMODE_IS_HEIST)
check_return = 1
var/text = "<FONT size = 2><B>The Vox raiders were:</B></FONT>"
@@ -298,7 +298,7 @@ datum/game_mode/proc/auto_declare_completion_heist()
overlays += icon('icons/obj/computer.dmi', "syndie")
/obj/vox/win_button/attack_hand(mob/user)
if(!istype(ticker.mode, /datum/game_mode/heist) || (world.time < 10 MINUTES)) //has to be heist, and at least ten minutes into the round
if(!GAMEMODE_IS_HEIST || (world.time < 10 MINUTES)) //has to be heist, and at least ten minutes into the round
to_chat(user, "<span class='warning'>\The [src] does not appear to have a connection.</span>")
return 0

View File

@@ -48,7 +48,7 @@
return 0
for(var/datum/mind/ai_mind in malf_ai)
ai_mind.assigned_role = "MODE"
ai_mind.special_role = "malfunctioning AI"//So they actually have a special role/N
ai_mind.special_role = SPECIAL_ROLE_MALF
log_game("[ai_mind.key] (ckey) has been selected as a malf AI")
return 1
@@ -64,7 +64,7 @@
AI.show_laws()
greet_malf(AI_mind)
AI_mind.special_role = "malfunction"
AI_mind.special_role = SPECIAL_ROLE_MALF
AI_mind.current.verbs += /datum/game_mode/malfunction/proc/takeover
for(var/mob/living/silicon/robot/R in AI.connected_robots)
@@ -170,7 +170,7 @@
set category = "Malfunction"
set name = "System Override"
set desc = "Start the victory timer"
if(!istype(ticker.mode,/datum/game_mode/malfunction))
if(!GAMEMODE_IS_MALF)
to_chat(usr, "You cannot begin a takeover in this round type!.")
return
if(ticker.mode:malf_mode_declared)
@@ -321,7 +321,7 @@
/datum/game_mode/proc/auto_declare_completion_malfunction()
if( malf_ai.len || istype(ticker.mode,/datum/game_mode/malfunction) )
if(malf_ai.len || GAMEMODE_IS_MALF)
var/text = "<FONT size = 2><B>The malfunctioning AI were:</B></FONT>"
var/module_text_temp = "<br><b>Purchased modules:</b><br>" //Added at the end

View File

@@ -75,11 +75,11 @@
scientist.assigned_role = "MODE"
scientist.special_role = "abductor scientist"
scientist.special_role = SPECIAL_ROLE_ABDUCTOR_SCIENTIST
log_game("[scientist.key] (ckey) has been selected as an abductor team [team_number] scientist.")
agent.assigned_role = "MODE"
agent.special_role = "abductor agent"
agent.special_role = SPECIAL_ROLE_ABDUCTOR_AGENT
log_game("[agent.key] (ckey) has been selected as an abductor team [team_number] agent.")
abductors |= agent

View File

@@ -20,7 +20,7 @@
var/mob/living/simple_animal/hostile/morph/S = new /mob/living/simple_animal/hostile/morph(pick(xeno_spawn))
player_mind.transfer_to(S)
player_mind.assigned_role = "Morph"
player_mind.special_role = "Morph"
player_mind.special_role = SPECIAL_ROLE_MORPH
ticker.mode.traitors |= player_mind
to_chat(S, S.playstyle_string)
S << 'sound/magic/Mutate.ogg'

View File

@@ -389,7 +389,7 @@
player_mind.active = 1
player_mind.transfer_to(R)
player_mind.assigned_role = "revenant"
player_mind.special_role = "Revenant"
player_mind.special_role = SPECIAL_ROLE_REVENANT
ticker.mode.traitors |= player_mind
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.")

View File

@@ -44,7 +44,7 @@
var/mob/living/simple_animal/revenant/revvie = new /mob/living/simple_animal/revenant/(pick(spawn_locs))
player_mind.transfer_to(revvie)
player_mind.assigned_role = "revenant"
player_mind.special_role = "Revenant"
player_mind.special_role = SPECIAL_ROLE_REVENANT
ticker.mode.traitors |= player_mind
message_admins("[key_of_revenant] has been made into a revenant by an event.")
log_game("[key_of_revenant] was spawned as a revenant by an event.")

View File

@@ -238,7 +238,7 @@ datum/game_mode/nations
return 1
/proc/get_nations_mode()
if(!ticker || !istype(ticker.mode, /datum/game_mode/nations))
if(!GAMEMODE_IS_NATIONS)
return null
return ticker.mode

File diff suppressed because it is too large Load Diff

View File

@@ -50,7 +50,7 @@ proc/issyndicate(mob/living/M as mob)
for(var/datum/mind/synd_mind in syndicates)
synd_mind.assigned_role = "MODE" //So they aren't chosen for other jobs.
synd_mind.special_role = "Syndicate"//So they actually have a special role/N
synd_mind.special_role = SPECIAL_ROLE_NUKEOPS
return 1
@@ -360,7 +360,7 @@ proc/issyndicate(mob/living/M as mob)
/datum/game_mode/proc/auto_declare_completion_nuclear()
if( syndicates.len || (ticker && istype(ticker.mode,/datum/game_mode/nuclear)) )
if(syndicates.len || GAMEMODE_IS_NUCLEAR)
var/text = "<br><FONT size=3><B>The syndicate operatives were:</B></FONT>"
var/purchases = ""

View File

@@ -1,7 +1,7 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
var/global/list/all_objectives = list()
var/list/potential_theft_objectives=subtypesof(/datum/theft_objective) \
var/list/potential_theft_objectives = subtypesof(/datum/theft_objective) \
- /datum/theft_objective/steal \
- /datum/theft_objective/special \
- /datum/theft_objective/number \
@@ -16,40 +16,34 @@ var/list/potential_theft_objectives=subtypesof(/datum/theft_objective) \
var/completed = 0 //currently only used for custom objectives.
var/martyr_compatible = 0 //If the objective is compatible with martyr objective, i.e. if you can still do it while dead.
New(var/text)
/datum/objective/New(var/text)
all_objectives |= src
if(text)
explanation_text = text
Destroy()
/datum/objective/Destroy()
all_objectives -= src
return ..()
proc/check_completion()
/datum/objective/proc/check_completion()
return completed
proc/find_target()
var/list/possible_targets = list()
for(var/datum/mind/possible_target in ticker.minds)
if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != DEAD) && possible_target.current.client)
possible_targets += possible_target
if(possible_targets.len > 0)
target = pick(possible_targets)
/datum/objective/proc/is_invalid_target(datum/mind/possible_target)
if(possible_target == owner)
return TARGET_INVALID_IS_OWNER
if(!ishuman(possible_target.current))
return TARGET_INVALID_NOT_HUMAN
if(!possible_target.current.stat == DEAD)
return TARGET_INVALID_DEAD
proc/find_target_by_role(role, role_type=0)//Option sets either to check assigned role or special role. Default to assigned.
/datum/objective/proc/find_target()
var/list/possible_targets = list()
for(var/datum/mind/possible_target in ticker.minds)
if((possible_target != owner) && ishuman(possible_target.current) && ((role_type ? possible_target.special_role : possible_target.assigned_role) == role) && (possible_target.current.stat != DEAD) && possible_target.current.client)
possible_targets += possible_target
if(possible_targets.len > 0)
target = pick(possible_targets)
if(is_invalid_target(possible_target))
continue
//Selects someone with a specific special role if role is != null. Or just anyone with a special role
proc/find_target_with_special_role(role)
var/list/possible_targets = list()
for(var/datum/mind/possible_target in ticker.minds)
if((possible_target != owner) && ishuman(possible_target.current) && (role && possible_target.special_role == role || !role && possible_target.special_role) && (possible_target.current.stat != DEAD) && possible_target.current.client)
possible_targets += possible_target
if(possible_targets.len > 0)
target = pick(possible_targets)
@@ -57,28 +51,23 @@ var/list/potential_theft_objectives=subtypesof(/datum/theft_objective) \
/datum/objective/assassinate
martyr_compatible = 1
find_target()
/datum/objective/assassinate/find_target()
..()
if(target && target.current)
explanation_text = "Assassinate [target.current.real_name], the [target.assigned_role]."
else
explanation_text = "Free Objective"
return target
find_target_by_role(role, role_type=0)
..(role, role_type)
if(target && target.current)
explanation_text = "Assassinate [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role]."
else
explanation_text = "Free Objective"
return target
check_completion()
/datum/objective/assassinate/check_completion()
if(target && target.current)
// TODO: Tie into space manager
if(target.current.stat == DEAD || issilicon(target.current) || isbrain(target.current) || target.current.z > ZLEVEL_DERELICT || !target.current.ckey) //Borgs/brains/AIs count as dead for traitor objectives. --NeoFite
if(target.current.stat == DEAD)
return 1
if(issilicon(target.current) || isbrain(target.current)) //Borgs/brains/AIs count as dead for traitor objectives. --NeoFite
return 1
if(target.current.z > ZLEVEL_DERELICT)
return 1
if(!target.current.ckey)
return 1
return 0
return 1
@@ -88,7 +77,7 @@ var/list/potential_theft_objectives=subtypesof(/datum/theft_objective) \
/datum/objective/mutiny
martyr_compatible = 1
find_target()
/datum/objective/mutiny/find_target()
..()
if(target && target.current)
explanation_text = "Assassinate [target.current.real_name], the [target.assigned_role]."
@@ -96,66 +85,54 @@ var/list/potential_theft_objectives=subtypesof(/datum/theft_objective) \
explanation_text = "Free Objective"
return target
find_target_by_role(role, role_type=0)
..(role, role_type)
if(target && target.current)
explanation_text = "Assassinate or exile [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role]."
else
explanation_text = "Free Objective"
return target
check_completion()
/datum/objective/mutiny/check_completion()
if(target && target.current)
if(target.current.stat == DEAD || !ishuman(target.current) || !target.current.ckey || !target.current.client)
return 1
var/turf/T = get_turf(target.current)
// TODO: Tie into space manager
if(T && !(T.z in config.station_levels)) //If they leave the station they count as dead for this
return 2
return 1
return 0
return 1
/datum/objective/mutiny/rp
find_target()
/datum/objective/mutiny/rp/find_target()
..()
if(target && target.current)
explanation_text = "Assassinate, capture or convert [target.current.real_name], the [target.assigned_role]."
else
explanation_text = "Free Objective"
return target
find_target_by_role(role, role_type=0)
..(role, role_type)
//less violent rev objectives
/datum/objective/mutiny/rp/check_completion()
if(target && target.current)
explanation_text = "Assassinate, capture or convert [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role]."
else
explanation_text = "Free Objective"
return target
if(target.current.stat == DEAD)
return 1
if(!ishuman(target.current))
return 1
if(iscarbon(target.current))
var/mob/living/carbon/C = target.current
if(C.handcuffed)
return 1
// less violent rev objectives
check_completion()
var/rval = 1
if(target && target.current)
//assume that only carbon mobs can become rev heads for now
if(target.current.stat == DEAD || target.current:handcuffed || !ishuman(target.current))
if(GAMEMODE_IS_REVOLUTION)
if(target in ticker.mode.head_revolutionaries)
return 1
// Check if they're converted
if(istype(ticker.mode, /datum/game_mode/revolution))
if(target in ticker.mode:head_revolutionaries)
return 1
var/turf/T = get_turf(target.current)
// TODO: Tie into space manager
if(T && !(T.z in config.station_levels)) //If they leave the station they count as dead for this
rval = 2
var/turf/T = get_turf(target.current)
if(T && !(T.z in config.station_levels))
return 1
return 0
return rval
return 1
/datum/objective/maroon
martyr_compatible = 1
find_target()
/datum/objective/maroon/find_target()
..()
if(target && target.current)
explanation_text = "Prevent [target.current.real_name], the [target.assigned_role] from escaping alive."
@@ -163,28 +140,30 @@ var/list/potential_theft_objectives=subtypesof(/datum/theft_objective) \
explanation_text = "Free Objective"
return target
find_target_by_role(role, role_type=0)
..(role, role_type)
/datum/objective/maroon/check_completion()
if(target && target.current)
explanation_text = "Prevent [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role] from escaping alive."
else
explanation_text = "Free Objective"
return target
check_completion()
if(target && target.current)
// TODO: Tie into space manager
if(target.current.stat == DEAD || issilicon(target.current) || isbrain(target.current) || target.current.z > ZLEVEL_DERELICT || !target.current.ckey) //Borgs/brains/AIs count as dead for traitor objectives. --NeoFite
if(target.current.stat == DEAD)
return 1
if(issilicon(target.current))
return 1
if(isbrain(target.current))
return 1
// TODO: Tie into space manager
if((target.current.z in config.admin_levels))
if(target.current.z in config.admin_levels)
return 0
// TODO: Tie into space manager
if(target.current.z > ZLEVEL_DERELICT)
return 1
if(!target.current.ckey)
return 1
return 0
return 1
/datum/objective/debrain //I want braaaainssss
martyr_compatible = 0
find_target()
/datum/objective/debrain/find_target()
..()
if(target && target.current)
explanation_text = "Steal the brain of [target.current.real_name] the [target.assigned_role]."
@@ -193,20 +172,12 @@ var/list/potential_theft_objectives=subtypesof(/datum/theft_objective) \
return target
find_target_by_role(role, role_type=0)
..(role, role_type)
if(target && target.current)
explanation_text = "Steal the brain of [target.current.real_name] the [!role_type ? target.assigned_role : target.special_role]."
else
explanation_text = "Free Objective"
return target
check_completion()
/datum/objective/debrain/check_completion()
if(!target)//If it's a free objective.
return 1
if( !owner.current || owner.current.stat==DEAD )//If you're otherwise dead.
if(!owner.current || owner.current.stat == DEAD)
return 0
if( !target.current || !isbrain(target.current) )
if(!target.current || !isbrain(target.current))
return 0
var/atom/A = target.current
while(A.loc) //check to see if the brainmob is on our person
@@ -219,7 +190,7 @@ var/list/potential_theft_objectives=subtypesof(/datum/theft_objective) \
/datum/objective/protect //The opposite of killing a dude.
martyr_compatible = 1
find_target()
/datum/objective/protect/find_target()
..()
if(target && target.current)
explanation_text = "Protect [target.current.real_name], the [target.assigned_role]."
@@ -227,38 +198,28 @@ var/list/potential_theft_objectives=subtypesof(/datum/theft_objective) \
explanation_text = "Free Objective"
return target
find_target_by_role(role, role_type=0)
..(role, role_type)
if(target && target.current)
explanation_text = "Protect [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role]."
else
explanation_text = "Free Objective"
return target
find_target_with_special_role(role,role_type=0)
..(role)
if(target && target.current)
explanation_text = "Protect [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role]."
else
explanation_text = "Free Objective"
return target
check_completion()
/datum/objective/protect/check_completion()
if(!target) //If it's a free objective.
return 1
if(target.current)
if(target.current.stat == DEAD || issilicon(target.current) || isbrain(target.current))
if(target.current.stat == DEAD)
return 0
if(issilicon(target.current))
return 0
if(isbrain(target.current))
return 0
return 1
return 0
/datum/objective/protect/mindslave //subytpe for mindslave implants
/datum/objective/hijack
martyr_compatible = 0 //Technically you won't get both anyway.
explanation_text = "Hijack the shuttle by escaping on it with no loyalist NanoTrasen crew on board and alive. Syndicate agents, other enemies of NanoTrasen, cyborgs, and pets may be allowed to escape alive."
explanation_text = "Hijack the shuttle by escaping on it with no loyalist NanoTrasen crew on board and alive. \
Syndicate agents, other enemies of NanoTrasen, cyborgs, and pets may be allowed to escape alive."
check_completion()
/datum/objective/hijack/check_completion()
if(!owner.current || owner.current.stat)
return 0
if(shuttle_master.emergency.mode < SHUTTLE_ENDGAME)
@@ -277,7 +238,7 @@ var/list/potential_theft_objectives=subtypesof(/datum/theft_objective) \
continue
if(isanimal(player)) //Poly does not own the shuttle
continue
if(player.mind.special_role && !(player.mind.special_role == "Response Team")) //Is antag, and not ERT
if(player.mind.special_role && !(player.mind.special_role == SPECIAL_ROLE_ERT)) //Is antag, and not ERT
continue
if(get_area(player) == A)
@@ -288,7 +249,7 @@ var/list/potential_theft_objectives=subtypesof(/datum/theft_objective) \
explanation_text = "Hijack the emergency shuttle by ensuring only you (or your copies) escape."
martyr_compatible = 0
check_completion()
/datum/objective/hijackclone/check_completion()
if(!owner.current)
return 0
if(shuttle_master.emergency.mode < SHUTTLE_ENDGAME)
@@ -299,7 +260,7 @@ var/list/potential_theft_objectives=subtypesof(/datum/theft_objective) \
for(var/mob/living/player in player_list) //Make sure nobody else is onboard
if(player.mind && player.mind != owner)
if(player.stat != DEAD)
if(istype(player, /mob/living/silicon))
if(issilicon(player))
continue
if(get_area(player) == A)
if(player.real_name != owner.current.real_name && !istype(get_turf(player.mind.current), /turf/simulated/shuttle/floor4))
@@ -308,7 +269,7 @@ var/list/potential_theft_objectives=subtypesof(/datum/theft_objective) \
for(var/mob/living/player in player_list) //Make sure at least one of you is onboard
if(player.mind && player.mind != owner)
if(player.stat != DEAD)
if(istype(player, /mob/living/silicon))
if(issilicon(player))
continue
if(get_area(player) == A)
if(player.real_name == owner.current.real_name && !istype(get_turf(player.mind.current), /turf/simulated/shuttle/floor4))
@@ -319,7 +280,7 @@ var/list/potential_theft_objectives=subtypesof(/datum/theft_objective) \
explanation_text = "Do not allow any lifeforms, be it organic or synthetic to escape on the shuttle alive. AIs, Cyborgs, and pAIs are not considered alive."
martyr_compatible = 1
check_completion()
/datum/objective/block/check_completion()
if(!istype(owner.current, /mob/living/silicon))
return 0
if(shuttle_master.emergency.mode < SHUTTLE_ENDGAME)
@@ -353,7 +314,7 @@ var/list/potential_theft_objectives=subtypesof(/datum/theft_objective) \
/area/shuttle/escape_pod5/transit,
/area/centcom/evac)
check_completion()
/datum/objective/escape/check_completion()
if(issilicon(owner.current))
return 0
if(isbrain(owner.current))
@@ -378,7 +339,7 @@ var/list/potential_theft_objectives=subtypesof(/datum/theft_objective) \
/datum/objective/escape/escape_with_identity
var/target_real_name // Has to be stored because the target's real_name can change over the course of the round
find_target()
/datum/objective/escape/escape_with_identity/find_target()
var/list/possible_targets = list() //Copypasta because NO_SCAN races, yay for snowflakes.
for(var/datum/mind/possible_target in ticker.minds)
if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != DEAD) && possible_target.current.client)
@@ -393,7 +354,7 @@ var/list/potential_theft_objectives=subtypesof(/datum/theft_objective) \
else
explanation_text = "Free Objective"
check_completion()
/datum/objective/escape/escape_with_identity/check_completion()
if(!target_real_name)
return 1
if(!ishuman(owner.current))
@@ -408,9 +369,9 @@ var/list/potential_theft_objectives=subtypesof(/datum/theft_objective) \
/datum/objective/die
explanation_text = "Die a glorious death."
check_completion()
/datum/objective/die/check_completion()
if(!owner.current || owner.current.stat == DEAD || isbrain(owner.current))
return 1 //Brains no longer win survive objectives. --NEO
return 1
if(issilicon(owner.current) && owner.current != owner.original)
return 1
return 0
@@ -420,7 +381,7 @@ var/list/potential_theft_objectives=subtypesof(/datum/theft_objective) \
/datum/objective/survive
explanation_text = "Stay alive until the end."
check_completion()
/datum/objective/survive/check_completion()
if(!owner.current || owner.current.stat == DEAD || isbrain(owner.current))
return 0 //Brains no longer win survive objectives. --NEO
if(issilicon(owner.current) && owner.current != owner.original)
@@ -437,7 +398,7 @@ var/list/potential_theft_objectives=subtypesof(/datum/theft_objective) \
var/datum/theft_objective/steal_target
martyr_compatible = 0
find_target(var/special_only=0)
/datum/objective/steal/find_target(var/special_only=0)
var/loop=50
while(!steal_target && loop > 0)
loop--
@@ -459,7 +420,7 @@ var/list/potential_theft_objectives=subtypesof(/datum/theft_objective) \
explanation_text = "Free Objective."
proc/select_target()
/datum/objective/steal/proc/select_target()
var/list/possible_items_all = potential_theft_objectives+"custom"
var/new_target = input("Select target:", "Objective target", null) as null|anything in possible_items_all
if(!new_target) return
@@ -479,14 +440,14 @@ var/list/potential_theft_objectives=subtypesof(/datum/theft_objective) \
explanation_text = "Steal [steal_target.name]."
return steal_target
check_completion()
/datum/objective/steal/check_completion()
if(!steal_target) return 1 // Free Objective
return steal_target.check_completion(owner)
/datum/objective/steal/exchange
martyr_compatible = 0
proc/set_faction(var/faction,var/otheragent)
/datum/objective/steal/exchange/proc/set_faction(var/faction,var/otheragent)
target = otheragent
var/datum/theft_objective/unique/targetinfo
if(faction == "red")
@@ -497,8 +458,7 @@ var/list/potential_theft_objectives=subtypesof(/datum/theft_objective) \
steal_target = targetinfo
/datum/objective/steal/exchange/backstab
set_faction(var/faction)
/datum/objective/steal/exchange/backstab/set_faction(var/faction)
var/datum/theft_objective/unique/targetinfo
if(faction == "red")
targetinfo = new /datum/theft_objective/unique/docs_red
@@ -508,32 +468,32 @@ var/list/potential_theft_objectives=subtypesof(/datum/theft_objective) \
steal_target = targetinfo
/datum/objective/download
proc/gen_amount_goal()
/datum/objective/download/proc/gen_amount_goal()
target_amount = rand(10,20)
explanation_text = "Download [target_amount] research levels."
return target_amount
check_completion()
/datum/objective/download/check_completion()
return 0
/datum/objective/capture
proc/gen_amount_goal()
/datum/objective/capture/proc/gen_amount_goal()
target_amount = rand(5,10)
explanation_text = "Accumulate [target_amount] capture points."
return target_amount
check_completion()//Basically runs through all the mobs in the area to determine how much they are worth.
/datum/objective/capture/check_completion()//Basically runs through all the mobs in the area to determine how much they are worth.
return 0
/datum/objective/absorb
proc/gen_amount_goal(var/lowbound = 4, var/highbound = 6)
/datum/objective/absorb/proc/gen_amount_goal(var/lowbound = 4, var/highbound = 6)
target_amount = rand (lowbound,highbound)
if(ticker)
var/n_p = 1 //autowin
@@ -554,7 +514,7 @@ var/list/potential_theft_objectives=subtypesof(/datum/theft_objective) \
explanation_text = "Absorb [target_amount] compatible genomes."
return target_amount
check_completion()
/datum/objective/absorb/check_completion()
if(owner && owner.changeling && owner.changeling.absorbed_dna && (owner.changeling.absorbedcount >= target_amount))
return 1
else
@@ -564,7 +524,7 @@ var/list/potential_theft_objectives=subtypesof(/datum/theft_objective) \
martyr_compatible = 1
var/target_real_name
find_target()
/datum/objective/destroy/find_target()
var/list/possible_targets = active_ais(1)
var/mob/living/silicon/ai/target_ai = pick(possible_targets)
target = target_ai.mind
@@ -575,7 +535,7 @@ var/list/potential_theft_objectives=subtypesof(/datum/theft_objective) \
explanation_text = "Free Objective"
return target
check_completion()
/datum/objective/destroy/check_completion()
if(target && target.current)
// TODO: Tie into space manager
if(target.current.stat == DEAD || target.current.z > ZLEVEL_DERELICT || !target.current.ckey)
@@ -584,13 +544,13 @@ var/list/potential_theft_objectives=subtypesof(/datum/theft_objective) \
return 1
/datum/objective/blood
proc/gen_amount_goal(low = 150, high = 400)
/datum/objective/blood/proc/gen_amount_goal(low = 150, high = 400)
target_amount = rand(low,high)
target_amount = round(round(target_amount/5)*5)
explanation_text = "Accumulate atleast [target_amount] units of blood in total."
return target_amount
check_completion()
/datum/objective/blood/check_completion()
if(owner && owner.vampire && owner.vampire.bloodtotal && owner.vampire.bloodtotal >= target_amount)
return 1
else
@@ -599,18 +559,18 @@ var/list/potential_theft_objectives=subtypesof(/datum/theft_objective) \
// /vg/; Vox Inviolate for humans :V
/datum/objective/minimize_casualties
explanation_text = "Minimise casualties."
check_completion()
/datum/objective/minimize_casualties/check_completion()
if(owner.kills.len>5) return 0
return 1
//Vox heist objectives.
/datum/objective/heist
proc/choose_target()
/datum/objective/heist/proc/choose_target()
return
/datum/objective/heist/kidnap
choose_target()
/datum/objective/heist/kidnap/choose_target()
var/list/roles = list("Chief Engineer","Research Director","Roboticist","Chemist","Station Engineer")
var/list/possible_targets = list()
var/list/priority_targets = list()
@@ -634,7 +594,7 @@ var/list/potential_theft_objectives=subtypesof(/datum/theft_objective) \
explanation_text = "Free Objective"
return target
check_completion()
/datum/objective/heist/kidnap/check_completion()
if(target && target.current)
if(target.current.stat == DEAD)
return 0
@@ -652,7 +612,7 @@ var/list/potential_theft_objectives=subtypesof(/datum/theft_objective) \
return 0
/datum/objective/heist/loot
choose_target()
/datum/objective/heist/loot/choose_target()
var/loot = "an object"
switch(rand(1,8))
if(1)
@@ -690,7 +650,7 @@ var/list/potential_theft_objectives=subtypesof(/datum/theft_objective) \
explanation_text = "We are lacking in hardware. Steal or trade [loot]."
check_completion()
/datum/objective/heist/loot/check_completion()
var/total_amount = 0
for(var/obj/O in locate(/area/shuttle/vox))
@@ -723,7 +683,7 @@ var/list/potential_theft_objectives=subtypesof(/datum/theft_objective) \
return 0
/datum/objective/heist/salvage
choose_target()
/datum/objective/heist/salvage/choose_target()
switch(rand(1,8))
if(1)
target = "metal"
@@ -752,7 +712,7 @@ var/list/potential_theft_objectives=subtypesof(/datum/theft_objective) \
explanation_text = "Ransack or trade with the station and escape with [target_amount] [target]."
check_completion()
/datum/objective/heist/salvage/check_completion()
var/total_amount = 0
for(var/obj/item/O in locate(/area/shuttle/vox))
@@ -797,7 +757,7 @@ var/list/potential_theft_objectives=subtypesof(/datum/theft_objective) \
/datum/objective/heist/inviolate_crew
explanation_text = "Do not leave any Vox behind, alive or dead."
check_completion()
/datum/objective/heist/inviolate_crew/check_completion()
var/datum/game_mode/heist/H = ticker.mode
if(H.is_raider_crew_safe())
return 1
@@ -806,7 +766,7 @@ var/list/potential_theft_objectives=subtypesof(/datum/theft_objective) \
/datum/objective/heist/inviolate_death
explanation_text = "Follow the Inviolate. Minimise death and loss of resources."
check_completion()
/datum/objective/heist/inviolate_death/check_completion()
var/vox_allowed_kills = 3 // The number of people the vox can accidently kill. Mostly a counter to people killing themselves if a raider touches them to force fail.
var/vox_total_kills = 0

View File

@@ -111,7 +111,7 @@
to_chat(rev_mind.current, "<span class='userdanger'>You are a member of the revolutionaries' leadership!</span>")
for(var/datum/objective/objective in rev_mind.objectives)
to_chat(rev_mind.current, "<B>Objective #[obj_count]</B>: [objective.explanation_text]")
rev_mind.special_role = "Head Revolutionary"
rev_mind.special_role = SPECIAL_ROLE_HEAD_REV
obj_count++
/////////////////////////////////////////////////////////////////////////////////
@@ -246,7 +246,7 @@
rev_mind.current.Stun(5)
to_chat(rev_mind.current, "<span class='danger'><FONT size = 3> You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!</FONT></span>")
rev_mind.current.attack_log += "\[[time_stamp()]\] <font color='red'>Has been converted to the revolution!</font>"
rev_mind.special_role = "Revolutionary"
rev_mind.special_role = SPECIAL_ROLE_REV
update_rev_icons_added(rev_mind)
if(jobban_isbanned(rev_mind.current, ROLE_REV))
replace_jobbaned_player(rev_mind.current, ROLE_REV)
@@ -335,7 +335,7 @@
/datum/game_mode/proc/auto_declare_completion_revolution()
var/list/targets = list()
if(head_revolutionaries.len || istype(ticker.mode,/datum/game_mode/revolution))
if(head_revolutionaries.len || GAMEMODE_IS_REVOLUTION)
var/num_revs = 0
var/num_survivors = 0
for(var/mob/living/carbon/survivor in living_mob_list)
@@ -352,14 +352,14 @@
text += "<br>"
to_chat(world, text)
if(revolutionaries.len || istype(ticker.mode,/datum/game_mode/revolution))
if(revolutionaries.len || GAMEMODE_IS_REVOLUTION)
var/text = "<br><font size=3><b>The revolutionaries were:</b></font>"
for(var/datum/mind/rev in revolutionaries)
text += printplayer(rev, 1)
text += "<br>"
to_chat(world, text)
if( head_revolutionaries.len || revolutionaries.len || istype(ticker.mode,/datum/game_mode/revolution) )
if( head_revolutionaries.len || revolutionaries.len || GAMEMODE_IS_REVOLUTION )
var/text = "<br><font size=3><b>The heads of staff were:</b></font>"
var/list/heads = get_all_heads()
for(var/datum/mind/head in heads)

View File

@@ -94,7 +94,7 @@ Made by Xhuis
shadows += shadow
possible_shadowlings -= shadow
modePlayer += shadow
shadow.special_role = "Shadowling"
shadow.special_role = SPECIAL_ROLE_SHADOWLING
shadow.restricted_roles = restricted_jobs
shadowlings--
return 1
@@ -145,7 +145,7 @@ Made by Xhuis
return 0
if(!(new_thrall_mind in shadowling_thralls))
shadowling_thralls += new_thrall_mind
new_thrall_mind.special_role = "shadowling thrall"
new_thrall_mind.special_role = SPECIAL_ROLE_SHADOWLING_THRALL
update_shadow_icons_added(new_thrall_mind)
new_thrall_mind.current.attack_log += "\[[time_stamp()]\] <span class='danger'>Became a thrall</span>"
new_thrall_mind.current.add_language("Shadowling Hivemind")

View File

@@ -368,7 +368,7 @@
"<span class='warning'>False faces all d<b>ark not real not real not--</b></span>")
target.setOxyLoss(0) //In case the shadowling was choking them out
ticker.mode.add_thrall(target.mind)
target.mind.special_role = "shadowling thrall"
target.mind.special_role = SPECIAL_ROLE_SHADOWLING_THRALL
/obj/effect/proc_holder/spell/targeted/shadowling_regenarmor //Resets a shadowling's species to normal, removes genetic defects, and re-equips their armor
name = "Rapid Re-Hatch"
@@ -828,7 +828,7 @@
to_chat(usr, "<span class='shadowling'>You instantly rearrange <b>[target]</b>'s memories, hyptonitizing them into a thrall.</span>")
to_chat(target, "<span class='userdanger'><font size=3>An agonizing spike of pain drives into your mind, and--</font></span>")
ticker.mode.add_thrall(target.mind)
target.mind.special_role = "shadowling thrall"
target.mind.special_role = SPECIAL_ROLE_SHADOWLING_THRALL
target.add_language("Shadowling Hivemind")

View File

@@ -48,7 +48,7 @@
break
var/datum/mind/traitor = pick(possible_traitors)
traitors += traitor
traitor.special_role = "traitor"
traitor.special_role = SPECIAL_ROLE_TRAITOR
var/datum/mindslaves/slaved = new()
slaved.masters += traitor
traitor.som = slaved //we MIGT want to mindslave someone

View File

@@ -39,7 +39,7 @@
/datum/game_mode/traitor/vampire/post_setup()
for(var/datum/mind/vampire in vampires)
grant_vampire_powers(vampire.current)
vampire.special_role = "Vampire"
vampire.special_role = SPECIAL_ROLE_VAMPIRE
forge_vampire_objectives(vampire)
greet_vampire(vampire)
..()

View File

@@ -58,7 +58,7 @@
var/datum/mindslaves/slaved = new()
slaved.masters += vampire
vampire.som = slaved //we MIGT want to mindslave someone
vampire.special_role = "Vampire" // Needs to be done in pre-setup to prevent role bugs
vampire.special_role = SPECIAL_ROLE_VAMPIRE
return 1
else
return 0

View File

@@ -337,7 +337,7 @@
ticker.mode.vampire_enthralled.Add(H.mind)
ticker.mode.vampire_enthralled[H.mind] = user.mind
H.mind.special_role = "VampThrall"
H.mind.special_role = SPECIAL_ROLE_VAMPIRE_THRALL
to_chat(H, "<span class='danger'>You have been Enthralled by [user]. Follow their every command.</span>")
to_chat(user, "<span class='warning'>You have successfully Enthralled [H]. <i>If they refuse to do as you say just adminhelp.</i></span>")
log_admin("[ckey(user.key)] has mind-slaved [ckey(H.key)].")

View File

@@ -100,7 +100,7 @@
new_objective.explanation_text = "Protect [H.real_name], the wizard."
M.mind.objectives += new_objective
ticker.mode.traitors += M.mind
M.mind.special_role = "apprentice"
M.mind.special_role = SPECIAL_ROLE_WIZARD_APPRENTICE
ticker.mode.update_wiz_icons_added(M.mind)
M.faction = list("wizard")
else
@@ -259,7 +259,7 @@ var/global/list/multiverse = list()
..()
/obj/item/weapon/multisword/attack_self(mob/user)
if(user.mind.special_role == "apprentice")
if(user.mind.special_role == SPECIAL_ROLE_WIZARD_APPRENTICE)
to_chat(user, "<span class='warning'>You know better than to touch your teacher's stuff.</span>")
return
if(cooldown < world.time)
@@ -346,7 +346,7 @@ var/global/list/multiverse = list()
M.mind.objectives += hijack_objective
hijack_objective.explanation_text = "Ensure only [usr.real_name] and their copies are on the shuttle!"
to_chat(M, "<B>Objective #[1]</B>: [hijack_objective.explanation_text]")
M.mind.special_role = "multiverse traveller"
M.mind.special_role = SPECIAL_ROLE_MULTIVERSE
log_game("[M.key] was made a multiverse traveller with the objective to help [usr.real_name] hijack.")
else
var/datum/objective/protect/new_objective = new /datum/objective/protect
@@ -355,7 +355,7 @@ var/global/list/multiverse = list()
new_objective.explanation_text = "Protect [usr.real_name], your copy, and help them defend the innocent from the mobs of multiverse clones."
M.mind.objectives += new_objective
to_chat(M, "<B>Objective #[1]</B>: [new_objective.explanation_text]")
M.mind.special_role = "multiverse traveller"
M.mind.special_role = SPECIAL_ROLE_MULTIVERSE
log_game("[M.key] was made a multiverse traveller with the objective to help [usr.real_name] protect the station.")
/obj/item/weapon/multisword/proc/equip_copy(var/mob/living/carbon/human/M)

View File

@@ -12,7 +12,7 @@
if(H.stat == 2 || !(H.client))
continue
if(H.mind)
if(H.mind.special_role == "Wizard" || H.mind.special_role == "apprentice")
if(H.mind.special_role == SPECIAL_ROLE_WIZARD || H.mind.special_role == SPECIAL_ROLE_WIZARD_APPRENTICE)
continue
var/randomizeguns = pick(gunslist)
var/randomizemagic = pick(magiclist)

View File

@@ -640,7 +640,7 @@
if(!ishuman(H))
return 1
if(H.mind.special_role == "apprentice")
if(H.mind.special_role == SPECIAL_ROLE_WIZARD_APPRENTICE)
temp = "If you got caught sneaking a peak from your teacher's spellbook, you'd likely be expelled from the Wizard Academy. Better not."
return 1
@@ -689,7 +689,7 @@
for(var/obj/effect/proc_holder/spell/knownspell in user.mind.spell_list)
if(knownspell.type == S.type)
if(user.mind)
if(user.mind.special_role == "apprentice" || user.mind.special_role == "Wizard")
if(user.mind.special_role == SPECIAL_ROLE_WIZARD_APPRENTICE || user.mind.special_role == SPECIAL_ROLE_WIZARD)
to_chat(user, "<span class='notice'>You're already far more versed in this spell than this flimsy how-to book can provide.</span>")
else
to_chat(user, "<span class='notice'>You've already read this one.</span>")

View File

@@ -28,7 +28,7 @@
wizards += wizard
modePlayer += wizard
wizard.assigned_role = "MODE" //So they aren't chosen for other jobs.
wizard.special_role = "Wizard"
wizard.special_role = SPECIAL_ROLE_WIZARD
wizard.original = wizard.current
if(wizardstart.len == 0)
to_chat(wizard.current, "<B>\red A starting location for you could not be found, please report this bug!</B>")

View File

@@ -42,7 +42,7 @@
for(var/datum/mind/xeno in xenos)
xeno.assigned_role = "MODE"
xeno.special_role = "Alien"
xeno.special_role = SPECIAL_ROLE_XENOMORPH
set_antag_hud(xeno, "hudalien")//like this is needed...
return 1

View File

@@ -61,7 +61,7 @@
var/mob/living/carbon/human/N = M
ticker.mode.equip_traitor(N)
ticker.mode.traitors += N.mind
N.mind.special_role = "traitor"
N.mind.special_role = SPECIAL_ROLE_TRAITOR
var/objective = "Free Objective"
switch(rand(1,100))
if(1 to 50)

View File

@@ -969,7 +969,7 @@
if(!AI || !isAI(occupant)) //Mech does not have an AI for a pilot
to_chat(user, "<span class='warning'>No AI detected in the [name] onboard computer.</span>")
return
if(AI.mind.special_role == "malfunction") //Malf AIs cannot leave mechs. Except through death.
if(AI.mind.special_role == SPECIAL_ROLE_MALF) //Malf AIs cannot leave mechs. Except through death.
to_chat(user, "<span class='boldannounce'>ACCESS DENIED.</span>")
return
AI.aiRestorePowerRoutine = 0//So the AI initially has power.

View File

@@ -54,7 +54,7 @@
//ticker.mode:implanter[user.mind] += H.mind
ticker.mode:implanter[ref] = implanters
ticker.mode.traitors += H.mind
H.mind.special_role = "traitor"
H.mind.special_role = SPECIAL_ROLE_TRAITOR
to_chat(H, "<span class='warning'><B>You're now completely loyal to [user.name]!</B> You now must lay down your life to protect them and assist in their goals at any cost.</span>")
var/datum/objective/protect/mindslave/MS = new
MS.owner = H.mind

View File

@@ -185,7 +185,7 @@ var/ert_request_answered = 0
M.mind.current = M
M.mind.original = M
M.mind.assigned_role = "MODE"
M.mind.special_role = "Response Team"
M.mind.special_role = SPECIAL_ROLE_ERT
if(!(M.mind in ticker.minds))
ticker.minds += M.mind //Adds them to regular mind list.
M.loc = spawn_location

View File

@@ -468,7 +468,7 @@
dat += "<tr><td><i>Head not found!</i></td></tr>"
dat += "</table>"
if(istype(ticker.mode, /datum/game_mode/blob))
if(GAMEMODE_IS_BLOB)
var/datum/game_mode/blob/mode = ticker.mode
dat += "<br><table cellspacing=5><tr><td><B>Blob</B></td><td></td><td></td></tr>"
dat += "<tr><td><i>Progress: [blobs.len]/[mode.blobwincount]</i></td></tr>"

View File

@@ -2374,7 +2374,7 @@
if(is_special_character(H)) continue
//traitorize(H, objective, 0)
ticker.mode.traitors += H.mind
H.mind.special_role = "traitor"
H.mind.special_role = SPECIAL_ROLE_TRAITOR
var/datum/objective/new_objective = new
new_objective.owner = H
new_objective.explanation_text = objective
@@ -2384,7 +2384,7 @@
ticker.mode.finalize_traitor(H.mind)
for(var/mob/living/silicon/A in player_list)
ticker.mode.traitors += A.mind
A.mind.special_role = "traitor"
A.mind.special_role = SPECIAL_ROLE_TRAITOR
var/datum/objective/new_objective = new
new_objective.owner = A
new_objective.explanation_text = objective

View File

@@ -92,7 +92,7 @@ var/global/sent_honksquad = 0
//Creates mind stuff.
new_honksquad.mind_initialize()
new_honksquad.mind.assigned_role = "MODE"
new_honksquad.mind.special_role = "HONKsquad"
new_honksquad.mind.special_role = SPECIAL_ROLE_HONKSQUAD
ticker.mode.traitors |= new_honksquad.mind//Adds them to current traitor list. Which is really the extra antagonist list.
new_honksquad.equip_honksquad(honk_leader_selected)
return new_honksquad

View File

@@ -426,7 +426,7 @@ client/proc/one_click_antag()
//Creates mind stuff.
new_syndicate_commando.mind_initialize()
new_syndicate_commando.mind.assigned_role = "MODE"
new_syndicate_commando.mind.special_role = "Syndicate Commando"
new_syndicate_commando.mind.special_role = SPECIAL_ROLE_SYNDICATE_DEATHSQUAD
//Adds them to current traitor list. Which is really the extra antagonist list.
ticker.mode.traitors += new_syndicate_commando.mind

View File

@@ -15,7 +15,7 @@
A.copy_to(H)
ticker.mode.traitors += H.mind
H.mind.special_role = "traitor"
H.mind.special_role = SPECIAL_ROLE_TRAITOR
var/datum/objective/hijack/hijack_objective = new
hijack_objective.owner = H.mind

View File

@@ -115,7 +115,7 @@ var/global/sent_strike_team = 0
//Creates mind stuff.
new_commando.mind_initialize()
new_commando.mind.assigned_role = "MODE"
new_commando.mind.special_role = "Death Commando"
new_commando.mind.special_role = SPECIAL_ROLE_DEATHSQUAD
ticker.mode.traitors |= new_commando.mind//Adds them to current traitor list. Which is really the extra antagonist list.
new_commando.equip_death_commando(leader_selected)
return new_commando

View File

@@ -118,7 +118,7 @@ var/global/sent_syndicate_strike_team = 0
//Creates mind stuff.
new_syndicate_commando.mind_initialize()
new_syndicate_commando.mind.assigned_role = "MODE"
new_syndicate_commando.mind.special_role = "Syndicate Commando"
new_syndicate_commando.mind.special_role = SPECIAL_ROLE_SYNDICATE_DEATHSQUAD
ticker.mode.traitors |= new_syndicate_commando.mind //Adds them to current traitor list. Which is really the extra antagonist list.
new_syndicate_commando.equip_syndicate_commando(syndicate_leader_selected)
qdel(spawn_location)

View File

@@ -59,21 +59,6 @@ var/global/vox_tick = 1
W.registered_user = src
equip_to_slot_or_del(W, slot_wear_id)
/*
var/obj/item/weapon/implant/cortical/I = new(src)
I.imp_in = src
I.implanted = 1
if(ticker.mode && ( istype(ticker.mode,/datum/game_mode/vox/heist) ) )
var/datum/game_mode/vox/heist/M = ticker.mode
M.cortical_stacks += I
M.raiders[mind] = I
else if(ticker.mode && ( istype(ticker.mode,/datum/game_mode/vox/trade) ) )
var/datum/game_mode/vox/trade/M = ticker.mode
M.cortical_stacks += I
M.traders[mind] = I
*/
vox_tick++
if(vox_tick > 4) vox_tick = 1

View File

@@ -119,7 +119,7 @@
to_chat(user, "<B>Your wish is granted, but at a terrible cost...</B>")
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.")
ticker.mode.traitors += user.mind
user.mind.special_role = "traitor"
user.mind.special_role = SPECIAL_ROLE_TRAITOR
var/datum/objective/hijack/hijack = new
hijack.owner = user.mind
user.mind.objectives += hijack

View File

@@ -36,7 +36,7 @@
S.holder = holder
player_mind.transfer_to(S)
player_mind.assigned_role = "Slaughter Demon"
player_mind.special_role = "Slaughter Demon"
player_mind.special_role = SPECIAL_ROLE_SLAUGHTER_DEMON
message_admins("[key_of_slaughter] has been made into a Slaughter Demon by an event.")
log_game("[key_of_slaughter] was spawned as a Slaughter Demon by an event.")
return 1

View File

@@ -97,7 +97,7 @@
ticker.mode.xenos += new_xeno.mind
new_xeno.mind.name = new_xeno.name
new_xeno.mind.assigned_role = "MODE"
new_xeno.mind.special_role = "Alien"
new_xeno.mind.special_role = SPECIAL_ROLE_XENOMORPH
new_xeno << sound('sound/voice/hiss5.ogg',0,0,0,100)//To get the player's attention
if(gib_on_success)

View File

@@ -364,7 +364,7 @@
traitorType = inPers
ticker.mode.traitors += mind
mind.special_role = "traitor"
mind.special_role = SPECIAL_ROLE_TRAITOR
var/datum/mindslaves/slaved = new()
slaved.masters += mind
mind.som = slaved

View File

@@ -45,7 +45,7 @@
/datum/species/golem/handle_post_spawn(var/mob/living/carbon/human/H)
if(H.mind)
H.mind.assigned_role = "Golem"
H.mind.special_role = "Golem"
H.mind.special_role = SPECIAL_ROLE_GOLEM
H.real_name = "adamantine golem ([rand(1, 1000)])"
H.name = H.real_name
H.equip_to_slot_or_del(new /obj/item/clothing/under/golem(H), slot_w_uniform)

View File

@@ -1044,7 +1044,7 @@ var/list/ai_verbs_default = list(
to_chat(user, "<span class='warning'>No intelligence patterns detected.</span>")//No more magical carding of empty cores, AI RETURN TO BODY!!!11
return
if(mind.special_role == "malfunction") //AI MALF!!
if(mind.special_role == SPECIAL_ROLE_MALF) //AI MALF!!
to_chat(user, "<span class='boldannounce'>ERROR</span>: Remote transfer interface disabled.")//Do ho ho ho~
return

View File

@@ -21,7 +21,7 @@
photosync()
to_chat(src, "<b>Laws synced with AI, be sure to note any changes.</b>")
// TODO: Update to new antagonist system.
if(mind && mind.special_role == "traitor" && mind.original == src)
if(mind && mind.special_role == SPECIAL_ROLE_TRAITOR && mind.original == src)
to_chat(src, "<b>Remember, your AI does NOT share or know about your law 0.")
else
to_chat(src, "<b>No AI selected to sync laws with, disabling lawsync protocol.</b>")
@@ -30,7 +30,7 @@
to_chat(who, "<b>Obey these laws:</b>")
laws.show_laws(who)
// TODO: Update to new antagonist system.
if(mind && (mind.special_role == "traitor" && mind.original == src) && connected_ai)
if(mind && (mind.special_role == SPECIAL_ROLE_TRAITOR && mind.original == src) && connected_ai)
to_chat(who, "<b>Remember, [connected_ai.name] is technically your master, but your objective comes first.</b>")
else if(connected_ai)
to_chat(who, "<b>Remember, [connected_ai.name] is your master, other AIs can be ignored.</b>")

View File

@@ -1383,7 +1383,7 @@ var/list/robot_verbs_default = list(
var/mob/M = pick(borg_candidates)
M.mind.transfer_to(src)
M.mind.assigned_role = "MODE"
M.mind.special_role = "Death Commando"
M.mind.special_role = SPECIAL_ROLE_DEATHSQUAD
ticker.mode.traitors |= M.mind // Adds them to current traitor list. Which is really the extra antagonist list.
key = M.key
else

View File

@@ -50,8 +50,21 @@ proc/isNonCrewAntag(A)
var/mob/living/carbon/C = A
var/special_role = C.mind.special_role
var/list/crew_roles = list("traitor", "Changeling", "Vampire", "Cultist", "Head Revolutionary", "Revolutionary", "malfunctioning AI", "Shadowling", "loyalist", "mutineer", "Response Team")
if((special_role in crew_roles))
var/list/crew_roles = list(
SPECIAL_ROLE_BLOB,
SPECIAL_ROLE_CULTIST,
SPECIAL_ROLE_CHANGELING,
SPECIAL_ROLE_ERT,
SPECIAL_ROLE_HEAD_REV,
SPECIAL_ROLE_MALF,
SPECIAL_ROLE_REV,
SPECIAL_ROLE_SHADOWLING,
SPECIAL_ROLE_SHADOWLING_THRALL,
SPECIAL_ROLE_TRAITOR,
SPECIAL_ROLE_VAMPIRE,
SPECIAL_ROLE_VAMPIRE_THRALL
)
if(special_role in crew_roles)
return 0
return 1

View File

@@ -142,7 +142,7 @@
/datum/reagent/mugwort/on_mob_life(mob/living/M)
if(ishuman(M) && M.mind)
if(M.mind.special_role == "Wizard")
if(M.mind.special_role == SPECIAL_ROLE_WIZARD)
M.adjustToxLoss(-1*REM)
M.adjustOxyLoss(-1*REM)
M.adjustBruteLoss(-1*REM)

View File

@@ -25,6 +25,7 @@
#include "code\__DEFINES\error_handler.dm"
#include "code\__DEFINES\flags.dm"
#include "code\__DEFINES\game.dm"
#include "code\__DEFINES\gamemode.dm"
#include "code\__DEFINES\genetics.dm"
#include "code\__DEFINES\hud.dm"
#include "code\__DEFINES\hydroponics.dm"