Almost all chemicals sould heal and harm humans and non-humans properly.

Various bugfixes for cult.
-raised and manifested are cultists
-you cannot use target for sacrificing
-free a cultis frees from muzzle, closets, pods
-removed unused files.
Added satitize() to emotes.
Extended and Random were returned to Game Panel.


git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1432 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
rastaf.zero@gmail.com
2011-04-10 20:57:42 +00:00
parent 83e4a41480
commit ae1d99ee73
41 changed files with 542 additions and 1374 deletions

View File

@@ -411,7 +411,7 @@ datum
reagent_state = GAS reagent_state = GAS
on_mob_life(var/mob/M) on_mob_life(var/mob/M)
if(!M) M = holder.my_atom if(!M) M = holder.my_atom
M:bruteloss++ usr.take_organ_damage(1, 0)
..() ..()
return return
@@ -465,7 +465,7 @@ datum
on_mob_life(var/mob/M) on_mob_life(var/mob/M)
if(!M) M = holder.my_atom if(!M) M = holder.my_atom
M:toxloss++ M:toxloss++
M:fireloss++ usr.take_organ_damage(0, 1)
..() ..()
return return
reaction_mob(var/mob/M, var/method=TOUCH, var/volume) reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
@@ -510,7 +510,7 @@ datum
on_mob_life(var/mob/M) on_mob_life(var/mob/M)
if(!M) M = holder.my_atom if(!M) M = holder.my_atom
M:toxloss++ M:toxloss++
M:fireloss++ usr.take_organ_damage(0, 1)
..() ..()
return return
reaction_mob(var/mob/M, var/method=TOUCH, var/volume) reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
@@ -843,7 +843,8 @@ datum
reagent_state = LIQUID reagent_state = LIQUID
on_mob_life(var/mob/M) on_mob_life(var/mob/M)
if(!M) M = holder.my_atom if(!M) M = holder.my_atom
if(prob(33)) M.bruteloss++ if(prob(33))
usr.take_organ_damage(1, 0)
holder.remove_reagent(src.id, 0.3) holder.remove_reagent(src.id, 0.3)
..() ..()
return return
@@ -1008,7 +1009,8 @@ datum
if(!M) M = holder.my_atom if(!M) M = holder.my_atom
M:radiation = max(M:radiation-3,0) M:radiation = max(M:radiation-3,0)
if(M:toxloss) M:toxloss-- if(M:toxloss) M:toxloss--
if(prob(15)) M:bruteloss++ if(prob(15))
usr.take_organ_damage(1, 0)
..() ..()
return return
@@ -1287,7 +1289,8 @@ datum
on_mob_life(var/mob/M) on_mob_life(var/mob/M)
if(!M) M = holder.my_atom if(!M) M = holder.my_atom
M:bodytemperature += 5 M:bodytemperature += 5
if(prob(40)) M:fireloss++ if(prob(40))
usr.take_organ_damage(0, 1)
..() ..()
return return
@@ -1300,7 +1303,8 @@ datum
on_mob_life(var/mob/M) on_mob_life(var/mob/M)
if(!M) M = holder.my_atom if(!M) M = holder.my_atom
M:bodytemperature -= 5 M:bodytemperature -= 5
if(prob(40)) M:fireloss++ if(prob(40))
usr.take_organ_damage(0, 1)
..() ..()
return return

View File

@@ -37,6 +37,15 @@
if("gib") if("gib")
M.gib() M.gib()
if("kill") if("kill")
if (damage_amount>0)
M.take_overall_damage(abs(damage_amount),abs(damage_amount))
M.toxloss+=abs(damage_amount)
M.oxyloss+=abs(damage_amount)
else
M.heal_overall_damage(abs(damage_amount),abs(damage_amount))
M.toxloss+=abs(damage_amount)
M.oxyloss+=abs(damage_amount)
/*
for(var/i=0,i<abs(damage_amount),i++) for(var/i=0,i<abs(damage_amount),i++)
sleep(0) //to avoid troubles with instantly applying lots of damage, it seems to be buggy sleep(0) //to avoid troubles with instantly applying lots of damage, it seems to be buggy
switch(damage_type) switch(damage_type)
@@ -59,4 +68,5 @@
if(damage_amount>0) if(damage_amount>0)
M.fireloss++ M.fireloss++
else else
M.fireloss-- M.fireloss--
*/

View File

@@ -107,6 +107,7 @@
var/r_ch_cou = 0 var/r_ch_cou = 0
var/r_Tourette = 0 var/r_Tourette = 0
var/cloneloss = 0 var/cloneloss = 0
var/seer = 0 //for cult
var/miming = null //checks if the guy is a mime var/miming = null //checks if the guy is a mime
var/silent = null //Can't talk. Value goes down every life proc. var/silent = null //Can't talk. Value goes down every life proc.

View File

@@ -337,25 +337,17 @@
spawn(550) spawn(550)
if (usr.stat != 2) if (usr.stat != 2)
if(istype(usr, /mob/living/carbon/human)) //usr.fireloss = 0
var/mob/living/carbon/human/H = usr
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()
usr.fireloss = 0
usr.toxloss = 0 usr.toxloss = 0
usr.bruteloss = 0 //usr.bruteloss = 0
usr.oxyloss = 0 usr.oxyloss = 0
usr.paralysis = 0 usr.paralysis = 0
usr.stunned = 0 usr.stunned = 0
usr.weakened = 0 usr.weakened = 0
usr.radiation = 0 usr.radiation = 0
usr.health = 100 //usr.health = 100
usr.updatehealth() //usr.updatehealth()
usr.heal_overall_damage(1000, 1000)
usr.reagents.clear_reagents() usr.reagents.clear_reagents()
usr.lying = 0 usr.lying = 0
usr.canmove = 1 usr.canmove = 1

View File

@@ -1,9 +1,16 @@
/datum/game_mode
var/list/datum/mind/cult = list()
/proc/iscultist(mob/M as mob)
return M.mind && ticker && ticker.mode && (M.mind in ticker.mode.cult)
/datum/game_mode/cult /datum/game_mode/cult
name = "cult" name = "cult"
config_tag = "cult" config_tag = "cult"
var/datum/mind/sacrifice_target = null var/datum/mind/sacrifice_target = null
var/list/datum/mind/cult = list()
var/finished = 0 var/finished = 0
var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds) 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) var/const/waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds)
@@ -105,7 +112,6 @@
else else
cult_mob << "You have a talisman in your backpack, one that will help you start the cult on this station. Use it well and remember - there are others." cult_mob << "You have a talisman in your backpack, one that will help you start the cult on this station. Use it well and remember - there are others."
grant_runeword(cult_mob) grant_runeword(cult_mob)
cultists.Add(cult_mob)
/datum/game_mode/cult/proc/grant_runeword(mob/living/carbon/human/cult_mob) /datum/game_mode/cult/proc/grant_runeword(mob/living/carbon/human/cult_mob)
if(!wordtravel) if(!wordtravel)
@@ -175,6 +181,8 @@
world << sound('intercept.ogg') world << sound('intercept.ogg')
/datum/game_mode/cult/proc/add_cultist(datum/mind/cult_mind) /datum/game_mode/cult/proc/add_cultist(datum/mind/cult_mind)
if (!cult_mind)
return
var/list/uncons = get_unconvertables() var/list/uncons = get_unconvertables()
if(!(cult_mind in cult) && !(cult_mind in uncons)) if(!(cult_mind in cult) && !(cult_mind in uncons))
cult += cult_mind cult += cult_mind
@@ -200,7 +208,7 @@
cult_mind.current << "\red <FONT size = 3><B>You have been brainwashed! You are no longer a cultist!</B></FONT>" cult_mind.current << "\red <FONT size = 3><B>You have been brainwashed! You are no longer a cultist!</B></FONT>"
cult_mind.memory = "" cult_mind.memory = ""
update_cult_icons_removed(cult_mind) update_cult_icons_removed(cult_mind)
for(var/mob/living/M in view(cult_mind.current)) for(var/mob/living/M in viewers(cult_mind.current))
M << "<FONT size = 3>[cult_mind.current] looks like they just reverted to their old faith!</FONT>" M << "<FONT size = 3>[cult_mind.current] looks like they just reverted to their old faith!</FONT>"
/datum/game_mode/cult/proc/update_all_cult_icons() /datum/game_mode/cult/proc/update_all_cult_icons()

View File

@@ -234,8 +234,8 @@ datum
var/area/shuttle/escape/centcom/C = /area/shuttle/escape/centcom var/area/shuttle/escape/centcom/C = /area/shuttle/escape/centcom
for(var/turf/T in get_area_turfs(C.type)) for(var/turf/T in get_area_turfs(C.type))
for(var/mob/living/carbon/human/H in T) for(var/mob/living/carbon/H in T)
if(cultists.Find(H)) if(iscultist(H))
cultists_escaped++ cultists_escaped++
if(cultists_escaped>=5) if(cultists_escaped>=5)

View File

@@ -1,4 +1,4 @@
var/list/cultists = list()
var/wordtravel = null var/wordtravel = null
var/wordself = null var/wordself = null
var/wordsee = null var/wordsee = null
@@ -91,13 +91,13 @@ var/runedec = 0
// self other technology - Communication rune //was other hear blood // self other technology - Communication rune //was other hear blood
examine() examine()
if(!cultists.Find(usr)) if(!iscultist(usr))
usr << "A strange collection of symbols drawn in blood." usr << "A strange collection of symbols drawn in blood."
else else
usr << "A spell circle drawn in blood. It reads: <i>[word1] [word2] [word3]</i>." usr << "A spell circle drawn in blood. It reads: <i>[word1] [word2] [word3]</i>."
attackby(I as obj, user as mob) attackby(I as obj, user as mob)
if(istype(I, /obj/item/weapon/tome) && cultists.Find(user)) if(istype(I, /obj/item/weapon/tome) && iscultist(user))
user << "You retrace your steps, carefully undoing the lines of the rune." user << "You retrace your steps, carefully undoing the lines of the rune."
del(src) del(src)
return return
@@ -109,7 +109,7 @@ var/runedec = 0
return return
attack_hand(mob/user as mob) attack_hand(mob/user as mob)
if(!cultists.Find(user)) if(!iscultist(user))
user << "You can't mouth the arcane scratchings without fumbling over them." user << "You can't mouth the arcane scratchings without fumbling over them."
return return
if(istype(user.wear_mask, /obj/item/clothing/mask/muzzle) || user.ear_deaf) if(istype(user.wear_mask, /obj/item/clothing/mask/muzzle) || user.ear_deaf)
@@ -362,11 +362,11 @@ var/runedec = 0
attack(mob/M as mob, mob/user as mob) attack(mob/M as mob, mob/user as mob)
if(!cultists.Find(user)) if(!iscultist(user))
return ..() return ..()
if(cultists.Find(M)) if(iscultist(M))
return return
M.fireloss += rand(5,20) //really lucky - 5 hits for a crit M.take_organ_damage(0,rand(5,20)) //really lucky - 5 hits for a crit
for(var/mob/O in viewers(M, null)) for(var/mob/O in viewers(M, null))
O.show_message(text("\red <B>[] beats [] with the arcane tome!</B>", user, M), 1) O.show_message(text("\red <B>[] beats [] with the arcane tome!</B>", user, M), 1)
M << "\red You feel searing heat inside!" M << "\red You feel searing heat inside!"
@@ -376,17 +376,17 @@ var/runedec = 0
attack_self(mob/user as mob) attack_self(mob/user as mob)
if(!wordtravel) if(!wordtravel)
runerandom() runerandom()
if(cultists.Find(user)) if(iscultist(user))
var/C = 0 var/C = 0
for(var/obj/rune/N in world) for(var/obj/rune/N in world)
C++ C++
if (!istype(user.loc,/turf)) if (!istype(user.loc,/turf))
user << "\red You do not have enough space to write a proper rune." user << "\red You do not have enough space to write a proper rune."
return return
if (C>=26+runedec) //including the useless rune at the secret room, shouldn't count against the limit of 25 runes - Urist if (C>=26+runedec+ticker.mode.cult.len) //including the useless rune at the secret room, shouldn't count against the limit of 25 runes - Urist
switch(alert("The cloth of reality can't take that much of a strain. By creating another rune, you risk locally tearing reality apart, which would prove fatal to you. Do you still wish to scribe the rune?",,"Yes","No")) switch(alert("The cloth of reality can't take that much of a strain. By creating another rune, you risk locally tearing reality apart, which would prove fatal to you. Do you still wish to scribe the rune?",,"Yes","No"))
if("Yes") if("Yes")
if(prob(C*5-105-runedec*5)) //including the useless rune at the secret room, shouldn't count against the limit - Urist if(prob(C*5-105-(runedec-ticker.mode.cult.len)*5)) //including the useless rune at the secret room, shouldn't count against the limit - Urist
usr.emote("scream") usr.emote("scream")
user << "\red A tear momentarily appears in reality. Before it closes, you catch a glimpse of that which lies beyond. That proves to be too much for your mind." user << "\red A tear momentarily appears in reality. Before it closes, you catch a glimpse of that which lies beyond. That proves to be too much for your mind."
usr.gib(1) usr.gib(1)
@@ -431,7 +431,7 @@ var/runedec = 0
examine() examine()
set src in usr set src in usr
if(!cultists.Find(usr)) if(!iscultist(usr))
usr << "An old, dusty tome with frayed edges and a sinister looking cover." usr << "An old, dusty tome with frayed edges and a sinister looking cover."
else else
usr << "The scriptures of Nar-Sie, The One Who Sees, The Geometer of Blood. Contains the details of every ritual his followers could think of. Most of these are useless, though." usr << "The scriptures of Nar-Sie, The One Who Sees, The Geometer of Blood. Contains the details of every ritual his followers could think of. Most of these are useless, though."
@@ -440,7 +440,7 @@ var/runedec = 0
w_class = 2.0 w_class = 2.0
var/cultistsonly = 1 var/cultistsonly = 1
attack_self(mob/user as mob) attack_self(mob/user as mob)
if(src.cultistsonly && !cultists.Find(usr)) if(src.cultistsonly && !iscultist(usr))
return return
if(!wordtravel) if(!wordtravel)
runerandom() runerandom()
@@ -624,12 +624,12 @@ var/runedec = 0
var/uses = 0 var/uses = 0
attack_self(mob/user as mob) attack_self(mob/user as mob)
usr.bruteloss+=5 usr.take_organ_damage(5, 0)
switch(imbue) switch(imbue)
if("newtome") if("newtome")
call(/obj/rune/proc/tomesummon)() call(/obj/rune/proc/tomesummon)()
if("emp") if("emp")
call(/obj/rune/proc/emp)(usr.loc,5) call(/obj/rune/proc/emp)(usr.loc,3)
if("conceal") if("conceal")
call(/obj/rune/proc/obscure)(2) call(/obj/rune/proc/obscure)(2)
if("revealrunes") if("revealrunes")
@@ -650,4 +650,4 @@ var/runedec = 0
/obj/item/weapon/paper/talisman/supply /obj/item/weapon/paper/talisman/supply
imbue = "supply" imbue = "supply"
uses = 3 uses = 3

View File

@@ -1,26 +0,0 @@
/obj/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!")
for (var/mob/V in viewers(src))
V.show_message("\red [usr] disappears in a flash of red light!", 3, "\red You hear a sickening crunch and sloshing of viscera.", 2)
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

View File

@@ -1,16 +0,0 @@
/obj/rune/proc/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 << "\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."
for (var/mob/V in viewers(src))
V.show_message("\red [usr]'s eyes glow blue as \he freezes in place, absolutely motionless.", 3, "\red You hear only complete silence for a moment.", 2)
for(L.ajourn=1,L.ajourn)
sleep(10)
if(L.key)
L.ajourn=0
return
else
L.bruteloss++
return fizzle()

View File

@@ -1,26 +0,0 @@
/obj/rune/proc/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)
for (var/mob/V in viewers(D))
V.show_message("\red A shape forms in the center of the rune. A shape of... a man.", 3, "", 2)
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.gib(1)
for (var/mob/V in viewers(D))
V.show_message("\red [D] explodes in a pile of gore.", 3, "\red \b SPLORCH", 2)
return
return fizzle()

View File

@@ -1,76 +0,0 @@
/obj/rune/proc/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
return fizzle()

View File

@@ -1,10 +0,0 @@
/obj/rune/proc/mend()
usr.say("Uhrast ka'hfa heldsagen ver'lot!")
usr.bruteloss+=200
runedec+=5
for (var/mob/V in viewers(usr))
V.show_message("\red [usr] keels over dead, his blood glowing blue as it escapes his body and dissipates into thin air.", 3, "", 2)
for(,usr.health<-100)
sleep(600)
runedec=0
return

View File

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

View File

@@ -1,18 +0,0 @@
var/list/sacrificed = list()
/obj/rune/proc/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()

View File

@@ -1,41 +0,0 @@
/obj/rune/proc/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

View File

@@ -1,13 +0,0 @@
/obj/rune/proc/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!")
for (var/mob/V in viewers(src))
V.show_message("\red There's a flash of red light. The rune disappears, and in its place a book lies", 3, "\red You hear a pop and smell ozone.", 2)
if(istype(src,/obj/rune))
new /obj/item/weapon/tome(src.loc)
else
new /obj/item/weapon/tome(usr.loc)
del(src)
return

View File

@@ -1,21 +0,0 @@
/obj/rune/proc/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!")
for (var/mob/V in viewers(src))
V.show_message("\red [M] writhes in pain as the markings below him glow a bloody red.", 3, "\red You hear an anguished scream.", 2)
M << "<font color=\"purple\"><b><i>Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible truth. The veil of reality has been ripped away and in the festering wound left behind something sinister takes root.</b></i></font>"
M << "<font color=\"purple\"><b><i>Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back.</b></i></font>"
if (ticker.mode.name == "cult")
ticker.mode:grant_runeword(M)
cultists.Add(M)
return
return fizzle()

View File

@@ -1,18 +0,0 @@
/obj/rune/proc/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 fizzle()

View File

@@ -1,188 +0,0 @@
/obj/rune/proc/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 <B>*BZZZT*</B>"
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 <B>Your equipment malfunctions.</B>" //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 <B>Your thermals malfunction.</B>"
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 <B>Your jumpsuit malfunctions</B>"
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 <B>BZZZT</B>"
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

View File

@@ -1,27 +0,0 @@
/obj/rune/proc/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 << "\red The blood starts flowing from the rune and into your frail mortal body. You feel... empowered."
for (var/mob/V in viewers(src))
if(V!=usr)
V.show_message("\red Blood flows from the rune into [usr]!", 3, "\red You hear a liquid flowing.", 2)
if(usr.bhunger)
usr.bhunger -= 2*drain
if(drain>=50)
usr << "\red ...but it wasn't nearly enough. You crave, crave for more. The hunger consumes you from within."
usr.bhunger += drain
for (,usr.bhunger,usr.bhunger--)
sleep(50)
usr.bruteloss += 3
usr.bruteloss -= drain
return

View File

@@ -1,10 +0,0 @@
/obj/rune/proc/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()

View File

@@ -1,49 +0,0 @@
/obj/rune/proc/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)
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
..() //shamelessly stolen from rejuvenate code - Urist
usr.say("Pasnar val'keriam usinar. Savrae ines amutan. Yam'toth remium il'tarat!")
for (var/mob/V in viewers(M))
V.show_message("\red [M]'s eyes glow with a faint red as \he stands up, slowly starting to breathe again.", 3, "\red You hear a faint, slightly familiar whisper.", 2)
N.gib(1)
for (var/mob/V in viewers(N))
V.show_message("\red [N] is torn apart, a black smoke swiftly dissipating from \his remains!", 3, "\red You hear a thousand voices, all crying in pain.", 2)
return
return fizzle()

View File

@@ -1,25 +0,0 @@
/obj/rune/proc/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

View File

@@ -17,7 +17,7 @@ var/list/sacrificed = list()
allrunesloc[index] = R.loc allrunesloc[index] = R.loc
if(index >= 5) if(index >= 5)
usr << "\red You feel pain, as rune disappears in reality shift caused by too much wear of space-time fabric" usr << "\red You feel pain, as rune disappears in reality shift caused by too much wear of space-time fabric"
usr.bruteloss += 5 usr.take_overall_damage(5, 0)
del(src) del(src)
if(allrunesloc && index != 0) if(allrunesloc && index != 0)
if(istype(src,/obj/rune)) if(istype(src,/obj/rune))
@@ -52,10 +52,10 @@ var/list/sacrificed = list()
runecount++ runecount++
if(runecount >= 2) if(runecount >= 2)
usr << "\red You feel pain, as rune disappears in reality shift caused by too much wear of space-time fabric" usr << "\red You feel pain, as rune disappears in reality shift caused by too much wear of space-time fabric"
usr.bruteloss += 5 usr.take_overall_damage(5, 0)
del(src) del(src)
for(var/mob/living/carbon/human/C in orange(1,src)) for(var/mob/living/carbon/C in orange(1,src))
if(cultists.Find(C)) if(iscultist(C))
culcount++ culcount++
if(culcount>=3) if(culcount>=3)
usr.say("Sas'so c'arta forbici tarem!") usr.say("Sas'so c'arta forbici tarem!")
@@ -69,7 +69,7 @@ var/list/sacrificed = list()
M.loc = IP.loc M.loc = IP.loc
return return
return fizzle() return fizzle()
/////////////////////////////////////////SECOND RUNE /////////////////////////////////////////SECOND RUNE
@@ -94,15 +94,15 @@ var/list/sacrificed = list()
/////////////////////////////////////////THIRD RUNE /////////////////////////////////////////THIRD RUNE
convert() convert()
for(var/mob/living/carbon/human/M in src.loc) for(var/mob/living/carbon/M in src.loc)
if(cultists.Find(M)) if(iscultist(M))
return fizzle() continue
if(M.stat==2) if(M.stat==2)
return fizzle() continue
if(ticker.mode.name == "cult") if(ticker && ticker.mode && ticker.mode.name == "cult")
var/list/uncons = call(/datum/game_mode/cult/proc/get_unconvertables)() var/list/uncons = ticker.mode:get_unconvertables()
if(M.mind in uncons) if(M.mind in uncons)
return fizzle() continue
ticker.mode:add_cultist(M.mind) ticker.mode:add_cultist(M.mind)
usr.say("Mah'weyh pleggh at e'ntrath!") 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.", \ M.visible_message("\red [M] writhes in pain as the markings below him glow a bloody red.", \
@@ -110,7 +110,6 @@ var/list/sacrificed = list()
"\red You hear an anguished scream.") "\red You hear an anguished scream.")
M << "<font color=\"purple\"><b><i>Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible truth. The veil of reality has been ripped away and in the festering wound left behind something sinister takes root.</b></i></font>" M << "<font color=\"purple\"><b><i>Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible truth. The veil of reality has been ripped away and in the festering wound left behind something sinister takes root.</b></i></font>"
M << "<font color=\"purple\"><b><i>Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back.</b></i></font>" M << "<font color=\"purple\"><b><i>Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back.</b></i></font>"
cultists.Add(M)
return return
return fizzle() return fizzle()
@@ -121,7 +120,7 @@ var/list/sacrificed = list()
tearreality() tearreality()
var/cultist_count = 0 var/cultist_count = 0
for(var/mob/M in range(1,src)) for(var/mob/M in range(1,src))
if(cultists.Find(M)) if(iscultist(M))
M.say("Tok-lyr rqa'nap g'lt-ulotf!") M.say("Tok-lyr rqa'nap g'lt-ulotf!")
cultist_count += 1 cultist_count += 1
if(cultist_count >= 9) if(cultist_count >= 9)
@@ -135,7 +134,7 @@ var/list/sacrificed = list()
ticker.mode:eldergod = 0 ticker.mode:eldergod = 0
return return
else else
return return fizzle()
/////////////////////////////////////////FIFTH RUNE /////////////////////////////////////////FIFTH RUNE
@@ -161,10 +160,10 @@ var/list/sacrificed = list()
for(var/obj/rune/R in world) for(var/obj/rune/R in world)
if(R.word1==wordtravel && R.word2==wordblood && R.word3==wordself) if(R.word1==wordtravel && R.word2==wordblood && R.word3==wordself)
for(var/mob/living/carbon/D in R.loc) for(var/mob/living/carbon/D in R.loc)
if(D.health>=-100) if(D.stat!=2)
var/bdrain = rand(1,25) var/bdrain = rand(1,25)
D << "\red You feel weakened." D << "\red You feel weakened."
D.bruteloss += bdrain D.take_overall_damage(bdrain, 0)
drain += bdrain drain += bdrain
if(!drain) if(!drain)
return fizzle() return fizzle()
@@ -173,16 +172,23 @@ var/list/sacrificed = list()
"\red The blood starts flowing from the rune and into your frail mortal body. You feel... empowered.", \ "\red The blood starts flowing from the rune and into your frail mortal body. You feel... empowered.", \
"\red You hear a liquid flowing.") "\red You hear a liquid flowing.")
if(usr.bhunger) if(usr.bhunger)
usr.bhunger -= 2*drain usr.bhunger = max(usr.bhunger-2*drain,0)
if(drain>=50) if(drain>=50)
usr.visible_message("\red [usr]'s eyes give off eerie red glow!", \ 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 ...but it wasn't nearly enough. You crave, crave for more. The hunger consumes you from within.", \
"\red You hear a heartbeat.") "\red You hear a heartbeat.")
usr.bhunger += drain usr.bhunger += drain
for (,usr.bhunger,usr.bhunger--) src = usr
sleep(50) spawn()
usr.bruteloss += 3 for (,usr.bhunger>0,usr.bhunger--)
usr.bruteloss -= drain sleep(50)
usr.take_overall_damage(3, 0)
return
usr.heal_organ_damage(drain%5, 0)
drain-=drain%5
for (,drain>0,drain-=5)
sleep(2)
usr.heal_organ_damage(5, 0)
return return
@@ -200,64 +206,104 @@ var/list/sacrificed = list()
else else
usr << "\red The world beyond opens to your eyes." usr << "\red The world beyond opens to your eyes."
usr.see_invisible = 15 usr.see_invisible = 15
usr.seer = 1
return return
return fizzle() return fizzle()
/////////////////////////////////////////EIGHTH RUNE /////////////////////////////////////////EIGHTH RUNE
raise() raise()
var/mob/living/carbon/human/corpse_to_raise
var/mob/living/carbon/human/body_to_sacrifice
var/mob/living/carbon/human/ghost
var/unsuitable_corpse_found = 0
var/corpse_is_target = 0
for(var/mob/living/carbon/human/M in src.loc) for(var/mob/living/carbon/human/M in src.loc)
if(M.health<=-100) if (M.stat>=2)
for(var/obj/rune/R in world) if (M.key)
if(R.word1==wordblood && R.word2==wordjoin && R.word3==wordhell) unsuitable_corpse_found = 1
for(var/mob/living/carbon/human/N in R.loc) else if (ticker.mode.name == "cult" && M.mind == ticker.mode:sacrifice_target)
if(N.health>-100 && N.client) corpse_is_target = 1
for(var/mob/dead/observer/O in src.loc) else
if(M.key) corpse_to_raise = M
usr << "\red The body still has some earthly ties. It must sever them, if only for them to grow again later." break
return if (!corpse_to_raise)
if(!O.key) if (unsuitable_corpse_found)
continue usr << "\red The body still has some earthly ties. It must sever them, if only for them to grow again later."
M.key=O.key if (corpse_is_target)
del(O) usr << "\red The Geometer of blood wants this mortal for himself."
return fizzle()
var/sacrifice_is_target = 0
find_sacrifice:
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 (ticker.mode.name == "cult" && N.mind && N.mind == ticker.mode:sacrifice_target)
sacrifice_is_target = 1
else
if(N.stat<2)
body_to_sacrifice = N
break find_sacrifice
if (!body_to_sacrifice)
if (sacrifice_is_target)
usr << "\red The Geometer of blood wants that corpse for himself."
else
usr << "\red You need a dead corpse as source of energy to put soul in new body."
return fizzle()
for(var/mob/dead/observer/O in src.loc)
if(!O.client)
continue
ghost = O
if (!ghost)
usr << "\red You do not feel an ethernal immaterial soul here."
return fizzle()
// rejuvenatedheal(M) // rejuvenatedheal(M)
corpse_to_raise.mind = new//Mind initialize stuff.
if(istype(M, /mob/living/carbon/human)) corpse_to_raise.mind.current = corpse_to_raise
var/mob/living/carbon/human/H = M corpse_to_raise.mind.original = corpse_to_raise
for(var/A in H.organs) corpse_to_raise.mind.key = ghost.key
var/datum/organ/external/affecting = null corpse_to_raise.key = ghost.key
if(!H.organs[A]) continue del(ghost)
affecting = H.organs[A] for(var/A in corpse_to_raise.organs)
if(!istype(affecting, /datum/organ/external)) continue var/datum/organ/external/affecting = corpse_to_raise.organs[A]
affecting.heal_damage(1000, 1000) //fixes getting hit after ingestion, killing you when game updates organ health if(!istype(affecting))
H.UpdateDamageIcon() continue
M.fireloss = 0 affecting.heal_damage(1000, 1000)
M.toxloss = 0 corpse_to_raise.toxloss = 0
M.bruteloss = 0 corpse_to_raise.oxyloss = 0
M.oxyloss = 0 corpse_to_raise.paralysis = 0
M.paralysis = 0 corpse_to_raise.stunned = 0
M.stunned = 0 corpse_to_raise.weakened = 0
M.weakened = 0 corpse_to_raise.radiation = 0
M.radiation = 0 corpse_to_raise.buckled = null
M.health = 100 if (corpse_to_raise.handcuffed)
M.updatehealth() del(corpse_to_raise.handcuffed)
M.buckled = initial(M.buckled) corpse_to_raise.stat=0
M.handcuffed = initial(M.handcuffed) corpse_to_raise.updatehealth()
if (M.stat > 1) corpse_to_raise.UpdateDamageIcon()
M.stat=0
usr.say("Pasnar val'keriam usinar. Savrae ines amutan. Yam'toth remium il'tarat!") 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.", \ corpse_to_raise.visible_message("\red [corpse_to_raise]'s eyes glow with a faint red as he stands up, slowly starting to breathe again.", \
"\red Life... I'm alive again...", \ "\red Life... I'm alive again...", \
"\red You hear a faint, slightly familiar whisper.") "\red You hear a faint, slightly familiar whisper.")
N.gib(1) body_to_sacrifice.visible_message("\red [body_to_sacrifice] is torn apart, a black smoke swiftly dissipating from his remains!", \
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 feel as your blood boils, tearing you apart.", \ "\red You hear a thousand voices, all crying in pain.")
"\red You hear a thousand voices, all crying in pain.") body_to_sacrifice.gib(1)
return if (ticker.mode.name == "cult")
return fizzle() ticker.mode:add_cultist(body_to_sacrifice.mind)
else
ticker.mode.cult+=body_to_sacrifice.mind
corpse_to_raise << "<font color=\"purple\"><b><i>Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible truth. The veil of reality has been ripped away and in the festering wound left behind something sinister takes root.</b></i></font>"
corpse_to_raise << "<font color=\"purple\"><b><i>Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back.</b></i></font>"
return
@@ -297,17 +343,17 @@ var/list/sacrificed = list()
if(usr.loc==src.loc) if(usr.loc==src.loc)
var/mob/living/carbon/human/L = usr var/mob/living/carbon/human/L = usr
usr.say("Fwe'sh mah erl nyag r'ya!") 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.", \ 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 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.") "\red You hear only complete silence for a moment.")
usr.ghostize()
for(L.ajourn=1,L.ajourn) for(L.ajourn=1,L.ajourn)
sleep(10) sleep(10)
if(L.key) if(L.key)
L.ajourn=0 L.ajourn=0
return return
else else
L.bruteloss++ L.take_organ_damage(1, 0)
return fizzle() return fizzle()
@@ -316,33 +362,58 @@ var/list/sacrificed = list()
/////////////////////////////////////////ELEVENTH RUNE /////////////////////////////////////////ELEVENTH RUNE
manifest() manifest()
if(usr.loc==src.loc) var/obj/rune/this_rune = src
for(var/mob/dead/observer/O in src.loc) src = null
usr.say("Gal'h'rfikk harfrandid mud'gib!") if(usr.loc!=this_rune.loc)
var/mob/living/carbon/human/dummy/D = new /mob/living/carbon/human/dummy(src.loc) return this_rune.fizzle()
usr.visible_message("\red A shape forms in the center of the rune. A shape of... a man.", \ var/mob/dead/observer/ghost
"\red A shape forms in the center of the rune. A shape of... a man.", \ for(var/mob/dead/observer/O in this_rune.loc)
"\red You hear liquid flowing.") if (!O.client)
D.real_name = "Unknown" continue
for(var/obj/item/weapon/paper/P in src.loc) ghost = O
if(length(P.info)<=24) break
D.real_name = P.info if(!ghost)
D.universal_speak = 1 return this_rune.fizzle()
D.nodamage = 0
D.key = O.key usr.say("Gal'h'rfikk harfrandid mud'gib!")
del(O) var/mob/living/carbon/human/dummy/D = new(this_rune.loc)
for(,usr.loc==src.loc) usr.visible_message("\red A shape forms in the center of the rune. A shape of... a man.", \
sleep(30) "\red A shape forms in the center of the rune. A shape of... a man.", \
if(usr.health>-100) "\red You hear liquid flowing.")
usr.bruteloss++ D.real_name = "Unknown"
else for(var/obj/item/weapon/paper/P in this_rune.loc)
break /*
D.visible_message("\red [D] slowly dissipates into dust and bones.", \ if(length(P.info)<=24)
"\red You feel pain, as bonds formed between your soul and this homunculus break.", \ D.real_name = P.info
"\red You hear faint rustle.") break
D.dust(1) */
return if(length(P.name)<=24)
return fizzle() D.real_name = P.name
break
D.universal_speak = 1
D.nodamage = 0
D.mind = new//Mind initialize stuff.
D.mind.current = D
D.mind.original = D
D.mind.key = ghost.key
D.key = ghost.key
ghost.invisibility = 101
if (ticker.mode.name == "cult")
ticker.mode:add_cultist(D.mind)
else
ticker.mode.cult+=D.mind
D << "<font color=\"purple\"><b><i>Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible truth. The veil of reality has been ripped away and in the festering wound left behind something sinister takes root.</b></i></font>"
D << "<font color=\"purple\"><b><i>Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back.</b></i></font>"
while(this_rune && usr && usr.stat==0 && usr.client && usr.loc==this_rune.loc)
usr.take_organ_damage(1, 0)
sleep(30)
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.")
ghost.invisibility = 10
ghost.key = D.key
D.dust(1)
return
@@ -351,177 +422,128 @@ var/list/sacrificed = list()
/////////////////////////////////////////TWELFTH RUNE /////////////////////////////////////////TWELFTH RUNE
talisman()//only hide, emp, teleport, deafen, blind and tome runes can be imbued atm talisman()//only hide, emp, teleport, deafen, blind and tome runes can be imbued atm
var/obj/item/weapon/paper/newtalisman
var/unsuitable_newtalisman = 0
for(var/obj/item/weapon/paper/P in src.loc)
if(!P.info)
newtalisman = P
break
else
unsuitable_newtalisman = 1
if (!newtalisman)
if (unsuitable_newtalisman)
usr << "\red The blank is tainted. It is unsuitable."
return fizzle()
var/obj/rune/imbued_from
var/obj/item/weapon/paper/talisman/T
for(var/obj/rune/R in orange(1,src)) for(var/obj/rune/R in orange(1,src))
if(R==src) if(R==src)
continue continue
if(R.word1==wordtravel && R.word2==wordself) //teleport if(R.word1==wordtravel && R.word2==wordself) //teleport
for(var/obj/item/weapon/paper/P in src.loc) T = new(src.loc)
if(P.info) T.imbue = "[R.word3]"
usr << "\red The blank is tainted. It is unsuitable." T.info = "[R.word3]"
return imbued_from = R
del(P) break
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) //tome if(R.word1==wordsee && R.word2==wordblood && R.word3==wordhell) //tome
for(var/obj/item/weapon/paper/P in src.loc) T = new(src.loc)
if(P.info) T.imbue = "newtome"
usr << "\red The blank is tainted. It is unsuitable." imbued_from = R
return break
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) //emp if(R.word1==worddestr && R.word2==wordsee && R.word3==wordtech) //emp
for(var/obj/item/weapon/paper/P in src.loc) T = new(src.loc)
if(P.info) T.imbue = "emp"
usr << "\red The blank is tainted. It is unsuitable." imbued_from = R
return break
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) //conceal if(R.word1==wordblood && R.word2==wordsee && R.word3==worddestr) //conceal
for(var/obj/item/weapon/paper/P in src.loc) T = new(src.loc)
if(P.info) T.imbue = "conceal"
usr << "\red The blank is tainted. It is unsuitable." imbued_from = R
return break
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==wordblood && R.word2==wordsee && R.word3==wordhide) //reveal if(R.word1==wordblood && R.word2==wordsee && R.word3==wordhide) //reveal
for(var/obj/item/weapon/paper/P in src.loc) T = new(src.loc)
if(P.info) T.imbue = "revealrunes"
usr << "\red The blank is tainted. It is unsuitable." imbued_from = R
return break
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==wordhide && R.word2==wordother && R.word3==wordsee) //deafen if(R.word1==wordhide && R.word2==wordother && R.word3==wordsee) //deafen
for(var/obj/item/weapon/paper/P in src.loc) T = new(src.loc)
if(P.info) T.imbue = "deafen"
usr << "\red The blank is tainted. It is unsuitable." imbued_from = R
return break
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) //blind if(R.word1==worddestr && R.word2==wordsee && R.word3==wordother) //blind
for(var/obj/item/weapon/paper/P in src.loc) T = new(src.loc)
if(P.info) T.imbue = "blind"
usr << "\red The blank is tainted. It is unsuitable." imbued_from = R
return break
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
if(R.word1==wordself && R.word2==wordother && R.word3==wordtech) //communicat if(R.word1==wordself && R.word2==wordother && R.word3==wordtech) //communicat
for(var/obj/item/weapon/paper/P in src.loc) T = new(src.loc)
if(P.info) T.imbue = "communicate"
usr << "\red The blank is tainted. It is unsuitable." imbued_from = R
return break
del(P) if (imbued_from)
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(src.loc) for (var/mob/V in viewers(src))
T.imbue = "communicate" V.show_message("\red The runes turn into dust, which then forms into an arcane image on the paper.", 3)
for (var/mob/V in viewers(src)) usr.say("H'drak v'loso, mir'kanas verbot!")
V.show_message("\red The runes turn into dust, which then forms into an arcane image on the paper.", 3) del(imbued_from)
del(R) del(src)
del(src) else
usr.say("H'drak v'loso, mir'kanas verbot!") return fizzle()
return
return fizzle()
/////////////////////////////////////////THIRTEENTH RUNE /////////////////////////////////////////THIRTEENTH RUNE
mend() mend()
src = null
usr.say("Uhrast ka'hfa heldsagen ver'lot!") usr.say("Uhrast ka'hfa heldsagen ver'lot!")
usr.bruteloss+=200 usr.take_overall_damage(200, 0)
runedec+=5 runedec+=10
usr.visible_message("\red [usr] keels over dead, his blood glowing blue as it escapes his body and dissipates into thin air.", \ 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 In the last moment of your humbly life, you feel as fabric of reality mends... with your blood.", \
"\red You hear faint rustle.") "\red You hear faint rustle.")
for(,usr.health<-100) for(,usr.stat==2)
sleep(600) sleep(600)
runedec=0 if (!usr)
return
runedec-=10
return return
/////////////////////////////////////////FOURTEETH RUNE /////////////////////////////////////////FOURTEETH RUNE
communicate() communicate()
var/input = input(usr, "Please choose a message to tell to the other acolytes.", "Voice of Blood", "") as text|null
if(!input)
return fizzle()
if(istype(src,/obj/rune)) if(istype(src,/obj/rune))
usr.say("O bidai nabora se'sma!") usr.say("O bidai nabora se'sma!")
else else
usr.whisper("O bidai nabora se'sma!") usr.whisper("O bidai nabora se'sma!")
var/input = input(usr, "Please choose a message to tell to the other acolytes.", "Voice of Blood", "") as text|null var/input_s = sanitize(input)
if(!input)
return fizzle()
input = sanitize(input)
if(istype(src,/obj/rune)) if(istype(src,/obj/rune))
usr.say("[input]") usr.say("[input]")
else else
usr.whisper("[input]") usr.whisper("[input]")
for(var/mob/living/carbon/human/H in cultists) for(var/datum/mind/H in ticker.mode.cult)
H << "\red \b [input]" if (H.current)
H.current << "\red \b [input_s]"
del(src) del(src)
return return
/////////////////////////////////////////FIFTEENTH RUNE /////////////////////////////////////////FIFTEENTH RUNE
sacrifice() sacrifice()
var/list/cultsinrange = list() var/list/mob/living/carbon/human/cultsinrange = list()
var/list/victims = list() var/list/mob/living/carbon/human/victims = list()
for(var/mob/living/carbon/human/V in src.loc) for(var/mob/living/carbon/human/V in src.loc)
if(!cultists.Find(V)) if(!(iscultist(V)))
victims.Add(V) victims += V
for(var/mob/living/carbon/human/C in orange(1,src)) for(var/mob/living/carbon/C in orange(1,src))
if(cultists.Find(C)) if(iscultist(C))
cultsinrange.Add(C) cultsinrange += C
C.say("Barhah hra zar'garis!")
for(var/mob/H in victims) for(var/mob/H in victims)
for(var/mob/K in cultsinrange)
K.say("Barhah hra zar'garis!")
if (ticker.mode.name == "cult") if (ticker.mode.name == "cult")
if(H == ticker.mode:sacrifice_target.current) if(H.mind == ticker.mode:sacrifice_target)
if(cultsinrange.len >= 3) if(cultsinrange.len >= 3)
sacrificed += H.mind sacrificed += H.mind
H.gib(1) H.gib(1)
@@ -567,22 +589,25 @@ var/list/sacrificed = list()
else else
H.gib(1) H.gib(1)
usr << "\red The Geometer of blood accepts this sacrifice." usr << "\red The Geometer of blood accepts this sacrifice."
return
for(var/mob/living/carbon/monkey/M in src.loc) for(var/mob/living/carbon/monkey/M in src.loc)
for(var/mob/K in cultsinrange)
K.say("Barhah hra zar'garis!")
M.gib(1)
if (ticker.mode.name == "cult") if (ticker.mode.name == "cult")
if(prob(20)) if(M.mind == ticker.mode:sacrifice_target)
usr << "\red The Geometer of Blood accepts your meager sacrifice." if(cultsinrange.len >= 3)
ticker.mode:grant_runeword(usr) sacrificed += M.mind
usr << "\red The Geometer of Blood accepts this sacrifice, your objective is now complete."
else
usr << "\red Your target's earthly bonds are too strong. You need more cultists to succeed in this ritual."
continue
else else
usr << "\red The Geometer of blood accepts this sacrifice." if(prob(20))
usr << "\red However, a mere monkey is not enough to satisfy Him." usr << "\red The Geometer of Blood accepts your meager sacrifice."
ticker.mode:grant_runeword(usr)
else
usr << "\red The Geometer of blood accepts this sacrifice."
usr << "\red However, a mere monkey is not enough to satisfy Him."
else else
usr << "\red The Geometer of Blood accepts your meager sacrifice." usr << "\red The Geometer of Blood accepts your meager sacrifice."
return M.gib(1)
/* for(var/mob/living/carbon/alien/A) /* for(var/mob/living/carbon/alien/A)
for(var/mob/K in cultsinrange) for(var/mob/K in cultsinrange)
K.say("Barhah hra zar'garis!") K.say("Barhah hra zar'garis!")
@@ -648,7 +673,7 @@ var/list/sacrificed = list()
wall() wall()
usr.say("Khari'd! Eske'te tannin!") usr.say("Khari'd! Eske'te tannin!")
src.density = !src.density src.density = !src.density
usr.bruteloss += 2 usr.take_organ_damage(2, 0)
if(src.density) if(src.density)
usr << "\red Your blood flows into the rune, and you feel that the very space over the rune thickens." usr << "\red Your blood flows into the rune, and you feel that the very space over the rune thickens."
else else
@@ -658,36 +683,59 @@ var/list/sacrificed = list()
/////////////////////////////////////////EIGHTTEENTH RUNE /////////////////////////////////////////EIGHTTEENTH RUNE
freedom() freedom()
var/culcount = 0 var/list/mob/living/carbon/cultists = new
for(var/mob/living/carbon/human/C in orange(1,src)) for(var/datum/mind/H in ticker.mode.cult)
if(cultists.Find(C)) if (istype(H.current,/mob/living/carbon))
culcount++ cultists+=H.current
if(culcount>=3) var/list/mob/living/carbon/users = new
var/mob/cultist = input("Choose the one who you want to free", "Followers of Geometer") as null|anything in (cultists - usr) for(var/mob/living/carbon/C in orange(1,src))
if(iscultist(C))
users+=C
if(users.len>=3)
var/mob/cultist = input("Choose the one who you want to free", "Followers of Geometer") as null|anything in (cultists - users)
if(!cultist) if(!cultist)
return fizzle() return fizzle()
if (cultist == usr) //just to be sure. if (cultist == usr) //just to be sure.
return return
if(!cultist.buckled && !cultist.handcuffed) if(!(cultist.buckled || \
cultist.handcuffed || \
istype(cultist.wear_mask, /obj/item/clothing/mask/muzzle) || \
(istype(cultist.loc, /obj/closet)&&cultist.loc:welded) || \
(istype(cultist.loc, /obj/secure_closet)&&cultist.loc:locked) || \
(istype(cultist.loc, /obj/machinery/dna_scannernew)&&cultist.loc:locked) \
))
usr << "\red The [cultist] is already free." usr << "\red The [cultist] is already free."
return return
cultist.buckled = initial(cultist.buckled) cultist.buckled = null
cultist.handcuffed = initial(cultist.handcuffed) if (cultist.handcuffed)
for(var/mob/living/carbon/human/C in orange(1,src)) cultist.handcuffed.loc = cultist.loc
if(cultists.Find(C)) cultist.handcuffed = null
C.bruteloss += 15 if (istype(cultist.wear_mask, /obj/item/clothing/mask/muzzle))
C.say("Khari'd! Gual'te nikka!") cultist.u_equip(cultist.wear_mask)
if(istype(cultist.loc, /obj/closet)&&cultist.loc:welded)
cultist.loc:welded = 0
if(istype(cultist.loc, /obj/secure_closet)&&cultist.loc:locked)
cultist.loc:locked = 0
if(istype(cultist.loc, /obj/machinery/dna_scannernew)&&cultist.loc:locked)
cultist.loc:locked = 0
for(var/mob/living/carbon/C in users)
usr.take_overall_damage(15, 0)
C.say("Khari'd! Gual'te nikka!")
del(src) del(src)
return fizzle() return fizzle()
/////////////////////////////////////////NINETEENTH RUNE /////////////////////////////////////////NINETEENTH RUNE
cultsummon() cultsummon()
var/culcount = 0 var/list/mob/living/carbon/cultists = new
for(var/mob/living/carbon/human/C in orange(1,src)) for(var/datum/mind/H in ticker.mode.cult)
if(cultists.Find(C)) if (istype(H.current,/mob/living/carbon))
culcount++ cultists+=H.current
if(culcount>=3) var/list/mob/living/carbon/users = new
for(var/mob/living/carbon/C in orange(1,src))
if(iscultist(C))
users+=C
if(users.len>=3)
var/mob/cultist = input("Choose the one who you want to summon", "Followers of Geometer") as null|anything in (cultists - usr) var/mob/cultist = input("Choose the one who you want to summon", "Followers of Geometer") as null|anything in (cultists - usr)
if(!cultist) if(!cultist)
return fizzle() return fizzle()
@@ -697,10 +745,12 @@ var/list/sacrificed = list()
usr << "\red You cannot summon the [cultist], for him shackles of blood are strong" usr << "\red You cannot summon the [cultist], for him shackles of blood are strong"
return fizzle() return fizzle()
cultist.loc = src.loc cultist.loc = src.loc
cultist.lying = 1
cultist.update_clothing()
for(var/mob/living/carbon/human/C in orange(1,src)) for(var/mob/living/carbon/human/C in orange(1,src))
if(cultists.Find(C)) if(iscultist(C))
C.say("N'ath reth sh'yro eth d'rekkathnor!") C.say("N'ath reth sh'yro eth d'rekkathnor!")
C.bruteloss += 25 C.take_overall_damage(25, 0)
usr.visible_message("\red Rune disappears with a flash of red light, and in it's place now a body lies.", \ 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 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.") "\red You hear a pop and smell ozone.")
@@ -713,7 +763,7 @@ var/list/sacrificed = list()
if(istype(src,/obj/rune)) if(istype(src,/obj/rune))
var/affected = 0 var/affected = 0
for(var/mob/living/carbon/C in range(7,src)) for(var/mob/living/carbon/C in range(7,src))
if (cultists.Find(C)) if (iscultist(C))
continue continue
C.ear_deaf += 50 C.ear_deaf += 50
C.show_message("\red World around you suddenly becomes quiet.", 3) C.show_message("\red World around you suddenly becomes quiet.", 3)
@@ -727,16 +777,19 @@ var/list/sacrificed = list()
else else
return fizzle() return fizzle()
else else
usr.whisper("Sti' kaliedir!") var/affected = 0
usr << "\red Your talisman turns into gray dust, deafening everyone around."
for(var/mob/living/carbon/C in range(7,usr)) for(var/mob/living/carbon/C in range(7,usr))
if (cultists.Find(C)) if (iscultist(C))
continue continue
C.ear_deaf += 30 C.ear_deaf += 30
//talismans is weaker. //talismans is weaker.
C.show_message("\red World around you suddenly becomes quiet.", 3) C.show_message("\red World around you suddenly becomes quiet.", 3)
affected++
if(affected)
usr.whisper("Sti' kaliedir!")
usr << "\red Your talisman turns into gray dust, deafening everyone around."
for (var/mob/V in orange(1,src)) for (var/mob/V in orange(1,src))
if(!cultists.Find(V)) if(!(iscultist(V)))
V.show_message("\red Dust flows from [usr]'s hands for a moment, and the world suddenly becomes quiet..", 3) V.show_message("\red Dust flows from [usr]'s hands for a moment, and the world suddenly becomes quiet..", 3)
return return
@@ -744,13 +797,13 @@ var/list/sacrificed = list()
if(istype(src,/obj/rune)) if(istype(src,/obj/rune))
var/affected = 0 var/affected = 0
for(var/mob/living/carbon/C in viewers(src)) for(var/mob/living/carbon/C in viewers(src))
if (cultists.Find(C)) if (iscultist(C))
continue continue
C.eye_blurry += 50 C.eye_blurry += 50
C.eye_blind += 20 C.eye_blind += 20
if(prob(5)) if(prob(5))
C.disabilities |= 1 C.disabilities |= 1
if(prob(1)) if(prob(10))
C.sdisabilities |= 1 C.sdisabilities |= 1
C.show_message("\red Suddenly you see red flash, that blinds you.", 3) C.show_message("\red Suddenly you see red flash, that blinds you.", 3)
affected++ affected++
@@ -761,35 +814,43 @@ var/list/sacrificed = list()
else else
return fizzle() return fizzle()
else else
usr.whisper("Sti' kaliesin!") var/affected = 0
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)) for(var/mob/living/carbon/C in viewers(usr))
if (cultists.Find(C)) if (iscultist(C))
continue continue
C.eye_blurry += 30 C.eye_blurry += 30
C.eye_blind += 10 C.eye_blind += 10
//talismans is weaker. //talismans is weaker.
affected++
C.show_message("\red You feel sharp pain in your eyes, and the world disappears into darkness..", 3) C.show_message("\red You feel sharp pain in your eyes, and the world disappears into darkness..", 3)
if(affected)
usr.whisper("Sti' kaliesin!")
usr << "\red Your talisman turns into gray dust, blinding those who not follow the Nar-Sie."
return return
bloodboil() //cultists need at least one DANGEROUS rune. Even if they're all stealthy. bloodboil() //cultists need at least one DANGEROUS rune. Even if they're all stealthy.
/*
var/list/mob/living/carbon/cultists = new
for(var/datum/mind/H in ticker.mode.cult)
if (istype(H.current,/mob/living/carbon))
cultists+=H.current
*/
var/culcount = 0 //also, wording for it is old wording for obscure rune, which is now hide-see-blood. 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. // 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)) for(var/mob/living/carbon/C in orange(1,src))
if(cultists.Find(C)) if(iscultist(C))
culcount++ culcount++
if(culcount>=2) if(culcount>=3)
for(var/mob/living/carbon/M in viewers(usr)) for(var/mob/living/carbon/M in viewers(usr))
if(cultboil.Find(M)) if(iscultist(M))
continue continue
M.bruteloss += 51 M.take_overall_damage(51,51)
M.fireloss += 51
M << "\red Your blood boils!" M << "\red Your blood boils!"
if(prob(5)) if(prob(5))
spawn(5) spawn(5)
M.gib(1) M.gib(1)
for(var/obj/rune/R in viewers(src)) for(var/obj/rune/R in view(src))
if(prob(10)) if(prob(10))
explosion(R.loc, -1, 0, 1, 5) explosion(R.loc, -1, 0, 1, 5)
del(src) del(src)
@@ -801,19 +862,26 @@ var/list/sacrificed = list()
burningblood() burningblood()
var/culcount = 0 var/culcount = 0
for(var/mob/living/carbon/human/C in orange(1,src)) for(var/mob/living/carbon/C in orange(1,src))
if(cultists.Find(C)) if(iscultist(C))
culcount++ culcount++
if(culcount >= 5) if(culcount >= 5)
for(var/obj/rune/R in world) for(var/obj/rune/R in world)
if(R.blood_DNA == src.blood_DNA && R.blood_type == src.blood_type) if(R.blood_DNA == src.blood_DNA && R.blood_type == src.blood_type)
for(var/mob/M in orange(2,R)) for(var/mob/M in orange(2,R))
M.fireloss += 15 M.take_overall_damage(0,15)
M << "\red Rune suddenly ignites, burning you!" if (R.invisibility>M.see_invisible)
M << "\red Aargh it burns!"
else
M << "\red Rune suddenly ignites, burning you!"
var/turf/T = get_turf(R)
T.hotspot_expose(700,125)
for(var/obj/decal/cleanable/blood/B in world) for(var/obj/decal/cleanable/blood/B in world)
if(B.blood_DNA == src.blood_DNA && B.blood_type == src.blood_type) if(B.blood_DNA == src.blood_DNA && B.blood_type == src.blood_type)
for(var/mob/M in orange(1,B)) for(var/mob/M in orange(1,B))
M.fireloss += 5 M.take_overall_damage(0,5)
M << "\red Blood suddenly ignites, burning you!" M << "\red Blood suddenly ignites, burning you!"
var/turf/T = get_turf(B)
T.hotspot_expose(700,125)
del(B) del(B)
del(src) del(src)

View File

@@ -1,417 +0,0 @@
var/list/cultists = list()
/obj/rune
anchored = 1
icon = 'magic.dmi'
icon_state = "1"
var
word1
word2
word3
// ire - travel
// ego - self
// nahlizet - see
// certum - Hell
// veri - blood
// jatkaa - join <- eh, I just used good-soounding combos. Could change that later
// ire ego [word] - Teleport to [rune with word destination matching] (works in pairs)
// nahlizet veri certum - Create a new tome
// jatkaa veri ego - Incorporate person over the rune into the group
// certum jatkaa ego - Summon TERROR
// nahlizet ire certum - EMP rune
examine()
set src in usr
if(!cultists.Find(usr))
src.desc = text("A strange collection of symbols drawn in blood.")
else
src.desc = "A spell circle drawn in blood. It reads: <i>[word1] [word2] [word3]</i>."
..()
return
attackby(I as obj, user as mob)
if(istype(I, /obj/item/weapon/tome) && cultists.Find(user))
user << "You retrace your steps, carefully undoing the lines of the rune."
del(src)
return
else if(istype(I, /obj/item/weapon/storage/bible) && usr.mind && (usr.mind.assigned_role == "Chaplain"))
user << "\blue You banish the vile magic with the blessing of God!"
del(src)
return
return
attack_hand(mob/user as mob)
if(!cultists.Find(user))
user << "You can't mouth the arcane scratchings without fumbling over them."
return
if(!word1 || !word2 || !word3 || prob(usr.brainloss))
return fizzle()
if(word1 == "ire" && word2 == "ego")
usr.say("Sas'so c'arta forbici!")
for(var/obj/rune/R in world)
if(R == src)
continue
if(R.word3 == src.word3 && R.word1 == src.word1 && R.word2 == src.word2)
for (var/mob/V in viewers(src))
V.show_message("\red [user] disappears in a flash of red light!", 3, "\red You hear a sickening crunch and sloshing of viscera.", 2)
user.loc = R.loc
return
return fizzle()
if(word1 == "nahlizet" && word2 == "veri" && word3 == "certum")
usr.say("N'ath reth sh'yro eth d'raggathnor!")
for (var/mob/V in viewers(src))
V.show_message("\red There's a flash of red light. The rune disappears, and in its place a book lies", 3, "\red You hear a pop and smell ozone.", 2)
new /obj/item/weapon/tome(src.loc)
del(src)
/*
if(word1 == "ire" && word2 == "certum" && word3 == "jatkaa")
var/list/temprunes = list()
var/list/runes = list()
for(var/obj/rune/R in world)
if(istype(R, /obj/rune))
if(R.word1 == "ire" && R.word2 == "certum" && R.word3 == "jatkaa")
runes.Add(R)
var/atom/a = get_turf_loc(R)
temprunes.Add(a.loc)
var/chosen = input("Scry which rune?", "Scrying") in temprunes
if(!chosen)
return fizzle()
var/selection_position = temprunes.Find(chosen)
var/obj/rune/chosenrune = runes[selection_position]
user.client.eye = chosenrune
user:current = chosenrune
user.reset_view(chosenrune)
*/
return
if(word1 == "jatkaa" && word2 == "veri" && word3 == "ego")
usr.say("Mah'weyh pleggh at e'ntrath!")
for(var/mob/living/carbon/human/M in src.loc)
if(cultists.Find(M))
return fizzle()
else
cultists.Add(M)
for (var/mob/V in viewers(src))
V.show_message("\red [M] writhes in pain as the markings below him glow a bloody red.", 3, "\red You hear an anguished scream.", 2)
M << "<font color=\"purple\"><b><i>Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible truth. The veil of reality has been ripped away and in the festering wound left behind something sinister takes root.</b></i></font>"
M<< "<font color=\"purple\"><b><i>Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back.</b></i></font>"
return
if(word1 == "certum" && word2 == "jatkaa" && word3 == "ego")
usr.say("Tok-lyr rqa'nap g'lt-ulotf!")
var/cultist_count = 0
for(var/mob/M in orange(1,src))
if(cultists.Find(M))
cultist_count += 1
if(cultist_count >= 6)
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
message_admins("<h1><font color=\"purple\"><b><u>[key_name_admin(usr)] has summoned a Tear in the Fabric of Reality!", 1)
log_game("[key_name_admin(usr)] has summoned a Tear in the Fabric of Reality!")
return
else
return fizzle()
if(word1 == "nahlizet" && word2 == "ire" && word3 == "certum")
usr.say("ta'gh fara'qha fel d'amar det!")
playsound(src.loc, 'Welder2.ogg', 25, 1)
var/turf/T = get_turf(src)
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-1, 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-1, T))
if(!istype(M, /mob/living)) continue
if (istype(M, /mob/living/silicon))
M.fireloss += 25
flick("noise", M:flash)
M << "\red <B>*BZZZT*</B>"
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 <B>Your equipment malfunctions.</B>" //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 <B>Your thermals malfunction.</B>"
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 <B>Your jumpsuit malfunctions</B>"
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 <B>BZZZT</B>"
for(var/obj/machinery/A in range(world.view-1, 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
else
return fizzle()
proc
fizzle()
usr.say(pick("B'ADMINES SP'WNIN SH'T","IC'IN O'OC","RO'SHA'M I'SA GRI'FF'N ME'AI","TOX'IN'S O'NM FI'RAH","IA BL'AME TOX'IN'S","FIR'A NON'AN RE'SONA","A'OI I'RS ROUA'GE","LE'OAN JU'STA SP'A'C Z'EE SH'EF","IA PT'WOBEA'RD, IA A'DMI'NEH'LP"))
for (var/mob/V in viewers(src))
V.show_message("\red The markings pulse with a small burst of light, then fall dark.", 3, "\red You hear a faint fizzle.", 2)
return
check_icon()
if(word1 == "ire" && word2 == "ego")
icon_state = "2"
return
if(word1 == "jatkaa" && word2 == "veri" && word3 == "ego")
icon_state = "3"
return
if(word1 == "certum" && word2 == "jatkaa" && word3 == "ego")
icon_state = "3"
src.icon += rgb(100, 0 , 150)
return
if(word1 == "nahlizet" && word2 == "ire" && word3 == "certum")
icon_state = "2"
src.icon += rgb(0, 50 , 0)
return
icon_state = "1"
/obj/item/weapon/tome
name = "arcane tome"
icon_state ="tome"
throw_speed = 1
throw_range = 5
w_class = 3.0
flags = FPRINT | TABLEPASS
attack_self(mob/user as mob)
if(cultists.Find(user))
var/C = 0
for(var/obj/rune/N in world)
C++
if (C>=25)
switch(alert("The cloth of reality can't take that much of a strain. By creating another rune, you risk locally tearing reality apart, which would prove fatal to you. Do you still wish to scribe the rune?",,"Yes","No"))
if("Yes")
if(prob(C*5-100))
usr.emote("scream")
user << "\red A tear momentarily appears in reality. Before it closes, you catch a glimpse of that which lies beyond. That proves to be too much for your mind."
usr.gib(1)
return
if("No")
return
else
if(alert("Scribe a rune?",,"Yes","No")=="No")
return
var/list/words = list("ire", "ego", "nahlizet", "certum", "veri", "jatkaa")
var/w1
var/w2
var/w3
if(usr)
w1 = input("Write your first rune:", "Rune Scribing") in words
if(usr)
w2 = input("Write your second rune:", "Rune Scribing") in words
if(usr)
w3 = input("Write your third rune:", "Rune Scribing") in words
for (var/mob/V in viewers(src))
V.show_message("\red [user] slices open a finger and begins to chant and paint symbols on the floor.", 3, "\red You hear chanting.", 2)
user << "\red You slice open one of your fingers and begin drawing a rune on the floor whilst chanting the ritual that binds your life essence with the dark arcane energies flowing through the surrounding world."
user.bruteloss += 1
if(do_after(user, 50))
var/obj/rune/R = new /obj/rune(user.loc)
user << "\red You finish drawing the arcane markings of the Geometer."
R.word1 = w1
R.word2 = w2
R.word3 = w3
R.check_icon()
return
else
user << "The book seems full of illegible scribbles. Is this a joke?"
return
examine()
set src in usr
if(!cultists.Find(usr))
usr << "An old, dusty tome with frayed edges and a sinister looking cover."
else
usr << "The scriptures of Nar-Sie, The One Who Sees, The Geometer of Blood. Contains the details of every ritual his followers could think of. Most of these are useless, though."
/obj/item/weapon/paperscrap
name = "scrap of paper"
icon_state = "scrap"
throw_speed = 1
throw_range = 2
w_class = 1.0
flags = FPRINT | TABLEPASS
var
data
attack_self(mob/user as mob)
view_scrap(user)
examine()
set src in usr
view_scrap(usr)
proc/view_scrap(var/viewer)
viewer << browse(data)

View File

@@ -97,11 +97,10 @@ MEDICAL
H.UpdateDamageIcon() H.UpdateDamageIcon()
else else
H.UpdateDamage() H.UpdateDamage()
M.updatehealth()
else else
M.bruteloss = max(0, M.bruteloss - (src.heal_brute/2)) M.heal_organ_damage((src.heal_brute/2), (src.heal_burn/2))
M.fireloss = max(0, M.fireloss - (src.heal_burn/2))
M.updatehealth()
src.amount-- src.amount--
if (src.amount <= 0) if (src.amount <= 0)

View File

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

View File

@@ -266,6 +266,8 @@ var/showadminmessages = 1
var/dat = {"<B>What mode do you wish to play?</B><HR>"} var/dat = {"<B>What mode do you wish to play?</B><HR>"}
for (var/mode in config.modes) for (var/mode in config.modes)
dat += {"<A href='?src=\ref[src];c_mode2=[mode]'>[config.mode_names[mode]]</A><br>"} dat += {"<A href='?src=\ref[src];c_mode2=[mode]'>[config.mode_names[mode]]</A><br>"}
dat += {"<A href='?src=\ref[src];c_mode2=secret'>Secret</A><br>"}
dat += {"<A href='?src=\ref[src];c_mode2=random'>Random</A><br>"}
dat += {"Now: [master_mode]"} dat += {"Now: [master_mode]"}
usr << browse(dat, "window=c_mode") usr << browse(dat, "window=c_mode")
@@ -280,6 +282,7 @@ var/showadminmessages = 1
world << "\blue <b>The mode is now: [master_mode]</b>" world << "\blue <b>The mode is now: [master_mode]</b>"
world.save_mode(master_mode) world.save_mode(master_mode)
.(href, list("c_mode"=1))
if (href_list["monkeyone"]) if (href_list["monkeyone"])
if ((src.rank in list( "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master" ))) if ((src.rank in list( "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master" )))
@@ -634,7 +637,7 @@ var/showadminmessages = 1
alert("Is a Revolutionary!") alert("Is a Revolutionary!")
return return
if("cult") if("cult")
if(M.mind in current_mode:cult) if(M.mind in current_mode.cult)
alert("Is a Cultist!") alert("Is a Cultist!")
return return
if("wizard") if("wizard")
@@ -1957,24 +1960,15 @@ var/showadminmessages = 1
alert("[M.name] is not prisoned.") alert("[M.name] is not prisoned.")
/mob/proc/revive() /mob/proc/revive()
if(istype(src, /mob/living/carbon/human)) //src.fireloss = 0
var/mob/living/carbon/human/H = src
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()
src.fireloss = 0
src.toxloss = 0 src.toxloss = 0
src.bruteloss = 0 //src.bruteloss = 0
src.oxyloss = 0 src.oxyloss = 0
src.paralysis = 0 src.paralysis = 0
src.stunned = 0 src.stunned = 0
src.weakened =0 src.weakened =0
src.health = 100 //src.health = 100
src.updatehealth() src.heal_overall_damage(1000, 1000)
src.buckled = initial(src.buckled) src.buckled = initial(src.buckled)
src.handcuffed = initial(src.handcuffed) src.handcuffed = initial(src.handcuffed)
if(src.stat > 1) src.stat=0 if(src.stat > 1) src.stat=0

View File

@@ -221,7 +221,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
if(!wordtravel) if(!wordtravel)
runerandom() runerandom()
if(M) if(M)
if(cultists.Find(M)) if(M.mind in ticker.mode.cult)
return return
else else
if(alert("Spawn that person a tome?",,"Yes","No")=="Yes") if(alert("Spawn that person a tome?",,"Yes","No")=="Yes")
@@ -247,12 +247,11 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M << "\red You remembered one thing from the glimpse... [wordself] is self..." M << "\red You remembered one thing from the glimpse... [wordself] is self..."
if("8") if("8")
M << "\red You remembered one thing from the glimpse... [wordsee] is see..." M << "\red You remembered one thing from the glimpse... [wordsee] is see..."
cultists.Add(M)
if(M.mind) if(M.mind)
M.mind.special_role = "Cultist" M.mind.special_role = "Cultist"
ticker.mode.cult += M.mind
src << "Made [M] a cultist." src << "Made [M] a cultist."
if(ticker.mode.name == "cult")
ticker.mode:cult += M.mind
/client/proc/cmd_debug_del_all() /client/proc/cmd_debug_del_all()
set category = "Debug" set category = "Debug"

View File

@@ -421,26 +421,18 @@ TO DO: actually integrate random appearance and player preference save.
alert("Cannot revive a ghost") alert("Cannot revive a ghost")
return return
if(config.allow_admin_rev) if(config.allow_admin_rev)
if(istype(M, /mob/living/carbon/human)) //M.fireloss = 0
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.toxloss = 0
M.bruteloss = 0 //M.bruteloss = 0
M.oxyloss = 0 M.oxyloss = 0
M.paralysis = 0 M.paralysis = 0
M.stunned = 0 M.stunned = 0
M.weakened = 0 M.weakened = 0
M.radiation = 0 M.radiation = 0
M.health = 100 //M.health = 100
M.nutrition = 400 M.nutrition = 400
M.updatehealth() M.heal_overall_damage(1000, 1000)
//M.updatehealth()
M.buckled = initial(M.buckled) M.buckled = initial(M.buckled)
M.handcuffed = initial(M.handcuffed) M.handcuffed = initial(M.handcuffed)
if (M.stat > 1) if (M.stat > 1)

View File

@@ -16,11 +16,12 @@
set category = "Special Verbs" set category = "Special Verbs"
set name = "Ghost" set name = "Ghost"
set desc = "You cannot be revived as a ghost" set desc = "You cannot be revived as a ghost"
if(src.stat != 2) /*if(src.stat != 2) //this check causes nothing but troubles. Commented out for Nar-Sie's sake. --rastaf0
src << "Only dead people and admins get to ghost, and admins don't use this verb to ghost while alive." src << "Only dead people and admins get to ghost, and admins don't use this verb to ghost while alive."
return return*/
if(src.client) if(src.client)
src.client.mob = new/mob/dead/observer(src) src.client.mob = new/mob/dead/observer(src)
src.verbs -= /mob/proc/ghostize
return return
/mob/proc/adminghostize() /mob/proc/adminghostize()
@@ -79,7 +80,7 @@
src.client.clear_admin_verbs() src.client.clear_admin_verbs()
src.client.holder.state = 1 src.client.holder.state = 1
src.client.update_admins(rank) src.client.update_admins(rank)
if(cultists.Find(corpse) && corpse.ajourn==1 && corpse.health>-100) //checks if it's an astral-journeying cultistm if it is and he's not on an astral journey rune, re-entering won't work if(iscultist(corpse) && corpse.ajourn==1 && corpse.stat!=2) //checks if it's an astral-journeying cultistm if it is and he's not on an astral journey rune, re-entering won't work
var/S=0 var/S=0
for(var/obj/rune/R in world) for(var/obj/rune/R in world)
if(corpse.loc==R.loc && R.word1 == wordhell && R.word2 == wordtravel && R.word3 == wordself) if(corpse.loc==R.loc && R.word1 == wordhell && R.word2 == wordtravel && R.word3 == wordself)
@@ -90,6 +91,8 @@
if(corpse.ajourn) if(corpse.ajourn)
corpse.ajourn=0 corpse.ajourn=0
src.client.mob = corpse src.client.mob = corpse
if (corpse.stat==2)
src.verbs += /mob/proc/ghostize
del(src) del(src)
/mob/dead/observer/proc/dead_tele() /mob/dead/observer/proc/dead_tele()

View File

@@ -805,4 +805,9 @@ In all, this is a lot like the monkey code. /N
/mob/living/carbon/alien/heal_organ_damage(var/brute, var/burn) /mob/living/carbon/alien/heal_organ_damage(var/brute, var/burn)
bruteloss = max(0, bruteloss-brute) //HACK bruteloss = max(0, bruteloss-brute) //HACK
fireloss = max(0, fireloss-burn) //HACK fireloss = max(0, fireloss-burn) //HACK
src.updatehealth() src.updatehealth()
/mob/living/carbon/alien/take_organ_damage(var/brute, var/burn)
bruteloss += brute //HACK
fireloss += burn //HACK
src.updatehealth()

View File

@@ -45,7 +45,10 @@
m_type = 1 m_type = 1
if ("custom") if ("custom")
var/input = input("Choose an emote to display.") var/input = input("Choose an emote to display.") as text|null
if (!input)
return
input = sanitize(input)
var/input2 = input("Is this a visible or hearable emote?") in list("Visible","Hearable") var/input2 = input("Is this a visible or hearable emote?") in list("Visible","Hearable")
if (input2 == "Visible") if (input2 == "Visible")
m_type = 1 m_type = 1

View File

@@ -2761,6 +2761,10 @@ It can still be worn/put on as normal.
..() ..()
src.UpdateDamageIcon() src.UpdateDamageIcon()
/mob/living/carbon/human/take_organ_damage(var/brute, var/burn)
..()
src.UpdateDamageIcon()
/mob/living/carbon/human/proc/isarmored(var/datum/organ/external/def_zone) /mob/living/carbon/human/proc/isarmored(var/datum/organ/external/def_zone)
if(def_zone.name == "head") if(def_zone.name == "head")
if(src.head && istype(src.head,/obj/item/clothing/head/helmet)) if(src.head && istype(src.head,/obj/item/clothing/head/helmet))

View File

@@ -724,6 +724,13 @@
if(!src.druggy) if(!src.druggy)
src.see_invisible = 2 src.see_invisible = 2
else if (src.seer)
var/obj/rune/R = locate() in src.loc
if (istype(R) && R.word1 == wordsee && R.word2 == wordhell && R.word3 == wordjoin)
see_invisible = 15
else
seer = 0
see_invisible = 0
else if (istype(src.wear_mask, /obj/item/clothing/mask/gas/space_ninja)) else if (istype(src.wear_mask, /obj/item/clothing/mask/gas/space_ninja))
switch(src.wear_mask:mode) switch(src.wear_mask:mode)
if(1) if(1)

View File

@@ -709,4 +709,9 @@
/mob/living/carbon/monkey/heal_organ_damage(var/brute, var/burn) /mob/living/carbon/monkey/heal_organ_damage(var/brute, var/burn)
bruteloss = max(0, bruteloss-brute) //HACK bruteloss = max(0, bruteloss-brute) //HACK
fireloss = max(0, fireloss-burn) //HACK fireloss = max(0, fireloss-burn) //HACK
src.updatehealth()
/mob/living/carbon/monkey/take_organ_damage(var/brute, var/burn)
bruteloss += brute //HACK
fireloss += burn //HACK
src.updatehealth() src.updatehealth()

View File

@@ -47,7 +47,10 @@
m_type = 1 m_type = 1
if ("custom") if ("custom")
var/input = input("Choose an emote to display.") var/input = input("Choose an emote to display.") as text|null
if (!input)
return
input = sanitize(input)
var/input2 = input("Is this a visible or hearable emote?") in list("Visible","Hearable") var/input2 = input("Is this a visible or hearable emote?") in list("Visible","Hearable")
if (input2 == "Visible") if (input2 == "Visible")
m_type = 1 m_type = 1

View File

@@ -56,7 +56,10 @@
m_type = 2 m_type = 2
if ("custom") if ("custom")
var/input = input("Choose an emote to display.") var/input = input("Choose an emote to display.") as text|null
if (!input)
return
input = sanitize(input)
var/input2 = input("Is this a visible or hearable emote?") in list("Visible","Hearable") var/input2 = input("Is this a visible or hearable emote?") in list("Visible","Hearable")
if (input2 == "Visible") if (input2 == "Visible")
m_type = 1 m_type = 1

View File

@@ -56,7 +56,10 @@
m_type = 2 m_type = 2
if ("custom") if ("custom")
var/input = input("Choose an emote to display.") var/input = input("Choose an emote to display.") as text|null
if (!input)
return
input = sanitize(input)
var/input2 = input("Is this a visible or hearable emote?") in list("Visible","Hearable") var/input2 = input("Is this a visible or hearable emote?") in list("Visible","Hearable")
if (input2 == "Visible") if (input2 == "Visible")
m_type = 1 m_type = 1

View File

@@ -2256,16 +2256,74 @@ note dizziness decrements automatically in the mob's Life() proc.
var/datum/organ/external/def_zone = ran_zone(t) var/datum/organ/external/def_zone = ran_zone(t)
return def_zone return def_zone
// heal ONE external organ, organ gets randomly selected from damaged ones.
/mob/proc/heal_organ_damage(var/brute, var/burn) /mob/proc/heal_organ_damage(var/brute, var/burn)
var/list/parts = list() var/list/datum/organ/external/parts = list()
for(var/A in src.organs) for(var/organ_name in src.organs)
if(!src.organs[A]) continue var/datum/organ/external/organ = src.organs[organ_name]
var/datum/organ/external/affecting = src.organs[A] if((brute && organ.brute_dam) || (burn && organ.burn_dam))
if(!istype(affecting)) continue parts += organ
if((brute && affecting.brute_dam) || (burn && affecting.burn_dam))
parts += affecting
if(!parts.len) return if(!parts.len)
return
var/datum/organ/external/picked = pick(parts) var/datum/organ/external/picked = pick(parts)
picked.heal_damage(brute,burn) picked.heal_damage(brute,burn)
src.updatehealth() src.updatehealth()
// damage ONE external organ, organ gets randomly selected from damaged ones.
/mob/proc/take_organ_damage(var/brute, var/burn)
var/list/datum/organ/external/parts = list()
for(var/organ_name in src.organs)
var/datum/organ/external/organ = src.organs[organ_name]
if(organ.brute_dam + organ.burn_dam < organ.max_damage)
parts += organ
if(!parts.len)
return
var/datum/organ/external/picked = pick(parts)
picked.take_damage(brute,burn)
src.updatehealth()
// heal MANY external organs, in random order
/mob/proc/heal_overall_damage(var/brute, var/burn)
var/list/datum/organ/external/parts = list()
for(var/organ_name in src.organs)
var/datum/organ/external/organ = src.organs[organ_name]
if((brute && organ.brute_dam) || (burn && organ.burn_dam))
parts += organ
while(parts.len && (brute>0 || burn>0) )
var/datum/organ/external/picked = pick(parts)
var/brute_was = picked.brute_dam
var/burn_was = picked.burn_dam
picked.heal_damage(brute,burn)
brute -= (brute_was-picked.brute_dam)
burn -= (burn_was-picked.burn_dam)
parts -= picked
src.updatehealth()
// damage MANY external organs, in random order
/mob/proc/take_overall_damage(var/brute, var/burn)
var/list/datum/organ/external/parts = list()
for(var/organ_name in src.organs)
var/datum/organ/external/organ = src.organs[organ_name]
if(organ.brute_dam + organ.burn_dam < organ.max_damage)
parts += organ
while(parts.len && (brute>0 || burn>0) )
var/datum/organ/external/picked = pick(parts)
var/brute_was = picked.brute_dam
var/burn_was = picked.burn_dam
picked.take_damage(brute,burn)
brute -= (picked.brute_dam-brute_was)
burn -= (picked.burn_dam-burn_was)
parts -= picked
src.updatehealth()

View File

@@ -42,6 +42,8 @@
O.virus.affected_mob = O O.virus.affected_mob = O
if (src.client) if (src.client)
src.client.mob = O src.client.mob = O
if(src.mind)
src.mind.transfer_to(O)
O.a_intent = "hurt" O.a_intent = "hurt"
O << "<B>You are now a monkey.</B>" O << "<B>You are now a monkey.</B>"
var/prev_body = src var/prev_body = src