diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index 6d48bbe4a5d..dccf6886bbd 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -47,6 +47,8 @@ datum/mind
var/has_been_rev = 0//Tracks if this mind has been a rev or not
+ var/list/cult_words = list()
+
var/datum/faction/faction //associated faction
var/datum/changeling/changeling //changeling holder
diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm
index 41666d07f8a..eb9e6d321d8 100644
--- a/code/game/gamemodes/cult/cult.dm
+++ b/code/game/gamemodes/cult/cult.dm
@@ -24,7 +24,7 @@
protected_jobs = list()
required_players = 15
required_enemies = 3
- recommended_enemies = 4
+ recommended_enemies = 3
uplink_welcome = "Nar-Sie Uplink Console:"
uplink_uses = 10
@@ -204,6 +204,9 @@
wordexp = "[wordhide] is hide..."
cult_mob << "\red [pick("You remember something from the dark teachings of your master","You hear a dark voice on the wind","Black blood oozes into your vision and forms into symbols","You catch a brief glimmer of the otherside")]... [wordexp]"
cult_mob.mind.store_memory("You remember that [wordexp]", 0, 0)
+ cult_mob.mind.cult_words += word
+ if(cult_mob.mind.cult_words.len == allwords.len)
+ cult_mob << "\green You feel enlightened, as if you have gained all the secrets of the other side."
/datum/game_mode/proc/add_cultist(datum/mind/cult_mind) //BASE
@@ -227,6 +230,7 @@
cult -= cult_mind
cult_mind.current << "\red An unfamiliar white light flashes through your mind, cleansing the taint of the dark-one and the memories of your time as his servant with it."
cult_mind.memory = ""
+ cult_mind.cult_words = initial(cult_mind.cult_words)
update_cult_icons_removed(cult_mind)
cult_mind.current.attack_log += "\[[time_stamp()]\] Has renounced the cult!"
if(show_message)
diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm
index 925300219ee..6c69824966e 100644
--- a/code/game/gamemodes/cult/runes.dm
+++ b/code/game/gamemodes/cult/runes.dm
@@ -113,9 +113,21 @@ var/list/sacrificed = list()
M.mind.special_role = "Cultist"
M << "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."
M << "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."
- usr << "\red The Geometer of Blood is pleased to see his followers grow in numbers."
- ticker.mode:grant_runeword(usr)
- return 1
+ //picking which word to use
+ if(usr.mind.cult_words.len != ticker.mode.allwords.len) // No point running if they already know everything
+ var/convert_word
+ for(var/i=1, i<=3, i++)
+ convert_word = pick(ticker.mode.grantwords)
+ if(convert_word in usr.mind.cult_words)
+ if(i==3) convert_word = null //NOTE: If max loops is changed ensure this condition is changed to match /Mal
+ else
+ break
+ if(!convert_word)
+ usr << "\red This Convert was unworthy of knowledge of the other side!"
+ else
+ usr << "\red The Geometer of Blood is pleased to see his followers grow in numbers."
+ ticker.mode:grant_runeword(usr, convert_word)
+ return 1
else
M << "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."
M << "And not a single fuck was given, exterminate the cult at all costs."
@@ -568,25 +580,25 @@ var/list/sacrificed = list()
else
H.gib()
usr << "\red The Geometer of Blood accepts this sacrifice, your objective is now complete."
+ usr << "\red He is pleased!"
+ sac_grant_word()
+ sac_grant_word()
+ sac_grant_word() //Little reward for completing the objective
else
usr << "\red Your target's earthly bonds are too strong. You need more cultists to succeed in this ritual."
else
if(cultsinrange.len >= 3)
if(H.stat !=2)
- if(prob(80))
- usr << "\red The Geometer of Blood accepts this sacrifice."
- ticker.mode:grant_runeword(usr)
- else
- usr << "\red The Geometer of blood accepts this sacrifice."
- usr << "\red However, this soul was not enough to gain His favor."
+ usr << "\red The Geometer of Blood accepts this sacrifice."
+ sac_grant_word()
if(isrobot(H))
H.dust()//To prevent the MMI from remaining
else
H.gib()
else
- if(prob(40))
+ if(prob(60))
usr << "\red The Geometer of blood accepts this sacrifice."
- ticker.mode:grant_runeword(usr)
+ sac_grant_word()
else
usr << "\red The Geometer of blood accepts this sacrifice."
usr << "\red However, a mere dead body is not enough to satisfy Him."
@@ -598,9 +610,9 @@ var/list/sacrificed = list()
if(H.stat !=2)
usr << "\red The victim is still alive, you will need more cultists chanting for the sacrifice to succeed."
else
- if(prob(40))
+ if(prob(60))
usr << "\red The Geometer of blood accepts this sacrifice."
- ticker.mode:grant_runeword(usr)
+ sac_grant_word()
else
usr << "\red The Geometer of blood accepts this sacrifice."
usr << "\red However, a mere dead body is not enough to satisfy Him."
@@ -611,20 +623,16 @@ var/list/sacrificed = list()
else
if(cultsinrange.len >= 3)
if(H.stat !=2)
- if(prob(80))
- usr << "\red The Geometer of Blood accepts this sacrifice."
- ticker.mode:grant_runeword(usr)
- else
- usr << "\red The Geometer of blood accepts this sacrifice."
- usr << "\red However, this soul was not enough to gain His favor."
+ usr << "\red The Geometer of Blood accepts this sacrifice."
+ sac_grant_word()
if(isrobot(H))
H.dust()//To prevent the MMI from remaining
else
H.gib()
else
- if(prob(40))
+ if(prob(60))
usr << "\red The Geometer of blood accepts this sacrifice."
- ticker.mode:grant_runeword(usr)
+ sac_grant_word()
else
usr << "\red The Geometer of blood accepts this sacrifice."
usr << "\red However, a mere dead body is not enough to satisfy Him."
@@ -636,9 +644,9 @@ var/list/sacrificed = list()
if(H.stat !=2)
usr << "\red The victim is still alive, you will need more cultists chanting for the sacrifice to succeed."
else
- if(prob(40))
+ if(prob(60))
usr << "\red The Geometer of blood accepts this sacrifice."
- ticker.mode:grant_runeword(usr)
+ sac_grant_word()
else
usr << "\red The Geometer of blood accepts this sacrifice."
usr << "\red However, a mere dead body is not enough to satisfy Him."
@@ -652,19 +660,23 @@ var/list/sacrificed = list()
if(cultsinrange.len >= 3)
sacrificed += M.mind
usr << "\red The Geometer of Blood accepts this sacrifice, your objective is now complete."
+ usr << "\red He is pleased!"
+ sac_grant_word()
+ sac_grant_word()
+ sac_grant_word() //Little reward for completing the objective
else
usr << "\red Your target's earthly bonds are too strong. You need more cultists to succeed in this ritual."
continue
else
- if(prob(20))
+ if(prob(30))
usr << "\red The Geometer of Blood accepts your meager sacrifice."
- ticker.mode:grant_runeword(usr)
+ sac_grant_word()
else
usr << "\red The Geometer of blood accepts this sacrifice."
usr << "\red However, a mere monkey is not enough to satisfy Him."
else
usr << "\red The Geometer of Blood accepts your meager sacrifice."
- if(prob(20))
+ if(prob(30))
ticker.mode.grant_runeword(usr)
M.gib()
/* for(var/mob/living/carbon/alien/A)
@@ -674,7 +686,7 @@ var/list/sacrificed = list()
if (ticker.mode.name == "cult")
if(prob(75))
usr << "\red The Geometer of Blood accepts your exotic sacrifice."
- ticker.mode:grant_runeword(usr)
+ sac_grant_word()
else
usr << "\red The Geometer of Blood accepts your exotic sacrifice."
usr << "\red However, this alien is not enough to gain His favor."
@@ -683,6 +695,14 @@ var/list/sacrificed = list()
return
return fizzle() */
+ sac_grant_word() //The proc that which chooses a word rewarded for a successful sacrifice, sacrifices always give a currently unknown word if the normal checks pass
+ if(usr.mind.cult_words.len != ticker.mode.allwords.len) // No point running if they already know everything
+ var/convert_word
+ var/pick_list = ticker.mode.allwords - usr.mind.cult_words
+ convert_word = pick(pick_list)
+ ticker.mode:grant_runeword(usr, convert_word)
+
+
/////////////////////////////////////////SIXTEENTH RUNE
revealrunes(var/obj/W as obj)