-Finished work on the "cult" gamemode. I'll still add features to it later, but it is safe to be put on secret rotation now.
-Added an energy cutlass and made a pirate version of the space suit in preparation for a later nuke update. -Changeling now ends 15 minutes after changeling death, unless he's ressurected. -Further fixing of wizarditis teleporting into space. -Fixed the wise beard sprite. -Fixed missing sprite for monkeyburgers. -Fixed Beepsky automatically adding 2 treason points to EVERYONE. I believe that's everything. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@365 316c924e-a436-60f5-8080-3fe189b3f50e
@@ -1458,7 +1458,7 @@
|
||||
/obj/item/weapon/reagent_containers/food/snacks/monkeyburger
|
||||
name = "monkeyburger"
|
||||
desc = "The cornerstone of every nutritious breakfast."
|
||||
icon_state = "burger"
|
||||
icon_state = "hburger"
|
||||
amount = 5
|
||||
heal_amt = 2
|
||||
|
||||
@@ -2050,7 +2050,13 @@
|
||||
|
||||
/obj/reagent_dispensers/fueltank/blob_act()
|
||||
explosion(src.loc,0,1,5,7,10)
|
||||
del(src)
|
||||
if(src)
|
||||
del(src)
|
||||
|
||||
/obj/reagent_dispensers/fueltank/ex_act()
|
||||
explosion(src.loc,-1,0,2)
|
||||
if(src)
|
||||
del(src)
|
||||
|
||||
/obj/reagent_dispensers/beerkeg
|
||||
name = "beer keg"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
if(1)
|
||||
if(prob(2))
|
||||
affected_mob << "\red You feel like something is moving inside of you"
|
||||
if(2) //also changes say, see the say.dm
|
||||
if(2) //also changes say, see say.dm
|
||||
if(prob(2))
|
||||
affected_mob << "\red You feel like something is moving inside of you"
|
||||
if(prob(2))
|
||||
|
||||
@@ -106,6 +106,9 @@ STI KALY - blind
|
||||
if(theareas.Find(AR) || AR.name == "Space") continue
|
||||
theareas += AR
|
||||
|
||||
if(!theareas)
|
||||
return
|
||||
|
||||
var/area/thearea = pick(theareas)
|
||||
|
||||
var/datum/effects/system/harmless_smoke_spread/smoke = new /datum/effects/system/harmless_smoke_spread()
|
||||
@@ -116,6 +119,7 @@ STI KALY - blind
|
||||
var/list/L = list()
|
||||
for(var/turf/T in get_area_turfs(thearea.type))
|
||||
if(T.z != affected_mob.z) continue
|
||||
if(T.name == "space") continue
|
||||
if(!T.density)
|
||||
var/clear = 1
|
||||
for(var/obj/O in T)
|
||||
@@ -125,6 +129,9 @@ STI KALY - blind
|
||||
if(clear)
|
||||
L+=T
|
||||
|
||||
if(!L)
|
||||
return
|
||||
|
||||
affected_mob.say("SCYAR NILA [uppertext(thearea.name)]!")
|
||||
affected_mob.loc = pick(L)
|
||||
smoke.start()
|
||||
|
||||
@@ -657,6 +657,20 @@
|
||||
icon_state = "syndicate"
|
||||
item_state = "space_suit_syndicate"
|
||||
|
||||
//Themed space suits for different nuke rounds (WIP)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/pirate
|
||||
name = "pirate hat"
|
||||
desc = "Yarr."
|
||||
icon_state = "pirate"
|
||||
item_state = "pirate"
|
||||
|
||||
/obj/item/clothing/suit/space/pirate
|
||||
name = "pirate coat"
|
||||
desc = "Yarr."
|
||||
icon_state = "pirate"
|
||||
item_state = "pirate"
|
||||
|
||||
// UNDERS AND BY THAT, NATURALLY I MEAN UNIFORMS/JUMPSUITS
|
||||
|
||||
/obj/item/clothing/under
|
||||
|
||||
@@ -1072,6 +1072,9 @@ Total SMES charging rate should not exceed total power generation rate, or an ov
|
||||
w_class = 2.0
|
||||
flags = FPRINT | TABLEPASS | NOSHIELD
|
||||
|
||||
/obj/item/weapon/sword/pirate
|
||||
name = "energy cutlass"
|
||||
icon_state = "cutlass0"
|
||||
|
||||
/obj/item/weapon/table_parts
|
||||
name = "table parts"
|
||||
|
||||
@@ -41,6 +41,8 @@
|
||||
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/changelingdeathticker = 0
|
||||
|
||||
/datum/game_mode/changeling/announce()
|
||||
world << "<B>The current game mode is - Changeling!</B>"
|
||||
world << "<B>There is an alien changeling on the station. Do not let the changeling succeed!</B>"
|
||||
@@ -152,7 +154,7 @@
|
||||
intercepttext += "<B> Cent. Com has recently been contacted by the following syndicate affiliated organisations in your area, please investigate any information you may have:</B>"
|
||||
|
||||
var/list/possible_modes = list()
|
||||
possible_modes.Add("revolution", "wizard", "nuke", "traitor", "malf", "changeling")
|
||||
possible_modes.Add("revolution", "wizard", "nuke", "traitor", "malf", "changeling", "cult")
|
||||
possible_modes -= "[ticker.mode]"
|
||||
var/number = pick(2, 3)
|
||||
var/i = 0
|
||||
@@ -176,6 +178,17 @@
|
||||
command_alert("Summary downloaded and printed out at all communications consoles.", "Enemy communication intercept. Security Level Elevated.")
|
||||
world << sound('intercept.ogg')
|
||||
|
||||
/datum/game_mode/changeling/check_finished()
|
||||
if(changeling.current.stat==2)
|
||||
if(changelingdeathticker>=900)
|
||||
return 1
|
||||
changelingdeathticker++
|
||||
|
||||
if(changeling.current.stat!=2)
|
||||
if(changelingdeathticker)
|
||||
changelingdeathticker = 0
|
||||
|
||||
return ..()
|
||||
|
||||
/datum/game_mode/changeling/declare_completion()
|
||||
for(var/datum/mind/changeling in changelings)
|
||||
|
||||
@@ -1,35 +1,36 @@
|
||||
// To add a rev to the list of revolutionaries, make sure it's rev (with if(ticker.mode.name == "revolution)),
|
||||
// then call ticker.mode:add_revolutionary(_THE_PLAYERS_MIND_)
|
||||
// nothing else needs to be done, as that proc will check if they are a valid target.
|
||||
// Just make sure the converter is a head before you call it!
|
||||
// To remove a rev (from brainwashing or w/e), call ticker.mode:remove_revolutionary(_THE_PLAYERS_MIND_),
|
||||
// this will also check they're not a head, so it can just be called freely
|
||||
// If the rev icons start going wrong for some reason, ticker.mode:update_all_rev_icons() can be called to correct them.
|
||||
// If the game somtimes isn't registering a win properly, then ticker.mode.check_win() isn't being called somewhere.
|
||||
|
||||
/datum/game_mode/cult
|
||||
name = "cult"
|
||||
config_tag = "cult"
|
||||
|
||||
var/datum/mind/sacrifice_target = null
|
||||
var/list/datum/mind/cult = list()
|
||||
var/finished = 0
|
||||
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/objectives = list()
|
||||
var/eldergod = 1 //for the summon god objective
|
||||
var/const/acolytes_needed = 5 //for the survive objective
|
||||
|
||||
/datum/game_mode/cult/announce()
|
||||
world << "<B>The current game mode is - Cult!</B>"
|
||||
world << "<B>Some crewmembers are attempting to start a cult!<BR>\nCultists - Kill the Captain, HoP, RD, CE and HoS. Convert other crewmembers (excluding the heads, security officers and chaplain) to your cause by using the convert rune. Remember - there is no you, there is only the cult.<BR>\nPersonnel - Protect the heads. Destroy the cult either via killing the cultists or brainwashing them with the chaplain's bible.</B>"
|
||||
world << "<B>Some crewmembers are attempting to start a cult!<BR>\nCultists - complete your objectives. Convert crewmembers to your cause by using the convert rune. Remember - there is no you, there is only the cult.<BR>\nPersonnel - Do not let the cult succeed in its mission. Brainwashing them with the chaplain's bible reverts them to whatever CentCom-allowed faith they had.</B>"
|
||||
|
||||
/datum/game_mode/cult/pre_setup()
|
||||
if(prob(50))
|
||||
objectives += "survive"
|
||||
objectives += "sacrifice"
|
||||
else
|
||||
objectives += "eldergod"
|
||||
objectives += "sacrifice"
|
||||
return 1
|
||||
|
||||
/datum/game_mode/cult/post_setup()
|
||||
|
||||
var/list/cultists_possible = list()
|
||||
cultists_possible = get_possible_cultists()
|
||||
var/list/heads = list()
|
||||
heads = get_living_heads()
|
||||
var/cultists_number = 0
|
||||
|
||||
if(!cultists_possible || !heads)
|
||||
if(!cultists_possible)
|
||||
world << "<B> \red Not enough players for cult game mode. Restarting world in 5 seconds."
|
||||
sleep(50)
|
||||
world.Reboot()
|
||||
@@ -45,22 +46,37 @@
|
||||
cultists_possible -= cult
|
||||
cultists_number--
|
||||
|
||||
for(var/datum/mind/cult_mind in cult)
|
||||
for(var/datum/mind/head_mind in heads)
|
||||
var/datum/objective/assassinate/cult_obj = new
|
||||
cult_obj.owner = cult_mind
|
||||
cult_obj.find_target_by_role(head_mind.assigned_role)
|
||||
cult_mind.objectives += cult_obj
|
||||
if("sacrifice" in objectives)
|
||||
var/list/possible_targets = get_unconvertables()
|
||||
|
||||
if(!possible_targets.len)
|
||||
for(var/mob/living/carbon/human/player in world)
|
||||
if(player.mind && !cult.Find(player.mind))
|
||||
possible_targets += player.mind
|
||||
|
||||
if(possible_targets.len > 0)
|
||||
sacrifice_target = pick(possible_targets)
|
||||
|
||||
for(var/datum/mind/cult_mind in cult)
|
||||
equip_cultist(cult_mind.current)
|
||||
update_cult_icons_added(cult_mind)
|
||||
|
||||
for(var/datum/mind/cult_mind in cult)
|
||||
var/obj_count = 1
|
||||
cult_mind.current << "\blue You are a member of the cult!"
|
||||
for(var/datum/objective/objective in cult_mind.objectives)
|
||||
cult_mind.current << "<B>Objective #[obj_count]</B>: [objective.explanation_text]"
|
||||
obj_count++
|
||||
for(var/obj_count = 1,obj_count <= objectives.len,obj_count++)
|
||||
var/explanation
|
||||
switch(objectives[obj_count])
|
||||
if("survive")
|
||||
explanation = "Our knowledge must live on. Make sure at least [acolytes_needed] acolytes escape on the shuttle to spread their work on an another station."
|
||||
if("sacrifice")
|
||||
if(sacrifice_target)
|
||||
explanation = "Sacrifice [sacrifice_target.current.real_name], the [sacrifice_target.assigned_role]. You will need the sacrifice rune (Hell join blood) and three acolytes to do so."
|
||||
else
|
||||
explanation = "Free objective."
|
||||
if("eldergod")
|
||||
explanation = "Summon Nar-Sie via the use of an appropriate rune. It will only work if nine cultists stand on and around it."
|
||||
cult_mind.current << "<B>Objective #[obj_count]</B>: [explanation]"
|
||||
cult_mind.memory += "<B>Objective #[obj_count]</B>: [explanation]<BR>"
|
||||
cult_mind.current << "The convert rune is join blood self"
|
||||
cult_mind.memory += "The convert rune is join blood self<BR>"
|
||||
|
||||
spawn (rand(waittime_l, waittime_h))
|
||||
send_intercept()
|
||||
@@ -80,29 +96,32 @@
|
||||
T = foo
|
||||
break
|
||||
if (!T)
|
||||
cult_mob << "Unfortunately, you weren't able to get a talisman. This is very bad and you should adminhelp immediately. (still, check your backpack. it may have been a mere bug. if you have a piece of bloody paper, all is well"
|
||||
cult_mob << "Unfortunately, you weren't able to get a talisman. This is very bad and you should adminhelp immediately. (still, check your backpack. it may have been a mere bug. if you have a piece of bloody paper, all is well)"
|
||||
else
|
||||
cult_mob << "You have a talisman in your backpack, one that will help you start the cult on this station. Use it well and remember - there are others."
|
||||
if(!wordtravel)
|
||||
runerandom()
|
||||
var/word=pick("1","2","3","4","5","6","7","8")
|
||||
var/wordexp
|
||||
switch(word)
|
||||
if("1")
|
||||
cult_mob << "\red You remembered one thing from the dark teachings of your master... [wordtravel] is travel..."
|
||||
wordexp = "[wordtravel] is travel..."
|
||||
if("2")
|
||||
cult_mob << "\red You remembered one thing from the dark teachings of your master... [wordblood] is blood..."
|
||||
wordexp = "[wordblood] is blood..."
|
||||
if("3")
|
||||
cult_mob << "\red You remembered one thing from the dark teachings of your master... [wordjoin] is join..."
|
||||
wordexp = "[wordjoin] is join..."
|
||||
if("4")
|
||||
cult_mob << "\red You remembered one thing from the dark teachings of your master... [wordhell] is Hell..."
|
||||
wordexp = "[wordhell] is Hell..."
|
||||
if("5")
|
||||
cult_mob << "\red You remembered one thing from the dark teachings of your master... [worddestr] is destroy..."
|
||||
wordexp = "[worddestr] is destroy..."
|
||||
if("6")
|
||||
cult_mob << "\red You remembered one thing from the dark teachings of your master... [wordtech] is technology..."
|
||||
wordexp = "[wordtech] is technology..."
|
||||
if("7")
|
||||
cult_mob << "\red You remembered one thing from the dark teachings of your master... [wordself] is self..."
|
||||
wordexp = "[wordself] is self..."
|
||||
if("8")
|
||||
cult_mob << "\red You remembered one thing from the dark teachings of your master... [wordsee] is see..."
|
||||
wordexp = "[wordsee] is see..."
|
||||
cult_mob << "\red You remembered one thing from the dark teachings of your master... [wordexp]"
|
||||
cult_mob.mind.store_memory("<B>You remember one thing</B>: [wordexp]", 0, 0)
|
||||
cultists.Add(cult_mob)
|
||||
|
||||
/datum/game_mode/cult/send_intercept()
|
||||
@@ -134,20 +153,6 @@
|
||||
command_alert("Summary downloaded and printed out at all communications consoles.", "Enemy communication intercept. Security Level Elevated.")
|
||||
world << sound('intercept.ogg')
|
||||
|
||||
|
||||
/datum/game_mode/cult/check_win()
|
||||
if(check_cult_victory())
|
||||
finished = 1
|
||||
else if(check_heads_victory())
|
||||
finished = 2
|
||||
return
|
||||
|
||||
/datum/game_mode/cult/check_finished()
|
||||
if(finished != 0)
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
/datum/game_mode/cult/proc/add_cultist(datum/mind/cult_mind)
|
||||
var/list/uncons = get_unconvertables()
|
||||
if(!(cult_mind in cult) && !(cult_mind in uncons))
|
||||
@@ -228,29 +233,6 @@
|
||||
else
|
||||
return candidates
|
||||
|
||||
/datum/game_mode/cult/proc/get_living_heads()
|
||||
var/list/heads = list()
|
||||
|
||||
for(var/mob/living/carbon/human/player in world)
|
||||
if(player.mind)
|
||||
var/role = player.mind.assigned_role
|
||||
if(role in list("Captain", "Head of Security", "Head of Personnel", "Chief Engineer", "Research Director"))
|
||||
heads += player.mind
|
||||
|
||||
return heads
|
||||
|
||||
|
||||
/datum/game_mode/cult/proc/get_all_heads()
|
||||
var/list/heads = list()
|
||||
|
||||
for(var/mob/player in world)
|
||||
if(player.mind)
|
||||
var/role = player.mind.assigned_role
|
||||
if(role in list("Captain", "Head of Security", "Head of Personnel", "Chief Engineer", "Research Director"))
|
||||
heads += player.mind
|
||||
|
||||
return heads
|
||||
|
||||
/datum/game_mode/cult/proc/get_unconvertables()
|
||||
var/list/ucs = list()
|
||||
for(var/mob/living/carbon/human/player in world)
|
||||
@@ -262,29 +244,38 @@
|
||||
return ucs
|
||||
|
||||
/datum/game_mode/cult/proc/check_cult_victory()
|
||||
for(var/datum/mind/cult_mind in cult)
|
||||
for(var/datum/objective/objective in cult_mind.objectives)
|
||||
if(!(objective.check_completion()))
|
||||
return 0
|
||||
var/cult_fail = 0
|
||||
if(objectives.Find("survive"))
|
||||
cult_fail += check_survive() //the proc returns 1 if there are not enough cultists on the shuttle, 0 otherwise
|
||||
if(objectives.Find("eldergod"))
|
||||
cult_fail += eldergod //1 by default, 0 if the elder god has been summoned at least once
|
||||
if(objectives.Find("sacrifice"))
|
||||
if(!sacrificed.Find(sacrifice_target)) //if the target has been sacrificed, ignore this step. otherwise, add 1 to cult_fail
|
||||
cult_fail++
|
||||
|
||||
return cult_fail //if any objectives aren't met, failure
|
||||
|
||||
/datum/game_mode/cult/proc/check_survive()
|
||||
var/acolytes_survived = 0
|
||||
var/area/shuttle = locate(/area/shuttle/escape/centcom)
|
||||
for(var/mob/living/carbon/human/C in world)
|
||||
if(get_turf(C) in shuttle && C.stat!=2 && cult.Find(C.mind))
|
||||
acolytes_survived++
|
||||
if(acolytes_survived>=acolytes_needed)
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
|
||||
/datum/game_mode/cult/proc/check_heads_victory()
|
||||
for(var/datum/mind/cult_mind in cult)
|
||||
if(cult_mind.current.stat != 2)
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/datum/game_mode/cult/declare_completion()
|
||||
|
||||
var/text = ""
|
||||
if(finished == 1)
|
||||
world << "\red <FONT size = 3><B> The heads of staff were killed! The cult win!</B></FONT>"
|
||||
else if(finished == 2)
|
||||
world << "\red <FONT size = 3><B> The heads of staff managed to stop the cult!</B></FONT>"
|
||||
if(!check_cult_victory())
|
||||
world << "\red <FONT size = 3><B> The cult wins! It has succeeded in serving its dark masters!</B></FONT>"
|
||||
else
|
||||
world << "\red <FONT size = 3><B> The staff managed to stop the cult!</B></FONT>"
|
||||
|
||||
world << "<FONT size = 2><B>The cultists were: </B></FONT>"
|
||||
for(var/datum/mind/cult_nh_mind in cultists)
|
||||
for(var/datum/mind/cult_nh_mind in cult)
|
||||
if(cult_nh_mind.current)
|
||||
text += "[cult_nh_mind.current.real_name]"
|
||||
if(cult_nh_mind.current.stat == 2)
|
||||
@@ -297,20 +288,29 @@
|
||||
|
||||
world << text
|
||||
|
||||
world << "<FONT size = 2><B>The heads of staff were: </B></FONT>"
|
||||
var/list/heads = list()
|
||||
heads = get_all_heads()
|
||||
for(var/datum/mind/head_mind in heads)
|
||||
text = ""
|
||||
if(head_mind.current)
|
||||
text += "[head_mind.current.real_name]"
|
||||
if(head_mind.current.stat == 2)
|
||||
text += " (Dead)"
|
||||
else
|
||||
text += " (Survived!)"
|
||||
else
|
||||
text += "[head_mind.key] (character destroyed)"
|
||||
world << "The cultists' objectives were:"
|
||||
|
||||
world << text
|
||||
for(var/obj_count=1,obj_count <= objectives.len,obj_count++)
|
||||
var/explanation
|
||||
switch(objectives[obj_count])
|
||||
if("survive")
|
||||
if(!check_survive())
|
||||
explanation = "Make sure at least [acolytes_needed] acolytes escape on the shuttle. \green <b>Success!</b>"
|
||||
else
|
||||
explanation = "Make sure at least [acolytes_needed] acolytes escape on the shuttle. \red Failed."
|
||||
if("sacrifice")
|
||||
if(!sacrifice_target)
|
||||
explanation = "Free objective"
|
||||
else
|
||||
if(sacrificed.Find(sacrifice_target))
|
||||
explanation = "Sacrifice [sacrifice_target.current.real_name], the [sacrifice_target.assigned_role]. \green <b>Success!</b>"
|
||||
else
|
||||
explanation = "Sacrifice [sacrifice_target.current.real_name], the [sacrifice_target.assigned_role]. \red Failed."
|
||||
if("eldergod")
|
||||
if(!eldergod)
|
||||
explanation = "Summon Nar-Sie. \green <b>Success!</b>"
|
||||
else
|
||||
explanation = "Summon Nar-Sie. \red Failed."
|
||||
world << "<B>Objective #[obj_count]</B>: [explanation]"
|
||||
|
||||
return 1
|
||||
@@ -250,7 +250,7 @@
|
||||
virus_type = /datum/disease/brainrot
|
||||
if("cold")
|
||||
virus_type = /datum/disease/cold
|
||||
if("rhinovirus")
|
||||
if("retrovirus")
|
||||
virus_type = /datum/disease/dnaspread
|
||||
if("flu")
|
||||
virus_type = /datum/disease/flu
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
intercepttext += "<B> Cent. Com has recently been contacted by the following syndicate affiliated organisations in your area, please investigate any information you may have:</B>"
|
||||
|
||||
var/list/possible_modes = list()
|
||||
possible_modes.Add("revolution", "wizard", "nuke", "traitor", "malf", "changeling")
|
||||
possible_modes.Add("revolution", "wizard", "nuke", "traitor", "malf", "changeling", "cult")
|
||||
possible_modes -= "[ticker.mode]"
|
||||
var/number = pick(2, 3)
|
||||
var/i = 0
|
||||
|
||||
@@ -194,7 +194,7 @@
|
||||
intercepttext += "<B> Cent. Com has recently been contacted by the following syndicate affiliated organisations in your area, please investigate any information you may have:</B>"
|
||||
|
||||
var/list/possible_modes = list()
|
||||
possible_modes.Add("revolution", "wizard", "nuke", "traitor", "malf", "changeling")
|
||||
possible_modes.Add("revolution", "wizard", "nuke", "traitor", "malf", "changeling", "cult")
|
||||
possible_modes -= "nuke"
|
||||
var/number = pick(2, 3)
|
||||
var/i = 0
|
||||
|
||||
@@ -167,4 +167,59 @@ datum
|
||||
else
|
||||
return 0
|
||||
|
||||
/* Isn't suited for global objectives
|
||||
/*---------CULTIST----------*/
|
||||
|
||||
eldergod
|
||||
explanation_text = "Summon Nar-Sie via the use of an appropriate rune. It will only work if nine cultists stand on and around it."
|
||||
|
||||
check_completion()
|
||||
if(eldergod) //global var, defined in rune4.dm
|
||||
return 1
|
||||
return 0
|
||||
|
||||
survivecult
|
||||
var/num_cult
|
||||
|
||||
explanation_text = "Our knowledge must live on. Make sure at least 5 acolytes escape on the shuttle to spread their work on an another station."
|
||||
|
||||
check_completion()
|
||||
if(emergency_shuttle.location<2)
|
||||
return 0
|
||||
|
||||
var/cultists_escaped = 0
|
||||
|
||||
var/area/shuttle/escape/centcom/C = /area/shuttle/escape/centcom
|
||||
for(var/turf/T in get_area_turfs(C.type))
|
||||
for(var/mob/living/carbon/human/H in T)
|
||||
if(cultists.Find(H))
|
||||
cultists_escaped++
|
||||
|
||||
if(cultists_escaped>=5)
|
||||
return 1
|
||||
|
||||
return 0
|
||||
|
||||
sacrifice //stolen from traitor target objective
|
||||
|
||||
proc/find_target() //I don't know how to make it work with the rune otherwise, so I'll do it via a global var, sacrifice_target, defined in rune15.dm
|
||||
var/list/possible_targets = call(/datum/game_mode/cult/proc/get_unconvertables)()
|
||||
|
||||
if(possible_targets.len > 0)
|
||||
sacrifice_target = pick(possible_targets)
|
||||
|
||||
if(sacrifice_target && sacrifice_target.current)
|
||||
explanation_text = "Sacrifice [sacrifice_target.current.real_name], the [sacrifice_target.assigned_role]. You will need the sacrifice rune (Hell join blood) and three acolytes to do so."
|
||||
else
|
||||
explanation_text = "Free Objective"
|
||||
|
||||
return sacrifice_target
|
||||
|
||||
check_completion() //again, calling on a global list defined in rune15.dm
|
||||
if(sacrifice_target.current in sacrificed)
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
/*-------ENDOF CULTIST------*/
|
||||
*/
|
||||
@@ -142,7 +142,7 @@
|
||||
intercepttext += "<B> Cent. Com has recently been contacted by the following syndicate affiliated organisations in your area, please investigate any information you may have:</B>"
|
||||
|
||||
var/list/possible_modes = list()
|
||||
possible_modes.Add("revolution", "wizard", "nuke", "traitor", "malf", "changeling")
|
||||
possible_modes.Add("revolution", "wizard", "nuke", "traitor", "malf", "cult", "changeling")
|
||||
possible_modes -= "[ticker.mode]"
|
||||
var/number = pick(2, 3)
|
||||
var/i = 0
|
||||
|
||||
@@ -150,7 +150,7 @@
|
||||
intercepttext += "<B> Cent. Com has recently been contacted by the following syndicate affiliated organisations in your area, please investigate any information you may have:</B>"
|
||||
|
||||
var/list/possible_modes = list()
|
||||
possible_modes.Add("revolution", "wizard", "nuke", "traitor", "malf", "changeling")
|
||||
possible_modes.Add("revolution", "wizard", "nuke", "traitor", "malf", "changeling", "cult")
|
||||
possible_modes -= "[ticker.mode]"
|
||||
var/number = pick(2, 3)
|
||||
var/i = 0
|
||||
|
||||
@@ -236,7 +236,7 @@
|
||||
intercepttext += "<B> Cent. Com has recently been contacted by the following syndicate affiliated organisations in your area, please investigate any information you may have:</B>"
|
||||
|
||||
var/list/possible_modes = list()
|
||||
possible_modes.Add("revolution", "wizard", "nuke", "traitor", "malf", "changeling")
|
||||
possible_modes.Add("revolution", "wizard", "nuke", "traitor", "malf", "changeling", "cult")
|
||||
possible_modes -= "[ticker.mode]"
|
||||
var/number = pick(2, 3)
|
||||
var/i = 0
|
||||
|
||||
@@ -611,7 +611,7 @@ Auto Patrol: []"},
|
||||
if(istype(perp:wear_suit, /obj/item/clothing/suit/wizrobe))
|
||||
threatcount += 2
|
||||
|
||||
if(perp.mutantrace != "none")
|
||||
if(perp.mutantrace && perp.mutantrace != "none")
|
||||
threatcount += 2
|
||||
|
||||
//Agent cards lower threatlevel when normal idchecking is off.
|
||||
|
||||
@@ -391,7 +391,7 @@
|
||||
if(ticker.mode.name == "blob" || ticker.mode.name == "Corporate Restructuring" || ticker.mode.name == "sandbox")
|
||||
user << "Under directive 7-10, [station_name()] is quarantined until further notice."
|
||||
return
|
||||
if(ticker.mode.name == "revolution" || ticker.mode.name == "cult" || ticker.mode.name == "AI malfunction" || ticker.mode.name == "confliction")
|
||||
if(ticker.mode.name == "revolution" || ticker.mode.name == "AI malfunction" || ticker.mode.name == "confliction")
|
||||
user << "Centcom will not allow the shuttle to be called."
|
||||
return
|
||||
if(ticker.mode.name == "nuclear emergency" && world.time < 6000)
|
||||
|
||||
@@ -49,9 +49,10 @@ var/runedec = 0
|
||||
// see Hell join - See invisible
|
||||
// blood join Hell - Raise dead
|
||||
// blood see destroy - Hide nearby runes
|
||||
// Hell join blood - Leave your body and ghost around
|
||||
// Hell travel self - Leave your body and ghost around
|
||||
// blood see travel - Manifest a ghost into a mortal body
|
||||
// Hell tech join - Imbue a rune into a talisman
|
||||
// Hell blood join - Sacrifice rune
|
||||
|
||||
examine()
|
||||
if(!cultists.Find(usr))
|
||||
@@ -115,12 +116,14 @@ var/runedec = 0
|
||||
return raise()
|
||||
if(word1 == wordblood && word2 == wordsee && word3 == worddestr)
|
||||
return obscure(4)
|
||||
if(word1 == wordhell && word2 == wordjoin && word3 == wordblood)
|
||||
if(word1 == wordhell && word2 == wordtravel && word3 == wordself)
|
||||
return ajourney()
|
||||
if(word1 == wordblood && word2 == wordsee && word3 == wordtravel)
|
||||
return manifest()
|
||||
if(word1 == wordhell && word2 == wordtech && word3 == wordjoin)
|
||||
return talisman()
|
||||
if(word1 == wordhell && word2 == wordblood && word3 == wordjoin)
|
||||
return sacrifice()
|
||||
else
|
||||
return fizzle()
|
||||
|
||||
@@ -167,7 +170,7 @@ var/runedec = 0
|
||||
icon_state = "1"
|
||||
src.icon += rgb(0, 0 , 255)
|
||||
return
|
||||
if(word1 == wordhell && word2 == wordjoin && word3 == wordblood)
|
||||
if(word1 == wordhell && word2 == wordtravel && word3 == wordself)
|
||||
icon_state = "6"
|
||||
src.icon += rgb(0, 0 , 255)
|
||||
return
|
||||
@@ -178,6 +181,10 @@ var/runedec = 0
|
||||
icon_state = "3"
|
||||
src.icon += rgb(0, 0 , 255)
|
||||
return
|
||||
if(word1 == wordhell && word2 == wordblood && word3 == wordjoin)
|
||||
icon_state = "[rand(1,6)]"
|
||||
src.icon += rgb(255, 255, 255)
|
||||
return
|
||||
icon_state="[rand(1,6)]" //random shape and color for dummy runes
|
||||
src.icon -= rgb(255,255,255)
|
||||
src.icon += rgb(rand(1,255),rand(1,255),rand(1,255))
|
||||
@@ -197,6 +204,9 @@ var/runedec = 0
|
||||
var/C = 0
|
||||
for(var/obj/rune/N in world)
|
||||
C++
|
||||
if (!istype(user.loc,/turf))
|
||||
user << "\red You do not have enough space to write a proper rune."
|
||||
return
|
||||
if (C>=26+runedec) //including the useless rune at the secret room, shouldn't count against the limit of 25 runes - Urist
|
||||
switch(alert("The cloth of reality can't take that much of a strain. By creating another rune, you risk locally tearing reality apart, which would prove fatal to you. Do you still wish to scribe the rune?",,"Yes","No"))
|
||||
if("Yes")
|
||||
@@ -250,7 +260,9 @@ var/runedec = 0
|
||||
runerandom()
|
||||
if(user)
|
||||
var/r
|
||||
var/list/runes = list("teleport", "tome", "convert", "tear in reality", "emp", "drain", "seer", "raise", "obscure", "astral journey", "manifest", "imbue talisman")
|
||||
if (!istype(user.loc,/turf))
|
||||
user << "\red You do not have enough space to write a proper rune."
|
||||
var/list/runes = list("teleport", "tome", "convert", "tear in reality", "emp", "drain", "seer", "raise", "obscure", "astral journey", "manifest", "imbue talisman", "sacrifice")
|
||||
r = input("Choose a rune to scribe", "Rune Scribing") in runes
|
||||
switch(r)
|
||||
if("teleport")
|
||||
@@ -314,8 +326,8 @@ var/runedec = 0
|
||||
if("astral journey")
|
||||
var/obj/rune/R = new /obj/rune(user.loc)
|
||||
R.word1=wordhell
|
||||
R.word2=wordjoin
|
||||
R.word3=wordblood
|
||||
R.word2=wordtravel
|
||||
R.word3=wordself
|
||||
R.check_icon()
|
||||
if("manifest")
|
||||
var/obj/rune/R = new /obj/rune(user.loc)
|
||||
@@ -329,6 +341,12 @@ var/runedec = 0
|
||||
R.word2=wordtech
|
||||
R.word3=wordjoin
|
||||
R.check_icon()
|
||||
if("sacrifice")
|
||||
var/obj/rune/R = new /obj/rune(user.loc)
|
||||
R.word1=wordhell
|
||||
R.word2=wordblood
|
||||
R.word3=wordjoin
|
||||
R.check_icon()
|
||||
|
||||
/obj/item/weapon/paperscrap
|
||||
name = "scrap of paper"
|
||||
@@ -357,7 +375,7 @@ var/runedec = 0
|
||||
var/uses = 0
|
||||
|
||||
attack_self(mob/user as mob)
|
||||
usr.bruteloss+=20
|
||||
usr.bruteloss+=10
|
||||
switch(imbue)
|
||||
if("newtome")
|
||||
call(/obj/rune/proc/tomesummon)()
|
||||
|
||||
18
code/game/magic/cultist/rune15.dm
Normal file
@@ -0,0 +1,18 @@
|
||||
var/list/sacrificed = list()
|
||||
|
||||
/obj/rune/proc/sacrifice()
|
||||
var/culcount = 0
|
||||
for(var/mob/living/carbon/human/C in orange(1,src))
|
||||
if(cultists.Find(C))
|
||||
culcount++
|
||||
if(culcount>=3)
|
||||
for(var/mob/living/carbon/human/S in src.loc)
|
||||
if(ticker.mode.name == "cult")
|
||||
if(S == ticker.mode:sacrifice_target.current)//Iunno, check if it's a target
|
||||
sacrificed += S.mind
|
||||
S.gib(1)
|
||||
usr << "\red The Geometer of Blood accepts this sacrifice."
|
||||
else
|
||||
usr << "\red The Geometer of Blood does not accept this sacrifice."
|
||||
return
|
||||
return fizzle()
|
||||
@@ -3,13 +3,16 @@
|
||||
if(cultists.Find(M))
|
||||
return fizzle()
|
||||
else
|
||||
if(ticker.mode.name == "cult")
|
||||
var/list/uncons = call(/datum/game_mode/cult/proc/get_unconvertables)()
|
||||
if(M.mind in uncons)
|
||||
return fizzle()
|
||||
ticker.mode:add_cultist(M.mind)
|
||||
usr.say("Mah'weyh pleggh at e'ntrath!")
|
||||
cultists.Add(M)
|
||||
for (var/mob/V in viewers(src))
|
||||
V.show_message("\red [M] writhes in pain as the markings below him glow a bloody red.", 3, "\red You hear an anguished scream.", 2)
|
||||
M << "<font color=\"purple\"><b><i>Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible truth. The veil of reality has been ripped away and in the festering wound left behind something sinister takes root.</b></i></font>"
|
||||
M << "<font color=\"purple\"><b><i>Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back.</b></i></font>"
|
||||
if(ticker.mode.name == "cult")
|
||||
ticker.mode:add_cultist(M.mind)
|
||||
cultists.Add(M)
|
||||
return
|
||||
return fizzle()
|
||||
@@ -11,7 +11,8 @@
|
||||
S.desc = "Your mind begins to bubble and ooze as it tries to comprehend what it sees."
|
||||
S.pixel_x = -89
|
||||
S.pixel_y = -85
|
||||
message_admins("<h1><font color=\"purple\"><b><u>[key_name_admin(usr)] has summoned a Tear in the Fabric of Reality!", 1)
|
||||
if(ticker.mode.name == "cult")
|
||||
ticker.mode:eldergod = 0
|
||||
return
|
||||
else
|
||||
return fizzle()
|
||||
@@ -3,8 +3,6 @@
|
||||
usr.say("Rash'tla sektath mal'zua. Zasan therium vivira. Itonis al'ra matum!")
|
||||
if(usr.see_invisible!=0 && usr.see_invisible!=15)
|
||||
usr << "\red The world beyond flashes your eyes but disappears quickly, as if something is disrupting your vision."
|
||||
if(usr.see_invisible==15)
|
||||
return fizzle()
|
||||
else
|
||||
usr << "\red The world beyond opens to your eyes."
|
||||
usr.see_invisible = 15
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
/obj/item/weapon/paper/talisman/proc/supply(var/key)
|
||||
if (!src.uses)
|
||||
del(src)
|
||||
return
|
||||
|
||||
var/dat = "<B>There are [src.uses] bloody runes on the parchment.</B><BR>"
|
||||
dat += "Please choose the chant to be imbued into the fabric of reality.<BR>"
|
||||
dat += "<HR>"
|
||||
@@ -17,10 +21,6 @@
|
||||
if (usr.stat || usr.restrained() || !in_range(src, usr))
|
||||
return
|
||||
|
||||
if (!src.uses)
|
||||
del(src)
|
||||
return
|
||||
|
||||
if (href_list["rune"])
|
||||
switch(href_list["rune"])
|
||||
if("newtome")
|
||||
|
||||
@@ -18,19 +18,25 @@ STUN BATON
|
||||
|
||||
/obj/item/weapon/sword/attack_self(mob/user as mob)
|
||||
if ((user.mutations & 16) && prob(50))
|
||||
user << "\red You accidentally cut yourself with the Sword."
|
||||
user << "\red You accidentally cut yourself with [src]."
|
||||
user.bruteloss += 5
|
||||
user.fireloss +=5
|
||||
src.active = !( src.active )
|
||||
if (src.active)
|
||||
user << "\blue The sword is now active."
|
||||
user << "\blue [src] is now active."
|
||||
src.force = 30
|
||||
src.icon_state = "sword1"
|
||||
if(istype(src,/obj/item/weapon/sword/pirate))
|
||||
src.icon_state = "cutlass1"
|
||||
else
|
||||
src.icon_state = "sword1"
|
||||
src.w_class = 4
|
||||
else
|
||||
user << "\blue The sword can now be concealed."
|
||||
user << "\blue [src] can now be concealed."
|
||||
src.force = 3
|
||||
src.icon_state = "sword0"
|
||||
if(istype(src,/obj/item/weapon/sword/pirate))
|
||||
src.icon_state = "cutlass0"
|
||||
else
|
||||
src.icon_state = "sword0"
|
||||
src.w_class = 2
|
||||
src.add_fingerprint(user)
|
||||
return
|
||||
|
||||
@@ -271,7 +271,8 @@ var/showadminmessages = 1
|
||||
<A href='?src=\ref[src];c_mode2=blob'>Blob</A><br>
|
||||
<A href='?src=\ref[src];c_mode2=sandbox'>Sandbox</A><br>
|
||||
<A href='?src=\ref[src];c_mode2=revolution'>Revolution</A><br>
|
||||
<A href='?src=\ref[src];c_mode2=cult'>Cult</A><br> <A href='?src=\ref[src];c_mode2=malfunction'>AI Malfunction</A><br>
|
||||
<A href='?src=\ref[src];c_mode2=cult'>Cult</A><br>
|
||||
<A href='?src=\ref[src];c_mode2=malfunction'>AI Malfunction</A><br>
|
||||
<A href='?src=\ref[src];c_mode2=deathmatch'>Death Commando Deathmatch</A><br>
|
||||
<A href='?src=\ref[src];c_mode2=confliction'>Confliction (TESTING)</A><br>
|
||||
<A href='?src=\ref[src];c_mode2=ctf'>Capture The Flag (Beta)</A><br><br>
|
||||
@@ -1149,7 +1150,7 @@ var/showadminmessages = 1
|
||||
viral_outbreak()
|
||||
message_admins("[key_name_admin(usr)] has triggered a virus outbreak", 1)
|
||||
else
|
||||
var/list/viruses = list("fake gbs","gbs","magnitis","wizarditis",/*"beesease",*/"brain rot","cold","rhinovirus","flu")
|
||||
var/list/viruses = list("fake gbs","gbs","magnitis","wizarditis",/*"beesease",*/"brain rot","cold","retrovirus","flu")
|
||||
var/V = input("Choose the virus to spread", "BIOHAZARD") in viruses
|
||||
viral_outbreak(V)
|
||||
message_admins("[key_name_admin(usr)] has triggered a virus outbreak of [V]", 1)
|
||||
@@ -1329,14 +1330,6 @@ var/showadminmessages = 1
|
||||
if(M)
|
||||
dat += "<tr><td><a href='?src=\ref[src];adminplayeropts=\ref[M]'>[M.real_name]</a>[M.client ? "" : " <i>(logged out)</i>"][M.stat == 2 ? " <b><font color=red>(DEAD)</font></b>" : ""]</td>"
|
||||
dat += "<td><A href='?src=\ref[usr];priv_msg=\ref[M]'>PM</A></td></tr>"
|
||||
dat += "</table><table cellspacing=5><tr><td><B>Target(s)</B></td><td></td><td><B>Location</B></td></tr>"
|
||||
for(var/datum/mind/N in ticker.mode:get_living_heads())
|
||||
var/mob/M = N.current
|
||||
if(M)
|
||||
dat += "<tr><td><a href='?src=\ref[src];adminplayeropts=\ref[M]'>[M.real_name]</a>[M.client ? "" : " <i>(logged out)</i>"][M.stat == 2 ? " <b><font color=red>(DEAD)</font></b>" : ""]</td>"
|
||||
dat += "<td><A href='?src=\ref[usr];priv_msg=\ref[M]'>PM</A></td>"
|
||||
var/turf/mob_loc = get_turf_loc(M)
|
||||
dat += "<td>[mob_loc.loc]</td></tr>"
|
||||
dat += "</table>"
|
||||
|
||||
else // i'll finish this later
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
if(cultists.Find(corpse) && corpse.ajourn==1 && corpse.health>-100) //checks if it's an astral-journeying cultistm if it is and he's not on an astral journey rune, re-entering won't work
|
||||
var/S=0
|
||||
for(var/obj/rune/R in world)
|
||||
if(corpse.loc==R.loc && R.word1 == wordhell && R.word2 == wordjoin && R.word3 == wordblood)
|
||||
if(corpse.loc==R.loc && R.word1 == wordhell && R.word2 == wordtravel && R.word3 == wordself)
|
||||
S=1
|
||||
if(!S)
|
||||
usr << "\red The astral cord that ties your body and your spirit has been severed. You are likely to wander the realm beyond until your body is finally dead and thus reunited with you."
|
||||
|
||||
@@ -385,6 +385,7 @@
|
||||
#include "code\game\magic\cultist\rune12.dm"
|
||||
#include "code\game\magic\cultist\rune13.dm"
|
||||
#include "code\game\magic\cultist\rune14.dm"
|
||||
#include "code\game\magic\cultist\rune15.dm"
|
||||
#include "code\game\magic\cultist\rune2.dm"
|
||||
#include "code\game\magic\cultist\rune3.dm"
|
||||
#include "code\game\magic\cultist\rune4.dm"
|
||||
|
||||
@@ -46,6 +46,18 @@
|
||||
<h4>Changelog</h4>
|
||||
|
||||
|
||||
<h5>Thursday, November 2, 19:11(GMT)</h5>
|
||||
<ul>
|
||||
<li>Finished work on the "cult" gamemode. I'll still add features to it later, but it is safe to be put on secret rotation now.</li>
|
||||
<li>Added an energy cutlass and made a pirate version of the space suit in preparation for a later nuke update.</li>
|
||||
<li>Changeling now ends 15 minutes after changeling death, unless he's ressurected.</li>
|
||||
<li>Further fixing of wizarditis teleporting into space.</li>
|
||||
<li>Fixed the wise beard sprite.</li>
|
||||
<li>Fixed missing sprite for monkeyburgers.</li>
|
||||
<li>Fixed Beepsky automatically adding 2 treason points to EVERYONE.</li>
|
||||
|
||||
</ul>
|
||||
|
||||
<h5>Thursday, October 28, 19:30(GMT)</h5>
|
||||
<ul>
|
||||
<li>Sleepers and disposals now require two seconds to climb inside</li>
|
||||
|
||||
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 5.5 KiB |
|
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 65 KiB |
|
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 65 KiB |
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |