Added a spacesuit to syndie PDA summoning.

Further work on cultism.

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@263 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
uporotiy
2010-10-10 17:04:55 +00:00
parent aa57719d52
commit a3b50fc504
15 changed files with 1809 additions and 1213 deletions
@@ -666,6 +666,10 @@
name = "Control Room"
icon_state = "bridge"
/area/derelict/secret
name = "Secret Room"
icon_state = "library"
/area/derelict/bridge/access
name = "Control Room Access"
icon_state = "auxstorage"
+1
View File
@@ -53,6 +53,7 @@
var/stuttering = null
var/real_name = null
var/blinded = null
var/bhunger = 0
var/rejuv = null
var/druggy = 0
var/confused = 0
+204
View File
@@ -0,0 +1,204 @@
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
// mgar - technology
// balaq - destroy
// 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
// balaq nahlizet mgar - EMP rune
// ire veri ego - Drain blood
// nahlizet certum jatkaa - See invisible
// veri jatkaa certum - Raise dead
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")
return teleport(src.word3)
if(word1 == "nahlizet" && word2 == "veri" && word3 == "certum")
return tomesummon()
/*
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)
*/
if(word1 == "jatkaa" && word2 == "veri" && word3 == "ego")
return convert()
if(word1 == "certum" && word2 == "jatkaa" && word3 == "ego")
return tearreality()
if(word1 == "balaq" && word2 == "nahlizet" && word3 == "mgar")
return emp()
if(word1 == "ire" && word2 == "veri" && word3 == "ego")
return drain()
if(word1 == "nahlizet" && word2 == "certum" && word3 == "jatkaa")
return seer()
if(word1 == "veri" && word2 == "jatkaa" && word3 == "certum")
return raise()
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", "balaq", "mgar")
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)
+48
View File
@@ -0,0 +1,48 @@
/obj/rune/proc/teleport(var/key)
for(var/obj/rune/R in world)
if(R == src)
continue
if(R.word3 == key && R.word1 == src.word1 && R.word2 == src.word2)
usr.say("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 = R.loc
return
return fizzle()
/* var/allrunes[]
var/index = 0
for(var/obj/rune/R in world)
if(R == src)
continue
if(R.word3 == key && R.word1 == src.word1 && R.word2 == src.word2)
allrunes[index] = R.loc
index++
if(allrunes)
usr.say("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 = allrunes[rand(allrunes.len)]
return
return fizzle()*/ //Doesn't work for some raisin
/* var/list/allrunesx
var/list/allrunesy
var/tempnum
var/count = 0
for(var/obj/rune/R in world)
if(R == src)
continue
if(R.word3 == key && R.word1 == src.word1 && R.word2 == src.word2)
allrunesx += R.x
allrunesy += R.y
count++
if(allrunesx && allrunesy)
usr.say("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)
tempnum = rand(1,count)
usr.x = allrunesx[tempnum]
usr.y = allrunesy[tempnum]
return
return fizzle()*/
+7
View File
@@ -0,0 +1,7 @@
/obj/rune/proc/tomesummon()
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)
return
+12
View File
@@ -0,0 +1,12 @@
/obj/rune/proc/convert()
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
+17
View File
@@ -0,0 +1,17 @@
/obj/rune/proc/tearreality()
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)
return
else
return fizzle()
+185
View File
@@ -0,0 +1,185 @@
/obj/rune/proc/emp()
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
+25
View File
@@ -0,0 +1,25 @@
/obj/rune/proc/drain()
var/drain = 0
for(var/obj/rune/R in world)
for(var/mob/living/carbon/D in R.loc)
if(D.health>=-100)
var/bdrain = rand(1,25)
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
+5
View File
@@ -0,0 +1,5 @@
/obj/rune/proc/seer()
usr.say("Rash'tla sektath mal'zua. Zasan therium vivira. Itonis al'ra matum!")
usr << "\red The world beyond opens to your eyes."
usr.see_invisible = 15
return
+46
View File
@@ -0,0 +1,46 @@
/obj/rune/proc/raise()
usr.say("Pasnar val'keriam usinar. Savrae ines amutan. Yam'toth remium il'tarat!")
for(var/mob/living/carbon/human/M in src.loc)
if(M.health<=-100)
for(var/obj/rune/R in world)
for(var/mob/living/carbon/human/N in R.loc)
if(N.health>-100 && M.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
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
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()
+6
View File
@@ -1603,6 +1603,7 @@ Code:
src.menu_message += "<A href='byond://?src=\ref[src];buy_item=bomb'>Low-Yield Bomb</A> (4)<BR>"
src.menu_message += "<A href='byond://?src=\ref[src];buy_item=powersink'>Power Sink</A> (5)<BR>"
src.menu_message += "<A href='byond://?src=\ref[src];buy_item=detomatix'>Detomatix Cartridge</A> (3)<BR>"
src.menu_message += "<A href='byond://?src=\ref[src];buy_item=space'>Syndicate-made Space Suit (inludes a helmet)</A> (3)<BR>"
src.menu_message += "<HR>"
return
@@ -1693,6 +1694,11 @@ Code:
if (src.uses >= 3)
src.uses -= 3
new /obj/item/weapon/cartridge/syndicate(get_turf(src.hostpda))
if("space")
if (src.uses >= 3)
src.uses -= 3
new /obj/item/clothing/suit/space/syndicate(get_turf(src.hostpda))
new /obj/item/clothing/head/helmet/space/syndicate(get_turf(src.hostpda))
src.generate_menu()
src.print_to_host(src.menu_message)
return
+6 -1
View File
@@ -704,7 +704,12 @@
//see_invisible regulated by drugs themselves.
else
src.see_in_dark = 2
src.see_invisible = 0
var/seer = 0
for(var/obj/rune/R in world)
if(src.loc==R.loc && R.word1=="nahlizet" && R.word2=="certum" && R.word3=="jatkaa")
seer = 1
if(!seer)
src.see_invisible = 0
if (src.sleep) src.sleep.icon_state = text("sleep[]", src.sleeping)
if (src.rest) src.rest.icon_state = text("rest[]", src.resting)