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)