diff --git a/code/WorkInProgress/Chemistry-Reagents.dm b/code/WorkInProgress/Chemistry-Reagents.dm index eaeb9b31ab8..8fa80ebf625 100644 --- a/code/WorkInProgress/Chemistry-Reagents.dm +++ b/code/WorkInProgress/Chemistry-Reagents.dm @@ -924,6 +924,7 @@ datum if(!M) M = holder.my_atom M:eye_blurry = max(M:eye_blurry-5 , 0) M:eye_blind = max(M:eye_blind-5 , 0) + M:disabilities &= ~1 M:sdisabilities &= ~1 ..() return diff --git a/code/game/magic/cultist/runes.dm b/code/game/magic/cultist/runes.dm index 0d3d0a9031b..60bada135f7 100644 --- a/code/game/magic/cultist/runes.dm +++ b/code/game/magic/cultist/runes.dm @@ -1,886 +1,862 @@ -var/list/sacrificed = list() - -/obj/rune -/////////////////////////////////////////FIRST RUNE - proc - teleport(var/key) - var/allrunesloc[] - allrunesloc = new/list() - var/index = 0 - // var/tempnum = 0 - for(var/obj/rune/R in world) - if(R == src) - continue - if(R.word1 == wordtravel && R.word2 == wordself && R.word3 == key) - index++ - allrunesloc.len = index - allrunesloc[index] = R.loc - if(allrunesloc && index != 0) - if(istype(src,/obj/rune)) - usr.say("Sas'so c'arta forbici!") - else - usr.whisper("Sas'so c'arta forbici!") - usr.visible_message("\red [usr] disappears in a flash of red light!", \ - "\red You feel as your body gets dragged through the dimension of Nar-Sie!", \ - "\red You hear a sickening crunch and sloshing of viscera.") - usr.loc = allrunesloc[rand(1,index)] - return - if(istype(src,/obj/rune)) - return fizzle() //Use friggin manuals, Dorf, your list was of zero length. - else - call(/obj/rune/proc/fizzle)() - return - - - itemport(var/key) -// var/allrunesloc[] -// allrunesloc = new/list() -// var/index = 0 - // var/tempnum = 0 - var/culcount = 0 - var/obj/rune/IP = null - for(var/mob/living/carbon/human/C in orange(1,src)) - if(cultists.Find(C)) - culcount++ - for(var/obj/rune/R in world) - if(R == src) - continue - if(R.word1 == wordtravel && R.word2 == wordother && R.word3 == key) - IP = R - if(culcount>=3) - usr.say("Sas'so c'arta forbici tarem!") - usr.visible_message("\red You feel air moving from the rune - like as it was swapped with somewhere else.", \ - "\red You feel air moving from the rune - like as it was swapped with somewhere else.", \ - "\red You smell ozone.") - for(var/obj/O in src.loc) - if(!O.anchored) - O.loc = IP.loc - for(var/mob/M in src.loc) - M.loc = IP.loc - return - - return fizzle() - - -/////////////////////////////////////////SECOND RUNE - - tomesummon() - if(istype(src,/obj/rune)) - usr.say("N'ath reth sh'yro eth d'raggathnor!") - else - usr.whisper("N'ath reth sh'yro eth d'raggathnor!") - usr.visible_message("\red Rune disappears with a flash of red light, and in it's place now a book lies.", \ - "\red You are blinded by the flash of red light! After you're able to see again, you see that now instead of the rune there's a book.", \ - "\red You hear a pop and smell ozone.") - if(istype(src,/obj/rune)) - new /obj/item/weapon/tome(src.loc) - else - new /obj/item/weapon/tome(usr.loc) - del(src) - return - - - -/////////////////////////////////////////THIRD RUNE - - convert() - for(var/mob/living/carbon/human/M in src.loc) - if(cultists.Find(M)) - return fizzle() - if(M.stat==2) - return fizzle() - if(ticker.mode.name == "cult") - var/list/uncons = call(/datum/game_mode/cult/proc/get_unconvertables)() - if(M.mind in uncons) - return fizzle() - ticker.mode:add_cultist(M.mind) - usr.say("Mah'weyh pleggh at e'ntrath!") - 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.") - 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." - if (ticker.mode.name == "cult") - ticker.mode:grant_runeword(M) - cultists.Add(M) - return - return fizzle() - - - -/////////////////////////////////////////FOURTH RUNE - - tearreality() - var/cultist_count = 0 - for(var/mob/M in range(1,src)) - if(cultists.Find(M)) - M.say("Tok-lyr rqa'nap g'lt-ulotf!") - cultist_count += 1 - if(cultist_count >= 9) - var/obj/machinery/the_singularity/S = new /obj/machinery/the_singularity/(src.loc) - S.icon = 'magic_terror.dmi' - S.name = "Tear in the Fabric of Reality" - S.desc = "Your mind begins to bubble and ooze as it tries to comprehend what it sees." - S.pixel_x = -89 - S.pixel_y = -85 - if(ticker.mode.name == "cult") - ticker.mode:eldergod = 0 - return - else - return - -/////////////////////////////////////////FIFTH RUNE - - emp(var/U,var/range_red) //range_red - var which determines by which number to reduce the default emp range, U is the source loc, needed because of talisman emps which are held in hand at the moment of using and that apparently messes things up -- Urist - if(istype(src,/obj/rune)) - usr.say("Ta'gh fara'qha fel d'amar det!") - else - usr.whisper("Ta'gh fara'qha fel d'amar det!") - playsound(U, 'Welder2.ogg', 25, 1) - var/turf/T = get_turf(U) - if(T) - T.hotspot_expose(700,125) - - var/rune = src // detaching the proc - in theory - src = null - - var/obj/overlay/pulse = new/obj/overlay ( T ) - pulse.icon = 'effects.dmi' - pulse.icon_state = "emppulse" - pulse.name = "emp pulse" - pulse.anchored = 1 - spawn(20) - del(pulse) - - for(var/obj/item/weapon/W in range(world.view-range_red, T)) - - if (istype(W, /obj/item/assembly/m_i_ptank) || istype(W, /obj/item/assembly/r_i_ptank) || istype(W, /obj/item/assembly/t_i_ptank)) - - var/fuckthis - if(istype(W:part1,/obj/item/weapon/tank/plasma)) - fuckthis = W:part1 - fuckthis:ignite() - if(istype(W:part2,/obj/item/weapon/tank/plasma)) - fuckthis = W:part2 - fuckthis:ignite() - if(istype(W:part3,/obj/item/weapon/tank/plasma)) - fuckthis = W:part3 - fuckthis:ignite() - - - for(var/mob/living/M in viewers(world.view-range_red, T)) - - if(!istype(M, /mob/living)) continue - - if (istype(M, /mob/living/silicon)) - M.fireloss += 25 - flick("noise", M:flash) - M << "\red *BZZZT*" - M << "\red Warning: Electromagnetic pulse detected." - if(istype(M, /mob/living/silicon/ai)) - if (prob(30)) - switch(pick(1,2,3)) //Add Random laws. - if(1) - M:cancel_camera() - if(2) - M:lockdown() - if(3) - M:ai_call_shuttle() - continue - - - M << "\red Your equipment malfunctions." //Yeah, i realise that this WILL - //show if theyre not carrying anything - //that is affected. lazy. - if (locate(/obj/item/weapon/cloaking_device, M)) - for(var/obj/item/weapon/cloaking_device/S in M) - S.active = 0 - S.icon_state = "shield0" - - if (locate(/obj/item/weapon/gun/energy, M)) - for(var/obj/item/weapon/gun/energy/G in M) - G.charges = 0 - G.update_icon() - - if ((istype(M, /mob/living/carbon/human)) && (istype(M:glasses, /obj/item/clothing/glasses/thermal))) - M << "\red Your thermals malfunction." - M.eye_blind = 3 - M.eye_blurry = 5 - M.disabilities |= 1 - spawn(100) - M.disabilities &= ~1 - - if (locate(/obj/item/device/radio, M)) - for(var/obj/item/device/radio/R in M) //Add something for the intercoms. - R.broadcasting = 0 - R.listening = 0 - - if (locate(/obj/item/device/flash, M)) - for(var/obj/item/device/flash/F in M) //Add something for the intercoms. - F.attack_self() - - if (locate(/obj/item/weapon/baton, M)) - for(var/obj/item/weapon/baton/B in M) //Add something for the intercoms. - B.charges = 0 - - if(locate(/obj/item/clothing/under/chameleon, M)) - for(var/obj/item/clothing/under/chameleon/C in M) //Add something for the intercoms. - M << "\red Your jumpsuit malfunctions" - C.name = "psychedelic" - C.desc = "Groovy!" - C.icon_state = "psyche" - C.color = "psyche" - spawn(200) - C.name = "Black Jumpsuit" - C.icon_state = "bl_suit" - C.color = "black" - C.desc = null - - M << "\red BZZZT" - - - for(var/obj/machinery/A in range(world.view-range_red, T)) - A.use_power(7500) - - var/obj/overlay/pulse2 = new/obj/overlay ( A.loc ) - pulse2.icon = 'effects.dmi' - pulse2.icon_state = "empdisable" - pulse2.name = "emp sparks" - pulse2.anchored = 1 - pulse2.dir = pick(cardinal) - - spawn(10) - del(pulse2) - - if(istype(A, /obj/machinery/turret)) - A:enabled = 0 - A:lasers = 0 - A:power_change() - - if(istype(A, /obj/machinery/computer) && prob(20)) - A:set_broken() - - if(istype(A, /obj/machinery/firealarm) && prob(50)) - A:alarm() - - if(istype(A, /obj/machinery/power/smes)) - A:online = 0 - A:charging = 0 - A:output = 0 - A:charge -= 1e6 - if (A:charge < 0) - A:charge = 0 - spawn(100) - A:output = initial(A:output) - A:charging = initial(A:charging) - A:online = initial(A:online) - - if(istype(A, /obj/machinery/door)) - if(prob(20) && (istype(A,/obj/machinery/door/airlock) || istype(A,/obj/machinery/door/window)) ) - A:open() - if(prob(40)) - if(A:secondsElectrified != 0) continue - A:secondsElectrified = -1 - spawn(300) - A:secondsElectrified = 0 - - if(istype(A, /obj/machinery/power/apc)) - if(A:cell) - A:cell:charge -= 1000 - if (A:cell:charge < 0) - A:cell:charge = 0 - A:lighting = 0 - A:equipment = 0 - A:environ = 0 - spawn(600) - A:equipment = 3 - A:environ = 3 - - if(istype(A, /obj/machinery/camera)) - A.icon_state = "cameraemp" - A:network = null //Not the best way but it will do. I think. - spawn(900) - A:network = initial(A:network) - A:icon_state = initial(A:icon_state) - for(var/mob/living/silicon/ai/O in world) - if (O.current == A) - O.cancel_camera() - O << "Your connection to the camera has been lost." - for(var/mob/O in world) - if (istype(O.machine, /obj/machinery/computer/security)) - var/obj/machinery/computer/security/S = O.machine - if (S.current == A) - O.machine = null - S.current = null - O.reset_view(null) - O << "The screen bursts into static." - - if(istype(A, /obj/machinery/clonepod)) - A:malfunction() - del(rune) - return - -/////////////////////////////////////////SIXTH RUNE - - drain() - var/drain = 0 - for(var/obj/rune/R in world) - if(R.word1==wordtravel && R.word2==wordblood && R.word3==wordself) - for(var/mob/living/carbon/D in R.loc) - if(D.health>=-100) - var/bdrain = rand(1,25) - D << "\red You feel weakened." - D.bruteloss += bdrain - drain += bdrain - if(!drain) - return fizzle() - usr.say ("Yu'gular faras desdae. Havas mithum javara. Umathar uf'kal thenar!") - usr.visible_message("\red Blood flows from the rune into [usr]!", \ - "\red The blood starts flowing from the rune and into your frail mortal body. You feel... empowered.", \ - "\red You hear a liquid flowing.") - if(usr.bhunger) - usr.bhunger -= 2*drain - if(drain>=50) - usr.visible_message("\red [usr]'s eyes give off eerie red glow!", \ - "\red ...but it wasn't nearly enough. You crave, crave for more. The hunger consumes you from within.", \ - "\red You hear a heartbeat.") - usr.bhunger += drain - for (,usr.bhunger,usr.bhunger--) - sleep(50) - usr.bruteloss += 3 - usr.bruteloss -= drain - return - - - - - - -/////////////////////////////////////////SEVENTH RUNE - - seer() - if(usr.loc==src.loc) - usr.say("Rash'tla sektath mal'zua. Zasan therium vivira. Itonis al'ra matum!") - if(usr.see_invisible!=0 && usr.see_invisible!=15) - usr << "\red The world beyond flashes your eyes but disappears quickly, as if something is disrupting your vision." - else - usr << "\red The world beyond opens to your eyes." - usr.see_invisible = 15 - return - return fizzle() - -/////////////////////////////////////////EIGHTH RUNE - - raise() - for(var/mob/living/carbon/human/M in src.loc) - if(M.health<=-100) - for(var/obj/rune/R in world) - if(R.word1==wordblood && R.word2==wordjoin && R.word3==wordhell) - for(var/mob/living/carbon/human/N in R.loc) - if(N.health>-100 && N.client) - for(var/mob/dead/observer/O in src.loc) - if(M.key) - usr << "\red The body still has some earthly ties. It must sever them, if only for them to grow again later." - return - if(!O.key) - continue - M.key=O.key - del(O) - - //rejuvenatedheal(M) // Darem, this is just rejuvenation code that has been made into a proc. Look into rune8 file for the code itself. - if(istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - for(var/A in H.organs) - var/datum/organ/external/affecting = null - if(!H.organs[A]) continue - affecting = H.organs[A] - if(!istype(affecting, /datum/organ/external)) continue - affecting.heal_damage(1000, 1000) //fixes getting hit after ingestion, killing you when game updates organ health - H.UpdateDamageIcon() - M.fireloss = 0 - M.toxloss = 0 - M.bruteloss = 0 - M.oxyloss = 0 - M.paralysis = 0 - M.stunned = 0 - M.weakened = 0 - M.radiation = 0 - M.health = 100 - M.updatehealth() - M.buckled = initial(M.buckled) - M.handcuffed = initial(M.handcuffed) - if (M.stat > 1) - M.stat=0 - - usr.say("Pasnar val'keriam usinar. Savrae ines amutan. Yam'toth remium il'tarat!") - M.visible_message("\red [M]'s eyes glow with a faint red as he stands up, slowly starting to breathe again.", \ - "\red Life... I'm alive again...", \ - "\red You hear a faint, slightly familiar whisper.") - N.gib(1) - N.visible_message("\red [N] is torn apart, a black smoke swiftly dissipating from his remains!", \ - "\red You feel as your blood boils, tearing you apart.", \ - "\red You hear a thousand voices, all crying in pain.") - return - return fizzle() - - - - - -/////////////////////////////////////////NINETH RUNE - - obscure(var/rad) - var/S=0 - for(var/obj/rune/R in orange(rad,src)) - if(R!=src) - R.visibility=0 - S=1 - if(S) - if(istype(src,/obj/rune)) - usr.say("Kla'atu barada nikt'o!") - for (var/mob/V in viewers(src)) - V.show_message("\red The rune turns into gray dust, veiling the surrounding runes.", 3) - del(src) - else - usr.whisper("Kla'atu barada nikt'o!") - usr << "\red Your talisman turns into gray dust, veiling the surrounding runes." - for (var/mob/V in orange(1,src)) - if(V!=usr) - V.show_message("\red Dust emanates from [usr]'s hands for a moment.", 3) - - return - if(istype(src,/obj/rune)) - return fizzle() - else - call(/obj/rune/proc/fizzle)() - return - -/////////////////////////////////////////TENTH RUNE - - ajourney() //some bits copypastaed from admin tools - Urist - if(usr.loc==src.loc) - var/mob/living/carbon/human/L = usr - usr.say("Fwe'sh mah erl nyag r'ya!") - usr.ghostize() - usr.visible_message("\red [usr]'s eyes glow blue as \he freezes in place, absolutely motionless.", \ - "\red The shadow that is your spirit separates itself from your body. You are now in the realm beyond. While this it's a great sight, being here strains your mind and body. Hurry.", \ - "\red You hear only complete silence for a moment.") - for(L.ajourn=1,L.ajourn) - sleep(10) - if(L.key) - L.ajourn=0 - return - else - L.bruteloss++ - return fizzle() - - - - -/////////////////////////////////////////ELEVENTH RUNE - - manifest() - if(usr.loc==src.loc) - for(var/mob/dead/observer/O in src.loc) - usr.say("Gal'h'rfikk harfrandid mud'gib!") - var/mob/living/carbon/human/dummy/D = new /mob/living/carbon/human/dummy(src.loc) - usr.visible_message("\red A shape forms in the center of the rune. A shape of... a man.", \ - "\red A shape forms in the center of the rune. A shape of... a man.", \ - "\red You hear liquid flowing.") - D.real_name = "Unknown" - for(var/obj/item/weapon/paper/P in src.loc) - if(length(P.info)<=24) - D.real_name = P.info - D.universal_speak = 1 - D.nodamage = 0 - D.key = O.key - del(O) - for(,usr.loc==src.loc) - sleep(30) - if(usr.health>-100) - usr.bruteloss++ - else - break - D.visible_message("\red [D] slowly dissipates into dust and bones.", \ - "\red You feel pain, as bonds formed between your soul and this homunculus break.", \ - "\red You hear faint rustle.") - D.dust(1) - return - return fizzle() - - - - - -/////////////////////////////////////////TWELFTH RUNE - - talisman()//only hide, emp, teleport and tome runes can be imbued atm - for(var/obj/rune/R in orange(1,src)) - if(R==src) - continue - if(R.word1==wordtravel && R.word2==wordself) - for(var/obj/item/weapon/paper/P in src.loc) - if(P.info) - usr << "\red The blank is tainted. It is unsuitable." - return - 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]" - for (var/mob/V in viewers(src)) - V.show_message("\red The runes turn into dust, which then forms into an arcane image on the paper.", 3) - del(R) - del(src) - usr.say("H'drak v'loso, mir'kanas verbot!") - return - if(R.word1==wordsee && R.word2==wordblood && R.word3==wordhell) - for(var/obj/item/weapon/paper/P in src.loc) - if(P.info) - usr << "\red The blank is tainted. It is unsuitable." - return - del(P) - var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(src.loc) - T.imbue = "newtome" - for (var/mob/V in viewers(src)) - V.show_message("\red The runes turn into dust, which then forms into an arcane image on the paper.", 3) - del(R) - del(src) - usr.say("H'drak v'loso, mir'kanas verbot!") - return - if(R.word1==worddestr && R.word2==wordsee && R.word3==wordtech) - for(var/obj/item/weapon/paper/P in src.loc) - if(P.info) - usr << "\red The blank is tainted. It is unsuitable." - return - del(P) - var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(src.loc) - T.imbue = "emp" - for (var/mob/V in viewers(src)) - V.show_message("\red The runes turn into dust, which then forms into an arcane image on the paper.", 3) - del(R) - del(src) - usr.say("H'drak v'loso, mir'kanas verbot!") - return - if(R.word1==wordblood && R.word2==wordsee && R.word3==worddestr) - for(var/obj/item/weapon/paper/P in src.loc) - if(P.info) - usr << "\red The blank is tainted. It is unsuitable." - return - del(P) - var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(src.loc) - T.imbue = "conceal" - for (var/mob/V in viewers(src)) - V.show_message("\red The runes turn into dust, which then forms into an arcane image on the paper.", 3) - del(R) - del(src) - usr.say("H'drak v'loso, mir'kanas verbot!") - return - if(R.word1==worddestr && R.word2==wordsee && R.word3==wordblood) - for(var/obj/item/weapon/paper/P in src.loc) - if(P.info) - usr << "\red The blank is tainted. It is unsuitable." - return - del(P) - var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(src.loc) - T.imbue = "revealrunes" - for (var/mob/V in viewers(src)) - V.show_message("\red The runes turn into dust, which then forms into an arcane image on the paper.", 3) - del(R) - del(src) - usr.say("H'drak v'loso, mir'kanas verbot!") - return - if(R.word1==worddestr && R.word2==wordsee && R.word3==wordhear) - for(var/obj/item/weapon/paper/P in src.loc) - if(P.info) - usr << "\red The blank is tainted. It is unsuitable." - return - del(P) - var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(src.loc) - T.imbue = "deafen" - for (var/mob/V in viewers(src)) - V.show_message("\red The runes turn into dust, which then forms into an arcane image on the paper.", 3) - del(R) - del(src) - usr.say("H'drak v'loso, mir'kanas verbot!") - return - if(R.word1==worddestr && R.word2==wordsee && R.word3==wordother) - for(var/obj/item/weapon/paper/P in src.loc) - if(P.info) - usr << "\red The blank is tainted. It is unsuitable." - return - del(P) - var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(src.loc) - T.imbue = "blind" - for (var/mob/V in viewers(src)) - V.show_message("\red The runes turn into dust, which then forms into an arcane image on the paper.", 3) - del(R) - del(src) - usr.say("H'drak v'loso, mir'kanas verbot!") - return - return fizzle() - -/////////////////////////////////////////THIRTEENTH RUNE - - mend() - usr.say("Uhrast ka'hfa heldsagen ver'lot!") - usr.bruteloss+=200 - runedec+=5 - usr.visible_message("\red [usr] keels over dead, his blood glowing blue as it escapes his body and dissipates into thin air.", \ - "\red In the last moment of your humbly life, you feel as fabric of reality mends... with your blood.", \ - "\red You hear faint rustle.") - for(,usr.health<-100) - sleep(600) - runedec=0 - return - - - - -/////////////////////////////////////////FOURTEETH RUNE - - 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.", "Voice of Blood", "") - 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]" - del(src) - return - -/////////////////////////////////////////FIFTEENTH RUNE - - sacrifice() - var/culcount = 0 - for(var/mob/living/carbon/human/C in orange(1,src)) - if(cultists.Find(C)) - culcount++ - if(culcount>=3) - for(var/mob/living/carbon/human/S in src.loc) - if(ticker.mode.name == "cult") - if(S == ticker.mode:sacrifice_target.current)//Iunno, check if it's a target - sacrificed += S.mind - S.gib(1) - usr << "\red The Geometer of Blood accepts this sacrifice." - else - usr << "\red The Geometer of Blood does not accept this sacrifice." - return - return fizzle() - -/////////////////////////////////////////SIXTEENTH RUNE - - revealrunes(var/obj/W as obj) - var/go=0 - var/rad - var/S=0 - if(istype(W,/obj/rune)) - rad = 6 - go = 1 - if (istype(W,/obj/item/weapon/paper/talisman)) - rad = 4 - go = 1 - if (istype(W,/obj/item/weapon/storage/bible)) - rad = 1 - go = 1 - if(go) - for(var/obj/rune/R in orange(rad,src)) - if(R!=src) - R.visibility=15 - S=1 - if(S) - if(istype(W,/obj/item/weapon/storage/bible)) - usr << "\red Arcane markings suddenly glow from underneath a thin layer of dust!" - return - if(istype(W,/obj/rune)) - usr.say("Nikt'o barada kla'atu!") - for (var/mob/V in viewers(src)) - V.show_message("\red The rune turns into red dust, reveaing the surrounding runes.", 3) - del(src) - return - if(istype(W,/obj/item/weapon/paper/talisman)) - usr.whisper("Nikt'o barada kla'atu!") - usr << "\red Your talisman turns into red dust, revealing the surrounding runes." - for (var/mob/V in orange(1,usr.loc)) - if(V!=usr) - V.show_message("\red Red dust emanates from [usr]'s hands for a moment.", 3) - return - return - if(istype(W,/obj/rune)) - return fizzle() - if(istype(W,/obj/item/weapon/paper/talisman)) - call(/obj/rune/proc/fizzle)() - return - -/////////////////////////////////////////SEVENTEENTH RUNE - - wall() - usr.say("Khari'd! Eske'te tannin!") - src.density = !src.density - usr.bruteloss += 2 - if(src.density) - usr << "Your blood flows into the rune, and you feel that the very space over the rune thickens." - else - usr << "Your blood flows into the rune, and you feel as the rune releases its grasp on space." - return - -/////////////////////////////////////////EIGHTTEENTH RUNE - - freedom() - var/culcount = 0 - for(var/mob/living/carbon/human/C in orange(1,src)) - if(cultists.Find(C)) - culcount++ - if(culcount>=3) - var/mob/cultist = input("Choose the one who you want to free", "Followers of Geometer") as null|anything in (cultists - usr) - if(!cultist) - return fizzle() - if (cultist == usr) //just to be sure. - return - if(!cultist.buckled && !cultist.handcuffed) - usr << "The [cultist] is already free." - return - cultist.buckled = initial(cultist.buckled) - cultist.handcuffed = initial(cultist.handcuffed) - for(var/mob/living/carbon/human/C in orange(1,src)) - if(cultists.Find(C)) - C.bruteloss += 15 - C.say("Khari'd! Gual'te nikka!") - del(src) - return fizzle() - -/////////////////////////////////////////NINETEENTH RUNE - - cultsummon() - var/culcount = 0 - for(var/mob/living/carbon/human/C in orange(1,src)) - if(cultists.Find(C)) - culcount++ - if(culcount>=3) - var/mob/cultist = input("Choose the one who you want to summon", "Followers of Geometer") as null|anything in (cultists - usr) - if(!cultist) - return fizzle() - if (cultist == usr) //just to be sure. - return - if(cultist.buckled || cultist.handcuffed || (!isturf(cultist.loc) && !istype(cultist.loc, /obj/closet))) - usr << "You cannot summon the [cultist], for him shackles of blood are strong" - return fizzle() - cultist.loc = src.loc - for(var/mob/living/carbon/human/C in orange(1,src)) - if(cultists.Find(C)) - C.say("N'ath reth sh'yro eth d'rekkathnor!") - C.bruteloss += 25 - usr.visible_message("\red Rune disappears with a flash of red light, and in it's place now a body lies.", \ - "\red You are blinded by the flash of red light! After you're able to see again, you see that now instead of the rune there's a body.", \ - "\red You hear a pop and smell ozone.") - del(src) - return fizzle() - -/////////////////////////////////////////TWENTIETH RUNES - - deafen() - if(istype(src,/obj/rune)) - var/affected = 0 - for(var/mob/living/carbon/C in viewers(src)) - if (cultists.Find(C)) - continue - C.ear_deaf += 30 - C.show_message("\red World around you suddenly becomes quiet.", 3) - affected++ - if(affected) - usr.say("Sti' kaliedir!") - usr << "World becomes quiet as deafening rune dissipates into fine dust." - del(src) - else - return fizzle() - else - usr.whisper("Sti' kaliedir!") - usr << "\red Your talisman turns into gray dust, deafening everyone around." - for(var/mob/living/carbon/C in viewers(usr)) - if (cultists.Find(C)) - continue - C.ear_deaf += 30 - C.show_message("\red World around you suddenly becomes quiet.", 3) - for (var/mob/V in orange(1,src)) - if(!cultists.Find(V)) - V.show_message("\red Dust flows from [usr]'s hands for a moment, and the world suddenly becomes quiet..", 3) - return - - blind() - if(istype(src,/obj/rune)) - var/affected = 0 - for(var/mob/living/carbon/C in viewers(src)) - if (cultists.Find(C)) - continue - C.eye_blurry += 30 - C.eye_blind += 10 - C.show_message("\red Suddenly you see red flash, that blinds you.", 3) - affected++ - if(affected) - usr.say("Sti' kaliesin!") - usr << "Rune flashes, blinding those who not follow the Nar-Sie. and dissipates into fine dust." - del(src) - else - return fizzle() - else - usr.whisper("Sti' kaliesin!") - usr << "\red Your talisman turns into gray dust, blinding those who not follow the Nar-Sie." - for(var/mob/living/carbon/C in viewers(usr)) - if (cultists.Find(C)) - continue - C.eye_blurry += 30 - C.eye_blind += 10 - C.show_message("\red You feel sharp pain in your eyes, and the world disappears into darkness..", 3) - return - - - bloodboil() //cultists need at least one DANGEROUS rune. Even if they're all stealthy. - var/culcount = 0 //also, wording for it is old wording for obscure rune, which is now hide-see-blood. - var/list/cultboil = list(cultists-usr) //and for this words are destroy-see-blood. - for(var/mob/living/carbon/human/C in orange(1,src)) - if(cultists.Find(C)) - culcount++ - if(culcount>=2) - for(var/mob/living/carbon/M in viewers(usr)) - if(cultboil.Find(M)) - continue - M.bruteloss += 51 - M.fireloss += 51 - M << "\red Your blood boils!" - if(prob(5)) - spawn(5) - M.gib(1) - for(var/obj/rune/R in viewers(src)) - if(prob(10)) - explosion(R.loc, -1, 0, 1, 5) - del(src) - else - return fizzle() - return - -// WIP rune, I'll wait for Rastaf0 to add limited blood. - - burningblood() - var/culcount = 0 - for(var/mob/living/carbon/human/C in orange(1,src)) - if(cultists.Find(C)) - culcount++ - if(culcount >= 5) - for(var/obj/rune/R in world) - if(R.blood_DNA == src.blood_DNA && R.blood_type == src.blood_type) - for(var/mob/M in orange(2,R)) - M.fireloss += 15 - M << "Rune suddenly ignites, burning you!" - for(var/obj/decal/cleanable/blood/B in world) - if(B.blood_DNA == src.blood_DNA && B.blood_type == src.blood_type) - for(var/mob/M in orange(1,B)) - M.fireloss += 5 - M << "Blood suddenly ignites, burning you!" - del(B) +var/list/sacrificed = list() + +/obj/rune +/////////////////////////////////////////FIRST RUNE + proc + teleport(var/key) + var/allrunesloc[] + allrunesloc = new/list() + var/index = 0 + // var/tempnum = 0 + for(var/obj/rune/R in world) + if(R == src) + continue + if(R.word1 == wordtravel && R.word2 == wordself && R.word3 == key) + index++ + allrunesloc.len = index + allrunesloc[index] = R.loc + if(allrunesloc && index != 0) + if(istype(src,/obj/rune)) + usr.say("Sas'so c'arta forbici!") + else + usr.whisper("Sas'so c'arta forbici!") + usr.visible_message("\red [usr] disappears in a flash of red light!", \ + "\red You feel as your body gets dragged through the dimension of Nar-Sie!", \ + "\red You hear a sickening crunch and sloshing of viscera.") + usr.loc = allrunesloc[rand(1,index)] + return + if(istype(src,/obj/rune)) + return fizzle() //Use friggin manuals, Dorf, your list was of zero length. + else + call(/obj/rune/proc/fizzle)() + return + + + itemport(var/key) +// var/allrunesloc[] +// allrunesloc = new/list() +// var/index = 0 + // var/tempnum = 0 + var/culcount = 0 + var/obj/rune/IP = null + for(var/mob/living/carbon/human/C in orange(1,src)) + if(cultists.Find(C)) + culcount++ + for(var/obj/rune/R in world) + if(R == src) + continue + if(R.word1 == wordtravel && R.word2 == wordother && R.word3 == key) + IP = R + if(culcount>=3) + usr.say("Sas'so c'arta forbici tarem!") + usr.visible_message("\red You feel air moving from the rune - like as it was swapped with somewhere else.", \ + "\red You feel air moving from the rune - like as it was swapped with somewhere else.", \ + "\red You smell ozone.") + for(var/obj/O in src.loc) + if(!O.anchored) + O.loc = IP.loc + for(var/mob/M in src.loc) + M.loc = IP.loc + return + + return fizzle() + + +/////////////////////////////////////////SECOND RUNE + + tomesummon() + if(istype(src,/obj/rune)) + usr.say("N'ath reth sh'yro eth d'raggathnor!") + else + usr.whisper("N'ath reth sh'yro eth d'raggathnor!") + usr.visible_message("\red Rune disappears with a flash of red light, and in it's place now a book lies.", \ + "\red You are blinded by the flash of red light! After you're able to see again, you see that now instead of the rune there's a book.", \ + "\red You hear a pop and smell ozone.") + if(istype(src,/obj/rune)) + new /obj/item/weapon/tome(src.loc) + else + new /obj/item/weapon/tome(usr.loc) + del(src) + return + + + +/////////////////////////////////////////THIRD RUNE + + convert() + for(var/mob/living/carbon/human/M in src.loc) + if(cultists.Find(M)) + return fizzle() + if(M.stat==2) + return fizzle() + if(ticker.mode.name == "cult") + var/list/uncons = call(/datum/game_mode/cult/proc/get_unconvertables)() + if(M.mind in uncons) + return fizzle() + ticker.mode:add_cultist(M.mind) + usr.say("Mah'weyh pleggh at e'ntrath!") + 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.") + 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." + if (ticker.mode.name == "cult") + ticker.mode:grant_runeword(M) + cultists.Add(M) + return + return fizzle() + + + +/////////////////////////////////////////FOURTH RUNE + + tearreality() + var/cultist_count = 0 + for(var/mob/M in range(1,src)) + if(cultists.Find(M)) + M.say("Tok-lyr rqa'nap g'lt-ulotf!") + cultist_count += 1 + if(cultist_count >= 9) + var/obj/machinery/the_singularity/S = new /obj/machinery/the_singularity/(src.loc) + S.icon = 'magic_terror.dmi' + S.name = "Tear in the Fabric of Reality" + S.desc = "Your mind begins to bubble and ooze as it tries to comprehend what it sees." + S.pixel_x = -89 + S.pixel_y = -85 + if(ticker.mode.name == "cult") + ticker.mode:eldergod = 0 + return + else + return + +/////////////////////////////////////////FIFTH RUNE + + emp(var/U,var/range_red) //range_red - var which determines by which number to reduce the default emp range, U is the source loc, needed because of talisman emps which are held in hand at the moment of using and that apparently messes things up -- Urist + if(istype(src,/obj/rune)) + usr.say("Ta'gh fara'qha fel d'amar det!") + else + usr.whisper("Ta'gh fara'qha fel d'amar det!") + playsound(U, 'Welder2.ogg', 25, 1) + var/turf/T = get_turf(U) + if(T) + T.hotspot_expose(700,125) + + var/rune = src // detaching the proc - in theory + src = null + + var/obj/overlay/pulse = new/obj/overlay ( T ) + pulse.icon = 'effects.dmi' + pulse.icon_state = "emppulse" + pulse.name = "emp pulse" + pulse.anchored = 1 + spawn(20) + del(pulse) + + for(var/obj/item/weapon/W in range(world.view-range_red, T)) + + if (istype(W, /obj/item/assembly/m_i_ptank) || istype(W, /obj/item/assembly/r_i_ptank) || istype(W, /obj/item/assembly/t_i_ptank)) + + var/fuckthis + if(istype(W:part1,/obj/item/weapon/tank/plasma)) + fuckthis = W:part1 + fuckthis:ignite() + if(istype(W:part2,/obj/item/weapon/tank/plasma)) + fuckthis = W:part2 + fuckthis:ignite() + if(istype(W:part3,/obj/item/weapon/tank/plasma)) + fuckthis = W:part3 + fuckthis:ignite() + + + for(var/mob/living/M in viewers(world.view-range_red, T)) + + if(!istype(M, /mob/living)) continue + + if (istype(M, /mob/living/silicon)) + M.fireloss += 25 + flick("noise", M:flash) + M << "\red *BZZZT*" + M << "\red Warning: Electromagnetic pulse detected." + if(istype(M, /mob/living/silicon/ai)) + if (prob(30)) + switch(pick(1,2,3)) //Add Random laws. + if(1) + M:cancel_camera() + if(2) + M:lockdown() + if(3) + M:ai_call_shuttle() + continue + + + M << "\red Your equipment malfunctions." //Yeah, i realise that this WILL + //show if theyre not carrying anything + //that is affected. lazy. + if (locate(/obj/item/weapon/cloaking_device, M)) + for(var/obj/item/weapon/cloaking_device/S in M) + S.active = 0 + S.icon_state = "shield0" + + if (locate(/obj/item/weapon/gun/energy, M)) + for(var/obj/item/weapon/gun/energy/G in M) + G.charges = 0 + G.update_icon() + + if ((istype(M, /mob/living/carbon/human)) && (istype(M:glasses, /obj/item/clothing/glasses/thermal))) + M << "\red Your thermals malfunction." + M.eye_blind = 3 + M.eye_blurry = 5 + M.disabilities |= 1 + spawn(100) + M.disabilities &= ~1 + + if (locate(/obj/item/device/radio, M)) + for(var/obj/item/device/radio/R in M) //Add something for the intercoms. + R.broadcasting = 0 + R.listening = 0 + + if (locate(/obj/item/device/flash, M)) + for(var/obj/item/device/flash/F in M) //Add something for the intercoms. + F.attack_self() + + if (locate(/obj/item/weapon/baton, M)) + for(var/obj/item/weapon/baton/B in M) //Add something for the intercoms. + B.charges = 0 + + if(locate(/obj/item/clothing/under/chameleon, M)) + for(var/obj/item/clothing/under/chameleon/C in M) //Add something for the intercoms. + M << "\red Your jumpsuit malfunctions" + C.name = "psychedelic" + C.desc = "Groovy!" + C.icon_state = "psyche" + C.color = "psyche" + spawn(200) + C.name = "Black Jumpsuit" + C.icon_state = "bl_suit" + C.color = "black" + C.desc = null + + M << "\red BZZZT" + + + for(var/obj/machinery/A in range(world.view-range_red, T)) + A.use_power(7500) + + var/obj/overlay/pulse2 = new/obj/overlay ( A.loc ) + pulse2.icon = 'effects.dmi' + pulse2.icon_state = "empdisable" + pulse2.name = "emp sparks" + pulse2.anchored = 1 + pulse2.dir = pick(cardinal) + + spawn(10) + del(pulse2) + + if(istype(A, /obj/machinery/turret)) + A:enabled = 0 + A:lasers = 0 + A:power_change() + + if(istype(A, /obj/machinery/computer) && prob(20)) + A:set_broken() + + if(istype(A, /obj/machinery/firealarm) && prob(50)) + A:alarm() + + if(istype(A, /obj/machinery/power/smes)) + A:online = 0 + A:charging = 0 + A:output = 0 + A:charge -= 1e6 + if (A:charge < 0) + A:charge = 0 + spawn(100) + A:output = initial(A:output) + A:charging = initial(A:charging) + A:online = initial(A:online) + + if(istype(A, /obj/machinery/door)) + if(prob(20) && (istype(A,/obj/machinery/door/airlock) || istype(A,/obj/machinery/door/window)) ) + A:open() + if(prob(40)) + if(A:secondsElectrified != 0) continue + A:secondsElectrified = -1 + spawn(300) + A:secondsElectrified = 0 + + if(istype(A, /obj/machinery/power/apc)) + if(A:cell) + A:cell:charge -= 1000 + if (A:cell:charge < 0) + A:cell:charge = 0 + A:lighting = 0 + A:equipment = 0 + A:environ = 0 + spawn(600) + A:equipment = 3 + A:environ = 3 + + if(istype(A, /obj/machinery/camera)) + A.icon_state = "cameraemp" + A:network = null //Not the best way but it will do. I think. + spawn(900) + A:network = initial(A:network) + A:icon_state = initial(A:icon_state) + for(var/mob/living/silicon/ai/O in world) + if (O.current == A) + O.cancel_camera() + O << "Your connection to the camera has been lost." + for(var/mob/O in world) + if (istype(O.machine, /obj/machinery/computer/security)) + var/obj/machinery/computer/security/S = O.machine + if (S.current == A) + O.machine = null + S.current = null + O.reset_view(null) + O << "The screen bursts into static." + + if(istype(A, /obj/machinery/clonepod)) + A:malfunction() + del(rune) + return + +/////////////////////////////////////////SIXTH RUNE + + drain() + var/drain = 0 + for(var/obj/rune/R in world) + if(R.word1==wordtravel && R.word2==wordblood && R.word3==wordself) + for(var/mob/living/carbon/D in R.loc) + if(D.health>=-100) + var/bdrain = rand(1,25) + D << "\red You feel weakened." + D.bruteloss += bdrain + drain += bdrain + if(!drain) + return fizzle() + usr.say ("Yu'gular faras desdae. Havas mithum javara. Umathar uf'kal thenar!") + usr.visible_message("\red Blood flows from the rune into [usr]!", \ + "\red The blood starts flowing from the rune and into your frail mortal body. You feel... empowered.", \ + "\red You hear a liquid flowing.") + if(usr.bhunger) + usr.bhunger -= 2*drain + if(drain>=50) + usr.visible_message("\red [usr]'s eyes give off eerie red glow!", \ + "\red ...but it wasn't nearly enough. You crave, crave for more. The hunger consumes you from within.", \ + "\red You hear a heartbeat.") + usr.bhunger += drain + for (,usr.bhunger,usr.bhunger--) + sleep(50) + usr.bruteloss += 3 + usr.bruteloss -= drain + return + + + + + + +/////////////////////////////////////////SEVENTH RUNE + + seer() + if(usr.loc==src.loc) + usr.say("Rash'tla sektath mal'zua. Zasan therium vivira. Itonis al'ra matum!") + if(usr.see_invisible!=0 && usr.see_invisible!=15) + usr << "\red The world beyond flashes your eyes but disappears quickly, as if something is disrupting your vision." + else + usr << "\red The world beyond opens to your eyes." + usr.see_invisible = 15 + return + return fizzle() + +/////////////////////////////////////////EIGHTH RUNE + + raise() + for(var/mob/living/carbon/human/M in src.loc) + if(M.health<=-100) + for(var/obj/rune/R in world) + if(R.word1==wordblood && R.word2==wordjoin && R.word3==wordhell) + for(var/mob/living/carbon/human/N in R.loc) + if(N.health>-100 && N.client) + for(var/mob/dead/observer/O in src.loc) + if(M.key) + usr << "\red The body still has some earthly ties. It must sever them, if only for them to grow again later." + return + if(!O.key) + continue + M.key=O.key + del(O) + + rejuvenatedheal(M) // Darem, this is just rejuvenation code that has been made into a proc. Look into rune8 file for the code itself. + usr.say("Pasnar val'keriam usinar. Savrae ines amutan. Yam'toth remium il'tarat!") + M.visible_message("\red [M]'s eyes glow with a faint red as he stands up, slowly starting to breathe again.", \ + "\red Life... I'm alive again...", \ + "\red You hear a faint, slightly familiar whisper.") + N.gib(1) + N.visible_message("\red [N] is torn apart, a black smoke swiftly dissipating from his remains!", \ + "\red You feel as your blood boils, tearing you apart.", \ + "\red You hear a thousand voices, all crying in pain.") + return + return fizzle() + + + + + +/////////////////////////////////////////NINETH RUNE + + obscure(var/rad) + var/S=0 + for(var/obj/rune/R in orange(rad,src)) + if(R!=src) + R.visibility=0 + S=1 + if(S) + if(istype(src,/obj/rune)) + usr.say("Kla'atu barada nikt'o!") + for (var/mob/V in viewers(src)) + V.show_message("\red The rune turns into gray dust, veiling the surrounding runes.", 3) + del(src) + else + usr.whisper("Kla'atu barada nikt'o!") + usr << "\red Your talisman turns into gray dust, veiling the surrounding runes." + for (var/mob/V in orange(1,src)) + if(V!=usr) + V.show_message("\red Dust emanates from [usr]'s hands for a moment.", 3) + + return + if(istype(src,/obj/rune)) + return fizzle() + else + call(/obj/rune/proc/fizzle)() + return + +/////////////////////////////////////////TENTH RUNE + + ajourney() //some bits copypastaed from admin tools - Urist + if(usr.loc==src.loc) + var/mob/living/carbon/human/L = usr + usr.say("Fwe'sh mah erl nyag r'ya!") + usr.ghostize() + usr.visible_message("\red [usr]'s eyes glow blue as \he freezes in place, absolutely motionless.", \ + "\red The shadow that is your spirit separates itself from your body. You are now in the realm beyond. While this it's a great sight, being here strains your mind and body. Hurry.", \ + "\red You hear only complete silence for a moment.") + for(L.ajourn=1,L.ajourn) + sleep(10) + if(L.key) + L.ajourn=0 + return + else + L.bruteloss++ + return fizzle() + + + + +/////////////////////////////////////////ELEVENTH RUNE + + manifest() + if(usr.loc==src.loc) + for(var/mob/dead/observer/O in src.loc) + usr.say("Gal'h'rfikk harfrandid mud'gib!") + var/mob/living/carbon/human/dummy/D = new /mob/living/carbon/human/dummy(src.loc) + usr.visible_message("\red A shape forms in the center of the rune. A shape of... a man.", \ + "\red A shape forms in the center of the rune. A shape of... a man.", \ + "\red You hear liquid flowing.") + D.real_name = "Unknown" + for(var/obj/item/weapon/paper/P in src.loc) + if(length(P.info)<=24) + D.real_name = P.info + D.universal_speak = 1 + D.nodamage = 0 + D.key = O.key + del(O) + for(,usr.loc==src.loc) + sleep(30) + if(usr.health>-100) + usr.bruteloss++ + else + break + D.visible_message("\red [D] slowly dissipates into dust and bones.", \ + "\red You feel pain, as bonds formed between your soul and this homunculus break.", \ + "\red You hear faint rustle.") + D.dust(1) + return + return fizzle() + + + + + +/////////////////////////////////////////TWELFTH RUNE + + talisman()//only hide, emp, teleport and tome runes can be imbued atm + for(var/obj/rune/R in orange(1,src)) + if(R==src) + continue + if(R.word1==wordtravel && R.word2==wordself) + for(var/obj/item/weapon/paper/P in src.loc) + if(P.info) + usr << "\red The blank is tainted. It is unsuitable." + return + 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]" + for (var/mob/V in viewers(src)) + V.show_message("\red The runes turn into dust, which then forms into an arcane image on the paper.", 3) + del(R) + del(src) + usr.say("H'drak v'loso, mir'kanas verbot!") + return + if(R.word1==wordsee && R.word2==wordblood && R.word3==wordhell) + for(var/obj/item/weapon/paper/P in src.loc) + if(P.info) + usr << "\red The blank is tainted. It is unsuitable." + return + del(P) + var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(src.loc) + T.imbue = "newtome" + for (var/mob/V in viewers(src)) + V.show_message("\red The runes turn into dust, which then forms into an arcane image on the paper.", 3) + del(R) + del(src) + usr.say("H'drak v'loso, mir'kanas verbot!") + return + if(R.word1==worddestr && R.word2==wordsee && R.word3==wordtech) + for(var/obj/item/weapon/paper/P in src.loc) + if(P.info) + usr << "\red The blank is tainted. It is unsuitable." + return + del(P) + var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(src.loc) + T.imbue = "emp" + for (var/mob/V in viewers(src)) + V.show_message("\red The runes turn into dust, which then forms into an arcane image on the paper.", 3) + del(R) + del(src) + usr.say("H'drak v'loso, mir'kanas verbot!") + return + if(R.word1==wordblood && R.word2==wordsee && R.word3==worddestr) + for(var/obj/item/weapon/paper/P in src.loc) + if(P.info) + usr << "\red The blank is tainted. It is unsuitable." + return + del(P) + var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(src.loc) + T.imbue = "conceal" + for (var/mob/V in viewers(src)) + V.show_message("\red The runes turn into dust, which then forms into an arcane image on the paper.", 3) + del(R) + del(src) + usr.say("H'drak v'loso, mir'kanas verbot!") + return + if(R.word1==worddestr && R.word2==wordsee && R.word3==wordblood) + for(var/obj/item/weapon/paper/P in src.loc) + if(P.info) + usr << "\red The blank is tainted. It is unsuitable." + return + del(P) + var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(src.loc) + T.imbue = "revealrunes" + for (var/mob/V in viewers(src)) + V.show_message("\red The runes turn into dust, which then forms into an arcane image on the paper.", 3) + del(R) + del(src) + usr.say("H'drak v'loso, mir'kanas verbot!") + return + if(R.word1==worddestr && R.word2==wordsee && R.word3==wordhear) + for(var/obj/item/weapon/paper/P in src.loc) + if(P.info) + usr << "\red The blank is tainted. It is unsuitable." + return + del(P) + var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(src.loc) + T.imbue = "deafen" + for (var/mob/V in viewers(src)) + V.show_message("\red The runes turn into dust, which then forms into an arcane image on the paper.", 3) + del(R) + del(src) + usr.say("H'drak v'loso, mir'kanas verbot!") + return + if(R.word1==worddestr && R.word2==wordsee && R.word3==wordother) + for(var/obj/item/weapon/paper/P in src.loc) + if(P.info) + usr << "\red The blank is tainted. It is unsuitable." + return + del(P) + var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(src.loc) + T.imbue = "blind" + for (var/mob/V in viewers(src)) + V.show_message("\red The runes turn into dust, which then forms into an arcane image on the paper.", 3) + del(R) + del(src) + usr.say("H'drak v'loso, mir'kanas verbot!") + return + return fizzle() + +/////////////////////////////////////////THIRTEENTH RUNE + + mend() + usr.say("Uhrast ka'hfa heldsagen ver'lot!") + usr.bruteloss+=200 + runedec+=5 + usr.visible_message("\red [usr] keels over dead, his blood glowing blue as it escapes his body and dissipates into thin air.", \ + "\red In the last moment of your humbly life, you feel as fabric of reality mends... with your blood.", \ + "\red You hear faint rustle.") + for(,usr.health<-100) + sleep(600) + runedec=0 + return + + + + +/////////////////////////////////////////FOURTEETH RUNE + + 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.", "Voice of Blood", "") + 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]" + del(src) + return + +/////////////////////////////////////////FIFTEENTH RUNE + + sacrifice() + var/culcount = 0 + for(var/mob/living/carbon/human/C in orange(1,src)) + if(cultists.Find(C)) + culcount++ + if(culcount>=3) + for(var/mob/living/carbon/human/S in src.loc) + if(ticker.mode.name == "cult") + if(S == ticker.mode:sacrifice_target.current)//Iunno, check if it's a target + sacrificed += S.mind + S.gib(1) + usr << "\red The Geometer of Blood accepts this sacrifice." + else + usr << "\red The Geometer of Blood does not accept this sacrifice." + return + return fizzle() + +/////////////////////////////////////////SIXTEENTH RUNE + + revealrunes(var/obj/W as obj) + var/go=0 + var/rad + var/S=0 + if(istype(W,/obj/rune)) + rad = 6 + go = 1 + if (istype(W,/obj/item/weapon/paper/talisman)) + rad = 4 + go = 1 + if (istype(W,/obj/item/weapon/storage/bible)) + rad = 1 + go = 1 + if(go) + for(var/obj/rune/R in orange(rad,src)) + if(R!=src) + R.visibility=15 + S=1 + if(S) + if(istype(W,/obj/item/weapon/storage/bible)) + usr << "\red Arcane markings suddenly glow from underneath a thin layer of dust!" + return + if(istype(W,/obj/rune)) + usr.say("Nikt'o barada kla'atu!") + for (var/mob/V in viewers(src)) + V.show_message("\red The rune turns into red dust, reveaing the surrounding runes.", 3) + del(src) + return + if(istype(W,/obj/item/weapon/paper/talisman)) + usr.whisper("Nikt'o barada kla'atu!") + usr << "\red Your talisman turns into red dust, revealing the surrounding runes." + for (var/mob/V in orange(1,usr.loc)) + if(V!=usr) + V.show_message("\red Red dust emanates from [usr]'s hands for a moment.", 3) + return + return + if(istype(W,/obj/rune)) + return fizzle() + if(istype(W,/obj/item/weapon/paper/talisman)) + call(/obj/rune/proc/fizzle)() + return + +/////////////////////////////////////////SEVENTEENTH RUNE + + wall() + usr.say("Khari'd! Eske'te tannin!") + src.density = !src.density + usr.bruteloss += 2 + if(src.density) + usr << "\red Your blood flows into the rune, and you feel that the very space over the rune thickens." + else + usr << "\red Your blood flows into the rune, and you feel as the rune releases its grasp on space." + return + +/////////////////////////////////////////EIGHTTEENTH RUNE + + freedom() + var/culcount = 0 + for(var/mob/living/carbon/human/C in orange(1,src)) + if(cultists.Find(C)) + culcount++ + if(culcount>=3) + var/mob/cultist = input("Choose the one who you want to free", "Followers of Geometer") as null|anything in (cultists - usr) + if(!cultist) + return fizzle() + if (cultist == usr) //just to be sure. + return + if(!cultist.buckled && !cultist.handcuffed) + usr << "\red The [cultist] is already free." + return + cultist.buckled = initial(cultist.buckled) + cultist.handcuffed = initial(cultist.handcuffed) + for(var/mob/living/carbon/human/C in orange(1,src)) + if(cultists.Find(C)) + C.bruteloss += 15 + C.say("Khari'd! Gual'te nikka!") + del(src) + return fizzle() + +/////////////////////////////////////////NINETEENTH RUNE + + cultsummon() + var/culcount = 0 + for(var/mob/living/carbon/human/C in orange(1,src)) + if(cultists.Find(C)) + culcount++ + if(culcount>=3) + var/mob/cultist = input("Choose the one who you want to summon", "Followers of Geometer") as null|anything in (cultists - usr) + if(!cultist) + return fizzle() + if (cultist == usr) //just to be sure. + return + if(cultist.buckled || cultist.handcuffed || (!isturf(cultist.loc) && !istype(cultist.loc, /obj/closet))) + usr << "\red You cannot summon the [cultist], for him shackles of blood are strong" + return fizzle() + cultist.loc = src.loc + for(var/mob/living/carbon/human/C in orange(1,src)) + if(cultists.Find(C)) + C.say("N'ath reth sh'yro eth d'rekkathnor!") + C.bruteloss += 25 + usr.visible_message("\red Rune disappears with a flash of red light, and in it's place now a body lies.", \ + "\red You are blinded by the flash of red light! After you're able to see again, you see that now instead of the rune there's a body.", \ + "\red You hear a pop and smell ozone.") + del(src) + return fizzle() + +/////////////////////////////////////////TWENTIETH RUNES + + deafen() + if(istype(src,/obj/rune)) + var/affected = 0 + for(var/mob/living/carbon/C in range(7,src)) + if (cultists.Find(C)) + continue + C.ear_deaf += 30 + C.show_message("\red World around you suddenly becomes quiet.", 3) + affected++ + if(affected) + usr.say("Sti' kaliedir!") + usr << "\red World becomes quiet as deafening rune dissipates into fine dust." + del(src) + else + return fizzle() + else + usr.whisper("Sti' kaliedir!") + usr << "\red Your talisman turns into gray dust, deafening everyone around." + for(var/mob/living/carbon/C in range(7,usr)) + if (cultists.Find(C)) + continue + C.ear_deaf += 30 + C.show_message("\red World around you suddenly becomes quiet.", 3) + for (var/mob/V in orange(1,src)) + if(!cultists.Find(V)) + V.show_message("\red Dust flows from [usr]'s hands for a moment, and the world suddenly becomes quiet..", 3) + return + + blind() + if(istype(src,/obj/rune)) + var/affected = 0 + for(var/mob/living/carbon/C in viewers(src)) + if (cultists.Find(C)) + continue + C.eye_blurry += 30 + C.eye_blind += 10 + C.show_message("\red Suddenly you see red flash, that blinds you.", 3) + affected++ + if(affected) + usr.say("Sti' kaliesin!") + usr << "\red Rune flashes, blinding those who not follow the Nar-Sie, and dissipates into fine dust." + del(src) + else + return fizzle() + else + usr.whisper("Sti' kaliesin!") + usr << "\red Your talisman turns into gray dust, blinding those who not follow the Nar-Sie." + for(var/mob/living/carbon/C in viewers(usr)) + if (cultists.Find(C)) + continue + C.eye_blurry += 30 + C.eye_blind += 10 + C.show_message("\red You feel sharp pain in your eyes, and the world disappears into darkness..", 3) + return + + + bloodboil() //cultists need at least one DANGEROUS rune. Even if they're all stealthy. + var/culcount = 0 //also, wording for it is old wording for obscure rune, which is now hide-see-blood. + var/list/cultboil = list(cultists-usr) //and for this words are destroy-see-blood. + for(var/mob/living/carbon/human/C in orange(1,src)) + if(cultists.Find(C)) + culcount++ + if(culcount>=2) + for(var/mob/living/carbon/M in viewers(usr)) + if(cultboil.Find(M)) + continue + M.bruteloss += 51 + M.fireloss += 51 + M << "\red Your blood boils!" + if(prob(5)) + spawn(5) + M.gib(1) + for(var/obj/rune/R in viewers(src)) + if(prob(10)) + explosion(R.loc, -1, 0, 1, 5) + del(src) + else + return fizzle() + return + +// WIP rune, I'll wait for Rastaf0 to add limited blood. + + burningblood() + var/culcount = 0 + for(var/mob/living/carbon/human/C in orange(1,src)) + if(cultists.Find(C)) + culcount++ + if(culcount >= 5) + for(var/obj/rune/R in world) + if(R.blood_DNA == src.blood_DNA && R.blood_type == src.blood_type) + for(var/mob/M in orange(2,R)) + M.fireloss += 15 + M << "\red Rune suddenly ignites, burning you!" + for(var/obj/decal/cleanable/blood/B in world) + if(B.blood_DNA == src.blood_DNA && B.blood_type == src.blood_type) + for(var/mob/M in orange(1,B)) + M.fireloss += 5 + M << "\red Blood suddenly ignites, burning you!" + del(B) del(src) \ No newline at end of file diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index ee5cbb5130b..d9b1c19cf92 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1380,6 +1380,16 @@ namecounts[name] = 1 creatures[name] = D + for (var/obj/machinery/the_singularity/S in world) + var/name = "Singularity" + if (name in names) + namecounts[name]++ + name = "[name] ([namecounts[name]])" + else + names.Add(name) + namecounts[name] = 1 + creatures[name] = S + for (var/obj/machinery/bot/B in world) var/name = "BOT: [B.name]" if (name in names)