From 18327195251aeed879e1a17829dc9cd6dffef256 Mon Sep 17 00:00:00 2001 From: Malkevin Date: Sat, 15 Mar 2014 15:47:46 +0000 Subject: [PATCH 01/23] Required players increased by 5 to 20 Starting cultists increased to 9 Convert no longer gives words --- code/game/gamemodes/cult/cult.dm | 17 +++++++++-------- code/game/gamemodes/cult/runes.dm | 3 ++- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index c4c8907feaa..5e237b1bd9d 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -22,9 +22,9 @@ antag_flag = BE_CULTIST restricted_jobs = list("Chaplain","AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain") protected_jobs = list() - required_players = 15 - required_enemies = 3 - recommended_enemies = 4 + required_players = 20 + required_enemies = 9 // 3+3+3 - d' magic number o' magic numbars mon + recommended_enemies = 9 uplink_welcome = "Nar-Sie Uplink Console:" uplink_uses = 10 @@ -124,11 +124,12 @@ explanation = "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." cult_mind.current << "Objective #[obj_count]: [explanation]" cult_mind.memory += "Objective #[obj_count]: [explanation]
" - cult_mind.current << "The Geometer of Blood grants you the knowledge to convert non-believers. (Join Blood Self)" - cult_mind.memory += "The Geometer of Blood grants you the knowledge to convert non-believers. (Join Blood Self)
" - grant_runeword(cult_mind.current,"join") - grant_runeword(cult_mind.current,"blood") - grant_runeword(cult_mind.current,"self") + cult_mind.current << "The Geometer of Blood grants you the knowledge to sacrifice non-believers. (Hell Blood Join)" + cult_mind.memory += "The Geometer of Blood grants you the knowledge to sacrifice non-believers. (Hell Blood Join)
" + for(var/startingword in startwords) + grant_runeword(cult_mind.current,startingword) +// grant_runeword(cult_mind.current,"blood") +// grant_runeword(cult_mind.current,"hell") /datum/game_mode/proc/equip_cultist(mob/living/carbon/human/mob) if(!istype(mob)) diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 6c01ed0203f..e02ab7294e9 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -113,6 +113,7 @@ 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." +/* //convert no longer gives words //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 @@ -127,7 +128,7 @@ var/list/sacrificed = list() 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 + 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." From 8787b6c65b52a1fbca2a79adde670e5fdd94f692 Mon Sep 17 00:00:00 2001 From: Malkevin Date: Sat, 15 Mar 2014 23:22:33 +0000 Subject: [PATCH 02/23] Cultists start with sacrifice and convert Made sacrifice trap the victims soul in a shard (credit to @adrix89 - although with how long it took to fix the compile times from porting the code I probably wouldve been better starting afresh) Changed convert to require three cultists --- code/game/gamemodes/cult/runes.dm | 105 ++++++++++++------------ code/game/gamemodes/wizard/soulstone.dm | 74 +++++++++++------ 2 files changed, 102 insertions(+), 77 deletions(-) diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index e02ab7294e9..5075a193ad9 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -99,41 +99,48 @@ var/list/sacrificed = list() /////////////////////////////////////////THIRD RUNE convert() + var/list/mob/living/carbon/human/cultsinrange = list() for(var/mob/living/carbon/M in src.loc) if(iscultist(M)) continue if(M.stat==2) continue - usr.say("Mah[pick("'","`")]weyh pleggh at e'ntrath!") - M.visible_message("\red [M] writhes in pain as the markings below him glow a bloody red.", \ - "\red AAAAAAHHHH!.", \ - "\red You hear an anguished scream.") - if(is_convertable_to_cult(M.mind)) - ticker.mode.add_cultist(M.mind) - 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." -/* //convert no longer gives words - //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 + for(var/mob/living/carbon/C in orange(1,src)) + if(iscultist(C) && !C.stat) //converting requires three cultists + cultsinrange += C + C.say("Mah[pick("'","`")]weyh pleggh at e'ntrath!") + if(cultsinrange.len >= 3) + M.visible_message("\red [M] writhes in pain as the markings below him glow a bloody red.", \ + "\red AAAAAAHHHH!.", \ + "\red You hear an anguished scream.") + if(is_convertable_to_cult(M.mind)) + ticker.mode.add_cultist(M.mind) + 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." + /* //convert no longer gives words + //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 - 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 */ + 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." + return 0 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." - return 0 - + for(var/mob/living/carbon/human/cultist in cultsinrange) + cultist << "You need more brothers to overcome their lies and make them see Truth. " return fizzle() @@ -590,10 +597,7 @@ var/list/sacrificed = list() if(H.mind == ticker.mode:sacrifice_target) if(cultsinrange.len >= 3) sacrificed += H.mind - if(isrobot(H)) - H.dust()//To prevent the MMI from remaining - else - H.gib() + stone_or_gib(H) usr << "\red The Geometer of Blood accepts this sacrifice, your objective is now complete." usr << "\red He is pleased!" sac_grant_word() @@ -606,10 +610,7 @@ var/list/sacrificed = list() if(H.stat !=2) 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() + stone_or_gib(H) else if(prob(60)) usr << "\red The Geometer of blood accepts this sacrifice." @@ -617,10 +618,7 @@ var/list/sacrificed = list() else usr << "\red The Geometer of blood accepts this sacrifice." usr << "\red However, a mere dead body is not enough to satisfy Him." - if(isrobot(H)) - H.dust()//To prevent the MMI from remaining - else - H.gib() + stone_or_gib(H) else if(H.stat !=2) usr << "\red The victim is still alive, you will need more cultists chanting for the sacrifice to succeed." @@ -631,10 +629,7 @@ var/list/sacrificed = list() else usr << "\red The Geometer of blood accepts this sacrifice." usr << "\red However, a mere dead body is not enough to satisfy Him." - if(isrobot(H)) - H.dust()//To prevent the MMI from remaining - else - H.gib() + stone_or_gib(H) else if(cultsinrange.len >= 3) if(H.stat !=2) @@ -651,10 +646,7 @@ var/list/sacrificed = list() else usr << "\red The Geometer of blood accepts this sacrifice." usr << "\red However, a mere dead body is not enough to satisfy Him." - if(isrobot(H)) - H.dust()//To prevent the MMI from remaining - else - H.gib() + stone_or_gib(H) else if(H.stat !=2) usr << "\red The victim is still alive, you will need more cultists chanting for the sacrifice to succeed." @@ -665,10 +657,7 @@ var/list/sacrificed = list() else usr << "\red The Geometer of blood accepts this sacrifice." usr << "\red However, a mere dead body is not enough to satisfy Him." - if(isrobot(H)) - H.dust()//To prevent the MMI from remaining - else - H.gib() + stone_or_gib(H) for(var/mob/living/carbon/monkey/M in src.loc) if (ticker.mode.name == "cult") if(M.mind == ticker.mode:sacrifice_target) @@ -693,7 +682,7 @@ var/list/sacrificed = list() usr << "\red The Geometer of Blood accepts your meager sacrifice." if(prob(30)) ticker.mode.grant_runeword(usr) - M.gib() + stone_or_gib(M) /* for(var/mob/living/carbon/alien/A) for(var/mob/K in cultsinrange) K.say("Barhah hra zar'garis!") @@ -717,6 +706,16 @@ var/list/sacrificed = list() convert_word = pick(pick_list) ticker.mode.grant_runeword(usr, convert_word) + stone_or_gib(var/mob/T) + var/obj/item/device/soulstone/stone = new /obj/item/device/soulstone(get_turf(src)) + if(!stone.transfer_soul("FORCE", T, usr)) //if it fails to add soul + del stone + if(T) + if(isrobot(T)) + T.dust()//To prevent the MMI from remaining + else + T.gib() + /////////////////////////////////////////SIXTEENTH RUNE diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm index 1de83394304..17db1a311e6 100644 --- a/code/game/gamemodes/wizard/soulstone.dm +++ b/code/game/gamemodes/wizard/soulstone.dm @@ -91,9 +91,30 @@ /obj/item/proc/transfer_soul(var/choice as text, var/target, var/mob/U as mob). switch(choice) + if("FORCE") + if(!iscarbon(target)) + return 0 + var/mob/living/carbon/T = target + var/obj/item/device/soulstone/C = src + if(T.client != null) + if(C.contents.len) + return 0 + else + for(var/obj/item/W in T) + T.unEquip(W) + init_shade(C, T, U) + //del T //Gib instead + return 1 + return 0 if("VICTIM") var/mob/living/carbon/human/T = target var/obj/item/device/soulstone/C = src + if(ticker.mode.name == "cult" && T.mind == ticker.mode:sacrifice_target) + if(iscultist(U)) + U << "\red The Geometer of blood wants this mortal sacrificed with the rune." + else + U << "\red The soul stone doesn't work for no apparent reason." + return 0 if(C.imprinted != "empty") U << "\red Capture failed!: \black The soul stone has already been imprinted with [C.imprinted]'s mind!" else @@ -108,29 +129,7 @@ else for(var/obj/item/W in T) T.unEquip(W) - new /obj/effect/decal/remains/human(T.loc) //Spawns a skeleton - T.invisibility = 101 - var/atom/movable/overlay/animation = new /atom/movable/overlay( T.loc ) - animation.icon_state = "blank" - animation.icon = 'icons/mob/mob.dmi' - animation.master = T - flick("dust-h", animation) - del(animation) - var/mob/living/simple_animal/shade/S = new /mob/living/simple_animal/shade( T.loc ) - S.loc = C //put shade in stone - S.status_flags |= GODMODE //So they won't die inside the stone somehow - S.canmove = 0//Can't move out of the soul stone - S.name = "Shade of [T.real_name]" - S.real_name = "Shade of [T.real_name]" - if (T.client) - T.client.mob = S - S.cancel_camera() - C.icon_state = "soulstone2" - C.name = "Soul Stone: [S.real_name]" - S << "Your soul has been captured! You are now bound to [U.name]'s will, help them suceed in their goals at all costs." - U << "\blue Capture successful!: \black [T.real_name]'s soul has been ripped from their body and stored within the soul stone." - U << "The soulstone has been imprinted with [S.real_name]'s mind, it will no longer react to other souls." - C.imprinted = "[S.name]" + init_shade(C, T, U, vic = 1) del T if("SHADE") var/mob/living/simple_animal/shade/T = target @@ -150,7 +149,8 @@ T.health = T.maxHealth C.icon_state = "soulstone2" T << "Your soul has been recaptured by the soul stone, its arcane energies are reknitting your ethereal form" - U << "\blue Capture successful!: \black [T.name]'s has been recaptured and stored within the soul stone." + if(U != T) + U << "\blue Capture successful!: \black [T.name]'s has been recaptured and stored within the soul stone." if("CONSTRUCT") var/obj/structure/constructshell/T = target var/obj/item/device/soulstone/C = src @@ -205,3 +205,29 @@ else U << "\red Creation failed!: \black The soul stone is empty! Go kill someone!" return + +obj/item/proc/init_shade(var/obj/item/device/soulstone/C, var/mob/living/carbon/human/T, var/mob/U as mob, var/vic = 0) + new /obj/effect/decal/remains/human(T.loc) //Spawns a skeleton + T.invisibility = 101 + var/atom/movable/overlay/animation = new /atom/movable/overlay( T.loc ) + animation.icon_state = "blank" + animation.icon = 'icons/mob/mob.dmi' + animation.master = T + flick("dust-h", animation) + del(animation) + var/mob/living/simple_animal/shade/S = new /mob/living/simple_animal/shade( T.loc ) + S.loc = C //put shade in stone + S.status_flags |= GODMODE //So they won't die inside the stone somehow + S.canmove = 0//Can't move out of the soul stone + S.name = "Shade of [T.real_name]" + S.real_name = "Shade of [T.real_name]" + S.key = T.key + ticker.mode.add_cultist(S.mind,2) + S.cancel_camera() + C.icon_state = "soulstone2" + C.name = "Soul Stone: [S.real_name]" + S << "Your soul has been captured! You are now bound to [U.name]'s will, help them suceed in their goals at all costs." + C.imprinted = "[S.name]" + if(vic) + U << "\blue Capture successful!: \black [T.real_name]'s soul has been ripped from their body and stored within the soul stone." + U << "The soulstone has been imprinted with [S.real_name]'s mind, it will no longer react to other souls." From 49f4e5631d45428ce3d85dd8d2e2110728f90bc1 Mon Sep 17 00:00:00 2001 From: Malkevin Date: Mon, 17 Mar 2014 23:58:44 +0000 Subject: [PATCH 03/23] moved the sacrifice_target var up a branch added a check for the sacrifice target under check_convertables (aka - a check for dumb unobservant players) added flavour text to the convert rune for failure due to attempt to convert sac target ADDED A DEBUG MODE CHECK TO BYPASS GAME MODE REQUIREMENT CHECKS - NO MORE FAFFING ABOUT CHANGING THE VARS. Activate using the Debug-game verb on the debug panel --- code/game/gamemodes/cult/cult.dm | 3 ++- code/game/gamemodes/cult/runes.dm | 4 ++++ code/game/gamemodes/game_mode.dm | 25 +++++++++++++++---------- code/game/gamemodes/gameticker.dm | 15 +++++++++------ 4 files changed, 30 insertions(+), 17 deletions(-) diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 5e237b1bd9d..b474ca9ea51 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -13,6 +13,8 @@ if(istype(mind.current, /mob/living/carbon/human) && (mind.assigned_role in list("Captain", "Chaplain"))) return 0 if(isloyal(mind.current)) return 0 + if (ticker.mode.name == "cult") + if(mind.current == ticker.mode.sacrifice_target) return 0 return 1 @@ -29,7 +31,6 @@ uplink_welcome = "Nar-Sie Uplink Console:" uplink_uses = 10 - var/datum/mind/sacrifice_target = null 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) diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 5075a193ad9..91f92a2f266 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -137,6 +137,10 @@ var/list/sacrificed = list() 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." + if(ticker.mode.name == "cult") + if(M.mind == ticker.mode.sacrifice_target) + for(var/mob/living/carbon/human/cultist in cultsinrange) + cultist << "The Chosen One!!
KILL THE CHOSEN ONE!!!
" return 0 else for(var/mob/living/carbon/human/cultist in cultsinrange) diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 2bb92c0b059..18af572bb02 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -31,6 +31,7 @@ var/uplink_welcome = "Syndicate Uplink Console:" var/uplink_uses = 10 var/antag_flag = null //preferences flag such as BE_WIZARD that need to be turned on for players to be antag + var/datum/mind/sacrifice_target = null /datum/game_mode/proc/announce() //to be calles when round starts @@ -40,16 +41,20 @@ ///can_start() ///Checks to see if the game can be setup and ran with the current number of players or whatnot. /datum/game_mode/proc/can_start() - var/playerC = 0 - for(var/mob/new_player/player in player_list) - if((player.client)&&(player.ready)) - playerC++ - if(playerC < required_players) - return 0 - antag_candidates = get_players_for_role(antag_flag) - if(antag_candidates.len < required_enemies) - return 0 - return 1 + if(!Debug2) + var/playerC = 0 + for(var/mob/new_player/player in player_list) + if((player.client)&&(player.ready)) + playerC++ + if(playerC < required_players) + return 0 + antag_candidates = get_players_for_role(antag_flag) + if(antag_candidates.len < required_enemies) + return 0 + return 1 + else + world << "DEBUG: GAME STARTING WITHOUT PLAYER NUMBER CHECKS, THIS WILL PROBABLY BREAK SHIT." + return 1 ///pre_setup() diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm index 60d68580439..d241e96d858 100644 --- a/code/game/gamemodes/gameticker.dm +++ b/code/game/gamemodes/gameticker.dm @@ -94,12 +94,15 @@ var/global/datum/controller/gameticker/ticker job_master.DivideOccupations() //Distribute jobs if (!src.mode.pre_setup_before_jobs) can_continue = src.mode.pre_setup() - if(!can_continue) - del(mode) - current_state = GAME_STATE_PREGAME - world << "Error setting up [master_mode]. Reverting to pre-game lobby." - job_master.ResetOccupations() - return 0 + if(!Debug2) + if(!can_continue) + del(mode) + current_state = GAME_STATE_PREGAME + world << "Error setting up [master_mode]. Reverting to pre-game lobby." + job_master.ResetOccupations() + return 0 + else + world << "DEBUG: Bypassing prestart checks..." if(hide_mode) var/list/modes = new From 7d2e2de62ce4593c4c1cb22fb7b057904a1bb9a8 Mon Sep 17 00:00:00 2001 From: Malkevin Date: Wed, 19 Mar 2014 00:00:23 +0000 Subject: [PATCH 04/23] New rune: summon artificer shell ("travel", "hell", "tech") 1 cultist Requires 4 plasteel to convert to a shell MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Boring coder stuff: Wrote a proc called mob/proc/sac_act - pretty simple thing that gets called in the sacrifice rune instead of it being a huge unwieldy wall of text full of conditionals Exciting future of the game stuff: This will allow me to enable all mobs to be sacrificed. ¬TO-DO: Move current sacrifice code into relevent sac_act procs for humans, monkeys, aliums ¬TO-DO: Write sac_acts for the other mob types -¬DONE: Corgis --¬TO-DO: Make corgi sacrifice !!FUN!! --- code/game/gamemodes/cult/cult.dm | 2 +- code/game/gamemodes/cult/ritual.dm | 15 ++++++++++++--- code/game/gamemodes/cult/runes.dm | 14 ++++++++++++++ code/game/gamemodes/wizard/soulstone.dm | 2 +- .../mob/living/simple_animal/friendly/corgi.dm | 6 ++++++ code/modules/mob/mob.dm | 3 +++ 6 files changed, 37 insertions(+), 5 deletions(-) diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index b474ca9ea51..3360c2a47fc 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -13,7 +13,7 @@ if(istype(mind.current, /mob/living/carbon/human) && (mind.assigned_role in list("Captain", "Chaplain"))) return 0 if(isloyal(mind.current)) return 0 - if (ticker.mode.name == "cult") + if (ticker.mode.name == "cult") //redundent? if(mind.current == ticker.mode.sacrifice_target) return 0 return 1 diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index 98c99bcb69f..4c4bf53a009 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -135,7 +135,7 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology", return - attack_hand(mob/living/user as mob) + attack_hand(mob/living/user as mob) // OH GOD this is horrible if(!iscultist(user)) user << "You can't mouth the arcane scratchings without fumbling over them." return @@ -194,6 +194,8 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology", return itemport(src.word3) if(word1 == wordjoin && word2 == wordhide && word3 == wordtech) return runestun() + if(word1 == wordtravel && word2 == wordhell && word3 == wordtech) + return summon_shell() else user.take_overall_damage(30, 0) user << "\red You feel the life draining from you, as if Lord Nar-Sie is displeased with you." @@ -557,7 +559,8 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology", "stun" = list("join","hide","technology"), "armor" = list("hell","destroy","other"), "teleport" = list("travel","self"), - "teleport other" = list("travel","other") + "teleport other" = list("travel","other"), + "summon shell" = list("travel","hell","technology") ) @@ -649,7 +652,7 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology", var/r if (!istype(user.loc,/turf)) user << "\red You do not have enough space to write a proper rune." - var/list/runes = list("teleport", "itemport", "tome", "armor", "convert", "tear in reality", "emp", "drain", "seer", "raise", "obscure", "reveal", "astral journey", "manifest", "imbue talisman", "sacrifice", "wall", "freedom", "cultsummon", "deafen", "blind", "bloodboil", "communicate", "stun") + var/list/runes = list("teleport", "itemport", "tome", "armor", "convert", "tear in reality", "emp", "drain", "seer", "raise", "obscure", "reveal", "astral journey", "manifest", "imbue talisman", "sacrifice", "wall", "freedom", "cultsummon", "deafen", "blind", "bloodboil", "communicate", "stun", "summon shell") r = input("Choose a rune to scribe", "Rune Scribing") in runes //not cancellable. var/obj/effect/rune/R = new /obj/effect/rune if(istype(user, /mob/living/carbon/human)) @@ -809,3 +812,9 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology", R.word3=wordtech R.loc = user.loc R.check_icon() + if("summon shell") + R.word1=wordtravel + R.word2=wordhell + R.word3=wordtech + R.loc = user.loc + R.check_icon() diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 91f92a2f266..ac962a46c95 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -687,6 +687,8 @@ var/list/sacrificed = list() if(prob(30)) ticker.mode.grant_runeword(usr) stone_or_gib(M) + for(var/mob/victim in src.loc) //TO-DO: Move the shite above into the mob's own sac_act - see /mob/living/simple_animal/corgi/sac_act for an example + victim.sac_act(src, victim) //Sacrifice procs are now seperate per mob, this allows us to allow sacrifice on as many mob types as we want without making an already clunky system worse /* for(var/mob/living/carbon/alien/A) for(var/mob/K in cultsinrange) K.say("Barhah hra zar'garis!") @@ -1075,3 +1077,15 @@ var/list/sacrificed = list() del(src) return + summon_shell() // Summons a construct shell + for(var/obj/item/stack/sheet/plasteel/PS in src.loc) //I could probably combine the amounts but I'm too lazy to compensate for others' lazyness + if(PS.amount >= 4) // may need increasing? + usr.say("Eth ra p'ni[pick("'","`")]dedo ol!") //I have no idea if these are written in a proper made up language or just Urist smacking his face on the keyboard + new /obj/structure/constructshell(src.loc) + //? PS.remove_amount(4) //TO-DO: Write a proc for removing sheets from a stack and deleting when stack is empty... why doesnt this exist yet?? + PS.amount -= 4 + if(PS.amount <= 0) + del(PS) + del(src) + return 1 + return fizzle() diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm index 17db1a311e6..3771f95d75f 100644 --- a/code/game/gamemodes/wizard/soulstone.dm +++ b/code/game/gamemodes/wizard/soulstone.dm @@ -92,7 +92,7 @@ /obj/item/proc/transfer_soul(var/choice as text, var/target, var/mob/U as mob). switch(choice) if("FORCE") - if(!iscarbon(target)) + if(!iscarbon(target)) //TO-DO: Add sacrifice stoning for non-organics, just because you have no body doesnt mean you dont have a soul return 0 var/mob/living/carbon/T = target var/obj/item/device/soulstone/C = src diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm index c2d5e569d5b..e7204e4f980 100644 --- a/code/modules/mob/living/simple_animal/friendly/corgi.dm +++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm @@ -29,6 +29,12 @@ ..() regenerate_icons() +/mob/living/simple_animal/corgi/sac_act(var/obj/effect/rune/R, victim) + usr << "You horrible monster" + R.sac_grant_word() + R.stone_or_gib(victim) + + /mob/living/simple_animal/corgi/show_inv(mob/user as mob) user.set_machine(src) if(user.stat) return diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 590305bc8af..559390b9917 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -5,6 +5,9 @@ ghostize() ..() +/mob/proc/sac_act(var/obj/effect/rune/R, var/mob/victim as mob) + return + var/next_mob_id = 0 /mob/New() tag = "mob_[next_mob_id++]" From 5665966c94562bac138168f5a499dc1fbba4dc6a Mon Sep 17 00:00:00 2001 From: Malkevin Date: Fri, 21 Mar 2014 00:03:42 +0000 Subject: [PATCH 05/23] cult.dm - made the objectives always be declared in ticker.mode changed the var name from objectives to cult_objectives cultists hitting mobs (and only mobs) will convert any holy water to unholy water trying to summon narsie when shes not an objective will dose all the summoners with hell water chaplain with his bible can purify the unholy water in a container wrote the sac act for corgis - this will cause !!FUN!! to the sacrificer Holy water will deconvert cultists now, takes around 2 minutes Unholy water generally buffs cultists, but causes brain damage. Its very poisonous to non-cultists. Hell water - this is a punishment reagent, amongst other bad affects chiefy it (re)sets people on fire Misc: Fixed hyperzine being double consumed. --- code/game/gamemodes/cult/cult.dm | 30 +++++------ code/game/gamemodes/cult/ritual.dm | 5 ++ code/game/gamemodes/cult/runes.dm | 17 +++++-- .../objects/items/weapons/storage/bible.dm | 5 ++ .../living/simple_animal/friendly/corgi.dm | 4 +- code/modules/reagents/Chemistry-Reagents.dm | 50 +++++++++++++++++-- 6 files changed, 85 insertions(+), 26 deletions(-) diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 3360c2a47fc..2974d2321bb 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -4,6 +4,8 @@ var/list/datum/mind/cult = list() var/list/allwords = list("travel","self","see","hell","blood","join","tech","destroy", "other", "hide") var/list/grantwords = list("travel", "see", "hell", "tech", "destroy", "other", "hide") + var/list/cult_objectives = list() + /proc/iscultist(mob/living/M as mob) return istype(M) && M.mind && ticker && ticker.mode && (M.mind in ticker.mode.cult) @@ -38,8 +40,6 @@ var/list/startwords = list("blood","join","self","hell") var/list/secondwords = list("travel", "see", "tech", "destroy", "other", "hide") - var/list/objectives = list() - var/eldergod = 1 //for the summon god objective var/const/acolytes_needed = 5 //for the survive objective @@ -53,11 +53,11 @@ /datum/game_mode/cult/pre_setup() if(prob(50)) - objectives += "survive" - objectives += "sacrifice" + cult_objectives += "survive" + cult_objectives += "sacrifice" else - objectives += "eldergod" - objectives += "sacrifice" + cult_objectives += "eldergod" + cult_objectives += "sacrifice" if(config.protect_roles_from_antagonist) restricted_jobs += protected_jobs @@ -80,7 +80,7 @@ /datum/game_mode/cult/post_setup() modePlayer += cult - if("sacrifice" in objectives) + if("sacrifice" in cult_objectives) var/list/possible_targets = get_unconvertables() if(!possible_targets.len) @@ -111,9 +111,9 @@ /datum/game_mode/cult/proc/memorize_cult_objectives(var/datum/mind/cult_mind) - for(var/obj_count = 1,obj_count <= objectives.len,obj_count++) + for(var/obj_count = 1,obj_count <= cult_objectives.len,obj_count++) var/explanation - switch(objectives[obj_count]) + switch(cult_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") @@ -296,11 +296,11 @@ /datum/game_mode/cult/proc/check_cult_victory() var/cult_fail = 0 - if(objectives.Find("survive")) + if(cult_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")) + if(cult_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(cult_objectives.Find("sacrifice")) if(sacrifice_target && !sacrificed.Find(sacrifice_target)) //if the target has been sacrificed, ignore this step. otherwise, add 1 to cult_fail cult_fail++ @@ -333,11 +333,11 @@ var/text = "Cultists escaped: [acolytes_survived]" - if(objectives.len) + if(cult_objectives.len) text += "
The cultists' objectives were:" - for(var/obj_count=1, obj_count <= objectives.len, obj_count++) + for(var/obj_count=1, obj_count <= cult_objectives.len, obj_count++) var/explanation - switch(objectives[obj_count]) + switch(cult_objectives[obj_count]) if("survive") if(!check_survive()) explanation = "Make sure at least [acolytes_needed] acolytes escape on the shuttle. Success!" diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index 4c4bf53a009..009dbb29d7e 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -476,6 +476,11 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology", if(!iscultist(user)) return ..() if(iscultist(M)) + if(M.reagents && M.reagents.has_reagent("holywater")) //allows cultists to be rescued from the clutches of ordained religion + user << "\blue You remove the taint from [M]." + var/holy2unholy = M.reagents.get_reagent_amount("holywater") + M.reagents.del_reagent("holywater") + M.reagents.add_reagent("unholywater",holy2unholy) return M.take_organ_damage(0,rand(5,20)) //really lucky - 5 hits for a crit for(var/mob/O in viewers(M, null)) diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index ac962a46c95..f387faa615b 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -152,12 +152,21 @@ var/list/sacrificed = list() /////////////////////////////////////////FOURTH RUNE tearreality() - var/cultist_count = 0 + var/list/mob/living/carbon/human/cultist_count = list() for(var/mob/M in range(1,src)) if(iscultist(M) && !M.stat) M.say("Tok-lyr rqa'nap g[pick("'","`")]lt-ulotf!") - cultist_count += 1 - if(cultist_count >= 9) + cultist_count += M + if(cultist_count.len >= 9) + if(ticker.mode.name == "cult") + if("eldergod" in ticker.mode.cult_objectives) + ticker.mode:eldergod = 0 + else + message_admins("[usr.real_name]([usr.ckey]) tried to summon a god when she didn't want to come out to play.") // Admin alert because you *KNOW* dickbutts are going to abuse this. + for(var/mob/M in cultist_count) + M.reagents.add_reagent("hell_water", 10) + M << "YOUR SOUL BURNS WITH YOUR ARROGANCE!!!" + return var/narsie_type = /obj/machinery/singularity/narsie/large // Moves narsie if she was already summoned. var/obj/her = locate(narsie_type, machines) @@ -166,8 +175,6 @@ var/list/sacrificed = list() return // Otherwise... new narsie_type(src.loc) // Summon her! - if(ticker.mode.name == "cult") - ticker.mode:eldergod = 0 del(src) // Stops cultists from spamming the rune to summon narsie more than once. return else diff --git a/code/game/objects/items/weapons/storage/bible.dm b/code/game/objects/items/weapons/storage/bible.dm index ec845fe45a1..4645aea2613 100644 --- a/code/game/objects/items/weapons/storage/bible.dm +++ b/code/game/objects/items/weapons/storage/bible.dm @@ -110,6 +110,11 @@ var/water2holy = A.reagents.get_reagent_amount("water") A.reagents.del_reagent("water") A.reagents.add_reagent("holywater",water2holy) + if(A.reagents && A.reagents.has_reagent("unholywater")) //yeah yeah, copy pasted code - sue me + user << "\blue You purify [A]." + var/unholy2clean = A.reagents.get_reagent_amount("unholywater") + A.reagents.del_reagent("unholywater") + A.reagents.add_reagent("cleaner",unholy2clean) //it cleans their soul, get it? I'll get my coat... /obj/item/weapon/storage/bible/attackby(obj/item/weapon/W as obj, mob/user as mob) playsound(src.loc, "rustle", 50, 1, -5) diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm index e7204e4f980..fec8d168357 100644 --- a/code/modules/mob/living/simple_animal/friendly/corgi.dm +++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm @@ -30,8 +30,8 @@ regenerate_icons() /mob/living/simple_animal/corgi/sac_act(var/obj/effect/rune/R, victim) - usr << "You horrible monster" - R.sac_grant_word() + user << "Even dark gods from another plane have standards, sicko." + usr.reagents.add_reagent("hell_water", 20) R.stone_or_gib(victim) diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 154474e3c85..c805357f6ef 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -263,14 +263,22 @@ datum if(!data) data = 1 data++ M.jitteriness = max(M.jitteriness-5,0) - if(data >= 30) + if(data >= 30) // 12 units, 54 seconds @ metabolism 0.4 units & tick rate 1.8 sec if (!M.stuttering) M.stuttering = 1 M.stuttering += 4 M.Dizzy(5) - if(data >= 30*2.5 && prob(33)) + if(iscultist(M) && prob(5)) + M.say(pick("Av'te Nar'sie","Pa'lid Mors","INO INO ORA ANA","SAT ANA!","Daim'niodeis Arc'iai Le'eones","Egkau'haom'nai en Chaous","Ho Diak'nos tou Ap'iron","R'ge Na'sie","Diabo us Vo'iscum","Si gn'um Co'nu")) + if(data >= 75 && prob(33)) // 30 units, 135 seconds if (!M.confused) M.confused = 1 M.confused += 3 - ..() + if(iscultist(M)) + ticker.mode.remove_cultist(M.mind) + holder.remove_reagent(src.id, src.volume) // maybe this is a little too perfect and a max() cap on the statuses would be better?? + M.jitteriness = 0 + M.stuttering = 0 + M.confused = 0 + holder.remove_reagent(src.id, 0.4) //fixed consumption to prevent balancing going out of whack return reaction_turf(var/turf/simulated/T, var/volume) @@ -281,6 +289,40 @@ datum del R T.Bless() + fuel/unholywater //if you somehow managed to extract this from someone, dont splash it on yourself and have a smoke + name = "Unholy Water" + id = "unholywater" + description = "Something that shouldn't exist on this plane of existance." + + on_mob_life(var/mob/living/M as mob) + M.adjustBrainLoss(3) + if(iscultist(M)) + M.drowsyness = max(M.drowsyness-5, 0) + M.AdjustParalysis(-2) + M.AdjustStunned(-2) + M.AdjustWeakened(-2) + else + M.adjustToxLoss(2) + M.adjustFireLoss(2) + M.adjustOxyLoss(2) + M.adjustBruteLoss(2) + holder.remove_reagent(src.id, 1) + + plasma/hellwater //if someone has this in their system they've really pissed off an eldrich god + name = "Hell Water" + id = "hell_water" + description = "YOUR FLESH! IT BURNS!" + + on_mob_life(var/mob/living/M as mob) + M.fire_stacks = min(10,M.fire_stacks + 4) + M.IgniteMob() //Only problem with igniting people is currently the commonly availible fire suits make you immune to being on fire + M.adjustToxLoss(1) + M.adjustFireLoss(1) //Hence the other damages... ain't I a bastard? + M.adjustOxyLoss(1) + M.adjustBruteLoss(1) + M.adjustBrainLoss(10) + holder.remove_reagent(src.id, 1) + lube name = "Space Lube" id = "lube" @@ -1092,7 +1134,7 @@ datum if(!M) M = holder.my_atom if(prob(5)) M.emote(pick("twitch","blink_r","shiver")) holder.remove_reagent(src.id, 0.5 * REAGENTS_METABOLISM) - ..() + // ..() //this was causing hyperzine to be consumed twice... return cryoxadone From 825f02f3d18880fbd74ef67cdf0c1e3cae8585a9 Mon Sep 17 00:00:00 2001 From: Malkevin Date: Sat, 22 Mar 2014 20:37:16 +0000 Subject: [PATCH 06/23] Changed the admin Traitor Panel command to make someone a cultist use the ticker proc - because its previous snowflake nature I wasted an hour wondering why something wasnt working.... bah Tidied the supplypacks up for consistant names and to avoid The Bureaucracy crate etc. Created an Innate Communication verb thats given to the cultists when converted and removed when deconverted. It possibly works with constructs but cant really test because the make constructs procs are all kinds of messed up. Anyway - they'll tear at their arms, smear blood on the floor, and communicate as normal per the rune. Its pretty rudimentry right now and could be improved in a few ways - see the comments. Added a link to open the Read Tome window on the Notes page as apparently alert() is limited to a whopping three choices. Added a built in communication system for the tomes, it works pretty much like the current communicate rune. Fixed a load of fucked up tabbing in ritual.dm, I don't know who to blame but I'm betting it was sadbutt. --- code/datums/mind.dm | 9 +- code/datums/supplypacks.dm | 28 ++- code/game/gamemodes/cult/cult.dm | 2 + code/game/gamemodes/cult/ritual.dm | 231 +++++++++++------- .../mob/living/carbon/human/human_movement.dm | 6 +- .../living/simple_animal/friendly/corgi.dm | 2 +- 6 files changed, 175 insertions(+), 103 deletions(-) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 02ff54ea341..dd692fda8bf 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -606,14 +606,7 @@ datum/mind log_admin("[key_name(usr)] has de-cult'ed [current].") if("cultist") if(!(src in ticker.mode.cult)) - ticker.mode.cult += src - ticker.mode.update_cult_icons_added(src) - special_role = "Cultist" - current << "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." - current << "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." - var/datum/game_mode/cult/cult = ticker.mode - if (istype(cult)) - cult.memorize_cult_objectives(src) + ticker.mode.add_cultist(src) message_admins("[key_name_admin(usr)] has cult'ed [current].") log_admin("[key_name(usr)] has cult'ed [current].") if("tome") diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index a51eea512db..43fb47fd603 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -122,7 +122,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine cost = 10 containertype = /obj/structure/closet/crate containername = "firefighting crate" - + /datum/supply_packs/emergency/atmostank name = "Firefighting Watertank" contains = list(/obj/item/weapon/watertank/atmos) @@ -747,7 +747,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine cost = 15 containertype = /obj/structure/closet/crate/hydroponics containername = "hydroponics crate" - + /datum/supply_packs/misc/hydroponics/hydrotank name = "Hydroponics Watertank Backpack Crate" contains = list(/obj/item/weapon/watertank) @@ -899,7 +899,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine /datum/supply_packs/misc/lasertag name = "LaserTag Crate" - contains = list(/obj/item/weapon/gun/energy/laser/redtag, + contains = list(/obj/item/weapon/gun/energy/laser/redtag, /obj/item/weapon/gun/energy/laser/redtag, /obj/item/weapon/gun/energy/laser/redtag, /obj/item/weapon/gun/energy/laser/bluetag, @@ -916,10 +916,24 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine cost = 15 containername = "LaserTag Crate" +/datum/supply_packs/misc/religious_supplies + name = "Religious Supplies Crate" + contains = list(/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, + /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, + /obj/item/weapon/storage/bible/booze, + /obj/item/weapon/storage/bible/booze, + /obj/item/clothing/suit/chaplain_hoodie, + /obj/item/clothing/head/chaplain_hood, + /obj/item/clothing/suit/chaplain_hoodie, + /obj/item/clothing/head/chaplain_hood) + cost = 40 // it costs so much because the Space Church is ran by Space Jews + containername = "religious supplies crate" + + ///////////// Paper Work /datum/supply_packs/misc/paper - name = "Bureaucracy crate" + name = "Bureaucracy Crate" contains = list(/obj/structure/filingcabinet/chestdrawer/wheeled, /obj/item/device/camera_film, /obj/item/weapon/hand_labeler, @@ -935,7 +949,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine /obj/item/weapon/clipboard, /obj/item/weapon/clipboard) cost = 15 - containername = "Bureaucracy crate" + containername = "bureaucracy crate" /datum/supply_packs/misc/toner name = "Toner Cartridges" @@ -976,7 +990,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine cost = 10 containertype = /obj/structure/largecrate containername = "janitorial cart crate" - + /datum/supply_packs/misc/janitor/janitank name = "Janitor Watertank Backpack Crate" contains = list(/obj/item/weapon/watertank/janitor) @@ -1101,4 +1115,4 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine /obj/item/clothing/under/suit_jacket/checkered, /obj/item/clothing/under/suit_jacket/tan) cost = 30 //Lots of very expensive items. You gotta pay up to look good! - containername = "formal-wear crate" + containername = "formal-wear crate" diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 2974d2321bb..e41cdb51c10 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -216,6 +216,7 @@ return 0 if(!(cult_mind in cult) && is_convertable_to_cult(cult_mind)) cult += cult_mind + cult_mind.current.cult_add_comm() update_cult_icons_added(cult_mind) cult_mind.current.attack_log += "\[[time_stamp()]\] Has been converted to the cult!" return 1 @@ -230,6 +231,7 @@ /datum/game_mode/proc/remove_cultist(datum/mind/cult_mind, show_message = 1) if(cult_mind in cult) cult -= cult_mind + cult_mind.current.verbs -= /mob/living/proc/cult_innate_comm 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) diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index 009dbb29d7e..a64e64268d4 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -24,6 +24,52 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology", runerandom() usr << "[wordtravel] is travel, [wordblood] is blood, [wordjoin] is join, [wordhell] is Hell, [worddestr] is destroy, [wordtech] is technology, [wordself] is self, [wordsee] is see, [wordother] is other, [wordhide] is hide." +/mob/proc/cult_add_comm() + verbs += /mob/living/proc/cult_innate_comm + +/mob/living/proc/cult_innate_comm() + set category = "Cultist" + set name = "Communicate" + + #define CHECK_STATUS (usr.stat || usr.restrained() || usr.paralysis || usr.stunned || usr.weakened) + + if(!iscultist(usr)) //they shouldn't have this verb, but just to be sure... + return + + if(CHECK_STATUS) + world << "STATUS CHECKS FAILED" + return //dead men tell no tales + + var/input = stripped_input(usr, "Please choose a message to tell to the other acolytes.", "Voice of Blood", "") + if(!input) // TO-DO: Add some kind of filter to corrupt the inputted text + return + + if(ishuman(usr) || ismonkey(usr)) //Damage only applies to humans and monkeys, to allow constructs to communicate + usr.visible_message("[usr.name] starts clawing at his arms like a mad man!") + apply_damage(25,BRUTE, "l_arm") + apply_damage(25,BRUTE, "r_arm") + sleep(50) + if(CHECK_STATUS) + return //Hard to drawn intrinsic symbols when you're bleeding out in your cell. + var/turf/location = loc + if(istype(location, /turf/simulated)) // tearing your arms apart is going to spill a bit of blood, in fact thats the idea + location.add_blood(usr) // TO-DO change this to a badly drawn rune + apply_damage(15,BRUTE, "l_arm") // does a metric fuck ton of damage because this meant to be an emergency method of communication. + apply_damage(15,BRUTE, "r_arm") + if(CHECK_STATUS) + return //dead men tell no tales + usr.visible_message("[usr.name] paints strange symbols with their own blood") + sleep(20) + + usr.say("O bidai nabora se[pick("'","`")]sma!") + sleep(10) + usr.say("[input]") + for(var/datum/mind/H in ticker.mode.cult) + if (H.current) + H.current << "\red \b [input]" + return + #undef CHECK_STATUS + /proc/runerandom() //randomizes word meaning var/list/runewords=list("ire","ego","nahlizet","certum","veri","jatkaa","mgar","balaq", "karazet", "geeri") ///"orkan" and "allaq" removed. @@ -314,6 +360,7 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology", var/tomedat = "" var/list/words = list("ire" = "ire", "ego" = "ego", "nahlizet" = "nahlizet", "certum" = "certum", "veri" = "veri", "jatkaa" = "jatkaa", "balaq" = "balaq", "mgar" = "mgar", "karazet" = "karazet", "geeri" = "geeri") + tomedat = {"