Fixes clockwork sigil candidate runtime, cleans up some jobban checks with defines (#5304)

This commit is contained in:
CitadelStationBot
2018-02-05 04:23:09 -06:00
committed by Poojawa
parent 03b33075e5
commit 9e229691cc
73 changed files with 196 additions and 214 deletions
+2
View File
@@ -6,12 +6,14 @@
//These are synced with the Database, if you change the values of the defines //These are synced with the Database, if you change the values of the defines
//then you MUST update the database! //then you MUST update the database!
#define ROLE_SYNDICATE "Syndicate"
#define ROLE_TRAITOR "traitor" #define ROLE_TRAITOR "traitor"
#define ROLE_OPERATIVE "operative" #define ROLE_OPERATIVE "operative"
#define ROLE_CHANGELING "changeling" #define ROLE_CHANGELING "changeling"
#define ROLE_WIZARD "wizard" #define ROLE_WIZARD "wizard"
#define ROLE_MALF "malf AI" #define ROLE_MALF "malf AI"
#define ROLE_REV "revolutionary" #define ROLE_REV "revolutionary"
#define ROLE_REV_HEAD "Head Revolutionary"
#define ROLE_ALIEN "xenomorph" #define ROLE_ALIEN "xenomorph"
#define ROLE_PAI "pAI" #define ROLE_PAI "pAI"
#define ROLE_CULTIST "cultist" #define ROLE_CULTIST "cultist"
+1 -1
View File
@@ -476,7 +476,7 @@
if(!gametypeCheck.age_check(M.client)) if(!gametypeCheck.age_check(M.client))
continue continue
if(jobbanType) if(jobbanType)
if(jobban_isbanned(M, jobbanType) || jobban_isbanned(M, "Syndicate")) if(jobban_isbanned(M, jobbanType) || jobban_isbanned(M, ROLE_SYNDICATE))
continue continue
showCandidatePollWindow(M, poll_time, Question, result, ignore_category, time_passed, flashwindow) showCandidatePollWindow(M, poll_time, Question, result, ignore_category, time_passed, flashwindow)
+5 -6
View File
@@ -72,19 +72,18 @@ GLOBAL_LIST_EMPTY(antagonists)
/datum/antagonist/proc/is_banned(mob/M) /datum/antagonist/proc/is_banned(mob/M)
if(!M) if(!M)
return FALSE return FALSE
. = (jobban_isbanned(M,"Syndicate") || (job_rank && jobban_isbanned(M,job_rank))) . = (jobban_isbanned(M, ROLE_SYNDICATE) || (job_rank && jobban_isbanned(M,job_rank)))
/datum/antagonist/proc/replace_banned_player() /datum/antagonist/proc/replace_banned_player()
set waitfor = FALSE set waitfor = FALSE
var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as a [name]?", "[name]", null, job_rank, 50, owner.current) var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as a [name]?", "[name]", null, job_rank, 50, owner.current)
var/mob/dead/observer/theghost = null if(LAZYLEN(candidates))
if(candidates.len) var/client/C = pick(candidates)
theghost = pick(candidates)
to_chat(owner, "Your mob has been taken over by a ghost! Appeal your job ban if you want to avoid this in the future!") to_chat(owner, "Your mob has been taken over by a ghost! Appeal your job ban if you want to avoid this in the future!")
message_admins("[key_name_admin(theghost)] has taken control of ([key_name_admin(owner.current)]) to replace a jobbaned player.") message_admins("[key_name_admin(C)] has taken control of ([key_name_admin(owner.current)]) to replace a jobbaned player.")
owner.current.ghostize(0) owner.current.ghostize(0)
owner.current.key = theghost.key owner.current.key = C.key
/datum/antagonist/proc/on_removal() /datum/antagonist/proc/on_removal()
remove_innate_effects() remove_innate_effects()
+1 -1
View File
@@ -2,7 +2,7 @@
name = "Brother" name = "Brother"
antagpanel_category = "Brother" antagpanel_category = "Brother"
job_rank = ROLE_BROTHER job_rank = ROLE_BROTHER
var/special_role = "blood brother" var/special_role = ROLE_BROTHER
var/datum/team/brother_team/team var/datum/team/brother_team/team
/datum/antagonist/brother/create_team(datum/team/brother_team/new_team) /datum/antagonist/brother/create_team(datum/team/brother_team/new_team)
+3 -3
View File
@@ -396,7 +396,7 @@
var/datum/objective/assassinate/kill_objective = new var/datum/objective/assassinate/kill_objective = new
kill_objective.owner = owner kill_objective.owner = owner
if(team_mode) //No backstabbing while in a team if(team_mode) //No backstabbing while in a team
kill_objective.find_target_by_role(role = "Changeling", role_type = 1, invert = 1) kill_objective.find_target_by_role(role = ROLE_CHANGELING, role_type = 1, invert = 1)
else else
kill_objective.find_target() kill_objective.find_target()
objectives += kill_objective objectives += kill_objective
@@ -404,7 +404,7 @@
var/datum/objective/maroon/maroon_objective = new var/datum/objective/maroon/maroon_objective = new
maroon_objective.owner = owner maroon_objective.owner = owner
if(team_mode) if(team_mode)
maroon_objective.find_target_by_role(role = "Changeling", role_type = 1, invert = 1) maroon_objective.find_target_by_role(role = ROLE_CHANGELING, role_type = 1, invert = 1)
else else
maroon_objective.find_target() maroon_objective.find_target()
objectives += maroon_objective objectives += maroon_objective
@@ -426,7 +426,7 @@
var/datum/objective/escape/escape_with_identity/identity_theft = new var/datum/objective/escape/escape_with_identity/identity_theft = new
identity_theft.owner = owner identity_theft.owner = owner
if(team_mode) if(team_mode)
identity_theft.find_target_by_role(role = "Changeling", role_type = 1, invert = 1) identity_theft.find_target_by_role(role = ROLE_CHANGELING, role_type = 1, invert = 1)
else else
identity_theft.find_target() identity_theft.find_target()
objectives += identity_theft objectives += identity_theft
+1 -1
View File
@@ -51,7 +51,7 @@
var/mob/living/current = owner.current var/mob/living/current = owner.current
SSticker.mode.servants_of_ratvar += owner SSticker.mode.servants_of_ratvar += owner
SSticker.mode.update_servant_icons_added(owner) SSticker.mode.update_servant_icons_added(owner)
owner.special_role = "Servant of Ratvar" owner.special_role = ROLE_SERVANT_OF_RATVAR
owner.current.log_message("<font color=#BE8700>Has been converted to the cult of Ratvar!</font>", INDIVIDUAL_ATTACK_LOG) owner.current.log_message("<font color=#BE8700>Has been converted to the cult of Ratvar!</font>", INDIVIDUAL_ATTACK_LOG)
if(issilicon(current)) if(issilicon(current))
if(iscyborg(current) && !silent) if(iscyborg(current) && !silent)
+1 -1
View File
@@ -6,7 +6,7 @@
var/should_specialise = TRUE //do we split into AI and human, set to true on inital assignment only var/should_specialise = TRUE //do we split into AI and human, set to true on inital assignment only
var/ai_datum = /datum/antagonist/traitor/AI var/ai_datum = /datum/antagonist/traitor/AI
var/human_datum = /datum/antagonist/traitor/human var/human_datum = /datum/antagonist/traitor/human
var/special_role = "traitor" var/special_role = ROLE_TRAITOR
var/employer = "The Syndicate" var/employer = "The Syndicate"
var/give_objectives = TRUE var/give_objectives = TRUE
var/should_give_codewords = TRUE var/should_give_codewords = TRUE
+2 -2
View File
@@ -135,8 +135,8 @@
adj = "objectiveless" adj = "objectiveless"
else else
return return
new_owner.assigned_role = "Space Ninja" new_owner.assigned_role = ROLE_NINJA
new_owner.special_role = "Space Ninja" new_owner.special_role = ROLE_NINJA
new_owner.add_antag_datum(src) new_owner.add_antag_datum(src)
message_admins("[key_name_admin(admin)] has [adj] ninja'ed [new_owner.current].") message_admins("[key_name_admin(admin)] has [adj] ninja'ed [new_owner.current].")
log_admin("[key_name(admin)] has [adj] ninja'ed [new_owner.current].") log_admin("[key_name(admin)] has [adj] ninja'ed [new_owner.current].")
+1 -1
View File
@@ -122,7 +122,7 @@
nuke_team = new_team nuke_team = new_team
/datum/antagonist/nukeop/admin_add(datum/mind/new_owner,mob/admin) /datum/antagonist/nukeop/admin_add(datum/mind/new_owner,mob/admin)
new_owner.assigned_role = "Syndicate" new_owner.assigned_role = ROLE_SYNDICATE
new_owner.add_antag_datum(src) new_owner.add_antag_datum(src)
message_admins("[key_name_admin(admin)] has nuke op'ed [new_owner.current].") message_admins("[key_name_admin(admin)] has nuke op'ed [new_owner.current].")
log_admin("[key_name(admin)] has nuke op'ed [new_owner.current].") log_admin("[key_name(admin)] has nuke op'ed [new_owner.current].")
+1 -1
View File
@@ -184,7 +184,7 @@
carbon_mob.flash_act(1, 1) carbon_mob.flash_act(1, 1)
rev_mind.current.Stun(100) rev_mind.current.Stun(100)
rev_mind.add_antag_datum(/datum/antagonist/rev,rev_team) rev_mind.add_antag_datum(/datum/antagonist/rev,rev_team)
rev_mind.special_role = "Revolutionary" rev_mind.special_role = ROLE_REV
return TRUE return TRUE
/datum/antagonist/rev/head/proc/demote() /datum/antagonist/rev/head/proc/demote()
+2 -2
View File
@@ -161,12 +161,12 @@
/datum/antagonist/wizard/apply_innate_effects(mob/living/mob_override) /datum/antagonist/wizard/apply_innate_effects(mob/living/mob_override)
var/mob/living/M = mob_override || owner.current var/mob/living/M = mob_override || owner.current
update_wiz_icons_added(M, wiz_team ? TRUE : FALSE) //Don't bother showing the icon if you're solo wizard update_wiz_icons_added(M, wiz_team ? TRUE : FALSE) //Don't bother showing the icon if you're solo wizard
M.faction |= "wizard" M.faction |= ROLE_WIZARD
/datum/antagonist/wizard/remove_innate_effects(mob/living/mob_override) /datum/antagonist/wizard/remove_innate_effects(mob/living/mob_override)
var/mob/living/M = mob_override || owner.current var/mob/living/M = mob_override || owner.current
update_wiz_icons_removed(M) update_wiz_icons_removed(M)
M.faction -= "wizard" M.faction -= ROLE_WIZARD
/datum/antagonist/wizard/get_admin_commands() /datum/antagonist/wizard/get_admin_commands()
+7 -7
View File
@@ -693,20 +693,20 @@
var/datum/antagonist/changeling/C = has_antag_datum(/datum/antagonist/changeling) var/datum/antagonist/changeling/C = has_antag_datum(/datum/antagonist/changeling)
if(!C) if(!C)
C = add_antag_datum(/datum/antagonist/changeling) C = add_antag_datum(/datum/antagonist/changeling)
special_role = "Changeling" special_role = ROLE_CHANGELING
return C return C
/datum/mind/proc/make_Wizard() /datum/mind/proc/make_Wizard()
if(!has_antag_datum(/datum/antagonist/wizard)) if(!has_antag_datum(/datum/antagonist/wizard))
special_role = "Wizard" special_role = ROLE_WIZARD
assigned_role = "Wizard" assigned_role = ROLE_WIZARD
add_antag_datum(/datum/antagonist/wizard) add_antag_datum(/datum/antagonist/wizard)
/datum/mind/proc/make_Cultist() /datum/mind/proc/make_Cultist()
if(!has_antag_datum(/datum/antagonist/cult,TRUE)) if(!has_antag_datum(/datum/antagonist/cult,TRUE))
SSticker.mode.add_cultist(src,FALSE,equip=TRUE) SSticker.mode.add_cultist(src,FALSE,equip=TRUE)
special_role = "Cultist" special_role = 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 your 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>You catch a glimpse of the Realm of Nar-Sie, The Geometer of Blood. You now see how flimsy your 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 bretheren 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>") to_chat(current, "<font color=\"purple\"><b><i>Assist your new bretheren 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>")
@@ -715,7 +715,7 @@
head.give_flash = TRUE head.give_flash = TRUE
head.give_hud = TRUE head.give_hud = TRUE
add_antag_datum(head) add_antag_datum(head)
special_role = "Head Revolutionary" special_role = ROLE_REV_HEAD
/datum/mind/proc/AddSpell(obj/effect/proc_holder/spell/S) /datum/mind/proc/AddSpell(obj/effect/proc_holder/spell/S)
spell_list += S spell_list += S
@@ -816,7 +816,7 @@
//XENO //XENO
/mob/living/carbon/alien/mind_initialize() /mob/living/carbon/alien/mind_initialize()
..() ..()
mind.special_role = "Alien" mind.special_role = ROLE_ALIEN
//AI //AI
/mob/living/silicon/ai/mind_initialize() /mob/living/silicon/ai/mind_initialize()
@@ -831,5 +831,5 @@
//PAI //PAI
/mob/living/silicon/pai/mind_initialize() /mob/living/silicon/pai/mind_initialize()
..() ..()
mind.assigned_role = "pAI" mind.assigned_role = ROLE_PAI
mind.special_role = "" mind.special_role = ""
+2 -2
View File
@@ -48,7 +48,7 @@ GLOBAL_VAR(changeling_team_objective_type) //If this is not null, we hand our th
var/datum/mind/changeling = pick(antag_candidates) var/datum/mind/changeling = pick(antag_candidates)
antag_candidates -= changeling antag_candidates -= changeling
changelings += changeling changelings += changeling
changeling.special_role = "Changeling" changeling.special_role = ROLE_CHANGELING
changeling.restricted_roles = restricted_jobs changeling.restricted_roles = restricted_jobs
return 1 return 1
else else
@@ -82,7 +82,7 @@ GLOBAL_VAR(changeling_team_objective_type) //If this is not null, we hand our th
return return
if(changelings.len <= (changelingcap - 2) || prob(100 - (csc * 2))) if(changelings.len <= (changelingcap - 2) || prob(100 - (csc * 2)))
if(ROLE_CHANGELING in character.client.prefs.be_special) if(ROLE_CHANGELING in character.client.prefs.be_special)
if(!jobban_isbanned(character, ROLE_CHANGELING) && !jobban_isbanned(character, "Syndicate")) if(!jobban_isbanned(character, ROLE_CHANGELING) && !jobban_isbanned(character, ROLE_SYNDICATE))
if(age_check(character.client)) if(age_check(character.client))
if(!(character.job in restricted_jobs)) if(!(character.job in restricted_jobs))
character.mind.make_Changling() character.mind.make_Changling()
@@ -49,7 +49,7 @@
var/datum/mind/changeling = pick(possible_changelings) var/datum/mind/changeling = pick(possible_changelings)
antag_candidates -= changeling antag_candidates -= changeling
possible_changelings -= changeling possible_changelings -= changeling
changeling.special_role = "Changeling" changeling.special_role = ROLE_CHANGELING
changelings += changeling changelings += changeling
changeling.restricted_roles = restricted_jobs changeling.restricted_roles = restricted_jobs
return ..() return ..()
@@ -69,7 +69,7 @@
return return
if(changelings.len <= (changelingcap - 2) || prob(100 / (csc * 4))) if(changelings.len <= (changelingcap - 2) || prob(100 / (csc * 4)))
if(ROLE_CHANGELING in character.client.prefs.be_special) if(ROLE_CHANGELING in character.client.prefs.be_special)
if(!jobban_isbanned(character, ROLE_CHANGELING) && !jobban_isbanned(character, "Syndicate")) if(!jobban_isbanned(character, ROLE_CHANGELING) && !jobban_isbanned(character, ROLE_SYNDICATE))
if(age_check(character.client)) if(age_check(character.client))
if(!(character.job in restricted_jobs)) if(!(character.job in restricted_jobs))
character.mind.make_Changling() character.mind.make_Changling()
+2 -2
View File
@@ -158,8 +158,8 @@ Credit where due:
var/datum/mind/servant = pick(antag_candidates) var/datum/mind/servant = pick(antag_candidates)
servants_to_serve += servant servants_to_serve += servant
antag_candidates -= servant antag_candidates -= servant
servant.assigned_role = "Servant of Ratvar" servant.assigned_role = ROLE_SERVANT_OF_RATVAR
servant.special_role = "Servant of Ratvar" servant.special_role = ROLE_SERVANT_OF_RATVAR
starter_servants-- starter_servants--
ark_time = 30 + round((roundstart_player_count / 5)) //In minutes, how long the Ark will wait before activation ark_time = 30 + round((roundstart_player_count / 5)) //In minutes, how long the Ark will wait before activation
ark_time = min(ark_time, 35) //35 minute maximum for the activation timer ark_time = min(ark_time, 35) //35 minute maximum for the activation timer
+1 -1
View File
@@ -77,7 +77,7 @@
var/datum/mind/cultist = pick(antag_candidates) var/datum/mind/cultist = pick(antag_candidates)
antag_candidates -= cultist antag_candidates -= cultist
cultists_to_cult += cultist cultists_to_cult += cultist
cultist.special_role = "Cultist" cultist.special_role = ROLE_CULTIST
cultist.restricted_roles = restricted_jobs cultist.restricted_roles = restricted_jobs
log_game("[cultist.key] (ckey) has been selected as a cultist") log_game("[cultist.key] (ckey) has been selected as a cultist")
+2 -2
View File
@@ -301,7 +301,7 @@
for(var/mob/dead/new_player/player in players) for(var/mob/dead/new_player/player in players)
if(player.client && player.ready == PLAYER_READY_TO_PLAY) if(player.client && player.ready == PLAYER_READY_TO_PLAY)
if(role in player.client.prefs.be_special) if(role in player.client.prefs.be_special)
if(!jobban_isbanned(player, "Syndicate") && !jobban_isbanned(player, role)) //Nodrak/Carn: Antag Job-bans if(!jobban_isbanned(player, ROLE_SYNDICATE) && !jobban_isbanned(player, role)) //Nodrak/Carn: Antag Job-bans
if(age_check(player.client)) //Must be older than the minimum age if(age_check(player.client)) //Must be older than the minimum age
candidates += player.mind // Get a list of all the people who want to be the antagonist for this round candidates += player.mind // Get a list of all the people who want to be the antagonist for this round
@@ -315,7 +315,7 @@
for(var/mob/dead/new_player/player in players) for(var/mob/dead/new_player/player in players)
if(player.client && player.ready == PLAYER_READY_TO_PLAY) if(player.client && player.ready == PLAYER_READY_TO_PLAY)
if(!(role in player.client.prefs.be_special)) // We don't have enough people who want to be antagonist, make a separate list of people who don't want to be one if(!(role in player.client.prefs.be_special)) // We don't have enough people who want to be antagonist, make a separate list of people who don't want to be one
if(!jobban_isbanned(player, "Syndicate") && !jobban_isbanned(player, role)) //Nodrak/Carn: Antag Job-bans if(!jobban_isbanned(player, ROLE_SYNDICATE) && !jobban_isbanned(player, role)) //Nodrak/Carn: Antag Job-bans
drafted += player.mind drafted += player.mind
if(restricted_jobs) if(restricted_jobs)
+1 -1
View File
@@ -154,7 +154,7 @@
W.implant(H) W.implant(H)
var/obj/item/implant/explosive/E = new/obj/item/implant/explosive(H) var/obj/item/implant/explosive/E = new/obj/item/implant/explosive(H)
E.implant(H) E.implant(H)
H.faction |= "syndicate" H.faction |= ROLE_SYNDICATE
H.update_icons() H.update_icons()
/datum/outfit/syndicate/full /datum/outfit/syndicate/full
+1 -1
View File
@@ -79,7 +79,7 @@
return return
if((SSticker.mode.traitors.len + pre_traitors.len) <= (traitorcap - 2) || prob(100 / (tsc * 2))) if((SSticker.mode.traitors.len + pre_traitors.len) <= (traitorcap - 2) || prob(100 / (tsc * 2)))
if(ROLE_TRAITOR in character.client.prefs.be_special) if(ROLE_TRAITOR in character.client.prefs.be_special)
if(!jobban_isbanned(character, ROLE_TRAITOR) && !jobban_isbanned(character, "Syndicate")) if(!jobban_isbanned(character, ROLE_TRAITOR) && !jobban_isbanned(character, ROLE_SYNDICATE))
if(age_check(character.client)) if(age_check(character.client))
if(!(character.job in restricted_jobs)) if(!(character.job in restricted_jobs))
add_latejoin_traitor(character.mind) add_latejoin_traitor(character.mind)
+2 -2
View File
@@ -21,8 +21,8 @@
/datum/game_mode/wizard/pre_setup() /datum/game_mode/wizard/pre_setup()
var/datum/mind/wizard = pick(antag_candidates) var/datum/mind/wizard = pick(antag_candidates)
wizards += wizard wizards += wizard
wizard.assigned_role = "Wizard" wizard.assigned_role = ROLE_WIZARD
wizard.special_role = "Wizard" wizard.special_role = ROLE_WIZARD
log_game("[wizard.key] (ckey) has been selected as a Wizard") //TODO: Move these to base antag datum log_game("[wizard.key] (ckey) has been selected as a Wizard") //TODO: Move these to base antag datum
if(GLOB.wizardstart.len == 0) if(GLOB.wizardstart.len == 0)
to_chat(wizard.current, "<span class='boldannounce'>A starting location for you could not be found, please report this bug!</span>") to_chat(wizard.current, "<span class='boldannounce'>A starting location for you could not be found, please report this bug!</span>")
@@ -570,7 +570,7 @@
stun_projectile_sound = 'sound/weapons/gunshot.ogg' stun_projectile_sound = 'sound/weapons/gunshot.ogg'
icon_state = "syndie_off" icon_state = "syndie_off"
base_icon_state = "syndie" base_icon_state = "syndie"
faction = "syndicate" faction = ROLE_SYNDICATE
emp_vunerable = 0 emp_vunerable = 0
desc = "A ballistic machine gun auto-turret." desc = "A ballistic machine gun auto-turret."
+20 -26
View File
@@ -125,23 +125,29 @@
else else
qdel(src) //How? qdel(src) //How?
/obj/item/grenade/plastic/proc/shout_syndicate_crap(mob/M)
if(!M)
return
var/message_say = "FOR NO RAISIN!"
if(M.mind)
var/datum/mind/UM = M
if(UM.has_antag_datum(/datum/antagonist/nukeop) || UM.has_antag_datum(/datum/antagonist/traitor))
message_say = "FOR THE SYNDICATE!"
else if(UM.has_antag_datum(/datum/antagonist/changeling))
message_say = "FOR THE HIVE!"
else if(UM.has_antag_datum(/datum/antagonist/cult))
message_say = "FOR NAR-SIE!"
else if(UM.has_antag_datum(/datum/antagonist/clockcult))
message_say = "FOR RATVAR!"
else if(UM.has_antag_datum(/datum/antagonist/rev))
message_say = "VIVA LA REVOLUTION!"
M.say(message_say)
/obj/item/grenade/plastic/suicide_act(mob/user) /obj/item/grenade/plastic/suicide_act(mob/user)
message_admins("[ADMIN_LOOKUPFLW(user)] suicided with [src] at [ADMIN_COORDJMP(user)]",0,1) message_admins("[ADMIN_LOOKUPFLW(user)] suicided with [src] at [ADMIN_COORDJMP(user)]",0,1)
log_game("[key_name(user)] suicided with [src] at [COORD(user)]") log_game("[key_name(user)] suicided with [src] at [COORD(user)]")
user.visible_message("<span class='suicide'>[user] activates [src] and holds it above [user.p_their()] head! It looks like [user.p_theyre()] going out with a bang!</span>") user.visible_message("<span class='suicide'>[user] activates [src] and holds it above [user.p_their()] head! It looks like [user.p_theyre()] going out with a bang!</span>")
var/message_say = "FOR NO RAISIN!" shout_syndicate_crap(user)
if(user.mind)
if(user.mind.special_role)
var/role = lowertext(user.mind.special_role)
if(role == "traitor" || role == "syndicate")
message_say = "FOR THE SYNDICATE!"
else if(role == "changeling")
message_say = "FOR THE HIVE!"
else if(role == "cultist")
message_say = "FOR NAR-SIE!"
else if(is_revolutionary(user))
message_say = "VIVA LA REVOLUTION!"
user.say(message_say)
explosion(user,0,2,0) //Cheap explosion imitation because putting prime() here causes runtimes explosion(user,0,2,0) //Cheap explosion imitation because putting prime() here causes runtimes
user.gib(1, 1) user.gib(1, 1)
qdel(src) qdel(src)
@@ -176,19 +182,7 @@
/obj/item/grenade/plastic/c4/suicide_act(mob/user) /obj/item/grenade/plastic/c4/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] activates the [src.name] and holds it above [user.p_their()] head! It looks like [user.p_theyre()] going out with a bang!</span>") user.visible_message("<span class='suicide'>[user] activates the [src.name] and holds it above [user.p_their()] head! It looks like [user.p_theyre()] going out with a bang!</span>")
var/message_say = "FOR NO RAISIN!" shout_syndicate_crap(user)
if(user.mind)
if(user.mind.special_role)
var/role = lowertext(user.mind.special_role)
if(role == "traitor" || role == "syndicate")
message_say = "FOR THE SYNDICATE!"
else if(role == "changeling")
message_say = "FOR THE HIVE!"
else if(role == "cultist")
message_say = "FOR NAR-SIE!"
else if(is_revolutionary(user))
message_say = "VIVA LA REVOLUTION!"
user.say(message_say)
target = user target = user
message_admins("[ADMIN_LOOKUPFLW(user)] suicided with [name] at [ADMIN_COORDJMP(src)]",0,1) message_admins("[ADMIN_LOOKUPFLW(user)] suicided with [name] at [ADMIN_COORDJMP(src)]",0,1)
message_admins("[key_name(user)] suicided with [name] at ([x],[y],[z])") message_admins("[key_name(user)] suicided with [name] at ([x],[y],[z])")
+2 -3
View File
@@ -241,14 +241,13 @@
possessed = TRUE possessed = TRUE
var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you want to play as the spirit of [user.real_name]'s blade?", ROLE_PAI, null, FALSE, 100, POLL_IGNORE_POSSESSED_BLADE) var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you want to play as the spirit of [user.real_name]'s blade?", ROLE_PAI, null, FALSE, 100, POLL_IGNORE_POSSESSED_BLADE)
var/mob/dead/observer/theghost = null
if(LAZYLEN(candidates)) if(LAZYLEN(candidates))
theghost = pick(candidates) var/client/C = pick(candidates)
var/mob/living/simple_animal/shade/S = new(src) var/mob/living/simple_animal/shade/S = new(src)
S.real_name = name S.real_name = name
S.name = name S.name = name
S.ckey = theghost.ckey S.ckey = C.ckey
S.status_flags |= GODMODE S.status_flags |= GODMODE
S.language_holder = user.language_holder.copy(S) S.language_holder = user.language_holder.copy(S)
var/input = stripped_input(S,"What are you named?", ,"", MAX_NAME_LEN) var/input = stripped_input(S,"What are you named?", ,"", MAX_NAME_LEN)
@@ -411,7 +411,7 @@
id = /obj/item/card/id id = /obj/item/card/id
/datum/outfit/syndicate_empty/post_equip(mob/living/carbon/human/H) /datum/outfit/syndicate_empty/post_equip(mob/living/carbon/human/H)
H.faction |= "syndicate" H.faction |= ROLE_SYNDICATE
/obj/effect/mob_spawn/human/syndicate/battlecruiser /obj/effect/mob_spawn/human/syndicate/battlecruiser
name = "Syndicate Battlecruiser Ship Operative" name = "Syndicate Battlecruiser Ship Operative"
+1 -1
View File
@@ -383,7 +383,7 @@
output += "<option value='[j]'>[j]</option>" output += "<option value='[j]'>[j]</option>"
for(var/j in GLOB.nonhuman_positions) for(var/j in GLOB.nonhuman_positions)
output += "<option value='[j]'>[j]</option>" output += "<option value='[j]'>[j]</option>"
for(var/j in list("traitor","changeling","operative","revolutionary", "gangster","cultist","wizard")) for(var/j in list(ROLE_TRAITOR, ROLE_CHANGELING, ROLE_OPERATIVE, ROLE_REV, ROLE_CULTIST, ROLE_WIZARD))
output += "<option value='[j]'>[j]</option>" output += "<option value='[j]'>[j]</option>"
output += "</select></td></tr></table>" output += "</select></td></tr></table>"
output += "<b>Reason:<br></b><textarea name='dbbanreason' cols='50'></textarea><br>" output += "<b>Reason:<br></b><textarea name='dbbanreason' cols='50'></textarea><br>"
+5 -5
View File
@@ -51,15 +51,15 @@
bodies += M bodies += M
var/question = "Would you like to be [group_name]?" var/question = "Would you like to be [group_name]?"
var/list/candidates = pollCandidatesForMobs(question, "pAI", null, FALSE, 100, bodies) var/list/candidates = pollCandidatesForMobs(question, ROLE_PAI, null, FALSE, 100, bodies)
while(candidates.len && bodies.len) while(LAZYLEN(candidates) && LAZYLEN(bodies))
var/mob/dead/observer/ghost = pick_n_take(candidates) var/client/C = pick_n_take(candidates)
var/mob/living/body = pick_n_take(bodies) var/mob/living/body = pick_n_take(bodies)
to_chat(body, "Your mob has been taken over by a ghost!") to_chat(body, "Your mob has been taken over by a ghost!")
message_admins("[key_name_admin(ghost)] has taken control of ([key_name_admin(body)])") message_admins("[key_name_admin(C)] has taken control of ([key_name_admin(body)])")
body.ghostize(0) body.ghostize(0)
body.key = ghost.key body.key = C.key
new /obj/effect/temp_visual/gravpush(get_turf(body)) new /obj/effect/temp_visual/gravpush(get_turf(body))
/obj/effect/fun_balloon/sentience/emergency_shuttle /obj/effect/fun_balloon/sentience/emergency_shuttle
+2 -2
View File
@@ -236,7 +236,7 @@
if(islarva(M)) if(islarva(M))
M_job = "Alien larva" M_job = "Alien larva"
else else
M_job = "Alien" M_job = ROLE_ALIEN
else else
M_job = "Carbon-based" M_job = "Carbon-based"
@@ -244,7 +244,7 @@
if(isAI(M)) if(isAI(M))
M_job = "AI" M_job = "AI"
else if(ispAI(M)) else if(ispAI(M))
M_job = "pAI" M_job = ROLE_PAI
else if(iscyborg(M)) else if(iscyborg(M))
M_job = "Cyborg" M_job = "Cyborg"
else else
+16 -16
View File
@@ -783,7 +783,7 @@
dat += "<tr bgcolor='eeeeee'><th colspan='5'><a href='?src=[REF(src)];[HrefToken()];jobban3=ghostroles;jobban4=[REF(M)]'>Ghost Roles</a></th></tr><tr align='center'>" dat += "<tr bgcolor='eeeeee'><th colspan='5'><a href='?src=[REF(src)];[HrefToken()];jobban3=ghostroles;jobban4=[REF(M)]'>Ghost Roles</a></th></tr><tr align='center'>"
//pAI //pAI
if(jobban_isbanned(M, "pAI")) if(jobban_isbanned(M, ROLE_PAI))
dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=pAI;jobban4=[REF(M)]'><font color=red>pAI</font></a></td>" dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=pAI;jobban4=[REF(M)]'><font color=red>pAI</font></a></td>"
else else
dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=pAI;jobban4=[REF(M)]'>pAI</a></td>" dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=pAI;jobban4=[REF(M)]'>pAI</a></td>"
@@ -818,38 +818,38 @@
dat += "</tr></table>" dat += "</tr></table>"
//Antagonist (Orange) //Antagonist (Orange)
var/isbanned_dept = jobban_isbanned(M, "Syndicate") var/isbanned_dept = jobban_isbanned(M, ROLE_SYNDICATE)
dat += "<table cellpadding='1' cellspacing='0' width='100%'>" dat += "<table cellpadding='1' cellspacing='0' width='100%'>"
dat += "<tr bgcolor='ffeeaa'><th colspan='10'><a href='?src=[REF(src)];[HrefToken()];jobban3=Syndicate;jobban4=[REF(M)]'>Antagonist Positions</a> | " dat += "<tr bgcolor='ffeeaa'><th colspan='10'><a href='?src=[REF(src)];[HrefToken()];jobban3=Syndicate;jobban4=[REF(M)]'>Antagonist Positions</a> | "
dat += "<a href='?src=[REF(src)];[HrefToken()];jobban3=teamantags;jobban4=[REF(M)]'>Team Antagonists</a></th>" dat += "<a href='?src=[REF(src)];[HrefToken()];jobban3=teamantags;jobban4=[REF(M)]'>Team Antagonists</a></th>"
dat += "<a href='?src=[REF(src)];[HrefToken()];jobban3=convertantags;jobban4=[REF(M)]'>Conversion Antagonists</a></th></tr><tr align='center'>" dat += "<a href='?src=[REF(src)];[HrefToken()];jobban3=convertantags;jobban4=[REF(M)]'>Conversion Antagonists</a></th></tr><tr align='center'>"
//Traitor //Traitor
if(jobban_isbanned(M, "traitor") || isbanned_dept) if(jobban_isbanned(M, ROLE_TRAITOR) || isbanned_dept)
dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=traitor;jobban4=[REF(M)]'><font color=red>Traitor</font></a></td>" dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=traitor;jobban4=[REF(M)]'><font color=red>Traitor</font></a></td>"
else else
dat += "<td width='20%'><a href='?src=[REF(src)];jobban3=traitor;jobban4=[REF(M)]'>Traitor</a></td>" dat += "<td width='20%'><a href='?src=[REF(src)];jobban3=traitor;jobban4=[REF(M)]'>Traitor</a></td>"
//Changeling //Changeling
if(jobban_isbanned(M, "changeling") || isbanned_dept) if(jobban_isbanned(M, ROLE_CHANGELING) || isbanned_dept)
dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=changeling;jobban4=[REF(M)]'><font color=red>Changeling</font></a></td>" dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=changeling;jobban4=[REF(M)]'><font color=red>Changeling</font></a></td>"
else else
dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=changeling;jobban4=[REF(M)]'>Changeling</a></td>" dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=changeling;jobban4=[REF(M)]'>Changeling</a></td>"
//Nuke Operative //Nuke Operative
if(jobban_isbanned(M, "operative") || isbanned_dept) if(jobban_isbanned(M, ROLE_OPERATIVE) || isbanned_dept)
dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=operative;jobban4=[REF(M)]'><font color=red>Nuke Operative</font></a></td>" dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=operative;jobban4=[REF(M)]'><font color=red>Nuke Operative</font></a></td>"
else else
dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=operative;jobban4=[REF(M)]'>Nuke Operative</a></td>" dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=operative;jobban4=[REF(M)]'>Nuke Operative</a></td>"
//Revolutionary //Revolutionary
if(jobban_isbanned(M, "revolutionary") || isbanned_dept) if(jobban_isbanned(M, ROLE_REV) || isbanned_dept)
dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=revolutionary;jobban4=[REF(M)]'><font color=red>Revolutionary</font></a></td>" dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=revolutionary;jobban4=[REF(M)]'><font color=red>Revolutionary</font></a></td>"
else else
dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=revolutionary;jobban4=[REF(M)]'>Revolutionary</a></td>" dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=revolutionary;jobban4=[REF(M)]'>Revolutionary</a></td>"
//Cultist //Cultist
if(jobban_isbanned(M, "cultist") || isbanned_dept) if(jobban_isbanned(M, ROLE_CULTIST) || isbanned_dept)
dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=cultist;jobban4=[REF(M)]'><font color=red>Cultist</font></a></td>" dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=cultist;jobban4=[REF(M)]'><font color=red>Cultist</font></a></td>"
else else
dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=cultist;jobban4=[REF(M)]'>Cultist</a></td>" dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=cultist;jobban4=[REF(M)]'>Cultist</a></td>"
@@ -857,19 +857,19 @@
dat += "</tr><tr align='center'>" //So things dont get squished. dat += "</tr><tr align='center'>" //So things dont get squished.
//Servant of Ratvar //Servant of Ratvar
if(jobban_isbanned(M, "servant of Ratvar") || isbanned_dept) if(jobban_isbanned(M, ROLE_SERVANT_OF_RATVAR) || isbanned_dept)
dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=servant of Ratvar;jobban4=[REF(M)]'><font color=red>Servant</font></a></td>" dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=servant of Ratvar;jobban4=[REF(M)]'><font color=red>Servant</font></a></td>"
else else
dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=servant of Ratvar;jobban4=[REF(M)]'>Servant</a></td>" dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=servant of Ratvar;jobban4=[REF(M)]'>Servant</a></td>"
//Wizard //Wizard
if(jobban_isbanned(M, "wizard") || isbanned_dept) if(jobban_isbanned(M, ROLE_WIZARD) || isbanned_dept)
dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=wizard;jobban4=[REF(M)]'><font color=red>Wizard</font></a></td>" dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=wizard;jobban4=[REF(M)]'><font color=red>Wizard</font></a></td>"
else else
dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=wizard;jobban4=[REF(M)]'>Wizard</a></td>" dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=wizard;jobban4=[REF(M)]'>Wizard</a></td>"
//Abductor //Abductor
if(jobban_isbanned(M, "abductor") || isbanned_dept) if(jobban_isbanned(M, ROLE_ABDUCTOR) || isbanned_dept)
dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=abductor;jobban4=[REF(M)]'><font color=red>Abductor</font></a></td>" dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=abductor;jobban4=[REF(M)]'><font color=red>Abductor</font></a></td>"
else else
dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=abductor;jobban4=[REF(M)]'>Abductor</a></td>" dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=abductor;jobban4=[REF(M)]'>Abductor</a></td>"
@@ -881,10 +881,10 @@
dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=borer;jobban4=[REF(M)]'>Borer</a></td>" dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=borer;jobban4=[REF(M)]'>Borer</a></td>"
//Alien //Alien
if(jobban_isbanned(M, "alien candidate") || isbanned_dept) if(jobban_isbanned(M, ROLE_ALIEN) || isbanned_dept)
dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=alien candidate;jobban4=[REF(M)]'><font color=red>Alien</font></a></td>" dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=alien;jobban4=[REF(M)]'><font color=red>Alien</font></a></td>"
else else
dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=alien candidate;jobban4=[REF(M)]'>Alien</a></td>" dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=alien;jobban4=[REF(M)]'>Alien</a></td>"
dat += "</tr></table>" dat += "</tr></table>"
usr << browse(dat, "window=jobban2;size=800x450") usr << browse(dat, "window=jobban2;size=800x450")
@@ -945,11 +945,11 @@
continue continue
joblist += jobPos joblist += jobPos
if("ghostroles") if("ghostroles")
joblist += list("pAI", "posibrain", "drone", "deathsquad", "lavaland") joblist += list(ROLE_PAI, "posibrain", "drone", "deathsquad", "lavaland")
if("teamantags") if("teamantags")
joblist += list("operative", "revolutionary", "cultist", "servant of Ratvar", "abductor", "alien candidate") joblist += list(ROLE_OPERATIVE, ROLE_REV, ROLE_CULTIST, ROLE_SERVANT_OF_RATVAR, ROLE_ABDUCTOR, ROLE_ALIEN)
if("convertantags") if("convertantags")
joblist += list("revolutionary", "cultist", "servant of Ratvar", "alien candidate") joblist += list(ROLE_REV, ROLE_CULTIST, ROLE_SERVANT_OF_RATVAR, ROLE_ALIEN)
else else
joblist += href_list["jobban3"] joblist += href_list["jobban3"]
+3 -3
View File
@@ -41,7 +41,7 @@
return FALSE return FALSE
if(!considered_alive(applicant.mind) || considered_afk(applicant.mind)) //makes sure the player isn't a zombie, brain, or just afk all together if(!considered_alive(applicant.mind) || considered_afk(applicant.mind)) //makes sure the player isn't a zombie, brain, or just afk all together
return FALSE return FALSE
return (!jobban_isbanned(applicant, targetrole) && !jobban_isbanned(applicant, "Syndicate")) return (!jobban_isbanned(applicant, targetrole) && !jobban_isbanned(applicant, ROLE_SYNDICATE))
/datum/admins/proc/makeTraitors() /datum/admins/proc/makeTraitors()
@@ -137,7 +137,7 @@
/datum/admins/proc/makeWizard() /datum/admins/proc/makeWizard()
var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you wish to be considered for the position of a Wizard Foundation 'diplomat'?", "wizard", null) var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you wish to be considered for the position of a Wizard Foundation 'diplomat'?", ROLE_WIZARD, null)
var/mob/dead/observer/selected = pick_n_take(candidates) var/mob/dead/observer/selected = pick_n_take(candidates)
@@ -214,7 +214,7 @@
/datum/admins/proc/makeNukeTeam() /datum/admins/proc/makeNukeTeam()
var/datum/game_mode/nuclear/temp = new var/datum/game_mode/nuclear/temp = new
var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you wish to be considered for a nuke team being sent in?", "operative", temp) var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you wish to be considered for a nuke team being sent in?", ROLE_OPERATIVE, temp)
var/list/mob/dead/observer/chosen = list() var/list/mob/dead/observer/chosen = list()
var/mob/dead/observer/theghost = null var/mob/dead/observer/theghost = null
+4 -4
View File
@@ -280,7 +280,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
if(G_found.mind && !G_found.mind.active) //mind isn't currently in use by someone/something if(G_found.mind && !G_found.mind.active) //mind isn't currently in use by someone/something
//Check if they were an alien //Check if they were an alien
if(G_found.mind.assigned_role=="Alien") if(G_found.mind.assigned_role == ROLE_ALIEN)
if(alert("This character appears to have been an alien. Would you like to respawn them as such?",,"Yes","No")=="Yes") if(alert("This character appears to have been an alien. Would you like to respawn them as such?",,"Yes","No")=="Yes")
var/turf/T var/turf/T
if(GLOB.xeno_spawn.len) if(GLOB.xeno_spawn.len)
@@ -380,15 +380,15 @@ Traitors and the like can also be revived with the previous role mostly intact.
switch(new_character.mind.special_role) switch(new_character.mind.special_role)
if("Wizard") if(ROLE_WIZARD)
new_character.forceMove(pick(GLOB.wizardstart)) new_character.forceMove(pick(GLOB.wizardstart))
var/datum/antagonist/wizard/A = new_character.mind.has_antag_datum(/datum/antagonist/wizard,TRUE) var/datum/antagonist/wizard/A = new_character.mind.has_antag_datum(/datum/antagonist/wizard,TRUE)
A.equip_wizard() A.equip_wizard()
if("Syndicate") if(ROLE_SYNDICATE)
new_character.forceMove(pick(GLOB.nukeop_start)) new_character.forceMove(pick(GLOB.nukeop_start))
var/datum/antagonist/nukeop/N = new_character.mind.has_antag_datum(/datum/antagonist/nukeop,TRUE) var/datum/antagonist/nukeop/N = new_character.mind.has_antag_datum(/datum/antagonist/nukeop,TRUE)
N.equip_op() N.equip_op()
if("Space Ninja") if(ROLE_NINJA)
var/list/ninja_spawn = list() var/list/ninja_spawn = list()
for(var/obj/effect/landmark/carpspawn/L in GLOB.landmarks_list) for(var/obj/effect/landmark/carpspawn/L in GLOB.landmarks_list)
ninja_spawn += L ninja_spawn += L
@@ -2,7 +2,7 @@
throw_speed = 1 throw_speed = 1
throw_range = 5 throw_range = 5
w_class = WEIGHT_CLASS_TINY w_class = WEIGHT_CLASS_TINY
var/used = 0 var/used = FALSE
/obj/item/antag_spawner/proc/spawn_antag(client/C, turf/T, kind = "", datum/mind/user) /obj/item/antag_spawner/proc/spawn_antag(client/C, turf/T, kind = "", datum/mind/user)
return return
@@ -57,13 +57,13 @@
to_chat(H, "You already used this contract!") to_chat(H, "You already used this contract!")
return return
var/list/candidates = pollCandidatesForMob("Do you want to play as a wizard's [href_list["school"]] apprentice?", ROLE_WIZARD, null, ROLE_WIZARD, 150, src) var/list/candidates = pollCandidatesForMob("Do you want to play as a wizard's [href_list["school"]] apprentice?", ROLE_WIZARD, null, ROLE_WIZARD, 150, src)
if(candidates.len) if(LAZYLEN(candidates))
if(used) if(used)
to_chat(H, "You already used this contract!") to_chat(H, "You already used this contract!")
return return
used = 1 used = TRUE
var/mob/dead/observer/theghost = pick(candidates) var/client/C = pick(candidates)
spawn_antag(theghost.client, get_turf(src), href_list["school"],H.mind) spawn_antag(C, get_turf(src), href_list["school"],H.mind)
else else
to_chat(H, "Unable to reach your apprentice! You can either attack the spellbook with the contract to refund your points, or wait and try again later.") to_chat(H, "Unable to reach your apprentice! You can either attack the spellbook with the contract to refund your points, or wait and try again later.")
@@ -73,7 +73,7 @@
C.prefs.copy_to(M) C.prefs.copy_to(M)
M.key = C.key M.key = C.key
var/datum/mind/app_mind = M.mind var/datum/mind/app_mind = M.mind
var/datum/antagonist/wizard/apprentice/app = new() var/datum/antagonist/wizard/apprentice/app = new()
app.master = user app.master = user
app.school = kind app.school = kind
@@ -120,12 +120,12 @@
to_chat(user, "<span class='notice'>You activate [src] and wait for confirmation.</span>") to_chat(user, "<span class='notice'>You activate [src] and wait for confirmation.</span>")
var/list/nuke_candidates = pollGhostCandidates("Do you want to play as a syndicate [borg_to_spawn ? "[lowertext(borg_to_spawn)] cyborg":"operative"]?", ROLE_OPERATIVE, null, ROLE_OPERATIVE, 150, POLL_IGNORE_SYNDICATE) var/list/nuke_candidates = pollGhostCandidates("Do you want to play as a syndicate [borg_to_spawn ? "[lowertext(borg_to_spawn)] cyborg":"operative"]?", ROLE_OPERATIVE, null, ROLE_OPERATIVE, 150, POLL_IGNORE_SYNDICATE)
if(nuke_candidates.len) if(LAZYLEN(nuke_candidates))
if(!(check_usability(user))) if(!(check_usability(user)))
return return
used = TRUE used = TRUE
var/mob/dead/observer/theghost = pick(nuke_candidates) var/client/C = pick(nuke_candidates)
spawn_antag(theghost.client, get_turf(src), "syndieborg", user.mind) spawn_antag(C, get_turf(src), "syndieborg", user.mind)
do_sparks(4, TRUE, src) do_sparks(4, TRUE, src)
qdel(src) qdel(src)
else else
@@ -187,7 +187,7 @@
R.real_name = R.name R.real_name = R.name
R.key = C.key R.key = C.key
var/datum/antagonist/nukeop/new_borg = new() var/datum/antagonist/nukeop/new_borg = new()
new_borg.send_to_spawnpoint = FALSE new_borg.send_to_spawnpoint = FALSE
R.mind.add_antag_datum(new_borg,creator_op.nuke_team) R.mind.add_antag_datum(new_borg,creator_op.nuke_team)
@@ -213,13 +213,13 @@
return return
if(used) if(used)
return return
var/list/demon_candidates = pollCandidatesForMob("Do you want to play as a [initial(demon_type.name)]?", null, null, ROLE_ALIEN, 50, src) var/list/candidates = pollCandidatesForMob("Do you want to play as a [initial(demon_type.name)]?", ROLE_ALIEN, null, ROLE_ALIEN, 50, src)
if(demon_candidates.len) if(LAZYLEN(candidates))
if(used) if(used)
return return
used = 1 used = TRUE
var/mob/dead/observer/theghost = pick(demon_candidates) var/client/C = pick(candidates)
spawn_antag(theghost.client, get_turf(src), initial(demon_type.name),user.mind) spawn_antag(C, get_turf(src), initial(demon_type.name),user.mind)
to_chat(user, shatter_msg) to_chat(user, shatter_msg)
to_chat(user, veil_msg) to_chat(user, veil_msg)
playsound(user.loc, 'sound/effects/glassbr1.ogg', 100, 1) playsound(user.loc, 'sound/effects/glassbr1.ogg', 100, 1)
@@ -7,7 +7,7 @@
/mob/living/simple_animal/hostile/blob /mob/living/simple_animal/hostile/blob
icon = 'icons/mob/blob.dmi' icon = 'icons/mob/blob.dmi'
pass_flags = PASSBLOB pass_flags = PASSBLOB
faction = list("blob") faction = list(ROLE_BLOB)
bubble_icon = "blob" bubble_icon = "blob"
speak_emote = null //so we use verb_yell/verb_say/etc speak_emote = null //so we use verb_yell/verb_say/etc
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
@@ -18,7 +18,7 @@ GLOBAL_LIST_EMPTY(blob_nodes)
layer = FLY_LAYER layer = FLY_LAYER
pass_flags = PASSBLOB pass_flags = PASSBLOB
faction = list("blob") faction = list(ROLE_BLOB)
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
var/obj/structure/blob/core/blob_core = null // The blob overmind's core var/obj/structure/blob/core/blob_core = null // The blob overmind's core
var/blob_points = 0 var/blob_points = 0
@@ -115,7 +115,7 @@ GLOBAL_LIST_EMPTY(blob_nodes)
if(!Ablob.blob_allowed) if(!Ablob.blob_allowed)
continue continue
if(!("blob" in L.faction)) if(!(ROLE_BLOB in L.faction))
playsound(L, 'sound/effects/splat.ogg', 50, 1) playsound(L, 'sound/effects/splat.ogg', 50, 1)
L.death() L.death()
new/mob/living/simple_animal/hostile/blob/blobspore(T) new/mob/living/simple_animal/hostile/blob/blobspore(T)
+4 -4
View File
@@ -13,13 +13,13 @@
if(!placement_override) if(!placement_override)
if(!pop_override) if(!pop_override)
for(var/mob/living/M in range(7, src)) for(var/mob/living/M in range(7, src))
if("blob" in M.faction) if(ROLE_BLOB in M.faction)
continue continue
if(M.client) if(M.client)
to_chat(src, "<span class='warning'>There is someone too close to place your blob core!</span>") to_chat(src, "<span class='warning'>There is someone too close to place your blob core!</span>")
return 0 return 0
for(var/mob/living/M in view(13, src)) for(var/mob/living/M in view(13, src))
if("blob" in M.faction) if(ROLE_BLOB in M.faction)
continue continue
if(M.client) if(M.client)
to_chat(src, "<span class='warning'>Someone could see your blob core from here!</span>") to_chat(src, "<span class='warning'>Someone could see your blob core from here!</span>")
@@ -157,7 +157,7 @@
return return
var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you want to play as a [blob_reagent_datum.name] blobbernaut?", ROLE_BLOB, null, ROLE_BLOB, 50) //players must answer rapidly var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you want to play as a [blob_reagent_datum.name] blobbernaut?", ROLE_BLOB, null, ROLE_BLOB, 50) //players must answer rapidly
if(candidates.len) //if we got at least one candidate, they're a blobbernaut now. if(LAZYLEN(candidates)) //if we got at least one candidate, they're a blobbernaut now.
B.max_integrity = initial(B.max_integrity) * 0.25 //factories that produced a blobbernaut have much lower health B.max_integrity = initial(B.max_integrity) * 0.25 //factories that produced a blobbernaut have much lower health
B.obj_integrity = min(B.obj_integrity, B.max_integrity) B.obj_integrity = min(B.obj_integrity, B.max_integrity)
B.update_icon() B.update_icon()
@@ -251,7 +251,7 @@
if(can_buy(4)) if(can_buy(4))
var/attacksuccess = FALSE var/attacksuccess = FALSE
for(var/mob/living/L in T) for(var/mob/living/L in T)
if("blob" in L.faction) //no friendly/dead fire if(ROLE_BLOB in L.faction) //no friendly/dead fire
continue continue
if(L.stat != DEAD) if(L.stat != DEAD)
attacksuccess = TRUE attacksuccess = TRUE
@@ -250,7 +250,7 @@
to_chat(user, "<b>Effects:</b> <span class='notice'>[scannerreport()]</span>") to_chat(user, "<b>Effects:</b> <span class='notice'>[scannerreport()]</span>")
/obj/structure/blob/attack_animal(mob/living/simple_animal/M) /obj/structure/blob/attack_animal(mob/living/simple_animal/M)
if("blob" in M.faction) //sorry, but you can't kill the blob as a blobbernaut if(ROLE_BLOB in M.faction) //sorry, but you can't kill the blob as a blobbernaut
return return
..() ..()
@@ -337,12 +337,12 @@
if(!L.client || L.client.is_afk()) if(!L.client || L.client.is_afk())
set waitfor = FALSE set waitfor = FALSE
var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as a [L.name], an inactive clock cultist?", ROLE_SERVANT_OF_RATVAR, null, ROLE_SERVANT_OF_RATVAR, 50, L) var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as a [L.name], an inactive clock cultist?", ROLE_SERVANT_OF_RATVAR, null, ROLE_SERVANT_OF_RATVAR, 50, L)
var/mob/dead/observer/theghost = null if(LAZYLEN(candidates))
if(candidates.len) var/client/C = pick(candidates)
to_chat(L, "<span class='userdanger'>Your physical form has been taken over by another soul due to your inactivity! Ahelp if you wish to regain your form!</span>") to_chat(L, "<span class='userdanger'>Your physical form has been taken over by another soul due to your inactivity! Ahelp if you wish to regain your form!</span>")
message_admins("[key_name_admin(theghost)] has taken control of ([key_name_admin(L)]) to replace an inactive clock cultist.") message_admins("[key_name_admin(C)] has taken control of ([key_name_admin(L)]) to replace an inactive clock cultist.")
L.ghostize(0) L.ghostize(0)
L.key = theghost.key L.key = C.key
var/obj/effect/temp_visual/ratvar/sigil/vitality/V = new /obj/effect/temp_visual/ratvar/sigil/vitality(get_turf(src)) var/obj/effect/temp_visual/ratvar/sigil/vitality/V = new /obj/effect/temp_visual/ratvar/sigil/vitality(get_turf(src))
animate(V, alpha = 0, transform = matrix()*2, time = 8) animate(V, alpha = 0, transform = matrix()*2, time = 8)
playsound(L, 'sound/magic/staff_healing.ogg', 50, 1) playsound(L, 'sound/magic/staff_healing.ogg', 50, 1)
@@ -122,9 +122,9 @@
else if(eminence_nominee == "ghosts") else if(eminence_nominee == "ghosts")
kingmaking = TRUE kingmaking = TRUE
hierophant_message("<span class='brass'><b>The eminence spire is now selecting a ghost to be the Eminence...</b></span>") hierophant_message("<span class='brass'><b>The eminence spire is now selecting a ghost to be the Eminence...</b></span>")
var/list/candidates = pollGhostCandidates("Would you like to play as the servants' Eminence?", "Servant of Ratvar", null, ROLE_SERVANT_OF_RATVAR, poll_time = 100) var/list/candidates = pollGhostCandidates("Would you like to play as the servants' Eminence?", ROLE_SERVANT_OF_RATVAR, null, ROLE_SERVANT_OF_RATVAR, poll_time = 100)
kingmaking = FALSE kingmaking = FALSE
if(!candidates.len) if(!LAZYLEN(candidates))
for(var/mob/M in servants_and_ghosts()) for(var/mob/M in servants_and_ghosts())
M.playsound_local(M, 'sound/machines/clockcult/integration_cog_install.ogg', 50, FALSE) M.playsound_local(M, 'sound/machines/clockcult/integration_cog_install.ogg', 50, FALSE)
hierophant_message("<span class='brass'><b>No ghosts accepted the offer!</b> The eminence spire has been reset.</span>") hierophant_message("<span class='brass'><b>No ghosts accepted the offer!</b> The eminence spire has been reset.</span>")
+6 -7
View File
@@ -268,7 +268,7 @@ structure_check() searches for nearby cultist structures required for the invoca
"<span class='cultlarge'><i>AAAAAAAAAAAAAA-</i></span>") "<span class='cultlarge'><i>AAAAAAAAAAAAAA-</i></span>")
SSticker.mode.add_cultist(convertee.mind, 1) SSticker.mode.add_cultist(convertee.mind, 1)
new /obj/item/melee/cultblade/dagger(get_turf(src)) new /obj/item/melee/cultblade/dagger(get_turf(src))
convertee.mind.special_role = "Cultist" convertee.mind.special_role = ROLE_CULTIST
to_chat(convertee, "<span class='cult italic'><b>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 \ to_chat(convertee, "<span class='cult italic'><b>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 something evil takes root.</b></span>") and something evil takes root.</b></span>")
to_chat(convertee, "<span class='cult italic'><b>Assist your new compatriots in their dark dealings. Your goal is theirs, and theirs is yours. You serve the Geometer above all else. Bring it back.\ to_chat(convertee, "<span class='cult italic'><b>Assist your new compatriots in their dark dealings. Your goal is theirs, and theirs is yours. You serve the Geometer above all else. Bring it back.\
@@ -576,13 +576,12 @@ structure_check() searches for nearby cultist structures required for the invoca
if(!mob_to_revive.client || mob_to_revive.client.is_afk()) if(!mob_to_revive.client || mob_to_revive.client.is_afk())
set waitfor = FALSE set waitfor = FALSE
var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as a [mob_to_revive.name], an inactive blood cultist?", ROLE_CULTIST, null, ROLE_CULTIST, 50, mob_to_revive) var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as a [mob_to_revive.name], an inactive blood cultist?", ROLE_CULTIST, null, ROLE_CULTIST, 50, mob_to_revive)
var/mob/dead/observer/theghost = null if(LAZYLEN(candidates))
if(candidates.len) var/client/C = pick(candidates)
theghost = pick(candidates)
to_chat(mob_to_revive.mind, "Your physical form has been taken over by another soul due to your inactivity! Ahelp if you wish to regain your form.") to_chat(mob_to_revive.mind, "Your physical form has been taken over by another soul due to your inactivity! Ahelp if you wish to regain your form.")
message_admins("[key_name_admin(theghost)] has taken control of ([key_name_admin(mob_to_revive)]) to replace an AFK player.") message_admins("[key_name_admin(C)] has taken control of ([key_name_admin(mob_to_revive)]) to replace an AFK player.")
mob_to_revive.ghostize(0) mob_to_revive.ghostize(0)
mob_to_revive.key = theghost.key mob_to_revive.key = C.key
else else
fail_invoke() fail_invoke()
return return
@@ -1074,4 +1073,4 @@ structure_check() searches for nearby cultist structures required for the invoca
var/obj/O = target.get_item_by_slot(slot_glasses) var/obj/O = target.get_item_by_slot(slot_glasses)
if(istype(O, /obj/item/clothing/glasses/hud/security)) if(istype(O, /obj/item/clothing/glasses/hud/security))
var/datum/atom_hud/AH = GLOB.huds[DATA_HUD_SECURITY_ADVANCED] var/datum/atom_hud/AH = GLOB.huds[DATA_HUD_SECURITY_ADVANCED]
AH.add_hud_to(target) AH.add_hud_to(target)
+1 -1
View File
@@ -212,7 +212,7 @@
role_name = "morphling" role_name = "morphling"
/datum/round_event/ghost_role/morph/spawn_role() /datum/round_event/ghost_role/morph/spawn_role()
var/list/candidates = get_candidates("alien", null, ROLE_ALIEN) var/list/candidates = get_candidates(ROLE_ALIEN, null, ROLE_ALIEN)
if(!candidates.len) if(!candidates.len)
return NOT_ENOUGH_PLAYERS return NOT_ENOUGH_PLAYERS
@@ -84,8 +84,8 @@
objective2.owner = mind objective2.owner = mind
mind.objectives += objective2 mind.objectives += objective2
to_chat(src, "<b>Objective #2</b>: [objective2.explanation_text]") to_chat(src, "<b>Objective #2</b>: [objective2.explanation_text]")
mind.assigned_role = "revenant" mind.assigned_role = ROLE_REVENANT
mind.special_role = "Revenant" mind.special_role = ROLE_REVENANT
mind.add_antag_datum(/datum/antagonist/auto_custom) 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/night_vision/revenant(null))
AddSpell(new /obj/effect/proc_holder/spell/targeted/revenant_transmit(null)) AddSpell(new /obj/effect/proc_holder/spell/targeted/revenant_transmit(null))
@@ -382,8 +382,8 @@
key_of_revenant = client_to_revive.key key_of_revenant = client_to_revive.key
if(!key_of_revenant) 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...") 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)?", "revenant", null, ROLE_REVENANT, 50, revenant) var/list/candidates = pollCandidatesForMob("Do you want to be [revenant.name] (reforming)?", ROLE_REVENANT, null, ROLE_REVENANT, 50, revenant)
if(!candidates.len) if(!LAZYLEN(candidates))
qdel(revenant) qdel(revenant)
message_admins("No candidates were found for the new revenant. Oh well!") message_admins("No candidates were found for the new revenant. Oh well!")
inert = TRUE inert = TRUE
@@ -26,7 +26,7 @@
message_admins("Event attempted to spawn a revenant, but there were only [deadMobs]/[REVENANT_SPAWN_THRESHOLD] dead mobs.") message_admins("Event attempted to spawn a revenant, but there were only [deadMobs]/[REVENANT_SPAWN_THRESHOLD] dead mobs.")
return WAITING_FOR_SOMETHING return WAITING_FOR_SOMETHING
var/list/candidates = get_candidates("revenant", null, ROLE_REVENANT) var/list/candidates = get_candidates(ROLE_REVENANT, null, ROLE_REVENANT)
if(!candidates.len) if(!candidates.len)
return NOT_ENOUGH_PLAYERS return NOT_ENOUGH_PLAYERS
@@ -13,7 +13,7 @@
role_name = "slaughter demon" role_name = "slaughter demon"
/datum/round_event/ghost_role/slaughter/spawn_role() /datum/round_event/ghost_role/slaughter/spawn_role()
var/list/candidates = get_candidates("alien", null, ROLE_ALIEN) var/list/candidates = get_candidates(ROLE_ALIEN, null, ROLE_ALIEN)
if(!candidates.len) if(!candidates.len)
return NOT_ENOUGH_PLAYERS return NOT_ENOUGH_PLAYERS
@@ -92,7 +92,7 @@
var/mob/living/current_wizard = null var/mob/living/current_wizard = null
var/next_check = 0 var/next_check = 0
var/cooldown = 600 var/cooldown = 600
var/faction = "wizard" var/faction = ROLE_WIZARD
var/braindead_check = 0 var/braindead_check = 0
/obj/structure/academy_wizard_spawner/New() /obj/structure/academy_wizard_spawner/New()
@@ -128,13 +128,12 @@
if(!current_wizard) if(!current_wizard)
return return
var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as Wizard Academy Defender?", ROLE_WIZARD, null, ROLE_WIZARD, 50, current_wizard) var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as Wizard Academy Defender?", ROLE_WIZARD, null, ROLE_WIZARD, 50, current_wizard)
var/mob/dead/observer/chosen = null
if(candidates.len) if(LAZYLEN(candidates))
chosen = pick(candidates) var/client/C = pick(candidates)
message_admins("[key_name_admin(chosen)] was spawned as Wizard Academy Defender") message_admins("[key_name_admin(C)] was spawned as Wizard Academy Defender")
current_wizard.ghostize() // on the off chance braindead defender gets back in current_wizard.ghostize() // on the off chance braindead defender gets back in
current_wizard.key = chosen.key current_wizard.key = C.key
/obj/structure/academy_wizard_spawner/proc/summon_wizard() /obj/structure/academy_wizard_spawner/proc/summon_wizard()
var/turf/T = src.loc var/turf/T = src.loc
@@ -272,11 +271,10 @@
servant_mind.transfer_to(H) servant_mind.transfer_to(H)
var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as [user.real_name] Servant?", ROLE_WIZARD, null, ROLE_WIZARD, 50, H) var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as [user.real_name] Servant?", ROLE_WIZARD, null, ROLE_WIZARD, 50, H)
var/mob/dead/observer/chosen = null if(LAZYLEN(candidates))
if(candidates.len) var/client/C = pick(candidates)
chosen = pick(candidates) message_admins("[key_name_admin(C)] was spawned as Dice Servant")
message_admins("[key_name_admin(chosen)] was spawned as Dice Servant") H.key = C.key
H.key = chosen.key
var/obj/effect/proc_holder/spell/targeted/summonmob/S = new var/obj/effect/proc_holder/spell/targeted/summonmob/S = new
S.target_mob = H S.target_mob = H
@@ -233,7 +233,7 @@
icon_state = "sleeper" icon_state = "sleeper"
roundstart = FALSE roundstart = FALSE
death = FALSE death = FALSE
faction = "syndicate" faction = ROLE_SYNDICATE
outfit = /datum/outfit/snowsyndie outfit = /datum/outfit/snowsyndie
flavour_text = {"You are a syndicate operative recently awoken from cyrostatis in an underground outpost. Monitor Nanotrasen communications and record information. All intruders should be flavour_text = {"You are a syndicate operative recently awoken from cyrostatis in an underground outpost. Monitor Nanotrasen communications and record information. All intruders should be
disposed of swirfly to assure no gathered information is stolen or lost. Try not to wander too far from the outpost as the caves can be a deadly place even for a trained operative such as yourself."} disposed of swirfly to assure no gathered information is stolen or lost. Try not to wander too far from the outpost as the caves can be a deadly place even for a trained operative such as yourself."}
@@ -113,7 +113,7 @@
if("To Kill") if("To Kill")
to_chat(user, "<B>Your wish is granted, but at a terrible cost...</B>") 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.") 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 = "traitor" user.mind.special_role = ROLE_TRAITOR
var/datum/objective/hijack/hijack = new var/datum/objective/hijack/hijack = new
hijack.owner = user.mind hijack.owner = user.mind
+1 -1
View File
@@ -395,7 +395,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "<h2>Special Role Settings</h2>" dat += "<h2>Special Role Settings</h2>"
if(jobban_isbanned(user, "Syndicate")) if(jobban_isbanned(user, ROLE_SYNDICATE))
dat += "<font color=red><b>You are banned from antagonist roles.</b></font>" dat += "<font color=red><b>You are banned from antagonist roles.</b></font>"
src.be_special = list() src.be_special = list()
+1 -1
View File
@@ -12,7 +12,7 @@
fakeable = FALSE //Nothing to fake here fakeable = FALSE //Nothing to fake here
/datum/round_event/ghost_role/abductor/spawn_role() /datum/round_event/ghost_role/abductor/spawn_role()
var/list/mob/dead/observer/candidates = get_candidates("abductor", null, ROLE_ABDUCTOR) var/list/mob/dead/observer/candidates = get_candidates(ROLE_ABDUCTOR, null, ROLE_ABDUCTOR)
if(candidates.len < 2) if(candidates.len < 2)
return NOT_ENOUGH_PLAYERS return NOT_ENOUGH_PLAYERS
+1 -1
View File
@@ -51,7 +51,7 @@
message_admins("An event attempted to spawn an alien but no suitable vents were found. Shutting down.") message_admins("An event attempted to spawn an alien but no suitable vents were found. Shutting down.")
return MAP_ERROR return MAP_ERROR
var/list/candidates = get_candidates("alien", null, ROLE_ALIEN) var/list/candidates = get_candidates(ROLE_ALIEN, null, ROLE_ALIEN)
if(!candidates.len) if(!candidates.len)
return NOT_ENOUGH_PLAYERS return NOT_ENOUGH_PLAYERS
+1 -1
View File
@@ -19,7 +19,7 @@
/datum/round_event/ghost_role/blob/spawn_role() /datum/round_event/ghost_role/blob/spawn_role()
if(!GLOB.blobstart.len) if(!GLOB.blobstart.len)
return MAP_ERROR return MAP_ERROR
var/list/candidates = get_candidates("blob", null, ROLE_BLOB) var/list/candidates = get_candidates(ROLE_BLOB, null, ROLE_BLOB)
if(!candidates.len) if(!candidates.len)
return NOT_ENOUGH_PLAYERS return NOT_ENOUGH_PLAYERS
var/mob/dead/observer/new_blob = pick(candidates) var/mob/dead/observer/new_blob = pick(candidates)
+3 -3
View File
@@ -19,7 +19,7 @@
return MAP_ERROR return MAP_ERROR
//selecting a candidate player //selecting a candidate player
var/list/candidates = get_candidates("devil", null, ROLE_DEVIL) var/list/candidates = get_candidates(ROLE_DEVIL, null, ROLE_DEVIL)
if(!candidates.len) if(!candidates.len)
return NOT_ENOUGH_PLAYERS return NOT_ENOUGH_PLAYERS
@@ -53,7 +53,7 @@
/proc/create_devil_mind(key) /proc/create_devil_mind(key)
var/datum/mind/Mind = new /datum/mind(key) var/datum/mind/Mind = new /datum/mind(key)
Mind.assigned_role = "devil" Mind.assigned_role = ROLE_DEVIL
Mind.special_role = "devil" Mind.special_role = ROLE_DEVIL
SSticker.mode.devils |= Mind SSticker.mode.devils |= Mind
return Mind return Mind
+2 -3
View File
@@ -75,10 +75,9 @@
/datum/round_event/santa/start() /datum/round_event/santa/start()
var/list/candidates = pollGhostCandidates("Santa is coming to town! Do you want to be Santa?", poll_time=150) var/list/candidates = pollGhostCandidates("Santa is coming to town! Do you want to be Santa?", poll_time=150)
if(LAZYLEN(candidates)) if(LAZYLEN(candidates))
var/mob/dead/observer/Z = pick(candidates) var/client/C = pick(candidates)
santa = new /mob/living/carbon/human(pick(GLOB.blobstart)) santa = new /mob/living/carbon/human(pick(GLOB.blobstart))
santa.key = Z.key santa.key = C.key
qdel(Z)
santa.equipOutfit(/datum/outfit/santa) santa.equipOutfit(/datum/outfit/santa)
santa.update_icons() santa.update_icons()
+1 -1
View File
@@ -10,7 +10,7 @@
fakeable = FALSE fakeable = FALSE
/datum/round_event/ghost_role/nightmare/spawn_role() /datum/round_event/ghost_role/nightmare/spawn_role()
var/list/candidates = get_candidates("alien", null, ROLE_ALIEN) var/list/candidates = get_candidates(ROLE_ALIEN, null, ROLE_ALIEN)
if(!candidates.len) if(!candidates.len)
return NOT_ENOUGH_PLAYERS return NOT_ENOUGH_PLAYERS
+1 -1
View File
@@ -10,7 +10,7 @@
fakeable = FALSE fakeable = FALSE
/datum/round_event/ghost_role/operative/spawn_role() /datum/round_event/ghost_role/operative/spawn_role()
var/list/candidates = get_candidates("operative", null, ROLE_OPERATIVE) var/list/candidates = get_candidates(ROLE_OPERATIVE, null, ROLE_OPERATIVE)
if(!candidates.len) if(!candidates.len)
return NOT_ENOUGH_PLAYERS return NOT_ENOUGH_PLAYERS
+1 -1
View File
@@ -57,7 +57,7 @@ GLOBAL_LIST_INIT(security_positions, list(
GLOBAL_LIST_INIT(nonhuman_positions, list( GLOBAL_LIST_INIT(nonhuman_positions, list(
"AI", "AI",
"Cyborg", "Cyborg",
"pAI")) ROLE_PAI))
GLOBAL_LIST_INIT(exp_jobsmap, list( GLOBAL_LIST_INIT(exp_jobsmap, list(
EXP_TYPE_CREW = list("titles" = command_positions | engineering_positions | medical_positions | science_positions | supply_positions | security_positions | civilian_positions | list("AI","Cyborg")), // crew positions EXP_TYPE_CREW = list("titles" = command_positions | engineering_positions | medical_positions | science_positions | supply_positions | security_positions | civilian_positions | list("AI","Cyborg")), // crew positions
@@ -8,7 +8,7 @@
icon = 'icons/mob/alien.dmi' icon = 'icons/mob/alien.dmi'
gender = FEMALE //All xenos are girls!! gender = FEMALE //All xenos are girls!!
dna = null dna = null
faction = list("alien") faction = list(ROLE_ALIEN)
ventcrawler = VENTCRAWLER_ALWAYS ventcrawler = VENTCRAWLER_ALWAYS
sight = SEE_MOBS sight = SEE_MOBS
see_in_dark = 4 see_in_dark = 4
@@ -112,10 +112,10 @@
/obj/item/organ/alien/hivenode/Insert(mob/living/carbon/M, special = 0) /obj/item/organ/alien/hivenode/Insert(mob/living/carbon/M, special = 0)
..() ..()
M.faction |= "alien" M.faction |= ROLE_ALIEN
/obj/item/organ/alien/hivenode/Remove(mob/living/carbon/M, special = 0) /obj/item/organ/alien/hivenode/Remove(mob/living/carbon/M, special = 0)
M.faction -= "alien" M.faction -= ROLE_ALIEN
..() ..()
//When the alien queen dies, all aliens suffer a penalty as punishment for failing to protect her. //When the alien queen dies, all aliens suffer a penalty as punishment for failing to protect her.
@@ -46,7 +46,7 @@
connected_ai = null connected_ai = null
if(mind) if(mind)
if(!mind.special_role) if(!mind.special_role)
mind.special_role = "traitor" mind.special_role = ROLE_TRAITOR
mind.add_antag_datum(/datum/antagonist/auto_custom) // ???? mind.add_antag_datum(/datum/antagonist/auto_custom) // ????
@@ -826,7 +826,7 @@
/mob/living/silicon/robot/modules/syndicate /mob/living/silicon/robot/modules/syndicate
icon_state = "syndie_bloodhound" icon_state = "syndie_bloodhound"
faction = list("syndicate") faction = list(ROLE_SYNDICATE)
bubble_icon = "syndibot" bubble_icon = "syndibot"
req_access = list(ACCESS_SYNDICATE) req_access = list(ACCESS_SYNDICATE)
lawupdate = FALSE lawupdate = FALSE
@@ -118,11 +118,7 @@
log_game("[key_name(user)] attempted to emag cyborg [key_name(src)], but they were a syndicate cyborg.") log_game("[key_name(user)] attempted to emag cyborg [key_name(src)], but they were a syndicate cyborg.")
return return
var/ai_is_antag = 0 if(connected_ai && connected_ai.mind && connected_ai.mind.has_antag_datum(/datum/antagonist/traitor))
if(connected_ai && connected_ai.mind)
if(connected_ai.mind.special_role)
ai_is_antag = (connected_ai.mind.special_role == "traitor")
if(ai_is_antag)
to_chat(src, "<span class='danger'>ALERT: Foreign software execution prevented.</span>") to_chat(src, "<span class='danger'>ALERT: Foreign software execution prevented.</span>")
to_chat(connected_ai, "<span class='danger'>ALERT: Cyborg unit \[[src]] successfully defended against subversion.</span>") to_chat(connected_ai, "<span class='danger'>ALERT: Cyborg unit \[[src]] successfully defended against subversion.</span>")
log_game("[key_name(user)] attempted to emag cyborg [key_name(src)], but they were slaved to traitor AI [connected_ai].") log_game("[key_name(user)] attempted to emag cyborg [key_name(src)], but they were slaved to traitor AI [connected_ai].")
@@ -18,7 +18,7 @@
health = 30 health = 30
maxHealth = 120 //If you murder other drones and cannibalize them you can get much stronger maxHealth = 120 //If you murder other drones and cannibalize them you can get much stronger
initial_language_holder = /datum/language_holder/drone/syndicate initial_language_holder = /datum/language_holder/drone/syndicate
faction = list("syndicate") faction = list(ROLE_SYNDICATE)
speak_emote = list("hisses") speak_emote = list("hisses")
bubble_icon = "syndibot" bubble_icon = "syndibot"
heavy_emp_damage = 10 heavy_emp_damage = 10
@@ -418,16 +418,15 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
var/mob/living/simple_animal/hostile/guardian/G = input(src, "Pick the guardian you wish to reset", "Guardian Reset") as null|anything in guardians var/mob/living/simple_animal/hostile/guardian/G = input(src, "Pick the guardian you wish to reset", "Guardian Reset") as null|anything in guardians
if(G) if(G)
to_chat(src, "<span class='holoparasite'>You attempt to reset <font color=\"[G.namedatum.colour]\"><b>[G.real_name]</b></font>'s personality...</span>") to_chat(src, "<span class='holoparasite'>You attempt to reset <font color=\"[G.namedatum.colour]\"><b>[G.real_name]</b></font>'s personality...</span>")
var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you want to play as [src.real_name]'s [G.real_name]?", "pAI", null, FALSE, 100) var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you want to play as [src.real_name]'s [G.real_name]?", ROLE_PAI, null, FALSE, 100)
var/mob/dead/observer/new_stand = null if(LAZYLEN(candidates))
if(candidates.len) var/client/C = pick(candidates)
new_stand = pick(candidates)
to_chat(G, "<span class='holoparasite'>Your user reset you, and your body was taken over by a ghost. Looks like they weren't happy with your performance.</span>") to_chat(G, "<span class='holoparasite'>Your user reset you, and your body was taken over by a ghost. Looks like they weren't happy with your performance.</span>")
to_chat(src, "<span class='holoparasite bold'>Your <font color=\"[G.namedatum.colour]\">[G.real_name]</font> has been successfully reset.</span>") to_chat(src, "<span class='holoparasite bold'>Your <font color=\"[G.namedatum.colour]\">[G.real_name]</font> has been successfully reset.</span>")
message_admins("[key_name_admin(new_stand)] has taken control of ([key_name_admin(G)])") message_admins("[key_name_admin(C)] has taken control of ([key_name_admin(G)])")
G.ghostize(0) G.ghostize(0)
G.setthemename(G.namedatum.theme) //give it a new color, to show it's a new person G.setthemename(G.namedatum.theme) //give it a new color, to show it's a new person
G.key = new_stand.key G.key = C.key
G.reset = 1 G.reset = 1
switch(G.namedatum.theme) switch(G.namedatum.theme)
if("tech") if("tech")
@@ -494,11 +493,10 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
used = TRUE used = TRUE
to_chat(user, "[use_message]") to_chat(user, "[use_message]")
var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you want to play as the [mob_name] of [user.real_name]?", ROLE_PAI, null, FALSE, 100, POLL_IGNORE_HOLOPARASITE) var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you want to play as the [mob_name] of [user.real_name]?", ROLE_PAI, null, FALSE, 100, POLL_IGNORE_HOLOPARASITE)
var/mob/dead/observer/theghost = null
if(candidates.len) if(LAZYLEN(candidates))
theghost = pick(candidates) var/client/C = pick(candidates)
spawn_guardian(user, theghost.key) spawn_guardian(user, C.key)
else else
to_chat(user, "[failure_message]") to_chat(user, "[failure_message]")
used = FALSE used = FALSE
@@ -26,7 +26,7 @@
attack_sound = 'sound/weapons/bladeslice.ogg' attack_sound = 'sound/weapons/bladeslice.ogg'
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
unsuitable_atmos_damage = 15 unsuitable_atmos_damage = 15
faction = list("alien") faction = list(ROLE_ALIEN)
status_flags = CANPUSH status_flags = CANPUSH
minbodytemp = 0 minbodytemp = 0
see_in_dark = 8 see_in_dark = 8
@@ -93,7 +93,7 @@
gender = FEMALE gender = FEMALE
speak_emote = list("squeaks") speak_emote = list("squeaks")
gold_core_spawnable = NO_SPAWN gold_core_spawnable = NO_SPAWN
faction = list("syndicate") faction = list(ROLE_SYNDICATE)
AIStatus = AI_OFF AIStatus = AI_OFF
#undef REGENERATION_DELAY #undef REGENERATION_DELAY
@@ -41,7 +41,7 @@
loot = list(/obj/effect/mob_spawn/human/corpse/syndicatesoldier) loot = list(/obj/effect/mob_spawn/human/corpse/syndicatesoldier)
atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
unsuitable_atmos_damage = 15 unsuitable_atmos_damage = 15
faction = list("syndicate") faction = list(ROLE_SYNDICATE)
check_friendly_fire = 1 check_friendly_fire = 1
status_flags = CANPUSH status_flags = CANPUSH
del_on_death = 1 del_on_death = 1
@@ -169,7 +169,7 @@
environment_smash = ENVIRONMENT_SMASH_NONE environment_smash = ENVIRONMENT_SMASH_NONE
attacktext = "cuts" attacktext = "cuts"
attack_sound = 'sound/weapons/bladeslice.ogg' attack_sound = 'sound/weapons/bladeslice.ogg'
faction = list("syndicate") faction = list(ROLE_SYNDICATE)
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0 minbodytemp = 0
mob_size = MOB_SIZE_TINY mob_size = MOB_SIZE_TINY
@@ -21,7 +21,7 @@
a_intent = INTENT_HARM a_intent = INTENT_HARM
atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
unsuitable_atmos_damage = 15 unsuitable_atmos_damage = 15
faction = list("wizard") faction = list(ROLE_WIZARD)
status_flags = CANPUSH status_flags = CANPUSH
retreat_distance = 3 //out of fireball range retreat_distance = 3 //out of fireball range
@@ -55,7 +55,7 @@
icon_state = "syndbeacon" icon_state = "syndbeacon"
spawn_text = "warps in from" spawn_text = "warps in from"
mob_type = /mob/living/simple_animal/hostile/syndicate/ranged mob_type = /mob/living/simple_animal/hostile/syndicate/ranged
faction = list("syndicate") faction = list(ROLE_SYNDICATE)
/mob/living/simple_animal/hostile/spawner/skeleton /mob/living/simple_animal/hostile/spawner/skeleton
name = "bone pit" name = "bone pit"
+5 -6
View File
@@ -449,15 +449,14 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
var/datum/antagonist/A = M.mind.has_antag_datum(/datum/antagonist/) var/datum/antagonist/A = M.mind.has_antag_datum(/datum/antagonist/)
if(A) if(A)
poll_message = "[poll_message] Status:[A.name]." poll_message = "[poll_message] Status:[A.name]."
var/list/mob/dead/observer/candidates = pollCandidatesForMob(poll_message, "pAI", null, FALSE, 100, M) var/list/mob/dead/observer/candidates = pollCandidatesForMob(poll_message, ROLE_PAI, null, FALSE, 100, M)
var/mob/dead/observer/theghost = null
if(candidates.len) if(LAZYLEN(candidates))
theghost = pick(candidates) var/client/C = pick(candidates)
to_chat(M, "Your mob has been taken over by a ghost!") to_chat(M, "Your mob has been taken over by a ghost!")
message_admins("[key_name_admin(theghost)] has taken control of ([key_name_admin(M)])") message_admins("[key_name_admin(C)] has taken control of ([key_name_admin(M)])")
M.ghostize(0) M.ghostize(0)
M.key = theghost.key M.key = C.key
return TRUE return TRUE
else else
to_chat(M, "There were no ghosts willing to take control.") to_chat(M, "There were no ghosts willing to take control.")
+3 -3
View File
@@ -48,7 +48,7 @@ Contents:
return MAP_ERROR return MAP_ERROR
//selecting a candidate player //selecting a candidate player
var/list/candidates = get_candidates("ninja", null, ROLE_NINJA) var/list/candidates = get_candidates(ROLE_NINJA, null, ROLE_NINJA)
if(!candidates.len) if(!candidates.len)
return NOT_ENOUGH_PLAYERS return NOT_ENOUGH_PLAYERS
@@ -57,8 +57,8 @@ Contents:
//Prepare ninja player mind //Prepare ninja player mind
var/datum/mind/Mind = new /datum/mind(key) var/datum/mind/Mind = new /datum/mind(key)
Mind.assigned_role = "Space Ninja" Mind.assigned_role = ROLE_NINJA
Mind.special_role = "Space Ninja" Mind.special_role = ROLE_NINJA
Mind.active = 1 Mind.active = 1
//spawn the ninja and assign the candidate //spawn the ninja and assign the candidate
@@ -380,7 +380,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_desc = "A classic mix of rum and cola." glass_desc = "A classic mix of rum and cola."
/datum/reagent/consumable/ethanol/cuba_libre/on_mob_life(mob/living/M) /datum/reagent/consumable/ethanol/cuba_libre/on_mob_life(mob/living/M)
if(M.mind && M.mind.special_role in list("Revolutionary", "Head Revolutionary")) //Cuba Libre, the traditional drink of revolutions! Heals revolutionaries. if(M.mind && M.mind.has_antag_datum(/datum/antagonist/rev)) //Cuba Libre, the traditional drink of revolutions! Heals revolutionaries.
M.adjustBruteLoss(-1, 0) M.adjustBruteLoss(-1, 0)
M.adjustFireLoss(-1, 0) M.adjustFireLoss(-1, 0)
M.adjustToxLoss(-1, 0) M.adjustToxLoss(-1, 0)
@@ -301,7 +301,7 @@
var/obj/effect/temp_visual/explosion/fast/E = new /obj/effect/temp_visual/explosion/fast(get_turf(M)) var/obj/effect/temp_visual/explosion/fast/E = new /obj/effect/temp_visual/explosion/fast(get_turf(M))
E.alpha = 150 E.alpha = 150
for(var/mob/living/L in orange(get_turf(M), 1)) for(var/mob/living/L in orange(get_turf(M), 1))
if("blob" in L.faction) //no friendly fire if(ROLE_BLOB in L.faction) //no friendly fire
continue continue
var/aoe_volume = ..(L, TOUCH, initial_volume, 0, L.get_permeability_protection(), O) var/aoe_volume = ..(L, TOUCH, initial_volume, 0, L.get_permeability_protection(), O)
L.apply_damage(0.4*aoe_volume, BRUTE) L.apply_damage(0.4*aoe_volume, BRUTE)
@@ -592,10 +592,9 @@
being_used = TRUE being_used = TRUE
var/list/candidates = pollCandidatesForMob("Do you want to play as [SM.name]?", ROLE_ALIEN, null, ROLE_ALIEN, 50, SM, POLL_IGNORE_SENTIENCE_POTION) // see poll_ignore.dm var/list/candidates = pollCandidatesForMob("Do you want to play as [SM.name]?", ROLE_ALIEN, null, ROLE_ALIEN, 50, SM, POLL_IGNORE_SENTIENCE_POTION) // see poll_ignore.dm
var/mob/dead/observer/theghost = null if(LAZYLEN(candidates))
if(candidates.len) var/client/C = pick(candidates)
theghost = pick(candidates) SM.key = C.key
SM.key = theghost.key
SM.mind.enslave_mind_to_creator(user) SM.mind.enslave_mind_to_creator(user)
SM.sentience_act() SM.sentience_act()
to_chat(SM, "<span class='warning'>All at once it makes sense: you know what you are and who you are! Self awareness is yours!</span>") to_chat(SM, "<span class='warning'>All at once it makes sense: you know what you are and who you are! Self awareness is yours!</span>")
+1 -1
View File
@@ -120,7 +120,7 @@
implants = list(/obj/item/implant/weapons_auth) implants = list(/obj/item/implant/weapons_auth)
/datum/outfit/lavaland_syndicate/post_equip(mob/living/carbon/human/H) /datum/outfit/lavaland_syndicate/post_equip(mob/living/carbon/human/H)
H.faction |= "syndicate" H.faction |= ROLE_SYNDICATE
/obj/effect/mob_spawn/human/lavaland_syndicate/comms /obj/effect/mob_spawn/human/lavaland_syndicate/comms
name = "Syndicate Comms Agent" name = "Syndicate Comms Agent"
+1 -1
View File
@@ -261,7 +261,7 @@
if(shuttle_areas[get_area(player)]) if(shuttle_areas[get_area(player)])
has_people = TRUE has_people = TRUE
var/location = get_turf(player.mind.current) var/location = get_turf(player.mind.current)
if(!(player.mind.special_role == "traitor" || player.mind.special_role == "Syndicate" || player.mind.special_role == "blood brother") && !istype(location, /turf/open/floor/plasteel/shuttle/red) && !istype(location, /turf/open/floor/mineral/plastitanium/brig)) if(!(player.mind.has_antag_datum(/datum/antagonist)) && !istype(location, /turf/open/floor/plasteel/shuttle/red) && !istype(location, /turf/open/floor/mineral/plastitanium/brig))
return FALSE return FALSE
return has_people return has_people