Added the very basis of cultist mode, it doesn't have proper objectives yet, but at least I can catch some bugs via playtesting, hopefully.

Wizards now shout a spell when they're casting - not corresponding to the spell itself, though, it's a placeholder until granny finishes his voice acting.

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@336 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
uporotiy
2010-10-20 21:46:31 +00:00
parent c53ece134d
commit 39efab2ce3
42 changed files with 498 additions and 5 deletions

View File

@@ -483,6 +483,10 @@
if ((src.occupant.mind in ticker.mode:revolutionaries) || (src.occupant.mind in ticker.mode:head_revolutionaries))
ticker.mode:add_revolutionary(src.occupant.mind)
ticker.mode:update_all_rev_icons() //So the icon actually appears
if ("cult")
if (src.occupant.mind in ticker.mode:cult)
ticker.mode:add_cultist(src.occupant.mind)
ticker.mode:update_all_cult_icons() //So the icon actually appears
if ("changeling")
if (src.occupant.mind in ticker.mode:changelings)
src.occupant.make_changeling()

View File

@@ -0,0 +1,313 @@
// 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/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)
/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>"
/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)
world << "<B> \red Not enough players for cult game mode. Restarting world in 5 seconds."
sleep(50)
world.Reboot()
return
if(cultists_possible.len >= 3)
cultists_number = 3
else
cultists_number = cultists_possible.len
while(cultists_number > 0)
cult += pick(cultists_possible)
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
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++
spawn (rand(waittime_l, waittime_h))
send_intercept()
/datum/game_mode/cult/proc/equip_cultist(mob/living/carbon/human/cult_mob)
if(!istype(cult_mob))
return
spawn (0)
var/obj/item/weapon/paper/talisman/supply/T = null
cult_mob.equip_if_possible(new /obj/item/weapon/paper/talisman/supply(cult_mob), cult_mob.slot_l_store)
if (!T && istype(cult_mob.l_store, /obj/item/weapon/storage))
var/obj/item/weapon/storage/S = cult_mob.l_store
var/list/L = S.return_inv()
for (var/obj/item/weapon/paper/talisman/supply/foo in L)
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."
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")
switch(word)
if("1")
cult_mob << "\red You remembered one thing from the dark teachings of your master... [wordtravel] is travel..."
if("2")
cult_mob << "\red You remembered one thing from the dark teachings of your master... [wordblood] is blood..."
if("3")
cult_mob << "\red You remembered one thing from the dark teachings of your master... [wordjoin] is join..."
if("4")
cult_mob << "\red You remembered one thing from the dark teachings of your master... [wordhell] is Hell..."
if("5")
cult_mob << "\red You remembered one thing from the dark teachings of your master... [worddestr] is destroy..."
if("6")
cult_mob << "\red You remembered one thing from the dark teachings of your master... [wordtech] is technology..."
if("7")
cult_mob << "\red You remembered one thing from the dark teachings of your master... [wordself] is self..."
if("8")
cult_mob << "\red You remembered one thing from the dark teachings of your master... [wordsee] is see..."
/datum/game_mode/cult/send_intercept()
var/intercepttext = "<FONT size = 3><B>Cent. Com. Update</B> Requested staus information:</FONT><HR>"
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", "cult", "wizard", "nuke", "traitor", "malf", "changeling")
possible_modes -= "[ticker.mode]"
var/number = pick(2, 3)
var/i = 0
for(i = 0, i < number, i++)
possible_modes.Remove(pick(possible_modes))
possible_modes.Insert(rand(possible_modes.len), "[ticker.mode]")
var/datum/intercept_text/i_text = new /datum/intercept_text
for(var/A in possible_modes)
intercepttext += i_text.build(A, pick(cult))
for (var/obj/machinery/computer/communications/comm in world)
if (!(comm.stat & (BROKEN | NOPOWER)) && comm.prints_intercept)
var/obj/item/weapon/paper/intercept = new /obj/item/weapon/paper( comm.loc )
intercept.name = "paper- 'Cent. Com. Status Summary'"
intercept.info = intercepttext
comm.messagetitle.Add("Cent. Com. Status Summary")
comm.messagetext.Add(intercepttext)
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))
cult += cult_mind
update_cult_icons_added(cult_mind)
/datum/game_mode/cult/proc/remove_cultist(datum/mind/cult_mind)
if(cult_mind in cult)
cult -= cult_mind
cult_mind.current << "\red <FONT size = 3><B>You have been brainwashed! You are no longer a cultist!</B></FONT>"
update_cult_icons_removed(cult_mind)
for(var/mob/living/M in view(cult_mind.current))
M << "<FONT size = 3>[cult_mind.current] looks like they just reverted to their old faith!</FONT>"
/datum/game_mode/cult/proc/update_all_cult_icons()
spawn(0)
for(var/datum/mind/cultist in cult)
if(cultist.current)
if(cultist.current.client)
for(var/image/I in cultist.current.client.images)
if(I.icon_state == "cult")
del(I)
for(var/datum/mind/cultist in cult)
if(cultist.current)
if(cultist.current.client)
for(var/datum/mind/cultist_1 in cult)
if(cultist_1.current)
var/I = image('mob.dmi', loc = cultist_1.current, icon_state = "cult")
cultist.current.client.images += I
/datum/game_mode/cult/proc/update_cult_icons_added(datum/mind/cult_mind)
spawn(0)
for(var/datum/mind/cultist in cult)
if(cultist.current)
if(cultist.current.client)
var/I = image('mob.dmi', loc = cult_mind.current, icon_state = "cult")
cultist.current.client.images += I
if(cult_mind.current)
if(cult_mind.current.client)
var/image/J = image('mob.dmi', loc = cultist.current, icon_state = "cult")
cult_mind.current.client.images += J
/datum/game_mode/cult/proc/update_cult_icons_removed(datum/mind/cult_mind)
spawn(0)
for(var/datum/mind/cultist in cult)
if(cultist.current)
if(cultist.current.client)
for(var/image/I in cultist.current.client.images)
if(I.loc == cult_mind.current)
del(I)
if(cult_mind.current)
if(cult_mind.current.client)
for(var/image/I in cult_mind.current.client.images)
if(I.icon_state == "cult")
del(I)
/datum/game_mode/cult/proc/get_possible_cultists()
var/list/candidates = list()
for(var/mob/living/carbon/human/player in world)
if(player.client)
if(player.be_syndicate)
candidates += player.mind
if(candidates.len < 1)
for(var/mob/living/carbon/human/player in world)
if(player.client)
candidates += player.mind
var/list/uncons = get_unconvertables()
for(var/datum/mind/mind in uncons)
candidates -= mind
if(candidates.len < 1)
return null
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)
if(player.mind)
var/role = player.mind.assigned_role
if(role in list("Captain", "Head of Security", "Head of Personnel", "Chief Engineer", "Research Director", "Security Officer", "Detective", "AI", "Chaplain"))
ucs += player.mind
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
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>"
world << "<FONT size = 2><B>The cultists were: </B></FONT>"
for(var/datum/mind/cult_nh_mind in cultists)
if(cult_nh_mind.current)
text += "[cult_nh_mind.current.real_name]"
if(cult_nh_mind.current.stat == 2)
text += " (Dead)"
else
text += " (Survived!)"
else
text += "[cult_nh_mind.key] (character destroyed)"
text += ", "
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 << text
return 1

View File

@@ -28,6 +28,10 @@
src.text = ""
src.build_rev(correct_mob)
return src.text
if("cult")
src.text = ""
src.build_cult(correct_mob)
return src.text
if("wizard")
src.text = ""
src.build_wizard(correct_mob)
@@ -85,6 +89,33 @@
src.text += "discovered the following set of fingerprints ([fingerprints]) on sensitive materials, and their owner should be closely observed."
src.text += "However, these could also belong to a current Cent. Com employee, so do not act on this without reason."
/datum/intercept_text/proc/build_cult(correct_mob)
var/name_1 = pick(src.org_names_1)
var/name_2 = pick(src.org_names_2)
var/traitor_name
var/traitor_job
var/prob_right_dude = rand(prob_correct_person_lower, prob_correct_person_higher)
var/prob_right_job = rand(prob_correct_job_lower, prob_correct_job_higher)
if(prob(prob_right_job))
if (correct_mob)
traitor_job = correct_mob:assigned_role
else
var/list/job_tmp = get_all_jobs()
job_tmp.Remove("Captain", "Chaplain", "Security Officer", "Detective", "Head Of Security", "Head of Personnel", "Chief Engineer", "Research Director")
traitor_job = pick(job_tmp)
if(prob(prob_right_dude) && ticker.mode == "cult")
traitor_name = correct_mob:current
else
traitor_name = src.pick_mob()
src.text += "<BR><BR>It has been brought to our attention that the [name_1] [name_2] have stumbled upon some dark secrets. They apparently want to spread the dangerous knowledge on as many stations as they can.<BR>"
src.text += "Based on our intelligence, we are [prob_right_job]% sure that if true, someone doing the job of [traitor_job] on your station may have been converted "
src.text += "and instilled with the idea of the flimsiness of the real world, seeking to destroy it. "
if(prob(prob_right_dude))
src.text += "<BR> In addition, we are [prob_right_dude]% sure that [traitor_name] may have also some in to contact with this "
src.text += "organisation."
src.text += "<BR>However, if this information is acted on without substantial evidence, those responsible will face severe repercussions."
/datum/intercept_text/proc/build_rev(correct_mob)
var/name_1 = pick(src.org_names_1)
var/name_2 = pick(src.org_names_2)

View File

@@ -17,6 +17,11 @@
spawn(400)
usr.verbs += /client/proc/mutate
usr.say("BIRUZ BENNAR")
if(!usr.miming)
if(usr.gender=="male")
playsound(usr.loc, pick('vs_chant_conj_hm.wav','vs_chant_conj_lm.wav','vs_chant_ench_hm.wav','vs_chant_ench_lm.wav','vs_chant_evoc_hm.wav','vs_chant_evoc_lm.wav','vs_chant_illu_hm.wav','vs_chant_illu_lm.wav','vs_chant_necr_hm.wav','vs_chant_necr_lm.wav'), 100, 1)
else
playsound(usr.loc, pick('vs_chant_conj_hf.wav','vs_chant_conj_lf.wav','vs_chant_ench_hf.wav','vs_chant_ench_lf.wav','vs_chant_evoc_hf.wav','vs_chant_evoc_lf.wav','vs_chant_illu_hf.wav','vs_chant_illu_lf.wav','vs_chant_necr_hf.wav','vs_chant_necr_lf.wav'), 100, 1)
usr << text("\blue You feel strong! Your mind expands!")
if (!(usr.mutations & 8))
usr.mutations |= 8

View File

@@ -30,6 +30,12 @@
A = input("Area to jump to", "BOOYEA", A) in theareas
var/area/thearea = theareas[A]
usr.say("SCYAR NILA [uppertext(A)]")
if(!usr.miming)
if(usr.gender=="male")
playsound(usr.loc, pick('vs_chant_conj_hm.wav','vs_chant_conj_lm.wav','vs_chant_ench_hm.wav','vs_chant_ench_lm.wav','vs_chant_evoc_hm.wav','vs_chant_evoc_lm.wav','vs_chant_illu_hm.wav','vs_chant_illu_lm.wav','vs_chant_necr_hm.wav','vs_chant_necr_lm.wav'), 100, 1)
else
playsound(usr.loc, pick('vs_chant_conj_hf.wav','vs_chant_conj_lf.wav','vs_chant_ench_hf.wav','vs_chant_ench_lf.wav','vs_chant_evoc_hf.wav','vs_chant_evoc_lf.wav','vs_chant_illu_hf.wav','vs_chant_illu_lf.wav','vs_chant_necr_hf.wav','vs_chant_necr_lf.wav'), 100, 1)
var/datum/effects/system/harmless_smoke_spread/smoke = new /datum/effects/system/harmless_smoke_spread()
smoke.set_up(5, 0, usr.loc)

View File

@@ -20,6 +20,13 @@
usr.say("NEC CANTIO")
if(!usr.miming)
if(usr.gender=="male")
playsound(usr.loc, pick('vs_chant_conj_hm.wav','vs_chant_conj_lm.wav','vs_chant_ench_hm.wav','vs_chant_ench_lm.wav','vs_chant_evoc_hm.wav','vs_chant_evoc_lm.wav','vs_chant_illu_hm.wav','vs_chant_illu_lm.wav','vs_chant_necr_hm.wav','vs_chant_necr_lm.wav'), 100, 1)
else
playsound(usr.loc, pick('vs_chant_conj_hf.wav','vs_chant_conj_lf.wav','vs_chant_ench_hf.wav','vs_chant_ench_lf.wav','vs_chant_evoc_hf.wav','vs_chant_evoc_lf.wav','vs_chant_illu_hf.wav','vs_chant_illu_lf.wav','vs_chant_necr_hf.wav','vs_chant_necr_lf.wav'), 100, 1)
var/turf/myturf = get_turf(usr)
var/obj/overlay/pulse = new/obj/overlay ( myturf )

View File

@@ -17,6 +17,11 @@
spawn(600)
usr.verbs += /mob/proc/kill
usr.say("EI NATH")
if(!usr.miming)
if(usr.gender=="male")
playsound(usr.loc, pick('vs_chant_conj_hm.wav','vs_chant_conj_lm.wav','vs_chant_ench_hm.wav','vs_chant_ench_lm.wav','vs_chant_evoc_hm.wav','vs_chant_evoc_lm.wav','vs_chant_illu_hm.wav','vs_chant_illu_lm.wav','vs_chant_necr_hm.wav','vs_chant_necr_lm.wav'), 100, 1)
else
playsound(usr.loc, pick('vs_chant_conj_hf.wav','vs_chant_conj_lf.wav','vs_chant_ench_hf.wav','vs_chant_ench_lf.wav','vs_chant_evoc_hf.wav','vs_chant_evoc_lf.wav','vs_chant_illu_hf.wav','vs_chant_illu_lf.wav','vs_chant_necr_hf.wav','vs_chant_necr_lf.wav'), 100, 1)
var/datum/effects/system/spark_spread/s = new /datum/effects/system/spark_spread
s.set_up(4, 1, M)
s.start()

View File

@@ -17,6 +17,11 @@
spawn(100)
usr.verbs += /client/proc/knock
usr.say("AULIE OXIN FIERA")
if(!usr.miming)
if(usr.gender=="male")
playsound(usr.loc, pick('vs_chant_conj_hm.wav','vs_chant_conj_lm.wav','vs_chant_ench_hm.wav','vs_chant_ench_lm.wav','vs_chant_evoc_hm.wav','vs_chant_evoc_lm.wav','vs_chant_illu_hm.wav','vs_chant_illu_lm.wav','vs_chant_necr_hm.wav','vs_chant_necr_lm.wav'), 100, 1)
else
playsound(usr.loc, pick('vs_chant_conj_hf.wav','vs_chant_conj_lf.wav','vs_chant_ench_hf.wav','vs_chant_ench_lf.wav','vs_chant_evoc_hf.wav','vs_chant_evoc_lf.wav','vs_chant_illu_hf.wav','vs_chant_illu_lf.wav','vs_chant_necr_hf.wav','vs_chant_necr_lf.wav'), 100, 1)
for(var/obj/machinery/door/G in oview(3))
spawn(1)
G.open()

View File

@@ -30,6 +30,11 @@
var/forcefield
var/mob/living/carbon/human/G = usr
G.say("TARCOL MINTI ZHERI")
if(!usr.miming)
if(usr.gender=="male")
playsound(usr.loc, pick('vs_chant_conj_hm.wav','vs_chant_conj_lm.wav','vs_chant_ench_hm.wav','vs_chant_ench_lm.wav','vs_chant_evoc_hm.wav','vs_chant_evoc_lm.wav','vs_chant_illu_hm.wav','vs_chant_illu_lm.wav','vs_chant_necr_hm.wav','vs_chant_necr_lm.wav'), 100, 1)
else
playsound(usr.loc, pick('vs_chant_conj_hf.wav','vs_chant_conj_lf.wav','vs_chant_ench_hf.wav','vs_chant_ench_lf.wav','vs_chant_evoc_hf.wav','vs_chant_evoc_lf.wav','vs_chant_illu_hf.wav','vs_chant_illu_lf.wav','vs_chant_necr_hf.wav','vs_chant_necr_lf.wav'), 100, 1)
forcefield = new /obj/forcefield(locate(usr.x,usr.y,usr.z))
spawn (300)
del (forcefield)

View File

@@ -17,6 +17,11 @@
spawn(300)
usr.verbs += /client/proc/blind
usr.say("STI KALY!")
if(!usr.miming)
if(usr.gender=="male")
playsound(usr.loc, pick('vs_chant_conj_hm.wav','vs_chant_conj_lm.wav','vs_chant_ench_hm.wav','vs_chant_ench_lm.wav','vs_chant_evoc_hm.wav','vs_chant_evoc_lm.wav','vs_chant_illu_hm.wav','vs_chant_illu_lm.wav','vs_chant_necr_hm.wav','vs_chant_necr_lm.wav'), 100, 1)
else
playsound(usr.loc, pick('vs_chant_conj_hf.wav','vs_chant_conj_lf.wav','vs_chant_ench_hf.wav','vs_chant_ench_lf.wav','vs_chant_evoc_hf.wav','vs_chant_evoc_lf.wav','vs_chant_illu_hf.wav','vs_chant_illu_lf.wav','vs_chant_necr_hf.wav','vs_chant_necr_lf.wav'), 100, 1)
var/obj/overlay/B = new /obj/overlay( M.loc )
B.icon_state = "blspell"
B.icon = 'wizard.dmi'

View File

@@ -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 == "AI malfunction" || ticker.mode.name == "confliction")
if(ticker.mode.name == "revolution" || ticker.mode.name == "cult" || 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)

View File

@@ -351,6 +351,7 @@ var/runedec = 0
/obj/item/weapon/paper/talisman
icon_state = "papertalisman"
var/imbue = null
var/uses = 0
attack_self(mob/user as mob)
usr.bruteloss+=20
@@ -363,6 +364,14 @@ var/runedec = 0
call(/obj/rune/proc/obscure)(2)
if("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar")
call(/obj/rune/proc/teleport)(imbue)
if(src)
if("communicate")
call(/obj/rune/proc/communicate)()
if("supply")
supply()
if(src && src.imbue!="supply")
del(src)
return
return
/obj/item/weapon/paper/talisman/supply
imbue = "supply"
uses = 3

View File

@@ -10,6 +10,7 @@
del(P)
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(src.loc)
T.imbue = "[R.word3]"
T.info = "[R.word3]"
del(R)
del(src)
usr.say("H'drak v'loso, mir'kanas verbot!")

View File

@@ -0,0 +1,15 @@
/obj/rune/proc/communicate()
if(istype(src,/obj/rune))
usr.say("O bidai nabora se'sma!")
else
usr.whisper("O bidai nabora se'sma!")
var/input = input(usr, "Please choose a message to tell to the other acolytes.", "hssss", "")
if(!input)
return fizzle()
if(istype(src,/obj/rune))
usr.say("[input]")
else
usr.whisper("[input]")
for(var/mob/living/carbon/human/H in cultists)
H << "\red \b [input]"
return

View File

@@ -8,6 +8,8 @@
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>"
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)
return
return fizzle()

View File

@@ -0,0 +1,44 @@
/obj/item/weapon/paper/talisman/proc/supply(var/key)
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>"
dat += "<A href='?src=\ref[src];rune=newtome'>N'ath reth sh'yro eth d'raggathnor!</A> - Allows you to summon a new arcane tome.<BR>"
dat += "<A href='?src=\ref[src];rune=teleport'>Sas'so c'arta forbici!</A> - Allows you to move to a rune with the same last word.<BR>"
dat += "<A href='?src=\ref[src];rune=emp'>Ta'gh fara'qha fel d'amar det!</A> - Allows you to destroy technology in a short range.<BR>"
dat += "<A href='?src=\ref[src];rune=conceal'>Kla'atu barada nikt'o!</A> - Allows you to conceal the runes you placed on the floor.<BR>"
dat += "<A href='?src=\ref[src];rune=communicate'>O bidai nabora se'sma!</A> - Allows you to coordinate with others of your cult.<BR>"
usr << browse(dat, "window=id_com;size=350x200")
return
/obj/item/weapon/paper/talisman/Topic(href, href_list)
if (!src)
return
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")
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
T.imbue = "newtome"
if("teleport")
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
T.imbue = "[pick("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar")]"
T.info = "[T.imbue]"
if("emp")
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
T.imbue = "emp"
if("conceal")
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
T.imbue = "conceal"
if("communicate")
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
T.imbue = "communicate"
src.uses--
supply()
return

View File

@@ -44,6 +44,8 @@
// return
if (M.stat !=2)
if (ticker.mode.name == "cult" && prob(10))
ticker.mode:remove_cultist(M.mind)
if ((istype(M, /mob/living/carbon/human) && prob(60)))
bless(M)
for(var/mob/O in viewers(M, null))

View File

@@ -265,7 +265,7 @@ 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=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>
@@ -302,6 +302,8 @@ var/showadminmessages = 1
master_mode = "wizard"
if("revolution")
master_mode = "revolution"
if("cult")
master_mode = "cult"
if("malfunction")
master_mode = "malfunction"
if("deathmatch")
@@ -663,6 +665,10 @@ var/showadminmessages = 1
else if(M.mind in current_mode:revolutionaries)
alert("Is a Revolutionary!")
return
if("cult")
if(M.mind in current_mode:cult)
alert("Is a Cultist!")
return
if("wizard")
if(current_mode:wizard && M.mind == current_mode:wizard)
var/datum/mind/antagonist = M.mind
@@ -1310,6 +1316,23 @@ var/showadminmessages = 1
dat += "There are no wizards."
*/
if("cult")
dat += "<br><table cellspacing=5><tr><td><B>Cultists</B></td><td></td></tr>"
for(var/datum/mind/N in ticker.mode:cult)
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></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
if(ticker.mode.traitors.len > 0)
dat += "<br><table cellspacing=5><tr><td><B>Traitors</B></td><td></td><td></td></tr>"
@@ -1963,6 +1986,9 @@ var/showadminmessages = 1
if("revolution")
if(M.mind in (ticker.mode:head_revolutionaries + ticker.mode:revolutionaries))
return 1
if("cult")
if(M.mind in ticker.mode:cult)
return 1
if("malfunction")
if(M.mind in ticker.mode:malf_ai)
return 1

View File

@@ -42,4 +42,7 @@
if(ticker.mode.name == "revolution")
if ((src.mind in ticker.mode:revolutionaries) || (src.mind in ticker.mode:head_revolutionaries))
ticker.mode:update_rev_icons_added(src.mind)
if(ticker.mode.name == "cult")
if (src.mind in ticker.mode:cult)
ticker.mode:update_cult_icons_added(src.mind)
..()

View File

@@ -31,6 +31,7 @@
#define FILE_DIR "code/game/gamemodes/blob"
#define FILE_DIR "code/game/gamemodes/changeling"
#define FILE_DIR "code/game/gamemodes/ctf"
#define FILE_DIR "code/game/gamemodes/cult"
#define FILE_DIR "code/game/gamemodes/deathmatch"
#define FILE_DIR "code/game/gamemodes/extended"
#define FILE_DIR "code/game/gamemodes/malfunction"
@@ -118,6 +119,7 @@
#define FILE_DIR "sound/machines"
#define FILE_DIR "sound/misc"
#define FILE_DIR "sound/piano"
#define FILE_DIR "sound/spells"
#define FILE_DIR "sound/voice"
#define FILE_DIR "sound/weapons"
// END_FILE_DIR
@@ -269,6 +271,7 @@
#include "code\game\gamemodes\changeling\changeling_powers.dm"
#include "code\game\gamemodes\ctf\ctf.dm"
#include "code\game\gamemodes\ctf\ctf_items.dm"
#include "code\game\gamemodes\cult\cult.dm"
#include "code\game\gamemodes\deathmatch\deathmatch.dm"
#include "code\game\gamemodes\extended\extended.dm"
#include "code\game\gamemodes\malfunction\Malf_Modules.dm"
@@ -380,6 +383,7 @@
#include "code\game\magic\cultist\rune11.dm"
#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\rune2.dm"
#include "code\game\magic\cultist\rune3.dm"
#include "code\game\magic\cultist\rune4.dm"
@@ -388,6 +392,7 @@
#include "code\game\magic\cultist\rune7.dm"
#include "code\game\magic\cultist\rune8.dm"
#include "code\game\magic\cultist\rune9.dm"
#include "code\game\magic\cultist\specialtalisman.dm"
#include "code\game\objects\assemblies.dm"
#include "code\game\objects\blood.dm"
#include "code\game\objects\bomb.dm"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.