mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-01-02 21:42:41 +00:00
@@ -564,7 +564,7 @@ datum/mind
|
||||
current << "\red <FONT size = 3><B>Revolution has been disappointed of your leader traits! You are a regular revolutionary now!</B></FONT>"
|
||||
else if(!(src in ticker.mode.revolutionaries))
|
||||
current << "\red <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>"
|
||||
current << "<font color=blue>Within the rules,</font> try to act as an opposing force to the crew. Further RP and try to make sure other players have </i>fun<i>! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! <b>Please remember all rules aside from those without explicit exceptions apply to antagonists.</i></b>"
|
||||
show_objectives(src)
|
||||
else
|
||||
return
|
||||
ticker.mode.revolutionaries += src
|
||||
@@ -577,7 +577,7 @@ datum/mind
|
||||
ticker.mode.revolutionaries -= src
|
||||
ticker.mode.update_rev_icons_removed(src)
|
||||
current << "\red <FONT size = 3><B>You have proved your devotion to revoltion! You are a head revolutionary now!</B></FONT>"
|
||||
current << "<font color=blue>Within the rules,</font> try to act as an opposing force to the crew. Further RP and try to make sure other players have </i>fun<i>! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! <b>Please remember all rules aside from those without explicit exceptions apply to antagonists.</i></b>"
|
||||
show_objectives(src)
|
||||
else if(!(src in ticker.mode.head_revolutionaries))
|
||||
current << "\blue You are a member of the revolutionaries' leadership now!"
|
||||
else
|
||||
@@ -656,11 +656,11 @@ datum/mind
|
||||
special_role = "Cultist"
|
||||
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>"
|
||||
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>"
|
||||
current << "<font color=blue>Within the rules,</font> try to act as an opposing force to the crew. Further RP and try to make sure other players have </i>fun<i>! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! <b>Please remember all rules aside from those without explicit exceptions apply to antagonists.</i></b>"
|
||||
var/datum/game_mode/cult/cult = ticker.mode
|
||||
if (istype(cult))
|
||||
if(!config.objectives_disabled)
|
||||
cult.memorize_cult_objectives(src)
|
||||
show_objectives(src)
|
||||
log_admin("[key_name_admin(usr)] has cult'ed [current].")
|
||||
if("tome")
|
||||
var/mob/living/carbon/human/H = current
|
||||
@@ -701,7 +701,7 @@ datum/mind
|
||||
special_role = "Wizard"
|
||||
//ticker.mode.learn_basic_spells(current)
|
||||
current << "<B>\red You are the Space Wizard!</B>"
|
||||
current << "<font color=blue>Within the rules,</font> try to act as an opposing force to the crew. Further RP and try to make sure other players have </i>fun<i>! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! <b>Please remember all rules aside from those without explicit exceptions apply to antagonists.</i></b>"
|
||||
show_objectives(src)
|
||||
log_admin("[key_name_admin(usr)] has wizard'ed [current].")
|
||||
if("lair")
|
||||
current.loc = pick(wizardstart)
|
||||
@@ -732,8 +732,7 @@ datum/mind
|
||||
ticker.mode.grant_changeling_powers(current)
|
||||
special_role = "Changeling"
|
||||
current << "<B><font color='red'>Your powers are awoken. A flash of memory returns to us...we are a changeling!</font></B>"
|
||||
if(config.objectives_disabled)
|
||||
current << "<font color=blue>Within the rules,</font> try to act as an opposing force to the crew. Further RP and try to make sure other players have </i>fun<i>! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! <b>Please remember all rules aside from those without explicit exceptions apply to antagonists.</i></b>"
|
||||
show_objectives(src)
|
||||
log_admin("[key_name_admin(usr)] has changeling'ed [current].")
|
||||
if("autoobjectives")
|
||||
if(!config.objectives_disabled)
|
||||
@@ -774,10 +773,7 @@ datum/mind
|
||||
current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]"
|
||||
special_role = "Syndicate"
|
||||
current << "\blue You are a [syndicate_name()] agent!"
|
||||
if(config.objectives_disabled)
|
||||
current << "<font color=blue>Within the rules,</font> try to act as an opposing force to the crew. Further RP and try to make sure other players have </i>fun<i>! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! <b>Please remember all rules aside from those without explicit exceptions apply to antagonists.</i></b>"
|
||||
else
|
||||
ticker.mode.forge_syndicate_objectives(src)
|
||||
ticker.mode.forge_syndicate_objectives(src)
|
||||
ticker.mode.greet_syndicate(src)
|
||||
log_admin("[key_name_admin(usr)] has nuke op'ed [current].")
|
||||
if("lair")
|
||||
@@ -829,8 +825,8 @@ datum/mind
|
||||
special_role = "traitor"
|
||||
current << "<B>\red You are a traitor!</B>"
|
||||
log_admin("[key_name_admin(usr)] has traitor'ed [current].")
|
||||
if (config.objectives_disabled)
|
||||
current << "<i>You have been turned into an antagonist- <font color=blue>Within the rules,</font> try to act as an opposing force to the crew- This can be via corporate payoff, personal motives, or maybe just being a dick. Further RP and try to make sure other players have </i>fun<i>! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! <b>Please remember all rules aside from those without explicit exceptions apply to antagonist.</i></b>"
|
||||
show_objectives()
|
||||
|
||||
if(istype(current, /mob/living/silicon))
|
||||
var/mob/living/silicon/A = current
|
||||
call(/datum/game_mode/proc/add_law_zero)(A)
|
||||
|
||||
@@ -136,14 +136,9 @@
|
||||
newtraitor << "<B>You are now a traitor.</B>"
|
||||
newtraitor.mind.special_role = "traitor"
|
||||
newtraitor.hud_updateflag |= 1 << SPECIALROLE_HUD
|
||||
var/obj_count = 1
|
||||
newtraitor << "\blue Your current objectives:"
|
||||
if(!config.objectives_disabled)
|
||||
for(var/datum/objective/objective in newtraitor.mind.objectives)
|
||||
newtraitor << "<B>Objective #[obj_count]</B>: [objective.explanation_text]"
|
||||
obj_count++
|
||||
else
|
||||
newtraitor << "<i>You have been selected this round as an antagonist- <font color=blue>Within the rules,</font> try to act as an opposing force to the crew- This can be via corporate payoff, personal motives, or maybe just being a dick. Further RP and try to make sure other players have </i>fun<i>! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! <b>Please remember all rules aside from those without explicit exceptions apply to antagonist.</i></b>"
|
||||
newtraitor << "<i>You have been selected this round as an antagonist!</i>"
|
||||
show_objectives(newtraitor.mind)
|
||||
|
||||
//else
|
||||
//message_admins("No new traitor being added.")
|
||||
//else
|
||||
@@ -194,14 +189,9 @@
|
||||
traitors += character.mind
|
||||
character << "\red <B>You are the traitor.</B>"
|
||||
character.mind.special_role = "traitor"
|
||||
if (config.objectives_disabled)
|
||||
character << "<i>You have been selected this round as an antagonist- <font color=blue>Within the rules,</font> try to act as an opposing force to the crew- This can be via corporate payoff, personal motives, or maybe just being a dick. Further RP and try to make sure other players have </i>fun<i>! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! <b>Please remember all rules aside from those without explicit exceptions apply to antagonist.</i></b>"
|
||||
else
|
||||
var/obj_count = 1
|
||||
character << "\blue Your current objectives:"
|
||||
for(var/datum/objective/objective in character.mind.objectives)
|
||||
character << "<B>Objective #[obj_count]</B>: [objective.explanation_text]"
|
||||
obj_count++
|
||||
character << "<i>You have been selected this round as an antagonist</i>!"
|
||||
show_objectives(character.mind)
|
||||
|
||||
//else
|
||||
//message_admins("New traitor roll failed. No new traitor.")
|
||||
//else
|
||||
|
||||
449
code/game/gamemodes/calamity/calamity.dm
Normal file
449
code/game/gamemodes/calamity/calamity.dm
Normal file
@@ -0,0 +1,449 @@
|
||||
/*
|
||||
* This roundtype is a replacement for the meteor round on upstream BS12 - players
|
||||
* expressed the desire for quick, chaotic and violent rounds, preferrably without
|
||||
* dependancy on other players.
|
||||
* I wanted to call it clusterfuck, but I figure that's a bit too overt. Think of
|
||||
* the children.
|
||||
* ~ Zuhayr
|
||||
*/
|
||||
|
||||
/datum/game_mode/calamity
|
||||
name = "calamity"
|
||||
config_tag = "calamity"
|
||||
required_players = 1
|
||||
votable = 0 //Remove after testing.
|
||||
|
||||
uplink_welcome = "Syndicate Uplink Console:"
|
||||
uplink_uses = 10
|
||||
|
||||
//Possible roundstart antag types.
|
||||
var/list/atypes = list("syndi","ling","tater","wiz","ninja","vox","slug","cult")
|
||||
var/list/chosen_atypes = list()
|
||||
var/list/chosen_candidates = list()
|
||||
var/list/already_assigned_candidates = list()
|
||||
|
||||
//At one antagonist group per 10 players we are just going to go with tiny groups.
|
||||
var/max_antags = 3 // Antag groups spawn with this many members.
|
||||
var/antag_type_ratio = 10 // 1 antag type per this many players.
|
||||
|
||||
var/const/waittime_l = 600
|
||||
var/const/waittime_h = 1800
|
||||
|
||||
/datum/game_mode/calamity/announce()
|
||||
world << "<B>The current game mode is - Calamity!</B>"
|
||||
world << "<B>This must be a Thursday. You never could get the hang of Thursdays...</B>"
|
||||
|
||||
/datum/game_mode/calamity/can_start()
|
||||
|
||||
if(!..())
|
||||
return 0
|
||||
|
||||
var/antag_count = player_list.len/antag_type_ratio
|
||||
|
||||
if(!antag_count)
|
||||
return 1
|
||||
|
||||
for(var/i=0;i<antag_count;i++)
|
||||
|
||||
var/atype
|
||||
var/list/candidates = list()
|
||||
|
||||
while(atypes.len && candidates.len == 0) //While there are untested antag mode types and we don't have any candidates selected, loop.
|
||||
atype = pick(atypes)
|
||||
log_debug("Calamity: checking [atype].")
|
||||
atypes -= atype
|
||||
candidates = get_role_candidates(atype)
|
||||
|
||||
if(!candidates.len)
|
||||
log_debug("Calamity mode setup failed, no antag types or candidates left.")
|
||||
return 0
|
||||
|
||||
log_debug("Calamity: selected [atype] (possible candidates: [candidates.len])")
|
||||
chosen_atypes += atype
|
||||
|
||||
for(var/j=0;j<max_antags;j++)
|
||||
var/datum/mind/chosen_candidate = pick(candidates)
|
||||
//Traitors and lings spawn THEN have roles applied; hence we don't set assigned_role here.
|
||||
if(atype != "tater" && atype != "ling" && atype != "cult")
|
||||
chosen_candidate.assigned_role = "MODE"
|
||||
chosen_candidate.special_role = atype
|
||||
chosen_candidates += chosen_candidate
|
||||
|
||||
if(atypes.len - i <= 0) break //Not enough valid types left to populate the remaining antag slots.
|
||||
|
||||
return 1
|
||||
|
||||
/datum/game_mode/calamity/post_setup()
|
||||
|
||||
if(chosen_atypes)
|
||||
for(var/atype in chosen_atypes)
|
||||
var/list/candidates = list()
|
||||
|
||||
for(var/datum/mind/player in chosen_candidates)
|
||||
if(player.special_role == atype)
|
||||
candidates += player
|
||||
chosen_candidates -= player
|
||||
|
||||
if(!candidates || !candidates.len)
|
||||
log_debug("No candidates for [atype].")
|
||||
continue
|
||||
|
||||
log_debug("Calamity: spawning [atype].")
|
||||
|
||||
for(var/datum/mind/player in candidates)
|
||||
player.special_role = get_candidate_role_text(atype)
|
||||
|
||||
switch(atype)
|
||||
if("syndi")
|
||||
spawn_syndicate(candidates)
|
||||
if("ling")
|
||||
spawn_changelings(candidates)
|
||||
if("tater")
|
||||
spawn_traitors(candidates)
|
||||
if("wiz")
|
||||
spawn_cabal(candidates)
|
||||
if("ninja")
|
||||
spawn_ninja(candidates)
|
||||
if("vox")
|
||||
spawn_vox_raiders(candidates)
|
||||
if("slug")
|
||||
spawn_borers(candidates)
|
||||
if("cult")
|
||||
spawn_cultists(candidates)
|
||||
|
||||
/datum/game_mode/calamity/declare_completion()
|
||||
|
||||
var/text = "<FONT size = 3><B>This terrible, terrible day has finally ended!</B></FONT><BR/>"
|
||||
|
||||
//Group antag objective completion.
|
||||
for(var/list/L in list(src.raiders, src.syndicates, src.cult, src.wizards))
|
||||
|
||||
if(L.len)
|
||||
var/datum/mind/M = L[1]
|
||||
text = "<BR/><FONT size = 2><B>The [M.special_role][L.len == 1 ? " was" : "s were"]:</B></FONT>"
|
||||
|
||||
for(var/datum/mind/P in L)
|
||||
text += "<br>[P.key] was [P.name] ("
|
||||
if(P.current)
|
||||
if(P.current.stat == DEAD)
|
||||
text += "died"
|
||||
else
|
||||
text += "survived"
|
||||
if(P.current.real_name != P.name)
|
||||
text += " as [P.current.real_name]"
|
||||
else
|
||||
text += "body destroyed"
|
||||
text += ")"
|
||||
|
||||
if(M.objectives.len)
|
||||
text += "<BR/><FONT size = 2>Their objectives were:<FONT>"
|
||||
var/num = 1
|
||||
for(var/datum/objective/O in M.objectives)
|
||||
text += "<BR/><B>Objective [num]:</B> [O.explanation_text]"
|
||||
num++
|
||||
|
||||
//Single antag objective completion.
|
||||
for(var/list/L in list(src.changelings, src.ninjas, src.borers, src.traitors))
|
||||
|
||||
if(L.len)
|
||||
var/datum/mind/M = L[1]
|
||||
text = "<BR/><FONT size = 2><B>The [M.special_role][L.len == 1 ? " was" : "s were"]:</B></FONT>"
|
||||
for(var/datum/mind/P in L)
|
||||
var/num = 1
|
||||
text += "<BR/><FONT size = 2>[P.key] was [P.name].<FONT>"
|
||||
if(P.objectives.len)
|
||||
for(var/datum/objective/O in P.objectives)
|
||||
text += "<BR/><B>Objective [num]:</B> [O.explanation_text]"
|
||||
num++
|
||||
..()
|
||||
return 1
|
||||
|
||||
//Converts chosen atype to an actual role string.
|
||||
/datum/game_mode/calamity/proc/get_candidate_role_text(var/role)
|
||||
|
||||
var/role_text
|
||||
|
||||
switch(role)
|
||||
if("syndi")
|
||||
role_text = "Syndicate Operative"
|
||||
if("ling")
|
||||
role_text = "Changeling"
|
||||
if("tater")
|
||||
role_text = "Traitor"
|
||||
if("wiz")
|
||||
role_text = "Cabalist"
|
||||
if("ninja")
|
||||
role_text = "Ninja"
|
||||
if("vox")
|
||||
role_text = "Vox Raider"
|
||||
if("slug")
|
||||
role_text = "Cortical Borer"
|
||||
if("cult")
|
||||
role_text = "Cultist"
|
||||
|
||||
return role_text
|
||||
|
||||
//Grabs candidate lists for various atypes.
|
||||
/datum/game_mode/calamity/proc/get_role_candidates(var/role)
|
||||
|
||||
var/list/possible_antags = list()
|
||||
switch(role)
|
||||
if("syndi")
|
||||
possible_antags = get_players_for_role(BE_OPERATIVE)
|
||||
if("ling")
|
||||
possible_antags = get_players_for_role(BE_CHANGELING)
|
||||
if("tater")
|
||||
possible_antags = get_players_for_role(BE_TRAITOR)
|
||||
if("wiz")
|
||||
possible_antags = get_players_for_role(BE_WIZARD)
|
||||
if("ninja")
|
||||
possible_antags = get_players_for_role(BE_NINJA)
|
||||
if("vox")
|
||||
possible_antags = get_players_for_role(BE_RAIDER)
|
||||
if("slug")
|
||||
possible_antags = get_players_for_role(BE_ALIEN)
|
||||
if("cult")
|
||||
possible_antags = get_players_for_role(BE_CULTIST)
|
||||
|
||||
var/list/filtered_antags = list()
|
||||
if(possible_antags)
|
||||
for(var/datum/mind/candidate in possible_antags)
|
||||
if(!(candidate in already_assigned_candidates))
|
||||
filtered_antags |= candidate
|
||||
already_assigned_candidates |= candidate
|
||||
|
||||
if(filtered_antags && islist(filtered_antags))
|
||||
return filtered_antags
|
||||
else
|
||||
return list(filtered_antags)
|
||||
|
||||
//Spawning procs for the various antag types.
|
||||
//A LOT OF THE FOLLOWING IS COPYPASTED FROM OTHER MODES AND NEEDS
|
||||
//TO BE FIXED UP. NINJA, NUKE AND CULT IN PARTICULAR ARE FUCKING AWFUL. ~ Z
|
||||
/datum/game_mode/calamity/proc/spawn_syndicate(var/list/candidates)
|
||||
|
||||
var/obj/effect/landmark/uplinklocker = locate("landmark*Syndicate-Uplink")
|
||||
var/obj/effect/landmark/nuke_spawn = locate("landmark*Nuclear-Bomb")
|
||||
|
||||
var/nuke_code = "[rand(10000, 99999)]"
|
||||
var/leader_selected = 0
|
||||
var/spawnpos = 1
|
||||
|
||||
for(var/datum/mind/player in candidates)
|
||||
|
||||
syndicates += player
|
||||
|
||||
if(spawnpos > synd_spawn.len)
|
||||
spawnpos = 1
|
||||
player.current.loc = synd_spawn[spawnpos]
|
||||
|
||||
player.current.real_name = "[syndicate_name()] Operative"
|
||||
spawn(0)
|
||||
NukeNameAssign(player)
|
||||
|
||||
forge_syndicate_objectives(player)
|
||||
greet_syndicate(player)
|
||||
equip_syndicate(player.current)
|
||||
|
||||
if(!leader_selected)
|
||||
prepare_syndicate_leader(player, nuke_code)
|
||||
leader_selected = 1
|
||||
|
||||
spawnpos++
|
||||
update_synd_icons_added(player)
|
||||
|
||||
update_all_synd_icons()
|
||||
|
||||
if(uplinklocker)
|
||||
new /obj/structure/closet/syndicate/nuclear(uplinklocker.loc)
|
||||
if(nuke_spawn && synd_spawn.len > 0)
|
||||
var/obj/machinery/nuclearbomb/the_bomb = new /obj/machinery/nuclearbomb(nuke_spawn.loc)
|
||||
the_bomb.r_code = nuke_code
|
||||
|
||||
/datum/game_mode/calamity/proc/spawn_changelings(var/list/candidates)
|
||||
|
||||
for(var/datum/mind/player in candidates)
|
||||
|
||||
changelings += player
|
||||
grant_changeling_powers(player.current)
|
||||
player.special_role = "Changeling"
|
||||
|
||||
if(!config.objectives_disabled)
|
||||
player.objectives += new /datum/objective/escape()
|
||||
player.objectives += new /datum/objective/survive()
|
||||
|
||||
show_objectives(player)
|
||||
greet_changeling(player)
|
||||
|
||||
/datum/game_mode/calamity/proc/spawn_traitors(var/list/candidates)
|
||||
|
||||
for(var/datum/mind/player in candidates)
|
||||
traitors += player
|
||||
|
||||
if(!config.objectives_disabled)
|
||||
player.objectives += new /datum/objective/escape()
|
||||
player.objectives += new /datum/objective/survive()
|
||||
|
||||
show_objectives(player)
|
||||
|
||||
finalize_traitor(player)
|
||||
greet_traitor(player)
|
||||
|
||||
/datum/game_mode/calamity/proc/spawn_cabal(var/list/candidates)
|
||||
|
||||
for(var/datum/mind/player in candidates)
|
||||
wizards += player
|
||||
|
||||
if(!config.objectives_disabled)
|
||||
player.objectives += new /datum/objective/escape()
|
||||
player.objectives += new /datum/objective/survive()
|
||||
|
||||
show_objectives(player)
|
||||
|
||||
player.current.loc = pick(wizardstart)
|
||||
|
||||
equip_wizard(player.current)
|
||||
name_wizard(player.current)
|
||||
greet_wizard(player)
|
||||
|
||||
/datum/game_mode/calamity/proc/spawn_ninja(var/list/candidates)
|
||||
|
||||
//I hate that this is necessary. ~Z
|
||||
for(var/obj/effect/landmark/L in landmarks_list)
|
||||
if(L.name == "carpspawn")
|
||||
ninjastart.Add(L)
|
||||
|
||||
for(var/datum/mind/player in candidates)
|
||||
ninjas += player
|
||||
|
||||
player.current << browse(null, "window=playersetup")
|
||||
player.current = create_space_ninja(pick(ninjastart))
|
||||
player.current.ckey = player.key
|
||||
|
||||
if(player.current && !(istype(player.current,/mob/living/carbon/human))) return 0
|
||||
|
||||
//Ninja intro crawl goes here.
|
||||
|
||||
if(!config.objectives_disabled)
|
||||
player.objectives += new /datum/objective/ninja_highlander()
|
||||
player.objectives += new /datum/objective/survive()
|
||||
|
||||
show_objectives(player)
|
||||
|
||||
//Ninja objective announcement goes here.
|
||||
|
||||
//Set ninja internals.
|
||||
var/mob/living/carbon/human/N = player.current
|
||||
N.internal = N.s_store
|
||||
N.internals.icon_state = "internal1"
|
||||
if(N.wear_suit && istype(N.wear_suit,/obj/item/clothing/suit/space/space_ninja))
|
||||
var/obj/item/clothing/suit/space/space_ninja/S = N.wear_suit
|
||||
S:randomize_param()
|
||||
|
||||
/datum/game_mode/calamity/proc/spawn_vox_raiders(var/list/candidates)
|
||||
|
||||
//Create objectives.
|
||||
var/list/raid_objectives = forge_vox_objectives()
|
||||
|
||||
//Create raiders.
|
||||
for(var/datum/mind/player in candidates)
|
||||
raiders += player
|
||||
|
||||
//Place them on the shuttle.
|
||||
var/index = 1
|
||||
if(index > raider_spawn.len)
|
||||
index = 1
|
||||
player.current.loc = raider_spawn[index]
|
||||
index++
|
||||
|
||||
if(!config.objectives_disabled)
|
||||
player.objectives = raid_objectives
|
||||
|
||||
//Equip them.
|
||||
create_vox(player)
|
||||
greet_vox(player)
|
||||
|
||||
player.current << "<b><font color='red'>Your crew is transporting cortical stacks and critical resources back to the Shoal.\
|
||||
No delay or concession can be tolerated. Even putting holes in the station pales in comparison to failure.</b></font>"
|
||||
|
||||
spawn (rand(waittime_l, waittime_h))
|
||||
send_intercept()
|
||||
..()
|
||||
|
||||
/datum/game_mode/calamity/proc/spawn_borers(var/list/candidates)
|
||||
|
||||
var/list/possible_hosts = list()
|
||||
for(var/mob/living/carbon/human/H in mob_list)
|
||||
if(!(H.species.flags & IS_SYNTHETIC))
|
||||
possible_hosts += H
|
||||
|
||||
for(var/datum/mind/player in candidates)
|
||||
|
||||
if(!possible_hosts || possible_hosts.len)
|
||||
break
|
||||
|
||||
borers += player
|
||||
var/mob/living/carbon/human/target_host = pick(possible_hosts)
|
||||
possible_hosts -= target_host
|
||||
|
||||
var/mob/living/simple_animal/borer/roundstart/B = new(target_host)
|
||||
|
||||
player.current = B
|
||||
B.mind = player
|
||||
B.key = player.key
|
||||
player.assigned_role = "Cortical Borer"
|
||||
player.special_role = "Cortical Borer"
|
||||
|
||||
B.host = target_host
|
||||
B.host_brain.name = target_host.name
|
||||
B.host_brain.real_name = target_host.real_name
|
||||
|
||||
var/datum/organ/external/head = target_host.get_organ("head")
|
||||
head.implants += B
|
||||
|
||||
player.current << "\blue <b>You are a cortical borer!</b> You are a brain slug that worms its way \
|
||||
into the head of its victim, lurking out of sight until it needs to take control."
|
||||
player.current << "You can speak to your victim with <b>say</b>, to other borers with <b>say ;</b>, and use your Alien tab for abilities."
|
||||
|
||||
if(!config.objectives_disabled)
|
||||
player.objectives += new /datum/objective/borer_survive()
|
||||
player.objectives += new /datum/objective/borer_reproduce()
|
||||
player.objectives += new /datum/objective/escape()
|
||||
|
||||
show_objectives(player)
|
||||
|
||||
/datum/game_mode/calamity/proc/spawn_cultists(var/list/candidates)
|
||||
|
||||
//Prune the list.
|
||||
var/list/jobs_to_skip = list("Chaplain","AI", "Cyborg", "Lawyer", "Head of Security", "Captain")
|
||||
if(config.protect_roles_from_antagonist)
|
||||
jobs_to_skip += list("Security Officer", "Warden", "Detective")
|
||||
|
||||
//Make cult objectives.
|
||||
var/cult_objectives = list()
|
||||
cult_objectives += new /datum/objective/cult_summon()
|
||||
|
||||
//Actually spawn cultists.
|
||||
for(var/datum/mind/player in candidates)
|
||||
|
||||
for(var/job in jobs_to_skip)
|
||||
if(player.assigned_role == job)
|
||||
continue
|
||||
|
||||
cult += player
|
||||
equip_cultist(player.current)
|
||||
grant_runeword(player.current)
|
||||
update_cult_icons_added(player)
|
||||
player.current << "\blue <b>You are a member of the cult!<b> Your dark masters have sent you forth to serve their vile will."
|
||||
player.current << "\red <b>This station sails above a weeping tear in the Cosmos. Bring the Geometer of Blood forth.</b>"
|
||||
|
||||
if(!config.objectives_disabled)
|
||||
|
||||
for(var/datum/objective/O in cult_objectives)
|
||||
player.objectives += O
|
||||
|
||||
player.objectives += new /datum/objective/escape()
|
||||
player.objectives += new /datum/objective/survive()
|
||||
|
||||
show_objectives(player)
|
||||
player.special_role = "Cultist"
|
||||
@@ -125,23 +125,13 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
|
||||
changeling.current << "<B>\red You are a changeling!</B>"
|
||||
changeling.current << "<b>\red Use say \":g message\" to communicate with your fellow changelings. Remember: you get all of their absorbed DNA if you absorb them.</b>"
|
||||
|
||||
if(config.objectives_disabled)
|
||||
changeling.current << "<font color=blue>Within the rules,</font> try to act as an opposing force to the crew. Further RP and try to make sure other players have </i>fun<i>! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! <b>Please remember all rules aside from those without explicit exceptions apply to antagonists.</i></b>"
|
||||
|
||||
if (!config.objectives_disabled)
|
||||
changeling.current << "<B>You must complete the following tasks:</B>"
|
||||
show_objectives(changeling)
|
||||
|
||||
if (changeling.current.mind)
|
||||
if (changeling.current.mind.assigned_role == "Clown")
|
||||
changeling.current << "You have evolved beyond your clownish nature, allowing you to wield weapons without harming yourself."
|
||||
changeling.current.mutations.Remove(CLUMSY)
|
||||
|
||||
if (!config.objectives_disabled)
|
||||
var/obj_count = 1
|
||||
for(var/datum/objective/objective in changeling.objectives)
|
||||
changeling.current << "<B>Objective #[obj_count]</B>: [objective.explanation_text]"
|
||||
obj_count++
|
||||
return
|
||||
|
||||
/*/datum/game_mode/changeling/check_finished()
|
||||
var/changelings_alive = 0
|
||||
|
||||
@@ -100,8 +100,7 @@
|
||||
cult_mind.current << "\blue You are a member of the cult!"
|
||||
if(!config.objectives_disabled)
|
||||
memorize_cult_objectives(cult_mind)
|
||||
else
|
||||
cult_mind.current << "<font color=blue>Within the rules,</font> try to act as an opposing force to the crew. Further RP and try to make sure other players have </i>fun<i>! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! <b>Please remember all rules aside from those without explicit exceptions apply to antagonists.</i></b>"
|
||||
show_objectives(cult_mind)
|
||||
cult_mind.special_role = "Cultist"
|
||||
|
||||
spawn (rand(waittime_l, waittime_h))
|
||||
|
||||
@@ -375,12 +375,7 @@ Malf AIs/silicons aren't added. Monkeys aren't added. Messes with objective comp
|
||||
var/directive = generate_ninja_directive(side)
|
||||
new_ninja << "\blue \nYou are an elite mercenary assassin of the Spider Clan, [new_ninja.real_name]. The dreaded \red <B>SPACE NINJA</B>!\blue You have a variety of abilities at your disposal, thanks to your nano-enhanced cyber armor. Remember your training (initialize your suit by right clicking on it)! \nYour current directive is: \red <B>[directive]</B>"
|
||||
new_ninja.mind.store_memory("<B>Directive:</B> \red [directive]<br>")
|
||||
|
||||
var/obj_count = 1
|
||||
new_ninja << "\blue Your current objectives:"
|
||||
for(var/datum/objective/objective in ninja_mind.objectives)
|
||||
new_ninja << "<B>Objective #[obj_count]</B>: [objective.explanation_text]"
|
||||
obj_count++
|
||||
show_objectives(new_ninja.mind)
|
||||
|
||||
sent_ninja_to_station = 1//And we're done.
|
||||
return new_ninja//Return the ninja in case we need to reference them later.
|
||||
|
||||
@@ -481,3 +481,28 @@ proc/get_nt_opposed()
|
||||
dudes += man
|
||||
if(dudes.len == 0) return null
|
||||
return pick(dudes)
|
||||
|
||||
//Announces objectives/generic antag text.
|
||||
/proc/show_generic_antag_text(var/datum/mind/player)
|
||||
if(player.current)
|
||||
player.current << \
|
||||
"You are an antagonist! <font color=blue>Within the rules,</font> \
|
||||
try to act as an opposing force to the crew. Further RP and try to make sure \
|
||||
other players have <i>fun</i>! If you are confused or at a loss, always adminhelp, \
|
||||
and before taking extreme actions, please try to also contact the administration! \
|
||||
Think through your actions and make the roleplay immersive! <b>Please remember all \
|
||||
rules aside from those without explicit exceptions apply to antagonists.</b>"
|
||||
|
||||
/proc/show_objectives(var/datum/mind/player)
|
||||
|
||||
if(!player || !player.current) return
|
||||
|
||||
if(config.objectives_disabled)
|
||||
show_generic_antag_text(player)
|
||||
return
|
||||
|
||||
var/obj_count = 1
|
||||
player.current << "\blue Your current objectives:"
|
||||
for(var/datum/objective/objective in player.objectives)
|
||||
player.current << "<B>Objective #[obj_count]</B>: [objective.explanation_text]"
|
||||
obj_count++
|
||||
@@ -2,8 +2,12 @@
|
||||
VOX HEIST ROUNDTYPE
|
||||
*/
|
||||
|
||||
var/global/list/raider_spawn = list()
|
||||
var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind' objective. Clumsy, rewrite sometime.
|
||||
|
||||
/datum/game_mode/
|
||||
var/list/datum/mind/raiders = list() //Antags.
|
||||
var/list/raid_objectives = list() //Raid objectives
|
||||
|
||||
/datum/game_mode/heist
|
||||
name = "heist"
|
||||
@@ -16,9 +20,6 @@ VOX HEIST ROUNDTYPE
|
||||
var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds)
|
||||
var/const/waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds)
|
||||
|
||||
var/list/raid_objectives = list() //Raid objectives.
|
||||
var/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind' objective.
|
||||
|
||||
/datum/game_mode/heist/announce()
|
||||
world << "<B>The current game mode is - Heist!</B>"
|
||||
world << "<B>An unidentified bluespace signature has slipped past the Icarus and is approaching [station_name()]!</B>"
|
||||
@@ -59,15 +60,6 @@ VOX HEIST ROUNDTYPE
|
||||
|
||||
/datum/game_mode/heist/post_setup()
|
||||
|
||||
//Build a list of spawn points.
|
||||
var/list/turf/raider_spawn = list()
|
||||
|
||||
for(var/obj/effect/landmark/L in landmarks_list)
|
||||
if(L.name == "voxstart")
|
||||
raider_spawn += get_turf(L)
|
||||
del(L)
|
||||
continue
|
||||
|
||||
//Generate objectives for the group.
|
||||
if(!config.objectives_disabled)
|
||||
raid_objectives = forge_vox_objectives()
|
||||
@@ -83,49 +75,57 @@ VOX HEIST ROUNDTYPE
|
||||
raider.current.loc = raider_spawn[index]
|
||||
index++
|
||||
|
||||
var/sounds = rand(2,8)
|
||||
var/i = 0
|
||||
var/newname = ""
|
||||
|
||||
while(i<=sounds)
|
||||
i++
|
||||
newname += pick(list("ti","hi","ki","ya","ta","ha","ka","ya","chi","cha","kah"))
|
||||
|
||||
var/mob/living/carbon/human/vox = raider.current
|
||||
|
||||
vox.real_name = capitalize(newname)
|
||||
vox.name = vox.real_name
|
||||
raider.name = vox.name
|
||||
vox.age = rand(12,20)
|
||||
vox.dna.mutantrace = "vox"
|
||||
vox.set_species("Vox")
|
||||
vox.languages = list() // Removing language from chargen.
|
||||
vox.flavor_text = ""
|
||||
vox.add_language("Vox-pidgin")
|
||||
vox.h_style = "Short Vox Quills"
|
||||
vox.f_style = "Shaved"
|
||||
for(var/datum/organ/external/limb in vox.organs)
|
||||
limb.status &= ~(ORGAN_DESTROYED | ORGAN_ROBOT)
|
||||
|
||||
//Now apply cortical stack.
|
||||
var/datum/organ/external/E = vox.get_organ("head")
|
||||
var/obj/item/weapon/implant/cortical/I = new(vox)
|
||||
I.imp_in = vox
|
||||
I.implanted = 1
|
||||
I.part = E
|
||||
E.implants += I
|
||||
cortical_stacks += I
|
||||
|
||||
vox.equip_vox_raider()
|
||||
vox.regenerate_icons()
|
||||
|
||||
raider.objectives = raid_objectives
|
||||
create_vox(raider)
|
||||
greet_vox(raider)
|
||||
|
||||
if(!config.objectives_disabled && raid_objectives)
|
||||
raider.objectives = raid_objectives
|
||||
|
||||
spawn (rand(waittime_l, waittime_h))
|
||||
send_intercept()
|
||||
|
||||
/datum/game_mode/heist/proc/is_raider_crew_safe()
|
||||
/datum/game_mode/proc/create_vox(var/datum/mind/newraider)
|
||||
|
||||
|
||||
var/sounds = rand(2,8)
|
||||
var/i = 0
|
||||
var/newname = ""
|
||||
|
||||
while(i<=sounds)
|
||||
i++
|
||||
newname += pick(list("ti","hi","ki","ya","ta","ha","ka","ya","chi","cha","kah"))
|
||||
|
||||
var/mob/living/carbon/human/vox = newraider.current
|
||||
|
||||
vox.real_name = capitalize(newname)
|
||||
vox.name = vox.real_name
|
||||
newraider.name = vox.name
|
||||
vox.age = rand(12,20)
|
||||
vox.dna.mutantrace = "vox"
|
||||
vox.set_species("Vox")
|
||||
vox.languages = list() // Removing language from chargen.
|
||||
vox.flavor_text = ""
|
||||
vox.add_language("Vox-pidgin")
|
||||
vox.h_style = "Short Vox Quills"
|
||||
vox.f_style = "Shaved"
|
||||
|
||||
for(var/datum/organ/external/limb in vox.organs)
|
||||
limb.status &= ~(ORGAN_DESTROYED | ORGAN_ROBOT)
|
||||
|
||||
//Generate cortical stack.
|
||||
var/datum/organ/external/affected = vox.get_organ("head")
|
||||
|
||||
var/obj/item/weapon/implant/cortical/I = new(vox)
|
||||
I.imp_in = vox
|
||||
I.implanted = 1
|
||||
affected.implants += I
|
||||
I.part = affected
|
||||
cortical_stacks += I
|
||||
|
||||
vox.equip_vox_raider()
|
||||
vox.regenerate_icons()
|
||||
|
||||
/datum/game_mode/proc/is_raider_crew_safe()
|
||||
|
||||
if(cortical_stacks.len == 0)
|
||||
return 0
|
||||
@@ -135,7 +135,7 @@ VOX HEIST ROUNDTYPE
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/datum/game_mode/heist/proc/is_raider_crew_alive()
|
||||
/datum/game_mode/proc/is_raider_crew_alive()
|
||||
|
||||
for(var/datum/mind/raider in raiders)
|
||||
if(raider.current)
|
||||
@@ -143,7 +143,7 @@ VOX HEIST ROUNDTYPE
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/datum/game_mode/heist/proc/forge_vox_objectives()
|
||||
/datum/game_mode/proc/forge_vox_objectives()
|
||||
|
||||
var/i = 1
|
||||
var/max_objectives = pick(2,2,2,2,3,3,3,4)
|
||||
@@ -171,20 +171,13 @@ VOX HEIST ROUNDTYPE
|
||||
|
||||
return objs
|
||||
|
||||
/datum/game_mode/heist/proc/greet_vox(var/datum/mind/raider)
|
||||
/datum/game_mode/proc/greet_vox(var/datum/mind/raider)
|
||||
raider.current << "\blue <B>You are a Vox Raider, fresh from the Shoal!</b>"
|
||||
raider.current << "\blue The Vox are a race of cunning, sharp-eyed nomadic raiders and traders endemic to the frontier and much of the unexplored galaxy. You and the crew have come to the Exodus for plunder, trade or both."
|
||||
raider.current << "\blue Vox are cowardly and will flee from larger groups, but corner one or find them en masse and they are vicious."
|
||||
raider.current << "\blue Use :V to voxtalk, :H to talk on your encrypted channel, and don't forget to turn on your nitrogen internals!"
|
||||
raider.current << "\red IF YOU HAVE NOT PLAYED A VOX BEFORE, REVIEW THIS THREAD: http://baystation12.net/forums/viewtopic.php?f=6&t=8657."
|
||||
var/obj_count = 1
|
||||
if(!config.objectives_disabled)
|
||||
for(var/datum/objective/objective in raider.objectives)
|
||||
raider.current << "<B>Objective #[obj_count]</B>: [objective.explanation_text]"
|
||||
obj_count++
|
||||
else
|
||||
raider.current << "<font color=blue>Within the rules,</font> try to act as an opposing force to the crew or come up with other fun ideas. Further RP and try to make sure other players have </i>fun<i>! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! <b>Please remember all rules aside from those without explicit exceptions apply to antagonists.</i></b>"
|
||||
|
||||
show_objectives(raider)
|
||||
|
||||
/datum/game_mode/heist/declare_completion()
|
||||
|
||||
@@ -292,6 +285,6 @@ datum/game_mode/proc/auto_declare_completion_heist()
|
||||
var/area/skipjack = locate(/area/shuttle/vox/station)
|
||||
for (var/mob/living/M in skipjack.contents)
|
||||
//maybe send the player a message that they've gone home/been kidnapped? Someone responsible for vox lore should write that.
|
||||
Del(M)
|
||||
del(M)
|
||||
for (var/obj/O in skipjack.contents)
|
||||
Del(O) //no hiding in lockers or anything
|
||||
del(O) //no hiding in lockers or anything
|
||||
@@ -131,11 +131,7 @@
|
||||
/datum/game_mode/proc/greet_meme(var/datum/mind/meme, var/you_are=1)
|
||||
if (you_are)
|
||||
meme.current << "<B>\red You are a meme!</B>"
|
||||
|
||||
var/obj_count = 1
|
||||
for(var/datum/objective/objective in meme.objectives)
|
||||
meme.current << "<B>Objective #[obj_count]</B>: [objective.explanation_text]"
|
||||
obj_count++
|
||||
show_objectives(meme)
|
||||
return
|
||||
|
||||
/datum/game_mode/meme/check_finished()
|
||||
|
||||
@@ -56,8 +56,8 @@
|
||||
if(ninja.current && !(istype(ninja.current,/mob/living/carbon/human))) return 0
|
||||
if(!config.objectives_disabled)
|
||||
forge_ninja_objectives(ninja)
|
||||
else
|
||||
ninja.current << "<font color=blue>Within the rules,</font> try to act as an opposing force to the crew. Further RP and try to make sure other players have </i>fun<i>! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! <b>Please remember all rules aside from those without explicit exceptions apply to antagonists.</i></b>"
|
||||
show_objectives(ninja)
|
||||
|
||||
var/mob/living/carbon/human/N = ninja.current
|
||||
N.internal = N.s_store
|
||||
N.internals.icon_state = "internal1"
|
||||
@@ -139,11 +139,7 @@
|
||||
ninja.current << "You are an elite mercenary assassin of the Spider Clan, [ninja.current.real_name]. You have a variety of abilities at your disposal, thanks to your nano-enhanced cyber armor.\nYour current directive is: \red <B>[directive]</B>\n \blue Try your best to adhere to this."
|
||||
ninja.store_memory("<B>Directive:</B> \red [directive]<br>")
|
||||
|
||||
var/obj_count = 1
|
||||
ninja.current << "\blue Your current objectives:"
|
||||
for(var/datum/objective/objective in ninja.objectives)
|
||||
ninja.current << "<B>Objective #[obj_count]</B>: [objective.explanation_text]"
|
||||
obj_count++
|
||||
show_objectives(ninja)
|
||||
|
||||
/datum/game_mode/proc/auto_declare_completion_ninja()
|
||||
if(ninjas.len)
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*
|
||||
NUCLEAR EMERGENCY ROUNDTYPE
|
||||
*/
|
||||
|
||||
var/global/list/turf/synd_spawn = list()
|
||||
|
||||
|
||||
/datum/game_mode
|
||||
var/list/datum/mind/syndicates = list()
|
||||
|
||||
@@ -116,14 +123,6 @@
|
||||
|
||||
/datum/game_mode/nuclear/post_setup()
|
||||
|
||||
var/list/turf/synd_spawn = list()
|
||||
|
||||
for(var/obj/effect/landmark/A in landmarks_list)
|
||||
if(A.name == "Syndicate-Spawn")
|
||||
synd_spawn += get_turf(A)
|
||||
del(A)
|
||||
continue
|
||||
|
||||
var/obj/effect/landmark/uplinkdevice = locate("landmark*Syndicate-Uplink") //i will be rewriting this shortly
|
||||
var/obj/effect/landmark/nuke_spawn = locate("landmark*Nuclear-Bomb")
|
||||
|
||||
@@ -139,8 +138,8 @@
|
||||
synd_mind.current.real_name = "[syndicate_name()] Operative" // placeholder while we get their actual name
|
||||
spawn(0)
|
||||
NukeNameAssign(synd_mind)
|
||||
if(!config.objectives_disabled)
|
||||
forge_syndicate_objectives(synd_mind)
|
||||
|
||||
forge_syndicate_objectives(synd_mind)
|
||||
greet_syndicate(synd_mind)
|
||||
equip_syndicate(synd_mind.current)
|
||||
|
||||
@@ -188,25 +187,18 @@
|
||||
|
||||
|
||||
/datum/game_mode/proc/forge_syndicate_objectives(var/datum/mind/syndicate)
|
||||
|
||||
if (config.objectives_disabled)
|
||||
return
|
||||
|
||||
var/datum/objective/nuclear/syndobj = new
|
||||
syndobj.owner = syndicate
|
||||
syndicate.objectives += syndobj
|
||||
|
||||
|
||||
/datum/game_mode/proc/greet_syndicate(var/datum/mind/syndicate, var/you_are=1)
|
||||
if (you_are)
|
||||
syndicate.current << "\blue You are a [syndicate_name()] agent!"
|
||||
var/obj_count = 1
|
||||
if(!config.objectives_disabled)
|
||||
for(var/datum/objective/objective in syndicate.objectives)
|
||||
syndicate.current << "<B>Objective #[obj_count]</B>: [objective.explanation_text]"
|
||||
obj_count++
|
||||
else
|
||||
syndicate.current << "<font color=blue>Within the rules,</font> try to act as an opposing force to the crew. Further RP and try to make sure other players have </i>fun<i>! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! <b>Please remember all rules aside from those without explicit exceptions apply to antagonists.</i></b>"
|
||||
return
|
||||
|
||||
show_objectives(syndicate)
|
||||
|
||||
/datum/game_mode/proc/random_radio_frequency()
|
||||
return 1337 // WHY??? -- Doohl
|
||||
|
||||
@@ -930,4 +930,42 @@ datum/objective/heist/inviolate_death
|
||||
explanation_text = "Follow the Inviolate. Minimise death and loss of resources."
|
||||
check_completion()
|
||||
if(vox_kills > MAX_VOX_KILLS) return 0
|
||||
return 1
|
||||
return 1
|
||||
|
||||
//Borer objective(s).
|
||||
|
||||
/datum/objective/borer_survive
|
||||
explanation_text = "Survive in a host until the end of the round."
|
||||
|
||||
/datum/objective/borer_survive/check_completion()
|
||||
if(owner)
|
||||
var/mob/living/simple_animal/borer/B = owner
|
||||
if(istype(B) && B.stat < 2 && B.host && B.host.stat < 2) return 1
|
||||
return 0
|
||||
|
||||
/datum/objective/borer_reproduce
|
||||
explanation_text = "Reproduce at least once."
|
||||
|
||||
/datum/objective/borer_reproduce/check_completion()
|
||||
if(owner && owner.current)
|
||||
var/mob/living/simple_animal/borer/B = owner.current
|
||||
if(istype(B) && B.has_reproduced) return 1
|
||||
return 0
|
||||
|
||||
/datum/objective/ninja_highlander
|
||||
explanation_text = "You aspire to be a Grand Master of the Spider Clan. Kill all of your fellow acolytes."
|
||||
|
||||
/datum/objective/ninja_highlander/check_completion()
|
||||
if(owner)
|
||||
for(var/datum/mind/ninja in ticker.mode.ninjas)
|
||||
if(ninja != owner)
|
||||
if(ninja.current.stat < 2) return 0
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/datum/objective/cult_summon
|
||||
explanation_text = "Summon Nar-Sie via the use of the appropriate rune (Hell join self). It will only work if nine cultists stand on and around it."
|
||||
|
||||
/datum/objective/cult_summon/check_completion()
|
||||
if(locate(/obj/machinery/singularity/narsie/large) in machines) return 1
|
||||
return 0
|
||||
@@ -118,16 +118,13 @@
|
||||
rev_mind.objectives += rev_obj
|
||||
|
||||
/datum/game_mode/proc/greet_revolutionary(var/datum/mind/rev_mind, var/you_are=1)
|
||||
var/obj_count = 1
|
||||
|
||||
rev_mind.special_role = "Head Revolutionary"
|
||||
|
||||
if (you_are)
|
||||
rev_mind.current << "\blue You are a member of the revolutionaries' leadership!"
|
||||
if(!config.objectives_disabled)
|
||||
for(var/datum/objective/objective in rev_mind.objectives)
|
||||
rev_mind.current << "<B>Objective #[obj_count]</B>: [objective.explanation_text]"
|
||||
rev_mind.special_role = "Head Revolutionary"
|
||||
obj_count++
|
||||
else
|
||||
rev_mind.current << "<font color=blue>Within the rules,</font> try to act as an opposing force to the crew. Further RP and try to make sure other players have </i>fun<i>! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! <b>Please remember all rules aside from those without explicit exceptions apply to antagonists.</i></b>"
|
||||
|
||||
show_objectives(rev_mind)
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
//This are equips the rev heads with their gear, and makes the clown not clumsy//
|
||||
@@ -198,8 +195,7 @@
|
||||
revolutionaries += rev_mind
|
||||
rev_mind.current << "\red <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>"
|
||||
rev_mind.special_role = "Revolutionary"
|
||||
if(config.objectives_disabled)
|
||||
rev_mind.current << "<font color=blue>Within the rules,</font> try to act as an opposing force to the crew. Further RP and try to make sure other players have </i>fun<i>! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! <b>Please remember all rules aside from those without explicit exceptions apply to antagonists.</i></b>"
|
||||
show_objectives(rev_mind)
|
||||
update_rev_icons_added(rev_mind)
|
||||
return 1
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -87,11 +87,8 @@
|
||||
update_rev_icons_added(rev_mind)
|
||||
|
||||
for(var/datum/mind/rev_mind in head_revolutionaries)
|
||||
var/obj_count = 1
|
||||
rev_mind.current << "\blue You are a member of the revolutionaries' leadership!"
|
||||
for(var/datum/objective/objective in rev_mind.objectives)
|
||||
rev_mind.current << "<B>Objective #[obj_count]</B>: [objective.explanation_text]"
|
||||
obj_count++
|
||||
show_objectives(rev_mind)
|
||||
|
||||
spawn (rand(waittime_l, waittime_h))
|
||||
send_intercept()
|
||||
|
||||
@@ -78,16 +78,10 @@
|
||||
send_intercept()
|
||||
|
||||
/datum/game_mode/revolution/rp_revolution/greet_revolutionary(var/datum/mind/rev_mind, var/you_are=1)
|
||||
var/obj_count = 1
|
||||
rev_mind.special_role = "Head Revolutionary"
|
||||
if (you_are)
|
||||
rev_mind.current << "\blue You are a member of the revolutionaries' leadership!"
|
||||
if(!config.objectives_disabled)
|
||||
for(var/datum/objective/objective in rev_mind.objectives)
|
||||
rev_mind.current << "<B>Objective #[obj_count]</B>: [objective.explanation_text]"
|
||||
rev_mind.special_role = "Head Revolutionary"
|
||||
obj_count++
|
||||
else
|
||||
rev_mind.current << "<font color=blue>Within the rules,</font> try to act as an opposing force to the crew. Further RP and try to make sure other players have </i>fun<i>! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! <b>Please remember all rules aside from those without explicit exceptions apply to antagonists.</i></b>"
|
||||
show_objectives(rev_mind)
|
||||
|
||||
// Show each head revolutionary up to 3 candidates
|
||||
var/list/already_considered = list()
|
||||
@@ -113,8 +107,7 @@
|
||||
revolutionaries += rev_mind
|
||||
rev_mind.current << "\red <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, capture or convert the heads to win the revolution!</FONT>"
|
||||
rev_mind.special_role = "Revolutionary"
|
||||
if(config.objectives_disabled)
|
||||
rev_mind.current << "<font color=blue>Within the rules,</font> try to act as an opposing force to the crew. Further RP and try to make sure other players have </i>fun<i>! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! <b>Please remember all rules aside from those without explicit exceptions apply to antagonists.</i></b>"
|
||||
show_objectives(rev_mind)
|
||||
update_rev_icons_added(rev_mind)
|
||||
H.hud_updateflag |= 1 << SPECIALROLE_HUD
|
||||
return 1
|
||||
|
||||
@@ -135,14 +135,7 @@
|
||||
|
||||
/datum/game_mode/proc/greet_traitor(var/datum/mind/traitor)
|
||||
traitor.current << "<B><font size=3 color=red>You are the traitor.</font></B>"
|
||||
if (!config.objectives_disabled)
|
||||
var/obj_count = 1
|
||||
for(var/datum/objective/objective in traitor.objectives)
|
||||
traitor.current << "<B>Objective #[obj_count]</B>: [objective.explanation_text]"
|
||||
obj_count++
|
||||
else
|
||||
traitor.current << "<i>You have been selected this round as an antagonist- <font color=blue>Within the rules,</font> try to act as an opposing force to the crew- This can be via corporate payoff, personal motives, or maybe just being a dick. Further RP and try to make sure other players have </i>fun<i>! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! <b>Please remember all rules aside from those without explicit exceptions apply to antagonist.</i></b>"
|
||||
return
|
||||
show_objectives(traitor)
|
||||
|
||||
|
||||
/datum/game_mode/proc/finalize_traitor(var/datum/mind/traitor)
|
||||
|
||||
@@ -13,10 +13,8 @@
|
||||
survive.owner = H.mind
|
||||
H.mind.objectives += survive
|
||||
H << "<B>You are the survivor! Your own safety matters above all else, trust no one and kill anyone who gets in your way. However, armed as you are, now would be the perfect time to settle that score or grab that pair of yellow gloves you've been eyeing...</B>"
|
||||
var/obj_count = 1
|
||||
for(var/datum/objective/OBJ in H.mind.objectives)
|
||||
H << "<B>Objective #[obj_count]</B>: [OBJ.explanation_text]"
|
||||
obj_count++
|
||||
show_objectives(H.mind)
|
||||
|
||||
var/randomize = pick("taser","egun","laser","revolver","detective","smg","nuclear","deagle","gyrojet","pulse","silenced","cannon","doublebarrel","shotgun","combatshotgun","mateba","smg","uzi","crossbow","saw")
|
||||
switch (randomize)
|
||||
if("taser")
|
||||
|
||||
@@ -135,16 +135,7 @@
|
||||
/datum/game_mode/proc/greet_wizard(var/datum/mind/wizard, var/you_are=1)
|
||||
if (you_are)
|
||||
wizard.current << "<B>\red You are the Space Wizard!</B>"
|
||||
wizard.current << "<B>The Space Wizards Federation has given you the following tasks:</B>"
|
||||
if(!config.objectives_disabled)
|
||||
var/obj_count = 1
|
||||
for(var/datum/objective/objective in wizard.objectives)
|
||||
wizard.current << "<B>Objective #[obj_count]</B>: [objective.explanation_text]"
|
||||
obj_count++
|
||||
else
|
||||
wizard.current << "<font color=blue>Within the rules,</font> try to act as an opposing force to the crew. Further RP and try to make sure other players have </i>fun<i>! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! <b>Please remember all rules aside from those without explicit exceptions apply to antagonists.</i></b>"
|
||||
return
|
||||
|
||||
show_objectives(wizard)
|
||||
|
||||
/*/datum/game_mode/proc/learn_basic_spells(mob/living/carbon/human/wizard_mob)
|
||||
if (!istype(wizard_mob))
|
||||
|
||||
@@ -86,11 +86,7 @@
|
||||
M << "<B>You have joined the ranks of the Syndicate and become a traitor to the station!</B>"
|
||||
|
||||
message_admins("[N]/([N.ckey]) has accepted a traitor objective from a syndicate beacon.")
|
||||
|
||||
var/obj_count = 1
|
||||
for(var/datum/objective/OBJ in M.mind.objectives)
|
||||
M << "<B>Objective #[obj_count]</B>: [OBJ.explanation_text]"
|
||||
obj_count++
|
||||
show_objectives(M.mind)
|
||||
|
||||
src.add_fingerprint(usr)
|
||||
src.updateUsrDialog()
|
||||
|
||||
@@ -66,11 +66,7 @@
|
||||
silence.owner = user.mind
|
||||
user.mind.objectives += silence
|
||||
|
||||
var/obj_count = 1
|
||||
for(var/datum/objective/OBJ in user.mind.objectives)
|
||||
user << "<B>Objective #[obj_count]</B>: [OBJ.explanation_text]"
|
||||
obj_count++
|
||||
|
||||
show_objectives(user.mind)
|
||||
user << "You have a very bad feeling about this."
|
||||
|
||||
return
|
||||
@@ -81,6 +81,14 @@
|
||||
ninjastart += loc
|
||||
del(src)
|
||||
|
||||
if("voxstart")
|
||||
raider_spawn += loc
|
||||
del(src)
|
||||
|
||||
if("Syndicate-Spawn")
|
||||
synd_spawn += loc
|
||||
del(src)
|
||||
|
||||
landmarks_list += src
|
||||
return 1
|
||||
|
||||
|
||||
@@ -481,6 +481,9 @@
|
||||
if(ticker.mode.traitors.len)
|
||||
dat += check_role_table("Traitors", ticker.mode.traitors, src)
|
||||
|
||||
if(ticker.mode.borers.len)
|
||||
dat += check_role_table("Cortical Borers", ticker.mode.borers, src)
|
||||
|
||||
var/datum/game_mode/mutiny/mutiny = get_mutiny_mode()
|
||||
if(mutiny)
|
||||
dat += mutiny.check_antagonists_ui(src)
|
||||
|
||||
@@ -533,7 +533,7 @@ client/proc/one_click_antag()
|
||||
|
||||
if(ticker.mode && ( istype( ticker.mode,/datum/game_mode/heist ) ) )
|
||||
var/datum/game_mode/heist/M = ticker.mode
|
||||
M.cortical_stacks += I
|
||||
cortical_stacks += I
|
||||
M.raiders[new_vox.mind] = I
|
||||
|
||||
ticker.mode.traitors += new_vox.mind
|
||||
|
||||
@@ -20,10 +20,7 @@
|
||||
H.mind.objectives += hijack_objective
|
||||
|
||||
H << "<B>You are the traitor.</B>"
|
||||
var/obj_count = 1
|
||||
for(var/datum/objective/OBJ in H.mind.objectives)
|
||||
H << "<B>Objective #[obj_count]</B>: [OBJ.explanation_text]"
|
||||
obj_count++
|
||||
show_objectives(H.mind)
|
||||
|
||||
for (var/obj/item/I in H)
|
||||
if (istype(I, /obj/item/weapon/implant))
|
||||
|
||||
@@ -30,6 +30,10 @@ var/scheduledEvent = null
|
||||
playercount_modifier = 0.9
|
||||
if(36 to 100000)
|
||||
playercount_modifier = 0.8
|
||||
|
||||
if(ticker.mode && ticker.mode.name == "calamity") //Calamity mode lowers the time required between events drastically.
|
||||
playercount_modifier = playercount_modifier * 0.3
|
||||
|
||||
var/next_event_delay = rand(eventTimeLower, eventTimeUpper) * playercount_modifier
|
||||
scheduledEvent = world.timeofday + next_event_delay
|
||||
log_debug("Next event in [next_event_delay/600] minutes.")
|
||||
|
||||
@@ -54,23 +54,25 @@
|
||||
//Mob specific holders.
|
||||
|
||||
/obj/item/weapon/holder/diona
|
||||
|
||||
name = "diona nymph"
|
||||
desc = "It's a tiny plant critter."
|
||||
icon_state = "nymph"
|
||||
origin_tech = "magnets=3;biotech=5"
|
||||
|
||||
/obj/item/weapon/holder/drone
|
||||
|
||||
name = "maintenance drone"
|
||||
desc = "It's a small maintenance robot."
|
||||
icon_state = "drone"
|
||||
origin_tech = "magnets=3;engineering=5"
|
||||
|
||||
|
||||
/obj/item/weapon/holder/cat
|
||||
|
||||
name = "cat"
|
||||
desc = "It's a cat. Meow."
|
||||
icon_state = "cat"
|
||||
origin_tech = null
|
||||
origin_tech = null
|
||||
|
||||
/obj/item/weapon/holder/borer
|
||||
name = "cortical borer"
|
||||
desc = "It's a slimy brain slug. Gross."
|
||||
icon_state = "borer"
|
||||
origin_tech = "biotech=6"
|
||||
@@ -1,6 +1,6 @@
|
||||
/mob/living/carbon/Life()
|
||||
..()
|
||||
|
||||
|
||||
// Increase germ_level regularly
|
||||
if(germ_level < GERM_LEVEL_AMBIENT && prob(30)) //if you're just standing there, you shouldn't get more germs beyond an ambient level
|
||||
germ_level++
|
||||
@@ -14,7 +14,7 @@
|
||||
src.nutrition -= HUNGER_FACTOR/10
|
||||
if((FAT in src.mutations) && src.m_intent == "run" && src.bodytemperature <= 360)
|
||||
src.bodytemperature += 2
|
||||
|
||||
|
||||
// Moving around increases germ_level faster
|
||||
if(germ_level < GERM_LEVEL_MOVE_CAP && prob(8))
|
||||
germ_level++
|
||||
@@ -206,7 +206,7 @@
|
||||
if (istype(src,/mob/living/carbon/human) && src:w_uniform)
|
||||
var/mob/living/carbon/human/H = src
|
||||
H.w_uniform.add_fingerprint(M)
|
||||
|
||||
|
||||
if(lying)
|
||||
src.sleeping = max(0,src.sleeping-5)
|
||||
if(src.sleeping == 0)
|
||||
@@ -216,7 +216,7 @@
|
||||
else
|
||||
M.visible_message("<span class='notice'>[M] hugs [src] to make [t_him] feel better!</span>", \
|
||||
"<span class='notice'>You hug [src] to make [t_him] feel better!</span>")
|
||||
|
||||
|
||||
AdjustParalysis(-3)
|
||||
AdjustStunned(-3)
|
||||
AdjustWeakened(-3)
|
||||
@@ -470,9 +470,10 @@
|
||||
return
|
||||
|
||||
if(B.chemicals >= 100)
|
||||
src << "\red <B>Your host twitches and quivers as you rapdly excrete several larvae from your sluglike body.</B>"
|
||||
src << "\red <B>Your host twitches and quivers as you rapidly excrete a larva from your sluglike body.</B>"
|
||||
visible_message("\red <B>[src] heaves violently, expelling a rush of vomit and a wriggling, sluglike creature!</B>")
|
||||
B.chemicals -= 100
|
||||
B.has_reproduced = 1
|
||||
|
||||
new /obj/effect/decal/cleanable/vomit(get_turf(src))
|
||||
playsound(loc, 'sound/effects/splat.ogg', 50, 1)
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
/datum/game_mode/var/list/borers = list()
|
||||
|
||||
/mob/living/captive_brain
|
||||
name = "host brain"
|
||||
real_name = "host brain"
|
||||
universal_understand = 1
|
||||
|
||||
/mob/living/captive_brain/say(var/message)
|
||||
|
||||
@@ -45,6 +48,8 @@
|
||||
friendly = "prods"
|
||||
wander = 0
|
||||
pass_flags = PASSTABLE
|
||||
universal_understand = 1
|
||||
holder_type = /obj/item/weapon/holder/borer
|
||||
|
||||
var/used_dominate
|
||||
var/chemicals = 10 // Chemicals used for reproduction and spitting neurotoxin.
|
||||
@@ -53,6 +58,11 @@
|
||||
var/mob/living/captive_brain/host_brain // Used for swapping control of the body back and forth.
|
||||
var/controlling // Used in human death check.
|
||||
var/docile = 0 // Sugar can stop borers from acting.
|
||||
var/has_reproduced
|
||||
var/roundstart
|
||||
|
||||
/mob/living/simple_animal/borer/roundstart
|
||||
roundstart = 1
|
||||
|
||||
/mob/living/simple_animal/borer/Life()
|
||||
|
||||
@@ -96,9 +106,7 @@
|
||||
..()
|
||||
truename = "[pick("Primary","Secondary","Tertiary","Quaternary")] [rand(1000,9999)]"
|
||||
host_brain = new/mob/living/captive_brain(src)
|
||||
|
||||
request_player()
|
||||
|
||||
if(!roundstart) request_player()
|
||||
|
||||
/mob/living/simple_animal/borer/say(var/message)
|
||||
|
||||
@@ -338,7 +346,7 @@
|
||||
|
||||
detatch()
|
||||
|
||||
mob/living/simple_animal/borer/proc/detatch()
|
||||
/mob/living/simple_animal/borer/proc/detatch()
|
||||
|
||||
if(!host) return
|
||||
|
||||
@@ -530,7 +538,7 @@ mob/living/simple_animal/borer/proc/detatch()
|
||||
src << text("\blue You have stopped hiding.")
|
||||
|
||||
//Procs for grabbing players.
|
||||
mob/living/simple_animal/borer/proc/request_player()
|
||||
/mob/living/simple_animal/borer/proc/request_player()
|
||||
for(var/mob/dead/observer/O in player_list)
|
||||
if(jobban_isbanned(O, "Syndicate"))
|
||||
continue
|
||||
@@ -538,7 +546,7 @@ mob/living/simple_animal/borer/proc/request_player()
|
||||
if(O.client.prefs.be_special & BE_ALIEN)
|
||||
question(O.client)
|
||||
|
||||
mob/living/simple_animal/borer/proc/question(var/client/C)
|
||||
/mob/living/simple_animal/borer/proc/question(var/client/C)
|
||||
spawn(0)
|
||||
if(!C) return
|
||||
var/response = alert(C, "A cortical borer needs a player. Are you interested?", "Cortical borer request", "Yes", "No", "Never for this round")
|
||||
@@ -549,7 +557,7 @@ mob/living/simple_animal/borer/proc/question(var/client/C)
|
||||
else if (response == "Never for this round")
|
||||
C.prefs.be_special ^= BE_ALIEN
|
||||
|
||||
mob/living/simple_animal/borer/proc/transfer_personality(var/client/candidate)
|
||||
/mob/living/simple_animal/borer/proc/transfer_personality(var/client/candidate)
|
||||
|
||||
if(!candidate)
|
||||
return
|
||||
@@ -558,3 +566,4 @@ mob/living/simple_animal/borer/proc/transfer_personality(var/client/candidate)
|
||||
src.ckey = candidate.ckey
|
||||
if(src.mind)
|
||||
src.mind.assigned_role = "Cortical Borer"
|
||||
src.mind.special_role = "Cortical Borer"
|
||||
Reference in New Issue
Block a user